Radix cross Linux

The main Radix cross Linux repository contains the build scripts of packages, which have the most complete and common functionality for desktop machines

452 Commits   2 Branches   1 Tag   |
Index: Makefile
===================================================================
--- Makefile	(nonexistent)
+++ Makefile	(revision 5)
@@ -0,0 +1,13 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+SOURCE_REQUIRES += ALL_DIRS
+
+
+include ../../build-system/core.mk
+
+
+download_clean:
+	@true
+
+.PHONY: download_clean
Index: a/Makefile
===================================================================
--- a/Makefile	(nonexistent)
+++ a/Makefile	(revision 5)
@@ -0,0 +1,13 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+SOURCE_REQUIRES += ALL_DIRS
+
+
+include ../../../build-system/core.mk
+
+
+download_clean:
+	@true
+
+.PHONY: download_clean
Index: a/acl/Makefile
===================================================================
--- a/acl/Makefile	(nonexistent)
+++ a/acl/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/acl
+
+versions    = 2.2.53
+pkgname     = acl
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: a/acl
===================================================================
--- a/acl	(nonexistent)
+++ a/acl	(revision 5)

Property changes on: a/acl
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/adjtimex/Makefile
===================================================================
--- a/adjtimex/Makefile	(nonexistent)
+++ a/adjtimex/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/adjtimex
+
+version     = 1.29
+pkgname     = adjtimex
+suffix      = tar.xz
+
+tarball     = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(version)))
+sha1s       = $(addsuffix .sha1sum, $(tarball))
+
+patches      = $(CURDIR)/patches/adjtimex-1.29.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarball) $(patches) $(sha1s)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarball):
+	@echo -e "\n======= Downloading $(tarball) file =======" ; \
+	 for tarball in $(tarball) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarball)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-1.29-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarball) $(sha1s) $(patches)
Index: a/adjtimex/create-1.29-patch/adjtimex-1.29-new/adjtimex.c
===================================================================
--- a/adjtimex/create-1.29-patch/adjtimex-1.29-new/adjtimex.c	(nonexistent)
+++ a/adjtimex/create-1.29-patch/adjtimex-1.29-new/adjtimex.c	(revision 5)
@@ -0,0 +1,2264 @@
+/*
+#define DEBUG
+
+	adjtimex - display or set the kernel time variables
+
+
+	AUTHORS
+		ssd at nevets.oau.org (Steven S. Dick)
+		jrvz at comcast.net (Jim Van Zandt)
+
+		TODO: review code controlled by DEBUG and possibly
+		change control to verbose flag.
+*/
+
+#define _GNU_SOURCE		/* strptime is a GNU extension */
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <mat.h>
+#include <math.h>
+#include <netdb.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/timex.h>
+#include <sys/types.h>
+#include <syscall.h>
+#include <time.h>
+#include <signal.h>
+#include <unistd.h>
+#include <utmp.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include "config.h"
+#ifdef HAVE_LINUX_RTC_H
+#include <linux/rtc.h>
+#else
+struct rtc_time {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	int tm_year;
+	int tm_wday;
+	int tm_yday;
+	int tm_isdst;
+};
+#define RTC_UIE_ON   _IO('p', 0x03)	/* Update int. enable on	*/
+#define RTC_UIE_OFF  _IO('p', 0x04)	/* ... off			*/
+#define RTC_PIE_OFF  _IO('p', 0x06)	/* Periodic int. enable off	*/
+#define RTC_RD_TIME  _IOR('p', 0x09, struct rtc_time) /* Read RTC time  */
+#endif /* HAVE_LINUX_RTC_H */
+
+int F_print = 0;
+
+#ifndef LOG_PATH
+#define LOG_PATH "/var/log/clocks.log"
+#endif
+#ifndef WTMP_PATH
+#define WTMP_PATH "/var/log/wtmp"
+#endif
+ 
+ /* Here the information for CMOS clock adjustments is kept. */
+#define ADJPATH "/etc/adjtime"
+
+ /* used for debugging the code. */
+ /* #define DEBUG */
+
+#define RTC_JITTER .000025	/* assumed error in reading CMOS clock (sec) */
+#define SECONDSPERDAY 86400
+#define BUFLEN 128
+
+#ifndef USE_INLINE_ASM_IO
+static int port_fd = -1;	/* used to access the RTC via /dev/port I/O */
+#endif
+static char *cmos_device;	/* filename of the RTC device */
+static int cmos_fd = -1;
+
+struct hack {
+  double ref;			/* reference time for time hack */
+  double sigma_ref;		/* expected error in above (or zero if
+				   no reference time available) */
+  time_t log;			/* reference time as time_t */
+  double sys;			/* system time */
+  int tick;			/* "tick" system parameter */
+  int freq;			/* "freq" system parameter */
+  char sys_ok;			/* nonzero if system clock undisturbed
+				   during previous period */
+  double cmos;			/* CMOS time */
+  char cmos_ok;			/* nonzero if cmos clock undisturbed
+				   during previous period */
+  char valid;			/* bit flags (see below) */
+  double sys_rate, sys_sigma;
+  double cmos_rate, cmos_sigma;
+  double relative_rate, relative_sigma;
+} prev;
+
+/* constants for `valid' member of struct hack */
+#define CMOS_VALID 1
+#define SYS_VALID 2
+#define REF_VALID 4
+
+struct cmos_adj
+{
+  double ca_factor;
+  long ca_adj_time;
+  double ca_remainder;
+} ca;
+
+struct timex txc;
+
+/* command line option variables */
+
+static int using_dev_rtc = -1;	/* 0 = not using /dev/rtc
+				 1 = using /dev/rtc
+				-1 = will use /dev/rtc if available,
+				     but have not tried to open it yet */
+static int nointerrupt = 0;	/* 0 = try to detect RTC tick via interrupt
+				   1 = via another method */
+
+int adjusting = 0;
+int force_adjust;
+int comparing = 0;
+int logging = 0;
+int reviewing = 0;
+int resetting = 0;		/* nonzero if need to call
+				   reset_time_status() */
+int interval = 10;
+int count = 8;
+int marked;
+int universal = 0;
+int verbose = 0;
+int watch;			/* nonzero if time specified on command line */
+int undisturbed_sys = 0;
+int undisturbed_cmos = 0;
+char *log_path = LOG_PATH;
+
+char *timeserver;		/* points to name of timeserver */
+
+enum {HELP=131};
+
+struct option longopt[]=
+{
+  {"adjust", 2, NULL, 'a'},
+  {"force-adjust", 0, &force_adjust, 1},
+  {"compare", 2, NULL, 'c'},
+  {"log", 2, NULL, 'l'},
+  {"esterror", 1, NULL, 'e'},
+  {"frequency", 1, NULL, 'f'},
+  {"host", 1, NULL, 'h'},
+  {"help", 0, NULL, HELP},
+  {"interval", 1, NULL, 'i'},
+  {"maxerror", 1, NULL, 'm'},
+  {"offset", 1, NULL, 'o'},
+  {"print", 0, NULL, 'p'},
+  {"review", 2, NULL, 'r'},
+  {"singleshot", 1, NULL, 's'},
+  {"status", 1, NULL, 'S'},
+  {"reset", 0, NULL, 'R'},
+  {"timeconstant", 1, NULL, 'T'},
+  {"tick", 1, NULL, 't'},
+  {"utc", 0, NULL, 'u'},
+  {"directisa", 0, NULL, 'd'},
+  {"nointerrupt", 0, NULL, 'n'},
+  {"version", 0, NULL, 'v'},
+  {"verbose", 0, NULL, 'V'},
+  {"watch", 0, NULL, 'w'},
+  {0,0,0,0}
+};
+
+static void usage(void);
+static inline void outb (short port, char val);
+static inline void outb (short port, char val);
+static inline unsigned char inb (short port);
+static void cmos_init ();
+static void cmos_init_directisa ();
+static inline int cmos_read_bcd (int addr);
+static void cmos_read_time (time_t *cmos_timep, double *sysp);
+static void busywait_uip_fall(struct timeval *timestamp);
+static void busywait_second_change(struct tm *cmos, struct timeval *timestamp);
+static void compare(void);
+static void failntpdate();
+static void reset_time_status(void);
+static struct cmos_adj *get_cmos_adjustment(void);
+static void log_times(void);
+static int valid_system_rate(double ftime_sys, double ftime_ref, double sigma_ref);
+static int valid_cmos_rate(double ftime_cmos, double ftime_ref, double sigma_ref);
+static void sethackent(void);
+static void endhackent(void);
+static struct hack *gethackent(void);
+static void puthackent(struct hack *ph);
+static time_t mkgmtime(struct tm *tp);
+static int compare_tm(struct tm *first, struct tm *second);
+static void *xmalloc(int n);
+static void *xrealloc(void *pv, int n);
+static void review(void);
+static void kalman_update(double *x, int xr, double *p, double *h,
+			  double *z, int zr, double *r);
+
+
+void
+usage(void)
+{
+  char msg[]=
+"\n"
+"Usage: adjtimex  [OPTION]... \n"
+"Mandatory or optional arguments to long options are mandatory or optional\n"
+"for short options too.\n"
+"\n"
+"Get/Set Kernel Time Parameters:\n"
+"       -p, --print               print values of kernel time variables\n"
+"       -t, --tick val            set the kernel tick interval in usec\n"
+"       -f, --frequency newfreq   set system clock frequency offset\n"
+"       -s, --singleshot adj      slew the system clock by adj usec\n"
+"       -S, --status val          set kernel clock status\n"
+"       -R, --reset               reset status after setting parameters\n"
+"                                 (needed for early kernels)\n"
+"       -o, --offset adj          add a time offset of adj usec\n"
+"       -m, --maxerror val        set maximum error (usec)\n"
+"       -e, --esterror val        set estimated error (usec)\n"
+"       -T, --timeconstant val    set phase locked loop time constant\n"
+"       -a, --adjust[=count]      set system clock parameters per CMOS \n"
+"                                 clock or (with --review) log file\n"
+"       --force-adjust            override +-1 percent sanity check\n"
+"\n"
+"Estimate Systematic Drifts:\n"
+"       -c, --compare[=count]     compare system and CMOS clocks\n"
+"       -i, --interval tim        set clock comparison interval (sec)\n"
+"       -l, --log[=file]          log current times to file\n"
+"       -h, --host timeserver     query the timeserver\n"
+"       -w, --watch               get current time from user\n"
+"       -r, --review[=file]       review clock log file, estimate drifts\n"
+"       -u, --utc                 the CMOS clock is set to UTC\n"
+"       -d, --directisa           access the CMOS clock directly\n"
+"       -n, --nointerrupt         bypass the CMOS clock interrupt access method\n"
+"\n"
+"Informative Output:\n"
+"           --help                print this help, then exit\n"
+"       -v, --version             print adjtimex program version, then exit\n"
+"       -V, --verbose             increase verbosity\n"
+;
+
+  fputs(msg, stdout);
+  exit(0);
+}
+
+/* return apparent value of USER_HZ in HZ, minimum nominal and maximum
+   values for tick in TICK_MIN TICK_MID and TICK_MAX, and maximum
+   frequency offset in MAXFREQ */
+static 
+void probe_time(int *hz, int *tick_min, int *tick_mid, int *tick_max,
+		long *maxfreq)
+{
+  struct timex txc;
+  int tick_orig, tick_lo, tick_try, tick_hi, i;
+
+  txc.modes = 0;
+  adjtimex(&txc);		/* fetch original value */
+  txc.modes = ADJ_TICK;
+  if (adjtimex(&txc) == -1) 	/* try setting with no change */
+    {
+      perror("adjtimex");
+      exit(1);
+    }
+
+  *maxfreq = txc.tolerance;
+  tick_orig = tick_hi = txc.tick;
+  tick_lo = tick_hi*2/3;
+  for (i = 0; i < 15; i++)
+    {			/* conduct binary search for minimum
+			   accepted tick value */
+//      printf(" %d < minimum accepted tick value <= %d\n", tick_lo, tick_hi);
+      txc.tick = tick_try = (tick_lo + tick_hi)/2;
+      txc.modes = ADJ_TICK;
+      if (adjtimex(&txc) == -1) tick_lo = tick_try;
+      else tick_hi = tick_try;
+    }
+  *tick_min = tick_hi;
+  tick_lo = tick_orig;
+  tick_hi = tick_lo*4/3;
+  for (i = 0; i < 15; i++)
+    {			/* conduct binary search for maximum
+			   accepted tick value */
+//      printf(" %d <= maximum accepted tick value < %d\n", tick_lo, tick_hi);
+      txc.tick = tick_try = (tick_lo + tick_hi)/2;
+      txc.modes = ADJ_TICK;
+      if (adjtimex(&txc) == -1) tick_hi = tick_try;
+      else tick_lo = tick_try;
+    }
+  *tick_max = tick_lo;
+  *tick_mid = (*tick_min + *tick_max)/2;
+  *hz = (900000/ *tick_min + 1100000/ *tick_max)/2;
+
+  txc.tick = tick_orig;
+  txc.modes = ADJ_TICK;
+  adjtimex(&txc);		/* reset to original value */
+}
+
+int
+main(int argc, char *argv[])
+{
+    int ret, saveerr, changes;
+    extern char *optarg;
+    int c;
+
+    txc.modes = 0;
+
+    while((c = getopt_long_only(argc, argv, 
+				"a::c::l::e:f:h:i:m:o:pr::s:S:RT:t:udvVw", 
+				longopt, NULL)) != -1)
+      {
+	switch(c)
+	  {
+	  case 0: break;	/* options that just set a variable
+				   are handled in longopt */
+	  case 'a':
+	    adjusting = 1;
+	    if (optarg)
+	      count = atoi(optarg);
+	    break;
+	  case 'c':
+	    comparing = 1;
+	    if (optarg)
+	      count = atoi(optarg);
+	    break;
+	  case 'l':
+	    logging = 1;
+	    if (optarg)
+	      log_path = strdup(optarg);
+	    if (!log_path)
+	      {
+		fprintf (stderr, "insufficient memory\n");
+		exit(1);
+	      }
+	    break;
+	  case 'h':
+	    timeserver = strdup(optarg);
+	    if (!timeserver)
+	      {
+		fprintf (stderr, "insufficient memory\n");
+		exit(1);
+	      }
+	    logging = 1;
+	    break;
+	  case 'r':
+	    reviewing = 1;
+	    if (optarg)
+	      log_path = strdup(optarg);
+	    if (!log_path)
+	      {
+		fprintf (stderr, "insufficient memory\n");
+		exit(1);
+	      }
+	    break;
+	  case 'i':
+	    interval = atoi (optarg);
+	    if (interval <= 1 || interval > 1000)
+	      {
+		fprintf (stderr, "repeat interval out of range\n");
+		exit (1);
+	      }
+	    break;
+	  case 'p':
+	    F_print = 1;
+	    break;
+	  case 'o':
+	    txc.offset = atol(optarg);
+	    txc.modes |= ADJ_OFFSET;
+	    break;
+	  case 's':
+	    txc.offset = atol(optarg);
+	    txc.modes |= ADJ_OFFSET_SINGLESHOT;
+	    break;
+	  case 'S':
+	    txc.status = atol(optarg);
+	    txc.modes |= ADJ_STATUS;
+	    break;
+	  case 'R': resetting = 1; break;
+	  case 'f':
+	    txc.freq = atol(optarg);
+	    txc.modes |= ADJ_FREQUENCY;
+	    break;
+	  case 'm':
+	    txc.maxerror = atol(optarg);
+	    txc.modes |= ADJ_MAXERROR;
+	    break;
+	  case 'e':
+	    txc.esterror = atol(optarg);
+	    txc.modes |= ADJ_ESTERROR;
+	    break;
+	  case 'T':
+	    txc.constant = atol(optarg);
+	    txc.modes |= ADJ_TIMECONST;
+	    break;
+	  case 't':
+	    txc.tick = atol(optarg);
+	    txc.modes |= ADJ_TICK;
+	    break;
+	  case 'u':
+	    universal = 1;
+	    break;
+	  case 'd':
+	    using_dev_rtc = 0;
+	    break;
+	  case 'n':
+	    nointerrupt = 1;
+	    break;
+	  case 'v':
+	    {
+	      printf("adjtimex %s\n", VERSION);
+	      exit(0);
+	    }
+	  case 'V':
+	    verbose++;
+	    break;
+	  case 'w':
+	    watch = 1;
+	    logging = 1;
+	    break;
+	  case HELP:
+	    usage();
+	    break;
+	  case '?':
+	  default:
+	    fprintf(stderr, "Unrecognized option %s\nFor valid "
+		    "options, try 'adjtimex --help'\n", argv[optind-1]);
+	    exit(1);
+	  }
+	}
+
+    changes = txc.modes;
+
+    if (count <= 0 ) {
+      fprintf(stderr, "loop count out of range\n");
+      exit(1);
+    }
+
+    if (reviewing)
+      {
+	review();
+	exit(0);
+      }
+
+    if (adjusting || comparing)
+      {
+	if (changes || F_print)
+	  {
+	    fprintf(stderr, 
+"-adjust or -compare cannot be used with any other options that"
+" set values\n");
+	    exit(1);
+	  }
+	compare();
+      }    
+
+    if (logging)
+      {
+	/*
+	if (geteuid() != 0)
+	  {
+	    fprintf(stderr, "sorry, only root can record clock comparisons\n");
+	    exit(1);
+	  }
+	  */
+	log_times();
+	exit(0);
+      }
+
+    if ((txc.modes & ADJ_OFFSET_SINGLESHOT) == ADJ_OFFSET_SINGLESHOT && 
+	txc.modes != ADJ_OFFSET_SINGLESHOT)
+      {
+	fprintf(stderr, "-singleshot cannot be used with "
+		"any other option except -print\n");
+	usage();
+      }
+
+    errno = 0;
+    ret = adjtimex(&txc);
+    saveerr = errno;
+    if (F_print) {
+	printf("         mode: %d\n"
+	       "       offset: %ld\n"
+	       "    frequency: %ld\n"
+	       "     maxerror: %ld\n"
+	       "     esterror: %ld\n"
+	       "       status: %d\n"
+	       "time_constant: %ld\n"
+	       "    precision: %ld\n"
+	       "    tolerance: %ld\n"
+	       "         tick: %ld\n"
+	       "     raw time:  %ds %dus = %d.%06d\n",
+	       txc.modes,
+	       txc.offset,
+	       txc.freq,
+	       txc.maxerror,
+	       txc.esterror,
+	       txc.status,
+	       txc.constant,
+	       txc.precision,
+	       txc.tolerance,
+	       txc.tick,
+	       (int)txc.time.tv_sec, 
+	       (int)txc.time.tv_usec,
+	       (int)txc.time.tv_sec, 
+	       (int)txc.time.tv_usec);
+	if (saveerr == 0 && ret != 0)
+	    printf(" return value = %d\n", ret);
+    }
+    if (ret != 0 && saveerr != 0) {
+	if (ret != -1)
+	    fprintf(stderr, "%d ", ret);
+	errno = saveerr;
+	perror("adjtimex");
+	{
+	  int hz, tick_min, tick_mid, tick_max;
+	  long maxfreq;
+	  probe_time(&hz, &tick_min, &tick_mid, &tick_max, &maxfreq);
+	  
+	  printf("for this kernel:\n"
+		 "   USER_HZ = %d (nominally %d ticks per second)\n"
+		 "   %d <= tick <= %d\n"
+		 "   %ld <= frequency <= %ld\n",
+		 hz, hz, tick_min, tick_max, -maxfreq, maxfreq);
+	}
+	exit(1);
+    }
+    if (changes && resetting)
+      reset_time_status();
+
+    return 0;
+}
+
+static inline void
+outb (short port, char val)
+{
+#ifdef USE_INLINE_ASM_IO
+  __asm__ volatile ("out%B0 %0,%1"::"a" (val), "d" (port));
+
+#else
+  lseek (port_fd, port, 0);
+  write (port_fd, &val, 1);
+#endif
+}
+
+static inline unsigned char
+inb (short port)
+{
+  unsigned char ret;
+
+#ifdef USE_INLINE_ASM_IO
+  __asm__ volatile ("in%B0 %1,%0":"=a" (ret):"d" (port));
+
+#else
+  lseek (port_fd, port, 0);
+  read (port_fd, &ret, 1);
+#endif
+  return ret;
+}
+
+/*
+ * Main initialisation of CMOS clock access methods, for all modes.
+ * Set the global variable cmos_device to the first available RTC device
+ * driver filename (/dev/rtc, /dev/rtc0, etc.), and set cmos_fd to
+ * a file descriptor for it.
+ * Failing that, select and initialize direct I/O ports mode.
+ */
+static
+void cmos_init ()
+{
+/*
+ following explanation taken from hwclock sources:
+ /dev/rtc is conventionally chardev 10/135
+ ia64 uses /dev/efirtc, chardev 10/136
+ devfs (obsolete) used /dev/misc/... for miscdev
+ new RTC framework + udev uses dynamic major and /dev/rtc0.../dev/rtcN
+*/
+  char *fls[] = {
+#ifdef __ia64__
+    "/dev/efirtc",
+    "/dev/misc/efirtc",
+#endif
+    "/dev/rtc",
+    "/dev/rtc0",
+    "/dev/misc/rtc",
+    NULL
+  };
+  char **p=fls;
+
+  if (using_dev_rtc < 0)
+    {
+      while ((cmos_device=*p++))
+	{
+	  cmos_fd = open (cmos_device, O_RDONLY);
+	  if (cmos_fd >= 0)
+	    {
+	      if (verbose)
+		fprintf (stdout, "opened %s for reading\n", cmos_device);
+	      using_dev_rtc = 1;
+	      return;
+	    }
+	  if (verbose)
+	    {
+	      int saveerr=errno;
+	      fprintf (stdout, "adjtimex: cannot open %s for reading\n", 
+		       cmos_device);
+	      errno = saveerr;
+	      perror("adjtimex");
+	    }
+	}
+
+      using_dev_rtc = 0;
+    }
+  else if (using_dev_rtc > 0)
+    return;
+
+  /* otherwise do direct I/O */
+  cmos_init_directisa();
+}
+
+/*
+ * Initialise CMOS clock access method, only for direct I/O ports mode.
+ * Set the global variable port_fd to a file descriptor for /dev/port.
+ * This function can safely be called repeatedly (does nothing the
+ * second and following times).
+ */
+static
+void cmos_init_directisa ()
+{
+#ifdef USE_INLINE_ASM_IO
+  if (verbose)
+    fprintf (stdout, "using I/O ports\n");
+
+  if (ioperm (0x70, 2, 1))
+    {
+      fprintf (stderr, "adjtimex: unable to get I/O port access\n");
+      exit (1);
+    }
+#else
+  if (port_fd >= 0)	/* already initialised */
+    return;
+
+  if (verbose)
+    fprintf (stdout, "using /dev/port I/O\n");
+
+  if (port_fd < 0)
+    port_fd = open ("/dev/port", O_RDWR);
+  if (port_fd < 0)
+    {
+      perror ("adjtimex: unable to open /dev/port read/write");
+      exit (1);
+    }
+  if (verbose)
+    fprintf (stdout, "opened /dev/port for reading\n");
+
+  if (lseek (port_fd, 0x70, 0) < 0 || lseek (port_fd, 0x71, 0) < 0)
+    {
+      perror ("adjtimex: unable to seek port 0x70 in /dev/port");
+      exit (1);
+    }
+#endif
+}
+
+#define CMOS_READ(addr)      ({outb(0x70,(addr)|0x80); inb(0x71);})
+
+static inline int
+cmos_read_bcd (int addr)
+{
+  int b;
+
+  b = CMOS_READ (addr);
+  return (b & 15) + (b >> 4) * 10;
+}
+
+static int timeout;	/* An alarm signal has occurred */
+
+static void
+alarm_handler (int const dummy) {
+  timeout = 1;
+}
+
+/*
+ * starts (or cancels) a 2 second timeout period
+ * the global boolean timeout indicates that the timeout has been reached
+ */
+static void
+alarm_timeout (int onoff) {
+  static struct sigaction oldaction;
+
+  if (onoff)
+    {
+      struct sigaction action;
+
+      action.sa_handler = &alarm_handler;
+      sigemptyset(&action.sa_mask);
+      action.sa_flags = 0;
+      sigaction(SIGALRM, &action, &oldaction);	/* Install our signal handler */
+
+      timeout = 0;	/* reset global timeout flag */
+      alarm(2);		/* generate SIGALARM 2 seconds from now */
+    }
+  else
+    {
+      alarm(0);					/* cancel alarm */
+      sigaction(SIGALRM, &oldaction, NULL);	/* remove our signal handler */
+    }
+}
+
+
+/* return CMOS time in CMOS_TIMEP and sytem time in SYSP.  cmos_init()
+   must have been called before this function. */
+static void
+cmos_read_time (time_t *cmos_timep, double *sysp)
+{
+  int rc;
+  struct tm tm;
+  static int summertime_correction=0;
+  static int sanity_checked=0;
+  time_t cmos_time;
+  struct timeval now;
+  int noint_fallback = 1;	/* detect tick by 0 => uip, 1 => time change */
+  int got_tick = 0;
+  int got_time = 0;
+  int type_uie, count;
+  double update_delay;
+
+  if (using_dev_rtc > 0)	/* access the CMOS clock thru /dev/rtc */
+    {
+      if (!nointerrupt)		/* get RTC tick via update interrupt */
+	{
+	  struct timeval before;
+
+	  gettimeofday(&before, NULL);
+
+	  /* Ordinarily, reading /dev/rtc does not wait until the
+   beginning of the next second.  It only returns the current timer
+   value, so it's only accurate to 1 sec which isn't good enough for
+   us.  I see this comment in drivers/char/rtc.c, function
+   rtc_get_rtc_time(), in the kernel sources:
+
+	 * read RTC once any update in progress is done. The update
+	 * can take just over 2ms. We wait 10 to 20ms. There is no need to
+	 * to poll-wait (up to 1s - eeccch) for the falling edge of RTC_UIP.
+	 * If you need to know *exactly* when a second has started, enable
+	 * periodic update complete interrupts, (via ioctl) and then 
+	 * immediately read /dev/rtc which will block until you get the IRQ.
+	 * Once the read clears, read the RTC time (again via ioctl). Easy. 
+   */
+	  ioctl (cmos_fd, RTC_PIE_OFF, NULL); /* disable periodic interrupts */
+	  rc = ioctl (cmos_fd, RTC_UIE_ON, NULL); /* enable update
+						     complete interrupts */
+	  if (rc == -1)	/* no interrupts? fallback to busywait */
+	    {
+	      if (verbose)
+		fprintf(stdout, 
+			"%s doesn't allow user access to update interrupts\n"
+			" - using busy wait instead\n", cmos_device);
+	      nointerrupt = 1;
+	    }
+ 	  else		/* wait for update-ended interrupt */
+	    {
+	      unsigned long interrupt_info;
+
+	      if (verbose)
+		fprintf (stdout, "waiting for CMOS update-ended interrupt\n");
+
+	      do {
+		{
+		  /* avoid blocking even if /dev/rtc never becomes readable */
+		  fd_set readfds;
+		  struct timeval tv;
+		  int retval;
+		  
+		  FD_ZERO(&readfds);
+		  FD_SET(cmos_fd, &readfds);
+		  tv.tv_sec=2; tv.tv_usec=0; /* wait up to 2 sec */
+		  retval = select(cmos_fd+1, &readfds, NULL, NULL, &tv);
+		  if (retval <= 0)
+		    {
+		      ioctl (cmos_fd, RTC_UIE_OFF, NULL); /* disable update complete
+							     interrupts */
+		      if (retval == -1)
+			perror("select()");
+		      if (!retval)
+			if (verbose)
+			  fprintf(stdout,
+				  "timeout waiting for a CMOS update interrupt from %s\n"
+				  " - using busy wait instead\n", cmos_device);
+		      nointerrupt = 1;
+		      goto directisa;
+		    }
+		}
+		rc = read(cmos_fd, &interrupt_info, sizeof(interrupt_info));
+		gettimeofday(&now, NULL);
+
+		if (rc == -1)
+		  {
+		    /* no timeout, but read(/dev/rtc) failed for another reason */
+		    char message[128];
+		    snprintf(message, sizeof(message),
+			     "adjtimex: "
+			     "read() from %s to wait for clock tick failed",
+			     cmos_device);
+		    perror(message);
+		    exit(1);
+		  }
+
+		type_uie = (int)(interrupt_info & 0x80);
+		count = (int)(interrupt_info >> 8);
+	      } while (((type_uie == 0) || (count > 1)) && !nointerrupt);
+	      /* The low-order byte holds
+		 the interrupt type.  The first read may succeed
+		 immediately, but in that case the byte is zero, so we
+		 know to try again. If there has been more than one
+		 interrupt, then presumably periodic interrupts were
+		 enabled.  We need to try again for just the update
+		 interrupt.  */
+	      
+	      update_delay = (now.tv_sec + .000001*now.tv_usec) -  
+		(before.tv_sec + .000001*before.tv_usec);
+
+	      if ((type_uie) && (count == 1) && (update_delay > .001))
+		got_tick = 1;
+	      else
+		{
+		  if (verbose)
+		    fprintf(stdout, "CMOS interrupt with status "
+			    "0x%2x came in only %8.6f sec\n"
+			    " - using busy wait instead\n",
+			    (unsigned int)interrupt_info&0xff, update_delay);
+		  nointerrupt = 1;
+		}
+	    }	    /* end of successful RTC_UIE_ON case */
+	}	/* end of interrupt tryouts */
+
+
+      /* At this stage, we either just detected the clock tick via an
+	 update interrupt, or detected nothing yet (interrupts were
+	 bypassed, unavailable, or timeouted). Fallback to busywaiting
+	 for the tick. */
+
+    directisa:
+      if (!got_tick)
+	{
+	  if (noint_fallback)
+	    {
+	      busywait_second_change(&tm, &now);
+	      got_time = 1;
+	    }
+	  else
+	    busywait_uip_fall(&now);
+	  got_tick = 1;
+	}
+
+
+      /* At this stage, we just detected the clock tick, by any method.
+	 Now get this just beginning RTC second, unless we already have it */
+
+      if (!got_time)
+	{
+	  rc = ioctl (cmos_fd, RTC_RD_TIME, &tm);
+
+	  /* RTC_RD_TIME can fail when the device driver detects
+	     that the RTC isn't running or contains invalid data.
+	     Such failure has been detected earlier, unless: We used
+	     noint_fallback=1 to get busywait_uip_fall() as fallback.
+	     Or: UIE interrupts do beat, but RTC is invalid. */
+	  if (rc == -1)
+	    {
+	      char message[128];
+	      snprintf(message, sizeof(message),
+			"adjtimex: "
+			"ioctl(%s, RTC_RD_TIME) to read the CMOS clock failed",
+			cmos_device);
+	      perror(message);
+	      exit(1);
+	    }
+	}
+
+
+      /* disable update complete interrupts
+	 It could seem more natural to do this above, just after we
+	 actually got the interrupt. But better do it here at the end,
+	 after all time-critical operations including the RTC_RD_TIME. */
+      ioctl (cmos_fd, RTC_UIE_OFF, NULL);
+    }
+  else		/* access the CMOS clock thru I/O ports */
+    {
+      /* The "do" loop is "low-risk programming" */
+      /* In theory it should never run more than once */
+      do
+	{
+	  busywait_uip_fall(&now);
+	  tm.tm_sec = cmos_read_bcd (0);
+	  tm.tm_min = cmos_read_bcd (2);
+	  tm.tm_hour = cmos_read_bcd (4);
+	  tm.tm_wday = cmos_read_bcd(6)-1;/* RTC uses 1 - 7 for day of the week, 1=Sunday */
+	  tm.tm_mday = cmos_read_bcd (7);
+	  tm.tm_mon = cmos_read_bcd(8)-1; /* RTC uses 1 base */
+	  /* we assume we're not running on a PS/2, where century is
+	     in byte 55 */
+	  tm.tm_year = cmos_read_bcd(9)+100*cmos_read_bcd(50)-1900;
+	} while (tm.tm_sec != cmos_read_bcd (0));
+    }
+  tm.tm_isdst = -1;		/* don't know whether it's summer time */
+
+  
+  if (universal)
+    cmos_time = mkgmtime(&tm);
+  else
+    cmos_time = mktime(&tm);
+
+  cmos_time += summertime_correction;
+  
+  if (verbose)
+    printf ("CMOS time %s (%s) = %ld\n", asctime (&tm),
+	    universal?"assuming UTC":
+	    (summertime_correction?"assuming local time with summer time adjustment":
+	     "assuming local time without summer time adjustment"),
+	    cmos_time);
+  
+  if (!sanity_checked)
+    {
+      /* There are clues to whether the CMOS clock is set to
+	 summer time, which could be used as suggested by Alain
+	 Guibert <alguibert at free.fr>:
+	 
+	 Since version 2.5, hwclock records CMOS timezone UTC or
+	 LOCAL as 1st item of 3rd line of /etc/adjtime. If it's
+	 "UTC", take offset 0 as if --utc was used. Otherwise: Since
+	 version 2.20, hwclock records CMOS timezone offset in 3rd
+	 item of 3rd line of /etc/adjtime. If it's there, take
+	 it. Otherwise if last adjustment date (2nd item of 1st line)
+	 exists and is not zero, take timezone offset at this last
+	 write time. Otherwise take the possibly false current
+	 offset.
+	 
+	 However, /etc/adjtime cannot be relied on.  The user
+	 might have booted Windows, which could have adjusted the
+	 CMOS clock (including a summer time correction) without
+	 updating /etc/adjtime.  Instead, we use a heuristic: if
+	 the CMOS and system times differ by more than six
+	 minutes, try shifting the CMOS time by some multiple of
+	 one hour.
+      */
+      if (now.tv_sec<cmos_time)
+	summertime_correction = -((cmos_time-now.tv_sec+6*60)/(60*60))*(60*60);
+      else
+	summertime_correction = (((now.tv_sec-cmos_time+6*60)/(60*60))*(60*60));
+      if (abs(summertime_correction) > 13*60*60)
+	{
+	  printf("WARNING: CMOS time %ld differs from system time %ld by %3.2f hours\n",
+		 cmos_time, now.tv_sec, (summertime_correction)/3600.);
+	  if(logging)
+	    {
+	      printf("logging suppressed\n");
+	      logging=0;
+	    }
+	}
+      if (verbose && summertime_correction)
+	printf("adjusting CMOS times by %d hour\n", 
+	       summertime_correction/(60*60));
+      cmos_time += summertime_correction;	/* assume start/end of
+						   summer time or local
+						   time/UTC difference */
+      if (abs(cmos_time-now.tv_sec)>6*60) /* still different by more than 6 min? */
+	{
+	  if (cmos_time>now.tv_sec)
+	    printf("WARNING: CMOS time is %3.2f min ahead of system clock\n",
+		   (cmos_time-now.tv_sec)/60.);
+	  else
+	    printf("WARNING: CMOS time is %3.2f min behind system clock\n",
+		   (now.tv_sec-cmos_time)/60.);
+	  if(logging)
+	    {
+	      printf("logging suppressed\n");
+	      logging=0;
+	    }
+	}
+      sanity_checked=1;
+    }
+  *cmos_timep=cmos_time;
+  *sysp = now.tv_sec + .000001*now.tv_usec;
+}
+
+
+/*
+ * busywait for UIP fall and timestamp this event
+ *
+ * Maintainance note: In order to detect its fall, we first have to
+ * detect the update-in-progress flag up state. This UIP up state lasts
+ * for 2 ms each second. Detecting a 2 ms event, when other processes
+ * can steal us one or several 10 ms timeslices, this is something that
+ * can very easily fail. We *can* miss a second tick, or even several in
+ * a row, under heavy system load. Missing ticks is not a severe problem
+ * for adjtimex, as long as we timestamp accurately the tick we'll
+ * finally catch. However there is a timeout issue: we can't just arm an
+ * alarm_timeout() for 2 seconds, as when waiting for UIE interrupts and
+ * in busywait_second_change(), because it would make us hard fail after
+ * only one or two missed ticks.
+ */
+static void
+busywait_uip_fall(struct timeval *timestamp)
+{
+  long i;
+
+  /*
+   * Initialise direct I/O access mode.
+   * This may have been already done previously by the main
+   * initialisation cmos_init(), if the CMOS access mode is direct I/O.
+   * We init it here again, to make busywait_uip_fall() usable in any
+   * other CMOS access modes (/dev/rtc).
+   */
+  cmos_init_directisa();
+
+  if (verbose>1)
+    fprintf (stdout, "  waiting for CMOS update-in-progress fall\n");
+
+  /* read RTC exactly on falling edge of update-in-progress flag */
+  /* Wait for rise.... (may take up to 1 second) */
+  
+  for (i = 0; i < 10000000; i++)
+    if (CMOS_READ (10) & 0x80)
+      break;
+  
+  /* Wait for fall.... (must try at least 2.228 ms) */
+  
+  for (i = 0; i < 1000000; i++)
+    if (!(CMOS_READ (10) & 0x80)) {
+      gettimeofday(timestamp, NULL);
+      break;
+    }
+}
+
+/*
+ * Busywait for a change in RTC time and timestamp this event.
+ * cmos_init() must have been called before, and the selected
+ * access method must be using_dev_rtc=1.
+ *
+ * Important note: an ioctl(RTC_RD_TIME) call that happens while the RTC
+ * is updating itself (UIP up, a 2 milliseconds long event) will block.
+ * Properly block until UIP release on recent Linux kernels since 2.6.13.
+ * However all older Linux kernels had a misfeature: they blocked much
+ * longer than necessary, up to 20 ms longer in the worst case.
+ * The method used here cannot detect precisely the CMOS clock tick on
+ * such older kernels. It would result in a random delay, the timestamp
+ * being between 8 and 18 ms late. Hell: that's 3 orders of magnitude
+ * worse than the accuracy expected from this function.
+ */
+static void
+busywait_second_change(struct tm *cmos, struct timeval *timestamp)
+{
+  struct tm begin;
+  int rc;
+
+  if (verbose)
+    fprintf (stdout, "waiting for CMOS time change\n");
+
+  alarm_timeout(1);	/* arm a 2 seconds timeout */
+
+  /* pick a reference time */
+  rc = ioctl (cmos_fd, RTC_RD_TIME, &begin);
+
+  /* RTC_RD_TIME can fail when the device driver detects
+     that the RTC isn't running or contains invalid data */
+  if (rc == -1)
+    {
+      char message[128];
+      snprintf(message, sizeof(message),
+		"adjtimex: "
+		"ioctl(%s, RTC_RD_TIME) to read the CMOS clock failed",
+		cmos_device);
+      perror(message);
+      exit(1);
+    }
+
+  /* loop until time changes */
+  do
+    {
+      ioctl (cmos_fd, RTC_RD_TIME, cmos);
+    }
+  while ((cmos->tm_sec == begin.tm_sec) && !timeout);
+  gettimeofday(timestamp, NULL);
+
+  alarm_timeout(0);	/* disable timeout */
+
+  /* Sometimes the RTC isn't running, but the device driver didn't
+     notice. Then the RTC_RD_TIME call succeeds, but provides us some
+     static wrong time. That's why we needed an alarm timeout */
+
+  /* timeout without a change? */
+  if (cmos->tm_sec == begin.tm_sec)
+    {
+      fprintf(stderr,
+		"adjtimex: timeout waiting for CMOS time change on %s\n"
+		"The CMOS clock appears to be stopped:\n"
+		"Please try to set and restart it with hwclock --systohc\n",
+		cmos_device);
+      exit (1);
+    }
+
+}
+
+static inline void 
+xusleep(long microseconds)
+{
+  struct timespec ts;
+
+  ts.tv_sec = microseconds/1000000;
+  ts.tv_nsec = (microseconds - ts.tv_sec*1000000) * 1000;
+
+  while (nanosleep (&ts, &ts) < 0)
+    continue;
+}
+
+/* compare the system and CMOS clocks.  If "adjusting" is nonzero,
+   adjust sytem time to match the CMOS clock. */
+void
+compare()
+{
+  struct timex txc;
+  time_t cmos_time;
+  double cmos_sec, system_sec, dif, dif_prev = 0.;
+  struct cmos_adj *pca = get_cmos_adjustment();
+  double cmos_adjustment;
+  int loops = 0;
+  extern char *optarg;
+  int wrote_to_log = 0;
+  int hz, tick_min, tick_mid, tick_max;
+  long maxfreq;
+  struct timeval tv_dummy;
+
+  /* dummy training call: the next important timestamp will be more accurate */
+  gettimeofday(&tv_dummy, NULL);
+
+  probe_time(&hz, &tick_min, &tick_mid, &tick_max, &maxfreq);
+
+#ifdef DEBUG
+  /*
+cmos clock last adjusted at Tue Aug 26 11:43:57 1997 (= 872610237)
+          current cmos time Tue Aug 26 21:27:05 1997 EDT (= 872645225)
+*/
+  {
+    struct tm bdt;
+    if (universal)
+      {
+	bdt = *gmtime(&pca->ca_adj_time);
+	(void)mkgmtime(&bdt);	/* set tzname */
+      }
+    else
+      {
+	bdt = *localtime(&pca->ca_adj_time);
+	(void)mktime(&bdt);	/* set tzname */
+      }
+    printf ("cmos clock last adjusted %.24s %s "
+	    "(= %ld)\n", 
+	    ctime(&pca->ca_adj_time), tzname[tm.tm_isdst?1:0], (long) pca->ca_adj_time);
+  }
+#endif
+
+  cmos_init ();
+
+  while (count != 0)
+    {
+      if (count > 0) count--;
+
+      cmos_read_time (&cmos_time, &system_sec);
+			  
+
+      /* If we're adjusting time parameters, we want to make a log
+         entry only for the first two comparisons (before we change
+         the parameters).  Otherwise, we want to log the first and last
+         comparisons in order to maximize the duration. */
+      if (logging && (wrote_to_log ^ (adjusting?(loops==0):(count!=0))))
+	{
+	  struct hack h;
+
+	  h.ref = 0;
+	  h.sigma_ref = 0;
+	  h.log = (time_t)system_sec;
+	  h.sys = system_sec;
+	  txc.modes = 0;
+	  adjtimex(&txc);
+	  h.tick = txc.tick;
+	  h.freq = txc.freq;
+	  h.sys_ok = wrote_to_log;
+	  h.cmos = cmos_time;
+	  h.cmos_ok = wrote_to_log;
+	  puthackent(&h);
+	  wrote_to_log = 1;
+	}
+
+#ifdef DEBUG
+      tm=*gmtime(cmos_time);
+      printf ("       current cmos time %.24s %s (= %ld)\n", 
+	      asctime(&tm), tzname[tm.tm_isdst?1:0], (long) cmos_time);
+#endif
+      cmos_adjustment = ((double) (cmos_time - pca->ca_adj_time))
+	* pca->ca_factor / SECONDSPERDAY
+	+ pca->ca_remainder;
+      cmos_sec = cmos_time + cmos_adjustment;
+#ifdef DEBUG
+      printf (
+"           time since last adjustment %10.6f days (= %9d sec)\n",
+	      (int) (cmos_time - pca->ca_adj_time) / (double)SECONDSPERDAY,
+	      (int) (cmos_time - pca->ca_adj_time));
+      printf (
+"                               factor %10.6f sec/day\n",
+	      pca->ca_factor);
+      printf (
+"                           adjustment %10.6f + %7.6f = %7.6f sec\n",
+	       ((double) (cmos_time - pca->ca_adj_time))*pca->ca_factor/SECONDSPERDAY,
+	       pca->ca_remainder, cmos_adjustment);
+#endif
+      dif = system_sec - cmos_sec;
+
+      txc.modes = 0;
+      if (adjtimex (&txc) < 0) {perror ("adjtimex"); exit(1);}
+/*
+                                       --- current ---   -- suggested --
+cmos time     system-cmos  error_ppm   tick      freq    tick      freq
+1094939320  -14394.974188
+1094939330  -14394.971203      298.5  10001   1290819
+1094939340  -14394.968203      300.0  10001   1290819    9998   1289097
+*/
+
+      if (! marked++ )
+	{
+	  if (interval)
+	    printf (
+"                                      --- current ---   -- suggested --\n"
+"cmos time     system-cmos  error_ppm   tick      freq    tick      freq\n");
+	  else
+	    printf (
+"cmos time     system-cmos  error_ppm   tick      freq\n");
+	}
+      printf ("%10ld  %13.6f",
+	      (long) cmos_sec,
+	      dif);
+      if (++loops > 1)
+	{			/* print difference in rates */
+#define SHIFT (1<<16)
+	  double second_diff, error_ppm;
+	  second_diff = dif - dif_prev;
+	  error_ppm = second_diff/interval*1000000;
+	  printf ("%11.1f %6ld %9ld",
+		  error_ppm,
+		  txc.tick,
+		  txc.freq);
+	  if (loops > 2)
+	    {			/* print suggested values */
+	      long tick_delta = 0, freq_delta = 0;
+	      
+	      tick_delta = ceil((-error_ppm + txc.freq/SHIFT - hz)/hz);
+	      freq_delta = -(error_ppm + tick_delta*hz)*SHIFT;
+	      printf("  %6ld %9ld\n",
+		     txc.tick + tick_delta, txc.freq + freq_delta);
+	      if (loops > 4 && adjusting)
+		{
+		  if (abs(error_ppm)>10000)
+		    {
+		      if (!force_adjust)
+			{
+			  printf(
+"\nERROR: required correction is greater than plus/minus 1 percent (10000 \n"
+"parts per million), quitting (use --force-adjust to override).\n");
+			  if (resetting)
+			    reset_time_status();
+			  exit(1);
+			}
+		    }
+
+		  txc.modes = ADJ_FREQUENCY | ADJ_TICK;
+		  txc.tick += tick_delta;
+		  txc.freq += freq_delta;
+		  if (adjtimex (&txc) < 0) 
+		    {
+		      perror ("adjtimex"); 
+		      exit(1);
+		    }
+		  if (resetting)
+		    reset_time_status();
+		  loops -= 3;
+		}
+	    }
+	  else
+	    printf("\n");
+	    }
+      else
+	printf("\n");
+      dif_prev = dif;
+      if (interval == 0)
+	break;
+      if (count)		/* if it is not the last round */
+	xusleep (interval*1000000L - 500000); /* reading RTC takes 1 sec */
+    }
+}
+
+void reset_time_status()
+{
+  /* Using the adjtimex(2) system call to set any time parameter makes
+     an early kernel (2.0.40 and 2.4.18 or later are reportedly okay)
+     think the clock is synchronized with an external time source, so
+     it sets the kernel variable time_status to TIME_OK.  Thereafter,
+     it will periodically adjust the CMOS clock to match.  We prevent
+     this by setting the clock, because that has the side effect of
+     resetting time_status to TIME_BAD.  We try not to actually change
+     the clock setting. */
+  struct timeval tv1, tv2;
+  long carry_sec, overhead_usec;
+  if (gettimeofday(&tv1, NULL)) {perror("adjtimex"); exit(1);}
+  if (gettimeofday(&tv2, NULL)) {perror("adjtimex"); exit(1);}
+  overhead_usec = tv2.tv_usec - tv1.tv_usec + 
+    1000000*(tv2.tv_sec - tv1.tv_sec);
+  tv2.tv_usec += overhead_usec;
+  carry_sec = tv2.tv_usec/1000000;
+  tv2.tv_sec += carry_sec;
+  tv2.tv_usec -= 1000000*carry_sec;
+  if (settimeofday(&tv2, NULL)) {perror("adjtimex"); exit(1);}
+}  
+
+static void log_times()
+{
+#ifdef NET_TIME_CLIENT
+  struct protoent proto;
+  int sockfd, val, len, c;
+  struct sockaddr sa={AF_INET, "127.0.0.1"};
+  struct hostent he;
+#endif
+  double sigma_ref;
+  char buf[64], *s;
+  int n;
+  struct timeval tv_sys;
+  struct tm bdt;
+  time_t when, tref;
+  double ftime_ref, ftime_sys, ftime_cmos;
+
+  /* dummy training call: the next important timestamp will be more accurate */
+  gettimeofday(&tv_sys, NULL);
+
+  if (watch)
+    {
+      while(1) {
+	printf("Please press <enter> when you know the time of day: ");
+	(void)getchar();
+	gettimeofday(&tv_sys, NULL);
+	when = tv_sys.tv_sec;
+	bdt = *localtime(&when); /* set default values for most fields */
+	strftime(buf, sizeof(buf), "%Z", &bdt);
+	printf("  system time then was %.24s %s\n", asctime(&bdt), buf);
+	ftime_sys = tv_sys.tv_sec + tv_sys.tv_usec*.000001;
+	printf("What time was that according to your reference (%s)?\n"
+	       "(hh:mm:ss, or `r' to retry, or `q' to quit): ", buf);
+	if (fgets(buf, sizeof(buf), stdin) == NULL) exit(1);
+	s = buf;
+	while(isspace(*s)) s++;
+	if (*s == 'q') exit(0);
+	if (*s == 'r') continue;
+	
+	strptime(buf, "%T", &bdt); /* set time fields from user input */
+	printf("      reference time is %s", asctime(&bdt));
+	tref = ftime_ref = mktime(&bdt); /* construct a time_t
+					    corresponding to the user
+					    input */
+	printf(" mktime returns time of %s", ctime(&tref));
+
+	printf("reference time - system time = %12.3f - %12.3f "
+	       "= %4.3f sec\n", 
+	       ftime_ref, ftime_sys, ftime_ref - ftime_sys);
+
+	printf("How big could the error be in this, in seconds?\n"
+	       "(or `r' to retry, or `q' to quit) [.5] : ");
+	if (fgets(buf, sizeof(buf), stdin) == NULL) exit(1);
+	s = buf;
+	while(isspace(*s)) s++;
+	if (*s == 'q') exit(0);
+	if (*s == 'r') continue;
+
+	n = sscanf(buf, "%lf", &sigma_ref);
+	if (n < 1)
+	  sigma_ref = .5;
+	else if (sigma_ref < .02)
+	  {
+	    printf("You get credit for .02 sec.\n");
+	    sigma_ref = .02;
+	  }
+	break;
+      }
+    }
+  else if (timeserver)
+    {
+      FILE *ifile;
+      char command[128];
+      char buf[BUFLEN];
+      int i, j;
+      double d, mean=0, val, var=0, num=0; /* for finding statistics */
+      
+      struct stat filestat;
+      char *paths[]={"/usr/bin/ntpdate","/bin/ntpdate",
+		     "/usr/sbin/ntpdate","/sbin/ntpdate"};
+
+      for (i=0; i<sizeof(paths)/sizeof(paths[0]); i++)
+	{
+	  stat(paths[i], &filestat);
+	  if (S_ISREG(filestat.st_mode))
+	    goto found_ntpdate;
+	}
+      failntpdate("cannot find ntpdate");
+
+    found_ntpdate:
+      sprintf(command, "%s -q -d %.32s ", paths[i], timeserver);
+      ifile = popen(command, "r");
+	      
+      if (ifile == NULL) 
+	failntpdate("call to ntpdate failed");
+	      
+      /* read and save the significant lines, which should look like this:
+filter offset: -0.02800 -0.01354 -0.01026 -0.01385
+offset -0.013543
+ 1 Sep 11:51:23 ntpdate[598]: adjust time server 1.2.3.4 offset -0.013543 sec
+ */
+
+      while(fgets(buf, BUFLEN, ifile))
+	{
+	  if (!strncmp(buf, "filter offset:", strlen("filter offset:")))
+	    {
+	      /* These lines show the offsets for each of ntpdate's
+		 samples.  Find their variance, which we will use to
+		 indicate the accuracy of the offset we're using.
+		 This is probably conservative, since the offset we're
+		 using is probably not close to the mean. */
+	      s = strstr(buf, ":")+1;
+	      for (j = 0; j < 4; j++)
+		if ((val = strtod(s, &s))) /* diregard offset of
+			      exactly zero - might be okay, but more
+			      likely no conversion was performed */
+		  {
+		    d = val - mean;
+		    num += 1.;
+		    var = (num-1)/num*(var + d*d/num);
+		    mean = ((num-1.)*mean + val)/num;
+		  }
+	    }
+
+	  if (num>0 && (strstr(buf,"adjust time server") || strstr(buf,"step time server")))
+	    goto ntpdate_okay;
+	}
+      failntpdate("cannot understand ntpdate output");
+
+    ntpdate_okay:
+      gettimeofday(&tv_sys, NULL);
+      ftime_sys = tv_sys.tv_sec;
+	      /* ntpdate selects the offset from one of its samples
+		 (the one with the shortest round-trip delay?) */
+      ftime_ref = ftime_sys + atof(strstr(buf, "offset") + 6);
+      pclose(ifile);
+      sigma_ref = sqrt(var);
+
+      {
+	time_t now = (time_t)ftime_ref;
+	bdt = *gmtime(&now);
+	printf("      reference time is %s", ctime(&now));
+	printf("reference time - system time = %12.3f - %12.3f "
+	       "= %4.3f sec\n", 
+	       ftime_ref, ftime_sys, ftime_ref - ftime_sys);
+      }
+
+
+#ifdef OWN_IMPLEMENTATION
+      /* this is not even close to working yet */
+      proto = *getprotobyname("UDP");
+      sockfd = socket(AF_INET, SOCK_DGRAM, proto.p_proto);
+      he = *gethostbyname("localhost");
+      len = he.h_length;
+      memcpy(sa.sa_data, he.h_addr_list[0], len);
+
+#ifdef SEND
+      val = connect(sockfd, &sa, len);
+      if (val == -1) {perror("connect"); exit(1);}
+      /*
+	int  connect(int  sockfd, struct sockaddr *serv_addr, int addrlen );
+	int  send(int  s,  const void *msg, int len , unsigned int flags);
+	int sendto(int s, const void *msg, int  len  unsigned  int
+	flags, const struct sockaddr *to, int tolen);
+	*/
+#endif /* SEND */
+      val = sendto(sockfd, (const void *)" ", 1, 0, &sa, len);
+      if (val == -1) {perror("sendto"); exit(1);}
+      sigma_ref = .010;
+#endif /* OWN_IMPLEMENTATION */
+
+    }
+  else				/* no absolute time reference */
+    {
+      time_t now;
+      gettimeofday(&tv_sys, NULL);
+      now = (time_t)tv_sys.tv_sec;
+      bdt = *gmtime(&now);
+      ftime_sys = tv_sys.tv_sec + tv_sys.tv_usec*.000001;
+      ftime_ref = 0;
+      sigma_ref = 0;
+    }
+
+  {
+    time_t cmos_time;
+    double system_sec;
+
+    cmos_init ();
+    cmos_read_time (&cmos_time, &system_sec);
+    ftime_cmos = ftime_sys + cmos_time - system_sec;
+  }
+
+  /*
+                 -reference-time- --------system-time---------- --cmos-time----
+1997-06-14 20:22 888888888.888 -3 888888888.888 10000 6666666 n 888888888.888 y
+*/
+
+  {
+    struct hack h;
+    h.ref = ftime_ref;
+    h.sigma_ref = sigma_ref;
+    h.log = (time_t)ftime_ref;
+    h.sys = ftime_sys;
+    txc.modes = 0;
+    (void)adjtimex(&txc);
+    h.tick = txc.tick;
+    h.freq = txc.freq;
+    h.sys_ok = valid_system_rate(ftime_sys, ftime_ref, sigma_ref);
+    h.cmos = ftime_cmos;
+    h.cmos_ok = valid_cmos_rate(ftime_cmos, ftime_ref, sigma_ref);
+    puthackent(&h);
+  }
+}
+
+void failntpdate(char *s)
+{
+  fprintf(stderr, "%s\n", s);
+  exit(1);
+}
+
+static 
+int valid_system_rate(double ftime_sys, double ftime_ref, double sigma_ref)
+{
+  int n;
+  int default_answer;
+  int ch;
+  char buf[BUFLEN];
+  struct hack *ph;
+  struct cmos_adj *pca = get_cmos_adjustment();
+
+  sethackent();
+  for (n = 0; (ph = gethackent()); n++)
+    prev = *ph;			/* fetch last line from logfile */
+  endhackent();
+  if (n == 0)
+    {
+      printf("No previous clock comparison in log file\n");
+      return 0;
+    }
+  undisturbed_sys = undisturbed_cmos = 1;
+
+  printf("Last clock comparison was at %.24s\n", ctime(&prev.log));
+  
+  if (txc.tick == prev.tick && txc.freq == prev.freq)
+    printf("Kernel time variables are unchanged - good.\n");
+  else
+    {
+      printf("Kernel time variables have changed - bad.\n");
+      undisturbed_sys = 0;
+    }
+  if (txc.status & 64)
+    printf("System clock is currently not disciplined - good.\n");
+  else
+    {
+      printf("System clock is synchronized (by ntpd?) - bad.\n");
+      undisturbed_sys = 0;
+    }
+
+  {
+    time_t lastboot, newtime;
+    struct utmp *up;
+    
+    lastboot = newtime = prev.sys - 1;
+    utmpname(WTMP_PATH);
+    setutent();
+    printf("Checking wtmp file...\n");
+    while((up = getutent()))
+      {
+	if (up->ut_type == BOOT_TIME) 
+	  lastboot = up->ut_time;
+	if (up->ut_type == NEW_TIME) 
+	  newtime = up->ut_time;
+      }
+    endutent();
+    if (lastboot < prev.sys)
+      printf("System has not booted since %.24s - good.\n", 
+	     ctime(&prev.log));
+    else
+      {
+	printf("System was booted at %.24s - bad.\n", ctime(&lastboot));
+	undisturbed_sys = 0;
+      }
+    if (newtime < prev.sys)
+      printf("System time has not been changed since %.24s - good.\n", 
+	     ctime(&prev.log));
+    else
+      {
+	printf("System time was reset at %.24s - bad.\n", ctime(&newtime));
+	undisturbed_sys = 0;
+      }
+  }
+
+  if (pca)
+    {
+      printf("Checking %s...\n", ADJPATH);
+      if (pca->ca_adj_time < prev.log)
+	printf(
+"/sbin/hwclock has not set system time and adjusted the cmos clock \n"
+"since %.24s - good.\n", 
+ctime(&prev.log));
+      else
+	{
+	  printf("/sbin/hwclock set system time and adjusted the cmos clock \n"
+		 "at %.24s - bad.\n", 
+		 ctime(&pca->ca_adj_time));
+	  undisturbed_sys = undisturbed_cmos = 0;
+	}
+    }
+
+  do 
+    {
+      default_answer = undisturbed_sys?'y':'n';
+      printf("\nAre you sure that, since %.24s,\n", ctime(&prev.log));
+      printf("  the system clock has run continuously,\n");
+      printf("  it has not been reset with `date' or `/sbin/hwclock`,\n");
+      printf("  the kernel time variables have not been changed, and\n");
+      printf("  the computer has not been suspended? (y/n) [%c] ", 
+	     default_answer);
+      fgets(buf, BUFLEN, stdin);
+      ch = buf[0];
+      if (ch == '\n') ch = default_answer;
+    } while (ch != 'n' && ch != 'y');
+
+  if ((undisturbed_sys = (ch == 'y')))
+    {
+      double drift_sys_ppm, err_sys_ppm;
+      int digits;
+      drift_sys_ppm = ((ftime_sys - ftime_ref) - (prev.sys - prev.ref))*
+	1.e6/(ftime_ref - prev.ref);
+      err_sys_ppm = (prev.sigma_ref + sigma_ref)*1.e6/
+	(ftime_ref - prev.ref);
+      digits = -(int)floor(log(.5*sigma_ref)/log(10.));
+      if (digits < 0) digits = 0;
+      
+      printf("The estimated error in system time is %.*f +- %.*f ppm\n", 
+	     digits, drift_sys_ppm, digits, err_sys_ppm);
+    }
+
+  return undisturbed_sys;
+}
+
+static 
+int valid_cmos_rate(double ftime_cmos, double ftime_ref, double sigma_ref)
+{
+  int default_answer;
+  int ch;
+  char buf[BUFLEN];
+
+  default_answer = undisturbed_cmos?'y':'n';
+  do
+    {
+      printf("\nAre you sure that, since %.24s,\n", ctime(&prev.log));
+      printf("  the real time clock (cmos clock) has run continuously,\n");
+      printf("  it has not been reset with `/sbin/hwclock',\n");
+      printf("  no operating system other than Linux has been running, and\n");
+      printf("  ntpd has not been running? (y/n) [%c] ", default_answer);
+      fgets(buf, BUFLEN, stdin);
+      ch = buf[0];
+      if (ch == '\n') ch = default_answer;
+    } while (ch != 'n' && ch != 'y');
+  if ((undisturbed_cmos = (ch == 'y')))
+    {
+      double drift_cmos_ppm, err_cmos_ppm;
+      int digits;
+	    
+      drift_cmos_ppm = 
+	((ftime_cmos - ftime_ref) - (prev.cmos - prev.ref))*
+	1.e6/(ftime_ref - prev.ref);
+      err_cmos_ppm = (prev.sigma_ref + sigma_ref)*1.e6/
+	(ftime_ref - prev.ref);
+      digits = -(int)floor(log(.5*err_cmos_ppm)/log(10.));
+      if (digits < 0) digits = 0;
+      printf("The estimated error in the cmos clock is %.*f +- %.*f ppm\n", 
+	     digits, drift_cmos_ppm, digits, err_cmos_ppm);
+    }
+
+  return undisturbed_cmos;
+}
+
+
+/*
+ * Read informations from /etc/adjtime file.
+ * If file doesn't exist, return default zero values.
+ */
+static struct cmos_adj *get_cmos_adjustment()
+{
+  FILE *adj;
+  static struct cmos_adj ca;
+
+  ca.ca_factor = ca.ca_adj_time = ca.ca_remainder = 0;
+  if ((adj = fopen (ADJPATH, "r")) != NULL)
+    {
+      if (fscanf (adj, "%lf %ld %lf",
+		&ca.ca_factor,
+		&ca.ca_adj_time,
+		&ca.ca_remainder) < 0)
+	{
+	  perror (ADJPATH);
+	  exit (2);
+	}
+      fclose (adj);
+    }
+#ifdef DEBUG
+  printf ("CMOS clock was last adjusted %s\n", ctime(&ca.ca_adj_time));
+#endif
+  return &ca;
+}
+
+
+static FILE *lfile;		/* pointer to log file, or NULL if it
+				   has not been opened yet */
+
+static 
+void sethackent(void)
+{
+  endhackent();
+  lfile = fopen(log_path, "r");
+  if (!lfile && logging)
+    {
+      lfile = fopen(log_path, "a+"); /* create it if it doesn't exist */
+      if (!lfile)
+	{
+	  fprintf(stderr, "%s does not exist, and could not be created\n",
+		  log_path);
+	  exit(1);
+	}
+      fseek(lfile, 0L, 0);	/* start at beginning */
+    }
+}
+
+static 
+void endhackent(void)
+{
+  if (lfile) fclose(lfile);
+  lfile = NULL;
+}
+
+/* read next entry in clock comparison log, fill a struct hack from
+   it, and return a pointer to it.  Ignore lines starting with `#'.
+   Return NULL when there are no more lines to read.  */
+static 
+struct hack *gethackent(void)
+{
+  char buf[256], sys_flag, cmos_flag, junk[26];
+  static struct hack h;
+
+  if (!lfile) sethackent();
+  if (!lfile) return NULL;
+  while(fgets(buf, sizeof(buf), lfile))
+    {
+      int tokens;
+      if (buf[0] == '#')
+	continue;
+      tokens = sscanf(buf, "%25s %25s %lf %lf %lf %d %d %c %lf %c",
+		      junk, junk, &h.ref, &h.sigma_ref, 
+		      &h.sys, &h.tick, &h.freq, &sys_flag,
+		      &h.cmos, &cmos_flag);
+      if (tokens != 10)
+	continue;
+      h.sys_ok = (tolower(sys_flag) == 'y');      
+      h.cmos_ok = (tolower(cmos_flag) == 'y');
+      if (h.ref)
+	h.log = (time_t)h.ref;
+      else if (h.sys)
+	h.log = (time_t)h.sys;
+      else
+	h.log = (time_t)h.cmos;
+      h.valid = 0;
+      return &h;
+    }
+  return NULL;
+}
+
+/* append an entry to the clock comparison log.  */
+static 
+void puthackent(struct hack *ph)
+{
+  struct tm bdt;
+  char timestring[32];
+  int digits;
+
+  if (ph->sigma_ref)
+    ph->log = (time_t)ph->ref;
+  else
+    ph->log = (time_t)ph->sys;
+  bdt = *gmtime(&ph->log);
+  strftime(timestring, sizeof(timestring), "%Y-%m-%d %H:%M", &bdt);
+  if (ph->sigma_ref <= 0.) digits = 0;
+  else
+    {
+      digits = -(int)floor(log(.5*ph->sigma_ref)/log(10.));
+      if (digits < 0) digits = 0;
+    }
+
+  if (verbose)
+    {
+      fprintf(stdout, "\nlog entry:\n");
+      fprintf(stdout, "%s %.*f %.*f %13.3f %5d %7d %s %13.3f %s\n",
+	      timestring, 
+	      digits, ph->ref, digits, ph->sigma_ref,
+	      ph->sys, ph->tick, ph->freq, ph->sys_ok?"y":"n",
+	      ph->cmos, ph->cmos_ok?"y":"n");
+    }
+
+  if (!logging)
+      fprintf(stdout, "logging suppressed\n");
+
+  else
+    {
+      lfile = fopen(log_path, "a+");
+      if (!lfile)
+	{
+	  fprintf(stderr, "cannot open %s for writing\n", log_path);
+	  return;
+	}
+      fprintf(lfile, "%s %.*f %.*f %13.3f %5d %7d %s %13.3f %s\n",
+	      timestring, 
+	      digits, ph->ref, digits, ph->sigma_ref,
+	      ph->sys, ph->tick, ph->freq, ph->sys_ok?"y":"n",
+	      ph->cmos, ph->cmos_ok?"y":"n");
+      fclose(lfile);
+      lfile = NULL;
+      if (verbose)
+	fprintf(stdout, "written to %s\n", log_path);
+    }
+}
+
+/* convert a broken-down time representing UTC to calendar time
+    representation (time_t), and return it.  As a side effect, set the
+    tm_wday and tm_yday members of the broken-down time. (like mktime) */
+static 
+time_t mkgmtime(struct tm *tp)
+{
+  time_t lt;			/* local time */
+  long adj;
+  struct tm u;
+  static char timezone_name[]="UTC";
+
+  lt = mktime(tp);
+  if (lt == (time_t)(-1))
+    return (time_t)(-1);
+  adj = 131072;			/* greater than the number of seconds
+				   per day (even when daylight savings
+				   time ends) */
+  lt -= adj;
+  while (adj)
+    {
+      lt += adj;
+      u = *gmtime(&lt);
+      if (compare_tm(&u, tp) > 0)
+	lt -= adj;
+      adj /= 2;
+    }
+  u = *gmtime(&lt);
+  if (compare_tm(&u, tp))
+    return (time_t)(-1);
+  tzname[0] = tzname[1] = timezone_name;
+  return lt;
+}
+
+static 
+int compare_tm(struct tm *first, struct tm *second)
+{
+  if (first->tm_year < second->tm_year) return -1;
+  if (first->tm_year > second->tm_year) return 1;
+  if (first->tm_mon < second->tm_mon) return -1;
+  if (first->tm_mon > second->tm_mon) return 1;
+  if (first->tm_mday < second->tm_mday) return -1;
+  if (first->tm_mday > second->tm_mday) return 1;
+  if (first->tm_hour < second->tm_hour) return -1;
+  if (first->tm_hour > second->tm_hour) return 1;
+  if (first->tm_min < second->tm_min) return -1;
+  if (first->tm_min > second->tm_min) return 1;
+  if (first->tm_sec < second->tm_sec) return -1;
+  if (first->tm_sec > second->tm_sec) return 1;
+  return 0;
+}
+
+static void *xmalloc(int n)
+{	void *p;
+	p = xrealloc(NULL, n);
+	return p;
+}
+
+static void *xrealloc(void *pv, int n)
+{
+  void *p;
+  p = realloc(pv, n);
+  if (!p){perror("adjtimex"); exit(1);}
+  return p;
+}
+
+/*
+  review log file and find least-square estimates of drifts.  If
+  "adjusting" is nonzero, set sytem time parameters to the
+  least-squares estimates. */
+static 
+void review()
+{
+  int i, n, nmax = 0, digits;
+  struct hack *ph, **hacks = NULL;
+  double diff_ppm, sigma_ppm, cmos_time, sys_time, s0, s1, ref_time;
+  time_t start, finish;
+  char startstring[26], finishstring[26];
+  double x[2], p[4], h[4], z[2], r[4], cmos_var, sys_var, ref_var;
+  long tick_delta = 0;
+  double error_ppm = 0;
+  int hz, tick_min, tick_mid, tick_max;
+  long maxfreq;
+
+  probe_time(&hz, &tick_min, &tick_mid, &tick_max, &maxfreq);
+
+  /* read all the previous time hacks in */
+  sethackent();
+  for (n = 0; (ph = gethackent()); n++)
+    {
+      if (nmax <= n)
+	{
+	  hacks = xrealloc(hacks, (nmax = 2*nmax + 4)*sizeof(struct hack *));
+	}
+      hacks[n] = xmalloc(sizeof(struct hack));
+      *hacks[n] = *ph;
+    }
+  endhackent();
+
+  if (n == 0)
+    {
+      printf("No previous clock comparison in log file\n");
+      return;
+    }
+  /*
+    In the following, we assume the reference times are most accurate,
+    then the CMOS clock, then the system clock.  Hence, when comparing
+    CMOS and reference times, we're calculating the error in PPM of
+    the CMOS rate, and when comparing system time to either CMOS or
+    reference times, we're calculating error in PPM of the system
+    rate.  For system time, we're calculating the error if TICK is set
+    to the middle of the rnage, and FREQ is zero.
+  */
+
+  /* compare cmos and system rates */
+  printf(
+"start                     finish                    days    sys - cmos (ppm)\n");
+  for (i = 1; i < n; i++)
+    {
+      if (hacks[i]->sys_ok && 
+	  hacks[i]->cmos_ok &&
+	  hacks[i]->sys > hacks[i-1]->sys &&
+	  hacks[i]->cmos > hacks[i-1]->cmos)
+	{
+	  sys_time = hacks[i]->sys - hacks[i-1]->sys;
+	  cmos_time = hacks[i]->cmos - hacks[i-1]->cmos;
+	  hacks[i]->relative_rate =
+	    diff_ppm = 1.e6*(sys_time - cmos_time)/sys_time
+	    - 100*(hacks[i]->tick - tick_mid) - hacks[i]->freq/SHIFT;
+	  if (fabs(diff_ppm) > 10000.) /* agree within 1 percent? */
+	    continue;
+	  hacks[i]->valid = CMOS_VALID | SYS_VALID;
+	  hacks[i]->relative_sigma =
+	    sigma_ppm = 1.e6*RTC_JITTER*sqrt(2.)/(sys_time + cmos_time);
+	  start = (time_t)hacks[i-1]->sys;
+	  strcpy(startstring, ctime(&start));
+	  finish = (time_t)hacks[i]->sys;
+	  strcpy(finishstring, ctime(&finish));
+	  digits = -(int)floor(log(.5*sigma_ppm)/log(10.));
+	  if (digits < 0) digits = 0;
+	  printf("%.24s  %.24s  %6.4f  %.*f +- %.*f\n",
+		 startstring, finishstring, sys_time/SECONDSPERDAY,
+		 digits, diff_ppm, digits, sigma_ppm);
+	}
+    }
+
+  /* compare cmos and reference rates */
+  printf(
+"start                     finish                    days    cmos_error (ppm)\n");
+  for (i = 1; i < n; i++)
+    {
+      if (hacks[i]->sigma_ref != 0 && 
+	  hacks[i-1]->sigma_ref != 0 && 
+	  hacks[i]->cmos_ok &&
+	  hacks[i]->cmos > hacks[i-1]->cmos &&
+	  hacks[i]->ref > hacks[i-1]->ref)
+	{
+	  ref_time = hacks[i]->ref - hacks[i-1]->ref;
+	  cmos_time = hacks[i]->cmos - hacks[i-1]->cmos;
+	  hacks[i]->cmos_rate =
+	    diff_ppm = 1.e6*(cmos_time - ref_time)/cmos_time;
+	  if (fabs(diff_ppm) > 10000.) /* agree within 1 percent? */
+	    continue;
+	  hacks[i]->valid |= CMOS_VALID | REF_VALID;
+	  s0=hacks[i-1]->sigma_ref;
+	  s1=hacks[i]->sigma_ref;
+	  hacks[i]->cmos_sigma =
+	    sigma_ppm = 1.e6*sqrt(s0*s0 + s1*s1)/ref_time;
+	  start = (time_t)hacks[i-1]->sys;
+	  strcpy(startstring, ctime(&start));
+	  finish = (time_t)hacks[i]->sys;
+	  strcpy(finishstring, ctime(&finish));
+	  digits = -(int)floor(log(.5*sigma_ppm)/log(10.));
+	  if (digits < 0) digits = 0;
+	  printf("%.24s  %.24s  %6.4f  %1.*f +- %1.*f\n",
+		 startstring, finishstring, ref_time/SECONDSPERDAY,
+		 digits, diff_ppm, digits, sigma_ppm);
+	}
+    }
+
+  /* compare sys and reference rates */
+  printf(
+"start                     finish                    days    sys_error (ppm)\n");
+  for (i = 1; i < n; i++)
+    {
+      if (hacks[i]->sigma_ref != 0 && 
+	  hacks[i-1]->sigma_ref != 0 && 
+	  hacks[i]->sys_ok &&
+	  hacks[i]->sys > hacks[i-1]->sys &&
+	  hacks[i]->ref > hacks[i-1]->ref)
+	{
+	  ref_time = hacks[i]->ref - hacks[i-1]->ref;
+	  sys_time = hacks[i]->sys - hacks[i-1]->sys;
+	  hacks[i]->sys_rate =
+	    diff_ppm = 1.e6*(sys_time - ref_time)/sys_time
+	    - 100*(hacks[i]->tick - tick_mid) - hacks[i]->freq/SHIFT;
+	  if (fabs(diff_ppm) > 10000.) /* agree within 1 percent? */
+	    continue;
+	  hacks[i]->valid |= REF_VALID | SYS_VALID;
+	  s0=hacks[i-1]->sigma_ref;
+	  s1=hacks[i]->sigma_ref;
+	  hacks[i]->sys_sigma =
+	    sigma_ppm = 1.e6*sqrt(s0*s0 + s1*s1)/ref_time;
+	  start = (time_t)hacks[i-1]->sys;
+	  strcpy(startstring, ctime(&start));
+	  finish = (time_t)hacks[i]->sys;
+	  strcpy(finishstring, ctime(&finish));
+	  digits = -(int)floor(log(.5*sigma_ppm)/log(10.));
+	  if (digits < 0) digits = 0;
+	  printf("%.24s  %.24s  %6.4f  %1.*f +- %1.*f\n",
+		 startstring, finishstring, ref_time/SECONDSPERDAY,
+		 digits, diff_ppm, digits, sigma_ppm);
+	}
+    }
+
+  /* find least-squares solution incorporating all the data */
+
+  p[0] = 1.e10; p[1] = 0.;
+  p[2] = 0.;    p[3] = 1.e10;
+  x[0] = 0.; x[1] = 0.;
+
+  for (i = 1; i < n; i++)
+    {
+      switch(hacks[i]->valid)
+	{
+	case 0: 
+	  break;
+	case (CMOS_VALID | REF_VALID):
+	  /* update only the first component of the state (cmos rate) */
+	  h[0] = 1.; h[1] = 0.;
+	  z[0] = hacks[i]->cmos_rate;
+	  r[0] = hacks[i]->cmos_sigma; r[0] *= r[0];
+	  kalman_update(x, 2, p, h, z, 1, r);
+	  break;
+	case (SYS_VALID | REF_VALID):
+	  /* update only the second component of the state (system rate) */
+	  h[0] = 0.; h[1] = 1.;
+	  z[0] = hacks[i]->sys_rate;
+	  r[0] = hacks[i]->sys_sigma; r[0] *= r[0];
+	  kalman_update(x, 2, p, h, z, 1, r);
+	  break;
+	case (CMOS_VALID | SYS_VALID):
+	  /* update the difference between the system and cmos rates */
+	  h[0] = -1.; h[1] = 1.;
+	  z[0] = hacks[i]->relative_rate;
+	  r[0] = hacks[i]->relative_sigma; r[0] *= r[0];
+	  kalman_update(x, 2, p, h, z, 1, r);
+	  break;
+	case (CMOS_VALID | SYS_VALID | REF_VALID):
+	  /* This is the interesting case.  We have estimates of the
+             cmos and system rates, but they are highly correlated
+             because they contain the same errors in the reference
+             times.  Thus, we know the *difference* between the cmos
+             and system rates much better than we know either of them
+             independently.  The r matrix describes the
+             correlation. */
+	  h[0] = 1.; h[1] = 0.;
+	  h[2] = 0.; h[3] = 1.;
+	  ref_var = hacks[i]->cmos_sigma*hacks[i]->cmos_sigma;
+	  cmos_var = hacks[i]->relative_sigma; cmos_var *= cmos_var;
+	  sys_var = cmos_var;
+	  r[0] = ref_var + 2.*cmos_var;
+	  r[1] = r[2] = ref_var;
+	  r[3] = ref_var + 2.*sys_var;
+	  z[0] = hacks[i]->cmos_rate;
+	  z[1] = hacks[i]->sys_rate;
+	  kalman_update(x, 2, p, h, z, 2, r);
+	  break;
+	}
+    }
+
+  sigma_ppm = sqrt(p[0]);
+  digits = -(int)floor(log(.5*sigma_ppm)/log(10.));
+  if (digits < 0) digits = 0;
+  printf("least-squares solution:\n"
+	 "   cmos_error = %.*f +- %.*f ppm\n",
+	 digits, x[0], digits, sigma_ppm);
+  if (sigma_ppm < 100)
+    printf("      suggested adjustment = %6.4f sec/day\n",
+	   -x[0]*SECONDSPERDAY/1.e6);
+  else
+    printf("      (no suggestion)\n");
+  {
+    struct cmos_adj *pca = get_cmos_adjustment();
+    printf("        current adjustment = %6.4f sec/day\n",
+	   pca->ca_factor);
+  }
+
+  sigma_ppm = sqrt(p[3]);
+  digits = -(int)floor(log(.5*sigma_ppm)/log(10.));
+  if (digits < 0) digits = 0;
+  printf("   sys_error = %.*f +- %.*f ppm\n",
+	 digits, x[1], digits, sigma_ppm);
+  if (sigma_ppm < hz)
+    {
+      error_ppm = x[1];
+      if (error_ppm > hz)
+	tick_delta = -(error_ppm + hz/2)/hz;
+      else if (error_ppm < -hz)
+	tick_delta = (-error_ppm + hz/2)/hz;
+      error_ppm += tick_delta*hz;
+      printf("      suggested tick = %5ld  freq = %9.0f\n",
+	     tick_mid + tick_delta, -error_ppm*SHIFT);
+      if (abs(error_ppm)>500)
+	printf ("WARNING: required correction is greater "
+		"than plus/minus 500 parts per million.\n");
+    }
+  else
+    printf("      (no suggestion)\n");
+  {
+    txc.modes = 0;
+    adjtimex(&txc);
+    printf("        current tick = %5ld  freq = %9ld\n",
+	   txc.tick, txc.freq );
+  }
+  printf(
+"note: clock variations and unstated data errors may mean that the\n"
+"least squares solution has a bigger error than estimated here\n");
+  if (sigma_ppm < 100 && adjusting)
+    {
+      if (abs(error_ppm)>500)
+	{
+	  if (force_adjust)
+	    printf (
+"\nWARNING: required correction is greater than plus/minus 500 parts \n"
+"per million, but adjusting anyway per your request.\n");
+	  else
+	    {
+	      printf(
+"\nERROR: required correction is greater than plus/minus 500 parts \n"
+"per million, quitting (use --force-adjust to override).\n");
+	      if (resetting)
+		reset_time_status();
+	      exit(1);
+	    }
+	}
+      txc.modes = ADJ_FREQUENCY | ADJ_TICK;
+      txc.tick = tick_mid + tick_delta;
+      txc.freq = -error_ppm*SHIFT;
+      if (adjtimex (&txc) < 0) 
+	{
+	  perror ("adjtimex"); 
+	  exit(1);
+	}
+      if (resetting)
+	reset_time_status();
+      printf("new tick = %5ld  freq = %7ld\n", txc.tick, txc.freq );
+    }
+
+  for (i = 0; i < n; i++)
+    free(hacks[i]);
+  free(hacks);
+}
+
+/* Perform one update on a discrete linear Kalman filter.  z is a
+   measurement related to the state x by
+       z = h x + v
+   where v is the measurement error, normally distributed, with
+   covariance r.
+
+   Because of the size of the temporary arrays, this particular
+   implementation is restricted to 2 states.  There are no provisions
+   here for propagating the state or its covariance between updates,
+   because it is not required in this case (i.e. the state transition
+   matrix is a unit matrix).  See, for example: Blackman, "Multitarget
+   Tracking with Radar Applications" */
+static 
+void kalman_update(double *x,	/* state vector */
+		   int xr,	/* rows in x (must be 1 or 2) */
+		   double *p,	/* covariance matrix for x (has xr
+				   rows and columns) */
+		   double *h,	/* transforms from state space to
+				   measurement space (has zr rows
+				   and xr columns) */
+		   double *z,	/* measurement vector */
+		   int zr,	/* rows in z (must be 1 or 2) */
+		   double *r)	/* covariance matrix for z (has zr
+				   rows and columns) */
+{
+  static double k[4], num[4], denom[4], v[4], w[4];
+  int pr=xr, pc=xr, 
+    hr=zr, hc=xr, 
+    rr=zr, rc=zr,
+    kr=xr, kc=zr,
+    nr=xr, nc=zr,
+    dr=zr, dc=zr,
+    vr=xr, vc=1,
+    wr=zr, wc=1;
+
+  /* find the Kalman gain k:
+     k = p h' /(h p h' + r) */
+  mat_mul_nt(p,pr,pc, h,hr,hc, num,nr,nc);
+  mat_similarity(h,hr,hc, p,pr,pc, denom,dr,dc);
+  mat_add(denom,dr,dc, r,rr,rc, denom,dr,dc);
+  if (sym_factor(denom,dr,dc, denom,dr,dc))
+    return;			/* failure - singular */
+  sym_rdiv(num,nr,nc, denom,dr,dc, k,kr,kc);
+
+  /* update the state x:
+     x <- x + k (z - h x) */
+  mat_mul(h,hr,hc, x,xr,1, w,wr,wc);
+  mat_sub(z,zr,1, w,wr,wc, w,wr,wc);
+  mat_mul(k,kr,kc, w,wr,wc, v,vr,vc);
+  mat_add(x,xr,1, v,vr,vc, x,xr,1);
+
+  /* update the covariance p:
+     p <- (I - k h) p */
+  mat_one(v,xr,xr);
+  mat_mul(k,kr,kc, h,hr,hc, w,xr,xr);
+  mat_sub(v,xr,xr, w,xr,xr, w,xr,xr);
+  mat_mul(w,xr,xr, p,xr,xr, v,xr,xr);
+  mat_copy(v,xr,xr, p,xr,xr);
+}
Index: a/adjtimex/create-1.29-patch/adjtimex-1.29-new
===================================================================
--- a/adjtimex/create-1.29-patch/adjtimex-1.29-new	(nonexistent)
+++ a/adjtimex/create-1.29-patch/adjtimex-1.29-new	(revision 5)

Property changes on: a/adjtimex/create-1.29-patch/adjtimex-1.29-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/adjtimex/create-1.29-patch/create.patch.sh
===================================================================
--- a/adjtimex/create-1.29-patch/create.patch.sh	(nonexistent)
+++ a/adjtimex/create-1.29-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=1.29
+
+tar --files-from=file.list -xJvf ../adjtimex-$VERSION.tar.xz
+mv adjtimex-$VERSION adjtimex-$VERSION-orig
+
+cp -rf ./adjtimex-$VERSION-new ./adjtimex-$VERSION
+
+diff --unified -Nr  adjtimex-$VERSION-orig  adjtimex-$VERSION > adjtimex-$VERSION.patch
+
+mv adjtimex-$VERSION.patch ../patches
+
+rm -rf ./adjtimex-$VERSION
+rm -rf ./adjtimex-$VERSION-orig

Property changes on: a/adjtimex/create-1.29-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/adjtimex/create-1.29-patch/file.list
===================================================================
--- a/adjtimex/create-1.29-patch/file.list	(nonexistent)
+++ a/adjtimex/create-1.29-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+adjtimex-1.29/adjtimex.c
Index: a/adjtimex/create-1.29-patch
===================================================================
--- a/adjtimex/create-1.29-patch	(nonexistent)
+++ a/adjtimex/create-1.29-patch	(revision 5)

Property changes on: a/adjtimex/create-1.29-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/adjtimex/patches/README
===================================================================
--- a/adjtimex/patches/README	(nonexistent)
+++ a/adjtimex/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/adjtimex/patches
===================================================================
--- a/adjtimex/patches	(nonexistent)
+++ a/adjtimex/patches	(revision 5)

Property changes on: a/adjtimex/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/adjtimex
===================================================================
--- a/adjtimex	(nonexistent)
+++ a/adjtimex	(revision 5)

Property changes on: a/adjtimex
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/attr/Makefile
===================================================================
--- a/attr/Makefile	(nonexistent)
+++ a/attr/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/attr
+
+versions    = 2.4.48
+pkgname     = attr
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: a/attr
===================================================================
--- a/attr	(nonexistent)
+++ a/attr	(revision 5)

Property changes on: a/attr
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/banners/Makefile
===================================================================
--- a/banners/Makefile	(nonexistent)
+++ a/banners/Makefile	(revision 5)
@@ -0,0 +1,55 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/banners
+
+pkgname     = banners
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(pkgname))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/banners.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-make-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/banners/create-make-patch/banners-new/Makefile
===================================================================
--- a/banners/create-make-patch/banners-new/Makefile	(nonexistent)
+++ a/banners/create-make-patch/banners-new/Makefile	(revision 5)
@@ -0,0 +1,9 @@
+
+CFLAGS += -O2
+
+all: bban sysvbanner
+
+bban: bban.c
+	$(CC) $(CFLAGS) -s -o bban bban.c
+sysvbanner: sysvbanner.c
+	$(CC) $(CFLAGS) -s -o sysvbanner sysvbanner.c
Index: a/banners/create-make-patch/banners-new/bban.c
===================================================================
--- a/banners/create-make-patch/banners-new/bban.c	(nonexistent)
+++ a/banners/create-make-patch/banners-new/bban.c	(revision 5)
@@ -0,0 +1,645 @@
+/*   B B A N  -  A Better Banner Program  -  Apr84 IBM-PC version   */
+/*  The vax version will not work directly on the PC, because the
+**  UNIX shell metacharacter interpretation caused strings like
+**  'one two three' to be passed as a single command line arg, while
+**  under DOS, it becomes three: "'one", "two", and "three'"
+**  So, we need a scheme for embedding spaces in arguments.
+**  One: choose some other character like underscore '_' and after
+**  command line argument passing, translate it into a space.
+**  Two: alter the program logic to treat single and double
+**  quotes as delimiters, and keep concatenating DOS-passed arguments
+**  until the closing delimiter is detected.
+**  Two is more elegant, but One is easier.
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#if defined(__STDC__) || defined(__cplusplus)
+# define P_(s) s
+#else
+# define P_(s) ()
+#endif
+
+
+/* banner.c */
+extern int main P_((int argc, char **argv));
+static void doline P_((void));
+static int aqarg P_((void));
+static int redarg P_((void));
+static int gint P_((char **pp));
+
+#undef P_
+
+/*   table of character translation patterns   */
+char            ctbl[128][7] =
+{				/*  stolen from banner  */
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /*below 040*/
+    { 0, 000, 000, 000, 000, 000, 000 },            /* */
+    { 034, 034, 034, 010, 0, 034, 034 },            /*!*/
+    { 0167, 0167, 042, 0, 0, 0, 0 },                /*"*/
+    { 024, 024, 0177, 024, 0177, 024, 024 },        /*#*/
+    { 076, 0111, 0110, 076, 011, 0111, 076 },       /*$*/
+    { 0161, 0122, 0164, 010, 027, 045, 0107 },      /*%*/
+    { 030, 044, 030, 070, 0105, 0102, 071 },        /*&*/
+    { 034, 034, 010, 020, 0, 0, 0 },                /*'*/
+    { 014, 020, 040, 040, 040, 020, 014 },          /*(*/
+    { 030, 4, 2, 2, 2, 4, 030 },                    /*)*/
+    { 0, 042, 024, 0177, 024, 042, 0 },             /***/
+    { 0, 010, 010, 076, 010, 010, 0 },              /*+*/
+    { 0, 0, 0, 034, 034, 010, 020 },                /*,*/
+    { 0, 0, 0, 076, 0, 0, 0 },                      /*-*/
+    { 0, 0, 0, 0, 034, 034, 034 },                  /*.*/
+    { 1, 2, 4, 010, 020, 040, 0100 },               /*SLASH*/
+    { 034, 042, 0101, 0101, 0101, 042, 034 },       /*0*/
+    { 010, 030, 050, 010, 010, 010, 076 },          /*1*/
+    { 076, 0101, 1, 076, 0100, 0100, 0177 },        /*2*/
+    { 076, 0101, 1, 076, 1, 0101, 076 },            /*3*/
+    { 0100, 0102, 0102, 0102, 0177, 2, 2 },         /*4*/
+    { 0177, 0100, 0100, 0176, 1, 0101, 076 },       /*5*/
+    { 076, 0101, 0100, 0176, 0101, 0101, 076 },     /*6*/
+    { 0177, 0102, 04, 010, 020, 020, 020 },         /*7*/
+    { 076, 0101, 0101, 076, 0101, 0101, 076 },      /*8*/
+    { 076, 0101, 0101, 077, 1, 0101, 076 },         /*9*/
+    { 010, 034, 010, 0, 010, 034, 010 },            /*:*/
+    { 034, 034, 0, 034, 034, 010, 020 },            /*;*/
+    { 020, 010, 4, 2, 4, 010, 020 },                /*<*/
+    { 0, 0, 076, 0, 076, 0, 0 },                    /*=*/
+    { 4, 010, 020, 040, 020, 010, 4 },              /*>*/
+    { 076, 0101, 1, 016, 010, 0, 010 },             /*?*/
+    { 076, 0101, 0135, 0135, 0136, 0100, 076 },     /*@*/
+    { 010, 024, 042, 0101, 0177, 0101, 0101 },      /*A*/
+    { 0176, 0101, 0101, 0176, 0101, 0101, 0176 },   /*B*/
+    { 076, 0101, 0100, 0100, 0100, 0101, 076 },     /*C*/
+    { 0176, 0101, 0101, 0101, 0101, 0101, 0176 },   /*D*/
+    { 0177, 0100, 0100, 0174, 0100, 0100, 0177 },   /*E*/
+    { 0177, 0100, 0100, 0174, 0100, 0100, 0100 },   /*F*/
+    { 076, 0101, 0100, 0117, 0101, 0101, 076 },     /*G*/
+    { 0101, 0101, 0101, 0177, 0101, 0101, 0101 },   /*H*/
+    { 034, 010, 010, 010, 010, 010, 034 },          /*I*/
+    { 1, 1, 1, 1, 0101, 0101, 076 },                /*J*/
+    { 0102, 0104, 0110, 0160, 0110, 0104, 0102 },   /*K*/
+    { 0100, 0100, 0100, 0100, 0100, 0100, 0177 },   /*L*/
+    { 0101, 0143, 0125, 0111, 0101, 0101, 0101 },   /*M*/
+    { 0101, 0141, 0121, 0111, 0105, 0103, 0101 },   /*N*/
+    { 0177, 0101, 0101, 0101, 0101, 0101, 0177 },   /*O*/
+    { 0176, 0101, 0101, 0176, 0100, 0100, 0100 },   /*P*/
+    { 076, 0101, 0101, 0101, 0105, 0102, 075 },     /*Q*/
+    { 0176, 0101, 0101, 0176, 0104, 0102, 0101 },   /*R*/
+    { 076, 0101, 0100, 076, 1, 0101, 076 },         /*S*/
+    { 0177, 010, 010, 010, 010, 010, 010 },         /*T*/
+    { 0101, 0101, 0101, 0101, 0101, 0101, 076 },    /*U*/
+    { 0101, 0101, 0101, 0101, 042, 024, 010 },      /*V*/
+    { 0101, 0111, 0111, 0111, 0111, 0111, 066 },    /*W*/
+    { 0101, 042, 024, 010, 024, 042, 0101 },        /*X*/
+    { 0101, 042, 024, 010, 010, 010, 010 },         /*Y*/
+    { 0177, 2, 4, 010, 020, 040, 0177 },            /*Z*/
+    { 076, 040, 040, 040, 040, 040, 076 },          /*[*/
+    { 0100, 040, 020, 010, 004, 002, 001 },         /*\*/
+    { 076, 2, 2, 2, 2, 2, 076 },                    /*]*/
+    { 010, 024, 042, 0, 0, 0, 0 },                  /*^*/
+    { 0, 000, 000, 000, 000, 000, 0177 },           /*_*/
+    { 034, 034, 010, 04, 0, 0, 0 },                 /*`*/
+    { 0, 014, 022, 041, 077, 041, 041 },            /*a*/
+    { 0, 076, 041, 076, 041, 041, 076 },            /*b*/
+    { 0, 036, 041, 040, 040, 041, 036 },            /*c*/
+    { 0, 076, 041, 041, 041, 041, 076 },            /*d*/
+    { 0, 077, 040, 076, 040, 040, 077 },            /*e*/
+    { 0, 077, 040, 076, 040, 040, 040 },            /*f*/
+    { 0, 036, 041, 040, 047, 041, 036 },            /*g*/
+    { 0, 041, 041, 077, 041, 041, 041 },            /*h*/
+    { 0, 004, 004, 004, 004, 004, 004 },            /*i*/
+    { 0, 001, 001, 001, 001, 041, 036 },            /*j*/
+    { 0, 041, 042, 074, 044, 042, 041 },            /*k*/
+    { 0, 040, 040, 040, 040, 040, 077 },            /*l*/
+    { 0, 041, 063, 055, 041, 041, 041 },            /*m*/
+    { 0, 041, 061, 051, 045, 043, 041 },            /*n*/
+    { 0, 036, 041, 041, 041, 041, 036 },            /*o*/
+    { 0, 076, 041, 041, 076, 040, 040 },            /*p*/
+    { 0, 036, 041, 041, 045, 042, 035 },            /*q*/
+    { 0, 076, 041, 041, 076, 042, 041 },            /*r*/
+    { 0, 036, 040, 036, 001, 041, 036 },            /*s*/
+    { 0, 037, 004, 004, 004, 004, 004 },            /*t*/
+    { 0, 041, 041, 041, 041, 041, 036 },            /*u*/
+    { 0, 041, 041, 041, 041, 022, 014 },            /*v*/
+    { 0, 041, 041, 041, 055, 063, 041 },            /*w*/
+    { 0, 041, 022, 014, 014, 022, 041 },            /*x*/
+    { 0, 021, 012, 004, 004, 004, 004 },            /*y*/
+    { 0, 077, 002, 004, 010, 020, 077 },            /*z*/
+    { 034, 040, 040, 0140, 040, 040, 034 },         /*{*/
+    { 010, 010, 010, 0, 010, 010, 010 },            /*|*/
+    { 034, 2, 2, 3, 2, 2, 034 },                    /*}*/
+    { 060, 0111, 06, 0, 0, 0, 0 },                  /*~*/
+    { 0, 000, 000, 000, 000, 000, 000   },          /*DEL*/
+};
+
+/*   string sizes that fit selected printer widths:
+  flag/size/-w=> 72  80  81 120 132 158 174 217 225
+   -hj   8        9  10  10  15  16  19  21  27  28
+   -ho   9        8   8   9  13  14  17  19  24  25
+   -fj  15        4   5   5   8   8  10  11  14  15
+   -fo  16        4   5   5   7   8   9  10  13  14
+  note: -jn "lower case" is similar to -on "CAPS"
+*/
+
+/*   table of parameter default values   */
+int             dw = 80;	/*  page width, print positions  */
+int             di = 0;		/*  indent, print positions  */
+int             db = 0;		/*  print <pb> blank lines before arg  */
+ /*  negative numbers require use of col  */
+int             dnp = 0200;	/*  contrast: 0200 -> pos, 0 -> neg  */
+int             doj = 0;	/*  spacing: 0 -> open, 1 -> jammed  */
+int             dclr = 8;	/*  justification: 8 -> left,
+			    1 -> center, 0 -> right  */
+int             dtv = 0;	/*  vert size: 0 -> normal, 7 -> double  */
+int             dfh = 0;	/*  hor size: 0 -> normal, 7 -> double  */
+int             dex = 1;	/*  echo: 1 -> expand, 0 -> copy thru  */
+int             dau = 1;	/*  mark case: 1 -> caps, 0 -> asis  */
+int             dkd = 0;	/*  mark string: 0 -> pmark, 1 -> self  */
+
+char            dmark[31] = "";	/*  marking chars - used serially  */
+
+/*   parameters to use for current line   */
+int             pw, pi, pb, pnp, poj, pclr, ptv, pfh, pex, pau, pkd;
+char           *pms, pmark[31];
+
+/*   global variables   */
+char           *arg, ioarg1[121], ioarg2[121];	/*  arg pointer, input areas  */
+int             aargc;
+char          **aargv;
+int             vx, strl;
+char           *chp, *esp, *imk, *mkp, *chh, mk;
+
+/*   e.g:	bban -nk " BBAN "
+BBANBBANBBANBBANBBANBBANBBANBBANBBANBBANBBANBBANBBANBB
+BANBBANBBA      BAN      ANBBAN BANBB NBBAN BANBBANBBA
+ANBBANBBAN BANBB NB ANBBA BBAN B NBBA  BANB ANBBANBBAN
+NBBANBBANB ANBBA BB NBBAN BAN BAN BAN B NBB NBBANBBANB
+BBANBBANBB      BBA      BAN BANBB NB AN BA BBANBBANBB
+BANBBANBBA BBANB AN BANBB NB       BB NBB N BANBBANBBA
+ANBBANBBAN BANBB NB ANBBA BB NBBAN BA BBAN  ANBBANBBAN
+NBBANBBANB      NBB      BBA BBANB AN BANBB NBBANBBANB
+BBANBBANBBANBBANBBANBBANBBANBBANBBANBBANBBANBBANBBANBB
+*/
+
+int
+main (int argc, char **argv)
+{
+    int             firstarg, i, ival, xvx, cwd;
+    char           *p, *q, ol[226], *ols;
+
+    /*   check for proper usage   */
+    if (argc < 2)
+    {
+	printf ("Usage: bban [-abcdefghijklmnopqrstuvwx] textarg [-] [...]\n");
+	printf ("[-] interpolate from stdin into command line.\n");
+	printf ("-w#   (Width) The page width is set to #.\n");
+	printf ("-i#   (Indent) # extra blanks are left-inserted into each output line.\n");
+	printf ("-b#   (Blank lines) # extra blank lines will be output before the text\n");
+	printf ("-lrc  (Left, Right, Centered) ;justification of output\n");
+	printf ("-jo   (Jammed,Open) -j) omit normal 1-space border on top & left\n");
+	printf ("-tv   (Tall,Vertically normal)\n");
+	printf ("-fh   (Fat,Horizontally normal) \n");
+	printf ("-ms   (Mark string,Self) -m) next input arg. forms cyclic banner chars\n");
+	printf ("	-s) each text argument character used in forming itself.\n");
+	printf ("-kd   (marK,Default mark) use the text argument string to mark itself\n");
+	printf ("-au   (Asis,Uppercase) affect marking characters from -s or -k\n");
+	printf ("-pn   (Positive,Negative)\n");
+	printf ("-ex   (Echo,eXpand)\n");
+	printf ("-g    (Global) \n");
+	printf ("-q    (Quit) \n");
+	printf ("The default flag settings are: -lovhsupxw120i0b0\n");
+	printf ("bban -jm # text (Gives results similar to the banner command)\n");
+	printf ("bban -m \\ EST -b-8ils EST \n");
+	printf ("bban -jmn NUTS <12 underscores> -tfow72 ____NUTS____ -w72 <12 more>'\n");
+	printf ("bban -j LO VE | bban -j -\n");
+	exit (1);
+    }
+    /*   make cmd line args available to other routines   */
+    aargc = argc;
+    aargv = argv;
+    /*   set parameters to default values   */
+    pw = dw;
+    pi = di;
+    pb = db;
+    pnp = dnp;
+    poj = doj;
+    pclr = dclr;
+    ptv = dtv;
+    pfh = dfh;
+    pex = dex;
+    pau = dau;
+    pkd = dkd;
+    pms = dmark;
+    imk = pms;
+
+    /*   loop on args from cmd line or std input   */
+    firstarg = 1;
+
+    while (aqarg () != 0)
+    {
+	if (*arg == '-')
+	{			/*  analyze flag args  */
+	    p = arg;		/*  note q flag in loop condition  */
+	    while (*++p != '\0' && *p != 'q' && *p != 'Q')
+		switch (*p)
+		{
+		case 'w':
+		case 'W':
+		    if ((ival = gint (&p)) >= 1 && ival <= 225)
+			pw = ival;
+		    else
+			printf ("W flag needs numeric 1:225, e.g: -w80\n");
+		    break;
+		case 'i':
+		case 'I':
+		    if ((ival = gint (&p)) >= 0)
+			pi = ival;
+		    else
+			printf ("I flag needs numeric >= 0, e.g: -i0\n");
+		    break;
+		case 'b':
+		case 'B':
+		    pb = gint (&p);	/*  extra vertical spacing  */
+		    break;
+		case 'n':
+		case 'N':
+		    pnp = 0;	/*  contrast -> negative  */
+		    break;
+		case 'p':
+		case 'P':
+		    pnp = 0200;	/*  contrast -> positive  */
+		    break;
+		case 'o':
+		case 'O':
+		    poj = 0;	/*  spacing -> open  */
+		    break;
+		case 'j':
+		case 'J':
+		    poj = 1;	/*  spacing -> jammed  */
+		    break;
+		case 'c':
+		case 'C':
+		    pclr = 1;	/*  justification -> center  */
+		    break;
+		case 'l':
+		case 'L':
+		    pclr = 8;	/*  justification -> left  */
+		    break;
+		case 'r':
+		case 'R':
+		    pclr = 0;	/*  justification -> right  */
+		    break;
+		case 't':
+		case 'T':
+		    ptv = 7;	/*  height -> double  */
+		    break;
+		case 'v':
+		case 'V':
+		    ptv = 0;	/*  height -> normal  */
+		    break;
+		case 'f':
+		case 'F':
+		    pfh = 7;	/*  width -> double  */
+		    break;
+		case 'h':
+		case 'H':
+		    pfh = 0;	/*  width -> normal  */
+		    break;
+		case 'e':
+		case 'E':
+		    pex = 0;	/*  echo only - don't expand  */
+		    break;
+		case 'x':
+		case 'X':
+		    pex = 1;	/*  expand to banner size  */
+		    break;
+		case 'g':
+		case 'G':
+		    firstarg = 1;	/*  reset global defaults  */
+		    break;
+		case 'a':
+		case 'A':
+		    pau = 0;	/*  use chars asis for mark  */
+		    break;
+		case 'u':
+		case 'U':
+		    pau = 1;	/*  use upper case for mark  */
+		    break;
+		case 'k':
+		case 'K':
+		    pkd = 1;	/*  use string to mark itself  */
+		    break;
+		case 'd':
+		case 'D':
+		    pkd = 0;	/*  revert to default mark string  */
+		    break;
+		case 's':
+		case 'S':
+		    pmark[0] = '\0';	/*  mark with self  */
+		    pms = pmark;
+		    pkd = 0;
+		    break;
+		case 'm':
+		case 'M':
+		    if (aqarg () == 0)
+		    {
+			printf ("M flag needs mark string, e.g: -m ABC\n");
+			break;
+		    }
+		    for (i = 0; i < 30; i++)
+		    {
+			if (*arg == '\0')
+			    break;
+			if ((pmark[i] = *arg++) <= 040 ||
+			    pmark[i] == 0177)
+			    i--;
+		    }
+		    pmark[i] = '\0';
+		    pms = pmark;
+		    imk = pms;
+		    pkd = 0;
+		    break;
+		default:	/*  there ain't many left!  */
+		    printf ("Illegal flag \"%c\", ignored\n", *p);
+		}		/*endswitch*/
+
+	    if (firstarg)
+	    {			/*  reset defaults to first flag arg  */
+		dw = pw;
+		di = pi;
+		db = pb;
+		dnp = pnp;
+		doj = poj;
+		dclr = pclr;
+		dtv = ptv;
+		dfh = pfh;
+		dex = pex;
+		dau = pau;
+		dkd = pkd;
+		p = dmark;
+		q = pmark;
+		while ((*p++ = *q++) != '\0')
+		    ;
+		pms = dmark;
+	    }
+	}
+	else
+	{			/*  non-flag argument - print it  */
+	    /*   determine string length and page positioning   */
+	    cwd = (pex) ? 9 + pfh - poj : 1;
+	    if (pw - pi < cwd)
+	    {
+		printf ("-i%d and -w%d allow inadequate space\n", pi, pw);
+		continue;
+	    }
+
+	    for (i = 0; i < pb; i++)
+		printf ("\n");
+
+	    for (i = 0; i > pb; i--)
+		printf ("7");	/*  esc-7  */
+
+	    for (strl = 0; arg[strl]; strl++)
+		;
+
+	    if (strl * cwd > pw - pi)
+		strl = (pw - pi) / cwd;
+
+	    ols = ol + pi + ((pw - pi - strl * cwd) >> pclr);
+
+	    for (p = ol; p < ols; p++)
+		*p = ' ';	/*  blank l.h. margin  */
+
+	    if (pex)
+	    {			/*  expand chars to banner size  */
+		if (pkd)
+		{		/*  mark w/string itself  */
+		    p = arg;
+		    for (i = 0; i < 30; i++)
+		    {
+			if (*p == '\0')
+			    break;
+
+			/* patch to interpret underscores as spaces */
+			if (*p == '_')
+			    *p = ' ';
+
+			pmark[i] = *p++;
+			if (pmark[i] <= 040 || pmark[i] == 0177)
+			    i--;
+			else if (pau && pmark[i] >= 'a' && pmark[i]
+				 <= 'z')
+			    pmark[i] -= ('a' - 'A');
+		    }
+		    pmark[i] = '\0';
+		    pms = pmark;
+		    imk = pms;
+		}
+		/*   loop for each horizontal slice of chars   */
+		for (vx = poj; vx <= 8; vx++)
+		{
+		    for (xvx = 0; xvx <= ((vx & ptv) != 0); xvx++)
+		    {
+			esp = ol;	/*  loc of newline  */
+			chp = ols;	/*  start of 1st char  */
+			doline ();	/*  format one line  */
+			*esp = '\0';
+			printf ("%s\n", ol);	/*  VOLA!!  */
+			*esp = ' ';
+			if (*imk == '\0' || *++imk == '\0')
+			    imk = pms;
+		    }
+		}
+	    }
+	    else
+	    {			/*  echo without expansion  */
+		esp = ol;
+		chp = ols;
+		for (i = 0; i < strl; i++)
+		{
+		    *chp = arg[i];
+		    if (*chp++ != ' ')
+			esp = chp;
+		}
+		*esp = '\0';
+		printf ("%s\n", ol);
+	    }
+	    /*   reset parms to defaults   */
+	    pw = dw;
+	    pi = di;
+	    pb = db;
+	    pnp = dnp;
+	    poj = doj;
+	    pclr = dclr;
+	    ptv = dtv;
+	    pfh = dfh;
+	    pex = dex;
+	    pau = dau;
+	    pkd = dkd;
+	    if (pms != dmark)
+	    {
+		pms = dmark;
+		imk = pms;
+	    }
+	}
+	firstarg = 0;
+    }
+    for (i = 0; i < pb; i++)
+	printf ("\n");
+
+    return (0);
+}
+
+static void
+doline (void)
+{
+    int             cx, hx, xhx, chs;
+    mkp = imk;
+    for (cx = 0; cx < strl; cx++)
+    {				/*  loop on chars  */
+	chh = arg + cx;
+
+	/* patch to convert underscores to spaces */
+	if (*chh == '_')
+	    *chh = ' ';
+
+	chs = (vx & 7) ? ctbl[(*chh)&0x7F][vx - 1] : 0;
+	/*   convert mark to upper case   */
+	mk = (pau && *chh >= 'a' && *chh <= 'z') ? *chh - ('a' - 'A') : *chh;
+	for (hx = poj; hx <= 8; hx++)
+	{			/*  vert slice  */
+	    for (xhx = 0; xhx <= ((hx & pfh) != 0); xhx++)
+	    {
+		if (*pms)
+		{		/*  cycle mark string  */
+		    mk = *mkp;
+		    if (*++mkp == '\0')
+			mkp = pms;
+		}
+		*chp = ((chs << hx & 0200) == pnp) ? mk : ' ';
+		if (*chp++ != ' ')
+		    esp = chp;
+	    }
+	}
+    }
+}
+
+static int
+aqarg (void)
+{
+    static int      dashsw = 0;
+    if (--aargc > 0)
+    {				/*  more cmd line args  */
+	if (**++aargv != '-' || *(*aargv + 1) != '\0')
+	{
+	    arg = *aargv;
+	    dashsw = 0;
+	    return 1;
+	}
+	else
+	{			/*  lone dash - std input  */
+	    dashsw = 1;
+	    if (redarg ())
+		return 1;
+	    printf ("EOF on std input\n");
+	    return 0;
+	}
+    }
+    else
+    {				/*  read input if dash last  */
+	if (dashsw)
+	    return (redarg ());
+	arg = ioarg1;
+	ioarg1[0] = '\0';
+	return 0;
+    }
+}
+
+static int
+redarg (void)
+{
+    static int      c = 1, bufsw = 1;
+    register int    i;
+
+    arg = (bufsw ^= 1) ? ioarg1 : ioarg2;
+    arg[0] = '\0';
+
+    if (c == EOF)
+	return 0;
+
+    for (i = 0; i < 120; i++)
+    {
+	arg[i] = (c = getchar ());
+	if (c == '\n' || c == EOF)
+	    break;
+    }
+
+    arg[i] = '\0';
+
+    if (c == EOF)
+	return 0;
+
+    if (c == '\n')
+	return 1;
+
+    while ((c = getchar ()) != '\n' && c != EOF)
+	;
+
+    return 1;
+}
+
+static int
+gint (char **pp)
+{
+    int             dsw = 0, rslt = 0;
+
+    if (*(*pp + 1) == '-')
+    {
+	dsw = 1;
+	(*pp)++;
+    }
+
+    while (*(*pp + 1) >= '0' && *(*pp + 1) <= '9')
+    {
+	(*pp)++;
+	rslt = 10 * rslt + **pp - '0';
+    }
+
+    if (dsw)
+	return -rslt;
+
+    return rslt;
+}
Index: a/banners/create-make-patch/banners-new/sysvbanner.c
===================================================================
--- a/banners/create-make-patch/banners-new/sysvbanner.c	(nonexistent)
+++ a/banners/create-make-patch/banners-new/sysvbanner.c	(revision 5)
@@ -0,0 +1,153 @@
+/*****************************************************************
+ * 
+ * SYSVbanner.c
+ * 
+ * This is a PD version of the SYS V banner program (at least I think 
+ * it is compatible to SYS V) which I wrote to use with the clock 
+ * program written by:
+ **     DCF, Inc.
+ **     14623 North 49th Place
+ **     Scottsdale, AZ 85254
+ * and published in the net comp.sources.misc newsgroup in early July 
+ * since the BSD banner program works quite differently.
+ * 
+ * There is no copyright or responsibility accepted for the use
+ * of this software.
+ * 
+ * Brian Wallis, brw@jim.odr.oz, 4 July 1988
+ *
+ *****************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+char *glyphs[] = {
+"         ###  ### ###  # #   ##### ###   #  ##     ###  ",
+"         ###  ### ###  # #  #  #  ## #  #  #  #    ###  ",
+"         ###   #   # ########  #   ### #    ##      #   ",
+"          #            # #   #####    #    ###     #    ",
+"                     #######   #  #  # ####   # #       ",
+"         ###           # #  #  #  # #  # ##    #        ",
+"         ###           # #   ##### #   ### #### #       ",
+
+"   ##    ##                                            #",
+"  #        #   #   #    #                             # ",
+" #          #   # #     #                            #  ",
+" #          # ####### #####   ###   #####           #   ",
+" #          #   # #     #     ###           ###    #    ",
+"  #        #   #   #    #      #            ###   #     ",
+"   ##    ##                   #             ###  #      ",
+
+"  ###     #    #####  ##### #      ####### ##### #######",
+" #   #   ##   #     ##     ##    # #      #     ##    # ",
+"#     # # #         #      ##    # #      #          #  ",
+"#     #   #    #####  ##### #    # ###### ######    #   ",
+"#     #   #   #            ########      ##     #  #    ",
+" #   #    #   #      #     #     # #     ##     #  #    ",
+"  ###   ##### ####### #####      #  #####  #####   #    ",
+
+" #####  #####    #     ###      #           #     ##### ",
+"#     ##     #  ###    ###     #             #   #     #",
+"#     ##     #   #            #     #####     #        #",
+" #####  ######         ###   #                 #     ## ",
+"#     #      #   #     ###    #     #####     #     #   ",
+"#     ##     #  ###     #      #             #          ",
+" #####  #####    #     #        #           #       #   ",
+
+" #####    #   ######  ##### ###### ############## ##### ",
+"#     #  # #  #     ##     ##     ##      #      #     #",
+"# ### # #   # #     ##      #     ##      #      #      ",
+"# # # ##     ####### #      #     ######  #####  #  ####",
+"# #### ########     ##      #     ##      #      #     #",
+"#      #     ##     ##     ##     ##      #      #     #",
+" ##### #     #######  ##### ###### ########       ##### ",
+
+"#     #  ###        ##    # #      #     ##     ########",
+"#     #   #         ##   #  #      ##   ####    ##     #",
+"#     #   #         ##  #   #      # # # ## #   ##     #",
+"#######   #         ####    #      #  #  ##  #  ##     #",
+"#     #   #   #     ##  #   #      #     ##   # ##     #",
+"#     #   #   #     ##   #  #      #     ##    ###     #",
+"#     #  ###   ##### #    # ########     ##     ########",
+
+"######  ##### ######  ##### ########     ##     ##     #",
+"#     ##     ##     ##     #   #   #     ##     ##  #  #",
+"#     ##     ##     ##         #   #     ##     ##  #  #",
+"###### #     #######  #####    #   #     ##     ##  #  #",
+"#      #   # ##   #        #   #   #     # #   # #  #  #",
+"#      #    # #    # #     #   #   #     #  # #  #  #  #",
+"#       #### ##     # #####    #    #####    #    ## ## ",
+
+"#     ##     ######## ##### #       #####    #          ",
+" #   #  #   #      #  #      #          #   # #         ",
+"  # #    # #      #   #       #         #  #   #        ",
+"   #      #      #    #        #        #               ",
+"  # #     #     #     #         #       #               ",
+" #   #    #    #      #          #      #               ",
+"#     #   #   ####### #####       # #####        #######",
+
+"  ###                                                   ",
+"  ###     ##   #####   ####  #####  ###### ######  #### ",
+"   #     #  #  #    # #    # #    # #      #      #    #",
+"    #   #    # #####  #      #    # #####  #####  #     ",
+"        ###### #    # #      #    # #      #      #  ###",
+"        #    # #    # #    # #    # #      #      #    #",
+"        #    # #####   ####  #####  ###### #       #### ",
+
+"                                                        ",
+" #    #    #        # #    # #      #    # #    #  #### ",
+" #    #    #        # #   #  #      ##  ## ##   # #    #",
+" ######    #        # ####   #      # ## # # #  # #    #",
+" #    #    #        # #  #   #      #    # #  # # #    #",
+" #    #    #   #    # #   #  #      #    # #   ## #    #",
+" #    #    #    ####  #    # ###### #    # #    #  #### ",
+
+"                                                        ",
+" #####   ####  #####   ####   ##### #    # #    # #    #",
+" #    # #    # #    # #         #   #    # #    # #    #",
+" #    # #    # #    #  ####     #   #    # #    # #    #",
+" #####  #  # # #####       #    #   #    # #    # # ## #",
+" #      #   #  #   #  #    #    #   #    #  #  #  ##  ##",
+" #       ### # #    #  ####     #    ####    ##   #    #",
+
+"                       ###     #     ###   ##    # # # #",
+" #    #  #   # ###### #        #        # #  #  # # # # ",
+"  #  #    # #      #  #        #        #     ## # # # #",
+"   ##      #      #  ##                 ##        # # # ",
+"   ##      #     #    #        #        #        # # # #",
+"  #  #     #    #     #        #        #         # # # ",
+" #    #    #   ######  ###     #     ###         # # # #"};
+
+
+int main(argc,argv)
+     int argc;
+     unsigned char *argv[];
+{
+  int a,b,c,len,ind;
+  char line[80];
+
+  for(argv++;--argc;argv++){
+    len=strlen((const char *) *argv);
+    if(len>10)
+      len=10;
+    for(a=0;a<7;a++){
+      for(b=0;b<len;b++){
+	if((ind=(*argv)[b]-' ') < 0 || ind > 95)
+          ind=0;
+        for(c=0;c<7;c++){
+          line[b*8+c] = glyphs[(ind/8*7)+a][(ind%8*7)+c];
+        }
+        line[b*8+7] = ' ';
+      }
+      for(b=len*8-1;b>=0;b--){
+        if(line[b]!=' ')
+          break;
+        line[b]='\0';
+      }
+      puts(line);
+    }
+    puts("");
+  }
+  return(0);
+}
Index: a/banners/create-make-patch/banners-new
===================================================================
--- a/banners/create-make-patch/banners-new	(nonexistent)
+++ a/banners/create-make-patch/banners-new	(revision 5)

Property changes on: a/banners/create-make-patch/banners-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/banners/create-make-patch/create.patch.sh
===================================================================
--- a/banners/create-make-patch/create.patch.sh	(nonexistent)
+++ a/banners/create-make-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=none
+
+tar --files-from=file.list -xzvf ../banners.tar.gz
+mv banners banners-orig
+
+cp -rf ./banners-new ./banners
+
+diff --unified -Nr  banners-orig  banners > banners.patch
+
+mv banners.patch ../patches
+
+rm -rf ./banners
+rm -rf ./banners-orig

Property changes on: a/banners/create-make-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/banners/create-make-patch/file.list
===================================================================
--- a/banners/create-make-patch/file.list	(nonexistent)
+++ a/banners/create-make-patch/file.list	(revision 5)
@@ -0,0 +1,3 @@
+banners/Makefile
+banners/bban.c
+banners/sysvbanner.c
Index: a/banners/create-make-patch
===================================================================
--- a/banners/create-make-patch	(nonexistent)
+++ a/banners/create-make-patch	(revision 5)

Property changes on: a/banners/create-make-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/banners/patches/README
===================================================================
--- a/banners/patches/README	(nonexistent)
+++ a/banners/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/banners/patches
===================================================================
--- a/banners/patches	(nonexistent)
+++ a/banners/patches	(revision 5)

Property changes on: a/banners/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/banners
===================================================================
--- a/banners	(nonexistent)
+++ a/banners	(revision 5)

Property changes on: a/banners
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/bsdstrings/Makefile
===================================================================
--- a/bsdstrings/Makefile	(nonexistent)
+++ a/bsdstrings/Makefile	(revision 5)
@@ -0,0 +1,57 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/bsdstrings
+
+pkgname     = bsdstrings
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(pkgname))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/bsdstrings-make.patch
+patches    += $(CURDIR)/patches/bsdstrings-overflow.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-make-patch     ; ./create.patch.sh ) ; \
+	 ( cd create-overflow-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/bsdstrings/create-make-patch/bsdstrings-new/Makefile
===================================================================
--- a/bsdstrings/create-make-patch/bsdstrings-new/Makefile	(nonexistent)
+++ a/bsdstrings/create-make-patch/bsdstrings-new/Makefile	(revision 5)
@@ -0,0 +1,7 @@
+
+strings: strings.o getopt.o
+	$(CC) $(CFLAGS) -o strings strings.c getopt.c
+
+clean:
+	rm -f a.out core *~ *.o strings
+
Index: a/bsdstrings/create-make-patch/bsdstrings-new
===================================================================
--- a/bsdstrings/create-make-patch/bsdstrings-new	(nonexistent)
+++ a/bsdstrings/create-make-patch/bsdstrings-new	(revision 5)

Property changes on: a/bsdstrings/create-make-patch/bsdstrings-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/bsdstrings/create-make-patch/create.patch.sh
===================================================================
--- a/bsdstrings/create-make-patch/create.patch.sh	(nonexistent)
+++ a/bsdstrings/create-make-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=none
+
+tar --files-from=file.list -xzvf ../bsdstrings.tar.gz
+mv bsdstrings bsdstrings-orig
+
+cp -rf ./bsdstrings-new ./bsdstrings
+
+diff --unified -Nr  bsdstrings-orig  bsdstrings > bsdstrings-make.patch
+
+mv bsdstrings-make.patch ../patches
+
+rm -rf ./bsdstrings
+rm -rf ./bsdstrings-orig

Property changes on: a/bsdstrings/create-make-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/bsdstrings/create-make-patch/file.list
===================================================================
--- a/bsdstrings/create-make-patch/file.list	(nonexistent)
+++ a/bsdstrings/create-make-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+bsdstrings/Makefile
Index: a/bsdstrings/create-make-patch
===================================================================
--- a/bsdstrings/create-make-patch	(nonexistent)
+++ a/bsdstrings/create-make-patch	(revision 5)

Property changes on: a/bsdstrings/create-make-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/bsdstrings/create-overflow-patch/bsdstrings-new/strings.c
===================================================================
--- a/bsdstrings/create-overflow-patch/bsdstrings-new/strings.c	(nonexistent)
+++ a/bsdstrings/create-overflow-patch/bsdstrings-new/strings.c	(revision 5)
@@ -0,0 +1,214 @@
+/*
+ * Copyright (c) 1980, 1987 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Wed Jun 22 22:22:37 1994, faith@cs.unc.edu:
+ *     Added internationalization patches from Vitor Duarte <vad@fct.unl.pt>
+ */
+
+#include <sys/types.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <a.out.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+
+#define DEF_LEN		4		/* default minimum string length */
+#if 0
+#define ISSTR(ch)	(isascii(ch) && (isprint(ch) || ch == '\t'))
+#else
+#define ISSTR(ch)	(isprint(ch) || ch == '\t')
+#endif
+
+typedef struct exec	EXEC;		/* struct exec cast */
+
+static long	foff;			/* offset in the file */
+static int	hcnt,			/* head count */
+		head_len,		/* length of header */
+		read_len;		/* length to read */
+static u_char	hbfr[sizeof(EXEC)];	/* buffer for struct exec */
+
+static int getch();
+static void usage();
+
+int main(argc, argv)
+	int argc;
+	char **argv;
+{
+	extern char *optarg;
+	extern int optind;
+	register int ch, cnt;
+	register u_char *C;
+	EXEC *head;
+	int exitcode, minlen;
+	short asdata, oflg, fflg;
+	u_char *bfr;
+	char *file, *p;
+
+	setlocale(LC_CTYPE, "");
+
+
+	/*
+	 * for backward compatibility, allow '-' to specify 'a' flag; no
+	 * longer documented in the man page or usage string.
+	 */
+	asdata = exitcode = fflg = oflg = 0;
+	minlen = -1;
+	while ((ch = getopt(argc, argv, "-0123456789an:of")) != EOF)
+		switch((char)ch) {
+		case '0': case '1': case '2': case '3': case '4':
+		case '5': case '6': case '7': case '8': case '9':
+			/*
+			 * kludge: strings was originally designed to take
+			 * a number after a dash.
+			 */
+			if (minlen == -1) {
+				p = argv[optind - 1];
+				if (p[0] == '-' && p[1] == ch && !p[2])
+					minlen = atoi(++p);
+				else
+					minlen = atoi(argv[optind] + 1);
+			}
+			break;
+		case '-':
+		case 'a':
+			asdata = 1;
+			break;
+		case 'f':
+			fflg = 1;
+			break;
+		case 'n':
+			minlen = atoi(optarg);
+			break;
+		case 'o':
+			oflg = 1;
+			break;
+		case '?':
+		default:
+			usage();
+		}
+	argc -= optind;
+	argv += optind;
+
+	if (minlen == -1)
+		minlen = DEF_LEN;
+
+	if (!(bfr = malloc((u_int)minlen + 1))) {
+		(void)fprintf(stderr, "strings: %s\n", strerror(errno));
+		exit(1);
+	}
+	bfr[minlen] = '\0';
+	file = "stdin";
+	do {
+		if (*argv) {
+			file = *argv++;
+			if (!freopen(file, "r", stdin)) {
+				(void)fprintf(stderr,
+				    "strings; %s: %s\n", file, strerror(errno));
+				exitcode = 1;
+				goto nextfile;
+			}
+		}
+		foff = 0;
+#define DO_EVERYTHING()		{read_len = -1; head_len = 0; goto start;}
+		read_len = -1;
+		if (asdata)
+			DO_EVERYTHING()
+		else {
+			head = (EXEC *)hbfr;
+			if ((head_len =
+			    read(fileno(stdin), head, sizeof(EXEC))) == -1)
+				DO_EVERYTHING()
+			if (head_len == sizeof(EXEC) && !N_BADMAG(*head)) {
+				foff = N_TXTOFF(*head);
+				if (fseek(stdin, foff, SEEK_SET) == -1)
+					DO_EVERYTHING()
+				read_len = head->a_text + head->a_data;
+				head_len = 0;
+			}
+			else
+				hcnt = 0;
+		}
+start:
+		for (cnt = 0; (ch = getch()) != EOF;) {
+			if (ISSTR(ch)) {
+				if (!cnt)
+					C = bfr;
+				*C++ = ch;
+				if (++cnt < minlen)
+					continue;
+				if (fflg)
+					printf("%s:", file);
+				if (oflg)
+					printf("%07ld %s",
+					    foff - minlen, (char *)bfr);
+				else
+					printf("%s", bfr);
+				while ((ch = getch()) != EOF && ISSTR(ch))
+					putchar((char)ch);
+				putchar('\n');
+			}
+			cnt = 0;
+		}
+nextfile: ;
+	} while (*argv);
+	exit(exitcode);
+}
+
+/*
+ * getch --
+ *	get next character from wherever
+ */
+static int
+getch()
+{
+	++foff;
+	if (head_len) {
+		if (hcnt < head_len)
+			return((int)hbfr[hcnt++]);
+		head_len = 0;
+	}
+	if (read_len == -1 || read_len-- > 0)
+		return(getchar());
+	return(EOF);
+}
+
+static void
+usage()
+{
+	(void)fprintf(stderr,
+	    "usage: strings [-afo] [-n length] [file ... ]\n");
+	exit(1);
+}
Index: a/bsdstrings/create-overflow-patch/bsdstrings-new
===================================================================
--- a/bsdstrings/create-overflow-patch/bsdstrings-new	(nonexistent)
+++ a/bsdstrings/create-overflow-patch/bsdstrings-new	(revision 5)

Property changes on: a/bsdstrings/create-overflow-patch/bsdstrings-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/bsdstrings/create-overflow-patch/create.patch.sh
===================================================================
--- a/bsdstrings/create-overflow-patch/create.patch.sh	(nonexistent)
+++ a/bsdstrings/create-overflow-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=none
+
+tar --files-from=file.list -xzvf ../bsdstrings.tar.gz
+mv bsdstrings bsdstrings-orig
+
+cp -rf ./bsdstrings-new ./bsdstrings
+
+diff --unified -Nr  bsdstrings-orig  bsdstrings > bsdstrings-overflow.patch
+
+mv bsdstrings-overflow.patch ../patches
+
+rm -rf ./bsdstrings
+rm -rf ./bsdstrings-orig

Property changes on: a/bsdstrings/create-overflow-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/bsdstrings/create-overflow-patch/file.list
===================================================================
--- a/bsdstrings/create-overflow-patch/file.list	(nonexistent)
+++ a/bsdstrings/create-overflow-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+bsdstrings/strings.c
Index: a/bsdstrings/create-overflow-patch
===================================================================
--- a/bsdstrings/create-overflow-patch	(nonexistent)
+++ a/bsdstrings/create-overflow-patch	(revision 5)

Property changes on: a/bsdstrings/create-overflow-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/bsdstrings/patches/README
===================================================================
--- a/bsdstrings/patches/README	(nonexistent)
+++ a/bsdstrings/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/bsdstrings/patches
===================================================================
--- a/bsdstrings/patches	(nonexistent)
+++ a/bsdstrings/patches	(revision 5)

Property changes on: a/bsdstrings/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/bsdstrings
===================================================================
--- a/bsdstrings	(nonexistent)
+++ a/bsdstrings	(revision 5)

Property changes on: a/bsdstrings
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/btrfs-progs/Makefile
===================================================================
--- a/btrfs-progs/Makefile	(nonexistent)
+++ a/btrfs-progs/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/btrfs-progs
+
+versions    = 5.15.1
+pkgname     = btrfs-progs
+suffix      = tar.xz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/btrfs-progs-5.15.1-python-cross.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-5.15.1-python-cross-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/Makefile
===================================================================
--- a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/Makefile	(nonexistent)
+++ a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/Makefile	(revision 5)
@@ -0,0 +1,907 @@
+#
+# Basic build targets:
+#   all		all main tools and the shared library
+#   static      build static binaries, requires static version of the libraries
+#   test        run the full testsuite
+#   install     install binaries, shared libraries and header files to default
+#               location (/usr/local)
+#   install-static
+#               install the static binaries, static libraries and header files
+#               to default locationh (/usr/local)
+#   clean       clean built binaries (not the documentation)
+#   clean-all   clean as above, clean docs and generated files
+#
+# All-in-one binary (busybox style):
+#   btrfs.box         single binary with functionality of mkfs.btrfs, btrfs-image,
+#                     btrfs-convert and btrfstune, selected by the file name
+#   btrfs.box.static  dtto, static version
+#
+# Tuning by variables (environment or make arguments):
+#   V=1            verbose, print command lines (default: quiet)
+#   C=1            run checker before compilation (default checker: sparse)
+#   D=1            debugging build, turn off optimizations
+#   D=dflags       dtto, turn on additional debugging features:
+#                  verbose - print file:line along with error/warning messages
+#                  trace   - print trace before the error/warning messages
+#                  abort   - call abort() on first error (dumps core)
+#                  all     - shortcut for all of the above
+#                  asan    - enable address sanitizer compiler feature
+#                  tsan    - enable thread sanitizer compiler feature
+#                  ubsan   - undefined behaviour sanitizer compiler feature
+#                  bcheck  - extended build checks
+#   W=123          build with warnings (default: off)
+#   DEBUG_CFLAGS   additional compiler flags for debugging build
+#   EXTRA_CFLAGS   additional compiler flags
+#   EXTRA_LDFLAGS  additional linker flags
+#   EXTRA_PYTHON_CFLAGS   additional compiler flags to pass when building Python
+#                         library
+#   EXTRA_PYTHON_LDFLAGS  additional linker flags to pass when building Python
+#                         library
+#
+#   PYTHON_CC        cross compiler for Python extension module, for example:
+#                      /opt/toolchains/ppc64-POWER8-linux-glibc/1.2.3/bin/ppc64-power8-linux-gnu-gcc \
+#                        --sysroot=PATH_TO_DEVENV_SYSROOT
+#                    used to define 'CC' environment variable for build Python extensions
+#
+#   PYTHON_LDSHARED  cross linker for Python extension module, for example:
+#                      /opt/toolchains/ppc64-POWER8-linux-glibc/1.2.3/bin/ppc64-power8-linux-gnu-gcc \
+#                        --sysroot=PATH_TO_DEVENV_SYSROOT -shared
+#                    used to define 'LDSHARED' venvironmen varionle for build Python
+#
+#   PYTHON_CCSHARED  cross linker for Python extension module, for example:
+#                      /opt/toolchains/ppc64-POWER8-linux-glibc/1.2.3/bin/ppc64-power8-linux-gnu-gcc \
+#                        --sysroot=PATH_TO_DEVENV_SYSROOT -shared
+#                    used to define 'LDSHARED' venvironmen varionle for build Python
+#
+#   PYTHON_PATH      path to Python lib-dinload directory where placed the sysconfig file
+#                    got build machine Python, for example:
+#                      PYTHON_PATH=PATH_TO_DEVENV_SYSROOT/usr/lib/python3.10/lib-dynload
+#                    if your build machine is an x86_64 Linux machine then the file:
+#                      _sysconfigdata_m_linux_x86_64-linux-gnu.py
+#                    will be used by Python setup tools to get system variables to
+#                    build extension module. For example the suffix of shared library
+#                    defined by EXT_SUFFIX variable in the _sysconfigdata_* file
+#
+# Testing-specific options (see also tests/README.md):
+#   TEST=GLOB      run test(s) from directories matching GLOB
+#   TEST_LOG=tty   print name of a command run via the execution helpers
+#   TEST_LOG=dump  dump testing log file when a test fails
+#
+# Static checkers:
+#   CHECKER        static checker binary to be called (default: sparse)
+#   CHECKER_FLAGS  flags to pass to CHECKER, can override CFLAGS
+#
+
+# Export all variables to sub-makes by default
+export
+
+-include Makefile.inc
+ifneq ($(MAKEFILE_INC_INCLUDED),yes)
+$(error Makefile.inc not generated, please configure first)
+endif
+
+TAGS_CMD := ctags
+ETAGS_CMD := etags
+CSCOPE_CMD := cscope -u -b -c -q
+
+include Makefile.extrawarn
+
+EXTRA_CFLAGS :=
+EXTRA_LDFLAGS :=
+
+DEBUG_CFLAGS_DEFAULT = -O0 -U_FORTIFY_SOURCE -ggdb3
+DEBUG_CFLAGS_INTERNAL =
+DEBUG_CFLAGS :=
+
+DEBUG_LDFLAGS_DEFAULT =
+DEBUG_LDFLAGS_INTERNAL =
+DEBUG_LDFLAGS :=
+
+ABSTOPDIR = $(shell pwd)
+TOPDIR := .
+
+# Disable certain GCC 8 + glibc 2.28 warning for snprintf()
+# where string truncation for snprintf() is expected.
+# For GCC9 disable address-of-packed (under W=1)
+DISABLE_WARNING_FLAGS := $(call cc-disable-warning, format-truncation) \
+	$(call cc-disable-warning, address-of-packed-member)
+
+# Warnings that we want by default
+ENABLE_WARNING_FLAGS := $(call cc-option, -Wimplicit-fallthrough)
+
+# Common build flags
+CFLAGS = $(SUBST_CFLAGS) \
+	 $(CSTD) \
+	 -include config.h \
+	 -DBTRFS_FLAT_INCLUDES \
+	 -D_XOPEN_SOURCE=700  \
+	 -fno-strict-aliasing \
+	 -fPIC \
+	 -I$(TOPDIR) \
+	 -I$(TOPDIR)/libbtrfsutil \
+	 $(CRYPTO_CFLAGS) \
+	 $(DISABLE_WARNING_FLAGS) \
+	 $(ENABLE_WARNING_FLAGS) \
+	 $(EXTRAWARN_CFLAGS) \
+	 $(DEBUG_CFLAGS_INTERNAL) \
+	 $(EXTRA_CFLAGS)
+
+LIBBTRFSUTIL_CFLAGS = $(SUBST_CFLAGS) \
+		      $(CSTD) \
+		      -D_GNU_SOURCE \
+		      -fPIC \
+		      -fvisibility=hidden \
+		      -I$(TOPDIR)/libbtrfsutil \
+		      $(EXTRAWARN_CFLAGS) \
+		      $(DEBUG_CFLAGS_INTERNAL) \
+		      $(EXTRA_CFLAGS)
+
+LDFLAGS = $(SUBST_LDFLAGS) \
+	  -rdynamic -L$(TOPDIR) \
+	  $(DEBUG_LDFLAGS_INTERNAL) \
+	  $(EXTRA_LDFLAGS)
+
+LIBBTRFSUTIL_LDFLAGS = $(SUBST_LDFLAGS) \
+		       -rdynamic -L$(TOPDIR) \
+		       $(DEBUG_LDFLAGS_INTERNAL) \
+		       $(EXTRA_LDFLAGS)
+
+# Default implementation
+CRYPTO_OBJECTS =
+
+LIBS = $(LIBS_BASE) $(LIBS_CRYPTO)
+LIBBTRFS_LIBS = $(LIBS_BASE) $(LIBS_CRYPTO)
+
+# Static compilation flags
+STATIC_CFLAGS = $(CFLAGS) -ffunction-sections -fdata-sections -DSTATIC_BUILD
+STATIC_LDFLAGS = -static -Wl,--gc-sections
+STATIC_LIBS = $(STATIC_LIBS_BASE)
+
+# don't use FORTIFY with sparse because glibc with FORTIFY can
+# generate so many sparse errors that sparse stops parsing,
+# which masks real errors that we want to see.
+# Note: additional flags might get added per-target later
+CHECKER := sparse
+check_defs := .cc-defines.h
+CHECKER_FLAGS := -include $(check_defs) -D__CHECKER__ \
+	-D__CHECK_ENDIAN__ -Wbitwise -Wuninitialized -Wshadow -Wundef \
+	-U_FORTIFY_SOURCE -Wdeclaration-after-statement -Wdefault-bitfield-sign
+
+objects = \
+	kernel-lib/list_sort.o	\
+	kernel-lib/radix-tree.o	\
+	kernel-lib/raid56.o	\
+	kernel-lib/rbtree.o	\
+	kernel-lib/tables.o	\
+	kernel-shared/backref.o \
+	kernel-shared/ctree.o	\
+	kernel-shared/delayed-ref.o	\
+	kernel-shared/dir-item.o	\
+	kernel-shared/disk-io.o	\
+	kernel-shared/extent-tree.o	\
+	kernel-shared/extent_io.o	\
+	kernel-shared/file-item.o	\
+	kernel-shared/file.o	\
+	kernel-shared/free-space-cache.o	\
+	kernel-shared/free-space-tree.o	\
+	kernel-shared/inode-item.o	\
+	kernel-shared/inode.o	\
+	kernel-shared/print-tree.o	\
+	kernel-shared/root-tree.o	\
+	kernel-shared/transaction.o	\
+	kernel-shared/ulist.o	\
+	kernel-shared/uuid-tree.o	\
+	kernel-shared/volumes.o	\
+	kernel-shared/zoned.o	\
+	common/device-scan.o	\
+	common/device-utils.o	\
+	common/extent-cache.o	\
+	common/format-output.o	\
+	common/fsfeatures.o	\
+	common/help.o	\
+	common/messages.o	\
+	common/open-utils.o	\
+	common/parse-utils.o	\
+	common/path-utils.o	\
+	common/rbtree-utils.o	\
+	common/repair.o	\
+	common/send-stream.o	\
+	common/send-utils.o	\
+	common/string-table.o	\
+	common/task-utils.o \
+	common/units.o	\
+	common/utils.o	\
+	check/qgroup-verify.o	\
+	cmds/receive-dump.o	\
+	crypto/crc32c.o	\
+	crypto/hash.o	\
+	crypto/xxhash.o	\
+	$(CRYPTO_OBJECTS)	\
+	libbtrfsutil/stubs.o	\
+	libbtrfsutil/subvolume.o
+
+cmds_objects = cmds/subvolume.o cmds/subvolume-list.o \
+	       cmds/filesystem.o cmds/device.o cmds/scrub.o \
+	       cmds/inspect.o cmds/balance.o cmds/send.o cmds/receive.o \
+	       cmds/quota.o cmds/qgroup.o cmds/replace.o check/main.o \
+	       cmds/restore.o cmds/rescue.o cmds/rescue-chunk-recover.o \
+	       cmds/rescue-super-recover.o \
+	       cmds/property.o cmds/filesystem-usage.o cmds/inspect-dump-tree.o \
+	       cmds/inspect-dump-super.o cmds/inspect-tree-stats.o cmds/filesystem-du.o \
+	       mkfs/common.o check/mode-common.o check/mode-lowmem.o
+
+libbtrfs_objects = \
+		kernel-lib/rbtree.o	\
+		libbtrfs/send-stream.o	\
+		libbtrfs/send-utils.o	\
+		crypto/crc32c.o
+
+libbtrfs_headers = libbtrfs/send-stream.h libbtrfs/send-utils.h kernel-shared/send.h kernel-lib/rbtree.h \
+	       kernel-lib/list.h kerncompat.h \
+	       common/extent-cache.h kernel-shared/extent_io.h ioctl.h \
+	       kernel-shared/ctree.h version.h
+libbtrfsutil_major := $(shell sed -rn 's/^\#define BTRFS_UTIL_VERSION_MAJOR ([0-9])+$$/\1/p' libbtrfsutil/btrfsutil.h)
+libbtrfsutil_minor := $(shell sed -rn 's/^\#define BTRFS_UTIL_VERSION_MINOR ([0-9])+$$/\1/p' libbtrfsutil/btrfsutil.h)
+libbtrfsutil_patch := $(shell sed -rn 's/^\#define BTRFS_UTIL_VERSION_PATCH ([0-9])+$$/\1/p' libbtrfsutil/btrfsutil.h)
+libbtrfsutil_version := $(libbtrfsutil_major).$(libbtrfsutil_minor).$(libbtrfsutil_patch)
+libbtrfsutil_objects = libbtrfsutil/errors.o libbtrfsutil/filesystem.o \
+		       libbtrfsutil/subvolume.o libbtrfsutil/qgroup.o \
+		       libbtrfsutil/stubs.o
+convert_objects = convert/main.o convert/common.o convert/source-fs.o \
+		  convert/source-ext2.o convert/source-reiserfs.o \
+		  mkfs/common.o
+mkfs_objects = mkfs/main.o mkfs/common.o mkfs/rootdir.o
+image_objects = image/main.o image/sanitize.o
+all_objects = $(objects) $(cmds_objects) $(libbtrfs_objects) $(convert_objects) \
+	      $(mkfs_objects) $(image_objects) $(libbtrfsutil_objects)
+
+udev_rules = 64-btrfs-dm.rules
+
+ifeq ("$(origin V)", "command line")
+  BUILD_VERBOSE = $(V)
+endif
+ifndef BUILD_VERBOSE
+  BUILD_VERBOSE = 0
+endif
+
+ifeq ($(BUILD_VERBOSE),1)
+  Q =
+  SETUP_PY_Q =
+else
+  Q = @
+  SETUP_PY_Q = -q
+endif
+
+ifeq ("$(origin D)", "command line")
+  DEBUG_CFLAGS_INTERNAL = $(DEBUG_CFLAGS_DEFAULT) $(DEBUG_CFLAGS)
+  DEBUG_LDFLAGS_INTERNAL = $(DEBUG_LDFLAGS_DEFAULT) $(DEBUG_LDFLAGS)
+endif
+
+ifneq (,$(findstring verbose,$(D)))
+  DEBUG_CFLAGS_INTERNAL += -DDEBUG_VERBOSE_ERROR=1
+endif
+
+ifneq (,$(findstring trace,$(D)))
+  DEBUG_CFLAGS_INTERNAL += -DDEBUG_TRACE_ON_ERROR=1
+endif
+
+ifneq (,$(findstring abort,$(D)))
+  DEBUG_CFLAGS_INTERNAL += -DDEBUG_ABORT_ON_ERROR=1
+endif
+
+ifneq (,$(findstring all,$(D)))
+  DEBUG_CFLAGS_INTERNAL += -DDEBUG_VERBOSE_ERROR=1
+  DEBUG_CFLAGS_INTERNAL += -DDEBUG_TRACE_ON_ERROR=1
+  DEBUG_CFLAGS_INTERNAL += -DDEBUG_ABORT_ON_ERROR=1
+endif
+
+ifneq (,$(findstring asan,$(D)))
+  DEBUG_CFLAGS_INTERNAL += -fsanitize=address
+  DEBUG_LDFLAGS_INTERNAL += -fsanitize=address -lasan
+endif
+
+ifneq (,$(findstring tsan,$(D)))
+  DEBUG_CFLAGS_INTERNAL += -fsanitize=thread -fPIC
+  DEBUG_LDFLAGS_INTERNAL += -fsanitize=thread -ltsan -pie
+endif
+
+ifneq (,$(findstring ubsan,$(D)))
+  DEBUG_CFLAGS_INTERNAL += -fsanitize=undefined
+  DEBUG_LDFLAGS_INTERNAL += -fsanitize=undefined -lubsan
+endif
+
+ifneq (,$(findstring bcheck,$(D)))
+  DEBUG_CFLAGS_INTERNAL += -DDEBUG_BUILD_CHECKS
+endif
+
+MAKEOPTS = --no-print-directory Q=$(Q)
+
+# built-in sources into "busybox", all files that contain the main function and
+# are not compiled standalone
+progs_box_main = btrfs.o mkfs/main.o image/main.o convert/main.o \
+		 btrfstune.o
+
+progs_box_all_objects = $(mkfs_objects) $(image_objects) $(convert_objects)
+progs_box_all_static_objects = $(static_mkfs_objects) $(static_image_objects) \
+			       $(static_convert_objects)
+
+progs_box_objects = $(filter-out %/main.o, $(progs_box_all_objects)) \
+		    $(patsubst %.o, %.box.o, $(progs_box_main))
+progs_box_static_objects = $(filter-out %/main.static.o, $(progs_box_all_static_objects)) \
+		    $(patsubst %.o, %.box.static.o, $(progs_box_main))
+
+# Programs to install.
+progs_install = btrfs mkfs.btrfs btrfs-map-logical btrfs-image \
+		btrfs-find-root btrfstune btrfs-select-super
+
+# Programs to build.
+progs_build = $(progs_install) btrfsck btrfs-corrupt-block
+
+# All programs. Use := instead of = so that this is expanded before we reassign
+# progs_build below.
+progs := $(progs_build) btrfs-convert btrfs-fragments btrfs-sb-mod
+
+ifneq ($(DISABLE_BTRFSCONVERT),1)
+progs_install += btrfs-convert
+endif
+
+# Static programs to build. Use := instead of = because `make static` should
+# still build everything even if --disable-programs was passed to ./configure.
+progs_static := $(foreach p,$(progs_build),$(p).static)
+
+ifneq ($(BUILD_PROGRAMS),1)
+progs_install =
+progs_build =
+endif
+
+# external libs required by various binaries; for btrfs-foo,
+# specify btrfs_foo_libs = <list of libs>; see $($(subst...)) rules below
+btrfs_convert_cflags = -DBTRFSCONVERT_EXT2=$(BTRFSCONVERT_EXT2)
+btrfs_convert_cflags += -DBTRFSCONVERT_REISERFS=$(BTRFSCONVERT_REISERFS)
+btrfs_fragments_libs = -lgd -lpng -ljpeg -lfreetype
+cmds_restore_cflags = -DBTRFSRESTORE_ZSTD=$(BTRFSRESTORE_ZSTD)
+
+ifeq ($(CRYPTOPROVIDER_BUILTIN),1)
+CRYPTO_OBJECTS = crypto/sha224-256.o crypto/blake2b-ref.o
+CRYPTO_CFLAGS = -DCRYPTOPROVIDER_BUILTIN=1
+endif
+
+CHECKER_FLAGS += $(btrfs_convert_cflags)
+
+# collect values of the variables above
+standalone_deps = $(foreach dep,$(patsubst %,%_objects,$(subst -,_,$(filter btrfs-%, $(progs)))),$($(dep)))
+
+SUBDIRS =
+BUILDDIRS = $(patsubst %,build-%,$(SUBDIRS))
+INSTALLDIRS = $(patsubst %,install-%,$(SUBDIRS))
+CLEANDIRS = $(patsubst %,clean-%,$(SUBDIRS))
+
+ifneq ($(DISABLE_DOCUMENTATION),1)
+BUILDDIRS += build-Documentation
+INSTALLDIRS += install-Documentation
+endif
+
+.PHONY: $(SUBDIRS)
+.PHONY: $(BUILDDIRS)
+.PHONY: $(INSTALLDIRS)
+.PHONY: $(TESTDIRS)
+.PHONY: $(CLEANDIRS)
+.PHONY: all install clean
+.PHONY: FORCE
+
+# Create all the static targets
+static_objects = $(patsubst %.o, %.static.o, $(objects))
+static_cmds_objects = $(patsubst %.o, %.static.o, $(cmds_objects))
+static_libbtrfs_objects = $(patsubst %.o, %.static.o, $(shared_objects))
+static_libbtrfsutil_objects = $(patsubst %.o, %.static.o, $(libbtrfsutil_objects))
+static_convert_objects = $(patsubst %.o, %.static.o, $(convert_objects))
+static_mkfs_objects = $(patsubst %.o, %.static.o, $(mkfs_objects))
+static_image_objects = $(patsubst %.o, %.static.o, $(image_objects))
+
+libs_shared = libbtrfs.so.0.1 libbtrfsutil.so.$(libbtrfsutil_version)
+lib_links = libbtrfs.so.0 libbtrfs.so libbtrfsutil.so.$(libbtrfsutil_major) libbtrfsutil.so
+libs_build =
+ifeq ($(BUILD_SHARED_LIBRARIES),1)
+libs_build += $(libs_shared) $(lib_links)
+endif
+ifeq ($(BUILD_STATIC_LIBRARIES),1)
+libs_build += libbtrfs.a libbtrfsutil.a
+endif
+
+# make C=1 to enable sparse
+ifdef C
+	# We're trying to use sparse against glibc headers which go wild
+	# trying to use internal compiler macros to test features.  We
+	# copy gcc's and give them to sparse.  But not __SIZE_TYPE__
+	# 'cause sparse defines that one.
+	#
+	dummy := $(shell $(CC) -dM -E -x c - < /dev/null | \
+			grep -v __SIZE_TYPE__ > $(check_defs))
+	check = $(CHECKER)
+	check_echo = echo
+	CSTD = -std=gnu89
+else
+	check = true
+	check_echo = true
+endif
+
+%.o.d: %.c
+	$(Q)$(CC) -MM -MG -MF $@ -MT $(@:.o.d=.o) -MT $(@:.o.d=.static.o) -MT $@ $(CFLAGS) $<
+
+#
+# Pick from per-file variables, btrfs_*_cflags
+#
+.c.o:
+	@$(check_echo) "    [SP]     $<"
+	$(Q)$(check) $(CFLAGS) $(CHECKER_FLAGS) $<
+	@echo "    [CC]     $@"
+	$(Q)$(CC) $(CFLAGS) -c $< -o $@ $($(subst /,_,$(subst -,_,$(@:%.o=%)-cflags))) \
+		$($(subst -,_,btrfs-$(@:%/$(notdir $@)=%)-cflags))
+
+%.static.o: %.c
+	@echo "    [CC]     $@"
+	$(Q)$(CC) $(STATIC_CFLAGS) -c $< -o $@ $($(subst /,_,$(subst -,_,$(@:%.static.o=%)-cflags))) \
+		$($(subst -,_,btrfs-$(@:%/$(notdir $@)=%)-cflags))
+
+%.box.o: %.c
+	@echo "    [CC]     $@"
+	$(Q)$(CC) -DENABLE_BOX=1 $(CFLAGS) $(btrfs_convert_cflags) -c $< -o $@
+
+%.box.static.o: %.c
+	@echo "    [CC]     $@"
+	$(Q)$(CC) -DENABLE_BOX=1 $(STATIC_CFLAGS) $(btrfs_convert_cflags) -c $< -o $@
+
+all: $(progs_build) $(libs_build) $(BUILDDIRS)
+ifeq ($(PYTHON_BINDINGS),1)
+all: libbtrfsutil_python
+endif
+$(SUBDIRS): $(BUILDDIRS)
+$(BUILDDIRS):
+	@echo "Making all in $(patsubst build-%,%,$@)"
+	$(Q)$(MAKE) $(MAKEOPTS) -C $(patsubst build-%,%,$@)
+
+test-convert: btrfs btrfs-convert
+	@echo "    [TEST]   convert-tests.sh"
+	$(Q)bash tests/convert-tests.sh
+
+test-check: test-fsck
+test-check-lowmem: test-fsck
+test-fsck: btrfs btrfs-image btrfs-corrupt-block mkfs.btrfs btrfstune
+ifneq ($(MAKECMDGOALS),test-check-lowmem)
+	@echo "    [TEST]   fsck-tests.sh"
+	$(Q)bash tests/fsck-tests.sh
+else
+	@echo "    [TEST]   fsck-tests.sh (mode=lowmem)"
+	$(Q)TEST_ENABLE_OVERRIDE=true TEST_ARGS_CHECK=--mode=lowmem bash tests/fsck-tests.sh
+endif
+
+test-misc: btrfs btrfs-image btrfs-corrupt-block mkfs.btrfs btrfstune fssum \
+		btrfs-find-root btrfs-select-super btrfs-convert
+	@echo "    [TEST]   misc-tests.sh"
+	$(Q)bash tests/misc-tests.sh
+
+test-mkfs: btrfs mkfs.btrfs
+	@echo "    [TEST]   mkfs-tests.sh"
+	$(Q)bash tests/mkfs-tests.sh
+
+test-fuzz: btrfs btrfs-image
+	@echo "    [TEST]   fuzz-tests.sh"
+	$(Q)bash tests/fuzz-tests.sh
+
+test-cli: btrfs mkfs.btrfs
+	@echo "    [TEST]   cli-tests.sh"
+	$(Q)bash tests/cli-tests.sh
+
+test-clean:
+	@echo "Cleaning tests"
+	$(Q)bash tests/clean-tests.sh
+
+test-inst: all
+	@tmpdest=`mktemp --tmpdir -d btrfs-progs-inst.XXXXXX` && \
+		echo "Test installation to $$tmpdest" && \
+		$(MAKE) $(MAKEOPTS) DESTDIR=$$tmpdest install && \
+		$(RM) -rf -- $$tmpdest
+
+test-json: json-formatter-test
+	@echo "    [TEST]   json formatting"
+	@echo | jq
+	@{								\
+		max=`./json-formatter-test`;				\
+		for testno in `seq 1 $$max`; do				\
+			echo "    [TEST/json]  $$testno";		\
+			./json-formatter-test $$testno | jq >& /dev/null; \
+		done							\
+	}
+
+test: test-check test-check-lowmem test-mkfs test-misc test-cli test-convert test-fuzz
+
+testsuite: btrfs-corrupt-block btrfs-find-root btrfs-select-super fssum
+	@echo "Export tests as a package"
+	$(Q)cd tests && ./export-testsuite.sh
+
+ifeq ($(PYTHON_BINDINGS),1)
+test-libbtrfsutil: libbtrfsutil_python mkfs.btrfs
+	$(Q)cd libbtrfsutil/python; \
+		LD_LIBRARY_PATH=../.. $(PYTHON) -m unittest discover -v tests
+
+.PHONY: test-libbtrfsutil
+
+test: test-libbtrfsutil
+endif
+
+#
+# NOTE: For static compiles, you need to have all the required libs
+# 	static equivalent available
+#
+static: $(progs_static) libbtrfs.a libbtrfsutil.a
+
+version.h: version.h.in configure.ac
+	@echo "    [SH]     $@"
+	$(Q)bash ./config.status --silent $@
+
+mktables: kernel-lib/mktables.c
+	@echo "    [CC]     $@"
+	$(Q)$(CC) $(CFLAGS) $< -o $@
+
+# the target can be regenerated manually using mktables, but a local copy is
+# kept so the build process is simpler
+kernel-lib/tables.c:
+	@echo "    [TABLE]  $@"
+	$(Q)./mktables > $@ || ($(RM) -f $@ && exit 1)
+
+libbtrfs.so.0.1: $(libbtrfs_objects) libbtrfs.sym
+	@echo "    [LD]     $@"
+	$(Q)$(CC) $(CFLAGS) $(filter %.o,$^) $(LDFLAGS) $(LIBBTRFS_LIBS) \
+		-shared -Wl,-soname,libbtrfs.so.0 -Wl,--version-script=libbtrfs.sym -o $@
+
+libbtrfs.a: $(libbtrfs_objects)
+	@echo "    [AR]     $@"
+	$(Q)$(AR) cr $@ $^
+
+libbtrfs.so.0 libbtrfs.so: libbtrfs.so.0.1 libbtrfs.sym
+	@echo "    [LN]     $@"
+	$(Q)$(LN_S) -f $< $@
+
+libbtrfsutil/%.o: libbtrfsutil/%.c
+	@echo "    [CC]     $@"
+	$(Q)$(CC) $(LIBBTRFSUTIL_CFLAGS) -o $@ -c $< -o $@
+
+libbtrfsutil.so.$(libbtrfsutil_version): $(libbtrfsutil_objects) libbtrfsutil/libbtrfsutil.sym
+	@echo "    [LD]     $@"
+	$(Q)$(CC) $(LIBBTRFSUTIL_CFLAGS) $(libbtrfsutil_objects) $(LIBBTRFSUTIL_LDFLAGS) \
+		-shared -Wl,-soname,libbtrfsutil.so.$(libbtrfsutil_major) \
+		-Wl,--version-script=libbtrfsutil/libbtrfsutil.sym -o $@
+
+libbtrfsutil.a: $(libbtrfsutil_objects)
+	@echo "    [AR]     $@"
+	$(Q)$(AR) cr $@ $^
+
+libbtrfsutil.so.$(libbtrfsutil_major) libbtrfsutil.so: libbtrfsutil.so.$(libbtrfsutil_version)
+	@echo "    [LN]     $@"
+	$(Q)$(LN_S) -f $< $@
+
+ifeq ($(PYTHON_BINDINGS),1)
+libbtrfsutil_python: libbtrfsutil.so.$(libbtrfsutil_major) libbtrfsutil.so libbtrfsutil/btrfsutil.h
+	@echo "    [PY]     libbtrfsutil"
+	$(Q)cd libbtrfsutil/python; \
+		CC="$(PYTHON_CC)" LDSHARED="$(PYTHON_LDSHARED)" CCSHARED="$(PYTHON_CCSHARED)" \
+		CFLAGS="$(EXTRA_PYTHON_CFLAGS)" LDFLAGS="$(EXTRA_PYTHON_LDFLAGS)" \
+		PYTHONPATH=$(PYTHON_PATH) $(PYTHON) setup.py egg_info ; \
+		CC="$(PYTHON_CC)" LDSHARED="$(PYTHON_LDSHARED)" CCSHARED="$(PYTHON_CCSHARED)" \
+		CFLAGS="$(EXTRA_PYTHON_CFLAGS)" LDFLAGS="$(EXTRA_PYTHON_LDFLAGS)" \
+		PYTHONPATH=$(PYTHON_PATH) $(PYTHON) setup.py $(SETUP_PY_Q) build_ext -i build
+
+.PHONY: libbtrfsutil_python
+endif
+
+# keep intermediate files from the below implicit rules around
+.PRECIOUS: $(addsuffix .o,$(progs))
+
+# Make any btrfs-foo out of btrfs-foo.o, with appropriate libs.
+# The $($(subst...)) bits below takes the btrfs_*_libs definitions above and
+# turns them into a list of libraries to link against if they exist
+#
+# For static variants, use an extra $(subst) to get rid of the ".static"
+# from the target name before translating to list of libs
+
+btrfs-%.static: btrfs-%.static.o $(static_objects) $(patsubst %.o,%.static.o,$(standalone_deps)) $(static_libbtrfs_objects)
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $@.o $(static_objects) \
+		$(patsubst %.o, %.static.o, $($(subst -,_,$(subst .static,,$@)-objects))) \
+		$(static_libbtrfs_objects) $(STATIC_LDFLAGS) \
+		$($(subst -,_,$(subst .static,,$@)-libs)) $(STATIC_LIBS)
+
+btrfs-%: btrfs-%.o $(objects) $(standalone_deps) libbtrfsutil.a
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $(objects) $@.o \
+		$($(subst -,_,$@-objects)) \
+		libbtrfsutil.a \
+		$(LDFLAGS) $(LIBS) $($(subst -,_,$@-libs))
+
+btrfs: btrfs.o $(objects) $(cmds_objects) libbtrfsutil.a
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(LIBS_COMP)
+
+btrfs.static: btrfs.static.o $(static_objects) $(static_cmds_objects) $(static_libbtrfs_objects) $(static_libbtrfsutil_objects)
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $^ $(STATIC_LDFLAGS) $(STATIC_LIBS) $(STATIC_LIBS_COMP)
+
+btrfs.box: btrfs.box.o $(objects) $(cmds_objects) $(progs_box_objects) libbtrfsutil.a
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $^ $(btrfs_convert_libs) $(LDFLAGS) $(LIBS) $(LIBS_COMP)
+
+btrfs.box.static: btrfs.box.static.o $(static_objects) $(static_cmds_objects) $(progs_box_static_objects) $(static_libbtrfs_objects) $(static_libbtrfsutil_objects)
+	@echo "    [LD]     $@"
+	$(Q)$(CC) $(STATIC_CFLAGS) -o $@ $^ $(btrfs_convert_libs) \
+		$(STATIC_LDFLAGS) $(STATIC_LIBS) $(STATIC_LIBS_COMP)
+
+box-links: btrfs.box
+	@echo "    [LN]     mkfs.btrfs"
+	$(Q)$(LN_S) -sf btrfs.box mkfs.btrfs
+	@echo "    [LN]     btrfs-image"
+	$(Q)$(LN_S) -sf btrfs.box btrfs-image
+	@echo "    [LN]     btrfs-convert"
+	$(Q)$(LN_S) -sf btrfs.box btrfs-convert
+	@echo "    [LN]     btrfstune"
+	$(Q)$(LN_S) -sf btrfs.box btrfstune
+
+# For backward compatibility, 'btrfs' changes behaviour to fsck if it's named 'btrfsck'
+btrfsck: btrfs
+	@echo "    [LN]     $@"
+	$(Q)$(LN_S) -f btrfs btrfsck
+
+btrfsck.static: btrfs.static
+	@echo "    [LN]     $@"
+	$(Q)$(LN_S) -f $^ $@
+
+mkfs.btrfs: $(mkfs_objects) $(objects) libbtrfsutil.a
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $^ $(LDFLAGS) $(LIBS)
+
+mkfs.btrfs.static: $(static_mkfs_objects) $(static_objects) $(static_libbtrfs_objects)
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $^ $(STATIC_LDFLAGS) $(STATIC_LIBS)
+
+btrfstune: btrfstune.o $(objects) libbtrfsutil.a
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $^ $(LDFLAGS) $(LIBS)
+
+btrfstune.static: btrfstune.static.o $(static_objects) $(static_libbtrfs_objects)
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $^ $(STATIC_LDFLAGS) $(STATIC_LIBS)
+
+btrfs-image: $(image_objects) $(objects) libbtrfsutil.a
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(LIBS_COMP)
+
+btrfs-image.static: $(static_image_objects) $(static_objects) $(static_libbtrfs_objects)
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $^ $(STATIC_LDFLAGS) $(STATIC_LIBS) $(STATIC_LIBS_COMP)
+
+btrfs-convert: $(convert_objects) $(objects) libbtrfsutil.a
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $^ $(LDFLAGS) $(btrfs_convert_libs) $(LIBS)
+
+btrfs-convert.static: $(static_convert_objects) $(static_objects) $(static_libbtrfs_objects)
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $^ $(STATIC_LDFLAGS) $(btrfs_convert_libs) $(STATIC_LIBS)
+
+quick-test: quick-test.o $(objects) libbtrfsutil.a $(libs_shared)
+	@echo "    [LD]     $@"
+	$(Q)$(CC) -o $@ $^ $(LDFLAGS) $(LIBS)
+
+ioctl-test.o: tests/ioctl-test.c ioctl.h kerncompat.h kernel-shared/ctree.h
+	@echo "    [CC]   $@"
+	$(Q)$(CC) $(CFLAGS) -c $< -o $@
+
+ioctl-test-32.o: tests/ioctl-test.c ioctl.h kerncompat.h kernel-shared/ctree.h
+	@echo "    [CC32]   $@"
+	$(Q)$(CC) $(CFLAGS) -m32 -c $< -o $@
+
+ioctl-test-64.o: tests/ioctl-test.c ioctl.h kerncompat.h kernel-shared/ctree.h
+	@echo "    [CC64]   $@"
+	$(Q)$(CC) $(CFLAGS) -m64 -c $< -o $@
+
+ioctl-test: ioctl-test.o
+	@echo "    [LD]   $@"
+	$(Q)$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
+	@echo "   ?[PAHOLE] $@.pahole"
+	-$(Q)pahole $@ > $@.pahole
+
+ioctl-test-32: ioctl-test-32.o
+	@echo "    [LD32]   $@"
+	$(Q)$(CC) -m32 -o $@ $< $(LDFLAGS)
+	@echo "   ?[PAHOLE] $@.pahole"
+	-$(Q)pahole $@ > $@.pahole
+
+ioctl-test-64: ioctl-test-64.o
+	@echo "    [LD64]   $@"
+	$(Q)$(CC) -m64 -o $@ $< $(LDFLAGS)
+	@echo "   ?[PAHOLE] $@.pahole"
+	-$(Q)pahole $@ > $@.pahole
+
+test-ioctl: ioctl-test ioctl-test-32 ioctl-test-64
+	@echo "    [TEST/ioctl]"
+	$(Q)./ioctl-test > ioctl-test.log
+	$(Q)./ioctl-test-32 > ioctl-test-32.log
+	$(Q)./ioctl-test-64 > ioctl-test-64.log
+
+library-test: tests/library-test.c libbtrfs.so
+	@echo "    [TEST PREP]  $@"$(eval TMPD=$(shell mktemp -d))
+	$(Q)mkdir -p $(TMPD)/include/btrfs && \
+	cp $(libbtrfs_headers) $(TMPD)/include/btrfs && \
+	cp libbtrfs.so.0.1 $(TMPD) && \
+	cd $(TMPD) && $(CC) -I$(TMPD)/include -o $@ $(addprefix $(ABSTOPDIR)/,$^) -Wl,-rpath=$(ABSTOPDIR)
+	@echo "    [TEST RUN]   $@"
+	$(Q)cd $(TMPD) && LD_PRELOAD=libbtrfs.so.0.1 ./$@
+	@echo "    [TEST CLEAN] $@"
+	$(Q)$(RM) -rf -- $(TMPD)
+
+library-test.static: tests/library-test.c libbtrfs.a libbtrfsutil.a
+	@echo "    [TEST PREP]  $@"$(eval TMPD=$(shell mktemp -d))
+	$(Q)mkdir -p $(TMPD)/include/btrfs && \
+	cp $(libbtrfs_headers) $(TMPD)/include/btrfs && \
+	cd $(TMPD) && $(CC) -I$(TMPD)/include -o $@ $(addprefix $(ABSTOPDIR)/,$^) $(STATIC_LDFLAGS) $(STATIC_LIBS)
+	@echo "    [TEST RUN]   $@"
+	$(Q)cd $(TMPD) && ./$@
+	@echo "    [TEST CLEAN] $@"
+	$(Q)$(RM) -rf -- $(TMPD)
+
+fssum: tests/fssum.c crypto/sha224-256.c
+	@echo "    [LD]     $@"
+	$(Q)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
+
+hash-speedtest: crypto/hash-speedtest.c $(objects) libbtrfsutil.a
+	@echo "    [LD]     $@"
+	$(Q)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS)
+
+hash-vectest: crypto/hash-vectest.c $(objects) libbtrfsutil.a
+	@echo "    [LD]     $@"
+	$(Q)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS)
+
+json-formatter-test: tests/json-formatter-test.c $(objects) libbtrfsutil.a
+	@echo "    [LD]     $@"
+	$(Q)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS)
+
+test-build: test-build-pre test-build-real
+
+test-build-pre:
+	$(MAKE) $(MAKEOPTS) clean-all
+	./autogen.sh
+	./configure
+
+test-build-real:
+	$(MAKE) $(MAKEOPTS) library-test
+	-$(MAKE) $(MAKEOPTS) library-test.static
+	$(MAKE) $(MAKEOPTS) -j 8 $(progs) libbtrfs.a libbtrfsutil.a $(libs_shared) $(lib_links) $(BUILDDIRS)
+	-$(MAKE) $(MAKEOPTS) -j 8 static
+
+manpages:
+	$(Q)$(MAKE) $(MAKEOPTS) -C Documentation
+
+tags: FORCE
+	@echo "    [TAGS]   $(TAGS_CMD)"
+	$(Q)$(TAGS_CMD) *.[ch] image/*.[ch] convert/*.[ch] mkfs/*.[ch] \
+		check/*.[ch] kernel-lib/*.[ch] kernel-shared/*.[ch] \
+		cmds/*.[ch] common/*.[ch] \
+		libbtrfsutil/*.[ch]
+
+etags: FORCE
+	@echo "    [ETAGS]   $(ETAGS_CMD)"
+	$(Q)$(ETAGS_CMD) *.[ch] image/*.[ch] convert/*.[ch] mkfs/*.[ch] \
+		check/*.[ch] kernel-lib/*.[ch] kernel-shared/*.[ch] \
+		cmds/*.[ch] common/*.[ch] \
+		libbtrfsutil/*.[ch]
+
+cscope: FORCE
+	@echo "    [CSCOPE] $(CSCOPE_CMD)"
+	$(Q)ls -1 *.[ch] image/*.[ch] convert/*.[ch] mkfs/*.[ch] check/*.[ch] \
+		kernel-lib/*.[ch] kernel-shared/*.[ch] libbtrfsutil/*.[ch] \
+		cmds/*.[ch] common/*.[ch] \
+		> cscope.files
+	$(Q)$(CSCOPE_CMD)
+
+clean-all: clean clean-doc clean-gen
+
+clean: $(CLEANDIRS)
+	@echo "Cleaning"
+	$(Q)$(RM) -f -- $(progs) *.o *.o.d \
+		kernel-lib/*.o kernel-lib/*.o.d \
+		kernel-shared/*.o kernel-shared/*.o.d \
+		image/*.o image/*.o.d \
+		convert/*.o convert/*.o.d \
+		mkfs/*.o mkfs/*.o.d check/*.o check/*.o.d \
+		cmds/*.o cmds/*.o.d common/*.o common/*.o.d \
+		crypto/*.o crypto/*.o.d \
+	      ioctl-test quick-test library-test library-test-static \
+              mktables btrfs.static mkfs.btrfs.static fssum \
+	      btrfs.box btrfs.box.static json-formatter-test \
+	      hash-speedtest \
+	      $(check_defs) \
+	      libbtrfs.a libbtrfsutil.a $(libs_shared) $(lib_links) \
+	      $(progs_static) \
+	      libbtrfsutil/*.o libbtrfsutil/*.o.d
+ifeq ($(PYTHON_BINDINGS),1)
+	$(Q)cd libbtrfsutil/python; \
+		CC="$(PYTHON_CC)" LDSHARED="$(PYTHON_LDSHARED)" CCSHARED="$(PYTHON_CCSHARED)" \
+		CFLAGS="$(EXTRA_PYTHON_CFLAGS)" LDFLAGS="$(EXTRA_PYTHON_LDFLAGS)" \
+		PYTHONPATH=$(PYTHON_PATH) $(PYTHON) setup.py $(SETUP_PY_Q) clean -a
+endif
+
+clean-doc:
+	@echo "Cleaning Documentation"
+	$(Q)$(MAKE) $(MAKEOPTS) -C Documentation clean
+
+clean-gen:
+	@echo "Cleaning Generated Files"
+	$(Q)$(RM) -rf -- version.h config.status config.cache config.log \
+		configure.lineno config.status.lineno Makefile.inc \
+		Documentation/Makefile tags TAGS \
+		cscope.files cscope.out cscope.in.out cscope.po.out \
+		config.log config.h config.h.in~ aclocal.m4 \
+		configure autom4te.cache/ config/
+
+$(CLEANDIRS):
+	@echo "Cleaning $(patsubst clean-%,%,$@)"
+	$(Q)$(MAKE) $(MAKEOPTS) -C $(patsubst clean-%,%,$@) clean
+
+install: $(libs_build) $(progs_install) $(INSTALLDIRS)
+ifeq ($(BUILD_PROGRAMS),1)
+	$(INSTALL) -m755 -d $(DESTDIR)$(bindir)
+	$(INSTALL) $(progs_install) $(DESTDIR)$(bindir)
+	$(INSTALL) fsck.btrfs $(DESTDIR)$(bindir)
+	# btrfsck is a link to btrfs in the src tree, make it so for installed file as well
+	$(LN_S) -f btrfs $(DESTDIR)$(bindir)/btrfsck
+ifneq ($(udevdir),)
+	$(INSTALL) -m755 -d $(DESTDIR)$(udevruledir)
+	$(INSTALL) -m644 $(udev_rules) $(DESTDIR)$(udevruledir)
+endif
+endif
+ifneq ($(libs_build),)
+	$(INSTALL) -m755 -d $(DESTDIR)$(libdir)
+	$(INSTALL) $(libs_build) $(DESTDIR)$(libdir)
+ifeq ($(BUILD_SHARED_LIBRARIES),1)
+	cp -d $(lib_links) $(DESTDIR)$(libdir)
+endif
+	$(INSTALL) -m755 -d $(DESTDIR)$(incdir)/btrfs
+	$(INSTALL) -m644 $(libbtrfs_headers) $(DESTDIR)$(incdir)/btrfs
+	$(INSTALL) -m644 libbtrfsutil/btrfsutil.h $(DESTDIR)$(incdir)
+	$(INSTALL) -m755 -d $(DESTDIR)$(pkgconfigdir)
+	$(INSTALL) -m644 libbtrfsutil/libbtrfsutil.pc $(DESTDIR)$(pkgconfigdir)
+endif
+
+ifeq ($(PYTHON_BINDINGS),1)
+install_python: libbtrfsutil_python
+	$(Q)cd libbtrfsutil/python; \
+		CC="$(PYTHON_CC)" LDSHARED="$(PYTHON_LDSHARED)" CCSHARED="$(PYTHON_CCSHARED)" \
+		CFLAGS="$(EXTRA_PYTHON_CFLAGS)" LDFLAGS="$(EXTRA_PYTHON_LDFLAGS)" \
+		PYTHONPATH=$(PYTHON_PATH) $(PYTHON) setup.py install --skip-build $(if $(DESTDIR),--root $(DESTDIR)) --prefix $(prefix)
+
+.PHONY: install_python
+endif
+
+install-static: $(progs_static) $(INSTALLDIRS)
+	$(INSTALL) -m755 -d $(DESTDIR)$(bindir)
+	$(INSTALL) $(progs_static) $(DESTDIR)$(bindir)
+	# btrfsck is a link to btrfs in the src tree, make it so for installed file as well
+	$(LN_S) -f btrfs.static $(DESTDIR)$(bindir)/btrfsck.static
+	$(INSTALL) -m755 -d $(DESTDIR)$(libdir)
+	$(INSTALL) libbtrfs.a libbtrfsutil.a $(DESTDIR)$(libdir)
+	$(INSTALL) -m755 -d $(DESTDIR)$(incdir)/btrfs
+	$(INSTALL) -m644 $(libbtrfs_headers) $(DESTDIR)$(incdir)/btrfs
+
+$(INSTALLDIRS):
+	@echo "Making install in $(patsubst install-%,%,$@)"
+	$(Q)$(MAKE) $(MAKEOPTS) -C $(patsubst install-%,%,$@) install
+
+uninstall:
+	$(Q)$(MAKE) $(MAKEOPTS) -C Documentation uninstall
+	cd $(DESTDIR)$(incdir)/btrfs; $(RM) -f -- $(libbtrfs_headers)
+	$(RMDIR) -p --ignore-fail-on-non-empty -- $(DESTDIR)$(incdir)/btrfs
+	cd $(DESTDIR)$(incdir); $(RM) -f -- btrfsutil.h
+	cd $(DESTDIR)$(libdir); $(RM) -f -- $(lib_links) libbtrfs.a libbtrfsutil.a $(libs_shared)
+	cd $(DESTDIR)$(bindir); $(RM) -f -- btrfsck fsck.btrfs $(progs_install)
+
+ifneq ($(MAKECMDGOALS),clean)
+-include $(all_objects:.o=.o.d) $(subst .btrfs,, $(filter-out btrfsck.o.d, $(progs:=.o.d)))
+endif
Index: a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/libbtrfsutil/python/setup.py
===================================================================
--- a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/libbtrfsutil/python/setup.py	(nonexistent)
+++ a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/libbtrfsutil/python/setup.py	(revision 5)
@@ -0,0 +1,108 @@
+#!/usr/bin/env python3
+
+# Copyright (C) 2018 Facebook
+#
+# This file is part of libbtrfsutil.
+#
+# libbtrfsutil is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# libbtrfsutil is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with libbtrfsutil.  If not, see <http://www.gnu.org/licenses/>.
+
+import re
+import os
+import os.path
+from setuptools import setup, Extension
+from setuptools.command.build_ext import build_ext
+import subprocess
+
+
+def get_version():
+    f = open('../../VERSION', 'r')
+    version = f.readline().strip()
+    f.close()
+    return ".".join(version[1:].split('.'))
+
+
+def out_of_date(dependencies, target):
+    dependency_mtimes = [os.path.getmtime(dependency) for dependency in dependencies]
+    try:
+        target_mtime = os.path.getmtime(target)
+    except OSError:
+        return True
+    return any(dependency_mtime >= target_mtime for dependency_mtime in dependency_mtimes)
+
+
+def gen_constants():
+    with open('../btrfsutil.h', 'r') as f:
+        btrfsutil_h = f.read()
+
+    constants = re.findall(
+        r'^\s*(BTRFS_UTIL_ERROR_[a-zA-Z0-9_]+)',
+        btrfsutil_h, flags=re.MULTILINE)
+
+    with open('constants.c', 'w') as f:
+        f.write("""\
+/* WARNING: this file is auto-generated by setup.py and any change would be lost */
+
+#include <btrfsutil.h>
+#include "btrfsutilpy.h"
+
+void add_module_constants(PyObject *m)
+{
+""")
+        for constant in constants:
+            assert constant.startswith('BTRFS_UTIL_')
+            name = constant[len('BTRFS_UTIL_'):]
+            f.write('\tPyModule_AddIntConstant(m, "{}", {});\n'.format(name, constant))
+        f.write("""\
+}
+""")
+
+
+class my_build_ext(build_ext):
+    def run(self):
+        if out_of_date(['../btrfsutil.h'], 'constants.c'):
+            try:
+                gen_constants()
+            except Exception as e:
+                try:
+                    os.remove('constants.c')
+                except OSError:
+                    pass
+                raise e
+        super().run()
+
+
+module = Extension(
+    name='btrfsutil',
+    sources=[
+        'constants.c',
+        'error.c',
+        'filesystem.c',
+        'module.c',
+        'qgroup.c',
+        'subvolume.c',
+    ],
+    include_dirs=['..', '../..'],
+    library_dirs=['../..'],
+    libraries=['btrfsutil'],
+)
+
+setup(
+    name='btrfsutil',
+    version=get_version(),
+    description='Library for managing Btrfs filesystems',
+    url='https://github.com/kdave/btrfs-progs',
+    license='LGPLv2+',
+    cmdclass={'build_ext': my_build_ext},
+    ext_modules=[module],
+)

Property changes on: a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/libbtrfsutil/python/setup.py
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/libbtrfsutil/python
===================================================================
--- a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/libbtrfsutil/python	(nonexistent)
+++ a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/libbtrfsutil/python	(revision 5)

Property changes on: a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/libbtrfsutil/python
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/libbtrfsutil
===================================================================
--- a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/libbtrfsutil	(nonexistent)
+++ a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/libbtrfsutil	(revision 5)

Property changes on: a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new/libbtrfsutil
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new
===================================================================
--- a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new	(nonexistent)
+++ a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new	(revision 5)

Property changes on: a/btrfs-progs/create-5.15.1-python-cross-patch/btrfs-progs-5.15.1-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/btrfs-progs/create-5.15.1-python-cross-patch/create.patch.sh
===================================================================
--- a/btrfs-progs/create-5.15.1-python-cross-patch/create.patch.sh	(nonexistent)
+++ a/btrfs-progs/create-5.15.1-python-cross-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=5.15.1
+
+tar --files-from=file.list -xJvf ../btrfs-progs-$VERSION.tar.xz
+mv btrfs-progs-$VERSION btrfs-progs-$VERSION-orig
+
+cp -rf ./btrfs-progs-$VERSION-new ./btrfs-progs-$VERSION
+
+diff --unified -Nr  btrfs-progs-$VERSION-orig  btrfs-progs-$VERSION > btrfs-progs-$VERSION-python-cross.patch
+
+mv btrfs-progs-$VERSION-python-cross.patch ../patches
+
+rm -rf ./btrfs-progs-$VERSION
+rm -rf ./btrfs-progs-$VERSION-orig

Property changes on: a/btrfs-progs/create-5.15.1-python-cross-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/btrfs-progs/create-5.15.1-python-cross-patch/file.list
===================================================================
--- a/btrfs-progs/create-5.15.1-python-cross-patch/file.list	(nonexistent)
+++ a/btrfs-progs/create-5.15.1-python-cross-patch/file.list	(revision 5)
@@ -0,0 +1,2 @@
+btrfs-progs-5.15.1/Makefile
+btrfs-progs-5.15.1/libbtrfsutil/python/setup.py
Index: a/btrfs-progs/create-5.15.1-python-cross-patch
===================================================================
--- a/btrfs-progs/create-5.15.1-python-cross-patch	(nonexistent)
+++ a/btrfs-progs/create-5.15.1-python-cross-patch	(revision 5)

Property changes on: a/btrfs-progs/create-5.15.1-python-cross-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/btrfs-progs/patches/README
===================================================================
--- a/btrfs-progs/patches/README	(nonexistent)
+++ a/btrfs-progs/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/btrfs-progs/patches
===================================================================
--- a/btrfs-progs/patches	(nonexistent)
+++ a/btrfs-progs/patches	(revision 5)

Property changes on: a/btrfs-progs/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/btrfs-progs
===================================================================
--- a/btrfs-progs	(nonexistent)
+++ a/btrfs-progs	(revision 5)

Property changes on: a/btrfs-progs
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/bzip2/Makefile
===================================================================
--- a/bzip2/Makefile	(nonexistent)
+++ a/bzip2/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/bzip2
+
+versions    = 1.0.8
+pkgname     = bzip2
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/bzip2-1.0.8-cross.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-1.0.8-cross-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new/Makefile
===================================================================
--- a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new/Makefile	(nonexistent)
+++ a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new/Makefile	(revision 5)
@@ -0,0 +1,211 @@
+# ------------------------------------------------------------------
+# This file is part of bzip2/libbzip2, a program and library for
+# lossless, block-sorting data compression.
+#
+# bzip2/libbzip2 version 1.0.8 of 13 July 2019
+# Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
+#
+# Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+# README file.
+#
+# This program is released under the terms of the license contained
+# in the file LICENSE.
+# ------------------------------------------------------------------
+
+SHELL=/bin/sh
+
+BIGFILES = -D_FILE_OFFSET_BITS=64
+CFLAGS  += -Wall -Winline -O2 -g $(BIGFILES)
+
+# Where you want it installed when you do 'make install'
+PREFIX ?= /usr
+
+
+OBJS= blocksort.o  \
+      huffman.o    \
+      crctable.o   \
+      randtable.o  \
+      compress.o   \
+      decompress.o \
+      bzlib.o
+
+all: libbz2.a bzip2 bzip2recover
+
+bzip2: libbz2.a bzip2.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2
+
+bzip2recover: bzip2recover.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o
+
+libbz2.a: $(OBJS)
+	rm -f libbz2.a
+	$(AR) cq libbz2.a $(OBJS)
+	@if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \
+		-f /bin/ranlib -o -f /usr/ccs/bin/ranlib ) ; then \
+		echo $(RANLIB) libbz2.a ; \
+		$(RANLIB) libbz2.a ; \
+	fi
+
+check: test
+test: bzip2
+	@cat words1
+	./bzip2 -1  < sample1.ref > sample1.rb2
+	./bzip2 -2  < sample2.ref > sample2.rb2
+	./bzip2 -3  < sample3.ref > sample3.rb2
+	./bzip2 -d  < sample1.bz2 > sample1.tst
+	./bzip2 -d  < sample2.bz2 > sample2.tst
+	./bzip2 -ds < sample3.bz2 > sample3.tst
+	cmp sample1.bz2 sample1.rb2 
+	cmp sample2.bz2 sample2.rb2
+	cmp sample3.bz2 sample3.rb2
+	cmp sample1.tst sample1.ref
+	cmp sample2.tst sample2.ref
+	cmp sample3.tst sample3.ref
+	@cat words3
+
+install: bzip2 bzip2recover
+	if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi
+	if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi
+	if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi
+	if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi
+	if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi
+	cp -f bzip2 $(PREFIX)/bin/bzip2
+	cp -f bzip2 $(PREFIX)/bin/bunzip2
+	cp -f bzip2 $(PREFIX)/bin/bzcat
+	cp -f bzip2recover $(PREFIX)/bin/bzip2recover
+	chmod a+x $(PREFIX)/bin/bzip2
+	chmod a+x $(PREFIX)/bin/bunzip2
+	chmod a+x $(PREFIX)/bin/bzcat
+	chmod a+x $(PREFIX)/bin/bzip2recover
+	cp -f bzip2.1 $(PREFIX)/man/man1
+	chmod a+r $(PREFIX)/man/man1/bzip2.1
+	cp -f bzlib.h $(PREFIX)/include
+	chmod a+r $(PREFIX)/include/bzlib.h
+	cp -f libbz2.a $(PREFIX)/lib
+	chmod a+r $(PREFIX)/lib/libbz2.a
+	cp -f bzgrep $(PREFIX)/bin/bzgrep
+	ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep
+	ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep
+	chmod a+x $(PREFIX)/bin/bzgrep
+	cp -f bzmore $(PREFIX)/bin/bzmore
+	ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless
+	chmod a+x $(PREFIX)/bin/bzmore
+	cp -f bzdiff $(PREFIX)/bin/bzdiff
+	ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp
+	chmod a+x $(PREFIX)/bin/bzdiff
+	cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1
+	chmod a+r $(PREFIX)/man/man1/bzgrep.1
+	chmod a+r $(PREFIX)/man/man1/bzmore.1
+	chmod a+r $(PREFIX)/man/man1/bzdiff.1
+	echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1
+	echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1
+	echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1
+	echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1
+
+clean: 
+	rm -f *.o libbz2.a bzip2 bzip2recover \
+	sample1.rb2 sample2.rb2 sample3.rb2 \
+	sample1.tst sample2.tst sample3.tst
+
+blocksort.o: blocksort.c
+	@cat words0
+	$(CC) $(CFLAGS) -c blocksort.c
+huffman.o: huffman.c
+	$(CC) $(CFLAGS) -c huffman.c
+crctable.o: crctable.c
+	$(CC) $(CFLAGS) -c crctable.c
+randtable.o: randtable.c
+	$(CC) $(CFLAGS) -c randtable.c
+compress.o: compress.c
+	$(CC) $(CFLAGS) -c compress.c
+decompress.o: decompress.c
+	$(CC) $(CFLAGS) -c decompress.c
+bzlib.o: bzlib.c
+	$(CC) $(CFLAGS) -c bzlib.c
+bzip2.o: bzip2.c
+	$(CC) $(CFLAGS) -c bzip2.c
+bzip2recover.o: bzip2recover.c
+	$(CC) $(CFLAGS) -c bzip2recover.c
+
+
+distclean: clean
+	rm -f manual.ps manual.html manual.pdf
+
+DISTNAME=bzip2-1.0.8
+dist: check manual
+	rm -f $(DISTNAME)
+	ln -s -f . $(DISTNAME)
+	tar cvf $(DISTNAME).tar \
+	   $(DISTNAME)/blocksort.c \
+	   $(DISTNAME)/huffman.c \
+	   $(DISTNAME)/crctable.c \
+	   $(DISTNAME)/randtable.c \
+	   $(DISTNAME)/compress.c \
+	   $(DISTNAME)/decompress.c \
+	   $(DISTNAME)/bzlib.c \
+	   $(DISTNAME)/bzip2.c \
+	   $(DISTNAME)/bzip2recover.c \
+	   $(DISTNAME)/bzlib.h \
+	   $(DISTNAME)/bzlib_private.h \
+	   $(DISTNAME)/Makefile \
+	   $(DISTNAME)/LICENSE \
+	   $(DISTNAME)/bzip2.1 \
+	   $(DISTNAME)/bzip2.1.preformatted \
+	   $(DISTNAME)/bzip2.txt \
+	   $(DISTNAME)/words0 \
+	   $(DISTNAME)/words1 \
+	   $(DISTNAME)/words2 \
+	   $(DISTNAME)/words3 \
+	   $(DISTNAME)/sample1.ref \
+	   $(DISTNAME)/sample2.ref \
+	   $(DISTNAME)/sample3.ref \
+	   $(DISTNAME)/sample1.bz2 \
+	   $(DISTNAME)/sample2.bz2 \
+	   $(DISTNAME)/sample3.bz2 \
+	   $(DISTNAME)/dlltest.c \
+	   $(DISTNAME)/manual.html \
+	   $(DISTNAME)/manual.pdf \
+	   $(DISTNAME)/manual.ps \
+	   $(DISTNAME)/README \
+	   $(DISTNAME)/README.COMPILATION.PROBLEMS \
+	   $(DISTNAME)/README.XML.STUFF \
+	   $(DISTNAME)/CHANGES \
+	   $(DISTNAME)/libbz2.def \
+	   $(DISTNAME)/libbz2.dsp \
+	   $(DISTNAME)/dlltest.dsp \
+	   $(DISTNAME)/makefile.msc \
+	   $(DISTNAME)/unzcrash.c \
+	   $(DISTNAME)/spewG.c \
+	   $(DISTNAME)/mk251.c \
+	   $(DISTNAME)/bzdiff \
+	   $(DISTNAME)/bzdiff.1 \
+	   $(DISTNAME)/bzmore \
+	   $(DISTNAME)/bzmore.1 \
+	   $(DISTNAME)/bzgrep \
+	   $(DISTNAME)/bzgrep.1 \
+	   $(DISTNAME)/Makefile-libbz2_so \
+	   $(DISTNAME)/bz-common.xsl \
+	   $(DISTNAME)/bz-fo.xsl \
+	   $(DISTNAME)/bz-html.xsl \
+	   $(DISTNAME)/bzip.css \
+	   $(DISTNAME)/entities.xml \
+	   $(DISTNAME)/manual.xml \
+	   $(DISTNAME)/format.pl \
+	   $(DISTNAME)/xmlproc.sh
+	gzip -v $(DISTNAME).tar
+
+# For rebuilding the manual from sources on my SuSE 9.1 box
+
+MANUAL_SRCS= 	bz-common.xsl bz-fo.xsl bz-html.xsl bzip.css \
+		entities.xml manual.xml 
+
+manual: manual.html manual.ps manual.pdf
+
+manual.ps: $(MANUAL_SRCS)
+	./xmlproc.sh -ps manual.xml
+
+manual.pdf: $(MANUAL_SRCS)
+	./xmlproc.sh -pdf manual.xml
+
+manual.html: $(MANUAL_SRCS)
+	./xmlproc.sh -html manual.xml
Index: a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new/Makefile-libbz2_so
===================================================================
--- a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new/Makefile-libbz2_so	(nonexistent)
+++ a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new/Makefile-libbz2_so	(revision 5)
@@ -0,0 +1,58 @@
+
+# This Makefile builds a shared version of the library, 
+# libbz2.so.1.0.8, with soname libbz2.so.1.0,
+# at least on x86-Linux (RedHat 7.2), 
+# with gcc-2.96 20000731 (Red Hat Linux 7.1 2.96-98).  
+# Please see the README file for some important info 
+# about building the library like this.
+
+# ------------------------------------------------------------------
+# This file is part of bzip2/libbzip2, a program and library for
+# lossless, block-sorting data compression.
+#
+# bzip2/libbzip2 version 1.0.8 of 13 July 2019
+# Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
+#
+# Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+# README file.
+#
+# This program is released under the terms of the license contained
+# in the file LICENSE.
+# ------------------------------------------------------------------
+
+
+SHELL     = /bin/sh
+BIGFILES  = -D_FILE_OFFSET_BITS=64
+CFLAGS   += -fpic -fPIC -Wall -Winline -O2 -g $(BIGFILES)
+
+OBJS= blocksort.o  \
+      huffman.o    \
+      crctable.o   \
+      randtable.o  \
+      compress.o   \
+      decompress.o \
+      bzlib.o
+
+all: $(OBJS)
+	$(CC) -shared -Wl,-soname -Wl,libbz2.so.1 -o libbz2.so.1.0.8 $(OBJS)
+	$(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.8
+	rm -f libbz2.so.1
+	ln -s libbz2.so.1.0.8 libbz2.so.1
+
+clean: 
+	rm -f $(OBJS) bzip2.o libbz2.so.1.0.8 libbz2.so.1 bzip2-shared
+
+blocksort.o: blocksort.c
+	$(CC) $(CFLAGS) -c blocksort.c
+huffman.o: huffman.c
+	$(CC) $(CFLAGS) -c huffman.c
+crctable.o: crctable.c
+	$(CC) $(CFLAGS) -c crctable.c
+randtable.o: randtable.c
+	$(CC) $(CFLAGS) -c randtable.c
+compress.o: compress.c
+	$(CC) $(CFLAGS) -c compress.c
+decompress.o: decompress.c
+	$(CC) $(CFLAGS) -c decompress.c
+bzlib.o: bzlib.c
+	$(CC) $(CFLAGS) -c bzlib.c
Index: a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new/blocksort.c
===================================================================
--- a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new/blocksort.c	(nonexistent)
+++ a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new/blocksort.c	(revision 5)
@@ -0,0 +1,1093 @@
+
+/*-------------------------------------------------------------*/
+/*--- Block sorting machinery                               ---*/
+/*---                                           blocksort.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.8 of 13 July 2019
+   Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+/*---------------------------------------------*/
+/*--- Fallback O(N log(N)^2) sorting        ---*/
+/*--- algorithm, for repetitive blocks      ---*/
+/*---------------------------------------------*/
+
+/*---------------------------------------------*/
+static 
+__inline__
+void fallbackSimpleSort ( UInt32* fmap, 
+                          UInt32* eclass, 
+                          Int32   lo, 
+                          Int32   hi )
+{
+   Int32 i, j, tmp;
+   UInt32 ec_tmp;
+
+   if (lo == hi) return;
+
+   if (hi - lo > 3) {
+      for ( i = hi-4; i >= lo; i-- ) {
+         tmp = fmap[i];
+         ec_tmp = eclass[tmp];
+         for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 )
+            fmap[j-4] = fmap[j];
+         fmap[j-4] = tmp;
+      }
+   }
+
+   for ( i = hi-1; i >= lo; i-- ) {
+      tmp = fmap[i];
+      ec_tmp = eclass[tmp];
+      for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ )
+         fmap[j-1] = fmap[j];
+      fmap[j-1] = tmp;
+   }
+}
+
+
+/*---------------------------------------------*/
+#define fswap(zz1, zz2) \
+   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
+
+#define fvswap(zzp1, zzp2, zzn)       \
+{                                     \
+   Int32 yyp1 = (zzp1);               \
+   Int32 yyp2 = (zzp2);               \
+   Int32 yyn  = (zzn);                \
+   while (yyn > 0) {                  \
+      fswap(fmap[yyp1], fmap[yyp2]);  \
+      yyp1++; yyp2++; yyn--;          \
+   }                                  \
+}
+
+
+#define fmin(a,b) ((a) < (b)) ? (a) : (b)
+
+#define fpush(lz,hz) { stackLo[sp] = lz; \
+                       stackHi[sp] = hz; \
+                       sp++; }
+
+#define fpop(lz,hz) { sp--;              \
+                      lz = stackLo[sp];  \
+                      hz = stackHi[sp]; }
+
+#define FALLBACK_QSORT_SMALL_THRESH 10
+#define FALLBACK_QSORT_STACK_SIZE   100
+
+
+static
+void fallbackQSort3 ( UInt32* fmap, 
+                      UInt32* eclass,
+                      Int32   loSt, 
+                      Int32   hiSt )
+{
+   Int32 unLo, unHi, ltLo, gtHi, n, m;
+   Int32 sp, lo, hi;
+   UInt32 med, r, r3;
+   Int32 stackLo[FALLBACK_QSORT_STACK_SIZE];
+   Int32 stackHi[FALLBACK_QSORT_STACK_SIZE];
+
+   r = 0;
+
+   sp = 0;
+   fpush ( loSt, hiSt );
+
+   while (sp > 0) {
+
+      AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 );
+
+      fpop ( lo, hi );
+      if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) {
+         fallbackSimpleSort ( fmap, eclass, lo, hi );
+         continue;
+      }
+
+      /* Random partitioning.  Median of 3 sometimes fails to
+         avoid bad cases.  Median of 9 seems to help but 
+         looks rather expensive.  This too seems to work but
+         is cheaper.  Guidance for the magic constants 
+         7621 and 32768 is taken from Sedgewick's algorithms
+         book, chapter 35.
+      */
+      r = ((r * 7621) + 1) % 32768;
+      r3 = r % 3;
+      if (r3 == 0) med = eclass[fmap[lo]]; else
+      if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else
+                   med = eclass[fmap[hi]];
+
+      unLo = ltLo = lo;
+      unHi = gtHi = hi;
+
+      while (1) {
+         while (1) {
+            if (unLo > unHi) break;
+            n = (Int32)eclass[fmap[unLo]] - (Int32)med;
+            if (n == 0) { 
+               fswap(fmap[unLo], fmap[ltLo]); 
+               ltLo++; unLo++; 
+               continue; 
+            };
+            if (n > 0) break;
+            unLo++;
+         }
+         while (1) {
+            if (unLo > unHi) break;
+            n = (Int32)eclass[fmap[unHi]] - (Int32)med;
+            if (n == 0) { 
+               fswap(fmap[unHi], fmap[gtHi]); 
+               gtHi--; unHi--; 
+               continue; 
+            };
+            if (n < 0) break;
+            unHi--;
+         }
+         if (unLo > unHi) break;
+         fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--;
+      }
+
+      AssertD ( unHi == unLo-1, "fallbackQSort3(2)" );
+
+      if (gtHi < ltLo) continue;
+
+      n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n);
+      m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m);
+
+      n = lo + unLo - ltLo - 1;
+      m = hi - (gtHi - unHi) + 1;
+
+      if (n - lo > hi - m) {
+         fpush ( lo, n );
+         fpush ( m, hi );
+      } else {
+         fpush ( m, hi );
+         fpush ( lo, n );
+      }
+   }
+}
+
+#undef fmin
+#undef fpush
+#undef fpop
+#undef fswap
+#undef fvswap
+#undef FALLBACK_QSORT_SMALL_THRESH
+#undef FALLBACK_QSORT_STACK_SIZE
+
+
+/*---------------------------------------------*/
+/* Pre:
+      nblock > 0
+      eclass exists for [0 .. nblock-1]
+      ((UChar*)eclass) [0 .. nblock-1] holds block
+      ptr exists for [0 .. nblock-1]
+
+   Post:
+      ((UChar*)eclass) [0 .. nblock-1] holds block
+      All other areas of eclass destroyed
+      fmap [0 .. nblock-1] holds sorted order
+      bhtab [ 0 .. 2+(nblock/32) ] destroyed
+*/
+
+#define       SET_BH(zz)  bhtab[(zz) >> 5] |= ((UInt32)1 << ((zz) & 31))
+#define     CLEAR_BH(zz)  bhtab[(zz) >> 5] &= ~((UInt32)1 << ((zz) & 31))
+#define     ISSET_BH(zz)  (bhtab[(zz) >> 5] & ((UInt32)1 << ((zz) & 31)))
+#define      WORD_BH(zz)  bhtab[(zz) >> 5]
+#define UNALIGNED_BH(zz)  ((zz) & 0x01f)
+
+static
+void fallbackSort ( UInt32* fmap, 
+                    UInt32* eclass, 
+                    UInt32* bhtab,
+                    Int32   nblock,
+                    Int32   verb )
+{
+   Int32 ftab[257];
+   Int32 ftabCopy[256];
+   Int32 H, i, j, k, l, r, cc, cc1;
+   Int32 nNotDone;
+   Int32 nBhtab;
+   UChar* eclass8 = (UChar*)eclass;
+
+   /*--
+      Initial 1-char radix sort to generate
+      initial fmap and initial BH bits.
+   --*/
+   if (verb >= 4)
+      VPrintf0 ( "        bucket sorting ...\n" );
+   for (i = 0; i < 257;    i++) ftab[i] = 0;
+   for (i = 0; i < nblock; i++) ftab[eclass8[i]]++;
+   for (i = 0; i < 256;    i++) ftabCopy[i] = ftab[i];
+   for (i = 1; i < 257;    i++) ftab[i] += ftab[i-1];
+
+   for (i = 0; i < nblock; i++) {
+      j = eclass8[i];
+      k = ftab[j] - 1;
+      ftab[j] = k;
+      fmap[k] = i;
+   }
+
+   nBhtab = 2 + (nblock / 32);
+   for (i = 0; i < nBhtab; i++) bhtab[i] = 0;
+   for (i = 0; i < 256; i++) SET_BH(ftab[i]);
+
+   /*--
+      Inductively refine the buckets.  Kind-of an
+      "exponential radix sort" (!), inspired by the
+      Manber-Myers suffix array construction algorithm.
+   --*/
+
+   /*-- set sentinel bits for block-end detection --*/
+   for (i = 0; i < 32; i++) { 
+      SET_BH(nblock + 2*i);
+      CLEAR_BH(nblock + 2*i + 1);
+   }
+
+   /*-- the log(N) loop --*/
+   H = 1;
+   while (1) {
+
+      if (verb >= 4) 
+         VPrintf1 ( "        depth %6d has ", H );
+
+      j = 0;
+      for (i = 0; i < nblock; i++) {
+         if (ISSET_BH(i)) j = i;
+         k = fmap[i] - H; if (k < 0) k += nblock;
+         eclass[k] = j;
+      }
+
+      nNotDone = 0;
+      r = -1;
+      while (1) {
+
+	 /*-- find the next non-singleton bucket --*/
+         k = r + 1;
+         while (ISSET_BH(k) && UNALIGNED_BH(k)) k++;
+         if (ISSET_BH(k)) {
+            while (WORD_BH(k) == 0xffffffff) k += 32;
+            while (ISSET_BH(k)) k++;
+         }
+         l = k - 1;
+         if (l >= nblock) break;
+         while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++;
+         if (!ISSET_BH(k)) {
+            while (WORD_BH(k) == 0x00000000) k += 32;
+            while (!ISSET_BH(k)) k++;
+         }
+         r = k - 1;
+         if (r >= nblock) break;
+
+         /*-- now [l, r] bracket current bucket --*/
+         if (r > l) {
+            nNotDone += (r - l + 1);
+            fallbackQSort3 ( fmap, eclass, l, r );
+
+            /*-- scan bucket and generate header bits-- */
+            cc = -1;
+            for (i = l; i <= r; i++) {
+               cc1 = eclass[fmap[i]];
+               if (cc != cc1) { SET_BH(i); cc = cc1; };
+            }
+         }
+      }
+
+      if (verb >= 4) 
+         VPrintf1 ( "%6d unresolved strings\n", nNotDone );
+
+      H *= 2;
+      if (H > nblock || nNotDone == 0) break;
+   }
+
+   /*-- 
+      Reconstruct the original block in
+      eclass8 [0 .. nblock-1], since the
+      previous phase destroyed it.
+   --*/
+   if (verb >= 4)
+      VPrintf0 ( "        reconstructing block ...\n" );
+   j = 0;
+   for (i = 0; i < nblock; i++) {
+      while (ftabCopy[j] == 0) j++;
+      ftabCopy[j]--;
+      eclass8[fmap[i]] = (UChar)j;
+   }
+   AssertH ( j < 256, 1005 );
+}
+
+#undef       SET_BH
+#undef     CLEAR_BH
+#undef     ISSET_BH
+#undef      WORD_BH
+#undef UNALIGNED_BH
+
+
+/*---------------------------------------------*/
+/*--- The main, O(N^2 log(N)) sorting       ---*/
+/*--- algorithm.  Faster for "normal"       ---*/
+/*--- non-repetitive blocks.                ---*/
+/*---------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+Bool mainGtU ( UInt32  i1, 
+               UInt32  i2,
+               UChar*  block, 
+               UInt16* quadrant,
+               UInt32  nblock,
+               Int32*  budget )
+{
+   Int32  k;
+   UChar  c1, c2;
+   UInt16 s1, s2;
+
+   AssertD ( i1 != i2, "mainGtU" );
+   /* 1 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 2 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 3 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 4 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 5 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 6 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 7 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 8 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 9 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 10 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 11 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 12 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+
+   k = nblock + 8;
+
+   do {
+      /* 1 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 2 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 3 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 4 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 5 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 6 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 7 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 8 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+
+      if (i1 >= nblock) i1 -= nblock;
+      if (i2 >= nblock) i2 -= nblock;
+
+      k -= 8;
+      (*budget)--;
+   }
+      while (k >= 0);
+
+   return False;
+}
+
+
+/*---------------------------------------------*/
+/*--
+   Knuth's increments seem to work better
+   than Incerpi-Sedgewick here.  Possibly
+   because the number of elems to sort is
+   usually small, typically <= 20.
+--*/
+static
+Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280,
+                   9841, 29524, 88573, 265720,
+                   797161, 2391484 };
+
+static
+void mainSimpleSort ( UInt32* ptr,
+                      UChar*  block,
+                      UInt16* quadrant,
+                      Int32   nblock,
+                      Int32   lo, 
+                      Int32   hi, 
+                      Int32   d,
+                      Int32*  budget )
+{
+   Int32 i, j, h, bigN, hp;
+   UInt32 v;
+
+   bigN = hi - lo + 1;
+   if (bigN < 2) return;
+
+   hp = 0;
+   while (incs[hp] < bigN) hp++;
+   hp--;
+
+   for (; hp >= 0; hp--) {
+      h = incs[hp];
+
+      i = lo + h;
+      while (True) {
+
+         /*-- copy 1 --*/
+         if (i > hi) break;
+         v = ptr[i];
+         j = i;
+         while ( mainGtU ( 
+                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget 
+                 ) ) {
+            ptr[j] = ptr[j-h];
+            j = j - h;
+            if (j <= (lo + h - 1)) break;
+         }
+         ptr[j] = v;
+         i++;
+
+         /*-- copy 2 --*/
+         if (i > hi) break;
+         v = ptr[i];
+         j = i;
+         while ( mainGtU ( 
+                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget 
+                 ) ) {
+            ptr[j] = ptr[j-h];
+            j = j - h;
+            if (j <= (lo + h - 1)) break;
+         }
+         ptr[j] = v;
+         i++;
+
+         /*-- copy 3 --*/
+         if (i > hi) break;
+         v = ptr[i];
+         j = i;
+         while ( mainGtU ( 
+                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget 
+                 ) ) {
+            ptr[j] = ptr[j-h];
+            j = j - h;
+            if (j <= (lo + h - 1)) break;
+         }
+         ptr[j] = v;
+         i++;
+
+         if (*budget < 0) return;
+      }
+   }
+}
+
+
+/*---------------------------------------------*/
+/*--
+   The following is an implementation of
+   an elegant 3-way quicksort for strings,
+   described in a paper "Fast Algorithms for
+   Sorting and Searching Strings", by Robert
+   Sedgewick and Jon L. Bentley.
+--*/
+
+#define mswap(zz1, zz2) \
+   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
+
+#define mvswap(zzp1, zzp2, zzn)       \
+{                                     \
+   Int32 yyp1 = (zzp1);               \
+   Int32 yyp2 = (zzp2);               \
+   Int32 yyn  = (zzn);                \
+   while (yyn > 0) {                  \
+      mswap(ptr[yyp1], ptr[yyp2]);    \
+      yyp1++; yyp2++; yyn--;          \
+   }                                  \
+}
+
+static 
+__inline__
+UChar mmed3 ( UChar a, UChar b, UChar c )
+{
+   UChar t;
+   if (a > b) { t = a; a = b; b = t; };
+   if (b > c) { 
+      b = c;
+      if (a > b) b = a;
+   }
+   return b;
+}
+
+#define mmin(a,b) ((a) < (b)) ? (a) : (b)
+
+#define mpush(lz,hz,dz) { stackLo[sp] = lz; \
+                          stackHi[sp] = hz; \
+                          stackD [sp] = dz; \
+                          sp++; }
+
+#define mpop(lz,hz,dz) { sp--;             \
+                         lz = stackLo[sp]; \
+                         hz = stackHi[sp]; \
+                         dz = stackD [sp]; }
+
+
+#define mnextsize(az) (nextHi[az]-nextLo[az])
+
+#define mnextswap(az,bz)                                        \
+   { Int32 tz;                                                  \
+     tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \
+     tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \
+     tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; }
+
+
+#define MAIN_QSORT_SMALL_THRESH 20
+#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT)
+#define MAIN_QSORT_STACK_SIZE 100
+
+static
+void mainQSort3 ( UInt32* ptr,
+                  UChar*  block,
+                  UInt16* quadrant,
+                  Int32   nblock,
+                  Int32   loSt, 
+                  Int32   hiSt, 
+                  Int32   dSt,
+                  Int32*  budget )
+{
+   Int32 unLo, unHi, ltLo, gtHi, n, m, med;
+   Int32 sp, lo, hi, d;
+
+   Int32 stackLo[MAIN_QSORT_STACK_SIZE];
+   Int32 stackHi[MAIN_QSORT_STACK_SIZE];
+   Int32 stackD [MAIN_QSORT_STACK_SIZE];
+
+   Int32 nextLo[3];
+   Int32 nextHi[3];
+   Int32 nextD [3];
+
+   sp = 0;
+   mpush ( loSt, hiSt, dSt );
+
+   while (sp > 0) {
+
+      AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 );
+
+      mpop ( lo, hi, d );
+      if (hi - lo < MAIN_QSORT_SMALL_THRESH || 
+          d > MAIN_QSORT_DEPTH_THRESH) {
+         mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget );
+         if (*budget < 0) return;
+         continue;
+      }
+
+      med = (Int32) 
+            mmed3 ( block[ptr[ lo         ]+d],
+                    block[ptr[ hi         ]+d],
+                    block[ptr[ (lo+hi)>>1 ]+d] );
+
+      unLo = ltLo = lo;
+      unHi = gtHi = hi;
+
+      while (True) {
+         while (True) {
+            if (unLo > unHi) break;
+            n = ((Int32)block[ptr[unLo]+d]) - med;
+            if (n == 0) { 
+               mswap(ptr[unLo], ptr[ltLo]); 
+               ltLo++; unLo++; continue; 
+            };
+            if (n >  0) break;
+            unLo++;
+         }
+         while (True) {
+            if (unLo > unHi) break;
+            n = ((Int32)block[ptr[unHi]+d]) - med;
+            if (n == 0) { 
+               mswap(ptr[unHi], ptr[gtHi]); 
+               gtHi--; unHi--; continue; 
+            };
+            if (n <  0) break;
+            unHi--;
+         }
+         if (unLo > unHi) break;
+         mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--;
+      }
+
+      AssertD ( unHi == unLo-1, "mainQSort3(2)" );
+
+      if (gtHi < ltLo) {
+         mpush(lo, hi, d+1 );
+         continue;
+      }
+
+      n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n);
+      m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m);
+
+      n = lo + unLo - ltLo - 1;
+      m = hi - (gtHi - unHi) + 1;
+
+      nextLo[0] = lo;  nextHi[0] = n;   nextD[0] = d;
+      nextLo[1] = m;   nextHi[1] = hi;  nextD[1] = d;
+      nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1;
+
+      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
+      if (mnextsize(1) < mnextsize(2)) mnextswap(1,2);
+      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
+
+      AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" );
+      AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" );
+
+      mpush (nextLo[0], nextHi[0], nextD[0]);
+      mpush (nextLo[1], nextHi[1], nextD[1]);
+      mpush (nextLo[2], nextHi[2], nextD[2]);
+   }
+}
+
+#undef mswap
+#undef mvswap
+#undef mpush
+#undef mpop
+#undef mmin
+#undef mnextsize
+#undef mnextswap
+#undef MAIN_QSORT_SMALL_THRESH
+#undef MAIN_QSORT_DEPTH_THRESH
+#undef MAIN_QSORT_STACK_SIZE
+
+
+/*---------------------------------------------*/
+/* Pre:
+      nblock > N_OVERSHOOT
+      block32 exists for [0 .. nblock-1 +N_OVERSHOOT]
+      ((UChar*)block32) [0 .. nblock-1] holds block
+      ptr exists for [0 .. nblock-1]
+
+   Post:
+      ((UChar*)block32) [0 .. nblock-1] holds block
+      All other areas of block32 destroyed
+      ftab [0 .. 65536 ] destroyed
+      ptr [0 .. nblock-1] holds sorted order
+      if (*budget < 0), sorting was abandoned
+*/
+
+#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8])
+#define SETMASK (1 << 21)
+#define CLEARMASK (~(SETMASK))
+
+static
+void mainSort ( UInt32* ptr, 
+                UChar*  block,
+                UInt16* quadrant, 
+                UInt32* ftab,
+                Int32   nblock,
+                Int32   verb,
+                Int32*  budget )
+{
+   Int32  i, j, k, ss, sb;
+   Int32  runningOrder[256];
+   Bool   bigDone[256];
+   Int32  copyStart[256];
+   Int32  copyEnd  [256];
+   UChar  c1;
+   Int32  numQSorted;
+   UInt16 s;
+   if (verb >= 4) VPrintf0 ( "        main sort initialise ...\n" );
+
+   /*-- set up the 2-byte frequency table --*/
+   for (i = 65536; i >= 0; i--) ftab[i] = 0;
+
+   j = block[0] << 8;
+   i = nblock-1;
+   for (; i >= 3; i -= 4) {
+      quadrant[i] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i]) << 8);
+      ftab[j]++;
+      quadrant[i-1] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i-1]) << 8);
+      ftab[j]++;
+      quadrant[i-2] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i-2]) << 8);
+      ftab[j]++;
+      quadrant[i-3] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i-3]) << 8);
+      ftab[j]++;
+   }
+   for (; i >= 0; i--) {
+      quadrant[i] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i]) << 8);
+      ftab[j]++;
+   }
+
+   /*-- (emphasises close relationship of block & quadrant) --*/
+   for (i = 0; i < BZ_N_OVERSHOOT; i++) {
+      block   [nblock+i] = block[i];
+      quadrant[nblock+i] = 0;
+   }
+
+   if (verb >= 4) VPrintf0 ( "        bucket sorting ...\n" );
+
+   /*-- Complete the initial radix sort --*/
+   for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1];
+
+   s = block[0] << 8;
+   i = nblock-1;
+   for (; i >= 3; i -= 4) {
+      s = (s >> 8) | (block[i] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i;
+      s = (s >> 8) | (block[i-1] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i-1;
+      s = (s >> 8) | (block[i-2] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i-2;
+      s = (s >> 8) | (block[i-3] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i-3;
+   }
+   for (; i >= 0; i--) {
+      s = (s >> 8) | (block[i] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i;
+   }
+
+   /*--
+      Now ftab contains the first loc of every small bucket.
+      Calculate the running order, from smallest to largest
+      big bucket.
+   --*/
+   for (i = 0; i <= 255; i++) {
+      bigDone     [i] = False;
+      runningOrder[i] = i;
+   }
+
+   {
+      Int32 vv;
+      Int32 h = 1;
+      do h = 3 * h + 1; while (h <= 256);
+      do {
+         h = h / 3;
+         for (i = h; i <= 255; i++) {
+            vv = runningOrder[i];
+            j = i;
+            while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) {
+               runningOrder[j] = runningOrder[j-h];
+               j = j - h;
+               if (j <= (h - 1)) goto zero;
+            }
+            zero:
+            runningOrder[j] = vv;
+         }
+      } while (h != 1);
+   }
+
+   /*--
+      The main sorting loop.
+   --*/
+
+   numQSorted = 0;
+
+   for (i = 0; i <= 255; i++) {
+
+      /*--
+         Process big buckets, starting with the least full.
+         Basically this is a 3-step process in which we call
+         mainQSort3 to sort the small buckets [ss, j], but
+         also make a big effort to avoid the calls if we can.
+      --*/
+      ss = runningOrder[i];
+
+      /*--
+         Step 1:
+         Complete the big bucket [ss] by quicksorting
+         any unsorted small buckets [ss, j], for j != ss.  
+         Hopefully previous pointer-scanning phases have already
+         completed many of the small buckets [ss, j], so
+         we don't have to sort them at all.
+      --*/
+      for (j = 0; j <= 255; j++) {
+         if (j != ss) {
+            sb = (ss << 8) + j;
+            if ( ! (ftab[sb] & SETMASK) ) {
+               Int32 lo = ftab[sb]   & CLEARMASK;
+               Int32 hi = (ftab[sb+1] & CLEARMASK) - 1;
+               if (hi > lo) {
+                  if (verb >= 4)
+                     VPrintf4 ( "        qsort [0x%x, 0x%x]   "
+                                "done %d   this %d\n",
+                                ss, j, numQSorted, hi - lo + 1 );
+                  mainQSort3 ( 
+                     ptr, block, quadrant, nblock, 
+                     lo, hi, BZ_N_RADIX, budget 
+                  );   
+                  numQSorted += (hi - lo + 1);
+                  if (*budget < 0) return;
+               }
+            }
+            ftab[sb] |= SETMASK;
+         }
+      }
+
+      AssertH ( !bigDone[ss], 1006 );
+
+      /*--
+         Step 2:
+         Now scan this big bucket [ss] so as to synthesise the
+         sorted order for small buckets [t, ss] for all t,
+         including, magically, the bucket [ss,ss] too.
+         This will avoid doing Real Work in subsequent Step 1's.
+      --*/
+      {
+         for (j = 0; j <= 255; j++) {
+            copyStart[j] =  ftab[(j << 8) + ss]     & CLEARMASK;
+            copyEnd  [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1;
+         }
+         for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) {
+            k = ptr[j]-1; if (k < 0) k += nblock;
+            c1 = block[k];
+            if (!bigDone[c1])
+               ptr[ copyStart[c1]++ ] = k;
+         }
+         for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) {
+            k = ptr[j]-1; if (k < 0) k += nblock;
+            c1 = block[k];
+            if (!bigDone[c1]) 
+               ptr[ copyEnd[c1]-- ] = k;
+         }
+      }
+
+      AssertH ( (copyStart[ss]-1 == copyEnd[ss])
+                || 
+                /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1.
+                   Necessity for this case is demonstrated by compressing 
+                   a sequence of approximately 48.5 million of character 
+                   251; 1.0.0/1.0.1 will then die here. */
+                (copyStart[ss] == 0 && copyEnd[ss] == nblock-1),
+                1007 )
+
+      for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK;
+
+      /*--
+         Step 3:
+         The [ss] big bucket is now done.  Record this fact,
+         and update the quadrant descriptors.  Remember to
+         update quadrants in the overshoot area too, if
+         necessary.  The "if (i < 255)" test merely skips
+         this updating for the last bucket processed, since
+         updating for the last bucket is pointless.
+
+         The quadrant array provides a way to incrementally
+         cache sort orderings, as they appear, so as to 
+         make subsequent comparisons in fullGtU() complete
+         faster.  For repetitive blocks this makes a big
+         difference (but not big enough to be able to avoid
+         the fallback sorting mechanism, exponential radix sort).
+
+         The precise meaning is: at all times:
+
+            for 0 <= i < nblock and 0 <= j <= nblock
+
+            if block[i] != block[j], 
+
+               then the relative values of quadrant[i] and 
+                    quadrant[j] are meaningless.
+
+               else {
+                  if quadrant[i] < quadrant[j]
+                     then the string starting at i lexicographically
+                     precedes the string starting at j
+
+                  else if quadrant[i] > quadrant[j]
+                     then the string starting at j lexicographically
+                     precedes the string starting at i
+
+                  else
+                     the relative ordering of the strings starting
+                     at i and j has not yet been determined.
+               }
+      --*/
+      bigDone[ss] = True;
+
+      if (i < 255) {
+         Int32 bbStart  = ftab[ss << 8] & CLEARMASK;
+         Int32 bbSize   = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart;
+         Int32 shifts   = 0;
+
+         while ((bbSize >> shifts) > 65534) shifts++;
+
+         for (j = bbSize-1; j >= 0; j--) {
+            Int32 a2update     = ptr[bbStart + j];
+            UInt16 qVal        = (UInt16)(j >> shifts);
+            quadrant[a2update] = qVal;
+            if (a2update < BZ_N_OVERSHOOT)
+               quadrant[a2update + nblock] = qVal;
+         }
+         AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 );
+      }
+
+   }
+
+   if (verb >= 4)
+      VPrintf3 ( "        %d pointers, %d sorted, %d scanned\n",
+                 nblock, numQSorted, nblock - numQSorted );
+}
+
+#undef BIGFREQ
+#undef SETMASK
+#undef CLEARMASK
+
+
+/*---------------------------------------------*/
+/* Pre:
+      nblock > 0
+      arr2 exists for [0 .. nblock-1 +N_OVERSHOOT]
+      ((UChar*)arr2)  [0 .. nblock-1] holds block
+      arr1 exists for [0 .. nblock-1]
+
+   Post:
+      ((UChar*)arr2) [0 .. nblock-1] holds block
+      All other areas of block destroyed
+      ftab [ 0 .. 65536 ] destroyed
+      arr1 [0 .. nblock-1] holds sorted order
+*/
+void BZ2_blockSort ( EState* s )
+{
+   UInt32* ptr    = s->ptr; 
+   UChar*  block  = s->block;
+   UInt32* ftab   = s->ftab;
+   Int32   nblock = s->nblock;
+   Int32   verb   = s->verbosity;
+   Int32   wfact  = s->workFactor;
+   UInt16* quadrant;
+   Int32   budget;
+   Int32   budgetInit;
+   Int32   i;
+
+   if (nblock < 10000) {
+      fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
+   } else {
+      /* Calculate the location for quadrant, remembering to get
+         the alignment right.  Assumes that &(block[0]) is at least
+         2-byte aligned -- this should be ok since block is really
+         the first section of arr2.
+      */
+      i = nblock+BZ_N_OVERSHOOT;
+      if (i & 1) i++;
+      quadrant = (UInt16*)(&(block[i]));
+
+      /* (wfact-1) / 3 puts the default-factor-30
+         transition point at very roughly the same place as 
+         with v0.1 and v0.9.0.  
+         Not that it particularly matters any more, since the
+         resulting compressed stream is now the same regardless
+         of whether or not we use the main sort or fallback sort.
+      */
+      if (wfact < 1  ) wfact = 1;
+      if (wfact > 100) wfact = 100;
+      budgetInit = nblock * ((wfact-1) / 3);
+      budget = budgetInit;
+
+      mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget );
+      if (verb >= 3) 
+         VPrintf3 ( "      %d work, %d block, ratio %5.2f\n",
+                    budgetInit - budget,
+                    nblock, 
+                    (float)(budgetInit - budget) /
+                    (float)(nblock==0 ? 1 : nblock) ); 
+      if (budget < 0) {
+         if (verb >= 2) 
+            VPrintf0 ( "    too repetitive; using fallback"
+                       " sorting algorithm\n" );
+         fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
+      }
+   }
+
+   s->origPtr = -1;
+   for (i = 0; i < s->nblock; i++)
+      if (ptr[i] == 0)
+         { s->origPtr = i; break; };
+
+   AssertH( s->origPtr != -1, 1003 );
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                       blocksort.c ---*/
+/*-------------------------------------------------------------*/
Index: a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new/bzip2.c
===================================================================
--- a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new/bzip2.c	(nonexistent)
+++ a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new/bzip2.c	(revision 5)
@@ -0,0 +1,2036 @@
+
+/*-----------------------------------------------------------*/
+/*--- A block-sorting, lossless compressor        bzip2.c ---*/
+/*-----------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.8 of 13 July 2019
+   Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+
+/* Place a 1 beside your platform, and 0 elsewhere.
+   Generic 32-bit Unix.
+   Also works on 64-bit Unix boxes.
+   This is the default.
+*/
+#define BZ_UNIX      1
+
+/*--
+  Win32, as seen by Jacob Navia's excellent
+  port of (Chris Fraser & David Hanson)'s excellent
+  lcc compiler.  Or with MS Visual C.
+  This is selected automatically if compiled by a compiler which
+  defines _WIN32, not including the Cygwin GCC.
+--*/
+#define BZ_LCCWIN32  0
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#undef  BZ_LCCWIN32
+#define BZ_LCCWIN32 1
+#undef  BZ_UNIX
+#define BZ_UNIX 0
+#endif
+
+
+/*---------------------------------------------*/
+/*--
+  Some stuff for all platforms.
+--*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+#include <math.h>
+#include <errno.h>
+#include <ctype.h>
+#include "bzlib.h"
+
+#define ERROR_IF_EOF(i)       { if ((i) == EOF)  ioError(); }
+#define ERROR_IF_NOT_ZERO(i)  { if ((i) != 0)    ioError(); }
+#define ERROR_IF_MINUS_ONE(i) { if ((i) == (-1)) ioError(); }
+
+
+/*---------------------------------------------*/
+/*--
+   Platform-specific stuff.
+--*/
+
+#if BZ_UNIX
+#   include <fcntl.h>
+#   include <sys/types.h>
+#   include <utime.h>
+#   include <unistd.h>
+#   include <sys/stat.h>
+#   include <sys/times.h>
+
+#   define PATH_SEP    '/'
+#   define MY_LSTAT    lstat
+#   define MY_STAT     stat
+#   define MY_S_ISREG  S_ISREG
+#   define MY_S_ISDIR  S_ISDIR
+
+#   define APPEND_FILESPEC(root, name) \
+      root=snocString((root), (name))
+
+#   define APPEND_FLAG(root, name) \
+      root=snocString((root), (name))
+
+#   define SET_BINARY_MODE(fd) /**/
+
+#   ifdef __GNUC__
+#      define NORETURN __attribute__ ((noreturn))
+#   else
+#      define NORETURN /**/
+#   endif
+
+#   ifdef __DJGPP__
+#     include <io.h>
+#     include <fcntl.h>
+#     undef MY_LSTAT
+#     undef MY_STAT
+#     define MY_LSTAT stat
+#     define MY_STAT stat
+#     undef SET_BINARY_MODE
+#     define SET_BINARY_MODE(fd)                        \
+        do {                                            \
+           int retVal = setmode ( fileno ( fd ),        \
+                                  O_BINARY );           \
+           ERROR_IF_MINUS_ONE ( retVal );               \
+        } while ( 0 )
+#   endif
+
+#   ifdef __CYGWIN__
+#     include <io.h>
+#     include <fcntl.h>
+#     undef SET_BINARY_MODE
+#     define SET_BINARY_MODE(fd)                        \
+        do {                                            \
+           int retVal = setmode ( fileno ( fd ),        \
+                                  O_BINARY );           \
+           ERROR_IF_MINUS_ONE ( retVal );               \
+        } while ( 0 )
+#   endif
+#endif /* BZ_UNIX */
+
+
+
+#if BZ_LCCWIN32
+#   include <io.h>
+#   include <fcntl.h>
+#   include <sys/stat.h>
+
+#   define NORETURN       /**/
+#   define PATH_SEP       '\\'
+#   define MY_LSTAT       _stati64
+#   define MY_STAT        _stati64
+#   define MY_S_ISREG(x)  ((x) & _S_IFREG)
+#   define MY_S_ISDIR(x)  ((x) & _S_IFDIR)
+
+#   define APPEND_FLAG(root, name) \
+      root=snocString((root), (name))
+
+#   define APPEND_FILESPEC(root, name)                \
+      root = snocString ((root), (name))
+
+#   define SET_BINARY_MODE(fd)                        \
+      do {                                            \
+         int retVal = setmode ( fileno ( fd ),        \
+                                O_BINARY );           \
+         ERROR_IF_MINUS_ONE ( retVal );               \
+      } while ( 0 )
+
+#endif /* BZ_LCCWIN32 */
+
+
+/*---------------------------------------------*/
+/*--
+  Some more stuff for all platforms :-)
+--*/
+
+typedef char            Char;
+typedef unsigned char   Bool;
+typedef unsigned char   UChar;
+typedef int             Int32;
+typedef unsigned int    UInt32;
+typedef short           Int16;
+typedef unsigned short  UInt16;
+                                       
+#define True  ((Bool)1)
+#define False ((Bool)0)
+
+/*--
+  IntNative is your platform's `native' int size.
+  Only here to avoid probs with 64-bit platforms.
+--*/
+typedef int IntNative;
+
+
+/*---------------------------------------------------*/
+/*--- Misc (file handling) data decls             ---*/
+/*---------------------------------------------------*/
+
+Int32   verbosity;
+Bool    keepInputFiles, smallMode, deleteOutputOnInterrupt;
+Bool    forceOverwrite, testFailsExist, unzFailsExist, noisy;
+Int32   numFileNames, numFilesProcessed, blockSize100k;
+Int32   exitValue;
+
+/*-- source modes; F==file, I==stdin, O==stdout --*/
+#define SM_I2O           1
+#define SM_F2O           2
+#define SM_F2F           3
+
+/*-- operation modes --*/
+#define OM_Z             1
+#define OM_UNZ           2
+#define OM_TEST          3
+
+Int32   opMode;
+Int32   srcMode;
+
+#define FILE_NAME_LEN 1034
+
+Int32   longestFileName;
+Char    inName [FILE_NAME_LEN];
+Char    outName[FILE_NAME_LEN];
+Char    tmpName[FILE_NAME_LEN];
+Char    *progName;
+Char    progNameReally[FILE_NAME_LEN];
+FILE    *outputHandleJustInCase;
+Int32   workFactor;
+
+static void    panic                 ( const Char* ) NORETURN;
+static void    ioError               ( void )        NORETURN;
+static void    outOfMemory           ( void )        NORETURN;
+static void    configError           ( void )        NORETURN;
+static void    crcError              ( void )        NORETURN;
+static void    cleanUpAndFail        ( Int32 )       NORETURN;
+static void    compressedStreamEOF   ( void )        NORETURN;
+
+static void    copyFileName ( Char*, Char* );
+static void*   myMalloc     ( Int32 );
+static void    applySavedFileAttrToOutputFile ( IntNative fd );
+
+
+
+/*---------------------------------------------------*/
+/*--- An implementation of 64-bit ints.  Sigh.    ---*/
+/*--- Roll on widespread deployment of ANSI C9X ! ---*/
+/*---------------------------------------------------*/
+
+typedef
+   struct { UChar b[8]; } 
+   UInt64;
+
+
+static
+void uInt64_from_UInt32s ( UInt64* n, UInt32 lo32, UInt32 hi32 )
+{
+   n->b[7] = (UChar)((hi32 >> 24) & 0xFF);
+   n->b[6] = (UChar)((hi32 >> 16) & 0xFF);
+   n->b[5] = (UChar)((hi32 >> 8)  & 0xFF);
+   n->b[4] = (UChar) (hi32        & 0xFF);
+   n->b[3] = (UChar)((lo32 >> 24) & 0xFF);
+   n->b[2] = (UChar)((lo32 >> 16) & 0xFF);
+   n->b[1] = (UChar)((lo32 >> 8)  & 0xFF);
+   n->b[0] = (UChar) (lo32        & 0xFF);
+}
+
+
+static
+double uInt64_to_double ( UInt64* n )
+{
+   Int32  i;
+   double base = 1.0;
+   double sum  = 0.0;
+   for (i = 0; i < 8; i++) {
+      sum  += base * (double)(n->b[i]);
+      base *= 256.0;
+   }
+   return sum;
+}
+
+
+static
+Bool uInt64_isZero ( UInt64* n )
+{
+   Int32 i;
+   for (i = 0; i < 8; i++)
+      if (n->b[i] != 0) return 0;
+   return 1;
+}
+
+
+/* Divide *n by 10, and return the remainder.  */
+static 
+Int32 uInt64_qrm10 ( UInt64* n )
+{
+   UInt32 rem, tmp;
+   Int32  i;
+   rem = 0;
+   for (i = 7; i >= 0; i--) {
+      tmp = rem * 256 + n->b[i];
+      n->b[i] = tmp / 10;
+      rem = tmp % 10;
+   }
+   return rem;
+}
+
+
+/* ... and the Whole Entire Point of all this UInt64 stuff is
+   so that we can supply the following function.
+*/
+static
+void uInt64_toAscii ( char* outbuf, UInt64* n )
+{
+   Int32  i, q;
+   UChar  buf[32];
+   Int32  nBuf   = 0;
+   UInt64 n_copy = *n;
+   do {
+      q = uInt64_qrm10 ( &n_copy );
+      buf[nBuf] = q + '0';
+      nBuf++;
+   } while (!uInt64_isZero(&n_copy));
+   outbuf[nBuf] = 0;
+   for (i = 0; i < nBuf; i++) 
+      outbuf[i] = buf[nBuf-i-1];
+}
+
+
+/*---------------------------------------------------*/
+/*--- Processing of complete files and streams    ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------*/
+static 
+Bool myfeof ( FILE* f )
+{
+   Int32 c = fgetc ( f );
+   if (c == EOF) return True;
+   ungetc ( c, f );
+   return False;
+}
+
+
+/*---------------------------------------------*/
+static 
+void compressStream ( FILE *stream, FILE *zStream )
+{
+   BZFILE* bzf = NULL;
+   UChar   ibuf[5000];
+   Int32   nIbuf;
+   UInt32  nbytes_in_lo32, nbytes_in_hi32;
+   UInt32  nbytes_out_lo32, nbytes_out_hi32;
+   Int32   bzerr, bzerr_dummy, ret;
+
+   SET_BINARY_MODE(stream);
+   SET_BINARY_MODE(zStream);
+
+   if (ferror(stream)) goto errhandler_io;
+   if (ferror(zStream)) goto errhandler_io;
+
+   bzf = BZ2_bzWriteOpen ( &bzerr, zStream, 
+                           blockSize100k, verbosity, workFactor );   
+   if (bzerr != BZ_OK) goto errhandler;
+
+   if (verbosity >= 2) fprintf ( stderr, "\n" );
+
+   while (True) {
+
+      if (myfeof(stream)) break;
+      nIbuf = fread ( ibuf, sizeof(UChar), 5000, stream );
+      if (ferror(stream)) goto errhandler_io;
+      if (nIbuf > 0) BZ2_bzWrite ( &bzerr, bzf, (void*)ibuf, nIbuf );
+      if (bzerr != BZ_OK) goto errhandler;
+
+   }
+
+   BZ2_bzWriteClose64 ( &bzerr, bzf, 0, 
+                        &nbytes_in_lo32, &nbytes_in_hi32,
+                        &nbytes_out_lo32, &nbytes_out_hi32 );
+   if (bzerr != BZ_OK) goto errhandler;
+
+   if (ferror(zStream)) goto errhandler_io;
+   ret = fflush ( zStream );
+   if (ret == EOF) goto errhandler_io;
+   if (zStream != stdout) {
+      Int32 fd = fileno ( zStream );
+      if (fd < 0) goto errhandler_io;
+      applySavedFileAttrToOutputFile ( fd );
+      ret = fclose ( zStream );
+      outputHandleJustInCase = NULL;
+      if (ret == EOF) goto errhandler_io;
+   }
+   outputHandleJustInCase = NULL;
+   if (ferror(stream)) goto errhandler_io;
+   ret = fclose ( stream );
+   if (ret == EOF) goto errhandler_io;
+
+   if (verbosity >= 1) {
+      if (nbytes_in_lo32 == 0 && nbytes_in_hi32 == 0) {
+	 fprintf ( stderr, " no data compressed.\n");
+      } else {
+	 Char   buf_nin[32], buf_nout[32];
+	 UInt64 nbytes_in,   nbytes_out;
+	 double nbytes_in_d, nbytes_out_d;
+	 uInt64_from_UInt32s ( &nbytes_in, 
+			       nbytes_in_lo32, nbytes_in_hi32 );
+	 uInt64_from_UInt32s ( &nbytes_out, 
+			       nbytes_out_lo32, nbytes_out_hi32 );
+	 nbytes_in_d  = uInt64_to_double ( &nbytes_in );
+	 nbytes_out_d = uInt64_to_double ( &nbytes_out );
+	 uInt64_toAscii ( buf_nin, &nbytes_in );
+	 uInt64_toAscii ( buf_nout, &nbytes_out );
+	 fprintf ( stderr, "%6.3f:1, %6.3f bits/byte, "
+		   "%5.2f%% saved, %s in, %s out.\n",
+		   nbytes_in_d / nbytes_out_d,
+		   (8.0 * nbytes_out_d) / nbytes_in_d,
+		   100.0 * (1.0 - nbytes_out_d / nbytes_in_d),
+		   buf_nin,
+		   buf_nout
+		 );
+      }
+   }
+
+   return;
+
+   errhandler:
+   BZ2_bzWriteClose64 ( &bzerr_dummy, bzf, 1, 
+                        &nbytes_in_lo32, &nbytes_in_hi32,
+                        &nbytes_out_lo32, &nbytes_out_hi32 );
+   switch (bzerr) {
+      case BZ_CONFIG_ERROR:
+         configError(); break;
+      case BZ_MEM_ERROR:
+         outOfMemory (); break;
+      case BZ_IO_ERROR:
+         errhandler_io:
+         ioError(); break;
+      default:
+         panic ( "compress:unexpected error" );
+   }
+
+   panic ( "compress:end" );
+   /*notreached*/
+}
+
+
+
+/*---------------------------------------------*/
+static 
+Bool uncompressStream ( FILE *zStream, FILE *stream )
+{
+   BZFILE* bzf = NULL;
+   Int32   bzerr, bzerr_dummy, ret, nread, streamNo, i;
+   UChar   obuf[5000];
+   UChar   unused[BZ_MAX_UNUSED];
+   Int32   nUnused;
+   void*   unusedTmpV;
+   UChar*  unusedTmp;
+
+   nUnused = 0;
+   streamNo = 0;
+
+   SET_BINARY_MODE(stream);
+   SET_BINARY_MODE(zStream);
+
+   if (ferror(stream)) goto errhandler_io;
+   if (ferror(zStream)) goto errhandler_io;
+
+   while (True) {
+
+      bzf = BZ2_bzReadOpen ( 
+               &bzerr, zStream, verbosity, 
+               (int)smallMode, unused, nUnused
+            );
+      if (bzf == NULL || bzerr != BZ_OK) goto errhandler;
+      streamNo++;
+
+      while (bzerr == BZ_OK) {
+         nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );
+         if (bzerr == BZ_DATA_ERROR_MAGIC) goto trycat;
+         if ((bzerr == BZ_OK || bzerr == BZ_STREAM_END) && nread > 0)
+            fwrite ( obuf, sizeof(UChar), nread, stream );
+         if (ferror(stream)) goto errhandler_io;
+      }
+      if (bzerr != BZ_STREAM_END) goto errhandler;
+
+      BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );
+      if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
+
+      unusedTmp = (UChar*)unusedTmpV;
+      for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];
+
+      BZ2_bzReadClose ( &bzerr, bzf );
+      if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
+
+      if (nUnused == 0 && myfeof(zStream)) break;
+   }
+
+   closeok:
+   if (ferror(zStream)) goto errhandler_io;
+   if (stream != stdout) {
+      Int32 fd = fileno ( stream );
+      if (fd < 0) goto errhandler_io;
+      applySavedFileAttrToOutputFile ( fd );
+   }
+   ret = fclose ( zStream );
+   if (ret == EOF) goto errhandler_io;
+
+   if (ferror(stream)) goto errhandler_io;
+   ret = fflush ( stream );
+   if (ret != 0) goto errhandler_io;
+   if (stream != stdout) {
+      ret = fclose ( stream );
+      outputHandleJustInCase = NULL;
+      if (ret == EOF) goto errhandler_io;
+   }
+   outputHandleJustInCase = NULL;
+   if (verbosity >= 2) fprintf ( stderr, "\n    " );
+   return True;
+
+   trycat: 
+   if (forceOverwrite) {
+      rewind(zStream);
+      while (True) {
+      	 if (myfeof(zStream)) break;
+      	 nread = fread ( obuf, sizeof(UChar), 5000, zStream );
+      	 if (ferror(zStream)) goto errhandler_io;
+      	 if (nread > 0) fwrite ( obuf, sizeof(UChar), nread, stream );
+      	 if (ferror(stream)) goto errhandler_io;
+      }
+      goto closeok;
+   }
+  
+   errhandler:
+   BZ2_bzReadClose ( &bzerr_dummy, bzf );
+   switch (bzerr) {
+      case BZ_CONFIG_ERROR:
+         configError(); break;
+      case BZ_IO_ERROR:
+         errhandler_io:
+         ioError(); break;
+      case BZ_DATA_ERROR:
+         crcError();
+      case BZ_MEM_ERROR:
+         outOfMemory();
+      case BZ_UNEXPECTED_EOF:
+         compressedStreamEOF();
+      case BZ_DATA_ERROR_MAGIC:
+         if (zStream != stdin) fclose(zStream);
+         if (stream != stdout) fclose(stream);
+         if (streamNo == 1) {
+            return False;
+         } else {
+            if (noisy)
+            fprintf ( stderr, 
+                      "\n%s: %s: trailing garbage after EOF ignored\n",
+                      progName, inName );
+            return True;       
+         }
+      default:
+         panic ( "decompress:unexpected error" );
+   }
+
+   panic ( "decompress:end" );
+   return True; /*notreached*/
+}
+
+
+/*---------------------------------------------*/
+static 
+Bool testStream ( FILE *zStream )
+{
+   BZFILE* bzf = NULL;
+   Int32   bzerr, bzerr_dummy, ret, streamNo, i;
+   UChar   obuf[5000];
+   UChar   unused[BZ_MAX_UNUSED];
+   Int32   nUnused;
+   void*   unusedTmpV;
+   UChar*  unusedTmp;
+
+   nUnused = 0;
+   streamNo = 0;
+
+   SET_BINARY_MODE(zStream);
+   if (ferror(zStream)) goto errhandler_io;
+
+   while (True) {
+
+      bzf = BZ2_bzReadOpen ( 
+               &bzerr, zStream, verbosity, 
+               (int)smallMode, unused, nUnused
+            );
+      if (bzf == NULL || bzerr != BZ_OK) goto errhandler;
+      streamNo++;
+
+      while (bzerr == BZ_OK) {
+         (void)BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );
+         if (bzerr == BZ_DATA_ERROR_MAGIC) goto errhandler;
+      }
+      if (bzerr != BZ_STREAM_END) goto errhandler;
+
+      BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );
+      if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );
+
+      unusedTmp = (UChar*)unusedTmpV;
+      for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];
+
+      BZ2_bzReadClose ( &bzerr, bzf );
+      if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );
+      if (nUnused == 0 && myfeof(zStream)) break;
+
+   }
+
+   if (ferror(zStream)) goto errhandler_io;
+   ret = fclose ( zStream );
+   if (ret == EOF) goto errhandler_io;
+
+   if (verbosity >= 2) fprintf ( stderr, "\n    " );
+   return True;
+
+   errhandler:
+   BZ2_bzReadClose ( &bzerr_dummy, bzf );
+   if (verbosity == 0) 
+      fprintf ( stderr, "%s: %s: ", progName, inName );
+   switch (bzerr) {
+      case BZ_CONFIG_ERROR:
+         configError(); break;
+      case BZ_IO_ERROR:
+         errhandler_io:
+         ioError(); break;
+      case BZ_DATA_ERROR:
+         fprintf ( stderr,
+                   "data integrity (CRC) error in data\n" );
+         return False;
+      case BZ_MEM_ERROR:
+         outOfMemory();
+      case BZ_UNEXPECTED_EOF:
+         fprintf ( stderr,
+                   "file ends unexpectedly\n" );
+         return False;
+      case BZ_DATA_ERROR_MAGIC:
+         if (zStream != stdin) fclose(zStream);
+         if (streamNo == 1) {
+          fprintf ( stderr, 
+                    "bad magic number (file not created by bzip2)\n" );
+            return False;
+         } else {
+            if (noisy)
+            fprintf ( stderr, 
+                      "trailing garbage after EOF ignored\n" );
+            return True;       
+         }
+      default:
+         panic ( "test:unexpected error" );
+   }
+
+   panic ( "test:end" );
+   return True; /*notreached*/
+}
+
+
+/*---------------------------------------------------*/
+/*--- Error [non-] handling grunge                ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+void setExit ( Int32 v )
+{
+   if (v > exitValue) exitValue = v;
+}
+
+
+/*---------------------------------------------*/
+static 
+void cadvise ( void )
+{
+   if (noisy)
+   fprintf (
+      stderr,
+      "\nIt is possible that the compressed file(s) have become corrupted.\n"
+        "You can use the -tvv option to test integrity of such files.\n\n"
+        "You can use the `bzip2recover' program to attempt to recover\n"
+        "data from undamaged sections of corrupted files.\n\n"
+    );
+}
+
+
+/*---------------------------------------------*/
+static 
+void showFileNames ( void )
+{
+   if (noisy)
+   fprintf (
+      stderr,
+      "\tInput file = %s, output file = %s\n",
+      inName, outName 
+   );
+}
+
+
+/*---------------------------------------------*/
+static 
+void cleanUpAndFail ( Int32 ec )
+{
+   IntNative      retVal;
+   struct MY_STAT statBuf;
+
+   if ( srcMode == SM_F2F 
+        && opMode != OM_TEST
+        && deleteOutputOnInterrupt ) {
+
+      /* Check whether input file still exists.  Delete output file
+         only if input exists to avoid loss of data.  Joerg Prante, 5
+         January 2002.  (JRS 06-Jan-2002: other changes in 1.0.2 mean
+         this is less likely to happen.  But to be ultra-paranoid, we
+         do the check anyway.)  */
+      retVal = MY_STAT ( inName, &statBuf );
+      if (retVal == 0) {
+         if (noisy)
+            fprintf ( stderr, 
+                      "%s: Deleting output file %s, if it exists.\n",
+                      progName, outName );
+         if (outputHandleJustInCase != NULL)
+            fclose ( outputHandleJustInCase );
+         retVal = remove ( outName );
+         if (retVal != 0)
+            fprintf ( stderr,
+                      "%s: WARNING: deletion of output file "
+                      "(apparently) failed.\n",
+                      progName );
+      } else {
+         fprintf ( stderr,
+                   "%s: WARNING: deletion of output file suppressed\n",
+                    progName );
+         fprintf ( stderr,
+                   "%s:    since input file no longer exists.  Output file\n",
+                   progName );
+         fprintf ( stderr,
+                   "%s:    `%s' may be incomplete.\n",
+                   progName, outName );
+         fprintf ( stderr, 
+                   "%s:    I suggest doing an integrity test (bzip2 -tv)"
+                   " of it.\n",
+                   progName );
+      }
+   }
+
+   if (noisy && numFileNames > 0 && numFilesProcessed < numFileNames) {
+      fprintf ( stderr, 
+                "%s: WARNING: some files have not been processed:\n"
+                "%s:    %d specified on command line, %d not processed yet.\n\n",
+                progName, progName,
+                numFileNames, numFileNames - numFilesProcessed );
+   }
+   setExit(ec);
+   exit(exitValue);
+}
+
+
+/*---------------------------------------------*/
+static 
+void panic ( const Char* s )
+{
+   fprintf ( stderr,
+             "\n%s: PANIC -- internal consistency error:\n"
+             "\t%s\n"
+             "\tThis is a BUG.  Please report it to:\n"
+             "\tbzip2-devel@sourceware.org\n",
+             progName, s );
+   showFileNames();
+   cleanUpAndFail( 3 );
+}
+
+
+/*---------------------------------------------*/
+static 
+void crcError ( void )
+{
+   fprintf ( stderr,
+             "\n%s: Data integrity error when decompressing.\n",
+             progName );
+   showFileNames();
+   cadvise();
+   cleanUpAndFail( 2 );
+}
+
+
+/*---------------------------------------------*/
+static 
+void compressedStreamEOF ( void )
+{
+  if (noisy) {
+    fprintf ( stderr,
+	      "\n%s: Compressed file ends unexpectedly;\n\t"
+	      "perhaps it is corrupted?  *Possible* reason follows.\n",
+	      progName );
+    perror ( progName );
+    showFileNames();
+    cadvise();
+  }
+  cleanUpAndFail( 2 );
+}
+
+
+/*---------------------------------------------*/
+static 
+void ioError ( void )
+{
+   fprintf ( stderr,
+             "\n%s: I/O or other error, bailing out.  "
+             "Possible reason follows.\n",
+             progName );
+   perror ( progName );
+   showFileNames();
+   cleanUpAndFail( 1 );
+}
+
+
+/*---------------------------------------------*/
+static 
+void mySignalCatcher ( IntNative n )
+{
+   fprintf ( stderr,
+             "\n%s: Control-C or similar caught, quitting.\n",
+             progName );
+   cleanUpAndFail(1);
+}
+
+
+/*---------------------------------------------*/
+static 
+void mySIGSEGVorSIGBUScatcher ( IntNative n )
+{
+   if (opMode == OM_Z)
+      fprintf ( 
+      stderr,
+      "\n%s: Caught a SIGSEGV or SIGBUS whilst compressing.\n"
+      "\n"
+      "   Possible causes are (most likely first):\n"
+      "   (1) This computer has unreliable memory or cache hardware\n"
+      "       (a surprisingly common problem; try a different machine.)\n"
+      "   (2) A bug in the compiler used to create this executable\n"
+      "       (unlikely, if you didn't compile bzip2 yourself.)\n"
+      "   (3) A real bug in bzip2 -- I hope this should never be the case.\n"
+      "   The user's manual, Section 4.3, has more info on (1) and (2).\n"
+      "   \n"
+      "   If you suspect this is a bug in bzip2, or are unsure about (1)\n"
+      "   or (2), feel free to report it to: bzip2-devel@sourceware.org.\n"
+      "   Section 4.3 of the user's manual describes the info a useful\n"
+      "   bug report should have.  If the manual is available on your\n"
+      "   system, please try and read it before mailing me.  If you don't\n"
+      "   have the manual or can't be bothered to read it, mail me anyway.\n"
+      "\n",
+      progName );
+      else
+      fprintf ( 
+      stderr,
+      "\n%s: Caught a SIGSEGV or SIGBUS whilst decompressing.\n"
+      "\n"
+      "   Possible causes are (most likely first):\n"
+      "   (1) The compressed data is corrupted, and bzip2's usual checks\n"
+      "       failed to detect this.  Try bzip2 -tvv my_file.bz2.\n"
+      "   (2) This computer has unreliable memory or cache hardware\n"
+      "       (a surprisingly common problem; try a different machine.)\n"
+      "   (3) A bug in the compiler used to create this executable\n"
+      "       (unlikely, if you didn't compile bzip2 yourself.)\n"
+      "   (4) A real bug in bzip2 -- I hope this should never be the case.\n"
+      "   The user's manual, Section 4.3, has more info on (2) and (3).\n"
+      "   \n"
+      "   If you suspect this is a bug in bzip2, or are unsure about (2)\n"
+      "   or (3), feel free to report it to: bzip2-devel@sourceware.org.\n"
+      "   Section 4.3 of the user's manual describes the info a useful\n"
+      "   bug report should have.  If the manual is available on your\n"
+      "   system, please try and read it before mailing me.  If you don't\n"
+      "   have the manual or can't be bothered to read it, mail me anyway.\n"
+      "\n",
+      progName );
+
+   showFileNames();
+   if (opMode == OM_Z)
+      cleanUpAndFail( 3 ); else
+      { cadvise(); cleanUpAndFail( 2 ); }
+}
+
+
+/*---------------------------------------------*/
+static 
+void outOfMemory ( void )
+{
+   fprintf ( stderr,
+             "\n%s: couldn't allocate enough memory\n",
+             progName );
+   showFileNames();
+   cleanUpAndFail(1);
+}
+
+
+/*---------------------------------------------*/
+static 
+void configError ( void )
+{
+   fprintf ( stderr,
+             "bzip2: I'm not configured correctly for this platform!\n"
+             "\tI require Int32, Int16 and Char to have sizes\n"
+             "\tof 4, 2 and 1 bytes to run properly, and they don't.\n"
+             "\tProbably you can fix this by defining them correctly,\n"
+             "\tand recompiling.  Bye!\n" );
+   setExit(3);
+   exit(exitValue);
+}
+
+
+/*---------------------------------------------------*/
+/*--- The main driver machinery                   ---*/
+/*---------------------------------------------------*/
+
+/* All rather crufty.  The main problem is that input files
+   are stat()d multiple times before use.  This should be
+   cleaned up. 
+*/
+
+/*---------------------------------------------*/
+static 
+void pad ( Char *s )
+{
+   Int32 i;
+   if ( (Int32)strlen(s) >= longestFileName ) return;
+   for (i = 1; i <= longestFileName - (Int32)strlen(s); i++)
+      fprintf ( stderr, " " );
+}
+
+
+/*---------------------------------------------*/
+static 
+void copyFileName ( Char* to, Char* from ) 
+{
+   if ( strlen(from) > FILE_NAME_LEN-10 )  {
+      fprintf (
+         stderr,
+         "bzip2: file name\n`%s'\n"
+         "is suspiciously (more than %d chars) long.\n"
+         "Try using a reasonable file name instead.  Sorry! :-)\n",
+         from, FILE_NAME_LEN-10
+      );
+      setExit(1);
+      exit(exitValue);
+   }
+
+  strncpy(to,from,FILE_NAME_LEN-10);
+  to[FILE_NAME_LEN-10]='\0';
+}
+
+
+/*---------------------------------------------*/
+static 
+Bool fileExists ( Char* name )
+{
+   FILE *tmp   = fopen ( name, "rb" );
+   Bool exists = (tmp != NULL);
+   if (tmp != NULL) fclose ( tmp );
+   return exists;
+}
+
+
+/*---------------------------------------------*/
+/* Open an output file safely with O_EXCL and good permissions.
+   This avoids a race condition in versions < 1.0.2, in which
+   the file was first opened and then had its interim permissions
+   set safely.  We instead use open() to create the file with
+   the interim permissions required. (--- --- rw-).
+
+   For non-Unix platforms, if we are not worrying about
+   security issues, simple this simply behaves like fopen.
+*/
+static
+FILE* fopen_output_safely ( Char* name, const char* mode )
+{
+#  if BZ_UNIX
+   FILE*     fp;
+   IntNative fh;
+   fh = open(name, O_WRONLY|O_CREAT|O_EXCL, S_IWUSR|S_IRUSR);
+   if (fh == -1) return NULL;
+   fp = fdopen(fh, mode);
+   if (fp == NULL) close(fh);
+   return fp;
+#  else
+   return fopen(name, mode);
+#  endif
+}
+
+
+/*---------------------------------------------*/
+/*--
+  if in doubt, return True
+--*/
+static 
+Bool notAStandardFile ( Char* name )
+{
+   IntNative      i;
+   struct MY_STAT statBuf;
+
+   i = MY_LSTAT ( name, &statBuf );
+   if (i != 0) return True;
+   if (MY_S_ISREG(statBuf.st_mode)) return False;
+   return True;
+}
+
+
+/*---------------------------------------------*/
+/*--
+  rac 11/21/98 see if file has hard links to it
+--*/
+static 
+Int32 countHardLinks ( Char* name )
+{  
+   IntNative      i;
+   struct MY_STAT statBuf;
+
+   i = MY_LSTAT ( name, &statBuf );
+   if (i != 0) return 0;
+   return (statBuf.st_nlink - 1);
+}
+
+
+/*---------------------------------------------*/
+/* Copy modification date, access date, permissions and owner from the
+   source to destination file.  We have to copy this meta-info off
+   into fileMetaInfo before starting to compress / decompress it,
+   because doing it afterwards means we get the wrong access time.
+
+   To complicate matters, in compress() and decompress() below, the
+   sequence of tests preceding the call to saveInputFileMetaInfo()
+   involves calling fileExists(), which in turn establishes its result
+   by attempting to fopen() the file, and if successful, immediately
+   fclose()ing it again.  So we have to assume that the fopen() call
+   does not cause the access time field to be updated.
+
+   Reading of the man page for stat() (man 2 stat) on RedHat 7.2 seems
+   to imply that merely doing open() will not affect the access time.
+   Therefore we merely need to hope that the C library only does
+   open() as a result of fopen(), and not any kind of read()-ahead
+   cleverness.
+
+   It sounds pretty fragile to me.  Whether this carries across
+   robustly to arbitrary Unix-like platforms (or even works robustly
+   on this one, RedHat 7.2) is unknown to me.  Nevertheless ...  
+*/
+#if BZ_UNIX
+static 
+struct MY_STAT fileMetaInfo;
+#endif
+
+static 
+void saveInputFileMetaInfo ( Char *srcName )
+{
+#  if BZ_UNIX
+   IntNative retVal;
+   /* Note use of stat here, not lstat. */
+   retVal = MY_STAT( srcName, &fileMetaInfo );
+   ERROR_IF_NOT_ZERO ( retVal );
+#  endif
+}
+
+
+static 
+void applySavedTimeInfoToOutputFile ( Char *dstName )
+{
+#  if BZ_UNIX
+   IntNative      retVal;
+   struct utimbuf uTimBuf;
+
+   uTimBuf.actime = fileMetaInfo.st_atime;
+   uTimBuf.modtime = fileMetaInfo.st_mtime;
+
+   retVal = utime ( dstName, &uTimBuf );
+   ERROR_IF_NOT_ZERO ( retVal );
+#  endif
+}
+
+static 
+void applySavedFileAttrToOutputFile ( IntNative fd )
+{
+#  if BZ_UNIX
+   IntNative retVal;
+
+   retVal = fchmod ( fd, fileMetaInfo.st_mode );
+   ERROR_IF_NOT_ZERO ( retVal );
+
+   (void) fchown ( fd, fileMetaInfo.st_uid, fileMetaInfo.st_gid );
+   /* chown() will in many cases return with EPERM, which can
+      be safely ignored.
+   */
+#  endif
+}
+
+
+/*---------------------------------------------*/
+static 
+Bool containsDubiousChars ( Char* name )
+{
+#  if BZ_UNIX
+   /* On unix, files can contain any characters and the file expansion
+    * is performed by the shell.
+    */
+   return False;
+#  else /* ! BZ_UNIX */
+   /* On non-unix (Win* platforms), wildcard characters are not allowed in 
+    * filenames.
+    */
+   for (; *name != '\0'; name++)
+      if (*name == '?' || *name == '*') return True;
+   return False;
+#  endif /* BZ_UNIX */
+}
+
+
+/*---------------------------------------------*/
+#define BZ_N_SUFFIX_PAIRS 4
+
+const Char* zSuffix[BZ_N_SUFFIX_PAIRS] 
+   = { ".bz2", ".bz", ".tbz2", ".tbz" };
+const Char* unzSuffix[BZ_N_SUFFIX_PAIRS] 
+   = { "", "", ".tar", ".tar" };
+
+static 
+Bool hasSuffix ( Char* s, const Char* suffix )
+{
+   Int32 ns = strlen(s);
+   Int32 nx = strlen(suffix);
+   if (ns < nx) return False;
+   if (strcmp(s + ns - nx, suffix) == 0) return True;
+   return False;
+}
+
+static 
+Bool mapSuffix ( Char* name, 
+                 const Char* oldSuffix, 
+                 const Char* newSuffix )
+{
+   if (!hasSuffix(name,oldSuffix)) return False;
+   name[strlen(name)-strlen(oldSuffix)] = 0;
+   strcat ( name, newSuffix );
+   return True;
+}
+
+
+/*---------------------------------------------*/
+static 
+void compress ( Char *name )
+{
+   FILE  *inStr;
+   FILE  *outStr;
+   Int32 n, i;
+   struct MY_STAT statBuf;
+
+   deleteOutputOnInterrupt = False;
+
+   if (name == NULL && srcMode != SM_I2O)
+      panic ( "compress: bad modes\n" );
+
+   switch (srcMode) {
+      case SM_I2O: 
+         copyFileName ( inName, (Char*)"(stdin)" );
+         copyFileName ( outName, (Char*)"(stdout)" ); 
+         break;
+      case SM_F2F: 
+         copyFileName ( inName, name );
+         copyFileName ( outName, name );
+         strcat ( outName, ".bz2" ); 
+         break;
+      case SM_F2O: 
+         copyFileName ( inName, name );
+         copyFileName ( outName, (Char*)"(stdout)" ); 
+         break;
+   }
+
+   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
+      if (noisy)
+      fprintf ( stderr, "%s: There are no files matching `%s'.\n",
+                progName, inName );
+      setExit(1);
+      return;
+   }
+   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
+      fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+                progName, inName, strerror(errno) );
+      setExit(1);
+      return;
+   }
+   for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++) {
+      if (hasSuffix(inName, zSuffix[i])) {
+         if (noisy)
+         fprintf ( stderr, 
+                   "%s: Input file %s already has %s suffix.\n",
+                   progName, inName, zSuffix[i] );
+         setExit(1);
+         return;
+      }
+   }
+   if ( srcMode == SM_F2F || srcMode == SM_F2O ) {
+      MY_STAT(inName, &statBuf);
+      if ( MY_S_ISDIR(statBuf.st_mode) ) {
+         fprintf( stderr,
+                  "%s: Input file %s is a directory.\n",
+                  progName,inName);
+         setExit(1);
+         return;
+      }
+   }
+   if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
+      if (noisy)
+      fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
+                progName, inName );
+      setExit(1);
+      return;
+   }
+   if ( srcMode == SM_F2F && fileExists ( outName ) ) {
+      if (forceOverwrite) {
+	 remove(outName);
+      } else {
+	 fprintf ( stderr, "%s: Output file %s already exists.\n",
+		   progName, outName );
+	 setExit(1);
+	 return;
+      }
+   }
+   if ( srcMode == SM_F2F && !forceOverwrite &&
+        (n=countHardLinks ( inName )) > 0) {
+      fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",
+                progName, inName, n, n > 1 ? "s" : "" );
+      setExit(1);
+      return;
+   }
+
+   if ( srcMode == SM_F2F ) {
+      /* Save the file's meta-info before we open it.  Doing it later
+         means we mess up the access times. */
+      saveInputFileMetaInfo ( inName );
+   }
+
+   switch ( srcMode ) {
+
+      case SM_I2O:
+         inStr = stdin;
+         outStr = stdout;
+         if ( isatty ( fileno ( stdout ) ) ) {
+            fprintf ( stderr,
+                      "%s: I won't write compressed data to a terminal.\n",
+                      progName );
+            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+                              progName, progName );
+            setExit(1);
+            return;
+         };
+         break;
+
+      case SM_F2O:
+         inStr = fopen ( inName, "rb" );
+         outStr = stdout;
+         if ( isatty ( fileno ( stdout ) ) ) {
+            fprintf ( stderr,
+                      "%s: I won't write compressed data to a terminal.\n",
+                      progName );
+            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+                              progName, progName );
+            if ( inStr != NULL ) fclose ( inStr );
+            setExit(1);
+            return;
+         };
+         if ( inStr == NULL ) {
+            fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+                      progName, inName, strerror(errno) );
+            setExit(1);
+            return;
+         };
+         break;
+
+      case SM_F2F:
+         inStr = fopen ( inName, "rb" );
+         outStr = fopen_output_safely ( outName, "wb" );
+         if ( outStr == NULL) {
+            fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
+                      progName, outName, strerror(errno) );
+            if ( inStr != NULL ) fclose ( inStr );
+            setExit(1);
+            return;
+         }
+         if ( inStr == NULL ) {
+            fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+                      progName, inName, strerror(errno) );
+            if ( outStr != NULL ) fclose ( outStr );
+            setExit(1);
+            return;
+         };
+         break;
+
+      default:
+         panic ( "compress: bad srcMode" );
+         break;
+   }
+
+   if (verbosity >= 1) {
+      fprintf ( stderr,  "  %s: ", inName );
+      pad ( inName );
+      fflush ( stderr );
+   }
+
+   /*--- Now the input and output handles are sane.  Do the Biz. ---*/
+   outputHandleJustInCase = outStr;
+   deleteOutputOnInterrupt = True;
+   compressStream ( inStr, outStr );
+   outputHandleJustInCase = NULL;
+
+   /*--- If there was an I/O error, we won't get here. ---*/
+   if ( srcMode == SM_F2F ) {
+      applySavedTimeInfoToOutputFile ( outName );
+      deleteOutputOnInterrupt = False;
+      if ( !keepInputFiles ) {
+         IntNative retVal = remove ( inName );
+         ERROR_IF_NOT_ZERO ( retVal );
+      }
+   }
+
+   deleteOutputOnInterrupt = False;
+}
+
+
+/*---------------------------------------------*/
+static 
+void uncompress ( Char *name )
+{
+   FILE  *inStr;
+   FILE  *outStr;
+   Int32 n, i;
+   Bool  magicNumberOK;
+   Bool  cantGuess;
+   struct MY_STAT statBuf;
+
+   deleteOutputOnInterrupt = False;
+
+   if (name == NULL && srcMode != SM_I2O)
+      panic ( "uncompress: bad modes\n" );
+
+   cantGuess = False;
+   switch (srcMode) {
+      case SM_I2O: 
+         copyFileName ( inName, (Char*)"(stdin)" );
+         copyFileName ( outName, (Char*)"(stdout)" ); 
+         break;
+      case SM_F2F: 
+         copyFileName ( inName, name );
+         copyFileName ( outName, name );
+         for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++)
+            if (mapSuffix(outName,zSuffix[i],unzSuffix[i]))
+               goto zzz; 
+         cantGuess = True;
+         strcat ( outName, ".out" );
+         break;
+      case SM_F2O: 
+         copyFileName ( inName, name );
+         copyFileName ( outName, (Char*)"(stdout)" ); 
+         break;
+   }
+
+   zzz:
+   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
+      if (noisy)
+      fprintf ( stderr, "%s: There are no files matching `%s'.\n",
+                progName, inName );
+      setExit(1);
+      return;
+   }
+   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
+      fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+                progName, inName, strerror(errno) );
+      setExit(1);
+      return;
+   }
+   if ( srcMode == SM_F2F || srcMode == SM_F2O ) {
+      MY_STAT(inName, &statBuf);
+      if ( MY_S_ISDIR(statBuf.st_mode) ) {
+         fprintf( stderr,
+                  "%s: Input file %s is a directory.\n",
+                  progName,inName);
+         setExit(1);
+         return;
+      }
+   }
+   if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
+      if (noisy)
+      fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
+                progName, inName );
+      setExit(1);
+      return;
+   }
+   if ( /* srcMode == SM_F2F implied && */ cantGuess ) {
+      if (noisy)
+      fprintf ( stderr, 
+                "%s: Can't guess original name for %s -- using %s\n",
+                progName, inName, outName );
+      /* just a warning, no return */
+   }   
+   if ( srcMode == SM_F2F && fileExists ( outName ) ) {
+      if (forceOverwrite) {
+	remove(outName);
+      } else {
+        fprintf ( stderr, "%s: Output file %s already exists.\n",
+                  progName, outName );
+        setExit(1);
+        return;
+      }
+   }
+   if ( srcMode == SM_F2F && !forceOverwrite &&
+        (n=countHardLinks ( inName ) ) > 0) {
+      fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",
+                progName, inName, n, n > 1 ? "s" : "" );
+      setExit(1);
+      return;
+   }
+
+   if ( srcMode == SM_F2F ) {
+      /* Save the file's meta-info before we open it.  Doing it later
+         means we mess up the access times. */
+      saveInputFileMetaInfo ( inName );
+   }
+
+   switch ( srcMode ) {
+
+      case SM_I2O:
+         inStr = stdin;
+         outStr = stdout;
+         if ( isatty ( fileno ( stdin ) ) ) {
+            fprintf ( stderr,
+                      "%s: I won't read compressed data from a terminal.\n",
+                      progName );
+            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+                              progName, progName );
+            setExit(1);
+            return;
+         };
+         break;
+
+      case SM_F2O:
+         inStr = fopen ( inName, "rb" );
+         outStr = stdout;
+         if ( inStr == NULL ) {
+            fprintf ( stderr, "%s: Can't open input file %s:%s.\n",
+                      progName, inName, strerror(errno) );
+            if ( inStr != NULL ) fclose ( inStr );
+            setExit(1);
+            return;
+         };
+         break;
+
+      case SM_F2F:
+         inStr = fopen ( inName, "rb" );
+         outStr = fopen_output_safely ( outName, "wb" );
+         if ( outStr == NULL) {
+            fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
+                      progName, outName, strerror(errno) );
+            if ( inStr != NULL ) fclose ( inStr );
+            setExit(1);
+            return;
+         }
+         if ( inStr == NULL ) {
+            fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+                      progName, inName, strerror(errno) );
+            if ( outStr != NULL ) fclose ( outStr );
+            setExit(1);
+            return;
+         };
+         break;
+
+      default:
+         panic ( "uncompress: bad srcMode" );
+         break;
+   }
+
+   if (verbosity >= 1) {
+      fprintf ( stderr, "  %s: ", inName );
+      pad ( inName );
+      fflush ( stderr );
+   }
+
+   /*--- Now the input and output handles are sane.  Do the Biz. ---*/
+   outputHandleJustInCase = outStr;
+   deleteOutputOnInterrupt = True;
+   magicNumberOK = uncompressStream ( inStr, outStr );
+   outputHandleJustInCase = NULL;
+
+   /*--- If there was an I/O error, we won't get here. ---*/
+   if ( magicNumberOK ) {
+      if ( srcMode == SM_F2F ) {
+         applySavedTimeInfoToOutputFile ( outName );
+         deleteOutputOnInterrupt = False;
+         if ( !keepInputFiles ) {
+            IntNative retVal = remove ( inName );
+            ERROR_IF_NOT_ZERO ( retVal );
+         }
+      }
+   } else {
+      unzFailsExist = True;
+      deleteOutputOnInterrupt = False;
+      if ( srcMode == SM_F2F ) {
+         IntNative retVal = remove ( outName );
+         ERROR_IF_NOT_ZERO ( retVal );
+      }
+   }
+   deleteOutputOnInterrupt = False;
+
+   if ( magicNumberOK ) {
+      if (verbosity >= 1)
+         fprintf ( stderr, "done\n" );
+   } else {
+      setExit(2);
+      if (verbosity >= 1)
+         fprintf ( stderr, "not a bzip2 file.\n" ); else
+         fprintf ( stderr,
+                   "%s: %s is not a bzip2 file.\n",
+                   progName, inName );
+   }
+
+}
+
+
+/*---------------------------------------------*/
+static 
+void testf ( Char *name )
+{
+   FILE *inStr;
+   Bool allOK;
+   struct MY_STAT statBuf;
+
+   deleteOutputOnInterrupt = False;
+
+   if (name == NULL && srcMode != SM_I2O)
+      panic ( "testf: bad modes\n" );
+
+   copyFileName ( outName, (Char*)"(none)" );
+   switch (srcMode) {
+      case SM_I2O: copyFileName ( inName, (Char*)"(stdin)" ); break;
+      case SM_F2F: copyFileName ( inName, name ); break;
+      case SM_F2O: copyFileName ( inName, name ); break;
+   }
+
+   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
+      if (noisy)
+      fprintf ( stderr, "%s: There are no files matching `%s'.\n",
+                progName, inName );
+      setExit(1);
+      return;
+   }
+   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
+      fprintf ( stderr, "%s: Can't open input %s: %s.\n",
+                progName, inName, strerror(errno) );
+      setExit(1);
+      return;
+   }
+   if ( srcMode != SM_I2O ) {
+      MY_STAT(inName, &statBuf);
+      if ( MY_S_ISDIR(statBuf.st_mode) ) {
+         fprintf( stderr,
+                  "%s: Input file %s is a directory.\n",
+                  progName,inName);
+         setExit(1);
+         return;
+      }
+   }
+
+   switch ( srcMode ) {
+
+      case SM_I2O:
+         if ( isatty ( fileno ( stdin ) ) ) {
+            fprintf ( stderr,
+                      "%s: I won't read compressed data from a terminal.\n",
+                      progName );
+            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+                              progName, progName );
+            setExit(1);
+            return;
+         };
+         inStr = stdin;
+         break;
+
+      case SM_F2O: case SM_F2F:
+         inStr = fopen ( inName, "rb" );
+         if ( inStr == NULL ) {
+            fprintf ( stderr, "%s: Can't open input file %s:%s.\n",
+                      progName, inName, strerror(errno) );
+            setExit(1);
+            return;
+         };
+         break;
+
+      default:
+         panic ( "testf: bad srcMode" );
+         break;
+   }
+
+   if (verbosity >= 1) {
+      fprintf ( stderr, "  %s: ", inName );
+      pad ( inName );
+      fflush ( stderr );
+   }
+
+   /*--- Now the input handle is sane.  Do the Biz. ---*/
+   outputHandleJustInCase = NULL;
+   allOK = testStream ( inStr );
+
+   if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" );
+   if (!allOK) testFailsExist = True;
+}
+
+
+/*---------------------------------------------*/
+static 
+void license ( void )
+{
+   fprintf ( stderr,
+
+    "bzip2, a block-sorting file compressor.  "
+    "Version %s.\n"
+    "   \n"
+    "   Copyright (C) 1996-2019 by Julian Seward.\n"
+    "   \n"
+    "   This program is free software; you can redistribute it and/or modify\n"
+    "   it under the terms set out in the LICENSE file, which is included\n"
+    "   in the bzip2 source distribution.\n"
+    "   \n"
+    "   This program is distributed in the hope that it will be useful,\n"
+    "   but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+    "   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
+    "   LICENSE file for more details.\n"
+    "   \n",
+    BZ2_bzlibVersion()
+   );
+}
+
+
+/*---------------------------------------------*/
+static 
+void usage ( Char *fullProgName )
+{
+   fprintf (
+      stderr,
+      "bzip2, a block-sorting file compressor.  "
+      "Version %s.\n"
+      "\n   usage: %s [flags and input files in any order]\n"
+      "\n"
+      "   -h --help           print this message\n"
+      "   -d --decompress     force decompression\n"
+      "   -z --compress       force compression\n"
+      "   -k --keep           keep (don't delete) input files\n"
+      "   -f --force          overwrite existing output files\n"
+      "   -t --test           test compressed file integrity\n"
+      "   -c --stdout         output to standard out\n"
+      "   -q --quiet          suppress noncritical error messages\n"
+      "   -v --verbose        be verbose (a 2nd -v gives more)\n"
+      "   -L --license        display software version & license\n"
+      "   -V --version        display software version & license\n"
+      "   -s --small          use less memory (at most 2500k)\n"
+      "   -1 .. -9            set block size to 100k .. 900k\n"
+      "   --fast              alias for -1\n"
+      "   --best              alias for -9\n"
+      "\n"
+      "   If invoked as `bzip2', default action is to compress.\n"
+      "              as `bunzip2',  default action is to decompress.\n"
+      "              as `bzcat', default action is to decompress to stdout.\n"
+      "\n"
+      "   If no file names are given, bzip2 compresses or decompresses\n"
+      "   from standard input to standard output.  You can combine\n"
+      "   short flags, so `-v -4' means the same as -v4 or -4v, &c.\n"
+#     if BZ_UNIX
+      "\n"
+#     endif
+      ,
+
+      BZ2_bzlibVersion(),
+      fullProgName
+   );
+}
+
+
+/*---------------------------------------------*/
+static 
+void redundant ( Char* flag )
+{
+   fprintf ( 
+      stderr, 
+      "%s: %s is redundant in versions 0.9.5 and above\n",
+      progName, flag );
+}
+
+
+/*---------------------------------------------*/
+/*--
+  All the garbage from here to main() is purely to
+  implement a linked list of command-line arguments,
+  into which main() copies argv[1 .. argc-1].
+
+  The purpose of this exercise is to facilitate 
+  the expansion of wildcard characters * and ? in 
+  filenames for OSs which don't know how to do it
+  themselves, like MSDOS, Windows 95 and NT.
+
+  The actual Dirty Work is done by the platform-
+  specific macro APPEND_FILESPEC.
+--*/
+
+typedef
+   struct zzzz {
+      Char        *name;
+      struct zzzz *link;
+   }
+   Cell;
+
+
+/*---------------------------------------------*/
+static 
+void *myMalloc ( Int32 n )
+{
+   void* p;
+
+   p = malloc ( (size_t)n );
+   if (p == NULL) outOfMemory ();
+   return p;
+}
+
+
+/*---------------------------------------------*/
+static 
+Cell *mkCell ( void )
+{
+   Cell *c;
+
+   c = (Cell*) myMalloc ( sizeof ( Cell ) );
+   c->name = NULL;
+   c->link = NULL;
+   return c;
+}
+
+
+/*---------------------------------------------*/
+static 
+Cell *snocString ( Cell *root, Char *name )
+{
+   if (root == NULL) {
+      Cell *tmp = mkCell();
+      tmp->name = (Char*) myMalloc ( 5 + strlen(name) );
+      strcpy ( tmp->name, name );
+      return tmp;
+   } else {
+      Cell *tmp = root;
+      while (tmp->link != NULL) tmp = tmp->link;
+      tmp->link = snocString ( tmp->link, name );
+      return root;
+   }
+}
+
+
+/*---------------------------------------------*/
+static 
+void addFlagsFromEnvVar ( Cell** argList, Char* varName ) 
+{
+   Int32 i, j, k;
+   Char *envbase, *p;
+
+   envbase = getenv(varName);
+   if (envbase != NULL) {
+      p = envbase;
+      i = 0;
+      while (True) {
+         if (p[i] == 0) break;
+         p += i;
+         i = 0;
+         while (isspace((Int32)(p[0]))) p++;
+         while (p[i] != 0 && !isspace((Int32)(p[i]))) i++;
+         if (i > 0) {
+            k = i; if (k > FILE_NAME_LEN-10) k = FILE_NAME_LEN-10;
+            for (j = 0; j < k; j++) tmpName[j] = p[j];
+            tmpName[k] = 0;
+            APPEND_FLAG(*argList, tmpName);
+         }
+      }
+   }
+}
+
+
+/*---------------------------------------------*/
+#define ISFLAG(s) (strcmp(aa->name, (s))==0)
+
+IntNative main ( IntNative argc, Char *argv[] )
+{
+   Int32  i, j;
+   Char   *tmp;
+   Cell   *argList;
+   Cell   *aa;
+   Bool   decode;
+
+   /*-- Be really really really paranoid :-) --*/
+   if (sizeof(Int32) != 4 || sizeof(UInt32) != 4  ||
+       sizeof(Int16) != 2 || sizeof(UInt16) != 2  ||
+       sizeof(Char)  != 1 || sizeof(UChar)  != 1)
+      configError();
+
+   /*-- Initialise --*/
+   outputHandleJustInCase  = NULL;
+   smallMode               = False;
+   keepInputFiles          = False;
+   forceOverwrite          = False;
+   noisy                   = True;
+   verbosity               = 0;
+   blockSize100k           = 9;
+   testFailsExist          = False;
+   unzFailsExist           = False;
+   numFileNames            = 0;
+   numFilesProcessed       = 0;
+   workFactor              = 30;
+   deleteOutputOnInterrupt = False;
+   exitValue               = 0;
+   i = j = 0; /* avoid bogus warning from egcs-1.1.X */
+
+   /*-- Set up signal handlers for mem access errors --*/
+   signal (SIGSEGV, mySIGSEGVorSIGBUScatcher);
+#  if BZ_UNIX
+#  ifndef __DJGPP__
+   signal (SIGBUS,  mySIGSEGVorSIGBUScatcher);
+#  endif
+#  endif
+
+   copyFileName ( inName,  (Char*)"(none)" );
+   copyFileName ( outName, (Char*)"(none)" );
+
+   copyFileName ( progNameReally, argv[0] );
+   progName = &progNameReally[0];
+   for (tmp = &progNameReally[0]; *tmp != '\0'; tmp++)
+      if (*tmp == PATH_SEP) progName = tmp + 1;
+
+
+   /*-- Copy flags from env var BZIP2, and 
+        expand filename wildcards in arg list.
+   --*/
+   argList = NULL;
+   addFlagsFromEnvVar ( &argList,  (Char*)"BZIP2" );
+   addFlagsFromEnvVar ( &argList,  (Char*)"BZIP" );
+   for (i = 1; i <= argc-1; i++)
+      APPEND_FILESPEC(argList, argv[i]);
+
+
+   /*-- Find the length of the longest filename --*/
+   longestFileName = 7;
+   numFileNames    = 0;
+   decode          = True;
+   for (aa = argList; aa != NULL; aa = aa->link) {
+      if (ISFLAG("--")) { decode = False; continue; }
+      if (aa->name[0] == '-' && decode) continue;
+      numFileNames++;
+      if (longestFileName < (Int32)strlen(aa->name) )
+         longestFileName = (Int32)strlen(aa->name);
+   }
+
+
+   /*-- Determine source modes; flag handling may change this too. --*/
+   if (numFileNames == 0)
+      srcMode = SM_I2O; else srcMode = SM_F2F;
+
+
+   /*-- Determine what to do (compress/uncompress/test/cat). --*/
+   /*-- Note that subsequent flag handling may change this. --*/
+   opMode = OM_Z;
+
+   if ( (strstr ( progName, "unzip" ) != 0) ||
+        (strstr ( progName, "UNZIP" ) != 0) )
+      opMode = OM_UNZ;
+
+   if ( (strstr ( progName, "z2cat" ) != 0) ||
+        (strstr ( progName, "Z2CAT" ) != 0) ||
+        (strstr ( progName, "zcat" ) != 0)  ||
+        (strstr ( progName, "ZCAT" ) != 0) )  {
+      opMode = OM_UNZ;
+      srcMode = (numFileNames == 0) ? SM_I2O : SM_F2O;
+   }
+
+
+   /*-- Look at the flags. --*/
+   for (aa = argList; aa != NULL; aa = aa->link) {
+      if (ISFLAG("--")) break;
+      if (aa->name[0] == '-' && aa->name[1] != '-') {
+         for (j = 1; aa->name[j] != '\0'; j++) {
+            switch (aa->name[j]) {
+               case 'c': srcMode          = SM_F2O; break;
+               case 'd': opMode           = OM_UNZ; break;
+               case 'z': opMode           = OM_Z; break;
+               case 'f': forceOverwrite   = True; break;
+               case 't': opMode           = OM_TEST; break;
+               case 'k': keepInputFiles   = True; break;
+               case 's': smallMode        = True; break;
+               case 'q': noisy            = False; break;
+               case '1': blockSize100k    = 1; break;
+               case '2': blockSize100k    = 2; break;
+               case '3': blockSize100k    = 3; break;
+               case '4': blockSize100k    = 4; break;
+               case '5': blockSize100k    = 5; break;
+               case '6': blockSize100k    = 6; break;
+               case '7': blockSize100k    = 7; break;
+               case '8': blockSize100k    = 8; break;
+               case '9': blockSize100k    = 9; break;
+               case 'V':
+               case 'L': license();            break;
+               case 'v': verbosity++; break;
+               case 'h': usage ( progName );
+                         exit ( 0 );
+                         break;
+               default:  fprintf ( stderr, "%s: Bad flag `%s'\n",
+                                   progName, aa->name );
+                         usage ( progName );
+                         exit ( 1 );
+                         break;
+            }
+         }
+      }
+   }
+   
+   /*-- And again ... --*/
+   for (aa = argList; aa != NULL; aa = aa->link) {
+      if (ISFLAG("--")) break;
+      if (ISFLAG("--stdout"))            srcMode          = SM_F2O;  else
+      if (ISFLAG("--decompress"))        opMode           = OM_UNZ;  else
+      if (ISFLAG("--compress"))          opMode           = OM_Z;    else
+      if (ISFLAG("--force"))             forceOverwrite   = True;    else
+      if (ISFLAG("--test"))              opMode           = OM_TEST; else
+      if (ISFLAG("--keep"))              keepInputFiles   = True;    else
+      if (ISFLAG("--small"))             smallMode        = True;    else
+      if (ISFLAG("--quiet"))             noisy            = False;   else
+      if (ISFLAG("--version"))           license();                  else
+      if (ISFLAG("--license"))           license();                  else
+      if (ISFLAG("--exponential"))       workFactor = 1;             else 
+      if (ISFLAG("--repetitive-best"))   redundant(aa->name);        else
+      if (ISFLAG("--repetitive-fast"))   redundant(aa->name);        else
+      if (ISFLAG("--fast"))              blockSize100k = 1;          else
+      if (ISFLAG("--best"))              blockSize100k = 9;          else
+      if (ISFLAG("--verbose"))           verbosity++;                else
+      if (ISFLAG("--help"))              { usage ( progName ); exit ( 0 ); }
+         else
+         if (strncmp ( aa->name, "--", 2) == 0) {
+            fprintf ( stderr, "%s: Bad flag `%s'\n", progName, aa->name );
+            usage ( progName );
+            exit ( 1 );
+         }
+   }
+
+   if (verbosity > 4) verbosity = 4;
+   if (opMode == OM_Z && smallMode && blockSize100k > 2) 
+      blockSize100k = 2;
+
+   if (opMode == OM_TEST && srcMode == SM_F2O) {
+      fprintf ( stderr, "%s: -c and -t cannot be used together.\n",
+                progName );
+      exit ( 1 );
+   }
+
+   if (srcMode == SM_F2O && numFileNames == 0)
+      srcMode = SM_I2O;
+
+   if (opMode != OM_Z) blockSize100k = 0;
+
+   if (srcMode == SM_F2F) {
+      signal (SIGINT,  mySignalCatcher);
+      signal (SIGTERM, mySignalCatcher);
+#     if BZ_UNIX
+      signal (SIGHUP,  mySignalCatcher);
+#     endif
+   }
+
+   if (opMode == OM_Z) {
+     if (srcMode == SM_I2O) {
+        compress ( NULL );
+     } else {
+        decode = True;
+        for (aa = argList; aa != NULL; aa = aa->link) {
+           if (ISFLAG("--")) { decode = False; continue; }
+           if (aa->name[0] == '-' && decode) continue;
+           numFilesProcessed++;
+           compress ( aa->name );
+        }
+     }
+   } 
+   else
+
+   if (opMode == OM_UNZ) {
+      unzFailsExist = False;
+      if (srcMode == SM_I2O) {
+         uncompress ( NULL );
+      } else {
+         decode = True;
+         for (aa = argList; aa != NULL; aa = aa->link) {
+            if (ISFLAG("--")) { decode = False; continue; }
+            if (aa->name[0] == '-' && decode) continue;
+            numFilesProcessed++;
+            uncompress ( aa->name );
+         }      
+      }
+      if (unzFailsExist) { 
+         setExit(2); 
+         exit(exitValue);
+      }
+   } 
+
+   else {
+      testFailsExist = False;
+      if (srcMode == SM_I2O) {
+         testf ( NULL );
+      } else {
+         decode = True;
+         for (aa = argList; aa != NULL; aa = aa->link) {
+	    if (ISFLAG("--")) { decode = False; continue; }
+            if (aa->name[0] == '-' && decode) continue;
+            numFilesProcessed++;
+            testf ( aa->name );
+	 }
+      }
+      if (testFailsExist) {
+	 if (noisy) {
+            fprintf ( stderr,
+               "\n"
+               "You can use the `bzip2recover' program to attempt to recover\n"
+               "data from undamaged sections of corrupted files.\n\n"
+            );
+	 }
+         setExit(2);
+         exit(exitValue);
+      }
+   }
+
+   /* Free the argument list memory to mollify leak detectors 
+      (eg) Purify, Checker.  Serves no other useful purpose.
+   */
+   aa = argList;
+   while (aa != NULL) {
+      Cell* aa2 = aa->link;
+      if (aa->name != NULL) free(aa->name);
+      free(aa);
+      aa = aa2;
+   }
+
+   return exitValue;
+}
+
+
+/*-----------------------------------------------------------*/
+/*--- end                                         bzip2.c ---*/
+/*-----------------------------------------------------------*/
Index: a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new
===================================================================
--- a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new	(nonexistent)
+++ a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new	(revision 5)

Property changes on: a/bzip2/create-1.0.8-cross-patch/bzip2-1.0.8-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/bzip2/create-1.0.8-cross-patch/create.patch.sh
===================================================================
--- a/bzip2/create-1.0.8-cross-patch/create.patch.sh	(nonexistent)
+++ a/bzip2/create-1.0.8-cross-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=1.0.8
+
+tar --files-from=file.list -xzvf ../bzip2-$VERSION.tar.gz
+mv bzip2-$VERSION bzip2-$VERSION-orig
+
+cp -rf ./bzip2-$VERSION-new ./bzip2-$VERSION
+
+diff --unified -Nr  bzip2-$VERSION-orig  bzip2-$VERSION > bzip2-$VERSION-cross.patch
+
+mv bzip2-$VERSION-cross.patch ../patches
+
+rm -rf ./bzip2-$VERSION
+rm -rf ./bzip2-$VERSION-orig

Property changes on: a/bzip2/create-1.0.8-cross-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/bzip2/create-1.0.8-cross-patch/file.list
===================================================================
--- a/bzip2/create-1.0.8-cross-patch/file.list	(nonexistent)
+++ a/bzip2/create-1.0.8-cross-patch/file.list	(revision 5)
@@ -0,0 +1,4 @@
+bzip2-1.0.8/Makefile
+bzip2-1.0.8/Makefile-libbz2_so
+bzip2-1.0.8/blocksort.c
+bzip2-1.0.8/bzip2.c
Index: a/bzip2/create-1.0.8-cross-patch
===================================================================
--- a/bzip2/create-1.0.8-cross-patch	(nonexistent)
+++ a/bzip2/create-1.0.8-cross-patch	(revision 5)

Property changes on: a/bzip2/create-1.0.8-cross-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/bzip2/patches/README
===================================================================
--- a/bzip2/patches/README	(nonexistent)
+++ a/bzip2/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/bzip2/patches
===================================================================
--- a/bzip2/patches	(nonexistent)
+++ a/bzip2/patches	(revision 5)

Property changes on: a/bzip2/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/bzip2
===================================================================
--- a/bzip2	(nonexistent)
+++ a/bzip2	(revision 5)

Property changes on: a/bzip2
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/c2man/Makefile
===================================================================
--- a/c2man/Makefile	(nonexistent)
+++ a/c2man/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/c2man
+
+version     = 2.0.42
+pkgname     = c2man
+suffix      = tar.gz
+
+tarball     = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(version)))
+sha1s       = $(addsuffix .sha1sum, $(tarball))
+
+patches      = $(CURDIR)/patches/c2man-2.0.42-destdir.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarball) $(patches) $(sha1s)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarball):
+	@echo -e "\n======= Downloading $(tarball) file =======" ; \
+	 for tarball in $(tarball) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarball)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-2.0.42-destdir-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarball) $(sha1s) $(patches)
Index: a/c2man/create-2.0.42-destdir-patch/c2man-2.0.42-new/Makefile.SH
===================================================================
--- a/c2man/create-2.0.42-destdir-patch/c2man-2.0.42-new/Makefile.SH	(nonexistent)
+++ a/c2man/create-2.0.42-destdir-patch/c2man-2.0.42-new/Makefile.SH	(revision 5)
@@ -0,0 +1,176 @@
+case $CONFIG in
+'')
+	if test ! -f config.sh; then
+		ln ../config.sh . || \
+		ln ../../config.sh . || \
+		ln ../../../config.sh . || \
+		(echo "Can't find config.sh."; exit 1)
+	fi 2>/dev/null
+	. ./config.sh
+	;;
+esac
+: This forces SH files to create target in same directory as SH file.
+: This is so that make depend always knows where to find SH derivatives.
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting Makefile (with variable substitutions)"
+: This section of the file will have variable substitutions done on it.
+: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
+: Protect any dollar signs and backticks that you do not want interpreted
+: by putting a backslash in front.  You may delete these comments.
+$spitshell >Makefile <<!GROK!THIS!
+# $Id: Makefile.SH,v 2.0.1.32 2000/02/25 02:20:39 greyham Exp greyham $
+#
+# UNIX makefile for manual page generator
+# Note: any changes made here will be lost next time Configure is run!.
+
+CC=$cc $optimize
+YACC=$yacc $yaccflags
+LEX=$lex $lexflags
+SED=$sed
+CAT=$cat
+RM=$rm
+MV=$mv
+CP=$cp
+ECHO=$echo
+MKDEP=$mkdep
+
+# where we get installed
+bin=$binexp
+privlib=$installprivlib
+
+mansrc=$mansrc
+manext=$manext
+CFLAGS=$ccflags
+WARNFLAGS=$warnflags
+LDFLAGS=$ldflags
+LIBS=$libs $liblex $libyacc
+!GROK!THIS!
+
+: In the following dollars and backticks do not need the extra backslash.
+$spitshell >>Makefile <<'!NO!SUBS!'
+
+# As Larry said, "Grrrr"
+SHELL=/bin/sh
+
+OSOURCES =	config.h c2man.h semantic.h symbol.h strconcat.h \
+		strappend.h manpage.h enum.h output.h lex.l grammar.y
+DCSOURCES =	c2man.c semantic.c string.c symbol.c strconcat.c \
+		strappend.c manpage.c enum.c nroff.c texinfo.c latex.c html.c \
+		autodoc.c ascii.c
+SOURCES =	$(OSOURCES) $(DCSOURCES)
+CSOURCES =	$(DCSOURCES) y.tab.c
+OBJECTS =	c2man.o semantic.o string.o symbol.o y.tab.o strconcat.o \
+		strappend.o manpage.o enum.o nroff.o texinfo.o latex.o html.o \
+		autodoc.o ascii.o
+GENERATED =	c2man example.inc ctype_ex.inc y.tab.c lex.yy.c y.output \
+		fixexamp.sed flatten.sed
+
+
+all: c2man c2man.1
+
+install: all
+	-mkdir -p $(DESTDIR)$(bin)
+	-mkdir -p $(DESTDIR)$(mansrc)
+	$(CP) c2man $(DESTDIR)$(bin)
+	$(CP) c2man.1 $(DESTDIR)$(mansrc)/c2man.$(manext)
+	-mkdir -p $(DESTDIR)$(privlib)
+	chmod 755 $(DESTDIR)$(privlib)
+	-mkdir -p $(DESTDIR)$(privlib)/eg
+	chmod 755 $(DESTDIR)$(privlib)/eg
+	$(CP) eg/*.[chly] $(DESTDIR)$(privlib)/eg
+	chmod 755 $(DESTDIR)$(privlib)/eg/*
+
+uninstall:
+	$(RM) -f $(DESTDIR)$(bin)/c2man $(DESTDIR)$(mansrc)/c2man.$(manext)
+	$(RM) -f $(DESTDIR)$(privlib)/eg/*
+	rmdir $(DESTDIR)$(privlib)/eg
+	rmdir $(DESTDIR)$(privlib)
+
+c2man: $(OBJECTS)
+	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBS)
+
+c2man.1: c2man.man c2man example.inc ctype_ex.inc flatten.sed
+	$(SED) -f flatten.sed < c2man.man > c2man.1
+
+.c.o:
+	$(CC) $(CFLAGS) $(WARNFLAGS) -c $<
+
+y.tab.c: grammar.y
+	@$(ECHO) Expect 61 shift/reduce conflicts.
+	$(YACC) grammar.y
+
+# don't compile y.tab.c with all warnings; yacc/bison are not up to it.
+y.tab.o: y.tab.c lex.yy.c
+	$(CC) $(CFLAGS) -c y.tab.c
+
+lex.yy.c: lex.l
+	$(LEX) -n lex.l
+
+example.inc: c2man example.h fixexamp.sed
+	c2man -o- example.h | $(SED) -f fixexamp.sed >example.inc
+
+ctype_ex.inc: c2man ctype_ex.h fixexamp.sed
+	c2man -o- -g ctype_ex.h | $(SED) -f fixexamp.sed >ctype_ex.inc
+
+fixexamp.sed: fixexamp.in
+	$(SED) -e '/^#/d' fixexamp.in > fixexamp.sed
+
+flatten.sed: flatten.SH config.sh
+	sh flatten.SH
+
+Makefile: Makefile.SH config.sh
+	sh Makefile.SH
+
+config.h: config_h.SH config.sh
+	sh config_h.SH
+
+TAGS: $(SOURCES)
+	etags -t $(SOURCES)
+
+clean:
+	$(RM) -f *.o *.s *.bak *~ *.log $(GENERATED) core
+
+distclean realclean: clean
+	$(RM) -f Makefile config.sh mkdep c2man.kit?
+
+lint:
+	lint -b $(CFLAGS) $(CSOURCES)
+
+print:
+	cpr $(SOURCES) | lpr -J'c2man'
+
+test: c2man
+	@echo "Running c2man over the examples..." 1>&2
+	@for file in eg/*.[chly]; do ./c2man -v -o- $$file; done
+	@echo "Running c2man over its own source code..." 1>&2
+	@for file in $(DCSOURCES); do ./c2man -v -o- $$file; done
+	@echo "Running c2man over the tests..." 1>&2
+	@for file in test/*.[chly]; do ./c2man -v -o- $$file; done
+	@echo "Hmmm, test seemed to go OK." 1>&2
+
+depend:
+	$(SED) -e '1,/^# DO NOT/!d' < Makefile > Makefile.new
+	$(MKDEP) $(DCSOURCES) >> Makefile.new
+	- test ! -f y.tab.c -o ! -f lex.yy.c || $(MKDEP) y.tab.c >> Makefile.new
+	$(MV) -f Makefile.new Makefile
+
+# y.tab.c dependancies updated manually since it won't exist yet when make
+# depend is first run.
+y.tab.o: c2man.h
+y.tab.o: config.h
+y.tab.o: confmagic.h
+y.tab.o: enum.h
+y.tab.o: manpage.h
+y.tab.o: semantic.h
+y.tab.o: strappend.h
+y.tab.o: strconcat.h
+y.tab.o: symbol.h
+
+# DO NOT DELETE THIS LINE! make depend DEPENDS ON IT!
+c2man.o:
+	@echo "You must run a make depend first."; exit 1
+!NO!SUBS!
+chmod 755 Makefile
+$eunicefix Makefile

Property changes on: a/c2man/create-2.0.42-destdir-patch/c2man-2.0.42-new/Makefile.SH
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/c2man/create-2.0.42-destdir-patch/c2man-2.0.42-new
===================================================================
--- a/c2man/create-2.0.42-destdir-patch/c2man-2.0.42-new	(nonexistent)
+++ a/c2man/create-2.0.42-destdir-patch/c2man-2.0.42-new	(revision 5)

Property changes on: a/c2man/create-2.0.42-destdir-patch/c2man-2.0.42-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/c2man/create-2.0.42-destdir-patch/create.patch.sh
===================================================================
--- a/c2man/create-2.0.42-destdir-patch/create.patch.sh	(nonexistent)
+++ a/c2man/create-2.0.42-destdir-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=2.0.42
+
+tar --files-from=file.list -xzvf ../c2man-$VERSION.tar.gz
+mv c2man-$VERSION c2man-$VERSION-orig
+
+cp -rf ./c2man-$VERSION-new ./c2man-$VERSION
+
+diff --unified -Nr  c2man-$VERSION-orig  c2man-$VERSION > c2man-$VERSION-destdir.patch
+
+mv c2man-$VERSION-destdir.patch ../patches
+
+rm -rf ./c2man-$VERSION
+rm -rf ./c2man-$VERSION-orig

Property changes on: a/c2man/create-2.0.42-destdir-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/c2man/create-2.0.42-destdir-patch/file.list
===================================================================
--- a/c2man/create-2.0.42-destdir-patch/file.list	(nonexistent)
+++ a/c2man/create-2.0.42-destdir-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+c2man-2.0.42/Makefile.SH
Index: a/c2man/create-2.0.42-destdir-patch
===================================================================
--- a/c2man/create-2.0.42-destdir-patch	(nonexistent)
+++ a/c2man/create-2.0.42-destdir-patch	(revision 5)

Property changes on: a/c2man/create-2.0.42-destdir-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/c2man/patches/README
===================================================================
--- a/c2man/patches/README	(nonexistent)
+++ a/c2man/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/c2man/patches
===================================================================
--- a/c2man/patches	(nonexistent)
+++ a/c2man/patches	(revision 5)

Property changes on: a/c2man/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/c2man
===================================================================
--- a/c2man	(nonexistent)
+++ a/c2man	(revision 5)

Property changes on: a/c2man
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/ctags/Makefile
===================================================================
--- a/ctags/Makefile	(nonexistent)
+++ a/ctags/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/ctags
+
+versions    = 5.8
+pkgname     = ctags
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/ctags-5.8-unused-attribute.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-5.8-unused-attribute-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/ctags/create-5.8-unused-attribute-patch/create.patch.sh
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch/create.patch.sh	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=5.8
+
+tar --files-from=file.list -xzvf ../ctags-$VERSION.tar.gz
+mv ctags-$VERSION ctags-$VERSION-orig
+
+cp -rf ./ctags-$VERSION-new ./ctags-$VERSION
+
+diff --unified -Nr  ctags-$VERSION-orig  ctags-$VERSION > ctags-$VERSION-unused-attribute.patch
+
+mv ctags-$VERSION-unused-attribute.patch ../patches
+
+rm -rf ./ctags-$VERSION
+rm -rf ./ctags-$VERSION-orig

Property changes on: a/ctags/create-5.8-unused-attribute-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/c.c
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/c.c	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/c.c	(revision 5)
@@ -0,0 +1,2932 @@
+/*
+*   $Id: c.c 689 2008-12-13 21:17:36Z elliotth $
+*
+*   Copyright (c) 1996-2003, Darren Hiebert
+*
+*   This source code is released for free distribution under the terms of the
+*   GNU General Public License.
+*
+*   This module contains functions for parsing and scanning C, C++ and Java
+*   source files.
+*/
+
+/*
+*   INCLUDE FILES
+*/
+#include "general.h"        /* must always come first */
+
+#include <string.h>
+#include <setjmp.h>
+
+#include "debug.h"
+#include "entry.h"
+#include "get.h"
+#include "keyword.h"
+#include "options.h"
+#include "parse.h"
+#include "read.h"
+#include "routines.h"
+
+/*
+*   MACROS
+*/
+
+#define activeToken(st)     ((st)->token [(int) (st)->tokenIndex])
+#define parentDecl(st)      ((st)->parent == NULL ? \
+                            DECL_NONE : (st)->parent->declaration)
+#define isType(token,t)     (boolean) ((token)->type == (t))
+#define insideEnumBody(st)  ((st)->parent == NULL ? FALSE : \
+                            (boolean) ((st)->parent->declaration == DECL_ENUM))
+#define isExternCDecl(st,c) (boolean) ((c) == STRING_SYMBOL  && \
+                    ! (st)->haveQualifyingName  && (st)->scope == SCOPE_EXTERN)
+
+#define isOneOf(c,s)        (boolean) (strchr ((s), (c)) != NULL)
+
+#define isHighChar(c)       ((c) != EOF && (unsigned char)(c) >= 0xc0)
+
+/*
+*   DATA DECLARATIONS
+*/
+
+enum { NumTokens = 3 };
+
+typedef enum eException {
+	ExceptionNone, ExceptionEOF, ExceptionFormattingError,
+	ExceptionBraceFormattingError
+} exception_t;
+
+/*  Used to specify type of keyword.
+ */
+typedef enum eKeywordId {
+	KEYWORD_NONE = -1,
+	KEYWORD_ATTRIBUTE, KEYWORD_ABSTRACT,
+	KEYWORD_BOOLEAN, KEYWORD_BYTE, KEYWORD_BAD_STATE, KEYWORD_BAD_TRANS,
+	KEYWORD_BIND, KEYWORD_BIND_VAR, KEYWORD_BIT,
+	KEYWORD_CASE, KEYWORD_CATCH, KEYWORD_CHAR, KEYWORD_CLASS, KEYWORD_CONST,
+	KEYWORD_CONSTRAINT, KEYWORD_COVERAGE_BLOCK, KEYWORD_COVERAGE_DEF,
+	KEYWORD_DEFAULT, KEYWORD_DELEGATE, KEYWORD_DELETE, KEYWORD_DO,
+	KEYWORD_DOUBLE,
+	KEYWORD_ELSE, KEYWORD_ENUM, KEYWORD_EXPLICIT, KEYWORD_EXTERN,
+	KEYWORD_EXTENDS, KEYWORD_EVENT,
+	KEYWORD_FINAL, KEYWORD_FLOAT, KEYWORD_FOR, KEYWORD_FOREACH,
+	KEYWORD_FRIEND, KEYWORD_FUNCTION,
+	KEYWORD_GOTO,
+	KEYWORD_IF, KEYWORD_IMPLEMENTS, KEYWORD_IMPORT, KEYWORD_INLINE, KEYWORD_INT,
+	KEYWORD_INOUT, KEYWORD_INPUT, KEYWORD_INTEGER, KEYWORD_INTERFACE,
+	KEYWORD_INTERNAL,
+	KEYWORD_LOCAL, KEYWORD_LONG,
+	KEYWORD_M_BAD_STATE, KEYWORD_M_BAD_TRANS, KEYWORD_M_STATE, KEYWORD_M_TRANS,
+	KEYWORD_MUTABLE,
+	KEYWORD_NAMESPACE, KEYWORD_NEW, KEYWORD_NEWCOV, KEYWORD_NATIVE,
+	KEYWORD_OPERATOR, KEYWORD_OUTPUT, KEYWORD_OVERLOAD, KEYWORD_OVERRIDE,
+	KEYWORD_PACKED, KEYWORD_PORT, KEYWORD_PACKAGE, KEYWORD_PRIVATE,
+	KEYWORD_PROGRAM, KEYWORD_PROTECTED, KEYWORD_PUBLIC,
+	KEYWORD_REGISTER, KEYWORD_RETURN,
+	KEYWORD_SHADOW, KEYWORD_STATE,
+	KEYWORD_SHORT, KEYWORD_SIGNED, KEYWORD_STATIC, KEYWORD_STRING,
+	KEYWORD_STRUCT, KEYWORD_SWITCH, KEYWORD_SYNCHRONIZED,
+	KEYWORD_TASK, KEYWORD_TEMPLATE, KEYWORD_THIS, KEYWORD_THROW,
+	KEYWORD_THROWS, KEYWORD_TRANSIENT, KEYWORD_TRANS, KEYWORD_TRANSITION,
+	KEYWORD_TRY, KEYWORD_TYPEDEF, KEYWORD_TYPENAME,
+	KEYWORD_UINT, KEYWORD_ULONG, KEYWORD_UNION, KEYWORD_UNSIGNED, KEYWORD_USHORT,
+	KEYWORD_USING,
+	KEYWORD_VIRTUAL, KEYWORD_VOID, KEYWORD_VOLATILE,
+	KEYWORD_WCHAR_T, KEYWORD_WHILE
+} keywordId;
+
+/*  Used to determine whether keyword is valid for the current language and
+ *  what its ID is.
+ */
+typedef struct sKeywordDesc {
+	const char *name;
+	keywordId id;
+	short isValid [5]; /* indicates languages for which kw is valid */
+} keywordDesc;
+
+/*  Used for reporting the type of object parsed by nextToken ().
+ */
+typedef enum eTokenType {
+	TOKEN_NONE,          /* none */
+	TOKEN_ARGS,          /* a parenthetical pair and its contents */
+	TOKEN_BRACE_CLOSE,
+	TOKEN_BRACE_OPEN,
+	TOKEN_COLON,         /* the colon character */
+	TOKEN_COMMA,         /* the comma character */
+	TOKEN_DOUBLE_COLON,  /* double colon indicates nested-name-specifier */
+	TOKEN_KEYWORD,
+	TOKEN_NAME,          /* an unknown name */
+	TOKEN_PACKAGE,       /* a Java package name */
+	TOKEN_PAREN_NAME,    /* a single name in parentheses */
+	TOKEN_SEMICOLON,     /* the semicolon character */
+	TOKEN_SPEC,          /* a storage class specifier, qualifier, type, etc. */
+	TOKEN_COUNT
+} tokenType;
+
+/*  This describes the scoping of the current statement.
+ */
+typedef enum eTagScope {
+	SCOPE_GLOBAL,        /* no storage class specified */
+	SCOPE_STATIC,        /* static storage class */
+	SCOPE_EXTERN,        /* external storage class */
+	SCOPE_FRIEND,        /* declares access only */
+	SCOPE_TYPEDEF,       /* scoping depends upon context */
+	SCOPE_COUNT
+} tagScope;
+
+typedef enum eDeclaration {
+	DECL_NONE,
+	DECL_BASE,           /* base type (default) */
+	DECL_CLASS,
+	DECL_ENUM,
+	DECL_EVENT,
+	DECL_FUNCTION,
+	DECL_IGNORE,         /* non-taggable "declaration" */
+	DECL_INTERFACE,
+	DECL_NAMESPACE,
+	DECL_NOMANGLE,       /* C++ name demangling block */
+	DECL_PACKAGE,
+	DECL_PROGRAM,        /* Vera program */
+	DECL_STRUCT,
+	DECL_TASK,           /* Vera task */
+	DECL_UNION,
+	DECL_COUNT
+} declType;
+
+typedef enum eVisibilityType {
+	ACCESS_UNDEFINED,
+	ACCESS_LOCAL,
+	ACCESS_PRIVATE,
+	ACCESS_PROTECTED,
+	ACCESS_PUBLIC,
+	ACCESS_DEFAULT,      /* Java-specific */
+	ACCESS_COUNT
+} accessType;
+
+/*  Information about the parent class of a member (if any).
+ */
+typedef struct sMemberInfo {
+	accessType access;           /* access of current statement */
+	accessType accessDefault;    /* access default for current statement */
+} memberInfo;
+
+typedef struct sTokenInfo {
+	tokenType     type;
+	keywordId     keyword;
+	vString*      name;          /* the name of the token */
+	unsigned long lineNumber;    /* line number of tag */
+	fpos_t        filePosition;  /* file position of line containing name */
+} tokenInfo;
+
+typedef enum eImplementation {
+	IMP_DEFAULT,
+	IMP_ABSTRACT,
+	IMP_VIRTUAL,
+	IMP_PURE_VIRTUAL,
+	IMP_COUNT
+} impType;
+
+/*  Describes the statement currently undergoing analysis.
+ */
+typedef struct sStatementInfo {
+	tagScope	scope;
+	declType	declaration;    /* specifier associated with TOKEN_SPEC */
+	boolean		gotName;        /* was a name parsed yet? */
+	boolean		haveQualifyingName;  /* do we have a name we are considering? */
+	boolean		gotParenName;   /* was a name inside parentheses parsed yet? */
+	boolean		gotArgs;        /* was a list of parameters parsed yet? */
+	boolean		isPointer;      /* is 'name' a pointer? */
+	boolean     inFunction;     /* are we inside of a function? */
+	boolean		assignment;     /* have we handled an '='? */
+	boolean		notVariable;    /* has a variable declaration been disqualified ? */
+	impType		implementation; /* abstract or concrete implementation? */
+	unsigned int tokenIndex;    /* currently active token */
+	tokenInfo*	token [(int) NumTokens];
+	tokenInfo*	context;        /* accumulated scope of current statement */
+	tokenInfo*	blockName;      /* name of current block */
+	memberInfo	member;         /* information regarding parent class/struct */
+	vString*	parentClasses;  /* parent classes */
+	struct sStatementInfo *parent;  /* statement we are nested within */
+} statementInfo;
+
+/*  Describes the type of tag being generated.
+ */
+typedef enum eTagType {
+	TAG_UNDEFINED,
+	TAG_CLASS,       /* class name */
+	TAG_ENUM,        /* enumeration name */
+	TAG_ENUMERATOR,  /* enumerator (enumeration value) */
+	TAG_EVENT,       /* event */
+	TAG_FIELD,       /* field (Java) */
+	TAG_FUNCTION,    /* function definition */
+	TAG_INTERFACE,   /* interface declaration */
+	TAG_LOCAL,       /* local variable definition */
+	TAG_MEMBER,      /* structure, class or interface member */
+	TAG_METHOD,      /* method declaration */
+	TAG_NAMESPACE,   /* namespace name */
+	TAG_PACKAGE,     /* package name */
+	TAG_PROGRAM,     /* program name */
+	TAG_PROPERTY,    /* property name */
+	TAG_PROTOTYPE,   /* function prototype or declaration */
+	TAG_STRUCT,      /* structure name */
+	TAG_TASK,        /* task name */
+	TAG_TYPEDEF,     /* typedef name */
+	TAG_UNION,       /* union name */
+	TAG_VARIABLE,    /* variable definition */
+	TAG_EXTERN_VAR,  /* external variable declaration */
+	TAG_COUNT        /* must be last */
+} tagType;
+
+typedef struct sParenInfo {
+	boolean isPointer;
+	boolean isParamList;
+	boolean isKnrParamList;
+	boolean isNameCandidate;
+	boolean invalidContents;
+	boolean nestedArgs;
+	unsigned int parameterCount;
+} parenInfo;
+
+/*
+*   DATA DEFINITIONS
+*/
+
+static jmp_buf Exception;
+
+static langType Lang_c;
+static langType Lang_cpp;
+static langType Lang_csharp;
+static langType Lang_java;
+static langType Lang_vera;
+static vString *Signature;
+static boolean CollectingSignature;
+
+/* Number used to uniquely identify anonymous structs and unions. */
+static int AnonymousID = 0;
+
+/* Used to index into the CKinds table. */
+typedef enum {
+	CK_UNDEFINED = -1,
+	CK_CLASS, CK_DEFINE, CK_ENUMERATOR, CK_FUNCTION,
+	CK_ENUMERATION, CK_LOCAL, CK_MEMBER, CK_NAMESPACE, CK_PROTOTYPE,
+	CK_STRUCT, CK_TYPEDEF, CK_UNION, CK_VARIABLE,
+	CK_EXTERN_VARIABLE
+} cKind;
+
+static kindOption CKinds [] = {
+	{ TRUE,  'c', "class",      "classes"},
+	{ TRUE,  'd', "macro",      "macro definitions"},
+	{ TRUE,  'e', "enumerator", "enumerators (values inside an enumeration)"},
+	{ TRUE,  'f', "function",   "function definitions"},
+	{ TRUE,  'g', "enum",       "enumeration names"},
+	{ FALSE, 'l', "local",      "local variables"},
+	{ TRUE,  'm', "member",     "class, struct, and union members"},
+	{ TRUE,  'n', "namespace",  "namespaces"},
+	{ FALSE, 'p', "prototype",  "function prototypes"},
+	{ TRUE,  's', "struct",     "structure names"},
+	{ TRUE,  't', "typedef",    "typedefs"},
+	{ TRUE,  'u', "union",      "union names"},
+	{ TRUE,  'v', "variable",   "variable definitions"},
+	{ FALSE, 'x', "externvar",  "external and forward variable declarations"},
+};
+
+typedef enum {
+	CSK_UNDEFINED = -1,
+	CSK_CLASS, CSK_DEFINE, CSK_ENUMERATOR, CSK_EVENT, CSK_FIELD,
+	CSK_ENUMERATION, CSK_INTERFACE, CSK_LOCAL, CSK_METHOD,
+	CSK_NAMESPACE, CSK_PROPERTY, CSK_STRUCT, CSK_TYPEDEF
+} csharpKind;
+
+static kindOption CsharpKinds [] = {
+	{ TRUE,  'c', "class",      "classes"},
+	{ TRUE,  'd', "macro",      "macro definitions"},
+	{ TRUE,  'e', "enumerator", "enumerators (values inside an enumeration)"},
+	{ TRUE,  'E', "event",      "events"},
+	{ TRUE,  'f', "field",      "fields"},
+	{ TRUE,  'g', "enum",       "enumeration names"},
+	{ TRUE,  'i', "interface",  "interfaces"},
+	{ FALSE, 'l', "local",      "local variables"},
+	{ TRUE,  'm', "method",     "methods"},
+	{ TRUE,  'n', "namespace",  "namespaces"},
+	{ TRUE,  'p', "property",   "properties"},
+	{ TRUE,  's', "struct",     "structure names"},
+	{ TRUE,  't', "typedef",    "typedefs"},
+};
+
+/* Used to index into the JavaKinds table. */
+typedef enum {
+	JK_UNDEFINED = -1,
+	JK_CLASS, JK_ENUM_CONSTANT, JK_FIELD, JK_ENUM, JK_INTERFACE,
+	JK_LOCAL, JK_METHOD, JK_PACKAGE, JK_ACCESS, JK_CLASS_PREFIX
+} javaKind;
+
+static kindOption JavaKinds [] = {
+	{ TRUE,  'c', "class",         "classes"},
+	{ TRUE,  'e', "enum constant", "enum constants"},
+	{ TRUE,  'f', "field",         "fields"},
+	{ TRUE,  'g', "enum",          "enum types"},
+	{ TRUE,  'i', "interface",     "interfaces"},
+	{ FALSE, 'l', "local",         "local variables"},
+	{ TRUE,  'm', "method",        "methods"},
+	{ TRUE,  'p', "package",       "packages"},
+};
+
+/* Used to index into the VeraKinds table. */
+typedef enum {
+	VK_UNDEFINED = -1,
+	VK_CLASS, VK_DEFINE, VK_ENUMERATOR, VK_FUNCTION,
+	VK_ENUMERATION, VK_LOCAL, VK_MEMBER, VK_PROGRAM, VK_PROTOTYPE,
+	VK_TASK, VK_TYPEDEF, VK_VARIABLE,
+	VK_EXTERN_VARIABLE
+} veraKind;
+
+static kindOption VeraKinds [] = {
+	{ TRUE,  'c', "class",      "classes"},
+	{ TRUE,  'd', "macro",      "macro definitions"},
+	{ TRUE,  'e', "enumerator", "enumerators (values inside an enumeration)"},
+	{ TRUE,  'f', "function",   "function definitions"},
+	{ TRUE,  'g', "enum",       "enumeration names"},
+	{ FALSE, 'l', "local",      "local variables"},
+	{ TRUE,  'm', "member",     "class, struct, and union members"},
+	{ TRUE,  'p', "program",    "programs"},
+	{ FALSE, 'P', "prototype",  "function prototypes"},
+	{ TRUE,  't', "task",       "tasks"},
+	{ TRUE,  'T', "typedef",    "typedefs"},
+	{ TRUE,  'v', "variable",   "variable definitions"},
+	{ FALSE, 'x', "externvar",  "external variable declarations"}
+};
+
+static const keywordDesc KeywordTable [] = {
+	/*                                              C++            */
+	/*                                       ANSI C  |  C# Java    */
+	/*                                            |  |  |  |  Vera */
+	/* keyword          keyword ID                |  |  |  |  |    */
+	{ "__attribute__",  KEYWORD_ATTRIBUTE,      { 1, 1, 1, 0, 0 } },
+	{ "abstract",       KEYWORD_ABSTRACT,       { 0, 0, 1, 1, 0 } },
+	{ "bad_state",      KEYWORD_BAD_STATE,      { 0, 0, 0, 0, 1 } },
+	{ "bad_trans",      KEYWORD_BAD_TRANS,      { 0, 0, 0, 0, 1 } },
+	{ "bind",           KEYWORD_BIND,           { 0, 0, 0, 0, 1 } },
+	{ "bind_var",       KEYWORD_BIND_VAR,       { 0, 0, 0, 0, 1 } },
+	{ "bit",            KEYWORD_BIT,            { 0, 0, 0, 0, 1 } },
+	{ "boolean",        KEYWORD_BOOLEAN,        { 0, 0, 0, 1, 0 } },
+	{ "byte",           KEYWORD_BYTE,           { 0, 0, 0, 1, 0 } },
+	{ "case",           KEYWORD_CASE,           { 1, 1, 1, 1, 0 } },
+	{ "catch",          KEYWORD_CATCH,          { 0, 1, 1, 0, 0 } },
+	{ "char",           KEYWORD_CHAR,           { 1, 1, 1, 1, 0 } },
+	{ "class",          KEYWORD_CLASS,          { 0, 1, 1, 1, 1 } },
+	{ "const",          KEYWORD_CONST,          { 1, 1, 1, 1, 0 } },
+	{ "constraint",     KEYWORD_CONSTRAINT,     { 0, 0, 0, 0, 1 } },
+	{ "coverage_block", KEYWORD_COVERAGE_BLOCK, { 0, 0, 0, 0, 1 } },
+	{ "coverage_def",   KEYWORD_COVERAGE_DEF,   { 0, 0, 0, 0, 1 } },
+	{ "do",             KEYWORD_DO,             { 1, 1, 1, 1, 0 } },
+	{ "default",        KEYWORD_DEFAULT,        { 1, 1, 1, 1, 0 } },
+	{ "delegate",       KEYWORD_DELEGATE,       { 0, 0, 1, 0, 0 } },
+	{ "delete",         KEYWORD_DELETE,         { 0, 1, 0, 0, 0 } },
+	{ "double",         KEYWORD_DOUBLE,         { 1, 1, 1, 1, 0 } },
+	{ "else",           KEYWORD_ELSE,           { 1, 1, 1, 1, 0 } },
+	{ "enum",           KEYWORD_ENUM,           { 1, 1, 1, 1, 1 } },
+	{ "event",          KEYWORD_EVENT,          { 0, 0, 1, 0, 1 } },
+	{ "explicit",       KEYWORD_EXPLICIT,       { 0, 1, 1, 0, 0 } },
+	{ "extends",        KEYWORD_EXTENDS,        { 0, 0, 0, 1, 1 } },
+	{ "extern",         KEYWORD_EXTERN,         { 1, 1, 1, 0, 1 } },
+	{ "final",          KEYWORD_FINAL,          { 0, 0, 0, 1, 0 } },
+	{ "float",          KEYWORD_FLOAT,          { 1, 1, 1, 1, 0 } },
+	{ "for",            KEYWORD_FOR,            { 1, 1, 1, 1, 0 } },
+	{ "foreach",        KEYWORD_FOREACH,        { 0, 0, 1, 0, 0 } },
+	{ "friend",         KEYWORD_FRIEND,         { 0, 1, 0, 0, 0 } },
+	{ "function",       KEYWORD_FUNCTION,       { 0, 0, 0, 0, 1 } },
+	{ "goto",           KEYWORD_GOTO,           { 1, 1, 1, 1, 0 } },
+	{ "if",             KEYWORD_IF,             { 1, 1, 1, 1, 0 } },
+	{ "implements",     KEYWORD_IMPLEMENTS,     { 0, 0, 0, 1, 0 } },
+	{ "import",         KEYWORD_IMPORT,         { 0, 0, 0, 1, 0 } },
+	{ "inline",         KEYWORD_INLINE,         { 0, 1, 0, 0, 0 } },
+	{ "inout",          KEYWORD_INOUT,          { 0, 0, 0, 0, 1 } },
+	{ "input",          KEYWORD_INPUT,          { 0, 0, 0, 0, 1 } },
+	{ "int",            KEYWORD_INT,            { 1, 1, 1, 1, 0 } },
+	{ "integer",        KEYWORD_INTEGER,        { 0, 0, 0, 0, 1 } },
+	{ "interface",      KEYWORD_INTERFACE,      { 0, 0, 1, 1, 1 } },
+	{ "internal",       KEYWORD_INTERNAL,       { 0, 0, 1, 0, 0 } },
+	{ "local",          KEYWORD_LOCAL,          { 0, 0, 0, 0, 1 } },
+	{ "long",           KEYWORD_LONG,           { 1, 1, 1, 1, 0 } },
+	{ "m_bad_state",    KEYWORD_M_BAD_STATE,    { 0, 0, 0, 0, 1 } },
+	{ "m_bad_trans",    KEYWORD_M_BAD_TRANS,    { 0, 0, 0, 0, 1 } },
+	{ "m_state",        KEYWORD_M_STATE,        { 0, 0, 0, 0, 1 } },
+	{ "m_trans",        KEYWORD_M_TRANS,        { 0, 0, 0, 0, 1 } },
+	{ "mutable",        KEYWORD_MUTABLE,        { 0, 1, 0, 0, 0 } },
+	{ "namespace",      KEYWORD_NAMESPACE,      { 0, 1, 1, 0, 0 } },
+	{ "native",         KEYWORD_NATIVE,         { 0, 0, 0, 1, 0 } },
+	{ "new",            KEYWORD_NEW,            { 0, 1, 1, 1, 0 } },
+	{ "newcov",         KEYWORD_NEWCOV,         { 0, 0, 0, 0, 1 } },
+	{ "operator",       KEYWORD_OPERATOR,       { 0, 1, 1, 0, 0 } },
+	{ "output",         KEYWORD_OUTPUT,         { 0, 0, 0, 0, 1 } },
+	{ "overload",       KEYWORD_OVERLOAD,       { 0, 1, 0, 0, 0 } },
+	{ "override",       KEYWORD_OVERRIDE,       { 0, 0, 1, 0, 0 } },
+	{ "package",        KEYWORD_PACKAGE,        { 0, 0, 0, 1, 0 } },
+	{ "packed",         KEYWORD_PACKED,         { 0, 0, 0, 0, 1 } },
+	{ "port",           KEYWORD_PORT,           { 0, 0, 0, 0, 1 } },
+	{ "private",        KEYWORD_PRIVATE,        { 0, 1, 1, 1, 0 } },
+	{ "program",        KEYWORD_PROGRAM,        { 0, 0, 0, 0, 1 } },
+	{ "protected",      KEYWORD_PROTECTED,      { 0, 1, 1, 1, 1 } },
+	{ "public",         KEYWORD_PUBLIC,         { 0, 1, 1, 1, 1 } },
+	{ "register",       KEYWORD_REGISTER,       { 1, 1, 0, 0, 0 } },
+	{ "return",         KEYWORD_RETURN,         { 1, 1, 1, 1, 0 } },
+	{ "shadow",         KEYWORD_SHADOW,         { 0, 0, 0, 0, 1 } },
+	{ "short",          KEYWORD_SHORT,          { 1, 1, 1, 1, 0 } },
+	{ "signed",         KEYWORD_SIGNED,         { 1, 1, 0, 0, 0 } },
+	{ "state",          KEYWORD_STATE,          { 0, 0, 0, 0, 1 } },
+	{ "static",         KEYWORD_STATIC,         { 1, 1, 1, 1, 1 } },
+	{ "string",         KEYWORD_STRING,         { 0, 0, 1, 0, 1 } },
+	{ "struct",         KEYWORD_STRUCT,         { 1, 1, 1, 0, 0 } },
+	{ "switch",         KEYWORD_SWITCH,         { 1, 1, 1, 1, 0 } },
+	{ "synchronized",   KEYWORD_SYNCHRONIZED,   { 0, 0, 0, 1, 0 } },
+	{ "task",           KEYWORD_TASK,           { 0, 0, 0, 0, 1 } },
+	{ "template",       KEYWORD_TEMPLATE,       { 0, 1, 0, 0, 0 } },
+	{ "this",           KEYWORD_THIS,           { 0, 1, 1, 1, 0 } },
+	{ "throw",          KEYWORD_THROW,          { 0, 1, 1, 1, 0 } },
+	{ "throws",         KEYWORD_THROWS,         { 0, 0, 0, 1, 0 } },
+	{ "trans",          KEYWORD_TRANS,          { 0, 0, 0, 0, 1 } },
+	{ "transition",     KEYWORD_TRANSITION,     { 0, 0, 0, 0, 1 } },
+	{ "transient",      KEYWORD_TRANSIENT,      { 0, 0, 0, 1, 0 } },
+	{ "try",            KEYWORD_TRY,            { 0, 1, 1, 0, 0 } },
+	{ "typedef",        KEYWORD_TYPEDEF,        { 1, 1, 1, 0, 1 } },
+	{ "typename",       KEYWORD_TYPENAME,       { 0, 1, 0, 0, 0 } },
+	{ "uint",           KEYWORD_UINT,           { 0, 0, 1, 0, 0 } },
+	{ "ulong",          KEYWORD_ULONG,          { 0, 0, 1, 0, 0 } },
+	{ "union",          KEYWORD_UNION,          { 1, 1, 0, 0, 0 } },
+	{ "unsigned",       KEYWORD_UNSIGNED,       { 1, 1, 1, 0, 0 } },
+	{ "ushort",         KEYWORD_USHORT,         { 0, 0, 1, 0, 0 } },
+	{ "using",          KEYWORD_USING,          { 0, 1, 1, 0, 0 } },
+	{ "virtual",        KEYWORD_VIRTUAL,        { 0, 1, 1, 0, 1 } },
+	{ "void",           KEYWORD_VOID,           { 1, 1, 1, 1, 1 } },
+	{ "volatile",       KEYWORD_VOLATILE,       { 1, 1, 1, 1, 0 } },
+	{ "wchar_t",        KEYWORD_WCHAR_T,        { 1, 1, 1, 0, 0 } },
+	{ "while",          KEYWORD_WHILE,          { 1, 1, 1, 1, 0 } }
+};
+
+/*
+*   FUNCTION PROTOTYPES
+*/
+static void createTags (const unsigned int nestLevel, statementInfo *const parent);
+
+/*
+*   FUNCTION DEFINITIONS
+*/
+
+extern boolean includingDefineTags (void)
+{
+	return CKinds [CK_DEFINE].enabled;
+}
+
+/*
+*   Token management
+*/
+
+static void initToken (tokenInfo* const token)
+{
+	token->type			= TOKEN_NONE;
+	token->keyword		= KEYWORD_NONE;
+	token->lineNumber	= getSourceLineNumber ();
+	token->filePosition	= getInputFilePosition ();
+	vStringClear (token->name);
+}
+
+static void advanceToken (statementInfo* const st)
+{
+	if (st->tokenIndex >= (unsigned int) NumTokens - 1)
+		st->tokenIndex = 0;
+	else
+		++st->tokenIndex;
+	initToken (st->token [st->tokenIndex]);
+}
+
+static tokenInfo *prevToken (const statementInfo *const st, unsigned int n)
+{
+	unsigned int tokenIndex;
+	unsigned int num = (unsigned int) NumTokens;
+	Assert (n < num);
+	tokenIndex = (st->tokenIndex + num - n) % num;
+	return st->token [tokenIndex];
+}
+
+static void setToken (statementInfo *const st, const tokenType type)
+{
+	tokenInfo *token;
+	token = activeToken (st);
+	initToken (token);
+	token->type = type;
+}
+
+static void retardToken (statementInfo *const st)
+{
+	if (st->tokenIndex == 0)
+		st->tokenIndex = (unsigned int) NumTokens - 1;
+	else
+		--st->tokenIndex;
+	setToken (st, TOKEN_NONE);
+}
+
+static tokenInfo *newToken (void)
+{
+	tokenInfo *const token = xMalloc (1, tokenInfo);
+	token->name = vStringNew ();
+	initToken (token);
+	return token;
+}
+
+static void deleteToken (tokenInfo *const token)
+{
+	if (token != NULL)
+	{
+		vStringDelete (token->name);
+		eFree (token);
+	}
+}
+
+static const char *accessString (const accessType access)
+{
+	static const char *const names [] = {
+		"?", "local", "private", "protected", "public", "default"
+	};
+	Assert (sizeof (names) / sizeof (names [0]) == ACCESS_COUNT);
+	Assert ((int) access < ACCESS_COUNT);
+	return names [(int) access];
+}
+
+static const char *implementationString (const impType imp)
+{
+	static const char *const names [] ={
+		"?", "abstract", "virtual", "pure virtual"
+	};
+	Assert (sizeof (names) / sizeof (names [0]) == IMP_COUNT);
+	Assert ((int) imp < IMP_COUNT);
+	return names [(int) imp];
+}
+
+/*
+*   Debugging functions
+*/
+
+#ifdef DEBUG
+
+#define boolString(c)   ((c) ? "TRUE" : "FALSE")
+
+static const char *tokenString (const tokenType type)
+{
+	static const char *const names [] = {
+		"none", "args", "}", "{", "colon", "comma", "double colon", "keyword",
+		"name", "package", "paren-name", "semicolon", "specifier"
+	};
+	Assert (sizeof (names) / sizeof (names [0]) == TOKEN_COUNT);
+	Assert ((int) type < TOKEN_COUNT);
+	return names [(int) type];
+}
+
+static const char *scopeString (const tagScope scope)
+{
+	static const char *const names [] = {
+		"global", "static", "extern", "friend", "typedef"
+	};
+	Assert (sizeof (names) / sizeof (names [0]) == SCOPE_COUNT);
+	Assert ((int) scope < SCOPE_COUNT);
+	return names [(int) scope];
+}
+
+static const char *declString (const declType declaration)
+{
+	static const char *const names [] = {
+		"?", "base", "class", "enum", "event", "function", "ignore",
+		"interface", "namespace", "no mangle", "package", "program",
+		"struct", "task", "union",
+	};
+	Assert (sizeof (names) / sizeof (names [0]) == DECL_COUNT);
+	Assert ((int) declaration < DECL_COUNT);
+	return names [(int) declaration];
+}
+
+static const char *keywordString (const keywordId keyword)
+{
+	const size_t count = sizeof (KeywordTable) / sizeof (KeywordTable [0]);
+	const char *name = "none";
+	size_t i;
+	for (i = 0  ;  i < count  ;  ++i)
+	{
+		const keywordDesc *p = &KeywordTable [i];
+		if (p->id == keyword)
+		{
+			name = p->name;
+			break;
+		}
+	}
+	return name;
+}
+
+static void pt (tokenInfo *const token)
+{
+	if (isType (token, TOKEN_NAME))
+		printf ("type: %-12s: %-13s   line: %lu\n",
+			tokenString (token->type), vStringValue (token->name),
+			token->lineNumber);
+	else if (isType (token, TOKEN_KEYWORD))
+		printf ("type: %-12s: %-13s   line: %lu\n",
+			tokenString (token->type), keywordString (token->keyword),
+			token->lineNumber);
+	else
+		printf ("type: %-12s                  line: %lu\n",
+			tokenString (token->type), token->lineNumber);
+}
+
+static void ps (statementInfo *const st)
+{
+	unsigned int i;
+	printf ("scope: %s   decl: %s   gotName: %s   gotParenName: %s\n",
+		scopeString (st->scope), declString (st->declaration),
+		boolString (st->gotName), boolString (st->gotParenName));
+	printf ("haveQualifyingName: %s\n", boolString (st->haveQualifyingName));
+	printf ("access: %s   default: %s\n", accessString (st->member.access),
+		accessString (st->member.accessDefault));
+	printf ("token  : ");
+	pt (activeToken (st));
+	for (i = 1  ;  i < (unsigned int) NumTokens  ;  ++i)
+	{
+		printf ("prev %u : ", i);
+		pt (prevToken (st, i));
+	}
+	printf ("context: ");
+	pt (st->context);
+}
+
+#endif
+
+/*
+*   Statement management
+*/
+
+static boolean isContextualKeyword (const tokenInfo *const token)
+{
+	boolean result;
+	switch (token->keyword)
+	{
+		case KEYWORD_CLASS:
+		case KEYWORD_ENUM:
+		case KEYWORD_INTERFACE:
+		case KEYWORD_NAMESPACE:
+		case KEYWORD_STRUCT:
+		case KEYWORD_UNION:
+			result = TRUE;
+			break;
+
+		default: result = FALSE; break;
+	}
+	return result;
+}
+
+static boolean isContextualStatement (const statementInfo *const st)
+{
+	boolean result = FALSE;
+	if (st != NULL) switch (st->declaration)
+	{
+		case DECL_CLASS:
+		case DECL_ENUM:
+		case DECL_INTERFACE:
+		case DECL_NAMESPACE:
+		case DECL_STRUCT:
+		case DECL_UNION:
+			result = TRUE;
+			break;
+
+		default: result = FALSE; break;
+	}
+	return result;
+}
+
+static boolean isMember (const statementInfo *const st)
+{
+	boolean result;
+	if (isType (st->context, TOKEN_NAME))
+		result = TRUE;
+	else
+		result = (boolean)
+			(st->parent != NULL && isContextualStatement (st->parent));
+	return result;
+}
+
+static void initMemberInfo (statementInfo *const st)
+{
+	accessType accessDefault = ACCESS_UNDEFINED;
+
+	if (st->parent != NULL) switch (st->parent->declaration)
+	{
+		case DECL_ENUM:
+			accessDefault = (isLanguage (Lang_java) ? ACCESS_PUBLIC : ACCESS_UNDEFINED);
+			break;
+		case DECL_NAMESPACE:
+			accessDefault = ACCESS_UNDEFINED;
+			break;
+
+		case DECL_CLASS:
+			if (isLanguage (Lang_java))
+				accessDefault = ACCESS_DEFAULT;
+			else
+				accessDefault = ACCESS_PRIVATE;
+			break;
+
+		case DECL_INTERFACE:
+		case DECL_STRUCT:
+		case DECL_UNION:
+			accessDefault = ACCESS_PUBLIC;
+			break;
+
+		default: break;
+	}
+	st->member.accessDefault = accessDefault;
+	st->member.access		 = accessDefault;
+}
+
+static void reinitStatement (statementInfo *const st, const boolean partial)
+{
+	unsigned int i;
+
+	if (! partial)
+	{
+		st->scope = SCOPE_GLOBAL;
+		if (isContextualStatement (st->parent))
+			st->declaration = DECL_BASE;
+		else
+			st->declaration = DECL_NONE;
+	}
+	st->gotParenName	= FALSE;
+	st->isPointer		= FALSE;
+	st->inFunction		= FALSE;
+	st->assignment		= FALSE;
+	st->notVariable		= FALSE;
+	st->implementation	= IMP_DEFAULT;
+	st->gotArgs			= FALSE;
+	st->gotName			= FALSE;
+	st->haveQualifyingName = FALSE;
+	st->tokenIndex		= 0;
+
+	if (st->parent != NULL)
+		st->inFunction = st->parent->inFunction;
+
+	for (i = 0  ;  i < (unsigned int) NumTokens  ;  ++i)
+		initToken (st->token [i]);
+
+	initToken (st->context);
+
+	/*	Keep the block name, so that a variable following after a comma will
+	 *	still have the structure name.
+	 */
+	if (! partial)
+		initToken (st->blockName);
+
+	vStringClear (st->parentClasses);
+
+	/*  Init member info.
+	 */
+	if (! partial)
+		st->member.access = st->member.accessDefault;
+}
+
+static void initStatement (statementInfo *const st, statementInfo *const parent)
+{
+	st->parent = parent;
+	initMemberInfo (st);
+	reinitStatement (st, FALSE);
+}
+
+/*
+*   Tag generation functions
+*/
+static cKind cTagKind (const tagType type)
+{
+	cKind result = CK_UNDEFINED;
+	switch (type)
+	{
+		case TAG_CLASS:      result = CK_CLASS;       break;
+		case TAG_ENUM:       result = CK_ENUMERATION; break;
+		case TAG_ENUMERATOR: result = CK_ENUMERATOR;  break;
+		case TAG_FUNCTION:   result = CK_FUNCTION;    break;
+		case TAG_LOCAL:      result = CK_LOCAL;       break;
+		case TAG_MEMBER:     result = CK_MEMBER;      break;
+		case TAG_NAMESPACE:  result = CK_NAMESPACE;   break;
+		case TAG_PROTOTYPE:  result = CK_PROTOTYPE;   break;
+		case TAG_STRUCT:     result = CK_STRUCT;      break;
+		case TAG_TYPEDEF:    result = CK_TYPEDEF;     break;
+		case TAG_UNION:      result = CK_UNION;       break;
+		case TAG_VARIABLE:   result = CK_VARIABLE;    break;
+		case TAG_EXTERN_VAR: result = CK_EXTERN_VARIABLE; break;
+
+		default: Assert ("Bad C tag type" == NULL); break;
+	}
+	return result;
+}
+
+static csharpKind csharpTagKind (const tagType type)
+{
+	csharpKind result = CSK_UNDEFINED;
+	switch (type)
+	{
+		case TAG_CLASS:      result = CSK_CLASS;           break;
+		case TAG_ENUM:       result = CSK_ENUMERATION;     break;
+		case TAG_ENUMERATOR: result = CSK_ENUMERATOR;      break;
+		case TAG_EVENT:      result = CSK_EVENT;           break;
+		case TAG_FIELD:      result = CSK_FIELD ;          break;
+		case TAG_INTERFACE:  result = CSK_INTERFACE;       break;
+		case TAG_LOCAL:      result = CSK_LOCAL;           break;
+		case TAG_METHOD:     result = CSK_METHOD;          break;
+		case TAG_NAMESPACE:  result = CSK_NAMESPACE;       break;
+		case TAG_PROPERTY:   result = CSK_PROPERTY;        break;
+		case TAG_STRUCT:     result = CSK_STRUCT;          break;
+		case TAG_TYPEDEF:    result = CSK_TYPEDEF;         break;
+
+		default: Assert ("Bad C# tag type" == NULL); break;
+	}
+	return result;
+}
+
+static javaKind javaTagKind (const tagType type)
+{
+	javaKind result = JK_UNDEFINED;
+	switch (type)
+	{
+		case TAG_CLASS:      result = JK_CLASS;         break;
+		case TAG_ENUM:       result = JK_ENUM;          break;
+		case TAG_ENUMERATOR: result = JK_ENUM_CONSTANT; break;
+		case TAG_FIELD:      result = JK_FIELD;         break;
+		case TAG_INTERFACE:  result = JK_INTERFACE;     break;
+		case TAG_LOCAL:      result = JK_LOCAL;         break;
+		case TAG_METHOD:     result = JK_METHOD;        break;
+		case TAG_PACKAGE:    result = JK_PACKAGE;       break;
+
+		default: Assert ("Bad Java tag type" == NULL); break;
+	}
+	return result;
+}
+
+static veraKind veraTagKind (const tagType type) {
+	veraKind result = VK_UNDEFINED;
+	switch (type)
+	{
+		case TAG_CLASS:      result = VK_CLASS;           break;
+		case TAG_ENUM:       result = VK_ENUMERATION;     break;
+		case TAG_ENUMERATOR: result = VK_ENUMERATOR;      break;
+		case TAG_FUNCTION:   result = VK_FUNCTION;        break;
+		case TAG_LOCAL:      result = VK_LOCAL;           break;
+		case TAG_MEMBER:     result = VK_MEMBER;          break;
+		case TAG_PROGRAM:    result = VK_PROGRAM;         break;
+		case TAG_PROTOTYPE:  result = VK_PROTOTYPE;       break;
+		case TAG_TASK:       result = VK_TASK;            break;
+		case TAG_TYPEDEF:    result = VK_TYPEDEF;         break;
+		case TAG_VARIABLE:   result = VK_VARIABLE;        break;
+		case TAG_EXTERN_VAR: result = VK_EXTERN_VARIABLE; break;
+
+		default: Assert ("Bad Vera tag type" == NULL); break;
+	}
+	return result;
+}
+
+static const char *tagName (const tagType type)
+{
+	const char* result;
+	if (isLanguage (Lang_csharp))
+		result = CsharpKinds [csharpTagKind (type)].name;
+	else if (isLanguage (Lang_java))
+		result = JavaKinds [javaTagKind (type)].name;
+	else if (isLanguage (Lang_vera))
+		result = VeraKinds [veraTagKind (type)].name;
+	else
+		result = CKinds [cTagKind (type)].name;
+	return result;
+}
+
+static int tagLetter (const tagType type)
+{
+	int result;
+	if (isLanguage (Lang_csharp))
+		result = CsharpKinds [csharpTagKind (type)].letter;
+	else if (isLanguage (Lang_java))
+		result = JavaKinds [javaTagKind (type)].letter;
+	else if (isLanguage (Lang_vera))
+		result = VeraKinds [veraTagKind (type)].letter;
+	else
+		result = CKinds [cTagKind (type)].letter;
+	return result;
+}
+
+static boolean includeTag (const tagType type, const boolean isFileScope)
+{
+	boolean result;
+	if (isFileScope  &&  ! Option.include.fileScope)
+		result = FALSE;
+	else if (isLanguage (Lang_csharp))
+		result = CsharpKinds [csharpTagKind (type)].enabled;
+	else if (isLanguage (Lang_java))
+		result = JavaKinds [javaTagKind (type)].enabled;
+	else if (isLanguage (Lang_vera))
+		result = VeraKinds [veraTagKind (type)].enabled;
+	else
+		result = CKinds [cTagKind (type)].enabled;
+	return result;
+}
+
+static tagType declToTagType (const declType declaration)
+{
+	tagType type = TAG_UNDEFINED;
+
+	switch (declaration)
+	{
+		case DECL_CLASS:        type = TAG_CLASS;       break;
+		case DECL_ENUM:         type = TAG_ENUM;        break;
+		case DECL_EVENT:        type = TAG_EVENT;       break;
+		case DECL_FUNCTION:     type = TAG_FUNCTION;    break;
+		case DECL_INTERFACE:    type = TAG_INTERFACE;   break;
+		case DECL_NAMESPACE:    type = TAG_NAMESPACE;   break;
+		case DECL_PROGRAM:      type = TAG_PROGRAM;     break;
+		case DECL_TASK:         type = TAG_TASK;        break;
+		case DECL_STRUCT:       type = TAG_STRUCT;      break;
+		case DECL_UNION:        type = TAG_UNION;       break;
+
+		default: Assert ("Unexpected declaration" == NULL); break;
+	}
+	return type;
+}
+
+static const char* accessField (const statementInfo *const st)
+{
+	const char* result = NULL;
+	if (isLanguage (Lang_cpp)  &&  st->scope == SCOPE_FRIEND)
+		result = "friend";
+	else if (st->member.access != ACCESS_UNDEFINED)
+		result = accessString (st->member.access);
+	return result;
+}
+
+static void addContextSeparator (vString *const scope)
+{
+	if (isLanguage (Lang_c)  ||  isLanguage (Lang_cpp))
+		vStringCatS (scope, "::");
+	else if (isLanguage (Lang_java) || isLanguage (Lang_csharp))
+		vStringCatS (scope, ".");
+}
+
+static void addOtherFields (tagEntryInfo* const tag, const tagType type,
+							const statementInfo *const st,
+							vString *const scope, vString *const typeRef)
+{
+	/*  For selected tag types, append an extension flag designating the
+	 *  parent object in which the tag is defined.
+	 */
+	switch (type)
+	{
+		default: break;
+
+		case TAG_FUNCTION:
+		case TAG_METHOD:
+		case TAG_PROTOTYPE:
+			if (vStringLength (Signature) > 0)
+				tag->extensionFields.signature = vStringValue (Signature);
+		case TAG_CLASS:
+		case TAG_ENUM:
+		case TAG_ENUMERATOR:
+		case TAG_EVENT:
+		case TAG_FIELD:
+		case TAG_INTERFACE:
+		case TAG_MEMBER:
+		case TAG_NAMESPACE:
+		case TAG_PROPERTY:
+		case TAG_STRUCT:
+		case TAG_TASK:
+		case TAG_TYPEDEF:
+		case TAG_UNION:
+			if (vStringLength (scope) > 0  &&
+				(isMember (st) || st->parent->declaration == DECL_NAMESPACE))
+			{
+				if (isType (st->context, TOKEN_NAME))
+					tag->extensionFields.scope [0] = tagName (TAG_CLASS);
+				else
+					tag->extensionFields.scope [0] =
+						tagName (declToTagType (parentDecl (st)));
+				tag->extensionFields.scope [1] = vStringValue (scope);
+			}
+			if ((type == TAG_CLASS  ||  type == TAG_INTERFACE  ||
+				 type == TAG_STRUCT) && vStringLength (st->parentClasses) > 0)
+			{
+
+				tag->extensionFields.inheritance =
+						vStringValue (st->parentClasses);
+			}
+			if (st->implementation != IMP_DEFAULT &&
+				(isLanguage (Lang_cpp) || isLanguage (Lang_csharp) ||
+				 isLanguage (Lang_java)))
+			{
+				tag->extensionFields.implementation =
+						implementationString (st->implementation);
+			}
+			if (isMember (st))
+			{
+				tag->extensionFields.access = accessField (st);
+			}
+			break;
+	}
+
+	/* Add typename info, type of the tag and name of struct/union/etc. */
+	if ((type == TAG_TYPEDEF || type == TAG_VARIABLE || type == TAG_MEMBER)
+			&& isContextualStatement(st))
+	{
+		char *p;
+
+		tag->extensionFields.typeRef [0] =
+						tagName (declToTagType (st->declaration));
+		p = vStringValue (st->blockName->name);
+
+		/*  If there was no {} block get the name from the token before the
+		 *  name (current token is ';' or ',', previous token is the name).
+		 */
+		if (p == NULL || *p == '\0')
+		{
+			tokenInfo *const prev2 = prevToken (st, 2);
+			if (isType (prev2, TOKEN_NAME))
+				p = vStringValue (prev2->name);
+		}
+
+		/* Prepend the scope name if there is one. */
+		if (vStringLength (scope) > 0)
+		{
+			vStringCopy(typeRef, scope);
+			addContextSeparator (typeRef);
+			vStringCatS(typeRef, p);
+			p = vStringValue (typeRef);
+		}
+		tag->extensionFields.typeRef [1] = p;
+	}
+}
+
+static void findScopeHierarchy (vString *const string,
+								const statementInfo *const st)
+{
+	vStringClear (string);
+	if (isType (st->context, TOKEN_NAME))
+		vStringCopy (string, st->context->name);
+	if (st->parent != NULL)
+	{
+		vString *temp = vStringNew ();
+		const statementInfo *s;
+		for (s = st->parent  ;  s != NULL  ;  s = s->parent)
+		{
+			if (isContextualStatement (s) ||
+				s->declaration == DECL_NAMESPACE ||
+				s->declaration == DECL_PROGRAM)
+			{
+				vStringCopy (temp, string);
+				vStringClear (string);
+				Assert (isType (s->blockName, TOKEN_NAME));
+				if (isType (s->context, TOKEN_NAME) &&
+					vStringLength (s->context->name) > 0)
+				{
+					vStringCat (string, s->context->name);
+					addContextSeparator (string);
+				}
+				vStringCat (string, s->blockName->name);
+				if (vStringLength (temp) > 0)
+					addContextSeparator (string);
+				vStringCat (string, temp);
+			}
+		}
+		vStringDelete (temp);
+	}
+}
+
+static void makeExtraTagEntry (const tagType type, tagEntryInfo *const e,
+							   vString *const scope)
+{
+	if (Option.include.qualifiedTags  &&
+		scope != NULL  &&  vStringLength (scope) > 0)
+	{
+		vString *const scopedName = vStringNew ();
+
+		if (type != TAG_ENUMERATOR)
+			vStringCopy (scopedName, scope);
+		else
+		{
+			/* remove last component (i.e. enumeration name) from scope */
+			const char* const sc = vStringValue (scope);
+			const char* colon = strrchr (sc, ':');
+			if (colon != NULL)
+			{
+				while (*colon == ':'  &&  colon > sc)
+					--colon;
+				vStringNCopy (scopedName, scope, colon + 1 - sc);
+			}
+		}
+		if (vStringLength (scopedName) > 0)
+		{
+			addContextSeparator (scopedName);
+			vStringCatS (scopedName, e->name);
+			e->name = vStringValue (scopedName);
+			makeTagEntry (e);
+		}
+		vStringDelete (scopedName);
+	}
+}
+
+static void makeTag (const tokenInfo *const token,
+					 const statementInfo *const st,
+					 boolean isFileScope, const tagType type)
+{
+	/*  Nothing is really of file scope when it appears in a header file.
+	 */
+	isFileScope = (boolean) (isFileScope && ! isHeaderFile ());
+
+	if (isType (token, TOKEN_NAME)  &&  vStringLength (token->name) > 0  &&
+		includeTag (type, isFileScope))
+	{
+		vString *scope = vStringNew ();
+		/* Use "typeRef" to store the typename from addOtherFields() until
+		 * it's used in makeTagEntry().
+		 */
+		vString *typeRef = vStringNew ();
+		tagEntryInfo e;
+
+		initTagEntry (&e, vStringValue (token->name));
+
+		e.lineNumber	= token->lineNumber;
+		e.filePosition	= token->filePosition;
+		e.isFileScope	= isFileScope;
+		e.kindName		= tagName (type);
+		e.kind			= tagLetter (type);
+
+		findScopeHierarchy (scope, st);
+		addOtherFields (&e, type, st, scope, typeRef);
+
+		makeTagEntry (&e);
+		makeExtraTagEntry (type, &e, scope);
+		vStringDelete (scope);
+		vStringDelete (typeRef);
+	}
+}
+
+static boolean isValidTypeSpecifier (const declType declaration)
+{
+	boolean result;
+	switch (declaration)
+	{
+		case DECL_BASE:
+		case DECL_CLASS:
+		case DECL_ENUM:
+		case DECL_EVENT:
+		case DECL_STRUCT:
+		case DECL_UNION:
+			result = TRUE;
+			break;
+
+		default:
+			result = FALSE;
+			break;
+	}
+	return result;
+}
+
+static void qualifyEnumeratorTag (const statementInfo *const st,
+								  const tokenInfo *const nameToken)
+{
+	if (isType (nameToken, TOKEN_NAME))
+		makeTag (nameToken, st, TRUE, TAG_ENUMERATOR);
+}
+
+static void qualifyFunctionTag (const statementInfo *const st,
+								const tokenInfo *const nameToken)
+{
+	if (isType (nameToken, TOKEN_NAME))
+	{
+		tagType type;
+		const boolean isFileScope =
+						(boolean) (st->member.access == ACCESS_PRIVATE ||
+						(!isMember (st)  &&  st->scope == SCOPE_STATIC));
+		if (isLanguage (Lang_java) || isLanguage (Lang_csharp))
+			type = TAG_METHOD;
+		else if (isLanguage (Lang_vera)  &&  st->declaration == DECL_TASK)
+			type = TAG_TASK;
+		else
+			type = TAG_FUNCTION;
+		makeTag (nameToken, st, isFileScope, type);
+	}
+}
+
+static void qualifyFunctionDeclTag (const statementInfo *const st,
+									const tokenInfo *const nameToken)
+{
+	if (! isType (nameToken, TOKEN_NAME))
+		;
+	else if (isLanguage (Lang_java) || isLanguage (Lang_csharp))
+		qualifyFunctionTag (st, nameToken);
+	else if (st->scope == SCOPE_TYPEDEF)
+		makeTag (nameToken, st, TRUE, TAG_TYPEDEF);
+	else if (isValidTypeSpecifier (st->declaration) && ! isLanguage (Lang_csharp))
+		makeTag (nameToken, st, TRUE, TAG_PROTOTYPE);
+}
+
+static void qualifyCompoundTag (const statementInfo *const st,
+								const tokenInfo *const nameToken)
+{
+	if (isType (nameToken, TOKEN_NAME))
+	{
+		const tagType type = declToTagType (st->declaration);
+		const boolean fileScoped = (boolean)
+				(!(isLanguage (Lang_java) ||
+				   isLanguage (Lang_csharp) ||
+				   isLanguage (Lang_vera)));
+
+		if (type != TAG_UNDEFINED)
+			makeTag (nameToken, st, fileScoped, type);
+	}
+}
+
+static void qualifyBlockTag (statementInfo *const st,
+							 const tokenInfo *const nameToken)
+{
+	switch (st->declaration)
+	{
+		case DECL_CLASS:
+		case DECL_ENUM:
+		case DECL_INTERFACE:
+		case DECL_NAMESPACE:
+		case DECL_PROGRAM:
+		case DECL_STRUCT:
+		case DECL_UNION:
+			qualifyCompoundTag (st, nameToken);
+			break;
+		default: break;
+	}
+}
+
+static void qualifyVariableTag (const statementInfo *const st,
+								const tokenInfo *const nameToken)
+{
+	/*	We have to watch that we do not interpret a declaration of the
+	 *	form "struct tag;" as a variable definition. In such a case, the
+	 *	token preceding the name will be a keyword.
+	 */
+	if (! isType (nameToken, TOKEN_NAME))
+		;
+	else if (st->scope == SCOPE_TYPEDEF)
+		makeTag (nameToken, st, TRUE, TAG_TYPEDEF);
+	else if (st->declaration == DECL_EVENT)
+		makeTag (nameToken, st, (boolean) (st->member.access == ACCESS_PRIVATE),
+				TAG_EVENT);
+	else if (st->declaration == DECL_PACKAGE)
+		makeTag (nameToken, st, FALSE, TAG_PACKAGE);
+	else if (isValidTypeSpecifier (st->declaration))
+	{
+		if (st->notVariable)
+			;
+		else if (isMember (st))
+		{
+			if (isLanguage (Lang_java) || isLanguage (Lang_csharp))
+				makeTag (nameToken, st,
+						(boolean) (st->member.access == ACCESS_PRIVATE), TAG_FIELD);
+			else if (st->scope == SCOPE_GLOBAL  ||  st->scope == SCOPE_STATIC)
+				makeTag (nameToken, st, TRUE, TAG_MEMBER);
+		}
+		else
+		{
+			if (st->scope == SCOPE_EXTERN  ||  ! st->haveQualifyingName)
+				makeTag (nameToken, st, FALSE, TAG_EXTERN_VAR);
+			else if (st->inFunction)
+				makeTag (nameToken, st, (boolean) (st->scope == SCOPE_STATIC),
+						TAG_LOCAL);
+			else
+				makeTag (nameToken, st, (boolean) (st->scope == SCOPE_STATIC),
+						TAG_VARIABLE);
+		}
+	}
+}
+
+/*
+*   Parsing functions
+*/
+
+static int skipToOneOf (const char *const chars)
+{
+	int c;
+	do
+		c = cppGetc ();
+	while (c != EOF  &&  c != '\0'  &&  strchr (chars, c) == NULL);
+	return c;
+}
+
+/*  Skip to the next non-white character.
+ */
+static int skipToNonWhite (void)
+{
+	boolean found = FALSE;
+	int c;
+
+#if 0
+	do
+		c = cppGetc ();
+	while (isspace (c));
+#else
+	while (1)
+	{
+		c = cppGetc ();
+		if (isspace (c))
+			found = TRUE;
+		else
+			break;
+	}
+	if (CollectingSignature && found)
+		vStringPut (Signature, ' ');
+#endif
+
+	return c;
+}
+
+/*  Skips to the next brace in column 1. This is intended for cases where
+ *  preprocessor constructs result in unbalanced braces.
+ */
+static void skipToFormattedBraceMatch (void)
+{
+	int c, next;
+
+	c = cppGetc ();
+	next = cppGetc ();
+	while (c != EOF  &&  (c != '\n'  ||  next != '}'))
+	{
+		c = next;
+		next = cppGetc ();
+	}
+}
+
+/*  Skip to the matching character indicated by the pair string. If skipping
+ *  to a matching brace and any brace is found within a different level of a
+ *  #if conditional statement while brace formatting is in effect, we skip to
+ *  the brace matched by its formatting. It is assumed that we have already
+ *  read the character which starts the group (i.e. the first character of
+ *  "pair").
+ */
+static void skipToMatch (const char *const pair)
+{
+	const boolean braceMatching = (boolean) (strcmp ("{}", pair) == 0);
+	const boolean braceFormatting = (boolean) (isBraceFormat () && braceMatching);
+	const unsigned int initialLevel = getDirectiveNestLevel ();
+	const int begin = pair [0], end = pair [1];
+	const unsigned long inputLineNumber = getInputLineNumber ();
+	int matchLevel = 1;
+	int c = '\0';
+
+	while (matchLevel > 0  &&  (c = skipToNonWhite ()) != EOF)
+	{
+		if (CollectingSignature)
+			vStringPut (Signature, c);
+		if (c == begin)
+		{
+			++matchLevel;
+			if (braceFormatting  &&  getDirectiveNestLevel () != initialLevel)
+			{
+				skipToFormattedBraceMatch ();
+				break;
+			}
+		}
+		else if (c == end)
+		{
+			--matchLevel;
+			if (braceFormatting  &&  getDirectiveNestLevel () != initialLevel)
+			{
+				skipToFormattedBraceMatch ();
+				break;
+			}
+		}
+	}
+	if (c == EOF)
+	{
+		verbose ("%s: failed to find match for '%c' at line %lu\n",
+				getInputFileName (), begin, inputLineNumber);
+		if (braceMatching)
+			longjmp (Exception, (int) ExceptionBraceFormattingError);
+		else
+			longjmp (Exception, (int) ExceptionFormattingError);
+	}
+}
+
+static void skipParens (void)
+{
+	const int c = skipToNonWhite ();
+
+	if (c == '(')
+		skipToMatch ("()");
+	else
+		cppUngetc (c);
+}
+
+static void skipBraces (void)
+{
+	const int c = skipToNonWhite ();
+
+	if (c == '{')
+		skipToMatch ("{}");
+	else
+		cppUngetc (c);
+}
+
+static keywordId analyzeKeyword (const char *const name)
+{
+	const keywordId id = (keywordId) lookupKeyword (name, getSourceLanguage ());
+	return id;
+}
+
+static void analyzeIdentifier (tokenInfo *const token)
+{
+	char *const name = vStringValue (token->name);
+	const char *replacement = NULL;
+	boolean parensToo = FALSE;
+
+	if (isLanguage (Lang_java)  ||
+		! isIgnoreToken (name, &parensToo, &replacement))
+	{
+		if (replacement != NULL)
+			token->keyword = analyzeKeyword (replacement);
+		else
+			token->keyword = analyzeKeyword (vStringValue (token->name));
+
+		if (token->keyword == KEYWORD_NONE)
+			token->type = TOKEN_NAME;
+		else
+			token->type = TOKEN_KEYWORD;
+	}
+	else
+	{
+		initToken (token);
+		if (parensToo)
+		{
+			int c = skipToNonWhite ();
+
+			if (c == '(')
+				skipToMatch ("()");
+		}
+	}
+}
+
+static void readIdentifier (tokenInfo *const token, const int firstChar)
+{
+	vString *const name = token->name;
+	int c = firstChar;
+	boolean first = TRUE;
+
+	initToken (token);
+
+	/* Bug #1585745: strangely, C++ destructors allow whitespace between
+	 * the ~ and the class name. */
+	if (isLanguage (Lang_cpp) && firstChar == '~')
+	{
+		vStringPut (name, c);
+		c = skipToNonWhite ();
+	}
+
+	do
+	{
+		vStringPut (name, c);
+		if (CollectingSignature)
+		{
+			if (!first)
+				vStringPut (Signature, c);
+			first = FALSE;
+		}
+		c = cppGetc ();
+	} while (isident (c) || ((isLanguage (Lang_java) || isLanguage (Lang_csharp)) && (isHighChar (c) || c == '.')));
+	vStringTerminate (name);
+	cppUngetc (c);        /* unget non-identifier character */
+
+	analyzeIdentifier (token);
+}
+
+static void readPackageName (tokenInfo *const token, const int firstChar)
+{
+	vString *const name = token->name;
+	int c = firstChar;
+
+	initToken (token);
+
+	while (isident (c)  ||  c == '.')
+	{
+		vStringPut (name, c);
+		c = cppGetc ();
+	}
+	vStringTerminate (name);
+	cppUngetc (c);        /* unget non-package character */
+}
+
+static void readPackageOrNamespace (statementInfo *const st, const declType declaration)
+{
+	st->declaration = declaration;
+	
+	if (declaration == DECL_NAMESPACE && !isLanguage (Lang_csharp))
+	{
+		/* In C++ a namespace is specified one level at a time. */
+		return;
+	}
+	else
+	{
+		/* In C#, a namespace can also be specified like a Java package name. */
+		tokenInfo *const token = activeToken (st);
+		Assert (isType (token, TOKEN_KEYWORD));
+		readPackageName (token, skipToNonWhite ());
+		token->type = TOKEN_NAME;
+		st->gotName = TRUE;
+		st->haveQualifyingName = TRUE;
+	}
+}
+
+static void processName (statementInfo *const st)
+{
+	Assert (isType (activeToken (st), TOKEN_NAME));
+	if (st->gotName  &&  st->declaration == DECL_NONE)
+		st->declaration = DECL_BASE;
+	st->gotName = TRUE;
+	st->haveQualifyingName = TRUE;
+}
+
+static void readOperator (statementInfo *const st)
+{
+	const char *const acceptable = "+-*/%^&|~!=<>,[]";
+	const tokenInfo* const prev = prevToken (st,1);
+	tokenInfo *const token = activeToken (st);
+	vString *const name = token->name;
+	int c = skipToNonWhite ();
+
+	/*  When we arrive here, we have the keyword "operator" in 'name'.
+	 */
+	if (isType (prev, TOKEN_KEYWORD) && (prev->keyword == KEYWORD_ENUM ||
+		 prev->keyword == KEYWORD_STRUCT || prev->keyword == KEYWORD_UNION))
+		;        /* ignore "operator" keyword if preceded by these keywords */
+	else if (c == '(')
+	{
+		/*  Verify whether this is a valid function call (i.e. "()") operator.
+		 */
+		if (cppGetc () == ')')
+		{
+			vStringPut (name, ' ');  /* always separate operator from keyword */
+			c = skipToNonWhite ();
+			if (c == '(')
+				vStringCatS (name, "()");
+		}
+		else
+		{
+			skipToMatch ("()");
+			c = cppGetc ();
+		}
+	}
+	else if (isident1 (c))
+	{
+		/*  Handle "new" and "delete" operators, and conversion functions
+		 *  (per 13.3.1.1.2 [2] of the C++ spec).
+		 */
+		boolean whiteSpace = TRUE;  /* default causes insertion of space */
+		do
+		{
+			if (isspace (c))
+				whiteSpace = TRUE;
+			else
+			{
+				if (whiteSpace)
+				{
+					vStringPut (name, ' ');
+					whiteSpace = FALSE;
+				}
+				vStringPut (name, c);
+			}
+			c = cppGetc ();
+		} while (! isOneOf (c, "(;")  &&  c != EOF);
+		vStringTerminate (name);
+	}
+	else if (isOneOf (c, acceptable))
+	{
+		vStringPut (name, ' ');  /* always separate operator from keyword */
+		do
+		{
+			vStringPut (name, c);
+			c = cppGetc ();
+		} while (isOneOf (c, acceptable));
+		vStringTerminate (name);
+	}
+
+	cppUngetc (c);
+
+	token->type	= TOKEN_NAME;
+	token->keyword = KEYWORD_NONE;
+	processName (st);
+}
+
+static void copyToken (tokenInfo *const dest, const tokenInfo *const src)
+{
+	dest->type         = src->type;
+	dest->keyword      = src->keyword;
+	dest->filePosition = src->filePosition;
+	dest->lineNumber   = src->lineNumber;
+	vStringCopy (dest->name, src->name);
+}
+
+static void setAccess (statementInfo *const st, const accessType access)
+{
+	if (isMember (st))
+	{
+		if (isLanguage (Lang_cpp))
+		{
+			int c = skipToNonWhite ();
+
+			if (c == ':')
+				reinitStatement (st, FALSE);
+			else
+				cppUngetc (c);
+
+			st->member.accessDefault = access;
+		}
+		st->member.access = access;
+	}
+}
+
+static void discardTypeList (tokenInfo *const token)
+{
+	int c = skipToNonWhite ();
+	while (isident1 (c))
+	{
+		readIdentifier (token, c);
+		c = skipToNonWhite ();
+		if (c == '.'  ||  c == ',')
+			c = skipToNonWhite ();
+	}
+	cppUngetc (c);
+}
+
+static void addParentClass (statementInfo *const st, tokenInfo *const token)
+{
+	if (vStringLength (token->name) > 0  &&
+		vStringLength (st->parentClasses) > 0)
+	{
+		vStringPut (st->parentClasses, ',');
+	}
+	vStringCat (st->parentClasses, token->name);
+}
+
+static void readParents (statementInfo *const st, const int qualifier)
+{
+	tokenInfo *const token = newToken ();
+	tokenInfo *const parent = newToken ();
+	int c;
+
+	do
+	{
+		c = skipToNonWhite ();
+		if (isident1 (c))
+		{
+			readIdentifier (token, c);
+			if (isType (token, TOKEN_NAME))
+				vStringCat (parent->name, token->name);
+			else
+			{
+				addParentClass (st, parent);
+				initToken (parent);
+			}
+		}
+		else if (c == qualifier)
+			vStringPut (parent->name, c);
+		else if (c == '<')
+			skipToMatch ("<>");
+		else if (isType (token, TOKEN_NAME))
+		{
+			addParentClass (st, parent);
+			initToken (parent);
+		}
+	} while (c != '{'  &&  c != EOF);
+	cppUngetc (c);
+	deleteToken (parent);
+	deleteToken (token);
+}
+
+static void skipStatement (statementInfo *const st)
+{
+	st->declaration = DECL_IGNORE;
+	skipToOneOf (";");
+}
+
+static void processInterface (statementInfo *const st)
+{
+	st->declaration = DECL_INTERFACE;
+}
+
+static void processToken (tokenInfo *const token, statementInfo *const st)
+{
+	switch (token->keyword)        /* is it a reserved word? */
+	{
+		default: break;
+
+		case KEYWORD_NONE:      processName (st);                       break;
+		case KEYWORD_ABSTRACT:  st->implementation = IMP_ABSTRACT;      break;
+		case KEYWORD_ATTRIBUTE: skipParens (); initToken (token);       break;
+		case KEYWORD_BIND:      st->declaration = DECL_BASE;            break;
+		case KEYWORD_BIT:       st->declaration = DECL_BASE;            break;
+		case KEYWORD_CATCH:     skipParens (); skipBraces ();           break;
+		case KEYWORD_CHAR:      st->declaration = DECL_BASE;            break;
+		case KEYWORD_CLASS:     st->declaration = DECL_CLASS;           break;
+		case KEYWORD_CONST:     st->declaration = DECL_BASE;            break;
+		case KEYWORD_DOUBLE:    st->declaration = DECL_BASE;            break;
+		case KEYWORD_ENUM:      st->declaration = DECL_ENUM;            break;
+		case KEYWORD_EXTENDS:   readParents (st, '.');
+		                        setToken (st, TOKEN_NONE);              break;
+		case KEYWORD_FLOAT:     st->declaration = DECL_BASE;            break;
+		case KEYWORD_FUNCTION:  st->declaration = DECL_BASE;            break;
+		case KEYWORD_FRIEND:    st->scope       = SCOPE_FRIEND;         break;
+		case KEYWORD_GOTO:      skipStatement (st);                     break;
+		case KEYWORD_IMPLEMENTS:readParents (st, '.');
+		                        setToken (st, TOKEN_NONE);              break;
+		case KEYWORD_IMPORT:    skipStatement (st);                     break;
+		case KEYWORD_INT:       st->declaration = DECL_BASE;            break;
+		case KEYWORD_INTEGER:   st->declaration = DECL_BASE;            break;
+		case KEYWORD_INTERFACE: processInterface (st);                  break;
+		case KEYWORD_LOCAL:     setAccess (st, ACCESS_LOCAL);           break;
+		case KEYWORD_LONG:      st->declaration = DECL_BASE;            break;
+		case KEYWORD_OPERATOR:  readOperator (st);                      break;
+		case KEYWORD_PRIVATE:   setAccess (st, ACCESS_PRIVATE);         break;
+		case KEYWORD_PROGRAM:   st->declaration = DECL_PROGRAM;         break;
+		case KEYWORD_PROTECTED: setAccess (st, ACCESS_PROTECTED);       break;
+		case KEYWORD_PUBLIC:    setAccess (st, ACCESS_PUBLIC);          break;
+		case KEYWORD_RETURN:    skipStatement (st);                     break;
+		case KEYWORD_SHORT:     st->declaration = DECL_BASE;            break;
+		case KEYWORD_SIGNED:    st->declaration = DECL_BASE;            break;
+		case KEYWORD_STRING:    st->declaration = DECL_BASE;            break;
+		case KEYWORD_STRUCT:    st->declaration = DECL_STRUCT;          break;
+		case KEYWORD_TASK:      st->declaration = DECL_TASK;            break;
+		case KEYWORD_THROWS:    discardTypeList (token);                break;
+		case KEYWORD_UNION:     st->declaration = DECL_UNION;           break;
+		case KEYWORD_UNSIGNED:  st->declaration = DECL_BASE;            break;
+		case KEYWORD_USING:     skipStatement (st);                     break;
+		case KEYWORD_VOID:      st->declaration = DECL_BASE;            break;
+		case KEYWORD_VOLATILE:  st->declaration = DECL_BASE;            break;
+		case KEYWORD_VIRTUAL:   st->implementation = IMP_VIRTUAL;       break;
+		case KEYWORD_WCHAR_T:   st->declaration = DECL_BASE;            break;
+		
+		case KEYWORD_NAMESPACE: readPackageOrNamespace (st, DECL_NAMESPACE); break;
+		case KEYWORD_PACKAGE:   readPackageOrNamespace (st, DECL_PACKAGE);   break;
+		
+		case KEYWORD_EVENT:
+			if (isLanguage (Lang_csharp))
+				st->declaration = DECL_EVENT;
+			break;
+
+		case KEYWORD_TYPEDEF:
+			reinitStatement (st, FALSE);
+			st->scope = SCOPE_TYPEDEF;
+			break;
+
+		case KEYWORD_EXTERN:
+			if (! isLanguage (Lang_csharp) || !st->gotName)
+			{
+				reinitStatement (st, FALSE);
+				st->scope = SCOPE_EXTERN;
+				st->declaration = DECL_BASE;
+			}
+			break;
+
+		case KEYWORD_STATIC:
+			if (! (isLanguage (Lang_java) || isLanguage (Lang_csharp)))
+			{
+				reinitStatement (st, FALSE);
+				st->scope = SCOPE_STATIC;
+				st->declaration = DECL_BASE;
+			}
+			break;
+
+		case KEYWORD_FOR:
+		case KEYWORD_FOREACH:
+		case KEYWORD_IF:
+		case KEYWORD_SWITCH:
+		case KEYWORD_WHILE:
+		{
+			int c = skipToNonWhite ();
+			if (c == '(')
+				skipToMatch ("()");
+			break;
+		}
+	}
+}
+
+/*
+*   Parenthesis handling functions
+*/
+
+static void restartStatement (statementInfo *const st)
+{
+	tokenInfo *const save = newToken ();
+	tokenInfo *token = activeToken (st);
+
+	copyToken (save, token);
+	DebugStatement ( if (debug (DEBUG_PARSE)) printf ("<ES>");)
+	reinitStatement (st, FALSE);
+	token = activeToken (st);
+	copyToken (token, save);
+	deleteToken (save);
+	processToken (token, st);
+}
+
+/*  Skips over a the mem-initializer-list of a ctor-initializer, defined as:
+ *
+ *  mem-initializer-list:
+ *    mem-initializer, mem-initializer-list
+ *
+ *  mem-initializer:
+ *    [::] [nested-name-spec] class-name (...)
+ *    identifier
+ */
+static void skipMemIntializerList (tokenInfo *const token)
+{
+	int c;
+
+	do
+	{
+		c = skipToNonWhite ();
+		while (isident1 (c)  ||  c == ':')
+		{
+			if (c != ':')
+				readIdentifier (token, c);
+			c = skipToNonWhite ();
+		}
+		if (c == '<')
+		{
+			skipToMatch ("<>");
+			c = skipToNonWhite ();
+		}
+		if (c == '(')
+		{
+			skipToMatch ("()");
+			c = skipToNonWhite ();
+		}
+	} while (c == ',');
+	cppUngetc (c);
+}
+
+static void skipMacro (statementInfo *const st)
+{
+	tokenInfo *const prev2 = prevToken (st, 2);
+
+	if (isType (prev2, TOKEN_NAME))
+		retardToken (st);
+	skipToMatch ("()");
+}
+
+/*  Skips over characters following the parameter list. This will be either
+ *  non-ANSI style function declarations or C++ stuff. Our choices:
+ *
+ *  C (K&R):
+ *    int func ();
+ *    int func (one, two) int one; float two; {...}
+ *  C (ANSI):
+ *    int func (int one, float two);
+ *    int func (int one, float two) {...}
+ *  C++:
+ *    int foo (...) [const|volatile] [throw (...)];
+ *    int foo (...) [const|volatile] [throw (...)] [ctor-initializer] {...}
+ *    int foo (...) [const|volatile] [throw (...)] try [ctor-initializer] {...}
+ *        catch (...) {...}
+ */
+static boolean skipPostArgumentStuff (
+		statementInfo *const st, parenInfo *const info)
+{
+	tokenInfo *const token = activeToken (st);
+	unsigned int parameters = info->parameterCount;
+	unsigned int elementCount = 0;
+	boolean restart = FALSE;
+	boolean end = FALSE;
+	int c = skipToNonWhite ();
+
+	do
+	{
+		switch (c)
+		{
+		case ')':                               break;
+		case ':': skipMemIntializerList (token);break;  /* ctor-initializer */
+		case '[': skipToMatch ("[]");           break;
+		case '=': cppUngetc (c); end = TRUE;    break;
+		case '{': cppUngetc (c); end = TRUE;    break;
+		case '}': cppUngetc (c); end = TRUE;    break;
+
+		case '(':
+			if (elementCount > 0)
+				++elementCount;
+			skipToMatch ("()");
+			break;
+
+		case ';':
+			if (parameters == 0  ||  elementCount < 2)
+			{
+				cppUngetc (c);
+				end = TRUE;
+			}
+			else if (--parameters == 0)
+				end = TRUE;
+			break;
+
+		default:
+			if (isident1 (c))
+			{
+				readIdentifier (token, c);
+				switch (token->keyword)
+				{
+				case KEYWORD_ATTRIBUTE: skipParens ();  break;
+				case KEYWORD_THROW:     skipParens ();  break;
+				case KEYWORD_TRY:                       break;
+
+				case KEYWORD_CONST:
+				case KEYWORD_VOLATILE:
+					if (vStringLength (Signature) > 0)
+					{
+						vStringPut (Signature, ' ');
+						vStringCat (Signature, token->name);
+					}
+					break;
+
+				case KEYWORD_CATCH:
+				case KEYWORD_CLASS:
+				case KEYWORD_EXPLICIT:
+				case KEYWORD_EXTERN:
+				case KEYWORD_FRIEND:
+				case KEYWORD_INLINE:
+				case KEYWORD_MUTABLE:
+				case KEYWORD_NAMESPACE:
+				case KEYWORD_NEW:
+				case KEYWORD_NEWCOV:
+				case KEYWORD_OPERATOR:
+				case KEYWORD_OVERLOAD:
+				case KEYWORD_PRIVATE:
+				case KEYWORD_PROTECTED:
+				case KEYWORD_PUBLIC:
+				case KEYWORD_STATIC:
+				case KEYWORD_TEMPLATE:
+				case KEYWORD_TYPEDEF:
+				case KEYWORD_TYPENAME:
+				case KEYWORD_USING:
+				case KEYWORD_VIRTUAL:
+					/* Never allowed within parameter declarations. */
+					restart = TRUE;
+					end = TRUE;
+					break;
+
+				default:
+					if (isType (token, TOKEN_NONE))
+						;
+					else if (info->isKnrParamList  &&  info->parameterCount > 0)
+						++elementCount;
+					else
+					{
+						/*  If we encounter any other identifier immediately
+						 *  following an empty parameter list, this is almost
+						 *  certainly one of those Microsoft macro "thingies"
+						 *  that the automatic source code generation sticks
+						 *  in. Terminate the current statement.
+						 */
+						restart = TRUE;
+						end = TRUE;
+					}
+					break;
+				}
+			}
+		}
+		if (! end)
+		{
+			c = skipToNonWhite ();
+			if (c == EOF)
+				end = TRUE;
+		}
+	} while (! end);
+
+	if (restart)
+		restartStatement (st);
+	else
+		setToken (st, TOKEN_NONE);
+
+	return (boolean) (c != EOF);
+}
+
+static void skipJavaThrows (statementInfo *const st)
+{
+	tokenInfo *const token = activeToken (st);
+	int c = skipToNonWhite ();
+
+	if (isident1 (c))
+	{
+		readIdentifier (token, c);
+		if (token->keyword == KEYWORD_THROWS)
+		{
+			do
+			{
+				c = skipToNonWhite ();
+				if (isident1 (c))
+				{
+					readIdentifier (token, c);
+					c = skipToNonWhite ();
+				}
+			} while (c == '.'  ||  c == ',');
+		}
+	}
+	cppUngetc (c);
+	setToken (st, TOKEN_NONE);
+}
+
+static void analyzePostParens (statementInfo *const st, parenInfo *const info)
+{
+	const unsigned long inputLineNumber = getInputLineNumber ();
+	int c = skipToNonWhite ();
+
+	cppUngetc (c);
+	if (isOneOf (c, "{;,="))
+		;
+	else if (isLanguage (Lang_java))
+		skipJavaThrows (st);
+	else
+	{
+		if (! skipPostArgumentStuff (st, info))
+		{
+			verbose (
+				"%s: confusing argument declarations beginning at line %lu\n",
+				getInputFileName (), inputLineNumber);
+			longjmp (Exception, (int) ExceptionFormattingError);
+		}
+	}
+}
+
+static boolean languageSupportsGenerics (void)
+{
+	return (boolean) (isLanguage (Lang_cpp) || isLanguage (Lang_csharp) ||
+		isLanguage (Lang_java));
+}
+
+static void processAngleBracket (void)
+{
+	int c = cppGetc ();
+	if (c == '>') {
+		/* already found match for template */
+	} else if (languageSupportsGenerics () && c != '<' && c != '=') {
+		/* this is a template */
+		cppUngetc (c);
+		skipToMatch ("<>");
+	} else if (c == '<') {
+		/* skip "<<" or "<<=". */
+		c = cppGetc ();
+		if (c != '=') {
+			cppUngetc (c);
+		}
+	} else {
+		cppUngetc (c);
+	}
+}
+
+static void parseJavaAnnotation (statementInfo *const st)
+{
+	/*
+	 * @Override
+	 * @Target(ElementType.METHOD)
+	 * @SuppressWarnings(value = "unchecked")
+	 *
+	 * But watch out for "@interface"!
+	 */
+	tokenInfo *const token = activeToken (st);
+	
+	int c = skipToNonWhite ();
+	readIdentifier (token, c);
+	if (token->keyword == KEYWORD_INTERFACE)
+	{
+		/* Oops. This was actually "@interface" defining a new annotation. */
+		processInterface (st);
+	}
+	else
+	{
+		/* Bug #1691412: skip any annotation arguments. */
+		skipParens ();
+	}
+}
+
+static int parseParens (statementInfo *const st, parenInfo *const info)
+{
+	tokenInfo *const token = activeToken (st);
+	unsigned int identifierCount = 0;
+	unsigned int depth = 1;
+	boolean firstChar = TRUE;
+	int nextChar = '\0';
+
+	CollectingSignature = TRUE;
+	vStringClear (Signature);
+	vStringPut (Signature, '(');
+	info->parameterCount = 1;
+	do
+	{
+		int c = skipToNonWhite ();
+		vStringPut (Signature, c);
+
+		switch (c)
+		{
+			case '&':
+			case '*':
+				info->isPointer = TRUE;
+				info->isKnrParamList = FALSE;
+				if (identifierCount == 0)
+					info->isParamList = FALSE;
+				initToken (token);
+				break;
+
+			case ':':
+				info->isKnrParamList = FALSE;
+				break;
+
+			case '.':
+				info->isNameCandidate = FALSE;
+				c = cppGetc ();
+				if (c != '.')
+				{
+					cppUngetc (c);
+					info->isKnrParamList = FALSE;
+				}
+				else
+				{
+					c = cppGetc ();
+					if (c != '.')
+					{
+						cppUngetc (c);
+						info->isKnrParamList = FALSE;
+					}
+					else
+						vStringCatS (Signature, "..."); /* variable arg list */
+				}
+				break;
+
+			case ',':
+				info->isNameCandidate = FALSE;
+				if (info->isKnrParamList)
+				{
+					++info->parameterCount;
+					identifierCount = 0;
+				}
+				break;
+
+			case '=':
+				info->isKnrParamList = FALSE;
+				info->isNameCandidate = FALSE;
+				if (firstChar)
+				{
+					info->isParamList = FALSE;
+					skipMacro (st);
+					depth = 0;
+				}
+				break;
+
+			case '[':
+				info->isKnrParamList = FALSE;
+				skipToMatch ("[]");
+				break;
+
+			case '<':
+				info->isKnrParamList = FALSE;
+				processAngleBracket ();
+				break;
+
+			case ')':
+				if (firstChar)
+					info->parameterCount = 0;
+				--depth;
+				break;
+
+			case '(':
+				info->isKnrParamList = FALSE;
+				if (firstChar)
+				{
+					info->isNameCandidate = FALSE;
+					cppUngetc (c);
+					vStringClear (Signature);
+					skipMacro (st);
+					depth = 0;
+					vStringChop (Signature);
+				}
+				else if (isType (token, TOKEN_PAREN_NAME))
+				{
+					c = skipToNonWhite ();
+					if (c == '*')        /* check for function pointer */
+					{
+						skipToMatch ("()");
+						c = skipToNonWhite ();
+						if (c == '(')
+							skipToMatch ("()");
+						else
+							cppUngetc (c);
+					}
+					else
+					{
+						cppUngetc (c);
+						cppUngetc ('(');
+						info->nestedArgs = TRUE;
+					}
+				}
+				else
+					++depth;
+				break;
+
+			default:
+				if (c == '@' && isLanguage (Lang_java))
+				{
+					parseJavaAnnotation(st);
+				}
+				else if (isident1 (c))
+				{
+					if (++identifierCount > 1)
+						info->isKnrParamList = FALSE;
+					readIdentifier (token, c);
+					if (isType (token, TOKEN_NAME)  &&  info->isNameCandidate)
+						token->type = TOKEN_PAREN_NAME;
+					else if (isType (token, TOKEN_KEYWORD))
+					{
+						if (token->keyword != KEYWORD_CONST &&
+							token->keyword != KEYWORD_VOLATILE)
+						{
+							info->isKnrParamList = FALSE;
+							info->isNameCandidate = FALSE;
+						}
+					}
+				}
+				else
+				{
+					info->isParamList     = FALSE;
+					info->isKnrParamList  = FALSE;
+					info->isNameCandidate = FALSE;
+					info->invalidContents = TRUE;
+				}
+				break;
+		}
+		firstChar = FALSE;
+	} while (! info->nestedArgs  &&  depth > 0  &&
+			 (info->isKnrParamList  ||  info->isNameCandidate));
+
+	if (! info->nestedArgs) while (depth > 0)
+	{
+		skipToMatch ("()");
+		--depth;
+	}
+
+	if (! info->isNameCandidate)
+		initToken (token);
+
+	vStringTerminate (Signature);
+	if (info->isKnrParamList)
+		vStringClear (Signature);
+	CollectingSignature = FALSE;
+	return nextChar;
+}
+
+static void initParenInfo (parenInfo *const info)
+{
+	info->isPointer				= FALSE;
+	info->isParamList			= TRUE;
+	info->isKnrParamList		= isLanguage (Lang_c);
+	info->isNameCandidate		= TRUE;
+	info->invalidContents		= FALSE;
+	info->nestedArgs			= FALSE;
+	info->parameterCount		= 0;
+}
+
+static void analyzeParens (statementInfo *const st)
+{
+	tokenInfo *const prev = prevToken (st, 1);
+
+	if (st->inFunction  &&  ! st->assignment)
+		st->notVariable = TRUE;
+	if (! isType (prev, TOKEN_NONE))  /* in case of ignored enclosing macros */
+	{
+		tokenInfo *const token = activeToken (st);
+		parenInfo info;
+		int c;
+
+		initParenInfo (&info);
+		parseParens (st, &info);
+		c = skipToNonWhite ();
+		cppUngetc (c);
+		if (info.invalidContents)
+			reinitStatement (st, FALSE);
+		else if (info.isNameCandidate  &&  isType (token, TOKEN_PAREN_NAME)  &&
+				 ! st->gotParenName  &&
+				 (! info.isParamList || ! st->haveQualifyingName  ||
+				  c == '('  ||
+				  (c == '='  &&  st->implementation != IMP_VIRTUAL) ||
+				  (st->declaration == DECL_NONE  &&  isOneOf (c, ",;"))))
+		{
+			token->type = TOKEN_NAME;
+			processName (st);
+			st->gotParenName = TRUE;
+			if (! (c == '('  &&  info.nestedArgs))
+				st->isPointer = info.isPointer;
+		}
+		else if (! st->gotArgs  &&  info.isParamList)
+		{
+			st->gotArgs = TRUE;
+			setToken (st, TOKEN_ARGS);
+			advanceToken (st);
+			if (st->scope != SCOPE_TYPEDEF)
+				analyzePostParens (st, &info);
+		}
+		else
+			setToken (st, TOKEN_NONE);
+	}
+}
+
+/*
+*   Token parsing functions
+*/
+
+static void addContext (statementInfo *const st, const tokenInfo* const token)
+{
+	if (isType (token, TOKEN_NAME))
+	{
+		if (vStringLength (st->context->name) > 0)
+		{
+			if (isLanguage (Lang_c)  ||  isLanguage (Lang_cpp))
+				vStringCatS (st->context->name, "::");
+			else if (isLanguage (Lang_java) || isLanguage (Lang_csharp))
+				vStringCatS (st->context->name, ".");
+		}
+		vStringCat (st->context->name, token->name);
+		st->context->type = TOKEN_NAME;
+	}
+}
+
+static boolean inheritingDeclaration (declType decl)
+{
+	/* C# supports inheritance for enums. C++0x will too, but not yet. */
+	if (decl == DECL_ENUM)
+	{
+		return (boolean) (isLanguage (Lang_csharp));
+	}
+	return (boolean) (
+		decl == DECL_CLASS ||
+		decl == DECL_STRUCT ||
+		decl == DECL_INTERFACE);
+}
+
+static void processColon (statementInfo *const st)
+{
+	int c = (isLanguage (Lang_cpp) ? cppGetc () : skipToNonWhite ());
+	const boolean doubleColon = (boolean) (c == ':');
+
+	if (doubleColon)
+	{
+		setToken (st, TOKEN_DOUBLE_COLON);
+		st->haveQualifyingName = FALSE;
+	}
+	else
+	{
+		cppUngetc (c);
+		if ((isLanguage (Lang_cpp) || isLanguage (Lang_csharp))  &&
+			inheritingDeclaration (st->declaration))
+		{
+			readParents (st, ':');
+		}
+		else if (parentDecl (st) == DECL_STRUCT)
+		{
+			c = skipToOneOf (",;");
+			if (c == ',')
+				setToken (st, TOKEN_COMMA);
+			else if (c == ';')
+				setToken (st, TOKEN_SEMICOLON);
+		}
+		else
+		{
+			const tokenInfo *const prev  = prevToken (st, 1);
+			const tokenInfo *const prev2 = prevToken (st, 2);
+			if (prev->keyword == KEYWORD_DEFAULT ||
+				prev2->keyword == KEYWORD_CASE ||
+				st->parent != NULL)
+			{
+				reinitStatement (st, FALSE);
+			}
+		}
+	}
+}
+
+/*  Skips over any initializing value which may follow an '=' character in a
+ *  variable definition.
+ */
+static int skipInitializer (statementInfo *const st)
+{
+	boolean done = FALSE;
+	int c;
+
+	while (! done)
+	{
+		c = skipToNonWhite ();
+
+		if (c == EOF)
+			longjmp (Exception, (int) ExceptionFormattingError);
+		else switch (c)
+		{
+			case ',':
+			case ';': done = TRUE; break;
+
+			case '0':
+				if (st->implementation == IMP_VIRTUAL)
+					st->implementation = IMP_PURE_VIRTUAL;
+				break;
+
+			case '[': skipToMatch ("[]"); break;
+			case '(': skipToMatch ("()"); break;
+			case '{': skipToMatch ("{}"); break;
+			case '<': processAngleBracket(); break;
+
+			case '}':
+				if (insideEnumBody (st))
+					done = TRUE;
+				else if (! isBraceFormat ())
+				{
+					verbose ("%s: unexpected closing brace at line %lu\n",
+							getInputFileName (), getInputLineNumber ());
+					longjmp (Exception, (int) ExceptionBraceFormattingError);
+				}
+				break;
+
+			default: break;
+		}
+	}
+	return c;
+}
+
+static void processInitializer (statementInfo *const st)
+{
+	const boolean inEnumBody = insideEnumBody (st);
+	int c = cppGetc ();
+
+	if (c != '=')
+	{
+		cppUngetc (c);
+		c = skipInitializer (st);
+		st->assignment = TRUE;
+		if (c == ';')
+			setToken (st, TOKEN_SEMICOLON);
+		else if (c == ',')
+			setToken (st, TOKEN_COMMA);
+		else if (c == '}'  &&  inEnumBody)
+		{
+			cppUngetc (c);
+			setToken (st, TOKEN_COMMA);
+		}
+		if (st->scope == SCOPE_EXTERN)
+			st->scope = SCOPE_GLOBAL;
+	}
+}
+
+static void parseIdentifier (statementInfo *const st, const int c)
+{
+	tokenInfo *const token = activeToken (st);
+
+	readIdentifier (token, c);
+	if (! isType (token, TOKEN_NONE))
+		processToken (token, st);
+}
+
+static void parseGeneralToken (statementInfo *const st, const int c)
+{
+	const tokenInfo *const prev = prevToken (st, 1);
+	
+	if (isident1 (c) || (isLanguage (Lang_java) && isHighChar (c)))
+	{
+		parseIdentifier (st, c);
+		if (isType (st->context, TOKEN_NAME) &&
+			isType (activeToken (st), TOKEN_NAME) && isType (prev, TOKEN_NAME))
+		{
+			initToken (st->context);
+		}
+	}
+	else if (c == '.' || c == '-')
+	{
+		if (! st->assignment)
+			st->notVariable = TRUE;
+		if (c == '-')
+		{
+			int c2 = cppGetc ();
+			if (c2 != '>')
+				cppUngetc (c2);
+		}
+	}
+	else if (c == '!' || c == '>')
+	{
+		int c2 = cppGetc ();
+		if (c2 != '=')
+			cppUngetc (c2);
+	}
+	else if (c == '@' && isLanguage (Lang_java))
+	{
+		parseJavaAnnotation (st);
+	}
+	else if (isExternCDecl (st, c))
+	{
+		st->declaration = DECL_NOMANGLE;
+		st->scope = SCOPE_GLOBAL;
+	}
+}
+
+/*  Reads characters from the pre-processor and assembles tokens, setting
+ *  the current statement state.
+ */
+static void nextToken (statementInfo *const st)
+{
+	tokenInfo *token;
+	do
+	{
+		int c = skipToNonWhite ();
+		switch (c)
+		{
+			case EOF: longjmp (Exception, (int) ExceptionEOF);  break;
+			case '(': analyzeParens (st);                       break;
+			case '<': processAngleBracket ();                   break;
+			case '*': st->haveQualifyingName = FALSE;           break;
+			case ',': setToken (st, TOKEN_COMMA);               break;
+			case ':': processColon (st);                        break;
+			case ';': setToken (st, TOKEN_SEMICOLON);           break;
+			case '=': processInitializer (st);                  break;
+			case '[': skipToMatch ("[]");                       break;
+			case '{': setToken (st, TOKEN_BRACE_OPEN);          break;
+			case '}': setToken (st, TOKEN_BRACE_CLOSE);         break;
+			default:  parseGeneralToken (st, c);                break;
+		}
+		token = activeToken (st);
+	} while (isType (token, TOKEN_NONE));
+}
+
+/*
+*   Scanning support functions
+*/
+
+static statementInfo *CurrentStatement = NULL;
+
+static statementInfo *newStatement (statementInfo *const parent)
+{
+	statementInfo *const st = xMalloc (1, statementInfo);
+	unsigned int i;
+
+	for (i = 0  ;  i < (unsigned int) NumTokens  ;  ++i)
+		st->token [i] = newToken ();
+
+	st->context = newToken ();
+	st->blockName = newToken ();
+	st->parentClasses = vStringNew ();
+
+	initStatement (st, parent);
+	CurrentStatement = st;
+
+	return st;
+}
+
+static void deleteStatement (void)
+{
+	statementInfo *const st = CurrentStatement;
+	statementInfo *const parent = st->parent;
+	unsigned int i;
+
+	for (i = 0  ;  i < (unsigned int) NumTokens  ;  ++i)
+	{
+		deleteToken (st->token [i]);       st->token [i] = NULL;
+	}
+	deleteToken (st->blockName);           st->blockName = NULL;
+	deleteToken (st->context);             st->context = NULL;
+	vStringDelete (st->parentClasses);     st->parentClasses = NULL;
+	eFree (st);
+	CurrentStatement = parent;
+}
+
+static void deleteAllStatements (void)
+{
+	while (CurrentStatement != NULL)
+		deleteStatement ();
+}
+
+static boolean isStatementEnd (const statementInfo *const st)
+{
+	const tokenInfo *const token = activeToken (st);
+	boolean isEnd;
+
+	if (isType (token, TOKEN_SEMICOLON))
+		isEnd = TRUE;
+	else if (isType (token, TOKEN_BRACE_CLOSE))
+		/* Java and C# do not require semicolons to end a block. Neither do C++
+		 * namespaces. All other blocks require a semicolon to terminate them.
+		 */
+		isEnd = (boolean) (isLanguage (Lang_java) || isLanguage (Lang_csharp) ||
+				! isContextualStatement (st));
+	else
+		isEnd = FALSE;
+
+	return isEnd;
+}
+
+static void checkStatementEnd (statementInfo *const st)
+{
+	const tokenInfo *const token = activeToken (st);
+
+	if (isType (token, TOKEN_COMMA))
+		reinitStatement (st, TRUE);
+	else if (isStatementEnd (st))
+	{
+		DebugStatement ( if (debug (DEBUG_PARSE)) printf ("<ES>"); )
+		reinitStatement (st, FALSE);
+		cppEndStatement ();
+	}
+	else
+	{
+		cppBeginStatement ();
+		advanceToken (st);
+	}
+}
+
+static void nest (statementInfo *const st, const unsigned int nestLevel)
+{
+	switch (st->declaration)
+	{
+		case DECL_CLASS:
+		case DECL_ENUM:
+		case DECL_INTERFACE:
+		case DECL_NAMESPACE:
+		case DECL_NOMANGLE:
+		case DECL_STRUCT:
+		case DECL_UNION:
+			createTags (nestLevel, st);
+			break;
+
+		case DECL_FUNCTION:
+		case DECL_TASK:
+			st->inFunction = TRUE;
+			/* fall through */
+		default:
+			if (includeTag (TAG_LOCAL, FALSE))
+				createTags (nestLevel, st);
+			else
+				skipToMatch ("{}");
+			break;
+	}
+	advanceToken (st);
+	setToken (st, TOKEN_BRACE_CLOSE);
+}
+
+static void tagCheck (statementInfo *const st)
+{
+	const tokenInfo *const token = activeToken (st);
+	const tokenInfo *const prev  = prevToken (st, 1);
+	const tokenInfo *const prev2 = prevToken (st, 2);
+
+	switch (token->type)
+	{
+		case TOKEN_NAME:
+			if (insideEnumBody (st))
+				qualifyEnumeratorTag (st, token);
+			break;
+#if 0
+		case TOKEN_PACKAGE:
+			if (st->haveQualifyingName)
+				makeTag (token, st, FALSE, TAG_PACKAGE);
+			break;
+#endif
+		case TOKEN_BRACE_OPEN:
+			if (isType (prev, TOKEN_ARGS))
+			{
+				if (st->haveQualifyingName)
+				{
+					if (! isLanguage (Lang_vera))
+						st->declaration = DECL_FUNCTION;
+					if (isType (prev2, TOKEN_NAME))
+						copyToken (st->blockName, prev2);
+					qualifyFunctionTag (st, prev2);
+				}
+			}
+			else if (isContextualStatement (st) ||
+					st->declaration == DECL_NAMESPACE ||
+					st->declaration == DECL_PROGRAM)
+			{
+				if (isType (prev, TOKEN_NAME))
+					copyToken (st->blockName, prev);
+				else
+				{
+					/*  For an anonymous struct or union we use a unique ID
+					 *  a number, so that the members can be found.
+					 */
+					char buf [20];  /* length of "_anon" + digits  + null */
+					sprintf (buf, "__anon%d", ++AnonymousID);
+					vStringCopyS (st->blockName->name, buf);
+					st->blockName->type = TOKEN_NAME;
+					st->blockName->keyword = KEYWORD_NONE;
+				}
+				qualifyBlockTag (st, prev);
+			}
+			else if (isLanguage (Lang_csharp))
+				makeTag (prev, st, FALSE, TAG_PROPERTY);
+			break;
+
+		case TOKEN_SEMICOLON:
+		case TOKEN_COMMA:
+			if (insideEnumBody (st))
+				;
+			else if (isType (prev, TOKEN_NAME))
+			{
+				if (isContextualKeyword (prev2))
+					makeTag (prev, st, TRUE, TAG_EXTERN_VAR);
+				else
+					qualifyVariableTag (st, prev);
+			}
+			else if (isType (prev, TOKEN_ARGS)  &&  isType (prev2, TOKEN_NAME))
+			{
+				if (st->isPointer)
+					qualifyVariableTag (st, prev2);
+				else
+					qualifyFunctionDeclTag (st, prev2);
+			}
+			if (isLanguage (Lang_java) && token->type == TOKEN_SEMICOLON && insideEnumBody (st))
+			{
+				/* In Java, after an initial enum-like part,
+				 * a semicolon introduces a class-like part.
+				 * See Bug #1730485 for the full rationale. */
+				st->parent->declaration = DECL_CLASS;
+			}
+			break;
+
+		default: break;
+	}
+}
+
+/*  Parses the current file and decides whether to write out and tags that
+ *  are discovered.
+ */
+static void createTags (const unsigned int nestLevel,
+						statementInfo *const parent)
+{
+	statementInfo *const st = newStatement (parent);
+
+	DebugStatement ( if (nestLevel > 0) debugParseNest (TRUE, nestLevel); )
+	while (TRUE)
+	{
+		tokenInfo *token;
+
+		nextToken (st);
+		token = activeToken (st);
+		if (isType (token, TOKEN_BRACE_CLOSE))
+		{
+			if (nestLevel > 0)
+				break;
+			else
+			{
+				verbose ("%s: unexpected closing brace at line %lu\n",
+						getInputFileName (), getInputLineNumber ());
+				longjmp (Exception, (int) ExceptionBraceFormattingError);
+			}
+		}
+		else if (isType (token, TOKEN_DOUBLE_COLON))
+		{
+			addContext (st, prevToken (st, 1));
+			advanceToken (st);
+		}
+		else
+		{
+			tagCheck (st);
+			if (isType (token, TOKEN_BRACE_OPEN))
+				nest (st, nestLevel + 1);
+			checkStatementEnd (st);
+		}
+	}
+	deleteStatement ();
+	DebugStatement ( if (nestLevel > 0) debugParseNest (FALSE, nestLevel - 1); )
+}
+
+static boolean findCTags (const unsigned int passCount)
+{
+	exception_t exception;
+	boolean retry;
+
+	Assert (passCount < 3);
+	cppInit ((boolean) (passCount > 1), isLanguage (Lang_csharp));
+	Signature = vStringNew ();
+
+	exception = (exception_t) setjmp (Exception);
+	retry = FALSE;
+	if (exception == ExceptionNone)
+		createTags (0, NULL);
+	else
+	{
+		deleteAllStatements ();
+		if (exception == ExceptionBraceFormattingError  &&  passCount == 1)
+		{
+			retry = TRUE;
+		   verbose ("%s: retrying file with fallback brace matching algorithm\n",
+					getInputFileName ());
+		}
+	}
+	vStringDelete (Signature);
+	cppTerminate ();
+	return retry;
+}
+
+static void buildKeywordHash (const langType language, unsigned int idx)
+{
+	const size_t count = sizeof (KeywordTable) / sizeof (KeywordTable [0]);
+	size_t i;
+	for (i = 0  ;  i < count  ;  ++i)
+	{
+		const keywordDesc* const p = &KeywordTable [i];
+		if (p->isValid [idx])
+			addKeyword (p->name, language, (int) p->id);
+	}
+}
+
+static void initializeCParser (const langType language)
+{
+	Lang_c = language;
+	buildKeywordHash (language, 0);
+}
+
+static void initializeCppParser (const langType language)
+{
+	Lang_cpp = language;
+	buildKeywordHash (language, 1);
+}
+
+static void initializeCsharpParser (const langType language)
+{
+	Lang_csharp = language;
+	buildKeywordHash (language, 2);
+}
+
+static void initializeJavaParser (const langType language)
+{
+	Lang_java = language;
+	buildKeywordHash (language, 3);
+}
+
+static void initializeVeraParser (const langType language)
+{
+	Lang_vera = language;
+	buildKeywordHash (language, 4);
+}
+
+extern parserDefinition* CParser (void)
+{
+	static const char *const extensions [] = { "c", NULL };
+	parserDefinition* def = parserNew ("C");
+	def->kinds      = CKinds;
+	def->kindCount  = KIND_COUNT (CKinds);
+	def->extensions = extensions;
+	def->parser2    = findCTags;
+	def->initialize = initializeCParser;
+	return def;
+}
+
+extern parserDefinition* CppParser (void)
+{
+	static const char *const extensions [] = {
+		"c++", "cc", "cp", "cpp", "cxx", "h", "h++", "hh", "hp", "hpp", "hxx",
+#ifndef CASE_INSENSITIVE_FILENAMES
+		"C", "H",
+#endif
+		NULL
+	};
+	parserDefinition* def = parserNew ("C++");
+	def->kinds      = CKinds;
+	def->kindCount  = KIND_COUNT (CKinds);
+	def->extensions = extensions;
+	def->parser2    = findCTags;
+	def->initialize = initializeCppParser;
+	return def;
+}
+
+extern parserDefinition* CsharpParser (void)
+{
+	static const char *const extensions [] = { "cs", NULL };
+	parserDefinition* def = parserNew ("C#");
+	def->kinds      = CsharpKinds;
+	def->kindCount  = KIND_COUNT (CsharpKinds);
+	def->extensions = extensions;
+	def->parser2    = findCTags;
+	def->initialize = initializeCsharpParser;
+	return def;
+}
+
+extern parserDefinition* JavaParser (void)
+{
+	static const char *const extensions [] = { "java", NULL };
+	parserDefinition* def = parserNew ("Java");
+	def->kinds      = JavaKinds;
+	def->kindCount  = KIND_COUNT (JavaKinds);
+	def->extensions = extensions;
+	def->parser2    = findCTags;
+	def->initialize = initializeJavaParser;
+	return def;
+}
+
+extern parserDefinition* VeraParser (void)
+{
+	static const char *const extensions [] = { "vr", "vri", "vrh", NULL };
+	parserDefinition* def = parserNew ("Vera");
+	def->kinds      = VeraKinds;
+	def->kindCount  = KIND_COUNT (VeraKinds);
+	def->extensions = extensions;
+	def->parser2    = findCTags;
+	def->initialize = initializeVeraParser;
+	return def;
+}
+
+/* vi:set tabstop=4 shiftwidth=4 noexpandtab: */
Index: a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/eiffel.c
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/eiffel.c	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/eiffel.c	(revision 5)
@@ -0,0 +1,1352 @@
+/*
+*   $Id: eiffel.c 706 2009-06-28 23:09:30Z dhiebert $
+*
+*   Copyright (c) 1998-2002, Darren Hiebert
+*
+*   This source code is released for free distribution under the terms of the
+*   GNU General Public License.
+*
+*   This module contains functions for generating tags for Eiffel language
+*   files.
+*/
+
+/*
+*   INCLUDE FILES
+*/
+#include "general.h"  /* must always come first */
+
+#ifdef TYPE_REFERENCE_TOOL
+#include <stdio.h>
+#endif
+#include <string.h>
+#include <limits.h>
+#include <ctype.h>  /* to define tolower () */
+#include <setjmp.h>
+
+#include "debug.h"
+#include "keyword.h"
+#include "routines.h"
+#include "vstring.h"
+#ifndef TYPE_REFERENCE_TOOL
+#include "entry.h"
+#include "options.h"
+#include "parse.h"
+#include "read.h"
+#endif
+
+/*
+*   MACROS
+*/
+#define isident(c)            (isalnum(c) || (c) == '_')
+#define isFreeOperatorChar(c) ((c) == '@' || (c) == '#' || \
+                               (c) == '|' || (c) == '&')
+#define isType(token,t)       (boolean) ((token)->type == (t))
+#define isKeyword(token,k)    (boolean) ((token)->keyword == (k))
+
+/*
+*   DATA DECLARATIONS
+*/
+
+typedef enum eException { ExceptionNone, ExceptionEOF } exception_t;
+
+/*  Used to specify type of keyword.
+ */
+typedef enum eKeywordId {
+	KEYWORD_NONE = -1,
+	KEYWORD_alias, KEYWORD_all, KEYWORD_and, KEYWORD_as, KEYWORD_assign,
+	KEYWORD_check, KEYWORD_class, KEYWORD_convert, KEYWORD_create,
+	KEYWORD_creation, KEYWORD_Current,
+	KEYWORD_debug, KEYWORD_deferred, KEYWORD_do, KEYWORD_else,
+	KEYWORD_elseif, KEYWORD_end, KEYWORD_ensure, KEYWORD_expanded,
+	KEYWORD_export, KEYWORD_external, KEYWORD_false, KEYWORD_feature,
+	KEYWORD_from, KEYWORD_frozen, KEYWORD_if, KEYWORD_implies,
+	KEYWORD_indexing, KEYWORD_infix, KEYWORD_inherit, KEYWORD_inspect,
+	KEYWORD_invariant, KEYWORD_is, KEYWORD_like, KEYWORD_local,
+	KEYWORD_loop, KEYWORD_not, KEYWORD_obsolete, KEYWORD_old, KEYWORD_once,
+	KEYWORD_or, KEYWORD_prefix, KEYWORD_redefine, KEYWORD_rename,
+	KEYWORD_require, KEYWORD_rescue, KEYWORD_Result, KEYWORD_retry,
+	KEYWORD_select, KEYWORD_separate, KEYWORD_strip, KEYWORD_then,
+	KEYWORD_true, KEYWORD_undefine, KEYWORD_unique, KEYWORD_until,
+	KEYWORD_variant, KEYWORD_when, KEYWORD_xor
+} keywordId;
+
+/*  Used to determine whether keyword is valid for the token language and
+ *  what its ID is.
+ */
+typedef struct sKeywordDesc {
+	const char *name;
+	keywordId id;
+} keywordDesc;
+
+typedef enum eTokenType {
+	TOKEN_UNDEFINED,
+	TOKEN_BANG,
+	TOKEN_CHARACTER,
+	TOKEN_CLOSE_BRACE,
+	TOKEN_CLOSE_BRACKET,
+	TOKEN_CLOSE_PAREN,
+	TOKEN_COLON,
+	TOKEN_COMMA,
+	TOKEN_CONSTRAINT,
+	TOKEN_DOT,
+	TOKEN_DOLLAR,
+	TOKEN_IDENTIFIER,
+	TOKEN_KEYWORD,
+	TOKEN_NUMERIC,
+	TOKEN_OPEN_BRACE,
+	TOKEN_OPEN_BRACKET,
+	TOKEN_OPEN_PAREN,
+	TOKEN_OPERATOR,
+	TOKEN_OTHER,
+	TOKEN_QUESTION,
+	TOKEN_SEMICOLON,
+	TOKEN_SEPARATOR,
+	TOKEN_STRING,
+	TOKEN_TILDE
+} tokenType;
+
+typedef struct sTokenInfo {
+	tokenType type;
+	keywordId keyword;
+	boolean   isExported;
+	vString*  string;
+	vString*  className;
+	vString*  featureName;
+} tokenInfo;
+
+/*
+*   DATA DEFINITIONS
+*/
+
+static langType Lang_eiffel;
+
+#ifdef TYPE_REFERENCE_TOOL
+
+static const char *FileName;
+static FILE *File;
+static int PrintClass;
+static int PrintReferences;
+static int SelfReferences;
+static int Debug;
+static stringList *GenericNames;
+static stringList *ReferencedTypes;
+
+#else
+
+typedef enum {
+	EKIND_CLASS, EKIND_FEATURE, EKIND_LOCAL, EKIND_QUALIFIED_TAGS
+} eiffelKind;
+
+static kindOption EiffelKinds [] = {
+	{ TRUE,  'c', "class",   "classes"},
+	{ TRUE,  'f', "feature", "features"},
+	{ FALSE, 'l', "local",   "local entities"}
+};
+
+#endif
+
+static jmp_buf Exception;
+
+static const keywordDesc EiffelKeywordTable [] = {
+	/* keyword          keyword ID */
+	{ "alias",          KEYWORD_alias      },
+	{ "all",            KEYWORD_all        },
+	{ "and",            KEYWORD_and        },
+	{ "as",             KEYWORD_as         },
+	{ "assign",         KEYWORD_assign     },
+	{ "check",          KEYWORD_check      },
+	{ "class",          KEYWORD_class      },
+	{ "convert",        KEYWORD_convert    },
+	{ "create",         KEYWORD_create     },
+	{ "creation",       KEYWORD_creation   },
+	{ "current",        KEYWORD_Current    },
+	{ "debug",          KEYWORD_debug      },
+	{ "deferred",       KEYWORD_deferred   },
+	{ "do",             KEYWORD_do         },
+	{ "else",           KEYWORD_else       },
+	{ "elseif",         KEYWORD_elseif     },
+	{ "end",            KEYWORD_end        },
+	{ "ensure",         KEYWORD_ensure     },
+	{ "expanded",       KEYWORD_expanded   },
+	{ "export",         KEYWORD_export     },
+	{ "external",       KEYWORD_external   },
+	{ "false",          KEYWORD_false      },
+	{ "feature",        KEYWORD_feature    },
+	{ "from",           KEYWORD_from       },
+	{ "frozen",         KEYWORD_frozen     },
+	{ "if",             KEYWORD_if         },
+	{ "implies",        KEYWORD_implies    },
+	{ "indexing",       KEYWORD_indexing   },
+	{ "infix",          KEYWORD_infix      },
+	{ "inherit",        KEYWORD_inherit    },
+	{ "inspect",        KEYWORD_inspect    },
+	{ "invariant",      KEYWORD_invariant  },
+	{ "is",             KEYWORD_is         },
+	{ "like",           KEYWORD_like       },
+	{ "local",          KEYWORD_local      },
+	{ "loop",           KEYWORD_loop       },
+	{ "not",            KEYWORD_not        },
+	{ "obsolete",       KEYWORD_obsolete   },
+	{ "old",            KEYWORD_old        },
+	{ "once",           KEYWORD_once       },
+	{ "or",             KEYWORD_or         },
+	{ "prefix",         KEYWORD_prefix     },
+	{ "redefine",       KEYWORD_redefine   },
+	{ "rename",         KEYWORD_rename     },
+	{ "require",        KEYWORD_require    },
+	{ "rescue",         KEYWORD_rescue     },
+	{ "result",         KEYWORD_Result     },
+	{ "retry",          KEYWORD_retry      },
+	{ "select",         KEYWORD_select     },
+	{ "separate",       KEYWORD_separate   },
+	{ "strip",          KEYWORD_strip      },
+	{ "then",           KEYWORD_then       },
+	{ "true",           KEYWORD_true       },
+	{ "undefine",       KEYWORD_undefine   },
+	{ "unique",         KEYWORD_unique     },
+	{ "until",          KEYWORD_until      },
+	{ "variant",        KEYWORD_variant    },
+	{ "when",           KEYWORD_when       },
+	{ "xor",            KEYWORD_xor        }
+};
+
+/*
+*   FUNCTION DEFINITIONS
+*/
+
+static void buildEiffelKeywordHash (void)
+{
+	const size_t count = sizeof (EiffelKeywordTable) /
+						 sizeof (EiffelKeywordTable [0]);
+	size_t i;
+	for (i = 0  ;  i < count  ;  ++i)
+	{
+		const keywordDesc* const p = &EiffelKeywordTable [i];
+		addKeyword (p->name, Lang_eiffel, (int) p->id);
+	}
+}
+
+#ifdef TYPE_REFERENCE_TOOL
+
+static void addGenericName (tokenInfo *const token)
+{
+	vStringUpper (token->string);
+	if (vStringLength (token->string) > 0)
+		stringListAdd (GenericNames, vStringNewCopy (token->string));
+}
+
+static boolean isGeneric (tokenInfo *const token)
+{
+	return (boolean) stringListHas (GenericNames, vStringValue (token->string));
+}
+
+static void reportType (tokenInfo *const token)
+{
+	vStringUpper (token->string);
+	if (vStringLength (token->string) > 0  && ! isGeneric (token)  &&
+		(SelfReferences || strcmp (vStringValue (
+			token->string), vStringValue (token->className)) != 0) &&
+		! stringListHas (ReferencedTypes, vStringValue (token->string)))
+	{
+		printf ("%s\n", vStringValue (token->string));
+		stringListAdd (ReferencedTypes, vStringNewCopy (token->string));
+	}
+}
+
+static int fileGetc (void)
+{
+	int c = getc (File);
+	if (c == '\r')
+	{
+		c = getc (File);
+		if (c != '\n')
+		{
+			ungetc (c, File);
+			c = '\n';
+		}
+	}
+	if (Debug > 0  &&  c != EOF)
+		putc (c, errout);
+	return c;
+}
+
+static int fileUngetc (c)
+{
+	return ungetc (c, File);
+}
+
+extern char *readLine (vString *const vLine, FILE *const fp)
+{
+	return NULL;
+}
+
+#else
+
+/*
+*   Tag generation functions
+*/
+
+static void makeEiffelClassTag (tokenInfo *const token)
+{
+	if (EiffelKinds [EKIND_CLASS].enabled)
+	{
+		const char *const name = vStringValue (token->string);
+		tagEntryInfo e;
+
+		initTagEntry (&e, name);
+
+		e.kindName = EiffelKinds [EKIND_CLASS].name;
+		e.kind     = EiffelKinds [EKIND_CLASS].letter;
+
+		makeTagEntry (&e);
+	}
+	vStringCopy (token->className, token->string);
+}
+
+static void makeEiffelFeatureTag (tokenInfo *const token)
+{
+	if (EiffelKinds [EKIND_FEATURE].enabled  &&
+		(token->isExported  ||  Option.include.fileScope))
+	{
+		const char *const name = vStringValue (token->string);
+		tagEntryInfo e;
+
+		initTagEntry (&e, name);
+
+		e.isFileScope = (boolean) (! token->isExported);
+		e.kindName    = EiffelKinds [EKIND_FEATURE].name;
+		e.kind        = EiffelKinds [EKIND_FEATURE].letter;
+		e.extensionFields.scope [0] = EiffelKinds [EKIND_CLASS].name;
+		e.extensionFields.scope [1] = vStringValue (token->className);
+
+		makeTagEntry (&e);
+
+		if (Option.include.qualifiedTags)
+		{
+			vString* qualified = vStringNewInit (vStringValue (token->className));
+			vStringPut (qualified, '.');
+			vStringCat (qualified, token->string);
+			e.name = vStringValue (qualified);
+			makeTagEntry (&e);
+			vStringDelete (qualified);
+		}
+	}
+	vStringCopy (token->featureName, token->string);
+}
+
+static void makeEiffelLocalTag (tokenInfo *const token)
+{
+	if (EiffelKinds [EKIND_LOCAL].enabled && Option.include.fileScope)
+	{
+		const char *const name = vStringValue (token->string);
+		vString* scope = vStringNew ();
+		tagEntryInfo e;
+
+		initTagEntry (&e, name);
+
+		e.isFileScope = TRUE;
+		e.kindName    = EiffelKinds [EKIND_LOCAL].name;
+		e.kind        = EiffelKinds [EKIND_LOCAL].letter;
+
+		vStringCopy (scope, token->className);
+		vStringPut (scope, '.');
+		vStringCat (scope, token->featureName);
+
+		e.extensionFields.scope [0] = EiffelKinds [EKIND_FEATURE].name;
+		e.extensionFields.scope [1] = vStringValue (scope);
+
+		makeTagEntry (&e);
+		vStringDelete (scope);
+	}
+}
+
+#endif
+
+/*
+*   Parsing functions
+*/
+
+static int skipToCharacter (const int c)
+{
+	int d;
+
+	do
+	{
+		d = fileGetc ();
+	} while (d != EOF  &&  d != c);
+
+	return d;
+}
+
+/*  If a numeric is passed in 'c', this is used as the first digit of the
+ *  numeric being parsed.
+ */
+static vString *parseInteger (int c)
+{
+	vString *string = vStringNew ();
+
+	if (c == '\0')
+		c = fileGetc ();
+	if (c == '-')
+	{
+		vStringPut (string, c);
+		c = fileGetc ();
+	}
+	else if (! isdigit (c))
+		c = fileGetc ();
+	while (c != EOF  &&  (isdigit (c)  ||  c == '_'))
+	{
+		vStringPut (string, c);
+		c = fileGetc ();
+	}
+	vStringTerminate (string);
+	fileUngetc (c);
+
+	return string;
+}
+
+static vString *parseNumeric (int c)
+{
+	vString *string = vStringNew ();
+	vString *integer = parseInteger (c);
+	vStringCopy (string, integer);
+	vStringDelete (integer);
+
+	c = fileGetc ();
+	if (c == '.')
+	{
+		integer = parseInteger ('\0');
+		vStringPut (string, c);
+		vStringCat (string, integer);
+		vStringDelete (integer);
+		c = fileGetc ();
+	}
+	if (tolower (c) == 'e')
+	{
+		integer = parseInteger ('\0');
+		vStringPut (string, c);
+		vStringCat (string, integer);
+		vStringDelete (integer);
+	}
+	else if (!isspace (c))
+		fileUngetc (c);
+
+	vStringTerminate (string);
+
+	return string;
+}
+
+static int parseEscapedCharacter (void)
+{
+	int d = '\0';
+	int c = fileGetc ();
+
+	switch (c)
+	{
+		case 'A':  d = '@';   break;
+		case 'B':  d = '\b';  break;
+		case 'C':  d = '^';   break;
+		case 'D':  d = '$';   break;
+		case 'F':  d = '\f';  break;
+		case 'H':  d = '\\';  break;
+		case 'L':  d = '~';   break;
+		case 'N':  d = '\n';  break;
+#ifdef QDOS
+		case 'Q':  d = 0x9F;  break;
+#else
+		case 'Q':  d = '`';   break;
+#endif
+		case 'R':  d = '\r';  break;
+		case 'S':  d = '#';   break;
+		case 'T':  d = '\t';  break;
+		case 'U':  d = '\0';  break;
+		case 'V':  d = '|';   break;
+		case '%':  d = '%';   break;
+		case '\'': d = '\'';  break;
+		case '"':  d = '"';   break;
+		case '(':  d = '[';   break;
+		case ')':  d = ']';   break;
+		case '<':  d = '{';   break;
+		case '>':  d = '}';   break;
+
+		case '\n': skipToCharacter ('%'); break;
+
+		case '/':
+		{
+			vString *string = parseInteger ('\0');
+			const char *value = vStringValue (string);
+			const unsigned long ascii = atol (value);
+			vStringDelete (string);
+
+			c = fileGetc ();
+			if (c == '/'  &&  ascii < 256)
+				d = ascii;
+			break;
+		}
+
+		default: break;
+	}
+	return d;
+}
+
+static int parseCharacter (void)
+{
+	int c = fileGetc ();
+	int result = c;
+
+	if (c == '%')
+		result = parseEscapedCharacter ();
+
+	c = fileGetc ();
+	if (c != '\'')
+		skipToCharacter ('\n');
+
+	return result;
+}
+
+static void parseString (vString *const string)
+{
+	boolean verbatim = FALSE;
+	boolean align = FALSE;
+	boolean end = FALSE;
+	vString *verbatimCloser = vStringNew ();
+	vString *lastLine = vStringNew ();
+	int prev = '\0';
+	int c;
+
+	while (! end)
+	{
+		c = fileGetc ();
+		if (c == EOF)
+			end = TRUE;
+		else if (c == '"')
+		{
+			if (! verbatim)
+				end = TRUE;
+			else
+				end = (boolean) (strcmp (vStringValue (lastLine),
+				                         vStringValue (verbatimCloser)) == 0);
+		}
+		else if (c == '\n')
+		{
+			if (verbatim)
+				vStringClear (lastLine);
+			if (prev == '[' /* ||  prev == '{' */)
+			{
+				verbatim = TRUE;
+				vStringClear (verbatimCloser);
+				vStringClear (lastLine);
+				if (prev == '{')
+					vStringPut (verbatimCloser, '}');
+				else
+				{
+					vStringPut (verbatimCloser, ']');
+					align = TRUE;
+				}
+				vStringNCat (verbatimCloser, string, vStringLength (string) - 1);
+				vStringClear (string);
+			}
+			if (verbatim && align)
+			{
+				do
+					c = fileGetc ();
+				while (isspace (c));
+			}
+		}
+		else if (c == '%')
+			c = parseEscapedCharacter ();
+		if (! end)
+		{
+			vStringPut (string, c);
+			if (verbatim)
+			{
+				vStringPut (lastLine, c);
+				vStringTerminate (lastLine);
+			}
+			prev = c;
+		}
+	}
+	vStringTerminate (string);
+	vStringDelete (lastLine);
+	vStringDelete (verbatimCloser);
+}
+
+/*  Read a C identifier beginning with "firstChar" and places it into "name".
+ */
+static void parseIdentifier (vString *const string, const int firstChar)
+{
+	int c = firstChar;
+
+	do
+	{
+		vStringPut (string, c);
+		c = fileGetc ();
+	} while (isident (c));
+
+	vStringTerminate (string);
+	if (!isspace (c))
+		fileUngetc (c);  /* unget non-identifier character */
+}
+
+static void parseFreeOperator (vString *const string, const int firstChar)
+{
+	int c = firstChar;
+
+	do
+	{
+		vStringPut (string, c);
+		c = fileGetc ();
+	} while (c > ' ');
+
+	vStringTerminate (string);
+	if (!isspace (c))
+		fileUngetc (c);  /* unget non-identifier character */
+}
+
+static void copyToken (tokenInfo* dst, const tokenInfo *src)
+{
+	dst->type       = src->type;
+	dst->keyword    = src->keyword;
+	dst->isExported = src->isExported;
+
+	vStringCopy (dst->string, src->string);
+	vStringCopy (dst->className, src->className);
+	vStringCopy (dst->featureName, src->featureName);
+}
+
+static tokenInfo *newToken (void)
+{
+	tokenInfo *const token = xMalloc (1, tokenInfo);
+
+	token->type			= TOKEN_UNDEFINED;
+	token->keyword		= KEYWORD_NONE;
+	token->isExported	= TRUE;
+
+	token->string = vStringNew ();
+	token->className = vStringNew ();
+	token->featureName = vStringNew ();
+
+	return token;
+}
+
+static void deleteToken (tokenInfo *const token)
+{
+	vStringDelete (token->string);
+	vStringDelete (token->className);
+	vStringDelete (token->featureName);
+
+	eFree (token);
+}
+
+static void readToken (tokenInfo *const token)
+{
+	int c;
+
+	token->type    = TOKEN_UNDEFINED;
+	token->keyword = KEYWORD_NONE;
+	vStringClear (token->string);
+
+getNextChar:
+
+	do
+		c = fileGetc ();
+	while (c == '\t'  ||  c == ' '  ||  c == '\n');
+
+	switch (c)
+	{
+		case EOF:  longjmp (Exception, (int)ExceptionEOF); break;
+		case ';':  token->type = TOKEN_SEMICOLON;          break;
+		case '!':  token->type = TOKEN_BANG;               break;
+		case '}':  token->type = TOKEN_CLOSE_BRACE;        break;
+		case ']':  token->type = TOKEN_CLOSE_BRACKET;      break;
+		case ')':  token->type = TOKEN_CLOSE_PAREN;        break;
+		case ',':  token->type = TOKEN_COMMA;              break;
+		case '$':  token->type = TOKEN_DOLLAR;             break;
+		case '.':  token->type = TOKEN_DOT;                break;
+		case '{':  token->type = TOKEN_OPEN_BRACE;         break;
+		case '[':  token->type = TOKEN_OPEN_BRACKET;       break;
+		case '(':  token->type = TOKEN_OPEN_PAREN;         break;
+		case '~':  token->type = TOKEN_TILDE;              break;
+
+
+		case '+':
+		case '*':
+		case '^':
+		case '=':  token->type = TOKEN_OPERATOR;           break;
+
+		case '-':
+			c = fileGetc ();
+			if (c == '>')
+				token->type = TOKEN_CONSTRAINT;
+			else if (c == '-')  /* is this the start of a comment? */
+			{
+				skipToCharacter ('\n');
+				goto getNextChar;
+			}
+			else
+			{
+				if (!isspace (c))
+					fileUngetc (c);
+				token->type = TOKEN_OPERATOR;
+			}
+			break;
+
+		case '?':
+		case ':':
+		{
+			int c2 = fileGetc ();
+			if (c2 == '=')
+				token->type = TOKEN_OPERATOR;
+			else
+			{
+				if (!isspace (c2))
+					fileUngetc (c2);
+				if (c == ':')
+					token->type = TOKEN_COLON;
+				else
+					token->type = TOKEN_QUESTION;
+			}
+			break;
+		}
+
+		case '<':
+			c = fileGetc ();
+			if (c != '='  &&  c != '>'  &&  !isspace (c))
+				fileUngetc (c);
+			token->type = TOKEN_OPERATOR;
+			break;
+
+		case '>':
+			c = fileGetc ();
+			if (c != '='  &&  c != '>'  &&  !isspace (c))
+				fileUngetc (c);
+			token->type = TOKEN_OPERATOR;
+			break;
+
+		case '/':
+			c = fileGetc ();
+			if (c != '/'  &&  c != '='  &&  !isspace (c))
+				fileUngetc (c);
+			token->type = TOKEN_OPERATOR;
+			break;
+
+		case '\\':
+			c = fileGetc ();
+			if (c != '\\'  &&  !isspace (c))
+				fileUngetc (c);
+			token->type = TOKEN_OPERATOR;
+			break;
+
+		case '"':
+			token->type = TOKEN_STRING;
+			parseString (token->string);
+			break;
+
+		case '\'':
+			token->type = TOKEN_CHARACTER;
+			parseCharacter ();
+			break;
+
+		default:
+			if (isalpha (c))
+			{
+				parseIdentifier (token->string, c);
+				token->keyword = analyzeToken (token->string, Lang_eiffel);
+				if (isKeyword (token, KEYWORD_NONE))
+					token->type = TOKEN_IDENTIFIER;
+				else
+					token->type = TOKEN_KEYWORD;
+			}
+			else if (isdigit (c))
+			{
+				vString* numeric = parseNumeric (c);
+				vStringCat (token->string, numeric);
+				vStringDelete (numeric);
+				token->type = TOKEN_NUMERIC;
+			}
+			else if (isFreeOperatorChar (c))
+			{
+				parseFreeOperator (token->string, c);
+				token->type = TOKEN_OPERATOR;
+			}
+			else
+			{
+				token->type = TOKEN_UNDEFINED;
+				Assert (! isType (token, TOKEN_UNDEFINED));
+			}
+			break;
+	}
+}
+
+/*
+*   Scanning functions
+*/
+
+static boolean isIdentifierMatch (
+		const tokenInfo *const token, const char *const name)
+{
+	return (boolean) (isType (token, TOKEN_IDENTIFIER)  &&
+		strcasecmp (vStringValue (token->string), name) == 0);
+}
+
+static void findToken (tokenInfo *const token, const tokenType type)
+{
+	while (! isType (token, type))
+		readToken (token);
+}
+
+static void findKeyword (tokenInfo *const token, const keywordId keyword)
+{
+	while (! isKeyword (token, keyword))
+		readToken (token);
+}
+
+static boolean parseType (tokenInfo *const token);
+
+static void parseGeneric (tokenInfo *const token, boolean declaration)
+{
+	unsigned int depth = 0;
+#ifdef TYPE_REFERENCE_TOOL
+	boolean constraint = FALSE;
+#endif
+	Assert (isType (token, TOKEN_OPEN_BRACKET));
+	do
+	{
+		if (isType (token, TOKEN_OPEN_BRACKET))
+		{
+			++depth;
+			readToken (token);
+		}
+		else if (isType (token, TOKEN_CLOSE_BRACKET))
+		{
+			--depth;
+			readToken (token);
+		}
+#ifdef TYPE_REFERENCE_TOOL
+		else if (declaration)
+		{
+			boolean advanced = FALSE;
+			if (depth == 1)
+			{
+				if (isType (token, TOKEN_CONSTRAINT))
+					constraint = TRUE;
+				else if (isKeyword (token, KEYWORD_create))
+					findKeyword (token, KEYWORD_end);
+				else if (isType (token, TOKEN_IDENTIFIER))
+				{
+					if (constraint)
+						advanced = parseType (token);
+					else
+						addGenericName (token);
+					constraint = FALSE;
+				}
+			}
+			else if (isType (token, TOKEN_IDENTIFIER))
+				advanced = parseType (token);
+			if (! advanced)
+				readToken (token);
+		}
+#endif
+		else
+			parseType (token);
+	} while (depth > 0);
+}
+
+static boolean parseType (tokenInfo *const token)
+{
+	tokenInfo* const id = newToken ();
+	copyToken (id, token);
+	readToken (token);
+	if (isType (token, TOKEN_COLON))  /* check for "{entity: TYPE}" */
+	{
+		readToken (id);
+		readToken (token);
+	}
+	if (isKeyword (id, KEYWORD_like))
+	{
+		if (isType (token, TOKEN_IDENTIFIER) ||
+				isKeyword (token, KEYWORD_Current))
+			readToken (token);
+	}
+	else
+	{
+		if (isKeyword (id, KEYWORD_expanded))
+		{
+			copyToken (id, token);
+			readToken (token);
+		}
+		if (isType (id, TOKEN_IDENTIFIER))
+		{
+#ifdef TYPE_REFERENCE_TOOL
+			reportType (id);
+#endif
+			if (isType (token, TOKEN_OPEN_BRACKET))
+				parseGeneric (token, FALSE);
+			else if ((strcmp ("BIT", vStringValue (id->string)) == 0))
+				readToken (token);  /* read token after number of bits */
+		}
+	}
+	deleteToken (id);
+	return TRUE;
+}
+
+static void parseEntityType (tokenInfo *const token)
+{
+	Assert (isType (token, TOKEN_COLON));
+	readToken (token);
+
+	if (isType (token, TOKEN_BANG) || isType (token, TOKEN_QUESTION))
+		readToken (token);  /* skip over '!' or '?' */
+	parseType (token);
+}
+
+static void parseLocal (tokenInfo *const token)
+{
+	Assert (isKeyword (token, KEYWORD_local));
+	readToken (token);
+
+	/*  Check keyword first in case local clause is empty
+	 */
+	while (! isKeyword (token, KEYWORD_do)  &&
+		   ! isKeyword (token, KEYWORD_once))
+	{
+#ifndef TYPE_REFERENCE_TOOL
+		if (isType (token, TOKEN_IDENTIFIER))
+			makeEiffelLocalTag (token);
+#endif
+		readToken (token);
+		if (isType (token, TOKEN_COLON))
+			parseEntityType (token);
+	}
+}
+
+static void findFeatureEnd (tokenInfo *const token)
+{
+	boolean isFound = isKeyword (token, KEYWORD_is);
+	if (isFound)
+		readToken (token);
+	switch (token->keyword)
+	{
+		case KEYWORD_deferred:
+		case KEYWORD_do:
+		case KEYWORD_external:
+		case KEYWORD_local:
+		case KEYWORD_obsolete:
+		case KEYWORD_once:
+		case KEYWORD_require:
+		{
+			int depth = 1;
+
+			while (depth > 0)
+			{
+#ifdef TYPE_REFERENCE_TOOL
+				if (isType (token, TOKEN_OPEN_BRACE))
+				{
+					readToken (token);
+					if (isType (token, TOKEN_IDENTIFIER))
+						parseType (token);
+				}
+				else if (isType (token, TOKEN_BANG))
+				{
+					readToken (token);
+					if (isType (token, TOKEN_IDENTIFIER))
+						parseType (token);
+					if (isType (token, TOKEN_BANG))
+						readToken (token);
+				}
+				else
+#endif
+				switch (token->keyword)
+				{
+					case KEYWORD_check:
+					case KEYWORD_debug:
+					case KEYWORD_from:
+					case KEYWORD_if:
+					case KEYWORD_inspect:
+						++depth;
+						break;
+
+					case KEYWORD_local:
+						parseLocal (token);
+						break;
+
+					case KEYWORD_end:
+						--depth;
+						break;
+
+					default:
+						break;
+				}
+				readToken (token);
+			}
+			break;
+		}
+
+		default:
+			/* is this a manifest constant? */
+			if (isFound || isType (token, TOKEN_OPERATOR)) {
+				if (isType (token, TOKEN_OPERATOR))
+					readToken (token);
+				readToken (token);
+			}
+			break;
+	}
+}
+
+static boolean readFeatureName (tokenInfo *const token)
+{
+	boolean isFeatureName = FALSE;
+
+	if (isKeyword (token, KEYWORD_frozen))
+		readToken (token);
+	if (isType (token, TOKEN_IDENTIFIER))
+		isFeatureName = TRUE;
+	else if (isKeyword (token, KEYWORD_assign))  /* legacy code */
+		isFeatureName = TRUE;
+	else if (isKeyword (token, KEYWORD_infix)  ||
+			isKeyword (token, KEYWORD_prefix))
+	{
+		readToken (token);
+		if (isType (token, TOKEN_STRING))
+			isFeatureName = TRUE;
+	}
+	return isFeatureName;
+}
+
+static void parseArguments (tokenInfo *const token)
+{
+#ifndef TYPE_REFERENCE_TOOL
+	findToken (token, TOKEN_CLOSE_PAREN);
+	readToken (token);
+#else
+	Assert (isType (token, TOKEN_OPEN_PAREN));
+	readToken (token);
+	do
+	{
+		if (isType (token, TOKEN_COLON))
+			parseEntityType (token);
+		else
+			readToken (token);
+	} while (! isType (token, TOKEN_CLOSE_PAREN));
+	readToken (token);
+#endif
+}
+
+static boolean parseFeature (tokenInfo *const token)
+{
+	boolean found = FALSE;
+	while (readFeatureName (token))
+	{
+		found = TRUE;
+#ifndef TYPE_REFERENCE_TOOL
+		makeEiffelFeatureTag (token);
+#endif
+		readToken (token);
+		if (isType (token, TOKEN_COMMA))
+			readToken (token);
+	}
+	if (found)
+	{
+		if (isKeyword (token, KEYWORD_alias)) {
+			readToken (token);
+#ifndef TYPE_REFERENCE_TOOL
+			if (isType (token, TOKEN_STRING))
+				makeEiffelFeatureTag (token);
+#endif
+			readToken (token);
+		}
+		if (isType (token, TOKEN_OPEN_PAREN))  /* arguments? */
+			parseArguments (token);
+		if (isType (token, TOKEN_COLON))       /* a query? */
+			parseEntityType (token);
+		if (isKeyword (token, KEYWORD_assign))
+		{
+			readToken (token);
+			readToken (token);
+		}
+		if (isKeyword (token, KEYWORD_obsolete))
+		{
+			readToken (token);
+			if (isType (token, TOKEN_STRING))
+				readToken (token);
+		}
+		findFeatureEnd (token);
+	}
+	return found;
+}
+
+static void parseExport (tokenInfo *const token)
+{
+	token->isExported = TRUE;
+	readToken (token);
+	if (isType (token, TOKEN_OPEN_BRACE))
+	{
+		token->isExported = FALSE;
+		while (! isType (token, TOKEN_CLOSE_BRACE))
+		{
+			if (isType (token, TOKEN_IDENTIFIER))
+				token->isExported |= !isIdentifierMatch (token, "NONE");
+			readToken (token);
+		}
+		readToken (token);
+	}
+}
+
+static void parseFeatureClauses (tokenInfo *const token)
+{
+	Assert (isKeyword (token, KEYWORD_feature));
+	do
+	{
+		if (isKeyword (token, KEYWORD_feature))
+			parseExport (token);
+		if (! isKeyword (token, KEYWORD_feature) &&
+			! isKeyword (token, KEYWORD_invariant) &&
+			! isKeyword (token, KEYWORD_indexing))
+		{
+			if (! parseFeature (token))
+				readToken (token);
+		}
+	} while (! isKeyword (token, KEYWORD_end) &&
+			 ! isKeyword (token, KEYWORD_invariant) &&
+			 ! isKeyword (token, KEYWORD_indexing));
+}
+
+static void parseRename (tokenInfo *const token)
+{
+	Assert (isKeyword (token, KEYWORD_rename));
+	do {
+		readToken (token);
+		if (readFeatureName (token))
+		{
+			readToken (token);
+			if (isKeyword (token, KEYWORD_as))
+			{
+				readToken (token);
+				if (readFeatureName (token))
+				{
+#ifndef TYPE_REFERENCE_TOOL
+					makeEiffelFeatureTag (token);  /* renamed feature */
+#endif
+					readToken (token);
+				}
+			}
+		}
+	} while (isType (token, TOKEN_COMMA));
+}
+
+static void parseInherit (tokenInfo *const token)
+{
+	Assert (isKeyword (token, KEYWORD_inherit));
+	readToken (token);
+	while (isType (token, TOKEN_IDENTIFIER))
+	{
+		parseType (token);
+		if (isType (token, TOKEN_KEYWORD))
+		{
+			switch (token->keyword)  /* check for feature adaptation */
+			{
+				case KEYWORD_rename:
+					parseRename (token);
+				case KEYWORD_export:
+				case KEYWORD_undefine:
+				case KEYWORD_redefine:
+				case KEYWORD_select:
+					findKeyword (token, KEYWORD_end);
+					readToken (token);
+					break;
+
+				case KEYWORD_end:
+					readToken (token);
+					break;
+
+				default: break;
+			}
+		}
+		if (isType (token, TOKEN_SEMICOLON))
+			readToken (token);
+	}
+}
+
+static void parseConvert (tokenInfo *const token)
+{
+	Assert (isKeyword (token, KEYWORD_convert));
+	do
+	{
+		readToken (token);
+		if (! isType (token, TOKEN_IDENTIFIER))
+			break;
+		else if (isType (token, TOKEN_OPEN_PAREN))
+		{
+			while (! isType (token, TOKEN_CLOSE_PAREN))
+				readToken (token);
+		}
+		else if (isType (token, TOKEN_COLON))
+		{
+			readToken (token);
+			if (! isType (token, TOKEN_OPEN_BRACE))
+				break;
+			else while (! isType (token, TOKEN_CLOSE_BRACE))
+				readToken (token);
+		}
+	} while (isType (token, TOKEN_COMMA));
+}
+
+static void parseClass (tokenInfo *const token)
+{
+	Assert (isKeyword (token, KEYWORD_class));
+	readToken (token);
+	if (isType (token, TOKEN_IDENTIFIER))
+	{
+#ifndef TYPE_REFERENCE_TOOL
+		makeEiffelClassTag (token);
+		readToken (token);
+#else
+		vStringCopy (token->className, token->string);
+		vStringUpper (token->className);
+		if (PrintClass)
+			puts (vStringValue (token->className));
+		if (! PrintReferences)
+			exit (0);
+		readToken (token);
+#endif
+	}
+
+	do
+	{
+		if (isType (token, TOKEN_OPEN_BRACKET))
+			parseGeneric (token, TRUE);
+		else if (! isType (token, TOKEN_KEYWORD))
+			readToken (token);
+		else switch (token->keyword)
+		{
+			case KEYWORD_inherit:  parseInherit (token);        break;
+			case KEYWORD_feature:  parseFeatureClauses (token); break;
+			case KEYWORD_convert:  parseConvert (token);        break;
+			default:               readToken (token);           break;
+		}
+	} while (! isKeyword (token, KEYWORD_end));
+}
+
+static void initialize (const langType language)
+{
+	Lang_eiffel = language;
+	buildEiffelKeywordHash ();
+}
+
+static void findEiffelTags (void)
+{
+	tokenInfo *const token = newToken ();
+	exception_t exception;
+
+	exception = (exception_t) (setjmp (Exception));
+	while (exception == ExceptionNone)
+	{
+		findKeyword (token, KEYWORD_class);
+		parseClass (token);
+	}
+	deleteToken (token);
+}
+
+#ifndef TYPE_REFERENCE_TOOL
+
+extern parserDefinition* EiffelParser (void)
+{
+	static const char *const extensions [] = { "e", NULL };
+	parserDefinition* def = parserNew ("Eiffel");
+	def->kinds      = EiffelKinds;
+	def->kindCount  = KIND_COUNT (EiffelKinds);
+	def->extensions = extensions;
+	def->parser     = findEiffelTags;
+	def->initialize = initialize;
+	return def;
+}
+
+#else
+
+static void findReferences (void)
+{
+	ReferencedTypes = stringListNew ();
+	GenericNames = stringListNew ();
+	initialize (0);
+
+	findEiffelTags ();
+
+	stringListDelete (GenericNames);
+	GenericNames = NULL;
+	stringListDelete (ReferencedTypes);
+	ReferencedTypes = NULL;
+}
+
+static const char *const Usage =
+	"Prints names of types referenced by an Eiffel language file.\n"
+	"\n"
+	"Usage: %s [-cdrs] [file_name | -]\n"
+	"\n"
+	"Options:\n"
+	"    -c    Print class name of current file (on first line of output).\n"
+	"    -d    Enable debug output.\n"
+	"    -r    Print types referenced by current file (default unless -c).\n"
+	"    -s    Include self-references.\n"
+	"\n";
+
+extern int main (int argc, char** argv)
+{
+	int i;
+	for (i = 1  ;  argv [i] != NULL  ;  ++i)
+	{
+		const char *const arg = argv [i];
+		if (arg [0] == '-')
+		{
+			int j;
+			if (arg [1] == '\0')
+			{
+					File = stdin;
+					FileName = "stdin";
+			}
+			else for (j = 1  ;  arg [j] != '\0'  ;  ++j) switch (arg [j])
+			{
+				case 'c':  PrintClass      = 1;  break;
+				case 'r':  PrintReferences = 1;  break;
+				case 's':  SelfReferences  = 1;  break;
+				case 'd':  Debug           = 1;  break;
+				default:
+					fprintf (errout, "%s: unknown option: %c\n", argv [0], arg [1]);
+					fprintf (errout, Usage, argv [0]);
+					exit (1);
+					break;
+			}
+		}
+		else if (File != NULL)
+		{
+			fprintf (errout, Usage, argv [0]);
+			exit (1);
+		}
+		else
+		{
+			FileName = arg;
+			File = fopen (FileName, "r");
+			if (File == NULL)
+			{
+				perror (argv [0]);
+				exit (1);
+			}
+		}
+	}
+	if (! PrintClass)
+		PrintReferences = 1;
+	if (File == NULL)
+	{
+		fprintf (errout, Usage, argv [0]);
+		exit (1);
+	}
+	else
+	{
+		findReferences ();
+		fclose (File);
+	}
+	return 0;
+}
+
+#endif
+
+/* vi:set tabstop=4 shiftwidth=4: */
Index: a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/general.h
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/general.h	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/general.h	(revision 5)
@@ -0,0 +1,125 @@
+/*
+*   $Id: general.h 508 2007-05-03 03:20:59Z dhiebert $
+*
+*   Copyright (c) 1998-2003, Darren Hiebert
+*
+*   This source code is released for free distribution under the terms of the
+*   GNU General Public License.
+*
+*   Provides the general (non-ctags-specific) environment assumed by all.
+*/
+#ifndef _GENERAL_H
+#define _GENERAL_H
+
+/*
+*   INCLUDE FILES
+*/
+#if defined (HAVE_CONFIG_H)
+# include <config.h>
+#elif defined (AMIGA)
+# include "e_amiga.h"
+#elif defined (DJGPP)
+# include "e_djgpp.h"
+#elif defined (macintosh)
+# include "e_mac.h"
+#elif defined (MSDOS) || defined (WIN32)
+# include "e_msoft.h"
+#elif defined (OS2)
+# include "e_os2.h"
+#elif defined (QDOS)
+# include "e_qdos.h"
+#elif defined (RISCOS)
+# include "e_riscos.h"
+#elif defined (__vms) || defined (VMS)
+# include "e_vms.h"
+# ifndef VMS
+#  define VMS 1
+# endif
+#endif
+
+
+/*
+*   MACROS
+*/
+
+/* Define standard error destination
+ */
+#ifndef errout
+# define errout	stderr
+#endif
+
+/* Define regex if supported */
+#if (defined (HAVE_REGCOMP) && !defined (REGCOMP_BROKEN))
+# define HAVE_REGEX 1
+#endif
+
+/*  This is a helpful internal feature of later versions (> 2.7) of GCC
+ *  to prevent warnings about unused variables.
+ */
+#if (__GNUC__ > 2  ||  (__GNUC__ == 2  &&  __GNUC_MINOR__ >= 7)) && !defined (__GNUG__)
+# define __printf__(s,f)  __attribute__((format (printf, s, f)))
+#else
+# define __printf__(s,f)
+#endif
+
+/*
+ *  Portability macros
+ */
+#if !defined(HAVE_STRCASECMP) && !defined(strcasecmp)
+# ifdef HAVE_STRICMP
+#  define strcasecmp(s1,s2) stricmp(s1,s2)
+# else
+#  define strcasecmp(s1,s2) struppercmp(s1,s2)
+# endif
+#endif
+
+#if !defined(HAVE_STRNCASECMP) && !defined(strncasecmp)
+# ifdef HAVE_STRNICMP
+#  define strncasecmp(s1,s2,n) strnicmp(s1,s2,n)
+# else
+#  define strncasecmp(s1,s2,n) strnuppercmp(s1,s2,n)
+# endif
+#endif
+
+/*
+*   DATA DECLARATIONS
+*/
+
+#undef FALSE
+#undef TRUE
+#ifdef VAXC
+typedef enum { FALSE, TRUE } booleanType;
+typedef int boolean;
+#else
+# ifdef __cplusplus
+typedef bool boolean;
+#define FALSE false
+#define TRUE true
+# else
+typedef enum { FALSE, TRUE } boolean;
+# endif
+#endif
+
+#if ! defined (HAVE_FGETPOS) && ! defined (fpos_t)
+# define fpos_t long
+#endif
+
+/*
+*   FUNCTION PROTOTYPES
+*/
+
+#if defined (NEED_PROTO_REMOVE) && defined (HAVE_REMOVE)
+extern int remove (const char *);
+#endif
+
+#if defined (NEED_PROTO_UNLINK) && ! defined (HAVE_REMOVE)
+extern void *unlink (const char *);
+#endif
+
+#ifdef NEED_PROTO_GETENV
+extern char *getenv (const char *);
+#endif
+
+#endif  /* _GENERAL_H */
+
+/* vi:set tabstop=4 shiftwidth=4: */
Index: a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/lregex.c
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/lregex.c	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/lregex.c	(revision 5)
@@ -0,0 +1,704 @@
+/*
+*   $Id: lregex.c 576 2007-06-30 04:16:23Z elliotth $
+*
+*   Copyright (c) 2000-2003, Darren Hiebert
+*
+*   This source code is released for free distribution under the terms of the
+*   GNU General Public License.
+*
+*   This module contains functions for applying regular expression matching.
+*
+*   The code for utlizing the Gnu regex package with regards to processing the
+*   regex option and checking for regex matches was adapted from routines in
+*   Gnu etags.
+*/
+
+/*
+*   INCLUDE FILES
+*/
+#include "general.h"  /* must always come first */
+
+#include <string.h>
+
+#ifdef HAVE_REGCOMP
+# include <ctype.h>
+# include <stddef.h>
+# ifdef HAVE_SYS_TYPES_H
+#  include <sys/types.h>  /* declare off_t (not known to regex.h on FreeBSD) */
+# endif
+# include <regex.h>
+#endif
+
+#include "debug.h"
+#include "entry.h"
+#include "parse.h"
+#include "read.h"
+#include "routines.h"
+
+#ifdef HAVE_REGEX
+
+/*
+*   MACROS
+*/
+
+/* Back-references \0 through \9 */
+#define BACK_REFERENCE_COUNT 10
+
+#if defined (HAVE_REGCOMP) && !defined (REGCOMP_BROKEN)
+# define POSIX_REGEX
+#endif
+
+#define REGEX_NAME "Regex"
+
+/*
+*   DATA DECLARATIONS
+*/
+#if defined (POSIX_REGEX)
+
+struct sKind {
+	boolean enabled;
+	char letter;
+	char* name;
+	char* description;
+};
+
+enum pType { PTRN_TAG, PTRN_CALLBACK };
+
+typedef struct {
+	regex_t *pattern;
+	enum pType type;
+	union {
+		struct {
+			char *name_pattern;
+			struct sKind kind;
+		} tag;
+		struct {
+			regexCallback function;
+		} callback;
+	} u;
+} regexPattern;
+
+#endif
+
+typedef struct {
+	regexPattern *patterns;
+	unsigned int count;
+} patternSet;
+
+/*
+*   DATA DEFINITIONS
+*/
+
+static boolean regexBroken = FALSE;
+
+/* Array of pattern sets, indexed by language */
+static patternSet* Sets = NULL;
+static int SetUpper = -1;  /* upper language index in list */
+
+/*
+*   FUNCTION DEFINITIONS
+*/
+
+static void clearPatternSet (const langType language)
+{
+	if (language <= SetUpper)
+	{
+		patternSet* const set = Sets + language;
+		unsigned int i;
+		for (i = 0  ;  i < set->count  ;  ++i)
+		{
+			regexPattern *p = &set->patterns [i];
+#if defined (POSIX_REGEX)
+			regfree (p->pattern);
+#endif
+			eFree (p->pattern);
+			p->pattern = NULL;
+
+			if (p->type == PTRN_TAG)
+			{
+				eFree (p->u.tag.name_pattern);
+				p->u.tag.name_pattern = NULL;
+				eFree (p->u.tag.kind.name);
+				p->u.tag.kind.name = NULL;
+				if (p->u.tag.kind.description != NULL)
+				{
+					eFree (p->u.tag.kind.description);
+					p->u.tag.kind.description = NULL;
+				}
+			}
+		}
+		if (set->patterns != NULL)
+			eFree (set->patterns);
+		set->patterns = NULL;
+		set->count = 0;
+	}
+}
+
+/*
+*   Regex psuedo-parser
+*/
+
+static void makeRegexTag (
+		const vString* const name, const struct sKind* const kind)
+{
+	if (kind->enabled)
+	{
+		tagEntryInfo e;
+		Assert (name != NULL  &&  vStringLength (name) > 0);
+		Assert (kind != NULL);
+		initTagEntry (&e, vStringValue (name));
+		e.kind     = kind->letter;
+		e.kindName = kind->name;
+		makeTagEntry (&e);
+	}
+}
+
+/*
+*   Regex pattern definition
+*/
+
+/* Take a string like "/blah/" and turn it into "blah", making sure
+ * that the first and last characters are the same, and handling
+ * quoted separator characters.  Actually, stops on the occurrence of
+ * an unquoted separator.  Also turns "\t" into a Tab character.
+ * Returns pointer to terminating separator.  Works in place.  Null
+ * terminates name string.
+ */
+static char* scanSeparators (char* name)
+{
+	char sep = name [0];
+	char *copyto = name;
+	boolean quoted = FALSE;
+
+	for (++name ; *name != '\0' ; ++name)
+	{
+		if (quoted)
+		{
+			if (*name == sep)
+				*copyto++ = sep;
+			else if (*name == 't')
+				*copyto++ = '\t';
+			else
+			{
+				/* Something else is quoted, so preserve the quote. */
+				*copyto++ = '\\';
+				*copyto++ = *name;
+			}
+			quoted = FALSE;
+		}
+		else if (*name == '\\')
+			quoted = TRUE;
+		else if (*name == sep)
+		{
+			break;
+		}
+		else
+			*copyto++ = *name;
+	}
+	*copyto = '\0';
+	return name;
+}
+
+/* Parse `regexp', in form "/regex/name/[k,Kind/]flags" (where the separator
+ * character is whatever the first character of `regexp' is), by breaking it
+ * up into null terminated strings, removing the separators, and expanding
+ * '\t' into tabs. When complete, `regexp' points to the line matching
+ * pattern, a pointer to the name matching pattern is written to `name', a
+ * pointer to the kinds is written to `kinds' (possibly NULL), and a pointer
+ * to the trailing flags is written to `flags'. If the pattern is not in the
+ * correct format, a false value is returned.
+ */
+static boolean parseTagRegex (
+		char* const regexp, char** const name,
+		char** const kinds, char** const flags)
+{
+	boolean result = FALSE;
+	const int separator = (unsigned char) regexp [0];
+
+	*name = scanSeparators (regexp);
+	if (*regexp == '\0')
+		error (WARNING, "empty regexp");
+	else if (**name != separator)
+		error (WARNING, "%s: incomplete regexp", regexp);
+	else
+	{
+		char* const third = scanSeparators (*name);
+		if (**name == '\0')
+			error (WARNING, "%s: regexp missing name pattern", regexp);
+		if ((*name) [strlen (*name) - 1] == '\\')
+			error (WARNING, "error in name pattern: \"%s\"", *name);
+		if (*third != separator)
+			error (WARNING, "%s: regexp missing final separator", regexp);
+		else
+		{
+			char* const fourth = scanSeparators (third);
+			if (*fourth == separator)
+			{
+				*kinds = third;
+				scanSeparators (fourth);
+				*flags = fourth;
+			}
+			else
+			{
+				*flags = third;
+				*kinds = NULL;
+			}
+			result = TRUE;
+		}
+	}
+	return result;
+}
+
+static void addCompiledTagPattern (
+		const langType language, regex_t* const pattern,
+		char* const name, const char kind, char* const kindName,
+		char *const description)
+{
+	patternSet* set;
+	regexPattern *ptrn;
+	if (language > SetUpper)
+	{
+		int i;
+		Sets = xRealloc (Sets, (language + 1), patternSet);
+		for (i = SetUpper + 1  ;  i <= language  ;  ++i)
+		{
+			Sets [i].patterns = NULL;
+			Sets [i].count = 0;
+		}
+		SetUpper = language;
+	}
+	set = Sets + language;
+	set->patterns = xRealloc (set->patterns, (set->count + 1), regexPattern);
+	ptrn = &set->patterns [set->count];
+	set->count += 1;
+
+	ptrn->pattern = pattern;
+	ptrn->type    = PTRN_TAG;
+	ptrn->u.tag.name_pattern = name;
+	ptrn->u.tag.kind.enabled = TRUE;
+	ptrn->u.tag.kind.letter  = kind;
+	ptrn->u.tag.kind.name    = kindName;
+	ptrn->u.tag.kind.description = description;
+}
+
+static void addCompiledCallbackPattern (
+		const langType language, regex_t* const pattern,
+		const regexCallback callback)
+{
+	patternSet* set;
+	regexPattern *ptrn;
+	if (language > SetUpper)
+	{
+		int i;
+		Sets = xRealloc (Sets, (language + 1), patternSet);
+		for (i = SetUpper + 1  ;  i <= language  ;  ++i)
+		{
+			Sets [i].patterns = NULL;
+			Sets [i].count = 0;
+		}
+		SetUpper = language;
+	}
+	set = Sets + language;
+	set->patterns = xRealloc (set->patterns, (set->count + 1), regexPattern);
+	ptrn = &set->patterns [set->count];
+	set->count += 1;
+
+	ptrn->pattern = pattern;
+	ptrn->type    = PTRN_CALLBACK;
+	ptrn->u.callback.function = callback;
+}
+
+#if defined (POSIX_REGEX)
+
+static regex_t* compileRegex (const char* const regexp, const char* const flags)
+{
+	int cflags = REG_EXTENDED | REG_NEWLINE;
+	regex_t *result = NULL;
+	int errcode;
+	int i;
+	for (i = 0  ; flags != NULL  &&  flags [i] != '\0'  ;  ++i)
+	{
+		switch ((int) flags [i])
+		{
+			case 'b': cflags &= ~REG_EXTENDED; break;
+			case 'e': cflags |= REG_EXTENDED;  break;
+			case 'i': cflags |= REG_ICASE;     break;
+			default: error (WARNING, "unknown regex flag: '%c'", *flags); break;
+		}
+	}
+	result = xMalloc (1, regex_t);
+	errcode = regcomp (result, regexp, cflags);
+	if (errcode != 0)
+	{
+		char errmsg[256];
+		regerror (errcode, result, errmsg, 256);
+		error (WARNING, "regcomp %s: %s", regexp, errmsg);
+		regfree (result);
+		eFree (result);
+		result = NULL;
+	}
+	return result;
+}
+
+#endif
+
+static void parseKinds (
+		const char* const kinds, char* const kind, char** const kindName,
+		char **description)
+{
+	*kind = '\0';
+	*kindName = NULL;
+	*description = NULL;
+	if (kinds == NULL  ||  kinds [0] == '\0')
+	{
+		*kind = 'r';
+		*kindName = eStrdup ("regex");
+	}
+	else if (kinds [0] != '\0')
+	{
+		const char* k = kinds;
+		if (k [0] != ','  &&  (k [1] == ','  ||  k [1] == '\0'))
+			*kind = *k++;
+		else
+			*kind = 'r';
+		if (*k == ',')
+			++k;
+		if (k [0] == '\0')
+			*kindName = eStrdup ("regex");
+		else
+		{
+			const char *const comma = strchr (k, ',');
+			if (comma == NULL)
+				*kindName = eStrdup (k);
+			else
+			{
+				*kindName = (char*) eMalloc (comma - k + 1);
+				strncpy (*kindName, k, comma - k);
+				(*kindName) [comma - k] = '\0';
+				k = comma + 1;
+				if (k [0] != '\0')
+					*description = eStrdup (k);
+			}
+		}
+	}
+}
+
+static void printRegexKind (const regexPattern *pat, unsigned int i, boolean indent)
+{
+	const struct sKind *const kind = &pat [i].u.tag.kind;
+	const char *const indentation = indent ? "    " : "";
+	Assert (pat [i].type == PTRN_TAG);
+	printf ("%s%c  %s %s\n", indentation,
+			kind->letter != '\0' ? kind->letter : '?',
+			kind->description != NULL ? kind->description : kind->name,
+			kind->enabled ? "" : " [off]");
+}
+
+static void processLanguageRegex (const langType language,
+		const char* const parameter)
+{
+	if (parameter == NULL  ||  parameter [0] == '\0')
+		clearPatternSet (language);
+	else if (parameter [0] != '@')
+		addLanguageRegex (language, parameter);
+	else if (! doesFileExist (parameter + 1))
+		error (WARNING, "cannot open regex file");
+	else
+	{
+		const char* regexfile = parameter + 1;
+		FILE* const fp = fopen (regexfile, "r");
+		if (fp == NULL)
+			error (WARNING | PERROR, regexfile);
+		else
+		{
+			vString* const regex = vStringNew ();
+			while (readLine (regex, fp))
+				addLanguageRegex (language, vStringValue (regex));
+			fclose (fp);
+			vStringDelete (regex);
+		}
+	}
+}
+
+/*
+*   Regex pattern matching
+*/
+
+#if defined (POSIX_REGEX)
+
+static vString* substitute (
+		const char* const in, const char* out,
+		const int nmatch, const regmatch_t* const pmatch)
+{
+	vString* result = vStringNew ();
+	const char* p;
+	for (p = out  ;  *p != '\0'  ;  p++)
+	{
+		if (*p == '\\'  &&  isdigit ((int) *++p))
+		{
+			const int dig = *p - '0';
+			if (0 < dig  &&  dig < nmatch  &&  pmatch [dig].rm_so != -1)
+			{
+				const int diglen = pmatch [dig].rm_eo - pmatch [dig].rm_so;
+				vStringNCatS (result, in + pmatch [dig].rm_so, diglen);
+			}
+		}
+		else if (*p != '\n'  &&  *p != '\r')
+			vStringPut (result, *p);
+	}
+	vStringTerminate (result);
+	return result;
+}
+
+static void matchTagPattern (const vString* const line,
+		const regexPattern* const patbuf,
+		const regmatch_t* const pmatch)
+{
+	vString *const name = substitute (vStringValue (line),
+			patbuf->u.tag.name_pattern, BACK_REFERENCE_COUNT, pmatch);
+	vStringStripLeading (name);
+	vStringStripTrailing (name);
+	if (vStringLength (name) > 0)
+		makeRegexTag (name, &patbuf->u.tag.kind);
+	else
+		error (WARNING, "%s:%ld: null expansion of name pattern \"%s\"",
+			getInputFileName (), getInputLineNumber (),
+			patbuf->u.tag.name_pattern);
+	vStringDelete (name);
+}
+
+static void matchCallbackPattern (
+		const vString* const line, const regexPattern* const patbuf,
+		const regmatch_t* const pmatch)
+{
+	regexMatch matches [BACK_REFERENCE_COUNT];
+	unsigned int count = 0;
+	int i;
+	for (i = 0  ;  i < BACK_REFERENCE_COUNT  &&  pmatch [i].rm_so != -1  ;  ++i)
+	{
+		matches [i].start  = pmatch [i].rm_so;
+		matches [i].length = pmatch [i].rm_eo - pmatch [i].rm_so;
+		++count;
+	}
+	patbuf->u.callback.function (vStringValue (line), matches, count);
+}
+
+static boolean matchRegexPattern (const vString* const line,
+		const regexPattern* const patbuf)
+{
+	boolean result = FALSE;
+	regmatch_t pmatch [BACK_REFERENCE_COUNT];
+	const int match = regexec (patbuf->pattern, vStringValue (line),
+							   BACK_REFERENCE_COUNT, pmatch, 0);
+	if (match == 0)
+	{
+		result = TRUE;
+		if (patbuf->type == PTRN_TAG)
+			matchTagPattern (line, patbuf, pmatch);
+		else if (patbuf->type == PTRN_CALLBACK)
+			matchCallbackPattern (line, patbuf, pmatch);
+		else
+		{
+			Assert ("invalid pattern type" == NULL);
+			result = FALSE;
+		}
+	}
+	return result;
+}
+
+#endif
+
+/* PUBLIC INTERFACE */
+
+/* Match against all patterns for specified language. Returns true if at least
+ * on pattern matched.
+ */
+extern boolean matchRegex (const vString* const line, const langType language)
+{
+	boolean result = FALSE;
+	if (language != LANG_IGNORE  &&  language <= SetUpper  &&
+		Sets [language].count > 0)
+	{
+		const patternSet* const set = Sets + language;
+		unsigned int i;
+		for (i = 0  ;  i < set->count  ;  ++i)
+			if (matchRegexPattern (line, set->patterns + i))
+				result = TRUE;
+	}
+	return result;
+}
+
+extern void findRegexTags (void)
+{
+	/* merely read all lines of the file */
+	while (fileReadLine () != NULL)
+		;
+}
+
+#endif  /* HAVE_REGEX */
+
+extern void addTagRegex (
+		const langType language,
+		const char* const regex,
+		const char* const name,
+		const char* const kinds,
+		const char* const flags)
+{
+#ifdef HAVE_REGEX
+	Assert (regex != NULL);
+	Assert (name != NULL);
+	if (! regexBroken)
+	{
+		regex_t* const cp = compileRegex (regex, flags);
+		if (cp != NULL)
+		{
+			char kind;
+			char* kindName;
+			char* description;
+			parseKinds (kinds, &kind, &kindName, &description);
+			addCompiledTagPattern (language, cp, eStrdup (name),
+					kind, kindName, description);
+		}
+	}
+#endif
+}
+
+extern void addCallbackRegex (
+		const langType language,
+		const char* const regex,
+		const char* const flags,
+		const regexCallback callback)
+{
+#ifdef HAVE_REGEX
+	Assert (regex != NULL);
+	if (! regexBroken)
+	{
+		regex_t* const cp = compileRegex (regex, flags);
+		if (cp != NULL)
+			addCompiledCallbackPattern (language, cp, callback);
+	}
+#endif
+}
+
+extern void addLanguageRegex (
+		const langType language, const char* const regex)
+{
+#ifdef HAVE_REGEX
+	if (! regexBroken)
+	{
+		char *const regex_pat = eStrdup (regex);
+		char *name, *kinds, *flags;
+		if (parseTagRegex (regex_pat, &name, &kinds, &flags))
+		{
+			addTagRegex (language, regex_pat, name, kinds, flags);
+			eFree (regex_pat);
+		}
+	}
+#endif
+}
+
+/*
+*   Regex option parsing
+*/
+
+extern boolean processRegexOption (const char *const option,
+								   const char *const parameter)
+{
+	boolean handled = FALSE;
+	const char* const dash = strchr (option, '-');
+	if (dash != NULL  &&  strncmp (option, "regex", dash - option) == 0)
+	{
+#ifdef HAVE_REGEX
+		langType language;
+		language = getNamedLanguage (dash + 1);
+		if (language == LANG_IGNORE)
+			error (WARNING, "unknown language \"%s\" in --%s option", (dash + 1), option);
+		else
+			processLanguageRegex (language, parameter);
+#else
+		error (WARNING, "regex support not available; required for --%s option",
+		   option);
+#endif
+		handled = TRUE;
+	}
+	return handled;
+}
+
+extern void disableRegexKinds (const langType language)
+{
+#ifdef HAVE_REGEX
+	if (language <= SetUpper  &&  Sets [language].count > 0)
+	{
+		patternSet* const set = Sets + language;
+		unsigned int i;
+		for (i = 0  ;  i < set->count  ;  ++i)
+			if (set->patterns [i].type == PTRN_TAG)
+				set->patterns [i].u.tag.kind.enabled = FALSE;
+	}
+#endif
+}
+
+extern boolean enableRegexKind (
+		const langType language,
+		const int kind, const boolean mode)
+{
+	boolean result = FALSE;
+#ifdef HAVE_REGEX
+	if (language <= SetUpper  &&  Sets [language].count > 0)
+	{
+		patternSet* const set = Sets + language;
+		unsigned int i;
+		for (i = 0  ;  i < set->count  ;  ++i)
+			if (set->patterns [i].type == PTRN_TAG &&
+				set->patterns [i].u.tag.kind.letter == kind)
+			{
+				set->patterns [i].u.tag.kind.enabled = mode;
+				result = TRUE;
+			}
+	}
+#endif
+	return result;
+}
+
+extern void printRegexKinds (const langType language, boolean indent)
+{
+#ifdef HAVE_REGEX
+	if (language <= SetUpper  &&  Sets [language].count > 0)
+	{
+		patternSet* const set = Sets + language;
+		unsigned int i;
+		for (i = 0  ;  i < set->count  ;  ++i)
+			if (set->patterns [i].type == PTRN_TAG)
+				printRegexKind (set->patterns, i, indent);
+	}
+#endif
+}
+
+extern void freeRegexResources (void)
+{
+#ifdef HAVE_REGEX
+	int i;
+	for (i = 0  ;  i <= SetUpper  ;  ++i)
+		clearPatternSet (i);
+	if (Sets != NULL)
+		eFree (Sets);
+	Sets = NULL;
+	SetUpper = -1;
+#endif
+}
+
+/* Check for broken regcomp() on Cygwin */
+extern void checkRegex (void)
+{
+#if defined (HAVE_REGEX) && defined (CHECK_REGCOMP)
+	regex_t patbuf;
+	int errcode;
+	if (regcomp (&patbuf, "/hello/", 0) != 0)
+	{
+		error (WARNING, "Disabling broken regex");
+		regexBroken = TRUE;
+	}
+#endif
+}
+
+/* vi:set tabstop=4 shiftwidth=4: */
Index: a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/lua.c
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/lua.c	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/lua.c	(revision 5)
@@ -0,0 +1,133 @@
+/*
+*   $Id: lua.c 443 2006-05-30 04:37:13Z darren $
+*
+*   Copyright (c) 2000-2001, Max Ischenko <mfi@ukr.net>.
+*
+*   This source code is released for free distribution under the terms of the
+*   GNU General Public License.
+*
+*   This module contains functions for generating tags for Lua language.
+*/
+
+/*
+*   INCLUDE FILES
+*/
+#include "general.h"  /* must always come first */
+
+#include <string.h>
+
+#include "options.h"
+#include "parse.h"
+#include "read.h"
+#include "vstring.h"
+
+/*
+*   DATA DEFINITIONS
+*/
+typedef enum {
+	K_FUNCTION
+} luaKind;
+
+static kindOption LuaKinds [] = {
+	{ TRUE, 'f', "function", "functions" }
+};
+
+/*
+*   FUNCTION DEFINITIONS
+*/
+
+/* for debugging purposes */
+static void print_string (char *p, char *q)
+{
+	for ( ; p != q; p++)
+		fprintf (errout, "%c", *p);
+	fprintf (errout, "\n");
+}
+
+/*
+ * Helper function.
+ * Returns 1 if line looks like a line of Lua code.
+ *
+ * TODO: Recognize UNIX bang notation.
+ * (Lua treat first line as a comment if it starts with #!)
+ *
+ */
+static boolean is_a_code_line (const unsigned char *line)
+{
+	boolean result;
+	const unsigned char *p = line;
+	while (isspace ((int) *p))
+		p++;
+	if (p [0] == '\0')
+		result = FALSE;
+	else if (p [0] == '-' && p [1] == '-')
+		result = FALSE;
+	else
+		result = TRUE;
+	return result;
+}
+
+static void extract_name (const char *begin, const char *end, vString *name)
+{
+	if (begin != NULL  &&  end != NULL  &&  begin < end)
+	{
+		const char *cp;
+
+		while (isspace ((int) *begin))
+			begin++;
+		while (isspace ((int) *end))
+			end--;
+		if (begin < end)
+		{
+			for (cp = begin ; cp != end; cp++)
+				vStringPut (name, (int) *cp);
+			vStringTerminate (name);
+
+			makeSimpleTag (name, LuaKinds, K_FUNCTION);
+			vStringClear (name);
+		}
+	}
+}
+
+static void findLuaTags (void)
+{
+	vString *name = vStringNew ();
+	const unsigned char *line;
+
+	while ((line = fileReadLine ()) != NULL)
+	{
+		const char *p, *q;
+
+		if (! is_a_code_line (line))
+			continue;
+
+		p = (const char*) strstr ((const char*) line, "function");
+		if (p == NULL)
+			continue;
+
+		q = strchr ((const char*) line, '=');
+		
+		if (q == NULL) {
+			p = p + 9;  /* skip the `function' word */
+			q = strchr ((const char*) p, '(');
+			extract_name (p, q, name);
+		} else {
+			p = (const char*) &line[0];
+			extract_name (p, q, name);
+		}
+	}
+	vStringDelete (name);
+}
+
+extern parserDefinition* LuaParser (void)
+{
+	static const char* const extensions [] = { "lua", NULL };
+	parserDefinition* def = parserNew ("Lua");
+	def->kinds      = LuaKinds;
+	def->kindCount  = KIND_COUNT (LuaKinds);
+	def->extensions = extensions;
+	def->parser     = findLuaTags;
+	return def;
+}
+
+/* vi:set tabstop=4 shiftwidth=4: */
Index: a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/main.c
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/main.c	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/main.c	(revision 5)
@@ -0,0 +1,579 @@
+/*
+*   $Id: main.c 536 2007-06-02 06:09:00Z elliotth $
+*
+*   Copyright (c) 1996-2003, Darren Hiebert
+*
+*   Author: Darren Hiebert <dhiebert@users.sourceforge.net>
+*           http://ctags.sourceforge.net
+*
+*   This source code is released for free distribution under the terms of the
+*   GNU General Public License. It is provided on an as-is basis and no
+*   responsibility is accepted for its failure to perform as expected.
+*
+*   This is a reimplementation of the ctags (1) program. It is an attempt to
+*   provide a fully featured ctags program which is free of the limitations
+*   which most (all?) others are subject to.
+*
+*   This module contains the start-up code and routines to determine the list
+*   of files to parsed for tags.
+*/
+
+/*
+*   INCLUDE FILES
+*/
+#include "general.h"  /* must always come first */
+
+#include <string.h>
+
+/*  To provide timings features if available.
+ */
+#ifdef HAVE_CLOCK
+# ifdef HAVE_TIME_H
+#  include <time.h>
+# endif
+#else
+# ifdef HAVE_TIMES
+#  ifdef HAVE_SYS_TIMES_H
+#   include <sys/times.h>
+#  endif
+# endif
+#endif
+
+/*  To provide directory searching for recursion feature.
+ */
+#ifdef AMIGA
+# include <dos/dosasl.h>       /* for struct AnchorPath */
+# include <clib/dos_protos.h>  /* function prototypes */
+# define ANCHOR_BUF_SIZE 512
+# define ANCHOR_SIZE (sizeof (struct AnchorPath) + ANCHOR_BUF_SIZE)
+# ifdef __SASC
+   extern struct DosLibrary *DOSBase;
+#  include <pragmas/dos_pragmas.h>
+# endif
+#endif
+
+#ifdef HAVE_DIRENT_H
+# ifdef __BORLANDC__
+#  define boolean BORLAND_boolean
+# endif
+# ifdef HAVE_SYS_TYPES_H
+#  include <sys/types.h>  /* required by dirent.h */
+# endif
+# include <dirent.h>  /* to declare opendir() */
+# undef boolean
+#endif
+#ifdef HAVE_DIRECT_H
+# include <direct.h>  /* to _getcwd() */
+#endif
+#ifdef HAVE_DOS_H
+# include <dos.h>  /* to declare FA_DIREC */
+#endif
+#ifdef HAVE_DIR_H
+# include <dir.h>  /* to declare findfirst() and findnext */
+#endif
+#ifdef HAVE_IO_H
+# include <io.h>  /* to declare _findfirst() */
+#endif
+
+
+#include "debug.h"
+#include "keyword.h"
+#include "main.h"
+#include "options.h"
+#include "read.h"
+#include "routines.h"
+
+/*
+*   MACROS
+*/
+#define plural(value)  (((unsigned long)(value) == 1L) ? "" : "s")
+
+/*
+*   DATA DEFINITIONS
+*/
+static struct { long files, lines, bytes; } Totals = { 0, 0, 0 };
+
+#ifdef AMIGA
+# include "ctags.h"
+  static const char *VERsion = "$VER: "PROGRAM_NAME" "PROGRAM_VERSION" "
+# ifdef __SASC
+  __AMIGADATE__
+# else
+  __DATE__
+# endif
+  " "AUTHOR_NAME" $";
+#endif
+
+/*
+*   FUNCTION PROTOTYPES
+*/
+static boolean createTagsForEntry (const char *const entryName);
+
+/*
+*   FUNCTION DEFINITIONS
+*/
+
+extern void addTotals (
+		const unsigned int files, const long unsigned int lines,
+		const long unsigned int bytes)
+{
+	Totals.files += files;
+	Totals.lines += lines;
+	Totals.bytes += bytes;
+}
+
+extern boolean isDestinationStdout (void)
+{
+	boolean toStdout = FALSE;
+
+	if (Option.xref  ||  Option.filter  ||
+		(Option.tagFileName != NULL  &&  (strcmp (Option.tagFileName, "-") == 0
+#if defined (VMS)
+	|| strcmp (Option.tagFileName, "sys$output") == 0
+#else
+	|| strcmp (Option.tagFileName, "/dev/stdout") == 0
+#endif
+		)))
+		toStdout = TRUE;
+	return toStdout;
+}
+
+#if defined (HAVE_OPENDIR)
+static boolean recurseUsingOpendir (const char *const dirName)
+{
+	boolean resize = FALSE;
+	DIR *const dir = opendir (dirName);
+	if (dir == NULL)
+		error (WARNING | PERROR, "cannot recurse into directory \"%s\"", dirName);
+	else
+	{
+		struct dirent *entry;
+		while ((entry = readdir (dir)) != NULL)
+		{
+			if (strcmp (entry->d_name, ".") != 0  &&
+				strcmp (entry->d_name, "..") != 0)
+			{
+				vString *filePath;
+				if (strcmp (dirName, ".") == 0)
+					filePath = vStringNewInit (entry->d_name);
+				else
+					filePath = combinePathAndFile (dirName, entry->d_name);
+				resize |= createTagsForEntry (vStringValue (filePath));
+				vStringDelete (filePath);
+			}
+		}
+		closedir (dir);
+	}
+	return resize;
+}
+
+#elif defined (HAVE_FINDFIRST) || defined (HAVE__FINDFIRST)
+
+static boolean createTagsForWildcardEntry (
+		const char *const pattern, const size_t dirLength,
+		const char *const entryName)
+{
+	boolean resize = FALSE;
+	/* we must not recurse into the directories "." or ".." */
+	if (strcmp (entryName, ".") != 0  &&  strcmp (entryName, "..") != 0)
+	{
+		vString *const filePath = vStringNew ();
+		vStringNCopyS (filePath, pattern, dirLength);
+		vStringCatS (filePath, entryName);
+		resize = createTagsForEntry (vStringValue (filePath));
+		vStringDelete (filePath);
+	}
+	return resize;
+}
+
+static boolean createTagsForWildcardUsingFindfirst (const char *const pattern)
+{
+	boolean resize = FALSE;
+	const size_t dirLength = baseFilename (pattern) - pattern;
+#if defined (HAVE_FINDFIRST)
+	struct ffblk fileInfo;
+	int result = findfirst (pattern, &fileInfo, FA_DIREC);
+	while (result == 0)
+	{
+		const char *const entry = (const char *) fileInfo.ff_name;
+		resize |= createTagsForWildcardEntry (pattern, dirLength, entry);
+		result = findnext (&fileInfo);
+	}
+#elif defined (HAVE__FINDFIRST)
+	struct _finddata_t fileInfo;
+	findfirst_t hFile = _findfirst (pattern, &fileInfo);
+	if (hFile != -1L)
+	{
+		do
+		{
+			const char *const entry = (const char *) fileInfo.name;
+			resize |= createTagsForWildcardEntry (pattern, dirLength, entry);
+		} while (_findnext (hFile, &fileInfo) == 0);
+		_findclose (hFile);
+	}
+#endif
+	return resize;
+}
+
+#elif defined (AMIGA)
+
+static boolean createTagsForAmigaWildcard (const char *const pattern)
+{
+	boolean resize = FALSE;
+	struct AnchorPath *const anchor =
+			(struct AnchorPath *) eMalloc ((size_t) ANCHOR_SIZE);
+	LONG result;
+
+	memset (anchor, 0, (size_t) ANCHOR_SIZE);
+	anchor->ap_Strlen = ANCHOR_BUF_SIZE;
+	/* Allow '.' for current directory */
+#ifdef APF_DODOT
+	anchor->ap_Flags = APF_DODOT | APF_DOWILD;
+#else
+	anchor->ap_Flags = APF_DoDot | APF_DoWild;
+#endif
+	result = MatchFirst ((UBYTE *) pattern, anchor);
+	while (result == 0)
+	{
+		resize |= createTagsForEntry ((char *) anchor->ap_Buf);
+		result = MatchNext (anchor);
+	}
+	MatchEnd (anchor);
+	eFree (anchor);
+	return resize;
+}
+#endif
+
+static boolean recurseIntoDirectory (const char *const dirName)
+{
+	boolean resize = FALSE;
+	if (isRecursiveLink (dirName))
+		verbose ("ignoring \"%s\" (recursive link)\n", dirName);
+	else if (! Option.recurse)
+		verbose ("ignoring \"%s\" (directory)\n", dirName);
+	else
+	{
+		verbose ("RECURSING into directory \"%s\"\n", dirName);
+#if defined (HAVE_OPENDIR)
+		resize = recurseUsingOpendir (dirName);
+#elif defined (HAVE_FINDFIRST) || defined (HAVE__FINDFIRST)
+		{
+			vString *const pattern = vStringNew ();
+			vStringCopyS (pattern, dirName);
+			vStringPut (pattern, OUTPUT_PATH_SEPARATOR);
+			vStringCatS (pattern, "*.*");
+			resize = createTagsForWildcardUsingFindfirst (vStringValue (pattern));
+			vStringDelete (pattern);
+		}
+#elif defined (AMIGA)
+		{
+			vString *const pattern = vStringNew ();
+			if (*dirName != '\0'  &&  strcmp (dirName, ".") != 0)
+			{
+				vStringCopyS (pattern, dirName);
+				if (dirName [strlen (dirName) - 1] != '/')
+					vStringPut (pattern, '/');
+			}
+			vStringCatS (pattern, "#?");
+			resize = createTagsForAmigaWildcard (vStringValue (pattern));
+			vStringDelete (pattern);
+		}
+#endif
+	}
+	return resize;
+}
+
+static boolean createTagsForEntry (const char *const entryName)
+{
+	boolean resize = FALSE;
+	fileStatus *status = eStat (entryName);
+
+	Assert (entryName != NULL);
+	if (isExcludedFile (entryName))
+		verbose ("excluding \"%s\"\n", entryName);
+	else if (status->isSymbolicLink  &&  ! Option.followLinks)
+		verbose ("ignoring \"%s\" (symbolic link)\n", entryName);
+	else if (! status->exists)
+		error (WARNING | PERROR, "cannot open source file \"%s\"", entryName);
+	else if (status->isDirectory)
+		resize = recurseIntoDirectory (entryName);
+	else if (! status->isNormalFile)
+		verbose ("ignoring \"%s\" (special file)\n", entryName);
+	else
+		resize = parseFile (entryName);
+
+	eStatFree (status);
+	return resize;
+}
+
+#ifdef MANUAL_GLOBBING
+
+static boolean createTagsForWildcardArg (const char *const arg)
+{
+	boolean resize = FALSE;
+	vString *const pattern = vStringNewInit (arg);
+	char *patternS = vStringValue (pattern);
+
+#if defined (HAVE_FINDFIRST) || defined (HAVE__FINDFIRST)
+	/*  We must transform the "." and ".." forms into something that can
+	 *  be expanded by the findfirst/_findfirst functions.
+	 */
+	if (Option.recurse  &&
+		(strcmp (patternS, ".") == 0  ||  strcmp (patternS, "..") == 0))
+	{
+		vStringPut (pattern, OUTPUT_PATH_SEPARATOR);
+		vStringCatS (pattern, "*.*");
+	}
+	resize |= createTagsForWildcardUsingFindfirst (patternS);
+#endif
+	vStringDelete (pattern);
+	return resize;
+}
+
+#endif
+
+static boolean createTagsForArgs (cookedArgs *const args)
+{
+	boolean resize = FALSE;
+
+	/*  Generate tags for each argument on the command line.
+	 */
+	while (! cArgOff (args))
+	{
+		const char *const arg = cArgItem (args);
+
+#ifdef MANUAL_GLOBBING
+		resize |= createTagsForWildcardArg (arg);
+#else
+		resize |= createTagsForEntry (arg);
+#endif
+		cArgForth (args);
+		parseOptions (args);
+	}
+	return resize;
+}
+
+/*  Read from an opened file a list of file names for which to generate tags.
+ */
+static boolean createTagsFromFileInput (FILE *const fp, const boolean filter)
+{
+	boolean resize = FALSE;
+	if (fp != NULL)
+	{
+		cookedArgs *args = cArgNewFromLineFile (fp);
+		parseOptions (args);
+		while (! cArgOff (args))
+		{
+			resize |= createTagsForEntry (cArgItem (args));
+			if (filter)
+			{
+				if (Option.filterTerminator != NULL)
+					fputs (Option.filterTerminator, stdout);
+				fflush (stdout);
+			}
+			cArgForth (args);
+			parseOptions (args);
+		}
+		cArgDelete (args);
+	}
+	return resize;
+}
+
+/*  Read from a named file a list of file names for which to generate tags.
+ */
+static boolean createTagsFromListFile (const char *const fileName)
+{
+	boolean resize;
+	Assert (fileName != NULL);
+	if (strcmp (fileName, "-") == 0)
+		resize = createTagsFromFileInput (stdin, FALSE);
+	else
+	{
+		FILE *const fp = fopen (fileName, "r");
+		if (fp == NULL)
+			error (FATAL | PERROR, "cannot open list file \"%s\"", fileName);
+		resize = createTagsFromFileInput (fp, FALSE);
+		fclose (fp);
+	}
+	return resize;
+}
+
+#if defined (HAVE_CLOCK)
+# define CLOCK_AVAILABLE
+# ifndef CLOCKS_PER_SEC
+#  define CLOCKS_PER_SEC		1000000
+# endif
+#elif defined (HAVE_TIMES)
+# define CLOCK_AVAILABLE
+# define CLOCKS_PER_SEC	60
+static clock_t clock (void)
+{
+	struct tms buf;
+
+	times (&buf);
+	return (buf.tms_utime + buf.tms_stime);
+}
+#else
+# define clock()  (clock_t)0
+#endif
+
+static void printTotals (const clock_t *const timeStamps)
+{
+	const unsigned long totalTags = TagFile.numTags.added +
+									TagFile.numTags.prev;
+
+	fprintf (errout, "%ld file%s, %ld line%s (%ld kB) scanned",
+			Totals.files, plural (Totals.files),
+			Totals.lines, plural (Totals.lines),
+			Totals.bytes/1024L);
+#ifdef CLOCK_AVAILABLE
+	{
+		const double interval = ((double) (timeStamps [1] - timeStamps [0])) /
+								CLOCKS_PER_SEC;
+
+		fprintf (errout, " in %.01f seconds", interval);
+		if (interval != (double) 0.0)
+			fprintf (errout, " (%lu kB/s)",
+					(unsigned long) (Totals.bytes / interval) / 1024L);
+	}
+#endif
+	fputc ('\n', errout);
+
+	fprintf (errout, "%lu tag%s added to tag file",
+			TagFile.numTags.added, plural (TagFile.numTags.added));
+	if (Option.append)
+		fprintf (errout, " (now %lu tags)", totalTags);
+	fputc ('\n', errout);
+
+	if (totalTags > 0  &&  Option.sorted != SO_UNSORTED)
+	{
+		fprintf (errout, "%lu tag%s sorted", totalTags, plural (totalTags));
+#ifdef CLOCK_AVAILABLE
+		fprintf (errout, " in %.02f seconds",
+				((double) (timeStamps [2] - timeStamps [1])) / CLOCKS_PER_SEC);
+#endif
+		fputc ('\n', errout);
+	}
+
+#ifdef DEBUG
+	fprintf (errout, "longest tag line = %lu\n",
+			(unsigned long) TagFile.max.line);
+#endif
+}
+
+static boolean etagsInclude (void)
+{
+	return (boolean)(Option.etags && Option.etagsInclude != NULL);
+}
+
+static void makeTags (cookedArgs *args)
+{
+	clock_t timeStamps [3];
+	boolean resize = FALSE;
+	boolean files = (boolean)(! cArgOff (args) || Option.fileList != NULL
+							  || Option.filter);
+
+	if (! files)
+	{
+		if (filesRequired ())
+			error (FATAL, "No files specified. Try \"%s --help\".",
+				getExecutableName ());
+		else if (! Option.recurse && ! etagsInclude ())
+			return;
+	}
+
+#define timeStamp(n) timeStamps[(n)]=(Option.printTotals ? clock():(clock_t)0)
+	if (! Option.filter)
+		openTagFile ();
+
+	timeStamp (0);
+
+	if (! cArgOff (args))
+	{
+		verbose ("Reading command line arguments\n");
+		resize = createTagsForArgs (args);
+	}
+	if (Option.fileList != NULL)
+	{
+		verbose ("Reading list file\n");
+		resize = (boolean) (createTagsFromListFile (Option.fileList) || resize);
+	}
+	if (Option.filter)
+	{
+		verbose ("Reading filter input\n");
+		resize = (boolean) (createTagsFromFileInput (stdin, TRUE) || resize);
+	}
+	if (! files  &&  Option.recurse)
+		resize = recurseIntoDirectory (".");
+
+	timeStamp (1);
+
+	if (! Option.filter)
+		closeTagFile (resize);
+
+	timeStamp (2);
+
+	if (Option.printTotals)
+		printTotals (timeStamps);
+#undef timeStamp
+}
+
+/*
+ *		Start up code
+ */
+
+extern int main (int argc, char **argv)
+{
+	cookedArgs *args;
+#ifdef VMS
+	extern int getredirection (int *ac, char ***av);
+
+	/* do wildcard expansion and I/O redirection */
+	getredirection (&argc, &argv);
+#endif
+
+#ifdef AMIGA
+	/* This program doesn't work when started from the Workbench */
+	if (argc == 0)
+		exit (1);
+#endif
+
+#ifdef __EMX__
+	_wildcard (&argc, &argv);  /* expand wildcards in argument list */
+#endif
+
+#if defined (macintosh) && BUILD_MPW_TOOL == 0
+	argc = ccommand (&argv);
+#endif
+
+	setCurrentDirectory ();
+	setExecutableName (*argv++);
+	checkRegex ();
+
+	args = cArgNewFromArgv (argv);
+	previewFirstOption (args);
+	testEtagsInvocation ();
+	initializeParsing ();
+	initOptions ();
+	readOptionConfiguration ();
+	verbose ("Reading initial options from command line\n");
+	parseOptions (args);
+	checkOptions ();
+	makeTags (args);
+
+	/*  Clean up.
+	 */
+	cArgDelete (args);
+	freeKeywordTable ();
+	freeRoutineResources ();
+	freeSourceFileResources ();
+	freeTagFileResources ();
+	freeOptionResources ();
+	freeParserResources ();
+	freeRegexResources ();
+
+	exit (0);
+	return 0;
+}
+
+/* vi:set tabstop=4 shiftwidth=4: */
Index: a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/options.c
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/options.c	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/options.c	(revision 5)
@@ -0,0 +1,1829 @@
+/*
+*   $Id: options.c 576 2007-06-30 04:16:23Z elliotth $
+*
+*   Copyright (c) 1996-2003, Darren Hiebert
+*
+*   This source code is released for free distribution under the terms of the
+*   GNU General Public License.
+*
+*   This module contains functions to process command line options.
+*/
+
+/*
+*   INCLUDE FILES
+*/
+#include "general.h"  /* must always come first */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>  /* to declare isspace () */
+
+#include "ctags.h"
+#include "debug.h"
+#include "main.h"
+#define OPTION_WRITE
+#include "options.h"
+#include "parse.h"
+#include "routines.h"
+
+/*
+*   MACROS
+*/
+#define INVOCATION  "Usage: %s [options] [file(s)]\n"
+
+#define CTAGS_ENVIRONMENT  "CTAGS"
+#define ETAGS_ENVIRONMENT  "ETAGS"
+
+#define CTAGS_FILE  "tags"
+#define ETAGS_FILE  "TAGS"
+
+#ifndef ETAGS
+# define ETAGS	"etags"  /* name which causes default use of to -e */
+#endif
+
+/*  The following separators are permitted for list options.
+ */
+#define EXTENSION_SEPARATOR '.'
+#define PATTERN_START '('
+#define PATTERN_STOP  ')'
+#define IGNORE_SEPARATORS   ", \t\n"
+
+#ifndef DEFAULT_FILE_FORMAT
+# define DEFAULT_FILE_FORMAT  2
+#endif
+
+#if defined (HAVE_OPENDIR) || defined (HAVE_FINDFIRST) || defined (HAVE__FINDFIRST) || defined (AMIGA)
+# define RECURSE_SUPPORTED
+#endif
+
+#define isCompoundOption(c)  (boolean) (strchr ("fohiILpDb", (c)) != NULL)
+
+/*
+*   Data declarations
+*/
+
+enum eOptionLimits {
+	MaxHeaderExtensions	= 100,  /* maximum number of extensions in -h option */
+	MaxSupportedTagFormat = 2
+};
+
+typedef struct sOptionDescription {
+	int usedByEtags;
+	const char *description;
+} optionDescription;
+
+typedef void (*parametricOptionHandler) (const char *const option, const char *const parameter);
+
+typedef const struct {
+	const char* name;   /* name of option as specified by user */
+	parametricOptionHandler handler;  /* routine to handle option */
+	boolean initOnly;   /* option must be specified before any files */
+} parametricOption;
+
+typedef const struct {
+	const char* name;   /* name of option as specified by user */
+	boolean* pValue;    /* pointer to option value */
+	boolean initOnly;   /* option must be specified before any files */
+} booleanOption;
+
+/*
+*   DATA DEFINITIONS
+*/
+
+static boolean NonOptionEncountered;
+static stringList *OptionFiles;
+static stringList* Excluded;
+static boolean FilesRequired = TRUE;
+static boolean SkipConfiguration;
+
+static const char *const HeaderExtensions [] = {
+	"h", "H", "hh", "hpp", "hxx", "h++", "inc", "def", NULL
+};
+
+optionValues Option = {
+	{
+		FALSE,  /* --extra=f */
+		FALSE,  /* --extra=q */
+		TRUE,   /* --file-scope */
+	},
+	{
+		FALSE,  /* -fields=a */
+		TRUE,   /* -fields=f */
+		FALSE,  /* -fields=m */
+		FALSE,  /* -fields=i */
+		TRUE,   /* -fields=k */
+		FALSE,  /* -fields=z */
+		FALSE,  /* -fields=K */
+		FALSE,  /* -fields=l */
+		FALSE,  /* -fields=n */
+		TRUE,   /* -fields=s */
+		FALSE,  /* -fields=S */
+		TRUE    /* -fields=t */
+	},
+	NULL,       /* -I */
+	FALSE,      /* -a */
+	FALSE,      /* -B */
+	FALSE,      /* -e */
+#ifdef MACROS_USE_PATTERNS
+	EX_PATTERN, /* -n, --excmd */
+#else
+	EX_MIX,     /* -n, --excmd */
+#endif
+	FALSE,      /* -R */
+	SO_SORTED,  /* -u, --sort */
+	FALSE,      /* -V */
+	FALSE,      /* -x */
+	NULL,       /* -L */
+	NULL,       /* -o */
+	NULL,       /* -h */
+	NULL,       /* --etags-include */
+	DEFAULT_FILE_FORMAT,/* --format */
+	FALSE,      /* --if0 */
+	FALSE,      /* --kind-long */
+	LANG_AUTO,  /* --lang */
+	TRUE,       /* --links */
+	FALSE,      /* --filter */
+	NULL,       /* --filter-terminator */
+	FALSE,      /* --tag-relative */
+	FALSE,      /* --totals */
+	FALSE,      /* --line-directives */
+#ifdef DEBUG
+	0, 0        /* -D, -b */
+#endif
+};
+
+/*
+-   Locally used only
+*/
+
+static optionDescription LongOptionDescription [] = {
+ {1,"  -a   Append the tags to an existing tag file."},
+#ifdef DEBUG
+ {1,"  -b <line>"},
+ {1,"       Set break line."},
+#endif
+ {0,"  -B   Use backward searching patterns (?...?)."},
+#ifdef DEBUG
+ {1,"  -D <level>"},
+ {1,"       Set debug level."},
+#endif
+ {0,"  -e   Output tag file for use with Emacs."},
+ {1,"  -f <name>"},
+ {1,"       Write tags to specified file. Value of \"-\" writes tags to stdout"},
+ {1,"       [\"tags\"; or \"TAGS\" when -e supplied]."},
+ {0,"  -F   Use forward searching patterns (/.../) (default)."},
+ {1,"  -h <list>"},
+ {1,"       Specify list of file extensions to be treated as include files."},
+ {1,"       [\".h.H.hh.hpp.hxx.h++\"]."},
+ {1,"  -I <list|@file>"},
+ {1,"       A list of tokens to be specially handled is read from either the"},
+ {1,"       command line or the specified file."},
+ {1,"  -L <file>"},
+ {1,"       A list of source file names are read from the specified file."},
+ {1,"       If specified as \"-\", then standard input is read."},
+ {0,"  -n   Equivalent to --excmd=number."},
+ {0,"  -N   Equivalent to --excmd=pattern."},
+ {1,"  -o   Alternative for -f."},
+#ifdef RECURSE_SUPPORTED
+ {1,"  -R   Equivalent to --recurse."},
+#else
+ {1,"  -R   Not supported on this platform."},
+#endif
+ {0,"  -u   Equivalent to --sort=no."},
+ {1,"  -V   Equivalent to --verbose."},
+ {1,"  -x   Print a tabular cross reference file to standard output."},
+ {1,"  --append=[yes|no]"},
+ {1,"       Should tags should be appended to existing tag file [no]?"},
+ {1,"  --etags-include=file"},
+ {1,"      Include reference to 'file' in Emacs-style tag file (requires -e)."},
+ {1,"  --exclude=pattern"},
+ {1,"      Exclude files and directories matching 'pattern'."},
+ {0,"  --excmd=number|pattern|mix"},
+#ifdef MACROS_USE_PATTERNS
+ {0,"       Uses the specified type of EX command to locate tags [pattern]."},
+#else
+ {0,"       Uses the specified type of EX command to locate tags [mix]."},
+#endif
+ {1,"  --extra=[+|-]flags"},
+ {1,"      Include extra tag entries for selected information (flags: \"fq\")."},
+ {1,"  --fields=[+|-]flags"},
+ {1,"      Include selected extension fields (flags: \"afmikKlnsStz\") [fks]."},
+ {1,"  --file-scope=[yes|no]"},
+ {1,"       Should tags scoped only for a single file (e.g. \"static\" tags"},
+ {1,"       be included in the output [yes]?"},
+ {1,"  --filter=[yes|no]"},
+ {1,"       Behave as a filter, reading file names from standard input and"},
+ {1,"       writing tags to standard output [no]."},
+ {1,"  --filter-terminator=string"},
+ {1,"       Specify string to print to stdout following the tags for each file"},
+ {1,"       parsed when --filter is enabled."},
+ {0,"  --format=level"},
+#if DEFAULT_FILE_FORMAT == 1
+ {0,"       Force output of specified tag file format [1]."},
+#else
+ {0,"       Force output of specified tag file format [2]."},
+#endif
+ {1,"  --help"},
+ {1,"       Print this option summary."},
+ {1,"  --if0=[yes|no]"},
+ {1,"       Should C code within #if 0 conditional branches be parsed [no]?"},
+ {1,"  --<LANG>-kinds=[+|-]kinds"},
+ {1,"       Enable/disable tag kinds for language <LANG>."},
+ {1,"  --langdef=name"},
+ {1,"       Define a new language to be parsed with regular expressions."},
+ {1,"  --langmap=map(s)"},
+ {1,"       Override default mapping of language to source file extension."},
+ {1,"  --language-force=language"},
+ {1,"       Force all files to be interpreted using specified language."},
+ {1,"  --languages=[+|-]list"},
+ {1,"       Restrict files scanned for tags to those mapped to langauges"},
+ {1,"       specified in the comma-separated 'list'. The list can contain any"},
+ {1,"       built-in or user-defined language [all]."},
+ {1,"  --license"},
+ {1,"       Print details of software license."},
+ {0,"  --line-directives=[yes|no]"},
+ {0,"       Should #line directives be processed [no]?"},
+ {1,"  --links=[yes|no]"},
+ {1,"       Indicate whether symbolic links should be followed [yes]."},
+ {1,"  --list-kinds=[language|all]"},
+ {1,"       Output a list of all tag kinds for specified language or all."},
+ {1,"  --list-languages"},
+ {1,"       Output list of supported languages."},
+ {1,"  --list-maps=[language|all]"},
+ {1,"       Output list of language mappings."},
+ {1,"  --options=file"},
+ {1,"       Specify file from which command line options should be read."},
+ {1,"  --recurse=[yes|no]"},
+#ifdef RECURSE_SUPPORTED
+ {1,"       Recurse into directories supplied on command line [no]."},
+#else
+ {1,"       Not supported on this platform."},
+#endif
+#ifdef HAVE_REGEX
+ {1,"  --regex-<LANG>=/line_pattern/name_pattern/[flags]"},
+ {1,"       Define regular expression for locating tags in specific language."},
+#endif
+ {0,"  --sort=[yes|no|foldcase]"},
+ {0,"       Should tags be sorted (optionally ignoring case) [yes]?."},
+ {0,"  --tag-relative=[yes|no]"},
+ {0,"       Should paths be relative to location of tag file [no; yes when -e]?"},
+ {1,"  --totals=[yes|no]"},
+ {1,"       Print statistics about source and tag files [no]."},
+ {1,"  --verbose=[yes|no]"},
+ {1,"       Enable verbose messages describing actions on each source file."},
+ {1,"  --version"},
+ {1,"       Print version identifier to standard output."},
+ {1, NULL}
+};
+
+static const char* const License1 =
+"This program is free software; you can redistribute it and/or\n"
+"modify it under the terms of the GNU General Public License\n"
+"as published by the Free Software Foundation; either version 2\n"
+"of the License, or (at your option) any later version.\n"
+"\n";
+static const char* const License2 =
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n";
+
+/*  Contains a set of strings describing the set of "features" compiled into
+ *  the code.
+ */
+static const char *const Features [] = {
+#ifdef WIN32
+	"win32",
+#endif
+#ifdef DJGPP
+	"msdos_32",
+#else
+# ifdef MSDOS
+	"msdos_16",
+# endif
+#endif
+#ifdef OS2
+	"os2",
+#endif
+#ifdef AMIGA
+	"amiga",
+#endif
+#ifdef VMS
+	"vms",
+#endif
+#ifdef HAVE_FNMATCH
+	"wildcards",
+#endif
+#ifdef HAVE_REGEX
+	"regex",
+#endif
+#ifndef EXTERNAL_SORT
+	"internal-sort",
+#endif
+#ifdef CUSTOM_CONFIGURATION_FILE
+	"custom-conf",
+#endif
+#if (defined (MSDOS) || defined (WIN32) || defined (OS2)) && defined (UNIX_PATH_SEPARATOR)
+	"unix-path-separator",
+#endif
+#ifdef DEBUG
+	"debug",
+#endif
+	NULL
+};
+
+/*
+*   FUNCTION PROTOTYPES
+*/
+static boolean parseFileOptions (const char *const fileName);
+
+/*
+*   FUNCTION DEFINITIONS
+*/
+
+extern void verbose (const char *const format, ...)
+{
+	if (Option.verbose)
+	{
+		va_list ap;
+		va_start (ap, format);
+		vprintf (format, ap);
+		va_end (ap);
+	}
+}
+
+static char *stringCopy (const char *const string)
+{
+	char* result = NULL;
+	if (string != NULL)
+		result = eStrdup (string);
+	return result;
+}
+
+static void freeString (char **const pString)
+{
+	if (*pString != NULL)
+	{
+		eFree (*pString);
+		*pString = NULL;
+	}
+}
+
+extern void freeList (stringList** const pList)
+{
+	if (*pList != NULL)
+	{
+		stringListDelete (*pList);
+		*pList = NULL;
+	}
+}
+
+extern void setDefaultTagFileName (void)
+{
+	if (Option.tagFileName != NULL)
+		;  /* accept given name */
+	else if (Option.etags)
+		Option.tagFileName = stringCopy (ETAGS_FILE);
+	else
+		Option.tagFileName = stringCopy (CTAGS_FILE);
+}
+
+extern boolean filesRequired (void)
+{
+	boolean result = FilesRequired;
+	if (Option.recurse)
+		result = FALSE;
+	return result;
+}
+
+extern void checkOptions (void)
+{
+	const char* notice;
+	if (Option.xref)
+	{
+		notice = "xref output";
+		if (Option.include.fileNames)
+		{
+			error (WARNING, "%s disables file name tags", notice);
+			Option.include.fileNames = FALSE;
+		}
+	}
+	if (Option.append)
+	{
+		notice = "append mode is not compatible with";
+		if (isDestinationStdout ())
+			error (FATAL, "%s tags to stdout", notice);
+	}
+	if (Option.filter)
+	{
+		notice = "filter mode";
+		if (Option.printTotals)
+		{
+			error (WARNING, "%s disables totals", notice);
+			Option.printTotals = FALSE;
+		}
+		if (Option.tagFileName != NULL)
+			error (WARNING, "%s ignores output tag file name", notice);
+	}
+}
+
+static void setEtagsMode (void)
+{
+	Option.etags = TRUE;
+	Option.sorted = SO_UNSORTED;
+	Option.lineDirectives = FALSE;
+	Option.tagRelative = TRUE;
+}
+
+extern void testEtagsInvocation (void)
+{
+	char* const execName = eStrdup (getExecutableName ());
+	char* const etags = eStrdup (ETAGS);
+#ifdef CASE_INSENSITIVE_FILENAMES
+	toLowerString (execName);
+	toLowerString (etags);
+#endif
+	if (strstr (execName, etags) != NULL)
+	{
+		verbose ("Running in etags mode\n");
+		setEtagsMode ();
+	}
+	eFree (execName);
+	eFree (etags);
+}
+
+/*
+ *  Cooked argument parsing
+ */
+
+static void parseShortOption (cookedArgs *const args)
+{
+	args->simple [0] = *args->shortOptions++;
+	args->simple [1] = '\0';
+	args->item = args->simple;
+	if (! isCompoundOption (*args->simple))
+		args->parameter = "";
+	else if (*args->shortOptions == '\0')
+	{
+		argForth (args->args);
+		if (argOff (args->args))
+			args->parameter = NULL;
+		else
+			args->parameter = argItem (args->args);
+		args->shortOptions = NULL;
+	}
+	else
+	{
+		args->parameter = args->shortOptions;
+		args->shortOptions = NULL;
+	}
+}
+
+static void parseLongOption (cookedArgs *const args, const char *item)
+{
+	const char* const equal = strchr (item, '=');
+	if (equal == NULL)
+	{
+		args->item = eStrdup (item); /* FIXME: memory leak. */
+		args->parameter = "";
+	}
+	else
+	{
+		const size_t length = equal - item;
+		args->item = xMalloc (length + 1, char); /* FIXME: memory leak. */
+		strncpy (args->item, item, length);
+		args->item [length] = '\0';
+		args->parameter = equal + 1;
+	}
+	Assert (args->item != NULL);
+	Assert (args->parameter != NULL);
+}
+
+static void cArgRead (cookedArgs *const current)
+{
+	char* item;
+
+	Assert (current != NULL);
+	if (! argOff (current->args))
+	{
+		item = argItem (current->args);
+		current->shortOptions = NULL;
+		Assert (item != NULL);
+		if (strncmp (item, "--", (size_t) 2) == 0)
+		{
+			current->isOption = TRUE;
+			current->longOption = TRUE;
+			parseLongOption (current, item + 2);
+			Assert (current->item != NULL);
+			Assert (current->parameter != NULL);
+		}
+		else if (*item == '-')
+		{
+			current->isOption = TRUE;
+			current->longOption = FALSE;
+			current->shortOptions = item + 1;
+			parseShortOption (current);
+		}
+		else
+		{
+			current->isOption = FALSE;
+			current->longOption = FALSE;
+			current->item = item;
+			current->parameter = NULL;
+		}
+	}
+}
+
+extern cookedArgs* cArgNewFromString (const char* string)
+{
+	cookedArgs* const result = xMalloc (1, cookedArgs);
+	memset (result, 0, sizeof (cookedArgs));
+	result->args = argNewFromString (string);
+	cArgRead (result);
+	return result;
+}
+
+extern cookedArgs* cArgNewFromArgv (char* const* const argv)
+{
+	cookedArgs* const result = xMalloc (1, cookedArgs);
+	memset (result, 0, sizeof (cookedArgs));
+	result->args = argNewFromArgv (argv);
+	cArgRead (result);
+	return result;
+}
+
+extern cookedArgs* cArgNewFromFile (FILE* const fp)
+{
+	cookedArgs* const result = xMalloc (1, cookedArgs);
+	memset (result, 0, sizeof (cookedArgs));
+	result->args = argNewFromFile (fp);
+	cArgRead (result);
+	return result;
+}
+
+extern cookedArgs* cArgNewFromLineFile (FILE* const fp)
+{
+	cookedArgs* const result = xMalloc (1, cookedArgs);
+	memset (result, 0, sizeof (cookedArgs));
+	result->args = argNewFromLineFile (fp);
+	cArgRead (result);
+	return result;
+}
+
+extern void cArgDelete (cookedArgs* const current)
+{
+	Assert (current != NULL);
+	argDelete (current->args);
+	memset (current, 0, sizeof (cookedArgs));
+	eFree (current);
+}
+
+static boolean cArgOptionPending (cookedArgs* const current)
+{
+	boolean result = FALSE;
+	if (current->shortOptions != NULL)
+		if (*current->shortOptions != '\0')
+			result = TRUE;
+	return result;
+}
+
+extern boolean cArgOff (cookedArgs* const current)
+{
+	Assert (current != NULL);
+	return (boolean) (argOff (current->args) && ! cArgOptionPending (current));
+}
+
+extern boolean cArgIsOption (cookedArgs* const current)
+{
+	Assert (current != NULL);
+	return current->isOption;
+}
+
+extern const char* cArgItem (cookedArgs* const current)
+{
+	Assert (current != NULL);
+	return current->item;
+}
+
+extern void cArgForth (cookedArgs* const current)
+{
+	Assert (current != NULL);
+	Assert (! cArgOff (current));
+	if (cArgOptionPending (current))
+		parseShortOption (current);
+	else
+	{
+		Assert (! argOff (current->args));
+		argForth (current->args);
+		if (! argOff (current->args))
+			cArgRead (current);
+		else
+		{
+			current->isOption = FALSE;
+			current->longOption = FALSE;
+			current->shortOptions = NULL;
+			current->item = NULL;
+			current->parameter = NULL;
+		}
+	}
+}
+
+/*
+ *  File extension and language mapping
+ */
+
+static void addExtensionList (
+		stringList *const slist, const char *const elist, const boolean clear)
+{
+	char *const extensionList = eStrdup (elist);
+	const char *extension = NULL;
+	boolean first = TRUE;
+
+	if (clear)
+	{
+		verbose ("      clearing\n");
+		stringListClear (slist);
+	}
+	verbose ("      adding: ");
+	if (elist != NULL  &&  *elist != '\0')
+	{
+		extension = extensionList;
+		if (elist [0] == EXTENSION_SEPARATOR)
+			++extension;
+	}
+	while (extension != NULL)
+	{
+		char *separator = strchr (extension, EXTENSION_SEPARATOR);
+		if (separator != NULL)
+			*separator = '\0';
+		verbose ("%s%s", first ? "" : ", ",
+				*extension == '\0' ? "(NONE)" : extension);
+		stringListAdd (slist, vStringNewInit (extension));
+		first = FALSE;
+		if (separator == NULL)
+			extension = NULL;
+		else
+			extension = separator + 1;
+	}
+	if (Option.verbose)
+	{
+		printf ("\n      now: ");
+		stringListPrint (slist);
+		putchar ('\n');
+	}
+	eFree (extensionList);
+}
+
+static boolean isFalse (const char *parameter)
+{
+	return (boolean) (
+		strcasecmp (parameter, "0"  ) == 0  ||
+		strcasecmp (parameter, "n"  ) == 0  ||
+		strcasecmp (parameter, "no" ) == 0  ||
+		strcasecmp (parameter, "off") == 0);
+}
+
+static boolean isTrue (const char *parameter)
+{
+	return (boolean) (
+		strcasecmp (parameter, "1"  ) == 0  ||
+		strcasecmp (parameter, "y"  ) == 0  ||
+		strcasecmp (parameter, "yes") == 0  ||
+		strcasecmp (parameter, "on" ) == 0);
+}
+
+/*  Determines whether the specified file name is considered to be a header
+ *  file for the purposes of determining whether enclosed tags are global or
+ *  static.
+ */
+extern boolean isIncludeFile (const char *const fileName)
+{
+	boolean result = FALSE;
+	const char *const extension = fileExtension (fileName);
+	if (Option.headerExt != NULL)
+		result = stringListExtensionMatched (Option.headerExt, extension);
+	return result;
+}
+
+/*
+ *  Specific option processing
+ */
+
+static void processEtagsInclude (
+		const char *const option, const char *const parameter)
+{
+	if (! Option.etags)
+		error (FATAL, "Etags must be enabled to use \"%s\" option", option);
+	else
+	{
+		vString *const file = vStringNewInit (parameter);
+		if (Option.etagsInclude == NULL)
+			Option.etagsInclude = stringListNew ();
+		stringListAdd (Option.etagsInclude, file);
+		FilesRequired = FALSE;
+	}
+}
+
+static void processExcludeOption (
+		const char *const option, const char *const parameter)
+{
+	const char *const fileName = parameter + 1;
+	if (parameter [0] == '\0')
+		freeList (&Excluded);
+	else if (parameter [0] == '@')
+	{
+		stringList* const sl = stringListNewFromFile (fileName);
+		if (sl == NULL)
+			error (FATAL | PERROR, "cannot open \"%s\"", fileName);
+		if (Excluded == NULL)
+			Excluded = sl;
+		else
+			stringListCombine (Excluded, sl);
+		verbose ("    adding exclude patterns from %s\n", fileName);
+	}
+	else
+	{
+		vString *const item = vStringNewInit (parameter);
+		if (Excluded == NULL)
+			Excluded = stringListNew ();
+		stringListAdd (Excluded, item);
+		verbose ("    adding exclude pattern: %s\n", parameter);
+	}
+}
+
+extern boolean isExcludedFile (const char* const name)
+{
+	const char* base = baseFilename (name);
+	boolean result = FALSE;
+	if (Excluded != NULL)
+	{
+		result = stringListFileMatched (Excluded, base);
+		if (! result  &&  name != base)
+			result = stringListFileMatched (Excluded, name);
+	}
+#ifdef AMIGA
+	/* not a good solution, but the only one which works often */
+	if (! result)
+		result = (boolean) (strcmp (name, TagFile.name) == 0);
+#endif
+	return result;
+}
+
+static void processExcmdOption (
+		const char *const option, const char *const parameter)
+{
+	switch (*parameter)
+	{
+		case 'm': Option.locate = EX_MIX;     break;
+		case 'n': Option.locate = EX_LINENUM; break;
+		case 'p': Option.locate = EX_PATTERN; break;
+		default:
+			error (FATAL, "Invalid value for \"%s\" option", option);
+			break;
+	}
+}
+
+static void processExtraTagsOption (
+		const char *const option, const char *const parameter)
+{
+	struct sInclude *const inc = &Option.include;
+	const char *p = parameter;
+	boolean mode = TRUE;
+	int c;
+
+	if (*p != '+'  &&  *p != '-')
+	{
+		inc->fileNames     = FALSE;
+		inc->qualifiedTags = FALSE;
+#if 0
+		inc->fileScope     = FALSE;
+#endif
+	}
+	while ((c = *p++) != '\0') switch (c)
+	{
+		case '+': mode = TRUE;                break;
+		case '-': mode = FALSE;               break;
+
+		case 'f': inc->fileNames     = mode;  break;
+		case 'q': inc->qualifiedTags = mode;  break;
+#if 0
+		case 'F': inc->fileScope     = mode;  break;
+#endif
+
+		default: error(WARNING, "Unsupported parameter '%c' for \"%s\" option",
+					   c, option);
+			break;
+	}
+}
+
+static void processFieldsOption (
+		const char *const option, const char *const parameter)
+{
+	struct sExtFields *field = &Option.extensionFields;
+	const char *p = parameter;
+	boolean mode = TRUE;
+	int c;
+
+	if (*p != '+'  &&  *p != '-')
+	{
+		field->access           = FALSE;
+		field->fileScope        = FALSE;
+		field->implementation   = FALSE;
+		field->inheritance      = FALSE;
+		field->kind             = FALSE;
+		field->kindKey          = FALSE;
+		field->kindLong         = FALSE;
+		field->language         = FALSE;
+		field->scope            = FALSE;
+		field->typeRef          = FALSE;
+	}
+	while ((c = *p++) != '\0') switch (c)
+	{
+		case '+': mode = TRUE;                  break;
+		case '-': mode = FALSE;                 break;
+
+		case 'a': field->access         = mode; break;
+		case 'f': field->fileScope      = mode; break;
+		case 'm': field->implementation = mode; break;
+		case 'i': field->inheritance    = mode; break;
+		case 'k': field->kind           = mode; break;
+		case 'K': field->kindLong       = mode; break;
+		case 'l': field->language       = mode; break;
+		case 'n': field->lineNumber     = mode; break;
+		case 's': field->scope          = mode; break;
+		case 'S': field->signature      = mode; break;
+		case 'z': field->kindKey        = mode; break;
+		case 't': field->typeRef        = mode; break;
+
+		default: error(WARNING, "Unsupported parameter '%c' for \"%s\" option",
+					c, option);
+			break;
+	}
+}
+
+static void processFilterTerminatorOption (
+		const char *const option, const char *const parameter)
+{
+	freeString (&Option.filterTerminator);
+	Option.filterTerminator = stringCopy (parameter);
+}
+
+static void processFormatOption (
+		const char *const option, const char *const parameter)
+{
+	unsigned int format;
+
+	if (sscanf (parameter, "%u", &format) < 1)
+		error (FATAL, "Invalid value for \"%s\" option",option);
+	else if (format <= (unsigned int) MaxSupportedTagFormat)
+		Option.tagFileFormat = format;
+	else
+		error (FATAL, "Unsupported value for \"%s\" option", option);
+}
+
+static void printInvocationDescription (void)
+{
+	printf (INVOCATION, getExecutableName ());
+}
+
+static void printOptionDescriptions (const optionDescription *const optDesc)
+{
+	int i;
+	for (i = 0 ; optDesc [i].description != NULL ; ++i)
+	{
+		if (! Option.etags || optDesc [i].usedByEtags)
+			puts (optDesc [i].description);
+	}
+}
+
+static void printFeatureList (void)
+{
+	int i;
+
+	for (i = 0 ; Features [i] != NULL ; ++i)
+	{
+		if (i == 0)
+			printf ("  Optional compiled features: ");
+		printf ("%s+%s", (i>0 ? ", " : ""), Features [i]);
+#ifdef CUSTOM_CONFIGURATION_FILE
+		if (strcmp (Features [i], "custom-conf") == 0)
+			printf ("=%s", CUSTOM_CONFIGURATION_FILE);
+#endif
+	}
+	if (i > 0)
+		putchar ('\n');
+}
+
+static void printProgramIdentification (void)
+{
+	printf ("%s %s, %s %s\n",
+	        PROGRAM_NAME, PROGRAM_VERSION,
+	        PROGRAM_COPYRIGHT, AUTHOR_NAME);
+	printf ("  Compiled: %s, %s\n", __DATE__, __TIME__);
+	printf ("  Addresses: <%s>, %s\n", AUTHOR_EMAIL, PROGRAM_URL);
+	printFeatureList ();
+}
+
+static void processHelpOption (
+		const char *const option,
+		const char *const parameter)
+{
+	printProgramIdentification ();
+	putchar ('\n');
+	printInvocationDescription ();
+	putchar ('\n');
+	printOptionDescriptions (LongOptionDescription);
+	exit (0);
+}
+
+static void processLanguageForceOption (
+		const char *const option, const char *const parameter)
+{
+	langType language;
+	if (strcasecmp (parameter, "auto") == 0)
+		language = LANG_AUTO;
+	else
+		language = getNamedLanguage (parameter);
+
+	if (strcmp (option, "lang") == 0  ||  strcmp (option, "language") == 0)
+		error (WARNING,
+			   "\"--%s\" option is obsolete; use \"--language-force\" instead",
+			   option);
+	if (language == LANG_IGNORE)
+		error (FATAL, "Unknown language \"%s\" in \"%s\" option", parameter, option);
+	else
+		Option.language = language;
+}
+static char* skipPastMap (char* p)
+{
+	while (*p != EXTENSION_SEPARATOR  &&
+			*p != PATTERN_START  &&  *p != ','  &&  *p != '\0')
+		++p;
+	return p;
+}
+
+/* Parses the mapping beginning at `map', adds it to the language map, and
+ * returns first character past the map.
+ */
+static char* addLanguageMap (const langType language, char* map)
+{
+	char* p = NULL;
+	const char first = *map;
+	if (first == EXTENSION_SEPARATOR)  /* extension map */
+	{
+		++map;
+		p = skipPastMap (map);
+		if (*p == '\0')
+		{
+			verbose (" .%s", map);
+			addLanguageExtensionMap (language, map);
+			p = map + strlen (map);
+		}
+		else
+		{
+			const char separator = *p;
+			*p = '\0';
+			verbose (" .%s", map);
+			addLanguageExtensionMap (language, map);
+			*p = separator;
+		}
+	}
+	else if (first == PATTERN_START)  /* pattern map */
+	{
+		++map;
+		for (p = map  ;  *p != PATTERN_STOP  &&  *p != '\0'  ;  ++p)
+		{
+			if (*p == '\\'  &&  *(p + 1) == PATTERN_STOP)
+				++p;
+		}
+		if (*p == '\0')
+			error (FATAL, "Unterminated file name pattern for %s language",
+			   getLanguageName (language));
+		else
+		{
+			*p++ = '\0';
+			verbose (" (%s)", map);
+			addLanguagePatternMap (language, map);
+		}
+	}
+	else
+		error (FATAL, "Badly formed language map for %s language",
+				getLanguageName (language));
+	return p;
+}
+
+static char* processLanguageMap (char* map)
+{
+	char* const separator = strchr (map, ':');
+	char* result = NULL;
+	if (separator != NULL)
+	{
+		langType language;
+		char *list = separator + 1;
+		boolean clear = FALSE;
+		*separator = '\0';
+		language = getNamedLanguage (map);
+		if (language != LANG_IGNORE)
+		{
+			const char *const deflt = "default";
+			char* p;
+			if (*list == '+')
+				++list;
+			else
+				clear = TRUE;
+			for (p = list  ;  *p != ','  &&  *p != '\0'  ;  ++p)  /*no-op*/ ;
+			if ((size_t) (p - list) == strlen (deflt) &&
+				strncasecmp (list, deflt, p - list) == 0)
+			{
+				verbose ("    Restoring default %s language map: ", getLanguageName (language));
+				installLanguageMapDefault (language);
+				list = p;
+			}
+			else
+			{
+				if (clear)
+				{
+					verbose ("    Setting %s language map:", getLanguageName (language));
+					clearLanguageMap (language);
+				}
+				else
+					verbose ("    Adding to %s language map:", getLanguageName (language));
+				while (list != NULL  &&  *list != '\0'  &&  *list != ',')
+					list = addLanguageMap (language, list);
+				verbose ("\n");
+			}
+			if (list != NULL  &&  *list == ',')
+				++list;
+			result = list;
+		}
+	}
+	return result;
+}
+
+static void processLanguageMapOption (
+		const char *const option, const char *const parameter)
+{
+	char *const maps = eStrdup (parameter);
+	char *map = maps;
+
+	if (strcmp (parameter, "default") == 0)
+	{
+		verbose ("    Restoring default language maps:\n");
+		installLanguageMapDefaults ();
+	}
+	else while (map != NULL  &&  *map != '\0')
+	{
+		char* const next = processLanguageMap (map);
+		if (next == NULL)
+			error (WARNING, "Unknown language \"%s\" in \"%s\" option", parameter, option);
+		map = next;
+	}
+	eFree (maps);
+}
+
+static void processLanguagesOption (
+		const char *const option, const char *const parameter)
+{
+	char *const langs = eStrdup (parameter);
+	enum { Add, Remove, Replace } mode = Replace;
+	boolean first = TRUE;
+	char *lang = langs;
+	const char* prefix = "";
+	verbose ("    Enabled languages: ");
+	while (lang != NULL)
+	{
+		char *const end = strchr (lang, ',');
+		if (lang [0] == '+')
+		{
+			++lang;
+			mode = Add;
+			prefix = "+ ";
+		}
+		else if (lang [0] == '-')
+		{
+			++lang;
+			mode = Remove;
+			prefix = "- ";
+		}
+		if (mode == Replace)
+			enableLanguages (FALSE);
+		if (end != NULL)
+			*end = '\0';
+		if (lang [0] != '\0')
+		{
+			if (strcmp (lang, "all") == 0)
+				enableLanguages ((boolean) (mode != Remove));
+			else
+			{
+				const langType language = getNamedLanguage (lang);
+				if (language == LANG_IGNORE)
+					error (WARNING, "Unknown language \"%s\" in \"%s\" option", lang, option);
+				else
+					enableLanguage (language, (boolean) (mode != Remove));
+			}
+			verbose ("%s%s%s", (first ? "" : ", "), prefix, lang);
+			prefix = "";
+			first = FALSE;
+			if (mode == Replace)
+				mode = Add;
+		}
+		lang = (end != NULL ? end + 1 : NULL);
+	}
+	verbose ("\n");
+	eFree (langs);
+}
+
+static void processLicenseOption (
+		const char *const option,
+		const char *const parameter)
+{
+	printProgramIdentification ();
+	puts ("");
+	puts (License1);
+	puts (License2);
+	exit (0);
+}
+
+static void processListKindsOption (
+		const char *const option, const char *const parameter)
+{
+	if (parameter [0] == '\0' || strcasecmp (parameter, "all") == 0)
+	    printLanguageKinds (LANG_AUTO);
+	else
+	{
+		langType language = getNamedLanguage (parameter);
+		if (language == LANG_IGNORE)
+			error (FATAL, "Unknown language \"%s\" in \"%s\" option", parameter, option);
+		else
+			printLanguageKinds (language);
+	}
+	exit (0);
+}
+
+static void processListMapsOption (
+		const char *const option,
+		const char *const parameter)
+{
+	if (parameter [0] == '\0' || strcasecmp (parameter, "all") == 0)
+	    printLanguageMaps (LANG_AUTO);
+	else
+	{
+		langType language = getNamedLanguage (parameter);
+		if (language == LANG_IGNORE)
+			error (FATAL, "Unknown language \"%s\" in \"%s\" option", parameter, option);
+		else
+			printLanguageMaps (language);
+	}
+	exit (0);
+}
+
+static void processListLanguagesOption (
+		const char *const option,
+		const char *const parameter)
+{
+	printLanguageList ();
+	exit (0);
+}
+
+static void processOptionFile (
+		const char *const option, const char *const parameter)
+{
+	if (parameter [0] == '\0')
+		error (WARNING, "no option file supplied for \"%s\"", option);
+	else if (! parseFileOptions (parameter))
+		error (FATAL | PERROR, "cannot open option file \"%s\"", parameter);
+}
+
+static void processSortOption (
+		const char *const option, const char *const parameter)
+{
+	if (isFalse (parameter))
+		Option.sorted = SO_UNSORTED;
+	else if (isTrue (parameter))
+		Option.sorted = SO_SORTED;
+	else if (strcasecmp (parameter, "f") == 0 ||
+			strcasecmp (parameter, "fold") == 0 ||
+			strcasecmp (parameter, "foldcase") == 0)
+		Option.sorted = SO_FOLDSORTED;
+	else
+		error (FATAL, "Invalid value for \"%s\" option", option);
+}
+
+static void installHeaderListDefaults (void)
+{
+	Option.headerExt = stringListNewFromArgv (HeaderExtensions);
+	if (Option.verbose)
+	{
+		printf ("    Setting default header extensions: ");
+		stringListPrint (Option.headerExt);
+		putchar ('\n');
+	}
+}
+
+static void processHeaderListOption (const int option, const char *parameter)
+{
+	/*  Check to make sure that the user did not enter "ctags -h *.c"
+	 *  by testing to see if the list is a filename that exists.
+	 */
+	if (doesFileExist (parameter))
+		error (FATAL, "-%c: Invalid list", option);
+	if (strcmp (parameter, "default") == 0)
+		installHeaderListDefaults ();
+	else
+	{
+		boolean clear = TRUE;
+
+		if (parameter [0] == '+')
+		{
+			++parameter;
+			clear = FALSE;
+		}
+		if (Option.headerExt == NULL)
+			Option.headerExt = stringListNew ();
+		verbose ("    Header Extensions:\n");
+		addExtensionList (Option.headerExt, parameter, clear);
+	}
+}
+
+/*
+ *  Token ignore processing
+ */
+
+/*  Determines whether or not "name" should be ignored, per the ignore list.
+ */
+extern boolean isIgnoreToken (
+		const char *const name, boolean *const pIgnoreParens,
+		const char **const replacement)
+{
+	boolean result = FALSE;
+
+	if (Option.ignore != NULL)
+	{
+		const size_t nameLen = strlen (name);
+		unsigned int i;
+
+		if (pIgnoreParens != NULL)
+			*pIgnoreParens = FALSE;
+
+		for (i = 0  ;  i < stringListCount (Option.ignore)  ;  ++i)
+		{
+			vString *token = stringListItem (Option.ignore, i);
+
+			if (strncmp (vStringValue (token), name, nameLen) == 0)
+			{
+				const size_t tokenLen = vStringLength (token);
+
+				if (nameLen == tokenLen)
+				{
+					result = TRUE;
+					break;
+				}
+				else if (tokenLen == nameLen + 1  &&
+						vStringChar (token, tokenLen - 1) == '+')
+				{
+					result = TRUE;
+					if (pIgnoreParens != NULL)
+						*pIgnoreParens = TRUE;
+					break;
+				}
+				else if (vStringChar (token, nameLen) == '=')
+				{
+					if (replacement != NULL)
+						*replacement = vStringValue (token) + nameLen + 1;
+					break;
+				}
+			}
+		}
+	}
+	return result;
+}
+
+static void saveIgnoreToken (vString *const ignoreToken)
+{
+	if (Option.ignore == NULL)
+		Option.ignore = stringListNew ();
+	stringListAdd (Option.ignore, ignoreToken);
+	verbose ("    ignore token: %s\n", vStringValue (ignoreToken));
+}
+
+static void readIgnoreList (const char *const list)
+{
+	char* newList = stringCopy (list);
+	const char *token = strtok (newList, IGNORE_SEPARATORS);
+
+	while (token != NULL)
+	{
+		vString *const entry = vStringNewInit (token);
+
+		saveIgnoreToken (entry);
+		token = strtok (NULL, IGNORE_SEPARATORS);
+	}
+	eFree (newList);
+}
+
+static void addIgnoreListFromFile (const char *const fileName)
+{
+	stringList* tokens = stringListNewFromFile (fileName);
+	if (tokens == NULL)
+		error (FATAL | PERROR, "cannot open \"%s\"", fileName);
+	if (Option.ignore == NULL)
+		Option.ignore = tokens;
+	else
+		stringListCombine (Option.ignore, tokens);
+}
+
+static void processIgnoreOption (const char *const list)
+{
+	if (strchr ("@./\\", list [0]) != NULL)
+	{
+		const char* fileName = (*list == '@') ? list + 1 : list;
+		addIgnoreListFromFile (fileName);
+	}
+#if defined (MSDOS) || defined (WIN32) || defined (OS2)
+	else if (isalpha (list [0])  &&  list [1] == ':')
+		addIgnoreListFromFile (list);
+#endif
+	else if (strcmp (list, "-") == 0)
+	{
+		freeList (&Option.ignore);
+		verbose ("    clearing list\n");
+	}
+	else
+		readIgnoreList (list);
+}
+
+static void processVersionOption (
+		const char *const option,
+		const char *const parameter)
+{
+	printProgramIdentification ();
+	exit (0);
+}
+
+/*
+ *  Option tables
+ */
+
+static parametricOption ParametricOptions [] = {
+	{ "etags-include",          processEtagsInclude,            FALSE   },
+	{ "exclude",                processExcludeOption,           FALSE   },
+	{ "excmd",                  processExcmdOption,             FALSE   },
+	{ "extra",                  processExtraTagsOption,         FALSE   },
+	{ "fields",                 processFieldsOption,            FALSE   },
+	{ "filter-terminator",      processFilterTerminatorOption,  TRUE    },
+	{ "format",                 processFormatOption,            TRUE    },
+	{ "help",                   processHelpOption,              TRUE    },
+	{ "lang",                   processLanguageForceOption,     FALSE   },
+	{ "language",               processLanguageForceOption,     FALSE   },
+	{ "language-force",         processLanguageForceOption,     FALSE   },
+	{ "languages",              processLanguagesOption,         FALSE   },
+	{ "langdef",                processLanguageDefineOption,    FALSE   },
+	{ "langmap",                processLanguageMapOption,       FALSE   },
+	{ "license",                processLicenseOption,           TRUE    },
+	{ "list-kinds",             processListKindsOption,         TRUE    },
+	{ "list-maps",              processListMapsOption,          TRUE    },
+	{ "list-languages",         processListLanguagesOption,     TRUE    },
+	{ "options",                processOptionFile,              FALSE   },
+	{ "sort",                   processSortOption,              TRUE    },
+	{ "version",                processVersionOption,           TRUE    },
+};
+
+static booleanOption BooleanOptions [] = {
+	{ "append",         &Option.append,                 TRUE    },
+	{ "file-scope",     &Option.include.fileScope,      FALSE   },
+	{ "file-tags",      &Option.include.fileNames,      FALSE   },
+	{ "filter",         &Option.filter,                 TRUE    },
+	{ "if0",            &Option.if0,                    FALSE   },
+	{ "kind-long",      &Option.kindLong,               TRUE    },
+	{ "line-directives",&Option.lineDirectives,         FALSE   },
+	{ "links",          &Option.followLinks,            FALSE   },
+#ifdef RECURSE_SUPPORTED
+	{ "recurse",        &Option.recurse,                FALSE   },
+#endif
+	{ "tag-relative",   &Option.tagRelative,            TRUE    },
+	{ "totals",         &Option.printTotals,            TRUE    },
+	{ "verbose",        &Option.verbose,                FALSE   },
+};
+
+/*
+ *  Generic option parsing
+ */
+
+static void checkOptionOrder (const char* const option)
+{
+	if (NonOptionEncountered)
+		error (FATAL, "-%s option may not follow a file name", option);
+}
+
+static boolean processParametricOption (
+		const char *const option, const char *const parameter)
+{
+	const int count = sizeof (ParametricOptions) / sizeof (parametricOption);
+	boolean found = FALSE;
+	int i;
+
+	for (i = 0  ;  i < count  &&  ! found  ;  ++i)
+	{
+		parametricOption* const entry = &ParametricOptions [i];
+		if (strcmp (option, entry->name) == 0)
+		{
+			found = TRUE;
+			if (entry->initOnly)
+				checkOptionOrder (option);
+			(entry->handler) (option, parameter);
+		}
+	}
+	return found;
+}
+
+static boolean getBooleanOption (
+		const char *const option, const char *const parameter)
+{
+	boolean selection = TRUE;
+
+	if (parameter [0] == '\0')
+		selection = TRUE;
+	else if (isFalse (parameter))
+		selection = FALSE;
+	else if (isTrue (parameter))
+		selection = TRUE;
+	else
+		error (FATAL, "Invalid value for \"%s\" option", option);
+
+	return selection;
+}
+
+static boolean processBooleanOption (
+		const char *const option, const char *const parameter)
+{
+	const int count = sizeof (BooleanOptions) / sizeof (booleanOption);
+	boolean found = FALSE;
+	int i;
+
+	for (i = 0  ;  i < count  &&  ! found  ;  ++i)
+	{
+		booleanOption* const entry = &BooleanOptions [i];
+		if (strcmp (option, entry->name) == 0)
+		{
+			found = TRUE;
+			if (entry->initOnly)
+				checkOptionOrder (option);
+			*entry->pValue = getBooleanOption (option, parameter);
+		}
+	}
+	return found;
+}
+
+static void processLongOption (
+		const char *const option, const char *const parameter)
+{
+	Assert (parameter != NULL);
+	if (parameter == NULL  &&  parameter [0] == '\0')
+		verbose ("  Option: --%s\n", option);
+	else
+		verbose ("  Option: --%s=%s\n", option, parameter);
+
+	if (processBooleanOption (option, parameter))
+		;
+	else if (processParametricOption (option, parameter))
+		;
+	else if (processKindOption (option, parameter))
+		;
+	else if (processRegexOption (option, parameter))
+		;
+#ifndef RECURSE_SUPPORTED
+	else if (strcmp (option, "recurse") == 0)
+		error (WARNING, "%s option not supported on this host", option);
+#endif
+	else
+		error (FATAL, "Unknown option: --%s", option);
+}
+
+static void processShortOption (
+		const char *const option, const char *const parameter)
+{
+	if (parameter == NULL  ||  parameter [0] == '\0')
+		verbose ("  Option: -%s\n", option);
+	else
+		verbose ("  Option: -%s %s\n", option, parameter);
+
+	if (isCompoundOption (*option) && (parameter == NULL  ||  parameter [0] == '\0'))
+		error (FATAL, "Missing parameter for \"%s\" option", option);
+	else switch (*option)
+	{
+		case '?':
+			processHelpOption ("?", NULL);
+			exit (0);
+			break;
+		case 'a':
+			checkOptionOrder (option);
+			Option.append = TRUE;
+			break;
+#ifdef DEBUG
+		case 'b':
+			if (atol (parameter) < 0)
+				error (FATAL, "-%s: Invalid line number", option);
+			Option.breakLine = atol (parameter);
+			break;
+		case 'D':
+			Option.debugLevel = strtol (parameter, NULL, 0);
+			if (debug (DEBUG_STATUS))
+				Option.verbose = TRUE;
+			break;
+#endif
+		case 'B':
+			Option.backward = TRUE;
+			break;
+		case 'e':
+			checkOptionOrder (option);
+			setEtagsMode ();
+			break;
+		case 'f':
+		case 'o':
+			checkOptionOrder (option);
+			if (Option.tagFileName != NULL)
+			{
+				error (WARNING,
+					"-%s option specified more than once, last value used",
+					option);
+				freeString (&Option.tagFileName);
+			}
+			else if (parameter [0] == '-'  &&  parameter [1] != '\0')
+				error (FATAL, "output file name may not begin with a '-'");
+			Option.tagFileName = stringCopy (parameter);
+			break;
+		case 'F':
+			Option.backward = FALSE;
+			break;
+		case 'h':
+			processHeaderListOption (*option, parameter);
+			break;
+		case 'I':
+			processIgnoreOption (parameter);
+			break;
+		case 'L':
+			if (Option.fileList != NULL)
+			{
+				error (WARNING,
+					"-%s option specified more than once, last value used",
+					option);
+				freeString (&Option.fileList);
+			}
+			Option.fileList = stringCopy (parameter);
+			break;
+		case 'n':
+			Option.locate = EX_LINENUM;
+			break;
+		case 'N':
+			Option.locate = EX_PATTERN;
+			break;
+		case 'R':
+#ifdef RECURSE_SUPPORTED
+			Option.recurse = TRUE;
+#else
+			error (WARNING, "-%s option not supported on this host", option);
+#endif
+			break;
+		case 'u':
+			checkOptionOrder (option);
+			Option.sorted = SO_UNSORTED;
+			break;
+		case 'V':
+			Option.verbose = TRUE;
+			break;
+		case 'w':
+			/* silently ignored */
+			break;
+		case 'x':
+			checkOptionOrder (option);
+			Option.xref = TRUE;
+			break;
+		default:
+			error (FATAL, "Unknown option: -%s", option);
+			break;
+	}
+}
+
+extern void parseOption (cookedArgs* const args)
+{
+	Assert (! cArgOff (args));
+	if (args->isOption)
+	{
+		if (args->longOption)
+			processLongOption (args->item, args->parameter);
+		else
+		{
+			const char *parameter = args->parameter;
+			while (*parameter == ' ')
+				++parameter;
+			processShortOption (args->item, parameter);
+		}
+		cArgForth (args);
+	}
+}
+
+extern void parseOptions (cookedArgs* const args)
+{
+	NonOptionEncountered = FALSE;
+	while (! cArgOff (args)  &&  cArgIsOption (args))
+		parseOption (args);
+	if (! cArgOff (args)  &&  ! cArgIsOption (args))
+		NonOptionEncountered = TRUE;
+}
+
+static const char *CheckFile;
+static boolean checkSameFile (const char *const fileName)
+{
+	return isSameFile (CheckFile, fileName);
+}
+
+static boolean parseFileOptions (const char* const fileName)
+{
+	boolean fileFound = FALSE;
+	const char* const format = "Considering option file %s: %s\n";
+	CheckFile = fileName;
+	if (stringListHasTest (OptionFiles, checkSameFile))
+		verbose (format, fileName, "already considered");
+	else
+	{
+		FILE* const fp = fopen (fileName, "r");
+		if (fp == NULL)
+			verbose (format, fileName, "not found");
+		else
+		{
+			cookedArgs* const args = cArgNewFromLineFile (fp);
+			vString* file = vStringNewInit (fileName);
+			stringListAdd (OptionFiles, file);
+			verbose (format, fileName, "reading...");
+			parseOptions (args);
+			if (NonOptionEncountered)
+				error (WARNING, "Ignoring non-option in %s\n", fileName);
+			cArgDelete (args);
+			fclose (fp);
+			fileFound = TRUE;
+		}
+	}
+	return fileFound;
+}
+
+/* Actions to be taken before reading any other options */
+extern void previewFirstOption (cookedArgs* const args)
+{
+	while (cArgIsOption (args))
+	{
+		if (strcmp (args->item, "V") == 0 || strcmp (args->item, "verbose") == 0)
+			parseOption (args);
+		else if (strcmp (args->item, "options") == 0  &&
+				strcmp (args->parameter, "NONE") == 0)
+		{
+			fprintf (stderr, "No options will be read from files or environment\n");
+			SkipConfiguration = TRUE;
+			cArgForth (args);
+		}
+		else
+			break;
+	}
+}
+
+static void parseConfigurationFileOptionsInDirectoryWithLeafname (const char* directory, const char* leafname)
+{
+	vString* const pathname = combinePathAndFile (directory, leafname);
+	parseFileOptions (vStringValue (pathname));
+	vStringDelete (pathname);
+}
+
+static void parseConfigurationFileOptionsInDirectory (const char* directory)
+{
+	parseConfigurationFileOptionsInDirectoryWithLeafname (directory, ".ctags");
+#ifdef MSDOS_STYLE_PATH
+	parseConfigurationFileOptionsInDirectoryWithLeafname (directory, "ctags.cnf");
+#endif
+}
+
+static void parseConfigurationFileOptions (void)
+{
+	/* We parse .ctags on all systems, and additionally ctags.cnf on DOS. */
+	const char* const home = getenv ("HOME");
+#ifdef CUSTOM_CONFIGURATION_FILE
+	parseFileOptions (CUSTOM_CONFIGURATION_FILE);
+#endif
+#ifdef MSDOS_STYLE_PATH
+	parseFileOptions ("/ctags.cnf");
+#endif
+	parseFileOptions ("/etc/ctags.conf");
+	parseFileOptions ("/usr/local/etc/ctags.conf");
+	if (home != NULL)
+	{
+		parseConfigurationFileOptionsInDirectory (home);
+	}
+	else
+	{
+#ifdef MSDOS_STYLE_PATH
+		/*
+		 * Windows users don't usually set HOME.
+		 * The OS sets HOMEDRIVE and HOMEPATH for them.
+		 */
+		const char* homeDrive = getenv ("HOMEDRIVE");
+		const char* homePath = getenv ("HOMEPATH");
+		if (homeDrive != NULL && homePath != NULL)
+		{
+			vString* const windowsHome = vStringNew ();
+			vStringCatS (windowsHome, homeDrive);
+			vStringCatS (windowsHome, homePath);
+			parseConfigurationFileOptionsInDirectory (vStringValue (windowsHome));
+			vStringDelete (windowsHome);
+		}
+#endif
+	}
+	parseConfigurationFileOptionsInDirectory (".");
+}
+
+static void parseEnvironmentOptions (void)
+{
+	const char *envOptions = NULL;
+	const char* var = NULL;
+
+	if (Option.etags)
+	{
+		var = ETAGS_ENVIRONMENT;
+		envOptions = getenv (var);
+	}
+	if (envOptions == NULL)
+	{
+		var = CTAGS_ENVIRONMENT;
+		envOptions = getenv (var);
+	}
+	if (envOptions != NULL  &&  envOptions [0] != '\0')
+	{
+		cookedArgs* const args = cArgNewFromString (envOptions);
+		verbose ("Reading options from $CTAGS\n");
+		parseOptions (args);
+		cArgDelete (args);
+		if (NonOptionEncountered)
+			error (WARNING, "Ignoring non-option in %s variable", var);
+	}
+}
+
+extern void readOptionConfiguration (void)
+{
+	if (! SkipConfiguration)
+	{
+		parseConfigurationFileOptions ();
+		parseEnvironmentOptions ();
+	}
+}
+
+/*
+*   Option initialization
+*/
+
+extern void initOptions (void)
+{
+	OptionFiles = stringListNew ();
+	verbose ("Setting option defaults\n");
+	installHeaderListDefaults ();
+	verbose ("  Installing default language mappings:\n");
+	installLanguageMapDefaults ();
+
+	/* always excluded by default */
+	verbose ("  Installing default exclude patterns:\n");
+	processExcludeOption (NULL, "{arch}");
+	processExcludeOption (NULL, ".arch-ids");
+	processExcludeOption (NULL, ".arch-inventory");
+	processExcludeOption (NULL, "autom4te.cache");
+	processExcludeOption (NULL, "BitKeeper");
+	processExcludeOption (NULL, ".bzr");
+	processExcludeOption (NULL, ".bzrignore");
+	processExcludeOption (NULL, "CVS");
+	processExcludeOption (NULL, ".cvsignore");
+	processExcludeOption (NULL, "_darcs");
+	processExcludeOption (NULL, ".deps");
+	processExcludeOption (NULL, "EIFGEN");
+	processExcludeOption (NULL, ".git");
+	processExcludeOption (NULL, ".hg");
+	processExcludeOption (NULL, "PENDING");
+	processExcludeOption (NULL, "RCS");
+	processExcludeOption (NULL, "RESYNC");
+	processExcludeOption (NULL, "SCCS");
+	processExcludeOption (NULL, ".svn");
+}
+
+extern void freeOptionResources (void)
+{
+	freeString (&Option.tagFileName);
+	freeString (&Option.fileList);
+	freeString (&Option.filterTerminator);
+
+	freeList (&Excluded);
+	freeList (&Option.ignore);
+	freeList (&Option.headerExt);
+	freeList (&Option.etagsInclude);
+	freeList (&OptionFiles);
+}
+
+/* vi:set tabstop=4 shiftwidth=4: */
Index: a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/parse.c
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/parse.c	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/parse.c	(revision 5)
@@ -0,0 +1,677 @@
+/*
+*   $Id: parse.c 597 2007-07-31 05:35:30Z dhiebert $
+*
+*   Copyright (c) 1996-2003, Darren Hiebert
+*
+*   This source code is released for free distribution under the terms of the
+*   GNU General Public License.
+*
+*   This module contains functions for managing source languages and
+*   dispatching files to the appropriate language parser.
+*/
+
+/*
+*   INCLUDE FILES
+*/
+#include "general.h"  /* must always come first */
+
+#include <string.h>
+
+#include "debug.h"
+#include "entry.h"
+#include "main.h"
+#define OPTION_WRITE
+#include "options.h"
+#include "parsers.h" 
+#include "read.h"
+#include "routines.h"
+#include "vstring.h"
+
+/*
+*   DATA DEFINITIONS
+*/
+static parserDefinitionFunc* BuiltInParsers[] = { PARSER_LIST };
+static parserDefinition** LanguageTable = NULL;
+static unsigned int LanguageCount = 0;
+
+/*
+*   FUNCTION DEFINITIONS
+*/
+
+extern void makeSimpleTag (
+		const vString* const name, kindOption* const kinds, const int kind)
+{
+	if (kinds [kind].enabled  &&  name != NULL  &&  vStringLength (name) > 0)
+	{
+	    tagEntryInfo e;
+	    initTagEntry (&e, vStringValue (name));
+
+	    e.kindName = kinds [kind].name;
+	    e.kind     = kinds [kind].letter;
+
+	    makeTagEntry (&e);
+	}
+}
+
+/*
+*   parserDescription mapping management
+*/
+
+extern parserDefinition* parserNew (const char* name)
+{
+	parserDefinition* result = xCalloc (1, parserDefinition);
+	result->name = eStrdup (name);
+	return result;
+}
+
+extern const char *getLanguageName (const langType language)
+{
+	const char* result;
+	if (language == LANG_IGNORE)
+		result = "unknown";
+	else
+	{
+		Assert (0 <= language  &&  language < (int) LanguageCount);
+		result = LanguageTable [language]->name;
+	}
+	return result;
+}
+
+extern langType getNamedLanguage (const char *const name)
+{
+	langType result = LANG_IGNORE;
+	unsigned int i;
+	Assert (name != NULL);
+	for (i = 0  ;  i < LanguageCount  &&  result == LANG_IGNORE  ;  ++i)
+	{
+		const parserDefinition* const lang = LanguageTable [i];
+		if (lang->name != NULL)
+			if (strcasecmp (name, lang->name) == 0)
+				result = i;
+	}
+	return result;
+}
+
+static langType getExtensionLanguage (const char *const extension)
+{
+	langType result = LANG_IGNORE;
+	unsigned int i;
+	for (i = 0  ;  i < LanguageCount  &&  result == LANG_IGNORE  ;  ++i)
+	{
+		stringList* const exts = LanguageTable [i]->currentExtensions;
+		if (exts != NULL  &&  stringListExtensionMatched (exts, extension))
+			result = i;
+	}
+	return result;
+}
+
+static langType getPatternLanguage (const char *const fileName)
+{
+	langType result = LANG_IGNORE;
+	const char* base = baseFilename (fileName);
+	unsigned int i;
+	for (i = 0  ;  i < LanguageCount  &&  result == LANG_IGNORE  ;  ++i)
+	{
+		stringList* const ptrns = LanguageTable [i]->currentPatterns;
+		if (ptrns != NULL  &&  stringListFileMatched (ptrns, base))
+			result = i;
+	}
+	return result;
+}
+
+#ifdef SYS_INTERPRETER
+
+/*  The name of the language interpreter, either directly or as the argument
+ *  to "env".
+ */
+static vString* determineInterpreter (const char* const cmd)
+{
+	vString* const interpreter = vStringNew ();
+	const char* p = cmd;
+	do
+	{
+		vStringClear (interpreter);
+		for ( ;  isspace ((int) *p)  ;  ++p)
+			;  /* no-op */
+		for ( ;  *p != '\0'  &&  ! isspace ((int) *p)  ;  ++p)
+			vStringPut (interpreter, (int) *p);
+		vStringTerminate (interpreter);
+	} while (strcmp (vStringValue (interpreter), "env") == 0);
+	return interpreter;
+}
+
+static langType getInterpreterLanguage (const char *const fileName)
+{
+	langType result = LANG_IGNORE;
+	FILE* const fp = fopen (fileName, "r");
+	if (fp != NULL)
+	{
+		vString* const vLine = vStringNew ();
+		const char* const line = readLine (vLine, fp);
+		if (line != NULL  &&  line [0] == '#'  &&  line [1] == '!')
+		{
+			const char* const lastSlash = strrchr (line, '/');
+			const char *const cmd = lastSlash != NULL ? lastSlash+1 : line+2;
+			vString* const interpreter = determineInterpreter (cmd);
+			result = getExtensionLanguage (vStringValue (interpreter));
+			if (result == LANG_IGNORE)
+				result = getNamedLanguage (vStringValue (interpreter));
+			vStringDelete (interpreter);
+		}
+		vStringDelete (vLine);
+		fclose (fp);
+	}
+	return result;
+}
+
+#endif
+
+extern langType getFileLanguage (const char *const fileName)
+{
+	langType language = Option.language;
+	if (language == LANG_AUTO)
+	{
+		language = getExtensionLanguage (fileExtension (fileName));
+		if (language == LANG_IGNORE)
+			language = getPatternLanguage (fileName);
+#ifdef SYS_INTERPRETER
+		if (language == LANG_IGNORE)
+		{
+			fileStatus *status = eStat (fileName);
+			if (status->isExecutable)
+				language = getInterpreterLanguage (fileName);
+		}
+#endif
+	}
+	return language;
+}
+
+extern void printLanguageMap (const langType language)
+{
+	boolean first = TRUE;
+	unsigned int i;
+	stringList* map = LanguageTable [language]->currentPatterns;
+	Assert (0 <= language  &&  language < (int) LanguageCount);
+	for (i = 0  ;  map != NULL  &&  i < stringListCount (map)  ;  ++i)
+	{
+		printf ("%s(%s)", (first ? "" : " "),
+				vStringValue (stringListItem (map, i)));
+		first = FALSE;
+	}
+	map = LanguageTable [language]->currentExtensions;
+	for (i = 0  ;  map != NULL  &&  i < stringListCount (map)  ;  ++i)
+	{
+		printf ("%s.%s", (first ? "" : " "),
+				vStringValue (stringListItem (map, i)));
+		first = FALSE;
+	}
+}
+
+extern void installLanguageMapDefault (const langType language)
+{
+	parserDefinition* lang;
+	Assert (0 <= language  &&  language < (int) LanguageCount);
+	lang = LanguageTable [language];
+	if (lang->currentPatterns != NULL)
+		stringListDelete (lang->currentPatterns);
+	if (lang->currentExtensions != NULL)
+		stringListDelete (lang->currentExtensions);
+
+	if (lang->patterns == NULL)
+		lang->currentPatterns = stringListNew ();
+	else
+	{
+		lang->currentPatterns =
+			stringListNewFromArgv (lang->patterns);
+	}
+	if (lang->extensions == NULL)
+		lang->currentExtensions = stringListNew ();
+	else
+	{
+		lang->currentExtensions =
+			stringListNewFromArgv (lang->extensions);
+	}
+	if (Option.verbose)
+		printLanguageMap (language);
+	verbose ("\n");
+}
+
+extern void installLanguageMapDefaults (void)
+{
+	unsigned int i;
+	for (i = 0  ;  i < LanguageCount  ;  ++i)
+	{
+		verbose ("    %s: ", getLanguageName (i));
+		installLanguageMapDefault (i);
+	}
+}
+
+extern void clearLanguageMap (const langType language)
+{
+	Assert (0 <= language  &&  language < (int) LanguageCount);
+	stringListClear (LanguageTable [language]->currentPatterns);
+	stringListClear (LanguageTable [language]->currentExtensions);
+}
+
+extern void addLanguagePatternMap (const langType language, const char* ptrn)
+{
+	vString* const str = vStringNewInit (ptrn);
+	parserDefinition* lang;
+	Assert (0 <= language  &&  language < (int) LanguageCount);
+	lang = LanguageTable [language];
+	if (lang->currentPatterns == NULL)
+		lang->currentPatterns = stringListNew ();
+	stringListAdd (lang->currentPatterns, str);
+}
+
+extern boolean removeLanguageExtensionMap (const char *const extension)
+{
+	boolean result = FALSE;
+	unsigned int i;
+	for (i = 0  ;  i < LanguageCount  &&  ! result ;  ++i)
+	{
+		stringList* const exts = LanguageTable [i]->currentExtensions;
+		if (exts != NULL  &&  stringListRemoveExtension (exts, extension))
+		{
+			verbose (" (removed from %s)", getLanguageName (i));
+			result = TRUE;
+		}
+	}
+	return result;
+}
+
+extern void addLanguageExtensionMap (
+		const langType language, const char* extension)
+{
+	vString* const str = vStringNewInit (extension);
+	Assert (0 <= language  &&  language < (int) LanguageCount);
+	removeLanguageExtensionMap (extension);
+	stringListAdd (LanguageTable [language]->currentExtensions, str);
+}
+
+extern void enableLanguage (const langType language, const boolean state)
+{
+	Assert (0 <= language  &&  language < (int) LanguageCount);
+	LanguageTable [language]->enabled = state;
+}
+
+extern void enableLanguages (const boolean state)
+{
+	unsigned int i;
+	for (i = 0  ;  i < LanguageCount  ;  ++i)
+		enableLanguage (i, state);
+}
+
+static void initializeParsers (void)
+{
+	unsigned int i;
+	for (i = 0  ;  i < LanguageCount  ;  ++i)
+		if (LanguageTable [i]->initialize != NULL)
+			(LanguageTable [i]->initialize) ((langType) i);
+}
+
+extern void initializeParsing (void)
+{
+	unsigned int builtInCount;
+	unsigned int i;
+
+	builtInCount = sizeof (BuiltInParsers) / sizeof (BuiltInParsers [0]);
+	LanguageTable = xMalloc (builtInCount, parserDefinition*);
+
+	verbose ("Installing parsers: ");
+	for (i = 0  ;  i < builtInCount  ;  ++i)
+	{
+		parserDefinition* const def = (*BuiltInParsers [i]) ();
+		if (def != NULL)
+		{
+			boolean accepted = FALSE;
+			if (def->name == NULL  ||  def->name[0] == '\0')
+				error (FATAL, "parser definition must contain name\n");
+			else if (def->regex)
+			{
+#ifdef HAVE_REGEX
+				def->parser = findRegexTags;
+				accepted = TRUE;
+#endif
+			}
+			else if ((def->parser == NULL)  ==  (def->parser2 == NULL))
+				error (FATAL,
+		"%s parser definition must define one and only one parsing routine\n",
+					   def->name);
+			else
+				accepted = TRUE;
+			if (accepted)
+			{
+				verbose ("%s%s", i > 0 ? ", " : "", def->name);
+				def->id = LanguageCount++;
+				LanguageTable [def->id] = def;
+			}
+		}
+	}
+	verbose ("\n");
+	enableLanguages (TRUE);
+	initializeParsers ();
+}
+
+extern void freeParserResources (void)
+{
+	unsigned int i;
+	for (i = 0  ;  i < LanguageCount  ;  ++i)
+	{
+		parserDefinition* const lang = LanguageTable [i];
+		freeList (&lang->currentPatterns);
+		freeList (&lang->currentExtensions);
+		eFree (lang->name);
+		lang->name = NULL;
+		eFree (lang);
+	}
+	if (LanguageTable != NULL)
+		eFree (LanguageTable);
+	LanguageTable = NULL;
+	LanguageCount = 0;
+}
+
+/*
+*   Option parsing
+*/
+
+extern void processLanguageDefineOption (
+		const char *const option, const char *const parameter)
+{
+#ifdef HAVE_REGEX
+	if (parameter [0] == '\0')
+		error (WARNING, "No language specified for \"%s\" option", option);
+	else if (getNamedLanguage (parameter) != LANG_IGNORE)
+		error (WARNING, "Language \"%s\" already defined", parameter);
+	else
+	{
+		unsigned int i = LanguageCount++;
+		parserDefinition* const def = parserNew (parameter);
+		def->parser            = findRegexTags;
+		def->currentPatterns   = stringListNew ();
+		def->currentExtensions = stringListNew ();
+		def->regex             = TRUE;
+		def->enabled           = TRUE;
+		def->id                = i;
+		LanguageTable = xRealloc (LanguageTable, i + 1, parserDefinition*);
+		LanguageTable [i] = def;
+	}
+#else
+	error (WARNING, "regex support not available; required for --%s option",
+		   option);
+#endif
+}
+
+static kindOption *langKindOption (const langType language, const int flag)
+{
+	unsigned int i;
+	kindOption* result = NULL;
+	const parserDefinition* lang;
+	Assert (0 <= language  &&  language < (int) LanguageCount);
+	lang = LanguageTable [language];
+	for (i=0  ;  i < lang->kindCount  &&  result == NULL  ;  ++i)
+		if (lang->kinds [i].letter == flag)
+			result = &lang->kinds [i];
+	return result;
+}
+
+static void disableLanguageKinds (const langType language)
+{
+	const parserDefinition* lang;
+	Assert (0 <= language  &&  language < (int) LanguageCount);
+	lang = LanguageTable [language];
+	if (lang->regex)
+		disableRegexKinds (language);
+	else
+	{
+		unsigned int i;
+		for (i = 0  ;  i < lang->kindCount  ;  ++i)
+			lang->kinds [i].enabled = FALSE;
+	}
+}
+
+static boolean enableLanguageKind (
+		const langType language, const int kind, const boolean mode)
+{
+	boolean result = FALSE;
+	if (LanguageTable [language]->regex)
+		result = enableRegexKind (language, kind, mode);
+	else
+	{
+		kindOption* const opt = langKindOption (language, kind);
+		if (opt != NULL)
+		{
+			opt->enabled = mode;
+			result = TRUE;
+		}
+	}
+	return result;
+}
+
+static void processLangKindOption (
+		const langType language, const char *const option,
+		const char *const parameter)
+{
+	const char *p = parameter;
+	boolean mode = TRUE;
+	int c;
+
+	Assert (0 <= language  &&  language < (int) LanguageCount);
+	if (*p != '+'  &&  *p != '-')
+		disableLanguageKinds (language);
+	while ((c = *p++) != '\0') switch (c)
+	{
+		case '+': mode = TRUE;  break;
+		case '-': mode = FALSE; break;
+		default:
+			if (! enableLanguageKind (language, c, mode))
+				error (WARNING, "Unsupported parameter '%c' for --%s option",
+					c, option);
+			break;
+	}
+}
+
+extern boolean processKindOption (
+		const char *const option, const char *const parameter)
+{
+	boolean handled = FALSE;
+	const char* const dash = strchr (option, '-');
+	if (dash != NULL  &&
+		(strcmp (dash + 1, "kinds") == 0  ||  strcmp (dash + 1, "types") == 0))
+	{
+		langType language;
+		vString* langName = vStringNew ();
+		vStringNCopyS (langName, option, dash - option);
+		language = getNamedLanguage (vStringValue (langName));
+		if (language == LANG_IGNORE)
+			error (WARNING, "Unknown language \"%s\" in \"%s\" option", vStringValue (langName), option);
+		else
+			processLangKindOption (language, option, parameter);
+		vStringDelete (langName);
+		handled = TRUE;
+	}
+	return handled;
+}
+
+static void printLanguageKind (const kindOption* const kind, boolean indent)
+{
+	const char *const indentation = indent ? "    " : "";
+	printf ("%s%c  %s%s\n", indentation, kind->letter,
+		kind->description != NULL ? kind->description :
+			(kind->name != NULL ? kind->name : ""),
+		kind->enabled ? "" : " [off]");
+}
+
+static void printKinds (langType language, boolean indent)
+{
+	const parserDefinition* lang;
+	Assert (0 <= language  &&  language < (int) LanguageCount);
+	lang = LanguageTable [language];
+	if (lang->kinds != NULL  ||  lang->regex)
+	{
+		unsigned int i;
+		for (i = 0  ;  i < lang->kindCount  ;  ++i)
+			printLanguageKind (lang->kinds + i, indent);
+		printRegexKinds (language, indent);
+	}
+}
+
+extern void printLanguageKinds (const langType language)
+{
+	if (language == LANG_AUTO)
+	{
+		unsigned int i;
+		for (i = 0  ;  i < LanguageCount  ;  ++i)
+		{
+			const parserDefinition* const lang = LanguageTable [i];
+			printf ("%s%s\n", lang->name, lang->enabled ? "" : " [disabled]");
+			printKinds (i, TRUE);
+		}
+	}
+	else
+		printKinds (language, FALSE);
+}
+
+static void printMaps (const langType language)
+{
+	const parserDefinition* lang;
+	unsigned int i;
+	Assert (0 <= language  &&  language < (int) LanguageCount);
+	lang = LanguageTable [language];
+	printf ("%-8s", lang->name);
+	if (lang->currentExtensions != NULL)
+		for (i = 0  ;  i < stringListCount (lang->currentExtensions)  ;  ++i)
+			printf (" *.%s", vStringValue (
+						stringListItem (lang->currentExtensions, i)));
+	if (lang->currentPatterns != NULL)
+		for (i = 0  ;  i < stringListCount (lang->currentPatterns)  ;  ++i)
+			printf (" %s", vStringValue (
+						stringListItem (lang->currentPatterns, i)));
+	putchar ('\n');
+}
+
+extern void printLanguageMaps (const langType language)
+{
+	if (language == LANG_AUTO)
+	{
+		unsigned int i;
+		for (i = 0  ;  i < LanguageCount  ;  ++i)
+			printMaps (i);
+	}
+	else
+		printMaps (language);
+}
+
+static void printLanguage (const langType language)
+{
+	const parserDefinition* lang;
+	Assert (0 <= language  &&  language < (int) LanguageCount);
+	lang = LanguageTable [language];
+	if (lang->kinds != NULL  ||  lang->regex)
+		printf ("%s%s\n", lang->name, lang->enabled ? "" : " [disabled]");
+}
+	    
+extern void printLanguageList (void)
+{
+	unsigned int i;
+	for (i = 0  ;  i < LanguageCount  ;  ++i)
+		printLanguage (i);
+}
+
+/*
+*   File parsing
+*/
+
+static void makeFileTag (const char *const fileName)
+{
+	if (Option.include.fileNames)
+	{
+		tagEntryInfo tag;
+		initTagEntry (&tag, baseFilename (fileName));
+
+		tag.isFileEntry     = TRUE;
+		tag.lineNumberEntry = TRUE;
+		tag.lineNumber      = 1;
+		tag.kindName        = "file";
+		tag.kind            = 'F';
+
+		makeTagEntry (&tag);
+	}
+}
+
+static boolean createTagsForFile (
+		const char *const fileName, const langType language,
+		const unsigned int passCount)
+{
+	boolean retried = FALSE;
+	Assert (0 <= language  &&  language < (int) LanguageCount);
+	if (fileOpen (fileName, language))
+	{
+		const parserDefinition* const lang = LanguageTable [language];
+		if (Option.etags)
+			beginEtagsFile ();
+
+		makeFileTag (fileName);
+
+		if (lang->parser != NULL)
+			lang->parser ();
+		else if (lang->parser2 != NULL)
+			retried = lang->parser2 (passCount);
+
+		if (Option.etags)
+			endEtagsFile (getSourceFileTagPath ());
+
+		fileClose ();
+	}
+
+	return retried;
+}
+
+static boolean createTagsWithFallback (
+		const char *const fileName, const langType language)
+{
+	const unsigned long numTags	= TagFile.numTags.added;
+	fpos_t tagFilePosition;
+	unsigned int passCount = 0;
+	boolean tagFileResized = FALSE;
+
+	fgetpos (TagFile.fp, &tagFilePosition);
+	while (createTagsForFile (fileName, language, ++passCount))
+	{
+		/*  Restore prior state of tag file.
+		 */
+		fsetpos (TagFile.fp, &tagFilePosition);
+		TagFile.numTags.added = numTags;
+		tagFileResized = TRUE;
+	}
+	return tagFileResized;
+}
+
+extern boolean parseFile (const char *const fileName)
+{
+	boolean tagFileResized = FALSE;
+	langType language = Option.language;
+	if (Option.language == LANG_AUTO)
+		language = getFileLanguage (fileName);
+	Assert (language != LANG_AUTO);
+	if (language == LANG_IGNORE)
+		verbose ("ignoring %s (unknown language)\n", fileName);
+	else if (! LanguageTable [language]->enabled)
+		verbose ("ignoring %s (language disabled)\n", fileName);
+	else
+	{
+		if (Option.filter)
+			openTagFile ();
+
+		tagFileResized = createTagsWithFallback (fileName, language);
+
+		if (Option.filter)
+			closeTagFile (tagFileResized);
+		addTotals (1, 0L, 0L);
+
+		return tagFileResized;
+	}
+	return tagFileResized;
+}
+
+/* vi:set tabstop=4 shiftwidth=4 nowrap: */
Index: a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/python.c
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/python.c	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/python.c	(revision 5)
@@ -0,0 +1,771 @@
+/*
+*   $Id: python.c 720 2009-07-07 03:55:23Z dhiebert $
+*
+*   Copyright (c) 2000-2003, Darren Hiebert
+*
+*   This source code is released for free distribution under the terms of the
+*   GNU General Public License.
+*
+*   This module contains functions for generating tags for Python language
+*   files.
+*/
+/*
+*   INCLUDE FILES
+*/
+#include "general.h"  /* must always come first */
+
+#include <string.h>
+
+#include "entry.h"
+#include "options.h"
+#include "read.h"
+#include "main.h"
+#include "vstring.h"
+#include "routines.h"
+#include "debug.h"
+
+/*
+*   DATA DECLARATIONS
+*/
+typedef struct NestingLevel NestingLevel;
+typedef struct NestingLevels NestingLevels;
+
+struct NestingLevel
+{
+	int indentation;
+	vString *name;
+	int type;
+};
+
+struct NestingLevels
+{
+	NestingLevel *levels;
+	int n;					/* number of levels in use */
+	int allocated;
+};
+
+typedef enum {
+	K_CLASS, K_FUNCTION, K_MEMBER, K_VARIABLE, K_IMPORT
+} pythonKind;
+
+/*
+*   DATA DEFINITIONS
+*/
+static kindOption PythonKinds[] = {
+	{TRUE, 'c', "class",    "classes"},
+	{TRUE, 'f', "function", "functions"},
+	{TRUE, 'm', "member",   "class members"},
+    {TRUE, 'v', "variable", "variables"},
+    {TRUE, 'i', "namespace", "imports"}
+};
+
+static char const * const singletriple = "'''";
+static char const * const doubletriple = "\"\"\"";
+
+/*
+*   FUNCTION DEFINITIONS
+*/
+
+static NestingLevels *nestingLevelsNew (void)
+{
+	NestingLevels *nls = xCalloc (1, NestingLevels);
+	return nls;
+}
+
+static void nestingLevelsFree (NestingLevels *nls)
+{
+	int i;
+	for (i = 0; i < nls->allocated; i++)
+		vStringDelete(nls->levels[i].name);
+	if (nls->levels) eFree(nls->levels);
+	eFree(nls);
+}
+
+static void nestingLevelsPush (NestingLevels *nls,
+	const vString *name, int type)
+{
+	NestingLevel *nl = NULL;
+
+	if (nls->n >= nls->allocated)
+	{
+		nls->allocated++;
+		nls->levels = xRealloc(nls->levels,
+			nls->allocated, NestingLevel);
+		nls->levels[nls->n].name = vStringNew();
+	}
+	nl = &nls->levels[nls->n];
+	nls->n++;
+
+	vStringCopy(nl->name, name);
+	nl->type = type;
+}
+
+#if 0
+static NestingLevel *nestingLevelsGetCurrent (NestingLevels *nls)
+{
+	Assert (nls != NULL);
+
+	if (nls->n < 1)
+		return NULL;
+
+	return &nls->levels[nls->n - 1];
+}
+
+static void nestingLevelsPop (NestingLevels *nls)
+{
+	const NestingLevel *nl = nestingLevelsGetCurrent(nls);
+
+	Assert (nl != NULL);
+	vStringClear(nl->name);
+	nls->n--;
+}
+#endif
+
+static boolean isIdentifierFirstCharacter (int c)
+{
+	return (boolean) (isalpha (c) || c == '_');
+}
+
+static boolean isIdentifierCharacter (int c)
+{
+	return (boolean) (isalnum (c) || c == '_');
+}
+
+/* Given a string with the contents of a line directly after the "def" keyword,
+ * extract all relevant information and create a tag.
+ */
+static void makeFunctionTag (vString *const function,
+	vString *const parent, int is_class_parent, const char *arglist)
+{
+	tagEntryInfo tag;
+	initTagEntry (&tag, vStringValue (function));
+
+	tag.kindName = "function";
+	tag.kind = 'f';
+	/* tag.extensionFields.arglist = arglist; */
+
+	if (vStringLength (parent) > 0)
+	{
+		if (is_class_parent)
+		{
+			tag.kindName = "member";
+			tag.kind = 'm';
+			tag.extensionFields.scope [0] = "class";
+			tag.extensionFields.scope [1] = vStringValue (parent);
+		}
+		else
+		{
+			tag.extensionFields.scope [0] = "function";
+			tag.extensionFields.scope [1] = vStringValue (parent);
+		}
+	}
+
+	/* If a function starts with __, we mark it as file scope.
+	 * FIXME: What is the proper way to signal such attributes?
+	 * TODO: What does functions/classes starting with _ and __ mean in python?
+	 */
+	if (strncmp (vStringValue (function), "__", 2) == 0 &&
+		strcmp (vStringValue (function), "__init__") != 0)
+	{
+		tag.extensionFields.access = "private";
+		tag.isFileScope = TRUE;
+	}
+	else
+	{
+		tag.extensionFields.access = "public";
+	}
+	makeTagEntry (&tag);
+}
+
+/* Given a string with the contents of the line directly after the "class"
+ * keyword, extract all necessary information and create a tag.
+ */
+static void makeClassTag (vString *const class, vString *const inheritance,
+	vString *const parent, int is_class_parent)
+{
+	tagEntryInfo tag;
+	initTagEntry (&tag, vStringValue (class));
+	tag.kindName = "class";
+	tag.kind = 'c';
+	if (vStringLength (parent) > 0)
+	{
+		if (is_class_parent)
+		{
+			tag.extensionFields.scope [0] = "class";
+			tag.extensionFields.scope [1] = vStringValue (parent);
+		}
+		else
+		{
+			tag.extensionFields.scope [0] = "function";
+			tag.extensionFields.scope [1] = vStringValue (parent);
+		}
+	}
+	tag.extensionFields.inheritance = vStringValue (inheritance);
+	makeTagEntry (&tag);
+}
+
+static void makeVariableTag (vString *const var, vString *const parent)
+{
+	tagEntryInfo tag;
+	initTagEntry (&tag, vStringValue (var));
+	tag.kindName = "variable";
+	tag.kind = 'v';
+	if (vStringLength (parent) > 0)
+	{
+		tag.extensionFields.scope [0] = "class";
+		tag.extensionFields.scope [1] = vStringValue (parent);
+	}
+	makeTagEntry (&tag);
+}
+
+/* Skip a single or double quoted string. */
+static const char *skipString (const char *cp)
+{
+	const char *start = cp;
+	int escaped = 0;
+	for (cp++; *cp; cp++)
+	{
+		if (escaped)
+			escaped--;
+		else if (*cp == '\\')
+			escaped++;
+		else if (*cp == *start)
+			return cp + 1;
+	}
+	return cp;
+}
+
+/* Skip everything up to an identifier start. */
+static const char *skipEverything (const char *cp)
+{
+	for (; *cp; cp++)
+	{
+		if (*cp == '"' || *cp == '\'')
+		{
+			cp = skipString(cp);
+			if (!*cp) break;
+		}
+		if (isIdentifierFirstCharacter ((int) *cp))
+			return cp;
+	}
+	return cp;
+}
+
+/* Skip an identifier. */
+static const char *skipIdentifier (const char *cp)
+{
+	while (isIdentifierCharacter ((int) *cp))
+		cp++;
+	return cp;
+}
+
+static const char *findDefinitionOrClass (const char *cp)
+{
+	while (*cp)
+	{
+		cp = skipEverything (cp);
+		if (!strncmp(cp, "def", 3) || !strncmp(cp, "class", 5) ||
+			!strncmp(cp, "cdef", 4) || !strncmp(cp, "cpdef", 5))
+		{
+			return cp;
+		}
+		cp = skipIdentifier (cp);
+	}
+	return NULL;
+}
+
+static const char *skipSpace (const char *cp)
+{
+	while (isspace ((int) *cp))
+		++cp;
+	return cp;
+}
+
+/* Starting at ''cp'', parse an identifier into ''identifier''. */
+static const char *parseIdentifier (const char *cp, vString *const identifier)
+{
+	vStringClear (identifier);
+	while (isIdentifierCharacter ((int) *cp))
+	{
+		vStringPut (identifier, (int) *cp);
+		++cp;
+	}
+	vStringTerminate (identifier);
+	return cp;
+}
+
+static void parseClass (const char *cp, vString *const class,
+	vString *const parent, int is_class_parent)
+{
+	vString *const inheritance = vStringNew ();
+	vStringClear (inheritance);
+	cp = parseIdentifier (cp, class);
+	cp = skipSpace (cp);
+	if (*cp == '(')
+	{
+		++cp;
+		while (*cp != ')')
+		{
+			if (*cp == '\0')
+			{
+				/* Closing parenthesis can be in follow up line. */
+				cp = (const char *) fileReadLine ();
+				if (!cp) break;
+				vStringPut (inheritance, ' ');
+				continue;
+			}
+			vStringPut (inheritance, *cp);
+			++cp;
+		}
+		vStringTerminate (inheritance);
+	}
+	makeClassTag (class, inheritance, parent, is_class_parent);
+	vStringDelete (inheritance);
+}
+
+static void parseImports (const char *cp)
+{
+	const char *pos;
+	vString *name, *name_next;
+
+	cp = skipEverything (cp);
+
+	if ((pos = strstr (cp, "import")) == NULL)
+		return;
+
+	cp = pos + 6;
+
+	/* continue only if there is some space between the keyword and the identifier */
+	if (! isspace (*cp))
+		return;
+
+	cp++;
+	cp = skipSpace (cp);
+
+	name = vStringNew ();
+	name_next = vStringNew ();
+
+	cp = skipEverything (cp);
+	while (*cp)
+	{
+		cp = parseIdentifier (cp, name);
+
+		cp = skipEverything (cp);
+		/* we parse the next possible import statement as well to be able to ignore 'foo' in
+		 * 'import foo as bar' */
+		parseIdentifier (cp, name_next);
+
+		/* take the current tag only if the next one is not "as" */
+		if (strcmp (vStringValue (name_next), "as") != 0 &&
+			strcmp (vStringValue (name), "as") != 0)
+		{
+			makeSimpleTag (name, PythonKinds, K_IMPORT);
+		}
+	}
+	vStringDelete (name);
+	vStringDelete (name_next);
+}
+
+/* modified from get.c getArglistFromStr().
+ * warning: terminates rest of string past arglist!
+ * note: does not ignore brackets inside strings! */
+static char *parseArglist(const char *buf)
+{
+	char *start, *end;
+	int level;
+	if (NULL == buf)
+		return NULL;
+	if (NULL == (start = strchr(buf, '(')))
+		return NULL;
+	for (level = 1, end = start + 1; level > 0; ++end)
+	{
+		if ('\0' == *end)
+			break;
+		else if ('(' == *end)
+			++ level;
+		else if (')' == *end)
+			-- level;
+	}
+	*end = '\0';
+	return strdup(start);
+}
+
+static void parseFunction (const char *cp, vString *const def,
+	vString *const parent, int is_class_parent)
+{
+	char *arglist;
+
+	cp = parseIdentifier (cp, def);
+	arglist = parseArglist (cp);
+	makeFunctionTag (def, parent, is_class_parent, arglist);
+	eFree (arglist);
+}
+
+/* Get the combined name of a nested symbol. Classes are separated with ".",
+ * functions with "/". For example this code:
+ * class MyClass:
+ *     def myFunction:
+ *         def SubFunction:
+ *             class SubClass:
+ *                 def Method:
+ *                     pass
+ * Would produce this string:
+ * MyClass.MyFunction/SubFunction/SubClass.Method
+ */
+static boolean constructParentString(NestingLevels *nls, int indent,
+	vString *result)
+{
+	int i;
+	NestingLevel *prev = NULL;
+	int is_class = FALSE;
+	vStringClear (result);
+	for (i = 0; i < nls->n; i++)
+	{
+		NestingLevel *nl = nls->levels + i;
+		if (indent <= nl->indentation)
+			break;
+		if (prev)
+		{
+			vStringCatS(result, ".");	/* make Geany symbol list grouping work properly */
+/*
+			if (prev->type == K_CLASS)
+				vStringCatS(result, ".");
+			else
+				vStringCatS(result, "/");
+*/
+		}
+		vStringCat(result, nl->name);
+		is_class = (nl->type == K_CLASS);
+		prev = nl;
+	}
+	return is_class;
+}
+
+/* Check whether parent's indentation level is higher than the current level and
+ * if so, remove it.
+ */
+static void checkParent(NestingLevels *nls, int indent, vString *parent)
+{
+	int i;
+	NestingLevel *n;
+
+	for (i = 0; i < nls->n; i++)
+	{
+		n = nls->levels + i;
+		/* is there a better way to compare two vStrings? */
+		if (strcmp(vStringValue(parent), vStringValue(n->name)) == 0)
+		{
+			if (n && indent <= n->indentation)
+			{
+				/* remove this level by clearing its name */
+				vStringClear(n->name);
+			}
+			break;
+		}
+	}
+}
+
+static void addNestingLevel(NestingLevels *nls, int indentation,
+	const vString *name, boolean is_class)
+{
+	int i;
+	NestingLevel *nl = NULL;
+
+	for (i = 0; i < nls->n; i++)
+	{
+		nl = nls->levels + i;
+		if (indentation <= nl->indentation) break;
+	}
+	if (i == nls->n)
+	{
+		nestingLevelsPush(nls, name, 0);
+		nl = nls->levels + i;
+	}
+	else
+	{	/* reuse existing slot */
+		nls->n = i + 1;
+		vStringCopy(nl->name, name);
+	}
+	nl->indentation = indentation;
+	nl->type = is_class ? K_CLASS : !K_CLASS;
+}
+
+/* Return a pointer to the start of the next triple string, or NULL. Store
+ * the kind of triple string in "which" if the return is not NULL.
+ */
+static char const *find_triple_start(char const *string, char const **which)
+{
+	char const *cp = string;
+
+	for (; *cp; cp++)
+	{
+		if (*cp == '"' || *cp == '\'')
+		{
+			if (strncmp(cp, doubletriple, 3) == 0)
+			{
+				*which = doubletriple;
+				return cp;
+			}
+			if (strncmp(cp, singletriple, 3) == 0)
+			{
+				*which = singletriple;
+				return cp;
+			}
+			cp = skipString(cp);
+			if (!*cp) break;
+		}
+	}
+	return NULL;
+}
+
+/* Find the end of a triple string as pointed to by "which", and update "which"
+ * with any other triple strings following in the given string.
+ */
+static void find_triple_end(char const *string, char const **which)
+{
+	char const *s = string;
+	while (1)
+	{
+		/* Check if the string ends in the same line. */
+		s = strstr (s, *which);
+		if (!s) break;
+		s += 3;
+		*which = NULL;
+		/* If yes, check if another one starts in the same line. */
+		s = find_triple_start(s, which);
+		if (!s) break;
+		s += 3;
+	}
+}
+
+static const char *findVariable(const char *line)
+{
+	/* Parse global and class variable names (C.x) from assignment statements.
+	 * Object attributes (obj.x) are ignored.
+	 * Assignment to a tuple 'x, y = 2, 3' not supported.
+	 * TODO: ignore duplicate tags from reassignment statements. */
+	const char *cp, *sp, *eq, *start;
+
+	cp = strstr(line, "=");
+	if (!cp)
+		return NULL;
+	eq = cp + 1;
+	while (*eq)
+	{
+		if (*eq == '=')
+			return NULL;	/* ignore '==' operator and 'x=5,y=6)' function lines */
+		if (*eq == '(' || *eq == '#')
+			break;	/* allow 'x = func(b=2,y=2,' lines and comments at the end of line */
+		eq++;
+	}
+
+	/* go backwards to the start of the line, checking we have valid chars */
+	start = cp - 1;
+	while (start >= line && isspace ((int) *start))
+		--start;
+	while (start >= line && isIdentifierCharacter ((int) *start))
+		--start;
+	if (!isIdentifierFirstCharacter(*(start + 1)))
+		return NULL;
+	sp = start;
+	while (sp >= line && isspace ((int) *sp))
+		--sp;
+	if ((sp + 1) != line)	/* the line isn't a simple variable assignment */
+		return NULL;
+	/* the line is valid, parse the variable name */
+	++start;
+	return start;
+}
+
+/* Skip type declaration that optionally follows a cdef/cpdef */
+static const char *skipTypeDecl (const char *cp, boolean *is_class)
+{
+	const char *lastStart = cp, *ptr = cp;
+	int loopCount = 0;
+	ptr = skipSpace(cp);
+	if (!strncmp("extern", ptr, 6)) {
+		ptr += 6;
+		ptr = skipSpace(ptr);
+		if (!strncmp("from", ptr, 4)) { return NULL; }
+	}
+	if (!strncmp("class", ptr, 5)) {
+		ptr += 5 ;
+		*is_class = TRUE;
+		ptr = skipSpace(ptr);
+		return ptr;
+	}
+	/* limit so that we don't pick off "int item=obj()" */
+	while (*ptr && loopCount++ < 2) {
+		while (*ptr && *ptr != '=' && *ptr != '(' && !isspace(*ptr)) ptr++;
+		if (!*ptr || *ptr == '=') return NULL;
+		if (*ptr == '(') {
+		    return lastStart; /* if we stopped on a '(' we are done */
+		}
+		ptr = skipSpace(ptr);
+		lastStart = ptr;
+		while (*lastStart == '*') lastStart++;  /* cdef int *identifier */
+	}
+	return NULL;
+}
+
+static void findPythonTags (void)
+{
+	vString *const continuation = vStringNew ();
+	vString *const name = vStringNew ();
+	vString *const parent = vStringNew();
+
+	NestingLevels *const nesting_levels = nestingLevelsNew();
+
+	const char *line;
+	int line_skip = 0;
+	char const *longStringLiteral = NULL;
+
+	while ((line = (const char *) fileReadLine ()) != NULL)
+	{
+		const char *cp = line, *candidate;
+		char const *longstring;
+		char const *keyword, *variable;
+		int indent;
+
+		cp = skipSpace (cp);
+
+		if (*cp == '\0')  /* skip blank line */
+			continue;
+
+		/* Skip comment if we are not inside a multi-line string. */
+		if (*cp == '#' && !longStringLiteral)
+			continue;
+
+		/* Deal with line continuation. */
+		if (!line_skip) vStringClear(continuation);
+		vStringCatS(continuation, line);
+		vStringStripTrailing(continuation);
+		if (vStringLast(continuation) == '\\')
+		{
+			vStringChop(continuation);
+			vStringCatS(continuation, " ");
+			line_skip = 1;
+			continue;
+		}
+		cp = line = vStringValue(continuation);
+		cp = skipSpace (cp);
+		indent = cp - line;
+		line_skip = 0;
+
+		checkParent(nesting_levels, indent, parent);
+
+		/* Deal with multiline string ending. */
+		if (longStringLiteral)
+		{
+			find_triple_end(cp, &longStringLiteral);
+			continue;
+		}
+
+		/* Deal with multiline string start. */
+		longstring = find_triple_start(cp, &longStringLiteral);
+		if (longstring)
+		{
+			longstring += 3;
+			find_triple_end(longstring, &longStringLiteral);
+			/* We don't parse for any tags in the rest of the line. */
+			continue;
+		}
+
+		/* Deal with def and class keywords. */
+		keyword = findDefinitionOrClass (cp);
+		if (keyword)
+		{
+			boolean found = FALSE;
+			boolean is_class = FALSE;
+			if (!strncmp (keyword, "def ", 4))
+			{
+				cp = skipSpace (keyword + 3);
+				found = TRUE;
+			}
+			else if (!strncmp (keyword, "class ", 6))
+			{
+				cp = skipSpace (keyword + 5);
+				found = TRUE;
+				is_class = TRUE;
+			}
+			else if (!strncmp (keyword, "cdef ", 5))
+		    {
+		        cp = skipSpace(keyword + 4);
+		        candidate = skipTypeDecl (cp, &is_class);
+		        if (candidate)
+		        {
+		    		found = TRUE;
+		    		cp = candidate;
+		        }
+
+		    }
+    		else if (!strncmp (keyword, "cpdef ", 6))
+		    {
+		        cp = skipSpace(keyword + 5);
+		        candidate = skipTypeDecl (cp, &is_class);
+		        if (candidate)
+		        {
+		    		found = TRUE;
+		    		cp = candidate;
+		        }
+		    }
+
+			if (found)
+			{
+				boolean is_parent_class;
+
+				is_parent_class =
+					constructParentString(nesting_levels, indent, parent);
+
+				if (is_class)
+					parseClass (cp, name, parent, is_parent_class);
+				else
+					parseFunction(cp, name, parent, is_parent_class);
+
+				addNestingLevel(nesting_levels, indent, name, is_class);
+			}
+		}
+		/* Find global and class variables */
+		variable = findVariable(line);
+		if (variable)
+		{
+			const char *start = variable;
+			boolean parent_is_class;
+
+			vStringClear (name);
+			while (isIdentifierCharacter ((int) *start))
+			{
+				vStringPut (name, (int) *start);
+				++start;
+			}
+			vStringTerminate (name);
+
+			parent_is_class = constructParentString(nesting_levels, indent, parent);
+			/* skip variables in methods */
+			if (! parent_is_class && vStringLength(parent) > 0)
+				continue;
+
+			makeVariableTag (name, parent);
+		}
+		/* Find and parse imports */
+		parseImports(line);
+	}
+	/* Clean up all memory we allocated. */
+	vStringDelete (parent);
+	vStringDelete (name);
+	vStringDelete (continuation);
+	nestingLevelsFree (nesting_levels);
+}
+
+extern parserDefinition *PythonParser (void)
+{
+    static const char *const extensions[] = { "py", "pyx", "pxd", "pxi" ,"scons", NULL };
+	parserDefinition *def = parserNew ("Python");
+	def->kinds = PythonKinds;
+	def->kindCount = KIND_COUNT (PythonKinds);
+	def->extensions = extensions;
+	def->parser = findPythonTags;
+	return def;
+}
+
+/* vi:set tabstop=4 shiftwidth=4: */
Index: a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/routines.c
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/routines.c	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new/routines.c	(revision 5)
@@ -0,0 +1,891 @@
+/*
+*   $Id: routines.c 536 2007-06-02 06:09:00Z elliotth $
+*
+*   Copyright (c) 2002-2003, Darren Hiebert
+*
+*   This source code is released for free distribution under the terms of the
+*   GNU General Public License.
+*
+*   This module contains a lose assortment of shared functions.
+*/
+
+/*
+*   INCLUDE FILES
+*/
+#include "general.h"  /* must always come first */
+
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>  /* to declare malloc (), realloc () */
+#endif
+#include <ctype.h>
+#include <string.h>
+#include <stdarg.h>
+#include <errno.h>
+#include <stdio.h>  /* to declare tempnam(), and SEEK_SET (hopefully) */
+
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>  /* to declar O_RDWR, O_CREAT, O_EXCL */
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>  /* to declare mkstemp () */
+#endif
+
+/*  To declare "struct stat" and stat ().
+ */
+#if defined (HAVE_SYS_TYPES_H)
+# include <sys/types.h>
+#else
+# if defined (HAVE_TYPES_H)
+#  include <types.h>
+# endif
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#else
+# ifdef HAVE_STAT_H
+#  include <stat.h>
+# endif
+#endif
+
+#ifdef HAVE_DOS_H
+# include <dos.h>  /* to declare MAXPATH */
+#endif
+#ifdef HAVE_DIRECT_H
+# include <direct.h>  /* to _getcwd */
+#endif
+#ifdef HAVE_DIR_H
+# include <dir.h>  /* to declare findfirst() and findnext() */
+#endif
+#ifdef HAVE_IO_H
+# include <io.h>  /* to declare open() */
+#endif
+#include "debug.h"
+#include "routines.h"
+
+/*
+*   MACROS
+*/
+#ifndef TMPDIR
+# define TMPDIR "/tmp"
+#endif
+
+/*  File type tests.
+ */
+#ifndef S_ISREG
+# if defined (S_IFREG) && ! defined (AMIGA)
+#  define S_ISREG(mode)		((mode) & S_IFREG)
+# else
+#  define S_ISREG(mode)		TRUE  /* assume regular file */
+# endif
+#endif
+
+#ifndef S_ISLNK
+# ifdef S_IFLNK
+#  define S_ISLNK(mode)		(((mode) & S_IFMT) == S_IFLNK)
+# else
+#  define S_ISLNK(mode)		FALSE  /* assume no soft links */
+# endif
+#endif
+
+#ifndef S_ISDIR
+# ifdef S_IFDIR
+#  define S_ISDIR(mode)		(((mode) & S_IFMT) == S_IFDIR)
+# else
+#  define S_ISDIR(mode)		FALSE  /* assume no soft links */
+# endif
+#endif
+
+#ifndef S_IFMT
+# define S_IFMT 0
+#endif
+
+#ifndef S_IXUSR
+# define S_IXUSR 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+
+#ifndef S_IRUSR
+# define S_IRUSR 0400
+#endif
+#ifndef S_IWUSR
+# define S_IWUSR 0200
+#endif
+
+#ifndef S_ISUID
+# define S_ISUID 0
+#endif
+
+/*  Hack for rediculous practice of Microsoft Visual C++.
+ */
+#if defined (WIN32)
+# if defined (_MSC_VER)
+#  define stat    _stat
+#  define getcwd  _getcwd
+#  define currentdrive() (_getdrive() + 'A' - 1)
+#  define PATH_MAX  _MAX_PATH
+# elif defined (__BORLANDC__)
+#  define PATH_MAX  MAXPATH
+#  define currentdrive() (getdisk() + 'A')
+# elif defined (DJGPP)
+#  define currentdrive() (getdisk() + 'A')
+# else
+#  define currentdrive() 'C'
+# endif
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX 256
+#endif
+
+/*
+ *  Miscellaneous macros
+ */
+#define selected(var,feature)	(((int)(var) & (int)(feature)) == (int)feature)
+
+/*
+*   DATA DEFINITIONS
+*/
+#if defined (MSDOS_STYLE_PATH)
+const char *const PathDelimiters = ":/\\";
+#elif defined (VMS)
+const char *const PathDelimiters = ":]>";
+#endif
+
+char *CurrentDirectory;
+
+static const char *ExecutableProgram;
+static const char *ExecutableName;
+
+/*
+*   FUNCTION PROTOTYPES
+*/
+#ifdef NEED_PROTO_STAT
+extern int stat (const char *, struct stat *);
+#endif
+#ifdef NEED_PROTO_LSTAT
+extern int lstat (const char *, struct stat *);
+#endif
+#if defined (MSDOS) || defined (WIN32) || defined (VMS) || defined (__EMX__) || defined (AMIGA)
+# define lstat(fn,buf) stat(fn,buf)
+#endif
+
+/*
+*   FUNCTION DEFINITIONS
+*/
+
+extern void freeRoutineResources (void)
+{
+	if (CurrentDirectory != NULL)
+		eFree (CurrentDirectory);
+}
+
+extern void setExecutableName (const char *const path)
+{
+	ExecutableProgram = path;
+	ExecutableName = baseFilename (path);
+#ifdef VAXC
+{
+	/* remove filetype from executable name */
+	char *p = strrchr (ExecutableName, '.');
+	if (p != NULL)
+		*p = '\0';
+}
+#endif
+}
+
+extern const char *getExecutableName (void)
+{
+	return ExecutableName;
+}
+
+extern const char *getExecutablePath (void)
+{
+	return ExecutableProgram;
+}
+
+extern void error (
+		const errorSelection selection, const char *const format, ...)
+{
+	va_list ap;
+
+	va_start (ap, format);
+	fprintf (errout, "%s: %s", getExecutableName (),
+			selected (selection, WARNING) ? "Warning: " : "");
+	vfprintf (errout, format, ap);
+	if (selected (selection, PERROR))
+#ifdef HAVE_STRERROR
+		fprintf (errout, " : %s", strerror (errno));
+#else
+		perror (" ");
+#endif
+	fputs ("\n", errout);
+	va_end (ap);
+	if (selected (selection, FATAL))
+		exit (1);
+}
+
+/*
+ *  Memory allocation functions
+ */
+
+extern void *eMalloc (const size_t size)
+{
+	void *buffer = malloc (size);
+
+	if (buffer == NULL)
+		error (FATAL, "out of memory");
+
+	return buffer;
+}
+
+extern void *eCalloc (const size_t count, const size_t size)
+{
+	void *buffer = calloc (count, size);
+
+	if (buffer == NULL)
+		error (FATAL, "out of memory");
+
+	return buffer;
+}
+
+extern void *eRealloc (void *const ptr, const size_t size)
+{
+	void *buffer;
+	if (ptr == NULL)
+		buffer = eMalloc (size);
+	else
+	{
+		buffer = realloc (ptr, size);
+		if (buffer == NULL)
+			error (FATAL, "out of memory");
+	}
+	return buffer;
+}
+
+extern void eFree (void *const ptr)
+{
+	Assert (ptr != NULL);
+	free (ptr);
+}
+
+/*
+ *  String manipulation functions
+ */
+
+/*
+ * Compare two strings, ignoring case.
+ * Return 0 for match, < 0 for smaller, > 0 for bigger
+ * Make sure case is folded to uppercase in comparison (like for 'sort -f')
+ * This makes a difference when one of the chars lies between upper and lower
+ * ie. one of the chars [ \ ] ^ _ ` for ascii. (The '_' in particular !)
+ */
+extern int struppercmp (const char *s1, const char *s2)
+{
+	int result;
+	do
+	{
+		result = toupper ((int) *s1) - toupper ((int) *s2);
+	} while (result == 0  &&  *s1++ != '\0'  &&  *s2++ != '\0');
+	return result;
+}
+
+extern int strnuppercmp (const char *s1, const char *s2, size_t n)
+{
+	int result;
+	do
+	{
+		result = toupper ((int) *s1) - toupper ((int) *s2);
+	} while (result == 0  &&  --n > 0  &&  *s1++ != '\0'  &&  *s2++ != '\0');
+	return result;
+}
+
+#ifndef HAVE_STRSTR
+extern char* strstr (const char *str, const char *substr)
+{
+	const size_t length = strlen (substr);
+	const char *match = NULL;
+	const char *p;
+
+	for (p = str  ;  *p != '\0'  &&  match == NULL  ;  ++p)
+		if (strncmp (p, substr, length) == 0)
+			match = p;
+	return (char*) match;
+}
+#endif
+
+extern char* eStrdup (const char* str)
+{
+	char* result = xMalloc (strlen (str) + 1, char);
+	strcpy (result, str);
+	return result;
+}
+
+extern void toLowerString (char* str)
+{
+	while (*str != '\0')
+	{
+		*str = tolower ((int) *str);
+		++str;
+	}
+}
+
+extern void toUpperString (char* str)
+{
+	while (*str != '\0')
+	{
+		*str = toupper ((int) *str);
+		++str;
+	}
+}
+
+/*  Newly allocated string containing lower case conversion of a string.
+ */
+extern char* newLowerString (const char* str)
+{
+	char* const result = xMalloc (strlen (str) + 1, char);
+	int i = 0;
+	do
+		result [i] = tolower ((int) str [i]);
+	while (str [i++] != '\0');
+	return result;
+}
+
+/*  Newly allocated string containing upper case conversion of a string.
+ */
+extern char* newUpperString (const char* str)
+{
+	char* const result = xMalloc (strlen (str) + 1, char);
+	int i = 0;
+	do
+		result [i] = toupper ((int) str [i]);
+	while (str [i++] != '\0');
+	return result;
+}
+
+/*
+ * File system functions
+ */
+
+extern void setCurrentDirectory (void)
+{
+#ifndef AMIGA
+	char* buf;
+#endif
+	if (CurrentDirectory == NULL)
+		CurrentDirectory = xMalloc ((size_t) (PATH_MAX + 1), char);
+#ifdef AMIGA
+	strcpy (CurrentDirectory, ".");
+#else
+	buf = getcwd (CurrentDirectory, PATH_MAX);
+	if (buf == NULL)
+		perror ("");
+#endif
+	if (CurrentDirectory [strlen (CurrentDirectory) - (size_t) 1] !=
+			PATH_SEPARATOR)
+	{
+		sprintf (CurrentDirectory + strlen (CurrentDirectory), "%c",
+				OUTPUT_PATH_SEPARATOR);
+	}
+}
+
+#ifdef AMIGA
+static boolean isAmigaDirectory (const char *const name)
+{
+	boolean result = FALSE;
+	struct FileInfoBlock *const fib = xMalloc (1, struct FileInfoBlock);
+	if (fib != NULL)
+	{
+		const BPTR flock = Lock ((UBYTE *) name, (long) ACCESS_READ);
+
+		if (flock != (BPTR) NULL)
+		{
+			if (Examine (flock, fib))
+				result = ((fib->fib_DirEntryType >= 0) ? TRUE : FALSE);
+			UnLock (flock);
+		}
+		eFree (fib);
+	}
+	return result;
+}
+#endif
+
+/* For caching of stat() calls */
+extern fileStatus *eStat (const char *const fileName)
+{
+	struct stat status;
+	static fileStatus file;
+	if (file.name == NULL  ||  strcmp (fileName, file.name) != 0)
+	{
+		eStatFree (&file);
+		file.name = eStrdup (fileName);
+		if (lstat (file.name, &status) != 0)
+			file.exists = FALSE;
+		else
+		{
+			file.isSymbolicLink = (boolean) S_ISLNK (status.st_mode);
+			if (file.isSymbolicLink  &&  stat (file.name, &status) != 0)
+				file.exists = FALSE;
+			else
+			{
+				file.exists = TRUE;
+#ifdef AMIGA
+				file.isDirectory = isAmigaDirectory (file.name);
+#else
+				file.isDirectory = (boolean) S_ISDIR (status.st_mode);
+#endif
+				file.isNormalFile = (boolean) (S_ISREG (status.st_mode));
+				file.isExecutable = (boolean) ((status.st_mode &
+					(S_IXUSR | S_IXGRP | S_IXOTH)) != 0);
+				file.isSetuid = (boolean) ((status.st_mode & S_ISUID) != 0);
+				file.size = status.st_size;
+			}
+		}
+	}
+	return &file;
+}
+
+extern void eStatFree (fileStatus *status)
+{
+	if (status->name != NULL)
+	{
+		eFree (status->name);
+		status->name = NULL;
+	}
+}
+
+extern boolean doesFileExist (const char *const fileName)
+{
+	fileStatus *status = eStat (fileName);
+	return status->exists;
+}
+
+extern boolean isRecursiveLink (const char* const dirName)
+{
+	boolean result = FALSE;
+	fileStatus *status = eStat (dirName);
+	if (status->isSymbolicLink)
+	{
+		char* const path = absoluteFilename (dirName);
+		while (path [strlen (path) - 1] == PATH_SEPARATOR)
+			path [strlen (path) - 1] = '\0';
+		while (! result  &&  strlen (path) > (size_t) 1)
+		{
+			char *const separator = strrchr (path, PATH_SEPARATOR);
+			if (separator == NULL)
+				break;
+			else if (separator == path)  /* backed up to root directory */
+				*(separator + 1) = '\0';
+			else
+				*separator = '\0';
+			result = isSameFile (path, dirName);
+		}
+		eFree (path);
+	}
+	return result;
+}
+
+#ifndef HAVE_FGETPOS
+
+extern int fgetpos (FILE *stream, fpos_t *pos)
+{
+	int result = 0;
+
+	*pos = ftell (stream);
+	if (*pos == -1L)
+		result = -1;
+
+	return result;
+}
+
+extern int fsetpos (FILE *stream, fpos_t const *pos)
+{
+	return fseek (stream, *pos, SEEK_SET);
+}
+
+#endif
+
+/*
+ *  Pathname manipulation (O/S dependent!!!)
+ */
+
+static boolean isPathSeparator (const int c)
+{
+	boolean result;
+#if defined (MSDOS_STYLE_PATH) || defined (VMS)
+	result = (boolean) (strchr (PathDelimiters, c) != NULL);
+#else
+	result = (boolean) (c == PATH_SEPARATOR);
+#endif
+	return result;
+}
+
+#if ! defined (HAVE_STAT_ST_INO)
+
+static void canonicalizePath (char *const path)
+{
+#if defined (MSDOS_STYLE_PATH)
+	char *p;
+	for (p = path  ;  *p != '\0'  ;  ++p)
+		if (isPathSeparator (*p)  &&  *p != ':')
+			*p = PATH_SEPARATOR;
+#endif
+}
+
+#endif
+
+extern boolean isSameFile (const char *const name1, const char *const name2)
+{
+	boolean result = FALSE;
+#if defined (HAVE_STAT_ST_INO)
+	struct stat stat1, stat2;
+
+	if (stat (name1, &stat1) == 0  &&  stat (name2, &stat2) == 0)
+		result = (boolean) (stat1.st_ino == stat2.st_ino);
+#else
+	{
+		char *const n1 = absoluteFilename (name1);
+		char *const n2 = absoluteFilename (name2);
+		canonicalizePath (n1);
+		canonicalizePath (n2);
+# if defined (CASE_INSENSITIVE_FILENAMES)
+		result = (boolean) (strcasecmp (n1, n2) == 0);
+#else
+		result = (boolean) (strcmp (n1, n2) == 0);
+#endif
+		free (n1);
+		free (n2);
+	}
+#endif
+	return result;
+}
+
+extern const char *baseFilename (const char *const filePath)
+{
+#if defined (MSDOS_STYLE_PATH) || defined (VMS)
+	const char *tail = NULL;
+	unsigned int i;
+
+	/*  Find whichever of the path delimiters is last.
+	 */
+	for (i = 0  ;  i < strlen (PathDelimiters)  ;  ++i)
+	{
+		const char *sep = strrchr (filePath, PathDelimiters [i]);
+
+		if (sep > tail)
+			tail = sep;
+	}
+#else
+	const char *tail = strrchr (filePath, PATH_SEPARATOR);
+#endif
+	if (tail == NULL)
+		tail = filePath;
+	else
+		++tail;  /* step past last delimiter */
+#ifdef VAXC
+	{
+		/* remove version number from filename */
+		char *p = strrchr ((char *) tail, ';');
+		if (p != NULL)
+			*p = '\0';
+	}
+#endif
+
+	return tail;
+}
+
+extern const char *fileExtension (const char *const fileName)
+{
+	const char *extension;
+	const char *pDelimiter = NULL;
+	const char *const base = baseFilename (fileName);
+#ifdef QDOS
+	pDelimiter = strrchr (base, '_');
+#endif
+	if (pDelimiter == NULL)
+	    pDelimiter = strrchr (base, '.');
+
+	if (pDelimiter == NULL)
+		extension = "";
+	else
+		extension = pDelimiter + 1;  /* skip to first char of extension */
+
+	return extension;
+}
+
+extern boolean isAbsolutePath (const char *const path)
+{
+	boolean result = FALSE;
+#if defined (MSDOS_STYLE_PATH)
+	if (isPathSeparator (path [0]))
+		result = TRUE;
+	else if (isalpha (path [0])  &&  path [1] == ':')
+	{
+		if (isPathSeparator (path [2]))
+			result = TRUE;
+		else
+			/*  We don't support non-absolute file names with a drive
+			 *  letter, like `d:NAME' (it's too much hassle).
+			 */
+			error (FATAL,
+				"%s: relative file names with drive letters not supported",
+				path);
+	}
+#elif defined (VMS)
+	result = (boolean) (strchr (path, ':') != NULL);
+#else
+	result = isPathSeparator (path [0]);
+#endif
+	return result;
+}
+
+extern vString *combinePathAndFile (
+	const char *const path, const char *const file)
+{
+	vString *const filePath = vStringNew ();
+#ifdef VMS
+	const char *const directoryId = strstr (file, ".DIR;1");
+
+	if (directoryId == NULL)
+	{
+		const char *const versionId = strchr (file, ';');
+
+		vStringCopyS (filePath, path);
+		if (versionId == NULL)
+			vStringCatS (filePath, file);
+		else
+			vStringNCatS (filePath, file, versionId - file);
+		vStringCopyToLower (filePath, filePath);
+	}
+	else
+	{
+		/*  File really is a directory; append it to the path.
+		 *  Gotcha: doesn't work with logical names.
+		 */
+		vStringNCopyS (filePath, path, strlen (path) - 1);
+		vStringPut (filePath, '.');
+		vStringNCatS (filePath, file, directoryId - file);
+		if (strchr (path, '[') != NULL)
+			vStringPut (filePath, ']');
+		else
+			vStringPut (filePath, '>');
+		vStringTerminate (filePath);
+	}
+#else
+	const int lastChar = path [strlen (path) - 1];
+	boolean terminated = isPathSeparator (lastChar);
+
+	vStringCopyS (filePath, path);
+	if (! terminated)
+	{
+		vStringPut (filePath, OUTPUT_PATH_SEPARATOR);
+		vStringTerminate (filePath);
+	}
+	vStringCatS (filePath, file);
+#endif
+
+	return filePath;
+}
+
+/* Return a newly-allocated string whose contents concatenate those of
+ * s1, s2, s3.
+ * Routine adapted from Gnu etags.
+ */
+static char* concat (const char *s1, const char *s2, const char *s3)
+{
+  int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
+  char *result = xMalloc (len1 + len2 + len3 + 1, char);
+
+  strcpy (result, s1);
+  strcpy (result + len1, s2);
+  strcpy (result + len1 + len2, s3);
+  result [len1 + len2 + len3] = '\0';
+
+  return result;
+}
+
+/* Return a newly allocated string containing the absolute file name of FILE
+ * given CWD (which should end with a slash).
+ * Routine adapted from Gnu etags.
+ */
+extern char* absoluteFilename (const char *file)
+{
+	char *slashp, *cp;
+	char *res = NULL;
+	if (isAbsolutePath (file))
+	{
+#ifdef MSDOS_STYLE_PATH
+		if (file [1] == ':')
+			res = eStrdup (file);
+		else
+		{
+			char drive [3];
+			sprintf (drive, "%c:", currentdrive ());
+			res = concat (drive, file, "");
+		}
+#else
+		res = eStrdup (file);
+#endif
+	}
+	else
+		res = concat (CurrentDirectory, file, "");
+
+	/* Delete the "/dirname/.." and "/." substrings. */
+	slashp = strchr (res, PATH_SEPARATOR);
+	while (slashp != NULL  &&  slashp [0] != '\0')
+	{
+		if (slashp[1] == '.')
+		{
+			if (slashp [2] == '.' &&
+				(slashp [3] == PATH_SEPARATOR || slashp [3] == '\0'))
+			{
+				cp = slashp;
+				do
+					cp--;
+				while (cp >= res  &&  ! isAbsolutePath (cp));
+				if (cp < res)
+					cp = slashp;/* the absolute name begins with "/.." */
+#ifdef MSDOS_STYLE_PATH
+				/* Under MSDOS and NT we get `d:/NAME' as absolute file name,
+				 * so the luser could say `d:/../NAME'. We silently treat this
+				 * as `d:/NAME'.
+				 */
+				else if (cp [0] != PATH_SEPARATOR)
+					cp = slashp;
+#endif
+				strcpy (cp, slashp + 3);
+				slashp = cp;
+				continue;
+			}
+			else if (slashp [2] == PATH_SEPARATOR  ||  slashp [2] == '\0')
+			{
+				strcpy (slashp, slashp + 2);
+				continue;
+			}
+		}
+		slashp = strchr (slashp + 1, PATH_SEPARATOR);
+	}
+
+	if (res [0] == '\0')
+		return eStrdup ("/");
+	else
+	{
+#ifdef MSDOS_STYLE_PATH
+		/* Canonicalize drive letter case. */
+		if (res [1] == ':'  &&  islower (res [0]))
+			res [0] = toupper (res [0]);
+#endif
+
+		return res;
+	}
+}
+
+/* Return a newly allocated string containing the absolute file name of dir
+ * where `file' resides given `CurrentDirectory'.
+ * Routine adapted from Gnu etags.
+ */
+extern char* absoluteDirname (char *file)
+{
+	char *slashp, *res;
+	char save;
+	slashp = strrchr (file, PATH_SEPARATOR);
+	if (slashp == NULL)
+		res = eStrdup (CurrentDirectory);
+	else
+	{
+		save = slashp [1];
+		slashp [1] = '\0';
+		res = absoluteFilename (file);
+		slashp [1] = save;
+	}
+	return res;
+}
+
+/* Return a newly allocated string containing the file name of FILE relative
+ * to the absolute directory DIR (which should end with a slash).
+ * Routine adapted from Gnu etags.
+ */
+extern char* relativeFilename (const char *file, const char *dir)
+{
+	const char *fp, *dp;
+	char *absdir, *res;
+	int i;
+
+	/* Find the common root of file and dir (with a trailing slash). */
+	absdir = absoluteFilename (file);
+	fp = absdir;
+	dp = dir;
+	while (*fp++ == *dp++)
+		continue;
+	fp--;
+	dp--;  /* back to the first differing char */
+	do
+	{  /* look at the equal chars until path sep */
+		if (fp == absdir)
+			return absdir;  /* first char differs, give up */
+		fp--;
+		dp--;
+	} while (*fp != PATH_SEPARATOR);
+
+	/* Build a sequence of "../" strings for the resulting relative file name.
+	 */
+	i = 0;
+	while ((dp = strchr (dp + 1, PATH_SEPARATOR)) != NULL)
+		i += 1;
+	res = xMalloc (3 * i + strlen (fp + 1) + 1, char);
+	res [0] = '\0';
+	while (i-- > 0)
+		strcat (res, "../");
+
+	/* Add the file name relative to the common root of file and dir. */
+	strcat (res, fp + 1);
+	free (absdir);
+
+	return res;
+}
+
+extern FILE *tempFile (const char *const mode, char **const pName)
+{
+	char *name;
+	FILE *fp;
+	int fd;
+#if defined(HAVE_MKSTEMP)
+	const char *const pattern = "tags.XXXXXX";
+	const char *tmpdir = NULL;
+	fileStatus *file = eStat (ExecutableProgram);
+	if (! file->isSetuid)
+		tmpdir = getenv ("TMPDIR");
+	if (tmpdir == NULL)
+		tmpdir = TMPDIR;
+	name = xMalloc (strlen (tmpdir) + 1 + strlen (pattern) + 1, char);
+	sprintf (name, "%s%c%s", tmpdir, OUTPUT_PATH_SEPARATOR, pattern);
+	fd = mkstemp (name);
+	eStatFree (file);
+#elif defined(HAVE_TEMPNAM)
+	name = tempnam (TMPDIR, "tags");
+	if (name == NULL)
+		error (FATAL | PERROR, "cannot allocate temporary file name");
+	fd = open (name, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+#else
+	name = xMalloc (L_tmpnam, char);
+	if (tmpnam (name) != name)
+		error (FATAL | PERROR, "cannot assign temporary file name");
+	fd = open (name, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+#endif
+	if (fd == -1)
+		error (FATAL | PERROR, "cannot open temporary file");
+	fp = fdopen (fd, mode);
+	if (fp == NULL)
+		error (FATAL | PERROR, "cannot open temporary file");
+	DebugStatement (
+		debugPrintf (DEBUG_STATUS, "opened temporary file %s\n", name); )
+	Assert (*pName == NULL);
+	*pName = name;
+	return fp;
+}
+
+/* vi:set tabstop=4 shiftwidth=4: */
Index: a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new	(revision 5)

Property changes on: a/ctags/create-5.8-unused-attribute-patch/ctags-5.8-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/ctags/create-5.8-unused-attribute-patch/file.list
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch/file.list	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch/file.list	(revision 5)
@@ -0,0 +1,10 @@
+ctags-5.8/c.c
+ctags-5.8/eiffel.c
+ctags-5.8/general.h
+ctags-5.8/lregex.c
+ctags-5.8/lua.c
+ctags-5.8/main.c
+ctags-5.8/options.c
+ctags-5.8/parse.c
+ctags-5.8/python.c
+ctags-5.8/routines.c
Index: a/ctags/create-5.8-unused-attribute-patch
===================================================================
--- a/ctags/create-5.8-unused-attribute-patch	(nonexistent)
+++ a/ctags/create-5.8-unused-attribute-patch	(revision 5)

Property changes on: a/ctags/create-5.8-unused-attribute-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/ctags/patches/README
===================================================================
--- a/ctags/patches/README	(nonexistent)
+++ a/ctags/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/ctags/patches
===================================================================
--- a/ctags/patches	(nonexistent)
+++ a/ctags/patches	(revision 5)

Property changes on: a/ctags/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/ctags
===================================================================
--- a/ctags	(nonexistent)
+++ a/ctags	(revision 5)

Property changes on: a/ctags
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/cups/Makefile
===================================================================
--- a/cups/Makefile	(nonexistent)
+++ a/cups/Makefile	(revision 5)
@@ -0,0 +1,60 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/cups
+
+versions    = 2.4.2
+pkgname     = cups
+suffix      = tar.xz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/cups-2.4.2-freebind.patch
+patches    += $(CURDIR)/patches/cups-2.4.2-statedir.patch
+patches    += $(CURDIR)/patches/cups-2.4.2-tls-openssl.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-2.4.2-freebind-patch    ; ./create.patch.sh ) ; \
+	 ( cd create-2.4.2-statedir-patch    ; ./create.patch.sh ) ; \
+	 ( cd create-2.4.2-tls-openssl-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/cups/create-2.4.2-freebind-patch/create.patch.sh
===================================================================
--- a/cups/create-2.4.2-freebind-patch/create.patch.sh	(nonexistent)
+++ a/cups/create-2.4.2-freebind-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=2.4.2
+
+tar --files-from=file.list -xJvf ../cups-$VERSION.tar.xz
+mv cups-$VERSION cups-$VERSION-orig
+
+cp -rf ./cups-$VERSION-new ./cups-$VERSION
+
+diff --unified -Nr  cups-$VERSION-orig  cups-$VERSION > cups-$VERSION-freebind.patch
+
+mv cups-$VERSION-freebind.patch ../patches
+
+rm -rf ./cups-$VERSION
+rm -rf ./cups-$VERSION-orig

Property changes on: a/cups/create-2.4.2-freebind-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/cups/create-2.4.2-freebind-patch/cups-2.4.2-new/cups/http-addr.c
===================================================================
--- a/cups/create-2.4.2-freebind-patch/cups-2.4.2-new/cups/http-addr.c	(nonexistent)
+++ a/cups/create-2.4.2-freebind-patch/cups-2.4.2-new/cups/http-addr.c	(revision 5)
@@ -0,0 +1,944 @@
+/*
+ * HTTP address routines for CUPS.
+ *
+ * Copyright © 2007-2021 by Apple Inc.
+ * Copyright © 1997-2006 by Easy Software Products, all rights reserved.
+ *
+ * Licensed under Apache License v2.0.  See the file "LICENSE" for more
+ * information.
+ */
+
+/*
+ * Include necessary headers...
+ */
+
+#include "cups-private.h"
+#include "debug-internal.h"
+#include <sys/stat.h>
+#ifdef HAVE_RESOLV_H
+#  include <resolv.h>
+#endif /* HAVE_RESOLV_H */
+#ifdef __APPLE__
+#  include <CoreFoundation/CoreFoundation.h>
+#  ifdef HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME
+#    include <SystemConfiguration/SystemConfiguration.h>
+#  endif /* HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME */
+#endif /* __APPLE__ */
+
+
+/*
+ * 'httpAddrAny()' - Check for the "any" address.
+ *
+ * @since CUPS 1.2/macOS 10.5@
+ */
+
+int					/* O - 1 if "any", 0 otherwise */
+httpAddrAny(const http_addr_t *addr)	/* I - Address to check */
+{
+  if (!addr)
+    return (0);
+
+#ifdef AF_INET6
+  if (addr->addr.sa_family == AF_INET6 &&
+      IN6_IS_ADDR_UNSPECIFIED(&(addr->ipv6.sin6_addr)))
+    return (1);
+#endif /* AF_INET6 */
+
+  if (addr->addr.sa_family == AF_INET &&
+      ntohl(addr->ipv4.sin_addr.s_addr) == 0x00000000)
+    return (1);
+
+  return (0);
+}
+
+
+/*
+ * 'httpAddrClose()' - Close a socket created by @link httpAddrConnect@ or
+ *                     @link httpAddrListen@.
+ *
+ * Pass @code NULL@ for sockets created with @link httpAddrConnect2@ and the
+ * listen address for sockets created with @link httpAddrListen@.  This function
+ * ensures that domain sockets are removed when closed.
+ *
+ * @since CUPS 2.0/OS 10.10@
+ */
+
+int						/* O - 0 on success, -1 on failure */
+httpAddrClose(http_addr_t *addr,		/* I - Listen address or @code NULL@ */
+              int         fd)			/* I - Socket file descriptor */
+{
+#ifdef _WIN32
+  if (closesocket(fd))
+#else
+  if (close(fd))
+#endif /* _WIN32 */
+    return (-1);
+
+#ifdef AF_LOCAL
+  if (addr && addr->addr.sa_family == AF_LOCAL)
+    return (unlink(addr->un.sun_path));
+#endif /* AF_LOCAL */
+
+  return (0);
+}
+
+
+/*
+ * 'httpAddrEqual()' - Compare two addresses.
+ *
+ * @since CUPS 1.2/macOS 10.5@
+ */
+
+int						/* O - 1 if equal, 0 if not */
+httpAddrEqual(const http_addr_t *addr1,		/* I - First address */
+              const http_addr_t *addr2)		/* I - Second address */
+{
+  if (!addr1 && !addr2)
+    return (1);
+
+  if (!addr1 || !addr2)
+    return (0);
+
+  if (addr1->addr.sa_family != addr2->addr.sa_family)
+    return (0);
+
+#ifdef AF_LOCAL
+  if (addr1->addr.sa_family == AF_LOCAL)
+    return (!strcmp(addr1->un.sun_path, addr2->un.sun_path));
+#endif /* AF_LOCAL */
+
+#ifdef AF_INET6
+  if (addr1->addr.sa_family == AF_INET6)
+    return (!memcmp(&(addr1->ipv6.sin6_addr), &(addr2->ipv6.sin6_addr), 16));
+#endif /* AF_INET6 */
+
+  return (addr1->ipv4.sin_addr.s_addr == addr2->ipv4.sin_addr.s_addr);
+}
+
+
+/*
+ * 'httpAddrLength()' - Return the length of the address in bytes.
+ *
+ * @since CUPS 1.2/macOS 10.5@
+ */
+
+int					/* O - Length in bytes */
+httpAddrLength(const http_addr_t *addr)	/* I - Address */
+{
+  if (!addr)
+    return (0);
+
+#ifdef AF_INET6
+  if (addr->addr.sa_family == AF_INET6)
+    return (sizeof(addr->ipv6));
+  else
+#endif /* AF_INET6 */
+#ifdef AF_LOCAL
+  if (addr->addr.sa_family == AF_LOCAL)
+    return ((int)(offsetof(struct sockaddr_un, sun_path) + strlen(addr->un.sun_path) + 1));
+  else
+#endif /* AF_LOCAL */
+  if (addr->addr.sa_family == AF_INET)
+    return (sizeof(addr->ipv4));
+  else
+    return (0);
+
+}
+
+
+/*
+ * 'httpAddrListen()' - Create a listening socket bound to the specified
+ *                      address and port.
+ *
+ * @since CUPS 1.7/macOS 10.9@
+ */
+
+int					/* O - Socket or -1 on error */
+httpAddrListen(http_addr_t *addr,	/* I - Address to bind to */
+               int         port)	/* I - Port number to bind to */
+{
+  int		fd = -1,		/* Socket */
+		val,			/* Socket value */
+                status;			/* Bind status */
+
+
+ /*
+  * Range check input...
+  */
+
+  if (!addr || port < 0)
+    return (-1);
+
+ /*
+  * Make sure the network stack is initialized...
+  */
+
+  httpInitialize();
+
+ /*
+  * Create the socket and set options...
+  */
+
+  if ((fd = socket(addr->addr.sa_family, SOCK_STREAM, 0)) < 0)
+  {
+    _cupsSetHTTPError(HTTP_STATUS_ERROR);
+    return (-1);
+  }
+
+  val = 1;
+  setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, CUPS_SOCAST &val, sizeof(val));
+
+#ifdef __linux
+  setsockopt(fd, IPPROTO_IP, IP_FREEBIND, CUPS_SOCAST &val, sizeof(val));
+#endif /* __linux */
+
+#ifdef IPV6_V6ONLY
+  if (addr->addr.sa_family == AF_INET6)
+    setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, CUPS_SOCAST &val, sizeof(val));
+#endif /* IPV6_V6ONLY */
+
+ /*
+  * Bind the socket...
+  */
+
+#ifdef AF_LOCAL
+  if (addr->addr.sa_family == AF_LOCAL)
+  {
+    mode_t	mask;			/* Umask setting */
+
+   /*
+    * Remove any existing domain socket file...
+    */
+
+    unlink(addr->un.sun_path);
+
+   /*
+    * Save the current umask and set it to 0 so that all users can access
+    * the domain socket...
+    */
+
+    mask = umask(0);
+
+   /*
+    * Bind the domain socket...
+    */
+
+    status = bind(fd, (struct sockaddr *)addr, (socklen_t)httpAddrLength(addr));
+
+   /*
+    * Restore the umask and fix permissions...
+    */
+
+    umask(mask);
+    chmod(addr->un.sun_path, 0140777);
+  }
+  else
+#endif /* AF_LOCAL */
+  {
+    _httpAddrSetPort(addr, port);
+
+    status = bind(fd, (struct sockaddr *)addr, (socklen_t)httpAddrLength(addr));
+  }
+
+  if (status)
+  {
+    _cupsSetHTTPError(HTTP_STATUS_ERROR);
+
+    close(fd);
+
+    return (-1);
+  }
+
+ /*
+  * Listen...
+  */
+
+  if (listen(fd, 128))
+  {
+    _cupsSetHTTPError(HTTP_STATUS_ERROR);
+
+    close(fd);
+
+    return (-1);
+  }
+
+ /*
+  * Close on exec...
+  */
+
+#ifndef _WIN32
+  fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
+#endif /* !_WIN32 */
+
+#ifdef SO_NOSIGPIPE
+ /*
+  * Disable SIGPIPE for this socket.
+  */
+
+  val = 1;
+  setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, CUPS_SOCAST &val, sizeof(val));
+#endif /* SO_NOSIGPIPE */
+
+  return (fd);
+}
+
+
+/*
+ * 'httpAddrLocalhost()' - Check for the local loopback address.
+ *
+ * @since CUPS 1.2/macOS 10.5@
+ */
+
+int					/* O - 1 if local host, 0 otherwise */
+httpAddrLocalhost(
+    const http_addr_t *addr)		/* I - Address to check */
+{
+  if (!addr)
+    return (1);
+
+#ifdef AF_INET6
+  if (addr->addr.sa_family == AF_INET6 &&
+      IN6_IS_ADDR_LOOPBACK(&(addr->ipv6.sin6_addr)))
+    return (1);
+#endif /* AF_INET6 */
+
+#ifdef AF_LOCAL
+  if (addr->addr.sa_family == AF_LOCAL)
+    return (1);
+#endif /* AF_LOCAL */
+
+  if (addr->addr.sa_family == AF_INET &&
+      (ntohl(addr->ipv4.sin_addr.s_addr) & 0xff000000) == 0x7f000000)
+    return (1);
+
+  return (0);
+}
+
+
+/*
+ * 'httpAddrLookup()' - Lookup the hostname associated with the address.
+ *
+ * @since CUPS 1.2/macOS 10.5@
+ */
+
+char *					/* O - Host name */
+httpAddrLookup(
+    const http_addr_t *addr,		/* I - Address to lookup */
+    char              *name,		/* I - Host name buffer */
+    int               namelen)		/* I - Size of name buffer */
+{
+  _cups_globals_t	*cg = _cupsGlobals();
+					/* Global data */
+
+
+  DEBUG_printf(("httpAddrLookup(addr=%p, name=%p, namelen=%d)", (void *)addr, (void *)name, namelen));
+
+ /*
+  * Range check input...
+  */
+
+  if (!addr || !name || namelen <= 2)
+  {
+    if (name && namelen >= 1)
+      *name = '\0';
+
+    return (NULL);
+  }
+
+#ifdef AF_LOCAL
+  if (addr->addr.sa_family == AF_LOCAL)
+  {
+    strlcpy(name, addr->un.sun_path, (size_t)namelen);
+    return (name);
+  }
+#endif /* AF_LOCAL */
+
+ /*
+  * Optimize lookups for localhost/loopback addresses...
+  */
+
+  if (httpAddrLocalhost(addr))
+  {
+    strlcpy(name, "localhost", (size_t)namelen);
+    return (name);
+  }
+
+#ifdef HAVE_RES_INIT
+ /*
+  * STR #2920: Initialize resolver after failure in cups-polld
+  *
+  * If the previous lookup failed, re-initialize the resolver to prevent
+  * temporary network errors from persisting.  This *should* be handled by
+  * the resolver libraries, but apparently the glibc folks do not agree.
+  *
+  * We set a flag at the end of this function if we encounter an error that
+  * requires reinitialization of the resolver functions.  We then call
+  * res_init() if the flag is set on the next call here or in httpAddrLookup().
+  */
+
+  if (cg->need_res_init)
+  {
+    res_init();
+
+    cg->need_res_init = 0;
+  }
+#endif /* HAVE_RES_INIT */
+
+#ifdef HAVE_GETNAMEINFO
+  {
+   /*
+    * STR #2486: httpAddrLookup() fails when getnameinfo() returns EAI_AGAIN
+    *
+    * FWIW, I think this is really a bug in the implementation of
+    * getnameinfo(), but falling back on httpAddrString() is easy to
+    * do...
+    */
+
+    int error = getnameinfo(&addr->addr, (socklen_t)httpAddrLength(addr), name, (socklen_t)namelen, NULL, 0, 0);
+
+    if (error)
+    {
+      if (error == EAI_FAIL)
+        cg->need_res_init = 1;
+
+      return (httpAddrString(addr, name, namelen));
+    }
+  }
+#else
+  {
+    struct hostent	*host;			/* Host from name service */
+
+
+#  ifdef AF_INET6
+    if (addr->addr.sa_family == AF_INET6)
+      host = gethostbyaddr((char *)&(addr->ipv6.sin6_addr),
+                	   sizeof(struct in_addr), AF_INET6);
+    else
+#  endif /* AF_INET6 */
+    host = gethostbyaddr((char *)&(addr->ipv4.sin_addr),
+                	 sizeof(struct in_addr), AF_INET);
+
+    if (host == NULL)
+    {
+     /*
+      * No hostname, so return the raw address...
+      */
+
+      if (h_errno == NO_RECOVERY)
+        cg->need_res_init = 1;
+
+      return (httpAddrString(addr, name, namelen));
+    }
+
+    strlcpy(name, host->h_name, (size_t)namelen);
+  }
+#endif /* HAVE_GETNAMEINFO */
+
+  DEBUG_printf(("1httpAddrLookup: returning \"%s\"...", name));
+
+  return (name);
+}
+
+
+/*
+ * 'httpAddrFamily()' - Get the address family of an address.
+ */
+
+int					/* O - Address family */
+httpAddrFamily(http_addr_t *addr)	/* I - Address */
+{
+  if (addr)
+    return (addr->addr.sa_family);
+  else
+    return (0);
+}
+
+
+/*
+ * 'httpAddrPort()' - Get the port number associated with an address.
+ *
+ * @since CUPS 1.7/macOS 10.9@
+ */
+
+int					/* O - Port number */
+httpAddrPort(http_addr_t *addr)		/* I - Address */
+{
+  if (!addr)
+    return (-1);
+#ifdef AF_INET6
+  else if (addr->addr.sa_family == AF_INET6)
+    return (ntohs(addr->ipv6.sin6_port));
+#endif /* AF_INET6 */
+  else if (addr->addr.sa_family == AF_INET)
+    return (ntohs(addr->ipv4.sin_port));
+  else
+    return (0);
+}
+
+
+/*
+ * '_httpAddrSetPort()' - Set the port number associated with an address.
+ */
+
+void
+_httpAddrSetPort(http_addr_t *addr,	/* I - Address */
+                 int         port)	/* I - Port */
+{
+  if (!addr || port <= 0)
+    return;
+
+#ifdef AF_INET6
+  if (addr->addr.sa_family == AF_INET6)
+    addr->ipv6.sin6_port = htons(port);
+  else
+#endif /* AF_INET6 */
+  if (addr->addr.sa_family == AF_INET)
+    addr->ipv4.sin_port = htons(port);
+}
+
+
+/*
+ * 'httpAddrString()' - Convert an address to a numeric string.
+ *
+ * @since CUPS 1.2/macOS 10.5@
+ */
+
+char *					/* O - Numeric address string */
+httpAddrString(const http_addr_t *addr,	/* I - Address to convert */
+               char              *s,	/* I - String buffer */
+	       int               slen)	/* I - Length of string */
+{
+  DEBUG_printf(("httpAddrString(addr=%p, s=%p, slen=%d)", (void *)addr, (void *)s, slen));
+
+ /*
+  * Range check input...
+  */
+
+  if (!addr || !s || slen <= 2)
+  {
+    if (s && slen >= 1)
+      *s = '\0';
+
+    return (NULL);
+  }
+
+#ifdef AF_LOCAL
+  if (addr->addr.sa_family == AF_LOCAL)
+  {
+    if (addr->un.sun_path[0] == '/')
+      strlcpy(s, addr->un.sun_path, (size_t)slen);
+    else
+      strlcpy(s, "localhost", (size_t)slen);
+  }
+  else
+#endif /* AF_LOCAL */
+  if (addr->addr.sa_family == AF_INET)
+  {
+    unsigned temp;			/* Temporary address */
+
+    temp = ntohl(addr->ipv4.sin_addr.s_addr);
+
+    snprintf(s, (size_t)slen, "%d.%d.%d.%d", (temp >> 24) & 255,
+             (temp >> 16) & 255, (temp >> 8) & 255, temp & 255);
+  }
+#ifdef AF_INET6
+  else if (addr->addr.sa_family == AF_INET6)
+  {
+    char	*sptr,			/* Pointer into string */
+		temps[64];		/* Temporary string for address */
+
+#  ifdef HAVE_GETNAMEINFO
+    if (getnameinfo(&addr->addr, (socklen_t)httpAddrLength(addr), temps, sizeof(temps), NULL, 0, NI_NUMERICHOST))
+    {
+     /*
+      * If we get an error back, then the address type is not supported
+      * and we should zero out the buffer...
+      */
+
+      s[0] = '\0';
+
+      return (NULL);
+    }
+    else if ((sptr = strchr(temps, '%')) != NULL)
+    {
+     /*
+      * Convert "%zone" to "+zone" to match URI form...
+      */
+
+      *sptr = '+';
+    }
+
+#  else
+    int		i;			/* Looping var */
+    unsigned	temp;			/* Current value */
+    const char	*prefix;		/* Prefix for address */
+
+
+    prefix = "";
+    for (sptr = temps, i = 0; i < 4 && addr->ipv6.sin6_addr.s6_addr32[i]; i ++)
+    {
+      temp = ntohl(addr->ipv6.sin6_addr.s6_addr32[i]);
+
+      snprintf(sptr, sizeof(temps) - (size_t)(sptr - temps), "%s%x", prefix, (temp >> 16) & 0xffff);
+      prefix = ":";
+      sptr += strlen(sptr);
+
+      temp &= 0xffff;
+
+      if (temp || i == 3 || addr->ipv6.sin6_addr.s6_addr32[i + 1])
+      {
+        snprintf(sptr, sizeof(temps) - (size_t)(sptr - temps), "%s%x", prefix, temp);
+	sptr += strlen(sptr);
+      }
+    }
+
+    if (i < 4)
+    {
+      while (i < 4 && !addr->ipv6.sin6_addr.s6_addr32[i])
+	i ++;
+
+      if (i < 4)
+      {
+        snprintf(sptr, sizeof(temps) - (size_t)(sptr - temps), "%s:", prefix);
+	prefix = ":";
+	sptr += strlen(sptr);
+
+	for (; i < 4; i ++)
+	{
+          temp = ntohl(addr->ipv6.sin6_addr.s6_addr32[i]);
+
+          if ((temp & 0xffff0000) ||
+	      (i > 0 && addr->ipv6.sin6_addr.s6_addr32[i - 1]))
+	  {
+            snprintf(sptr, sizeof(temps) - (size_t)(sptr - temps), "%s%x", prefix, (temp >> 16) & 0xffff);
+	    sptr += strlen(sptr);
+          }
+
+          snprintf(sptr, sizeof(temps) - (size_t)(sptr - temps), "%s%x", prefix, temp & 0xffff);
+	  sptr += strlen(sptr);
+	}
+      }
+      else if (sptr == s)
+      {
+       /*
+        * Empty address...
+	*/
+
+        strlcpy(temps, "::", sizeof(temps));
+      }
+      else
+      {
+       /*
+	* Empty at end...
+	*/
+
+        strlcpy(sptr, "::", sizeof(temps) - (size_t)(sptr - temps));
+      }
+    }
+#  endif /* HAVE_GETNAMEINFO */
+
+   /*
+    * Add "[v1." and "]" around IPv6 address to convert to URI form.
+    */
+
+    snprintf(s, (size_t)slen, "[v1.%s]", temps);
+  }
+#endif /* AF_INET6 */
+  else
+    strlcpy(s, "UNKNOWN", (size_t)slen);
+
+  DEBUG_printf(("1httpAddrString: returning \"%s\"...", s));
+
+  return (s);
+}
+
+
+/*
+ * 'httpGetAddress()' - Get the address of the connected peer of a connection.
+ *
+ * For connections created with @link httpConnect2@, the address is for the
+ * server.  For connections created with @link httpAccept@, the address is for
+ * the client.
+ *
+ * Returns @code NULL@ if the socket is currently unconnected.
+ *
+ * @since CUPS 2.0/OS 10.10@
+ */
+
+http_addr_t *				/* O - Connected address or @code NULL@ */
+httpGetAddress(http_t *http)		/* I - HTTP connection */
+{
+  if (http)
+    return (http->hostaddr);
+  else
+    return (NULL);
+}
+
+
+/*
+ * 'httpGetHostByName()' - Lookup a hostname or IPv4 address, and return
+ *                         address records for the specified name.
+ *
+ * @deprecated@ @exclude all@
+ */
+
+struct hostent *			/* O - Host entry */
+httpGetHostByName(const char *name)	/* I - Hostname or IP address */
+{
+  const char		*nameptr;	/* Pointer into name */
+  unsigned		ip[4];		/* IP address components */
+  _cups_globals_t	*cg = _cupsGlobals();
+  					/* Pointer to library globals */
+
+
+  DEBUG_printf(("httpGetHostByName(name=\"%s\")", name));
+
+ /*
+  * Avoid lookup delays and configuration problems when connecting
+  * to the localhost address...
+  */
+
+  if (!strcmp(name, "localhost"))
+    name = "127.0.0.1";
+
+ /*
+  * This function is needed because some operating systems have a
+  * buggy implementation of gethostbyname() that does not support
+  * IP addresses.  If the first character of the name string is a
+  * number, then sscanf() is used to extract the IP components.
+  * We then pack the components into an IPv4 address manually,
+  * since the inet_aton() function is deprecated.  We use the
+  * htonl() macro to get the right byte order for the address.
+  *
+  * We also support domain sockets when supported by the underlying
+  * OS...
+  */
+
+#ifdef AF_LOCAL
+  if (name[0] == '/')
+  {
+   /*
+    * A domain socket address, so make an AF_LOCAL entry and return it...
+    */
+
+    cg->hostent.h_name      = (char *)name;
+    cg->hostent.h_aliases   = NULL;
+    cg->hostent.h_addrtype  = AF_LOCAL;
+    cg->hostent.h_length    = (int)strlen(name) + 1;
+    cg->hostent.h_addr_list = cg->ip_ptrs;
+    cg->ip_ptrs[0]          = (char *)name;
+    cg->ip_ptrs[1]          = NULL;
+
+    DEBUG_puts("1httpGetHostByName: returning domain socket address...");
+
+    return (&cg->hostent);
+  }
+#endif /* AF_LOCAL */
+
+  for (nameptr = name; isdigit(*nameptr & 255) || *nameptr == '.'; nameptr ++);
+
+  if (!*nameptr)
+  {
+   /*
+    * We have an IPv4 address; break it up and provide the host entry
+    * to the caller.
+    */
+
+    if (sscanf(name, "%u.%u.%u.%u", ip, ip + 1, ip + 2, ip + 3) != 4)
+      return (NULL);			/* Must have 4 numbers */
+
+    if (ip[0] > 255 || ip[1] > 255 || ip[2] > 255 || ip[3] > 255)
+      return (NULL);			/* Invalid byte ranges! */
+
+    cg->ip_addr = htonl((((((((unsigned)ip[0] << 8) | (unsigned)ip[1]) << 8) |
+                           (unsigned)ip[2]) << 8) |
+                         (unsigned)ip[3]));
+
+   /*
+    * Fill in the host entry and return it...
+    */
+
+    cg->hostent.h_name      = (char *)name;
+    cg->hostent.h_aliases   = NULL;
+    cg->hostent.h_addrtype  = AF_INET;
+    cg->hostent.h_length    = 4;
+    cg->hostent.h_addr_list = cg->ip_ptrs;
+    cg->ip_ptrs[0]          = (char *)&(cg->ip_addr);
+    cg->ip_ptrs[1]          = NULL;
+
+    DEBUG_puts("1httpGetHostByName: returning IPv4 address...");
+
+    return (&cg->hostent);
+  }
+  else
+  {
+   /*
+    * Use the gethostbyname() function to get the IPv4 address for
+    * the name...
+    */
+
+    DEBUG_puts("1httpGetHostByName: returning domain lookup address(es)...");
+
+    return (gethostbyname(name));
+  }
+}
+
+
+/*
+ * 'httpGetHostname()' - Get the FQDN for the connection or local system.
+ *
+ * When "http" points to a connected socket, return the hostname or
+ * address that was used in the call to httpConnect() or httpConnectEncrypt(),
+ * or the address of the client for the connection from httpAcceptConnection().
+ * Otherwise, return the FQDN for the local system using both gethostname()
+ * and gethostbyname() to get the local hostname with domain.
+ *
+ * @since CUPS 1.2/macOS 10.5@
+ */
+
+const char *				/* O - FQDN for connection or system */
+httpGetHostname(http_t *http,		/* I - HTTP connection or NULL */
+                char   *s,		/* I - String buffer for name */
+                int    slen)		/* I - Size of buffer */
+{
+  if (http)
+  {
+    if (!s || slen <= 1)
+    {
+      if (http->hostname[0] == '/')
+	return ("localhost");
+      else
+	return (http->hostname);
+    }
+    else if (http->hostname[0] == '/')
+      strlcpy(s, "localhost", (size_t)slen);
+    else
+      strlcpy(s, http->hostname, (size_t)slen);
+  }
+  else
+  {
+   /*
+    * Get the hostname...
+    */
+
+    if (!s || slen <= 1)
+      return (NULL);
+
+    if (gethostname(s, (size_t)slen) < 0)
+      strlcpy(s, "localhost", (size_t)slen);
+
+    if (!strchr(s, '.'))
+    {
+#ifdef HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME
+     /*
+      * The hostname is not a FQDN, so use the local hostname from the
+      * SystemConfiguration framework...
+      */
+
+      SCDynamicStoreRef	sc = SCDynamicStoreCreate(kCFAllocatorDefault,
+                                                  CFSTR("libcups"), NULL, NULL);
+					/* System configuration data */
+      CFStringRef	local = sc ? SCDynamicStoreCopyLocalHostName(sc) : NULL;
+					/* Local host name */
+      char		localStr[1024];	/* Local host name C string */
+
+      if (local && CFStringGetCString(local, localStr, sizeof(localStr),
+                                      kCFStringEncodingUTF8))
+      {
+       /*
+        * Append ".local." to the hostname we get...
+	*/
+
+        snprintf(s, (size_t)slen, "%s.local.", localStr);
+      }
+
+      if (local)
+        CFRelease(local);
+      if (sc)
+        CFRelease(sc);
+
+#else
+     /*
+      * The hostname is not a FQDN, so look it up...
+      */
+
+      struct hostent	*host;		/* Host entry to get FQDN */
+
+      if ((host = gethostbyname(s)) != NULL && host->h_name)
+      {
+       /*
+        * Use the resolved hostname...
+	*/
+
+	strlcpy(s, host->h_name, (size_t)slen);
+      }
+#endif /* HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME */
+    }
+
+   /*
+    * Make sure .local hostnames end with a period...
+    */
+
+    if (strlen(s) > 6 && !strcmp(s + strlen(s) - 6, ".local"))
+      strlcat(s, ".", (size_t)slen);
+  }
+
+ /*
+  * Convert the hostname to lowercase as needed...
+  */
+
+  if (s[0] != '/')
+  {
+    char	*ptr;			/* Pointer into string */
+
+    for (ptr = s; *ptr; ptr ++)
+      *ptr = (char)_cups_tolower((int)*ptr);
+  }
+
+ /*
+  * Return the hostname with as much domain info as we have...
+  */
+
+  return (s);
+}
+
+
+/*
+ * 'httpResolveHostname()' - Resolve the hostname of the HTTP connection
+ *                           address.
+ *
+ * @since CUPS 2.0/OS 10.10@
+ */
+
+const char *				/* O - Resolved hostname or @code NULL@ */
+httpResolveHostname(http_t *http,	/* I - HTTP connection */
+                    char   *buffer,	/* I - Hostname buffer */
+                    size_t bufsize)	/* I - Size of buffer */
+{
+  if (!http)
+    return (NULL);
+
+  if (isdigit(http->hostname[0] & 255) || http->hostname[0] == '[')
+  {
+    char	temp[1024];		/* Temporary string */
+
+    if (httpAddrLookup(http->hostaddr, temp, sizeof(temp)))
+      strlcpy(http->hostname, temp, sizeof(http->hostname));
+    else
+      return (NULL);
+  }
+
+  if (buffer)
+  {
+    if (http->hostname[0] == '/')
+      strlcpy(buffer, "localhost", bufsize);
+    else
+      strlcpy(buffer, http->hostname, bufsize);
+
+    return (buffer);
+  }
+  else if (http->hostname[0] == '/')
+    return ("localhost");
+  else
+    return (http->hostname);
+}
Index: a/cups/create-2.4.2-freebind-patch/cups-2.4.2-new/cups
===================================================================
--- a/cups/create-2.4.2-freebind-patch/cups-2.4.2-new/cups	(nonexistent)
+++ a/cups/create-2.4.2-freebind-patch/cups-2.4.2-new/cups	(revision 5)

Property changes on: a/cups/create-2.4.2-freebind-patch/cups-2.4.2-new/cups
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/cups/create-2.4.2-freebind-patch/cups-2.4.2-new
===================================================================
--- a/cups/create-2.4.2-freebind-patch/cups-2.4.2-new	(nonexistent)
+++ a/cups/create-2.4.2-freebind-patch/cups-2.4.2-new	(revision 5)

Property changes on: a/cups/create-2.4.2-freebind-patch/cups-2.4.2-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/cups/create-2.4.2-freebind-patch/file.list
===================================================================
--- a/cups/create-2.4.2-freebind-patch/file.list	(nonexistent)
+++ a/cups/create-2.4.2-freebind-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+cups-2.4.2/cups/http-addr.c
Index: a/cups/create-2.4.2-freebind-patch
===================================================================
--- a/cups/create-2.4.2-freebind-patch	(nonexistent)
+++ a/cups/create-2.4.2-freebind-patch	(revision 5)

Property changes on: a/cups/create-2.4.2-freebind-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/cups/create-2.4.2-statedir-patch/create.patch.sh
===================================================================
--- a/cups/create-2.4.2-statedir-patch/create.patch.sh	(nonexistent)
+++ a/cups/create-2.4.2-statedir-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=2.4.2
+
+tar --files-from=file.list -xJvf ../cups-$VERSION.tar.xz
+mv cups-$VERSION cups-$VERSION-orig
+
+cp -rf ./cups-$VERSION-new ./cups-$VERSION
+
+diff --unified -Nr  cups-$VERSION-orig  cups-$VERSION > cups-$VERSION-statedir.patch
+
+mv cups-$VERSION-statedir.patch ../patches
+
+rm -rf ./cups-$VERSION
+rm -rf ./cups-$VERSION-orig

Property changes on: a/cups/create-2.4.2-statedir-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/cups/create-2.4.2-statedir-patch/cups-2.4.2-new/config-scripts/cups-directories.m4
===================================================================
--- a/cups/create-2.4.2-statedir-patch/cups-2.4.2-new/config-scripts/cups-directories.m4	(nonexistent)
+++ a/cups/create-2.4.2-statedir-patch/cups-2.4.2-new/config-scripts/cups-directories.m4	(revision 5)
@@ -0,0 +1,275 @@
+dnl
+dnl Directory stuff for CUPS.
+dnl
+dnl Copyright © 2021-2022 by OpenPrinting.
+dnl Copyright © 2007-2017 by Apple Inc.
+dnl Copyright © 1997-2007 by Easy Software Products, all rights reserved.
+dnl
+dnl Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
+dnl
+
+AC_PREFIX_DEFAULT(/)
+
+dnl Fix "prefix" variable if it hasn't been specified...
+AS_IF([test "$prefix" = "NONE"], [
+    prefix="/"
+])
+
+dnl Fix "exec_prefix" variable if it hasn't been specified...
+AS_IF([test "$exec_prefix" = "NONE"], [
+    AS_IF([test "$prefix" = "/"], [
+	exec_prefix="/usr"
+    ], [
+	exec_prefix="$prefix"
+    ])
+])
+
+dnl Fix "bindir" variable...
+AS_IF([test "$bindir" = "\${exec_prefix}/bin"], [
+    bindir="$exec_prefix/bin"
+])
+
+AC_DEFINE_UNQUOTED([CUPS_BINDIR], ["$bindir"], [Location of CUPS user programs.])
+
+dnl Fix "sbindir" variable...
+AS_IF([test "$sbindir" = "\${exec_prefix}/sbin"], [
+    sbindir="$exec_prefix/sbin"
+])
+
+AC_DEFINE_UNQUOTED([CUPS_SBINDIR], ["$sbindir"], [Location of CUPS admin programs.])
+
+dnl Fix "datarootdir" variable if it hasn't been specified...
+AS_IF([test "$datarootdir" = "\${prefix}/share"], [
+    AS_IF([test "$prefix" = "/"], [
+	datarootdir="/usr/share"
+    ], [
+	datarootdir="$prefix/share"
+    ])
+])
+
+dnl Fix "datadir" variable if it hasn't been specified...
+AS_IF([test "$datadir" = "\${prefix}/share"], [
+    AS_IF([test "$prefix" = "/"], [
+	datadir="/usr/share"
+    ], [
+	datadir="$prefix/share"
+    ])
+], [test "$datadir" = "\${datarootdir}"], [
+    datadir="$datarootdir"
+])
+
+dnl Fix "includedir" variable if it hasn't been specified...
+AS_IF([test "$includedir" = "\${prefix}/include" -a "$prefix" = "/"], [
+    includedir="/usr/include"
+])
+AS_IF([test "$includedir" != "/usr/include"], [
+    PKGCONFIG_CFLAGS="$PKGCONFIG_CFLAGS -I$includedir"
+])
+
+dnl Fix "localstatedir" variable if it hasn't been specified...
+AS_IF([test "$localstatedir" = "\${prefix}/var"], [
+    AS_IF([test "$prefix" = "/"], [
+	AS_IF([test "$host_os_name" = darwin], [
+	    localstatedir="/private/var"
+	], [
+	    localstatedir="/var"
+	])
+    ], [
+	localstatedir="$prefix/var"
+    ])
+])
+
+dnl Fix "sysconfdir" variable if it hasn't been specified...
+AS_IF([test "$sysconfdir" = "\${prefix}/etc"], [
+    AS_IF([test "$prefix" = "/"], [
+	AS_IF([test "$host_os_name" = darwin], [
+	    sysconfdir="/private/etc"
+	], [
+	    sysconfdir="/etc"
+	])
+    ], [
+	sysconfdir="$prefix/etc"
+    ])
+])
+
+dnl Fix "libdir" variable...
+AS_IF([test "$libdir" = "\${exec_prefix}/lib"], [
+    AS_CASE(["$host_os_name"], [linux*], [
+	AS_IF([test -d /usr/lib64 -a ! -d /usr/lib64/fakeroot], [
+	    libdir="$exec_prefix/lib64"
+	], [
+	    libdir="$exec_prefix/lib"
+	])
+    ], [*], [
+	libdir="$exec_prefix/lib"
+    ])
+])
+AS_IF([test "$libdir" = "/usr/lib"], [
+    PKGCONFIG_LIBS="-lcups"
+], [
+    PKGCONFIG_LIBS="-L$libdir -lcups"
+])
+
+dnl Setup default locations...
+# Cache data...
+AC_ARG_WITH([cachedir], AS_HELP_STRING([--with-cachedir], [set path for cache files]), [
+    cachedir="$withval"
+], [
+    cachedir=""
+])
+
+AS_IF([test x$cachedir = x], [
+    AS_IF([test "x$host_os_name" = xdarwin], [
+	CUPS_CACHEDIR="$localstatedir/spool/cups/cache"
+    ], [
+	CUPS_CACHEDIR="$localstatedir/cache/cups"
+    ])
+], [
+    CUPS_CACHEDIR="$cachedir"
+])
+AC_DEFINE_UNQUOTED([CUPS_CACHEDIR], ["$CUPS_CACHEDIR"], [Location of cache files.])
+AC_SUBST([CUPS_CACHEDIR])
+
+# Data files
+CUPS_DATADIR="$datadir/cups"
+AC_DEFINE_UNQUOTED([CUPS_DATADIR], ["$datadir/cups"], [Location of data files.])
+AC_SUBST([CUPS_DATADIR])
+
+# Icon directory
+AC_ARG_WITH([icondir], AS_HELP_STRING([--with-icondir], [set path for application icons]), [
+    icondir="$withval"
+], [
+    icondir=""
+])
+
+AS_IF([test "x$icondir" = x], [
+    ICONDIR="/usr/share/icons"
+], [
+    ICONDIR="$icondir"
+])
+
+AC_SUBST([ICONDIR])
+
+# Menu directory
+AC_ARG_WITH([menudir], AS_HELP_STRING([--with-menudir], [set path for application menus]), [
+    menudir="$withval"
+], [
+    menudir=""
+])
+
+AS_IF([test "x$menudir" = x], [
+    MENUDIR="/usr/share/applications"
+], [
+    MENUDIR="$menudir"
+])
+
+AC_SUBST([MENUDIR])
+
+# Documentation files
+AC_ARG_WITH([docdir], AS_HELP_STRING([--with-docdir], [set path for documentation]), [
+    docdir="$withval"
+], [
+    docdir=""
+])
+
+AS_IF([test x$docdir = x], [
+    CUPS_DOCROOT="$datadir/doc/cups"
+    docdir="$datadir/doc/cups"
+], [
+    CUPS_DOCROOT="$docdir"
+])
+
+AC_DEFINE_UNQUOTED([CUPS_DOCROOT], ["$docdir"], [Location of documentation files.])
+AC_SUBST([CUPS_DOCROOT])
+
+# Locale data
+AS_IF([test "$localedir" = "\${datarootdir}/locale"], [
+    AS_CASE(["$host_os_name"], [linux* | gnu* | *bsd* | darwin*], [
+	CUPS_LOCALEDIR="$datarootdir/locale"
+    ], [*], [
+	# This is the standard System V location...
+	CUPS_LOCALEDIR="$exec_prefix/lib/locale"
+    ])
+], [
+    CUPS_LOCALEDIR="$localedir"
+])
+
+AC_DEFINE_UNQUOTED([CUPS_LOCALEDIR], ["$CUPS_LOCALEDIR"], [Location of localization files.])
+AC_SUBST([CUPS_LOCALEDIR])
+
+
+# cups.pc file...
+AC_ARG_WITH([pkgconfpath], AS_HELP_STRING([--with-pkgconfpath], [set path for cups.pc file]), [
+    pkgconfpath="$withval"
+], [
+    pkgconfpath=""
+])
+
+AS_IF([test x$pkgconfpath = x], [
+    CUPS_PKGCONFPATH="$exec_prefix/lib/pkgconfig"
+], [
+    CUPS_PKGCONFPATH="$pkgconfpath"
+])
+AC_DEFINE_UNQUOTED([CUPS_PKGCONFPATH], ["$CUPS_PKGCONFPATH"], [Location of cups.pc file.])
+AC_SUBST([CUPS_PKGCONFPATH])
+
+
+
+# Log files...
+AC_ARG_WITH([logdir], AS_HELP_STRING([--with-logdir], [set path for log files]), [
+    logdir="$withval"
+], [
+    logdir=""
+])
+
+AS_IF([test x$logdir = x], [
+    CUPS_LOGDIR="$localstatedir/log/cups"
+], [
+    CUPS_LOGDIR="$logdir"
+])
+AC_DEFINE_UNQUOTED([CUPS_LOGDIR], ["$CUPS_LOGDIR"], [Location of log files.])
+AC_SUBST([CUPS_LOGDIR])
+
+# Longer-term spool data
+CUPS_REQUESTS="$localstatedir/spool/cups"
+AC_DEFINE_UNQUOTED([CUPS_REQUESTS], ["$localstatedir/spool/cups"], [Location of spool directory.])
+AC_SUBST([CUPS_REQUESTS])
+
+# Server executables...
+AS_CASE(["$host_os_name"], [*-gnu], [
+    # GNUs
+    INSTALL_SYSV="install-sysv"
+    CUPS_SERVERBIN="$exec_prefix/lib/cups"
+], [*bsd* | darwin*], [
+    # *BSD and Darwin (macOS)
+    INSTALL_SYSV=""
+    CUPS_SERVERBIN="$exec_prefix/libexec/cups"
+], [*], [
+    # All others
+    INSTALL_SYSV="install-sysv"
+    CUPS_SERVERBIN="$exec_prefix/lib/cups"
+])
+
+AC_DEFINE_UNQUOTED([CUPS_SERVERBIN], ["$CUPS_SERVERBIN"], [Location of server programs.])
+AC_SUBST([CUPS_SERVERBIN])
+AC_SUBST([INSTALL_SYSV])
+
+# Configuration files
+CUPS_SERVERROOT="$sysconfdir/cups"
+AC_DEFINE_UNQUOTED([CUPS_SERVERROOT], ["$sysconfdir/cups"], [Location of server configuration files.])
+AC_SUBST([CUPS_SERVERROOT])
+
+# Transient run-time state
+AC_ARG_WITH([rundir], AS_HELP_STRING([--with-rundir], [set transient run-time state directory]), [
+    CUPS_STATEDIR="$withval"
+], [
+    AS_CASE(["$host_os_name"], [darwin*], [
+	# Darwin (macOS)
+	CUPS_STATEDIR="$CUPS_SERVERROOT"
+    ], [*], [
+	# All others
+	CUPS_STATEDIR="/run/cups"
+    ])
+])
+AC_DEFINE_UNQUOTED([CUPS_STATEDIR], ["$CUPS_STATEDIR"], [Location of transient state files.])
+AC_SUBST([CUPS_STATEDIR])
Index: a/cups/create-2.4.2-statedir-patch/cups-2.4.2-new/config-scripts
===================================================================
--- a/cups/create-2.4.2-statedir-patch/cups-2.4.2-new/config-scripts	(nonexistent)
+++ a/cups/create-2.4.2-statedir-patch/cups-2.4.2-new/config-scripts	(revision 5)

Property changes on: a/cups/create-2.4.2-statedir-patch/cups-2.4.2-new/config-scripts
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/cups/create-2.4.2-statedir-patch/cups-2.4.2-new
===================================================================
--- a/cups/create-2.4.2-statedir-patch/cups-2.4.2-new	(nonexistent)
+++ a/cups/create-2.4.2-statedir-patch/cups-2.4.2-new	(revision 5)

Property changes on: a/cups/create-2.4.2-statedir-patch/cups-2.4.2-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/cups/create-2.4.2-statedir-patch/file.list
===================================================================
--- a/cups/create-2.4.2-statedir-patch/file.list	(nonexistent)
+++ a/cups/create-2.4.2-statedir-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+cups-2.4.2/config-scripts/cups-directories.m4
Index: a/cups/create-2.4.2-statedir-patch
===================================================================
--- a/cups/create-2.4.2-statedir-patch	(nonexistent)
+++ a/cups/create-2.4.2-statedir-patch	(revision 5)

Property changes on: a/cups/create-2.4.2-statedir-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/cups/create-2.4.2-tls-openssl-patch/create.patch.sh
===================================================================
--- a/cups/create-2.4.2-tls-openssl-patch/create.patch.sh	(nonexistent)
+++ a/cups/create-2.4.2-tls-openssl-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=2.4.2
+
+tar --files-from=file.list -xJvf ../cups-$VERSION.tar.xz
+mv cups-$VERSION cups-$VERSION-orig
+
+cp -rf ./cups-$VERSION-new ./cups-$VERSION
+
+diff --unified -Nr  cups-$VERSION-orig  cups-$VERSION > cups-$VERSION-tls-openssl.patch
+
+mv cups-$VERSION-tls-openssl.patch ../patches
+
+rm -rf ./cups-$VERSION
+rm -rf ./cups-$VERSION-orig

Property changes on: a/cups/create-2.4.2-tls-openssl-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/cups/create-2.4.2-tls-openssl-patch/cups-2.4.2-new/cups/tls-openssl.c
===================================================================
--- a/cups/create-2.4.2-tls-openssl-patch/cups-2.4.2-new/cups/tls-openssl.c	(nonexistent)
+++ a/cups/create-2.4.2-tls-openssl-patch/cups-2.4.2-new/cups/tls-openssl.c	(revision 5)
@@ -0,0 +1,1597 @@
+/*
+ * TLS support code for CUPS using OpenSSL/LibreSSL.
+ *
+ * Copyright © 2020-2022 by OpenPrinting
+ * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
+ *
+ * Licensed under Apache License v2.0.  See the file "LICENSE" for more
+ * information.
+ */
+
+/**** This file is included from tls.c ****/
+
+/*
+ * Include necessary headers...
+ */
+
+#include <sys/stat.h>
+#include <openssl/x509v3.h>
+
+
+/*
+ * Local functions...
+ */
+
+static long		http_bio_ctrl(BIO *h, int cmd, long arg1, void *arg2);
+static int		http_bio_free(BIO *data);
+static int		http_bio_new(BIO *h);
+static int		http_bio_puts(BIO *h, const char *str);
+static int		http_bio_read(BIO *h, char *buf, int size);
+static int		http_bio_write(BIO *h, const char *buf, int num);
+
+static X509		*http_create_credential(http_credential_t *credential);
+static const char	*http_default_path(char *buffer, size_t bufsize);
+static time_t		http_get_date(X509 *cert, int which);
+//static void		http_load_crl(void);
+static const char	*http_make_path(char *buffer, size_t bufsize, const char *dirname, const char *filename, const char *ext);
+static void		http_x509_add_san(X509 *cert, const char *name);
+
+
+/*
+ * Local globals...
+ */
+
+static int		tls_auto_create = 0;
+					/* Auto-create self-signed certs? */
+static BIO_METHOD	*tls_bio_method = NULL;
+					/* OpenSSL BIO method */
+static char		*tls_common_name = NULL;
+					/* Default common name */
+//static X509_CRL		*tls_crl = NULL;/* Certificate revocation list */
+static char		*tls_keypath = NULL;
+					/* Server cert keychain path */
+static _cups_mutex_t	tls_mutex = _CUPS_MUTEX_INITIALIZER;
+					/* Mutex for keychain/certs */
+static int		tls_options = -1,/* Options for TLS connections */
+			tls_min_version = _HTTP_TLS_1_0,
+			tls_max_version = _HTTP_TLS_MAX;
+
+
+/*
+ * 'cupsMakeServerCredentials()' - Make a self-signed certificate and private key pair.
+ *
+ * @since CUPS 2.0/OS 10.10@
+ */
+
+int					// O - 1 on success, 0 on failure
+cupsMakeServerCredentials(
+    const char *path,			// I - Path to keychain/directory
+    const char *common_name,		// I - Common name
+    int        num_alt_names,		// I - Number of subject alternate names
+    const char **alt_names,		// I - Subject Alternate Names
+    time_t     expiration_date)		// I - Expiration date
+{
+  int		result = 0;		// Return value
+  EVP_PKEY	*pkey;			// Private key
+  RSA		*rsa;			// RSA key pair
+  X509		*cert;			// Certificate
+  cups_lang_t	*language;		// Default language info
+  time_t	curtime;		// Current time
+  X509_NAME	*name;			// Subject/issuer name
+  BIO		*bio;			// Output file
+  char		temp[1024],		// Temporary directory name
+ 		crtfile[1024],		// Certificate filename
+		keyfile[1024];		// Private key filename
+  const char	*common_ptr;		// Pointer into common name
+
+
+  DEBUG_printf(("cupsMakeServerCredentials(path=\"%s\", common_name=\"%s\", num_alt_names=%d, alt_names=%p, expiration_date=%d)", path, common_name, num_alt_names, alt_names, (int)expiration_date));
+
+  // Filenames...
+  if (!path)
+    path = http_default_path(temp, sizeof(temp));
+
+  if (!path || !common_name)
+  {
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
+    return (0);
+  }
+
+  http_make_path(crtfile, sizeof(crtfile), path, common_name, "crt");
+  http_make_path(keyfile, sizeof(keyfile), path, common_name, "key");
+
+  // Create the encryption key...
+  DEBUG_puts("1cupsMakeServerCredentials: Creating key pair.");
+
+  if ((rsa = RSA_generate_key(2048, RSA_F4, NULL, NULL)) == NULL)
+  {
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to create key pair."), 1);
+    return (0);
+  }
+
+  if ((pkey = EVP_PKEY_new()) == NULL)
+  {
+    RSA_free(rsa);
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to create private key."), 1);
+    return (0);
+  }
+
+  EVP_PKEY_assign_RSA(pkey, rsa);
+
+  DEBUG_puts("1cupsMakeServerCredentials: Key pair created.");
+
+  // Create the X.509 certificate...
+  DEBUG_puts("1cupsMakeServerCredentials: Generating self-signed X.509 certificate.");
+
+  if ((cert = X509_new()) == NULL)
+  {
+    EVP_PKEY_free(pkey);
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to create X.509 certificate."), 1);
+    return (0);
+  }
+
+  curtime  = time(NULL);
+  language = cupsLangDefault();
+
+  ASN1_TIME_set(X509_get_notBefore(cert), curtime);
+  ASN1_TIME_set(X509_get_notAfter(cert), expiration_date);
+  ASN1_INTEGER_set(X509_get_serialNumber(cert), (int)curtime);
+  X509_set_pubkey(cert, pkey);
+
+  name = X509_get_subject_name(cert);
+  if (strlen(language->language) == 5)
+    X509_NAME_add_entry_by_txt(name, "C", MBSTRING_ASC, (unsigned char *)language->language + 3, -1, -1, 0);
+  else
+    X509_NAME_add_entry_by_txt(name, "C", MBSTRING_ASC, (unsigned char *)"US", -1, -1, 0);
+  X509_NAME_add_entry_by_txt(name, "O", MBSTRING_ASC, (unsigned char *)"Unknown", -1, -1, 0);
+  X509_NAME_add_entry_by_txt(name, "CN", MBSTRING_ASC, (unsigned char *)common_name, -1, -1, 0);
+
+  X509_set_issuer_name(cert, name);
+
+  http_x509_add_san(cert, common_name);
+  if ((common_ptr = strstr(common_name, ".local")) == NULL)
+  {
+    // Add common_name.local to the list, too...
+    char	localname[256],		// hostname.local
+		*localptr;		// Pointer into localname
+
+    strlcpy(localname, common_name, sizeof(localname));
+    if ((localptr = strchr(localname, '.')) != NULL)
+      *localptr = '\0';
+    strlcat(localname, ".local", sizeof(localname));
+
+    http_x509_add_san(cert, localname);
+  }
+
+  if (num_alt_names > 0)
+  {
+    int i;                              // Looping var...
+
+    for (i = 0; i < num_alt_names; i ++)
+    {
+      if (strcmp(alt_names[i], "localhost"))
+        http_x509_add_san(cert, alt_names[i]);
+    }
+  }
+
+  X509_sign(cert, pkey, EVP_sha256());
+
+  // Save them...
+  if ((bio = BIO_new_file(keyfile, "wb")) == NULL)
+  {
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
+    goto done;
+  }
+
+  if (!PEM_write_bio_PrivateKey(bio, pkey, NULL, NULL, 0, NULL, NULL))
+  {
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to write private key."), 1);
+    BIO_free(bio);
+    goto done;
+  }
+
+  BIO_free(bio);
+
+  if ((bio = BIO_new_file(crtfile, "wb")) == NULL)
+  {
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
+    goto done;
+  }
+
+  if (!PEM_write_bio_X509(bio, cert))
+  {
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to write X.509 certificate."), 1);
+    BIO_free(bio);
+    goto done;
+  }
+
+  BIO_free(bio);
+
+  result = 1;
+  DEBUG_puts("1cupsMakeServerCredentials: Successfully created credentials.");
+
+  // Cleanup...
+  done:
+
+  X509_free(cert);
+  EVP_PKEY_free(pkey);
+
+  return (result);
+}
+
+
+/*
+ * 'cupsSetServerCredentials()' - Set the default server credentials.
+ *
+ * Note: The server credentials are used by all threads in the running process.
+ * This function is threadsafe.
+ *
+ * @since CUPS 2.0/OS 10.10@
+ */
+
+int					// O - 1 on success, 0 on failure
+cupsSetServerCredentials(
+    const char *path,			// I - Path to keychain/directory
+    const char *common_name,		// I - Default common name for server
+    int        auto_create)		// I - 1 = automatically create self-signed certificates
+{
+  char	temp[1024];			// Default path buffer
+
+
+  DEBUG_printf(("cupsSetServerCredentials(path=\"%s\", common_name=\"%s\", auto_create=%d)", path, common_name, auto_create));
+
+ /*
+  * Use defaults as needed...
+  */
+
+  if (!path)
+    path = http_default_path(temp, sizeof(temp));
+
+ /*
+  * Range check input...
+  */
+
+  if (!path || !common_name)
+  {
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
+    return (0);
+  }
+
+  _cupsMutexLock(&tls_mutex);
+
+ /*
+  * Free old values...
+  */
+
+  if (tls_keypath)
+    _cupsStrFree(tls_keypath);
+
+  if (tls_common_name)
+    _cupsStrFree(tls_common_name);
+
+ /*
+  * Save the new values...
+  */
+
+  tls_keypath     = _cupsStrAlloc(path);
+  tls_auto_create = auto_create;
+  tls_common_name = _cupsStrAlloc(common_name);
+
+  _cupsMutexUnlock(&tls_mutex);
+
+  return (1);
+}
+
+
+/*
+ * 'httpCopyCredentials()' - Copy the credentials associated with the peer in
+ *                           an encrypted connection.
+ *
+ * @since CUPS 1.5/macOS 10.7@
+ */
+
+int					// O - Status of call (0 = success)
+httpCopyCredentials(
+    http_t	 *http,			// I - Connection to server
+    cups_array_t **credentials)		// O - Array of credentials
+{
+  STACK_OF(X509) *chain;		// Certificate chain
+
+
+  DEBUG_printf(("httpCopyCredentials(http=%p, credentials=%p)", http, credentials));
+
+  if (credentials)
+    *credentials = NULL;
+
+  if (!http || !http->tls || !credentials)
+    return (-1);
+
+  *credentials = cupsArrayNew(NULL, NULL);
+  chain        = SSL_get_peer_cert_chain(http->tls);
+
+  DEBUG_printf(("1httpCopyCredentials: chain=%p", chain));
+
+  if (chain)
+  {
+    int	i,				// Looping var
+	count;				// Number of certs
+
+    for (i = 0, count = sk_X509_num(chain); i < count; i ++)
+    {
+      X509	*cert = sk_X509_value(chain, i);
+					// Current certificate
+      BIO	*bio = BIO_new(BIO_s_mem());
+					// Memory buffer for cert
+
+      if (bio)
+      {
+	long	bytes;			// Number of bytes
+	char	*buffer;		// Pointer to bytes
+
+	if (PEM_write_bio_X509(bio, cert))
+	{
+	  bytes = BIO_get_mem_data(bio, &buffer);
+	  httpAddCredential(*credentials, buffer, (int)bytes);
+	}
+
+	BIO_free(bio);
+      }
+    }
+  }
+
+  return (0);
+}
+
+
+/*
+ * '_httpCreateCredentials()' - Create credentials in the internal format.
+ */
+
+http_tls_credentials_t			// O - Internal credentials
+_httpCreateCredentials(
+    cups_array_t *credentials)		// I - Array of credentials
+{
+  (void)credentials;
+
+  return (NULL);
+}
+
+
+/*
+ * '_httpFreeCredentials()' - Free internal credentials.
+ */
+
+void
+_httpFreeCredentials(
+    http_tls_credentials_t credentials)	// I - Internal credentials
+{
+  X509_free(credentials);
+}
+
+
+/*
+ * 'httpCredentialsAreValidForName()' - Return whether the credentials are valid for the given name.
+ *
+ * @since CUPS 2.0/OS 10.10@
+ */
+
+int					// O - 1 if valid, 0 otherwise
+httpCredentialsAreValidForName(
+    cups_array_t *credentials,		// I - Credentials
+    const char   *common_name)		// I - Name to check
+{
+  X509	*cert;				// Certificate
+  int	result = 0;			// Result
+
+
+  cert = http_create_credential((http_credential_t *)cupsArrayFirst(credentials));
+  if (cert)
+  {
+    result = X509_check_host(cert, common_name, strlen(common_name), 0, NULL);
+
+    X509_free(cert);
+  }
+
+  return (result);
+}
+
+
+/*
+ * 'httpCredentialsGetTrust()' - Return the trust of credentials.
+ *
+ * @since CUPS 2.0/OS 10.10@
+ */
+
+http_trust_t				// O - Level of trust
+httpCredentialsGetTrust(
+    cups_array_t *credentials,		// I - Credentials
+    const char   *common_name)		// I - Common name for trust lookup
+{
+  http_trust_t	trust = HTTP_TRUST_OK;	// Trusted?
+  X509		*cert;			// Certificate
+  cups_array_t	*tcreds = NULL;		// Trusted credentials
+  _cups_globals_t *cg = _cupsGlobals();	// Per-thread globals
+
+
+  if (!common_name)
+  {
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No common name specified."), 1);
+    return (HTTP_TRUST_UNKNOWN);
+  }
+
+  if ((cert = http_create_credential((http_credential_t *)cupsArrayFirst(credentials))) == NULL)
+  {
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to create credentials from array."), 1);
+    return (HTTP_TRUST_UNKNOWN);
+  }
+
+  if (cg->any_root < 0)
+  {
+    _cupsSetDefaults();
+//    http_load_crl();
+  }
+
+  // Look this common name up in the default keychains...
+  httpLoadCredentials(NULL, &tcreds, common_name);
+
+  if (tcreds)
+  {
+    char	credentials_str[1024],	/* String for incoming credentials */
+		tcreds_str[1024];	/* String for saved credentials */
+
+    httpCredentialsString(credentials, credentials_str, sizeof(credentials_str));
+    httpCredentialsString(tcreds, tcreds_str, sizeof(tcreds_str));
+
+    if (strcmp(credentials_str, tcreds_str))
+    {
+      // Credentials don't match, let's look at the expiration date of the new
+      // credentials and allow if the new ones have a later expiration...
+      if (!cg->trust_first)
+      {
+        // Do not trust certificates on first use...
+        _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Trust on first use is disabled."), 1);
+
+        trust = HTTP_TRUST_INVALID;
+      }
+      else if (httpCredentialsGetExpiration(credentials) <= httpCredentialsGetExpiration(tcreds))
+      {
+        // The new credentials are not newly issued...
+        _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("New credentials are older than stored credentials."), 1);
+
+        trust = HTTP_TRUST_INVALID;
+      }
+      else if (!httpCredentialsAreValidForName(credentials, common_name))
+      {
+        // The common name does not match the issued certificate...
+        _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("New credentials are not valid for name."), 1);
+
+        trust = HTTP_TRUST_INVALID;
+      }
+      else if (httpCredentialsGetExpiration(tcreds) < time(NULL))
+      {
+        // Save the renewed credentials...
+	trust = HTTP_TRUST_RENEWED;
+
+        httpSaveCredentials(NULL, credentials, common_name);
+      }
+    }
+
+    httpFreeCredentials(tcreds);
+  }
+  else if (cg->validate_certs && !httpCredentialsAreValidForName(credentials, common_name))
+  {
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No stored credentials, not valid for name."), 1);
+    trust = HTTP_TRUST_INVALID;
+  }
+  else if (!cg->trust_first)
+  {
+    // See if we have a site CA certificate we can compare...
+    if (!httpLoadCredentials(NULL, &tcreds, "site"))
+    {
+      if (cupsArrayCount(credentials) != (cupsArrayCount(tcreds) + 1))
+      {
+        // Certificate isn't directly generated from the CA cert...
+        trust = HTTP_TRUST_INVALID;
+      }
+      else
+      {
+        // Do a tail comparison of the two certificates...
+        http_credential_t	*a, *b;		// Certificates
+
+        for (a = (http_credential_t *)cupsArrayFirst(tcreds), b = (http_credential_t *)cupsArrayIndex(credentials, 1); a && b; a = (http_credential_t *)cupsArrayNext(tcreds), b = (http_credential_t *)cupsArrayNext(credentials))
+        {
+	  if (a->datalen != b->datalen || memcmp(a->data, b->data, a->datalen))
+	    break;
+	}
+
+        if (a || b)
+	  trust = HTTP_TRUST_INVALID;
+      }
+
+      if (trust != HTTP_TRUST_OK)
+	_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Credentials do not validate against site CA certificate."), 1);
+    }
+    else
+    {
+      _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Trust on first use is disabled."), 1);
+      trust = HTTP_TRUST_INVALID;
+    }
+  }
+
+  if (trust == HTTP_TRUST_OK && !cg->expired_certs)
+  {
+    time_t	curtime;		// Current date/time
+
+    time(&curtime);
+    if (curtime < http_get_date(cert, 0) || curtime > http_get_date(cert, 1))
+    {
+      _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Credentials have expired."), 1);
+      trust = HTTP_TRUST_EXPIRED;
+    }
+  }
+
+  if (trust == HTTP_TRUST_OK && !cg->any_root && cupsArrayCount(credentials) == 1)
+  {
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Self-signed credentials are blocked."), 1);
+    trust = HTTP_TRUST_INVALID;
+  }
+
+  X509_free(cert);
+
+  return (trust);
+}
+
+
+/*
+ * 'httpCredentialsGetExpiration()' - Return the expiration date of the credentials.
+ *
+ * @since CUPS 2.0/OS 10.10@
+ */
+
+time_t					// O - Expiration date of credentials
+httpCredentialsGetExpiration(
+    cups_array_t *credentials)		// I - Credentials
+{
+  time_t	result = 0;		// Result
+  X509		*cert;			// Certificate
+
+
+  if ((cert = http_create_credential((http_credential_t *)cupsArrayFirst(credentials))) != NULL)
+  {
+    result = http_get_date(cert, 1);
+    X509_free(cert);
+  }
+
+  return (result);
+}
+
+
+/*
+ * 'httpCredentialsString()' - Return a string representing the credentials.
+ *
+ * @since CUPS 2.0/OS 10.10@
+ */
+
+size_t					// O - Total size of credentials string
+httpCredentialsString(
+    cups_array_t *credentials,		// I - Credentials
+    char         *buffer,		// I - Buffer
+    size_t       bufsize)		// I - Size of buffer
+{
+  http_credential_t	*first;		// First certificate
+  X509			*cert;		// Certificate
+
+
+  DEBUG_printf(("httpCredentialsString(credentials=%p, buffer=%p, bufsize=" CUPS_LLFMT ")", credentials, buffer, CUPS_LLCAST bufsize));
+
+  if (!buffer)
+    return (0);
+
+  if (bufsize > 0)
+    *buffer = '\0';
+
+  first = (http_credential_t *)cupsArrayFirst(credentials);
+  cert  = http_create_credential(first);
+
+  if (cert)
+  {
+    char		name[256],	// Common name associated with cert
+			issuer[256];	// Issuer associated with cert
+    time_t		expiration;	// Expiration date of cert
+    const char		*sigalg;	// Signature algorithm
+    unsigned char	md5_digest[16];	// MD5 result
+
+
+    X509_NAME_get_text_by_NID(X509_get_subject_name(cert), NID_commonName, name, sizeof(name));
+    X509_NAME_get_text_by_NID(X509_get_issuer_name(cert), NID_commonName, issuer, sizeof(issuer));
+    expiration = http_get_date(cert, 1);
+
+    switch (X509_get_signature_nid(cert))
+    {
+      case NID_ecdsa_with_SHA1 :
+          sigalg = "SHA1WithECDSAEncryption";
+          break;
+      case NID_ecdsa_with_SHA224 :
+          sigalg = "SHA224WithECDSAEncryption";
+          break;
+      case NID_ecdsa_with_SHA256 :
+          sigalg = "SHA256WithECDSAEncryption";
+          break;
+      case NID_ecdsa_with_SHA384 :
+          sigalg = "SHA384WithECDSAEncryption";
+          break;
+      case NID_ecdsa_with_SHA512 :
+          sigalg = "SHA512WithECDSAEncryption";
+          break;
+      case NID_sha1WithRSAEncryption :
+          sigalg = "SHA1WithRSAEncryption";
+          break;
+      case NID_sha224WithRSAEncryption :
+          sigalg = "SHA224WithRSAEncryption";
+          break;
+      case NID_sha256WithRSAEncryption :
+          sigalg = "SHA256WithRSAEncryption";
+          break;
+      case NID_sha384WithRSAEncryption :
+          sigalg = "SHA384WithRSAEncryption";
+          break;
+      case NID_sha512WithRSAEncryption :
+          sigalg = "SHA512WithRSAEncryption";
+          break;
+      default :
+          sigalg = "Unknown";
+          break;
+    }
+
+    cupsHashData("md5", first->data, first->datalen, md5_digest, sizeof(md5_digest));
+
+    snprintf(buffer, bufsize, "%s (issued by %s) / %s / %s / %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", name, issuer, httpGetDateString(expiration), sigalg, md5_digest[0], md5_digest[1], md5_digest[2], md5_digest[3], md5_digest[4], md5_digest[5], md5_digest[6], md5_digest[7], md5_digest[8], md5_digest[9], md5_digest[10], md5_digest[11], md5_digest[12], md5_digest[13], md5_digest[14], md5_digest[15]);
+    X509_free(cert);
+  }
+
+  DEBUG_printf(("1httpCredentialsString: Returning \"%s\".", buffer));
+
+  return (strlen(buffer));
+}
+
+
+/*
+ * 'httpLoadCredentials()' - Load X.509 credentials from a keychain file.
+ *
+ * @since CUPS 2.0/OS 10.10@
+ */
+
+int					// O - 0 on success, -1 on error
+httpLoadCredentials(
+    const char   *path,			// I  - Keychain/PKCS#12 path
+    cups_array_t **credentials,		// IO - Credentials
+    const char   *common_name)		// I  - Common name for credentials
+{
+  cups_file_t		*fp;		// Certificate file
+  char			filename[1024],	// filename.crt
+			temp[1024],	// Temporary string
+			line[256];	// Base64-encoded line
+  unsigned char		*data = NULL;	// Buffer for cert data
+  size_t		alloc_data = 0,	// Bytes allocated
+			num_data = 0;	// Bytes used
+  int			decoded;	// Bytes decoded
+  int			in_certificate = 0;
+					// In a certificate?
+
+
+  if (!credentials || !common_name)
+    return (-1);
+
+  if (!path)
+    path = http_default_path(temp, sizeof(temp));
+  if (!path)
+    return (-1);
+
+  http_make_path(filename, sizeof(filename), path, common_name, "crt");
+
+  if ((fp = cupsFileOpen(filename, "r")) == NULL)
+    return (-1);
+
+  while (cupsFileGets(fp, line, sizeof(line)))
+  {
+    if (!strcmp(line, "-----BEGIN CERTIFICATE-----"))
+    {
+      if (in_certificate)
+      {
+       /*
+	* Missing END CERTIFICATE...
+	*/
+
+        httpFreeCredentials(*credentials);
+	*credentials = NULL;
+        break;
+      }
+
+      in_certificate = 1;
+    }
+    else if (!strcmp(line, "-----END CERTIFICATE-----"))
+    {
+      if (!in_certificate || !num_data)
+      {
+       /*
+	* Missing data...
+	*/
+
+        httpFreeCredentials(*credentials);
+	*credentials = NULL;
+        break;
+      }
+
+      if (!*credentials)
+        *credentials = cupsArrayNew(NULL, NULL);
+
+      if (httpAddCredential(*credentials, data, num_data))
+      {
+        httpFreeCredentials(*credentials);
+	*credentials = NULL;
+        break;
+      }
+
+      num_data       = 0;
+      in_certificate = 0;
+    }
+    else if (in_certificate)
+    {
+      if (alloc_data == 0)
+      {
+        data       = malloc(2048);
+	alloc_data = 2048;
+
+        if (!data)
+	  break;
+      }
+      else if ((num_data + strlen(line)) >= alloc_data)
+      {
+        unsigned char *tdata = realloc(data, alloc_data + 1024);
+					/* Expanded buffer */
+
+	if (!tdata)
+	{
+	  httpFreeCredentials(*credentials);
+	  *credentials = NULL;
+	  break;
+	}
+
+	data       = tdata;
+        alloc_data += 1024;
+      }
+
+      decoded = alloc_data - num_data;
+      httpDecode64_2((char *)data + num_data, &decoded, line);
+      num_data += (size_t)decoded;
+    }
+  }
+
+  cupsFileClose(fp);
+
+  if (in_certificate)
+  {
+   /*
+    * Missing END CERTIFICATE...
+    */
+
+    httpFreeCredentials(*credentials);
+    *credentials = NULL;
+  }
+
+  if (data)
+    free(data);
+
+  return (*credentials ? 0 : -1);
+}
+
+
+/*
+ * 'httpSaveCredentials()' - Save X.509 credentials to a keychain file.
+ *
+ * @since CUPS 2.0/OS 10.10@
+ */
+
+int					// O - -1 on error, 0 on success
+httpSaveCredentials(
+    const char   *path,			// I - Keychain/PKCS#12 path
+    cups_array_t *credentials,		// I - Credentials
+    const char   *common_name)		// I - Common name for credentials
+{
+  cups_file_t		*fp;		// Certificate file
+  char			filename[1024],	// filename.crt
+			nfilename[1024],// filename.crt.N
+			temp[1024],	// Temporary string
+			line[256];	// Base64-encoded line
+  const unsigned char	*ptr;		// Pointer into certificate
+  ssize_t		remaining;	// Bytes left
+  http_credential_t	*cred;		// Current credential
+
+
+  if (!credentials || !common_name)
+    return (-1);
+
+  if (!path)
+    path = http_default_path(temp, sizeof(temp));
+  if (!path)
+    return (-1);
+
+  http_make_path(filename, sizeof(filename), path, common_name, "crt");
+  snprintf(nfilename, sizeof(nfilename), "%s.N", filename);
+
+  if ((fp = cupsFileOpen(nfilename, "w")) == NULL)
+    return (-1);
+
+#ifndef _WIN32
+  fchmod(cupsFileNumber(fp), 0600);
+#endif // !_WIN32
+
+  for (cred = (http_credential_t *)cupsArrayFirst(credentials);
+       cred;
+       cred = (http_credential_t *)cupsArrayNext(credentials))
+  {
+    cupsFilePuts(fp, "-----BEGIN CERTIFICATE-----\n");
+    for (ptr = cred->data, remaining = (ssize_t)cred->datalen; remaining > 0; remaining -= 45, ptr += 45)
+    {
+      httpEncode64_2(line, sizeof(line), (char *)ptr, remaining > 45 ? 45 : remaining);
+      cupsFilePrintf(fp, "%s\n", line);
+    }
+    cupsFilePuts(fp, "-----END CERTIFICATE-----\n");
+  }
+
+  cupsFileClose(fp);
+
+  return (rename(nfilename, filename));
+}
+
+
+/*
+ * '_httpTLSInitialize()' - Initialize the TLS stack.
+ */
+
+void
+_httpTLSInitialize(void)
+{
+  // OpenSSL no longer requires explicit initialization...
+}
+
+
+/*
+ * '_httpTLSPending()' - Return the number of pending TLS-encrypted bytes.
+ */
+
+size_t					// O - Bytes available
+_httpTLSPending(http_t *http)		// I - HTTP connection
+{
+  return ((size_t)SSL_pending(http->tls));
+}
+
+
+/*
+ * '_httpTLSRead()' - Read from a SSL/TLS connection.
+ */
+
+int					// O - Bytes read
+_httpTLSRead(http_t *http,		// I - Connection to server
+	     char   *buf,		// I - Buffer to store data
+	     int    len)		// I - Length of buffer
+{
+  return (SSL_read((SSL *)(http->tls), buf, len));
+}
+
+
+/*
+ * '_httpTLSSetOptions()' - Set TLS protocol and cipher suite options.
+ */
+
+void
+_httpTLSSetOptions(int options,		// I - Options
+                   int min_version,	// I - Minimum TLS version
+                   int max_version)	// I - Maximum TLS version
+{
+  if (!(options & _HTTP_TLS_SET_DEFAULT) || tls_options < 0)
+  {
+    tls_options     = options;
+    tls_min_version = min_version;
+    tls_max_version = max_version;
+  }
+}
+
+
+/*
+ * '_httpTLSStart()' - Set up SSL/TLS support on a connection.
+ */
+
+int					// O - 0 on success, -1 on failure
+_httpTLSStart(http_t *http)		// I - Connection to server
+{
+  BIO		*bio;			// Basic input/output context
+  SSL_CTX	*context;		// Encryption context
+  char		hostname[256],		// Hostname
+		cipherlist[256];	// List of cipher suites
+  unsigned long	error;			// Error code, if any
+  static const int versions[] =		// SSL/TLS versions
+  {
+    TLS1_VERSION,			// No more SSL support in OpenSSL
+    TLS1_VERSION,			// TLS/1.0
+    TLS1_1_VERSION,			// TLS/1.1
+    TLS1_2_VERSION,			// TLS/1.2
+#ifdef TLS1_3_VERSION
+    TLS1_3_VERSION,			// TLS/1.3
+    TLS1_3_VERSION			// TLS/1.3 (max)
+#else
+    TLS1_2_VERSION,			// TLS/1.2
+    TLS1_2_VERSION			// TLS/1.2 (max)
+#endif // TLS1_3_VERSION
+  };
+
+
+  DEBUG_printf(("3_httpTLSStart(http=%p)", http));
+
+  if (tls_options < 0)
+  {
+    DEBUG_puts("4_httpTLSStart: Setting defaults.");
+    _cupsSetDefaults();
+    DEBUG_printf(("4_httpTLSStart: tls_options=%x", tls_options));
+  }
+
+  if (http->mode == _HTTP_MODE_SERVER && !tls_keypath)
+  {
+    DEBUG_puts("4_httpTLSStart: cupsSetServerCredentials not called.");
+    http->error  = errno = EINVAL;
+    http->status = HTTP_STATUS_ERROR;
+    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Server credentials not set."), 1);
+
+    return (-1);
+  }
+
+  if (http->mode == _HTTP_MODE_CLIENT)
+  {
+    // Negotiate a TLS connection as a client...
+    context = SSL_CTX_new(TLS_client_method());
+  }
+  else
+  {
+    // Negotiate a TLS connection as a server
+    char	crtfile[1024],		// Certificate file
+		keyfile[1024];		// Private key file
+    const char	*cn,			// Common name to lookup
+		*cnptr;			// Pointer into common name
+    int		have_creds = 0;		// Have credentials?
+
+    context = SSL_CTX_new(TLS_server_method());
+
+    // Find the TLS certificate...
+    if (http->fields[HTTP_FIELD_HOST])
+    {
+      // Use hostname for TLS upgrade...
+      strlcpy(hostname, http->fields[HTTP_FIELD_HOST], sizeof(hostname));
+    }
+    else
+    {
+      // Resolve hostname from connection address...
+      http_addr_t	addr;		// Connection address
+      socklen_t		addrlen;	// Length of address
+
+      addrlen = sizeof(addr);
+      if (getsockname(http->fd, (struct sockaddr *)&addr, &addrlen))
+      {
+        // Unable to get local socket address so use default...
+	DEBUG_printf(("4_httpTLSStart: Unable to get socket address: %s", strerror(errno)));
+	hostname[0] = '\0';
+      }
+      else if (httpAddrLocalhost(&addr))
+      {
+        // Local access top use default...
+	hostname[0] = '\0';
+      }
+      else
+      {
+        // Lookup the socket address...
+	httpAddrLookup(&addr, hostname, sizeof(hostname));
+        DEBUG_printf(("4_httpTLSStart: Resolved socket address to \"%s\".", hostname));
+      }
+    }
+
+    if (isdigit(hostname[0] & 255) || hostname[0] == '[')
+      hostname[0] = '\0';		// Don't allow numeric addresses
+
+    if (hostname[0])
+      cn = hostname;
+    else
+      cn = tls_common_name;
+
+    if (cn)
+    {
+      // First look in the CUPS keystore...
+      http_make_path(crtfile, sizeof(crtfile), tls_keypath, cn, "crt");
+      http_make_path(keyfile, sizeof(keyfile), tls_keypath, cn, "key");
+
+      if (access(crtfile, R_OK) || access(keyfile, R_OK))
+      {
+        // No CUPS-managed certs, look for CA certs...
+        char cacrtfile[1024], cakeyfile[1024];	// CA cert files
+
+        snprintf(cacrtfile, sizeof(cacrtfile), "/etc/letsencrypt/live/%s/fullchain.pem", cn);
+        snprintf(cakeyfile, sizeof(cakeyfile), "/etc/letsencrypt/live/%s/privkey.pem", cn);
+
+        if ((access(cacrtfile, R_OK) || access(cakeyfile, R_OK)) && (cnptr = strchr(cn, '.')) != NULL)
+        {
+          // Try just domain name...
+          cnptr ++;
+          if (strchr(cnptr, '.'))
+          {
+            snprintf(cacrtfile, sizeof(cacrtfile), "/etc/letsencrypt/live/%s/fullchain.pem", cnptr);
+            snprintf(cakeyfile, sizeof(cakeyfile), "/etc/letsencrypt/live/%s/privkey.pem", cnptr);
+          }
+        }
+
+        if (!access(cacrtfile, R_OK) && !access(cakeyfile, R_OK))
+        {
+          // Use the CA certs...
+          strlcpy(crtfile, cacrtfile, sizeof(crtfile));
+          strlcpy(keyfile, cakeyfile, sizeof(keyfile));
+        }
+      }
+
+      have_creds = !access(crtfile, R_OK) && !access(keyfile, R_OK);
+    }
+
+    if (!have_creds && tls_auto_create && cn)
+    {
+      DEBUG_printf(("4_httpTLSStart: Auto-create credentials for \"%s\".", cn));
+
+      if (!cupsMakeServerCredentials(tls_keypath, cn, 0, NULL, time(NULL) + 365 * 86400))
+      {
+	DEBUG_puts("4_httpTLSStart: cupsMakeServerCredentials failed.");
+	http->error  = errno = EINVAL;
+	http->status = HTTP_STATUS_ERROR;
+	_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to create server credentials."), 1);
+        SSL_CTX_free(context);
+
+	return (-1);
+      }
+    }
+
+    SSL_CTX_use_PrivateKey_file(context, keyfile, SSL_FILETYPE_PEM);
+    SSL_CTX_use_certificate_file(context, crtfile, SSL_FILETYPE_PEM);
+  }
+
+  // Set TLS options...
+  strlcpy(cipherlist, "HIGH:!DH:+DHE", sizeof(cipherlist));
+  if ((tls_options & _HTTP_TLS_ALLOW_RC4) && http->mode == _HTTP_MODE_CLIENT)
+    strlcat(cipherlist, ":+RC4", sizeof(cipherlist));
+  else
+    strlcat(cipherlist, ":!RC4", sizeof(cipherlist));
+  if (tls_options & _HTTP_TLS_DENY_CBC)
+    strlcat(cipherlist, ":!SHA1:!SHA256:!SHA384", sizeof(cipherlist));
+  strlcat(cipherlist, ":@STRENGTH", sizeof(cipherlist));
+
+  SSL_CTX_set_min_proto_version(context, versions[tls_min_version]);
+  SSL_CTX_set_max_proto_version(context, versions[tls_max_version]);
+  SSL_CTX_set_cipher_list(context, cipherlist);
+
+  // Setup a TLS session
+  _cupsMutexLock(&tls_mutex);
+  if (!tls_bio_method)
+  {
+    tls_bio_method = BIO_meth_new(BIO_get_new_index(), "http");
+    BIO_meth_set_ctrl(tls_bio_method, http_bio_ctrl);
+    BIO_meth_set_create(tls_bio_method, http_bio_new);
+    BIO_meth_set_destroy(tls_bio_method, http_bio_free);
+    BIO_meth_set_read(tls_bio_method, http_bio_read);
+    BIO_meth_set_puts(tls_bio_method, http_bio_puts);
+    BIO_meth_set_write(tls_bio_method, http_bio_write);
+  }
+  _cupsMutexUnlock(&tls_mutex);
+
+  bio = BIO_new(tls_bio_method);
+  BIO_ctrl(bio, BIO_C_SET_FILE_PTR, 0, (char *)http);
+
+  http->tls = SSL_new(context);
+  SSL_set_bio(http->tls, bio, bio);
+
+  if (http->mode == _HTTP_MODE_CLIENT)
+  {
+    // Negotiate as a server...
+    if (SSL_connect(http->tls) < 1)
+    {
+      // Failed
+      if ((error = ERR_get_error()) != 0)
+        _cupsSetError(IPP_STATUS_ERROR_CUPS_PKI, ERR_error_string(error, NULL), 0);
+
+      http->status = HTTP_STATUS_ERROR;
+      http->error  = EPIPE;
+
+      SSL_CTX_free(context);
+
+      SSL_free(http->tls);
+      http->tls = NULL;
+
+      return (-1);
+    }
+  }
+  else
+  {
+    // Negotiate as a server...
+    if (SSL_accept(http->tls) < 1)
+    {
+      // Failed
+      if ((error = ERR_get_error()) != 0)
+        _cupsSetError(IPP_STATUS_ERROR_CUPS_PKI, ERR_error_string(error, NULL), 0);
+
+      http->status = HTTP_STATUS_ERROR;
+      http->error  = EPIPE;
+
+      SSL_CTX_free(context);
+
+      SSL_free(http->tls);
+      http->tls = NULL;
+
+      return (-1);
+    }
+  }
+
+  return (0);
+}
+
+
+/*
+ * '_httpTLSStop()' - Shut down SSL/TLS on a connection.
+ */
+
+void
+_httpTLSStop(http_t *http)		// I - Connection to server
+{
+  SSL_CTX	*context;		// Context for encryption
+
+
+  context = SSL_get_SSL_CTX(http->tls);
+
+  SSL_shutdown(http->tls);
+  SSL_CTX_free(context);
+  SSL_free(http->tls);
+
+  http->tls = NULL;
+}
+
+
+/*
+ * '_httpTLSWrite()' - Write to a SSL/TLS connection.
+ */
+
+int					// O - Bytes written
+_httpTLSWrite(http_t     *http,		// I - Connection to server
+	      const char *buf,		// I - Buffer holding data
+	      int        len)		// I - Length of buffer
+{
+  return (SSL_write(http->tls, buf, len));
+}
+
+
+/*
+ * 'http_bio_ctrl()' - Control the HTTP connection.
+ */
+
+static long				// O - Result/data
+http_bio_ctrl(BIO  *h,			// I - BIO data
+              int  cmd,			// I - Control command
+	      long arg1,		// I - First argument
+	      void *arg2)		// I - Second argument
+{
+  switch (cmd)
+  {
+    default :
+        return (0);
+
+    case BIO_CTRL_RESET :
+        BIO_set_data(h, NULL);
+	return (0);
+
+    case BIO_C_SET_FILE_PTR :
+        BIO_set_data(h, arg2);
+        BIO_set_init(h, 1);
+	return (1);
+
+    case BIO_C_GET_FILE_PTR :
+        if (arg2)
+	{
+	  *((void **)arg2) = BIO_get_data(h);
+	  return (1);
+	}
+	else
+	  return (0);
+
+    case BIO_CTRL_DUP :
+    case BIO_CTRL_FLUSH :
+        return (1);
+  }
+}
+
+
+/*
+ * 'http_bio_free()' - Free OpenSSL data.
+ */
+
+static int				// O - 1 on success, 0 on failure
+http_bio_free(BIO *h)			// I - BIO data
+{
+  if (!h)
+    return (0);
+
+  if (BIO_get_shutdown(h))
+    BIO_set_init(h, 0);
+
+  return (1);
+}
+
+
+/*
+ * 'http_bio_new()' - Initialize an OpenSSL BIO structure.
+ */
+
+static int				// O - 1 on success, 0 on failure
+http_bio_new(BIO *h)			// I - BIO data
+{
+  if (!h)
+    return (0);
+
+  BIO_set_init(h, 0);
+  BIO_set_data(h, NULL);
+
+  return (1);
+}
+
+
+/*
+ * 'http_bio_puts()' - Send a string for OpenSSL.
+ */
+
+static int				// O - Bytes written
+http_bio_puts(BIO        *h,		// I - BIO data
+              const char *str)		// I - String to write
+{
+#ifdef WIN32
+  return (send(((http_t *)BIO_get_data(h))->fd, str, (int)strlen(str), 0));
+#else
+  return ((int)send(((http_t *)BIO_get_data(h))->fd, str, strlen(str), 0));
+#endif // WIN32
+}
+
+
+/*
+ * 'http_bio_read()' - Read data for OpenSSL.
+ */
+
+static int				// O - Bytes read
+http_bio_read(BIO  *h,			// I - BIO data
+              char *buf,		// I - Buffer
+	      int  size)		// I - Number of bytes to read
+{
+  http_t	*http;			// HTTP connection
+
+
+  http = (http_t *)BIO_get_data(h);
+
+  if (!http->blocking)
+  {
+   /*
+    * Make sure we have data before we read...
+    */
+
+    if (!_httpWait(http, 10000, 0))
+    {
+#ifdef WIN32
+      http->error = WSAETIMEDOUT;
+#else
+      http->error = ETIMEDOUT;
+#endif // WIN32
+
+      return (-1);
+    }
+  }
+
+  return ((int)recv(http->fd, buf, (size_t)size, 0));
+}
+
+
+/*
+ * 'http_bio_write()' - Write data for OpenSSL.
+ */
+
+static int				// O - Bytes written
+http_bio_write(BIO        *h,		// I - BIO data
+               const char *buf,		// I - Buffer to write
+	       int        num)		// I - Number of bytes to write
+{
+  return (send(((http_t *)BIO_get_data(h))->fd, buf, num, 0));
+}
+
+
+/*
+ * 'http_create_credential()' - Create a single credential in the internal format.
+ */
+
+static X509 *				// O - Certificate
+http_create_credential(
+    http_credential_t *credential)	// I - Credential
+{
+  X509	*cert = NULL;			// Certificate
+  BIO	*bio;				// Basic I/O for string
+
+
+  if (!credential)
+    return (NULL);
+
+  if ((bio = BIO_new_mem_buf(credential->data, credential->datalen)) == NULL)
+    return (NULL);
+
+  PEM_read_bio_X509(bio, &cert, NULL, (void *)"");
+
+  BIO_free(bio);
+
+  return (cert);
+}
+
+
+/*
+ * 'http_default_path()' - Get the default credential store path.
+ */
+
+static const char *			// O - Path or NULL on error
+http_default_path(
+    char   *buffer,			// I - Path buffer
+    size_t bufsize)			// I - Size of path buffer
+{
+  _cups_globals_t	*cg = _cupsGlobals();
+					// Pointer to library globals
+
+
+#ifdef _WIN32
+  if (cg->home)
+#else
+  if (cg->home && getuid())
+#endif // _WIN32
+  {
+    snprintf(buffer, bufsize, "%s/.cups", cg->home);
+    if (access(buffer, 0))
+    {
+      DEBUG_printf(("1http_default_path: Making directory \"%s\".", buffer));
+      if (mkdir(buffer, 0700))
+      {
+        DEBUG_printf(("1http_default_path: Failed to make directory: %s", strerror(errno)));
+        return (NULL);
+      }
+    }
+
+    snprintf(buffer, bufsize, "%s/.cups/ssl", cg->home);
+    if (access(buffer, 0))
+    {
+      DEBUG_printf(("1http_default_path: Making directory \"%s\".", buffer));
+      if (mkdir(buffer, 0700))
+      {
+        DEBUG_printf(("1http_default_path: Failed to make directory: %s", strerror(errno)));
+        return (NULL);
+      }
+    }
+  }
+  else
+    strlcpy(buffer, CUPS_SERVERROOT "/ssl", bufsize);
+
+  DEBUG_printf(("1http_default_path: Using default path \"%s\".", buffer));
+
+  return (buffer);
+}
+
+
+//
+// 'http_get_date()' - Get the notBefore or notAfter date of a certificate.
+//
+
+static time_t				// O - UNIX time in seconds
+http_get_date(X509 *cert,		// I - Certificate
+              int  which)		// I - 0 for notBefore, 1 for notAfter
+{
+  unsigned char	*expiration;		// Expiration date of cert
+  struct tm	exptm;			// Expiration date components
+
+
+  if (which)
+    ASN1_STRING_to_UTF8(&expiration, X509_get0_notAfter(cert));
+  else
+    ASN1_STRING_to_UTF8(&expiration, X509_get0_notBefore(cert));
+
+  memset(&exptm, 0, sizeof(exptm));
+  if (strlen((char *)expiration) > 13)
+  {
+    // 4-digit year
+    exptm.tm_year = (expiration[0] - '0') * 1000 + (expiration[1] - '0') * 100 + (expiration[2] - '0') * 10 + expiration[3] - '0' - 1900;
+    exptm.tm_mon  = (expiration[4] - '0') * 10 + expiration[5] - '0' - 1;
+    exptm.tm_mday = (expiration[6] - '0') * 10 + expiration[7] - '0';
+    exptm.tm_hour = (expiration[8] - '0') * 10 + expiration[9] - '0';
+    exptm.tm_min  = (expiration[10] - '0') * 10 + expiration[11] - '0';
+    exptm.tm_sec  = (expiration[12] - '0') * 10 + expiration[13] - '0';
+  }
+  else
+  {
+    // 2-digit year
+    exptm.tm_year = 100 + (expiration[0] - '0') * 10 + expiration[1] - '0';
+    exptm.tm_mon  = (expiration[2] - '0') * 10 + expiration[3] - '0' - 1;
+    exptm.tm_mday = (expiration[4] - '0') * 10 + expiration[5] - '0';
+    exptm.tm_hour = (expiration[6] - '0') * 10 + expiration[7] - '0';
+    exptm.tm_min  = (expiration[8] - '0') * 10 + expiration[9] - '0';
+    exptm.tm_sec  = (expiration[10] - '0') * 10 + expiration[11] - '0';
+  }
+
+  OPENSSL_free(expiration);
+
+  return (mktime(&exptm));
+}
+
+
+#if 0
+/*
+ * 'http_load_crl()' - Load the certificate revocation list, if any.
+ */
+
+static void
+http_load_crl(void)
+{
+  _cupsMutexLock(&tls_mutex);
+
+  if (!openssl_x509_crl_init(&tls_crl))
+  {
+    cups_file_t		*fp;		// CRL file
+    char		filename[1024],	// site.crl
+			line[256];	// Base64-encoded line
+    unsigned char	*data = NULL;	// Buffer for cert data
+    size_t		alloc_data = 0,	// Bytes allocated
+			num_data = 0;	// Bytes used
+    int			decoded;	// Bytes decoded
+    openssl_datum_t	datum;		// Data record
+
+
+    http_make_path(filename, sizeof(filename), CUPS_SERVERROOT, "site", "crl");
+
+    if ((fp = cupsFileOpen(filename, "r")) != NULL)
+    {
+      while (cupsFileGets(fp, line, sizeof(line)))
+      {
+	if (!strcmp(line, "-----BEGIN X509 CRL-----"))
+	{
+	  if (num_data)
+	  {
+	   /*
+	    * Missing END X509 CRL...
+	    */
+
+	    break;
+	  }
+	}
+	else if (!strcmp(line, "-----END X509 CRL-----"))
+	{
+	  if (!num_data)
+	  {
+	   /*
+	    * Missing data...
+	    */
+
+	    break;
+	  }
+
+          datum.data = data;
+	  datum.size = num_data;
+
+	  openssl_x509_crl_import(tls_crl, &datum, GNUTLS_X509_FMT_PEM);
+
+	  num_data = 0;
+	}
+	else
+	{
+	  if (alloc_data == 0)
+	  {
+	    data       = malloc(2048);
+	    alloc_data = 2048;
+
+	    if (!data)
+	      break;
+	  }
+	  else if ((num_data + strlen(line)) >= alloc_data)
+	  {
+	    unsigned char *tdata = realloc(data, alloc_data + 1024);
+					    // Expanded buffer
+
+	    if (!tdata)
+	      break;
+
+	    data       = tdata;
+	    alloc_data += 1024;
+	  }
+
+	  decoded = alloc_data - num_data;
+	  httpDecode64_2((char *)data + num_data, &decoded, line);
+	  num_data += (size_t)decoded;
+	}
+      }
+
+      cupsFileClose(fp);
+
+      if (data)
+	free(data);
+    }
+  }
+
+  _cupsMutexUnlock(&tls_mutex);
+}
+#endif // 0
+
+
+/*
+ * 'http_make_path()' - Format a filename for a certificate or key file.
+ */
+
+static const char *			// O - Filename
+http_make_path(
+    char       *buffer,			// I - Filename buffer
+    size_t     bufsize,			// I - Size of buffer
+    const char *dirname,		// I - Directory
+    const char *filename,		// I - Filename (usually hostname)
+    const char *ext)			// I - Extension
+{
+  char	*bufptr,			// Pointer into buffer
+	*bufend = buffer + bufsize - 1;	// End of buffer
+
+
+  snprintf(buffer, bufsize, "%s/", dirname);
+  bufptr = buffer + strlen(buffer);
+
+  while (*filename && bufptr < bufend)
+  {
+    if (_cups_isalnum(*filename) || *filename == '-' || *filename == '.')
+      *bufptr++ = *filename;
+    else
+      *bufptr++ = '_';
+
+    filename ++;
+  }
+
+  if (bufptr < bufend && filename[-1] != '.')
+    *bufptr++ = '.';
+
+  strlcpy(bufptr, ext, (size_t)(bufend - bufptr + 1));
+
+  return (buffer);
+}
+
+
+//
+// 'http_x509_add_san()' - Add a subjectAltName extension to an X.509 certificate.
+//
+
+static void
+http_x509_add_san(X509       *cert,	// I - Certificate
+                  const char *name)	// I - Hostname
+{
+  char		dns_name[1024];		// DNS: prefixed hostname
+  X509_EXTENSION *san_ext;		// Extension for subjectAltName
+  ASN1_OCTET_STRING *san_asn1;		// ASN1 string
+
+
+  // The subjectAltName value for DNS names starts with a DNS: prefix...
+  snprintf(dns_name, sizeof(dns_name), "DNS: %s", name);
+
+  if ((san_asn1 = ASN1_OCTET_STRING_new()) == NULL)
+    return;
+
+  ASN1_OCTET_STRING_set(san_asn1, (unsigned char *)dns_name, strlen(dns_name));
+  if ((san_ext = X509_EXTENSION_create_by_NID(NULL, NID_subject_alt_name, 0, san_asn1)) == NULL)
+  {
+    ASN1_OCTET_STRING_free(san_asn1);
+    return;
+  }
+
+  X509_add_ext(cert, san_ext, -1);
+  X509_EXTENSION_free(san_ext);
+  ASN1_OCTET_STRING_free(san_asn1);
+}
Index: a/cups/create-2.4.2-tls-openssl-patch/cups-2.4.2-new/cups
===================================================================
--- a/cups/create-2.4.2-tls-openssl-patch/cups-2.4.2-new/cups	(nonexistent)
+++ a/cups/create-2.4.2-tls-openssl-patch/cups-2.4.2-new/cups	(revision 5)

Property changes on: a/cups/create-2.4.2-tls-openssl-patch/cups-2.4.2-new/cups
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/cups/create-2.4.2-tls-openssl-patch/cups-2.4.2-new
===================================================================
--- a/cups/create-2.4.2-tls-openssl-patch/cups-2.4.2-new	(nonexistent)
+++ a/cups/create-2.4.2-tls-openssl-patch/cups-2.4.2-new	(revision 5)

Property changes on: a/cups/create-2.4.2-tls-openssl-patch/cups-2.4.2-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/cups/create-2.4.2-tls-openssl-patch/file.list
===================================================================
--- a/cups/create-2.4.2-tls-openssl-patch/file.list	(nonexistent)
+++ a/cups/create-2.4.2-tls-openssl-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+cups-2.4.2/cups/tls-openssl.c
Index: a/cups/create-2.4.2-tls-openssl-patch
===================================================================
--- a/cups/create-2.4.2-tls-openssl-patch	(nonexistent)
+++ a/cups/create-2.4.2-tls-openssl-patch	(revision 5)

Property changes on: a/cups/create-2.4.2-tls-openssl-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/cups/patches/README
===================================================================
--- a/cups/patches/README	(nonexistent)
+++ a/cups/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/cups/patches
===================================================================
--- a/cups/patches	(nonexistent)
+++ a/cups/patches	(revision 5)

Property changes on: a/cups/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/cups
===================================================================
--- a/cups	(nonexistent)
+++ a/cups	(revision 5)

Property changes on: a/cups
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/db/Makefile
===================================================================
--- a/db/Makefile	(nonexistent)
+++ a/db/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/db
+
+versions    = 18.1.40
+pkgname     = db
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: a/db
===================================================================
--- a/db	(nonexistent)
+++ a/db	(revision 5)

Property changes on: a/db
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dbus/Makefile
===================================================================
--- a/dbus/Makefile	(nonexistent)
+++ a/dbus/Makefile	(revision 5)
@@ -0,0 +1,60 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/dbus
+
+versions    = 1.13.18
+pkgname     = dbus
+suffix      = tar.xz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/dbus-1.13.18-allow-root.patch
+patches    += $(CURDIR)/patches/dbus-1.13.18-enable-elogind.patch
+patches    += $(CURDIR)/patches/dbus-1.13.18-x11-launch.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-1.13.18-allow-root-patch     ; ./create.patch.sh ) ; \
+	 ( cd create-1.13.18-enable-elogind-patch ; ./create.patch.sh ) ; \
+	 ( cd create-1.13.18-x11-launch-patch     ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/dbus/create-1.13.18-allow-root-patch/create.patch.sh
===================================================================
--- a/dbus/create-1.13.18-allow-root-patch/create.patch.sh	(nonexistent)
+++ a/dbus/create-1.13.18-allow-root-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=1.13.18
+
+tar --files-from=file.list -xJvf ../dbus-$VERSION.tar.xz
+mv dbus-$VERSION dbus-$VERSION-orig
+
+cp -rf ./dbus-$VERSION-new ./dbus-$VERSION
+
+diff --unified -Nr  dbus-$VERSION-orig  dbus-$VERSION > dbus-$VERSION-allow-root.patch
+
+mv dbus-$VERSION-allow-root.patch ../patches
+
+rm -rf ./dbus-$VERSION
+rm -rf ./dbus-$VERSION-orig

Property changes on: a/dbus/create-1.13.18-allow-root-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/dbus/create-1.13.18-allow-root-patch/dbus-1.13.18-new/bus/system.conf.in
===================================================================
--- a/dbus/create-1.13.18-allow-root-patch/dbus-1.13.18-new/bus/system.conf.in	(nonexistent)
+++ a/dbus/create-1.13.18-allow-root-patch/dbus-1.13.18-new/bus/system.conf.in	(revision 5)
@@ -0,0 +1,154 @@
+<!-- This configuration file controls the systemwide message bus.
+     Add a system-local.conf and edit that rather than changing this 
+     file directly. -->
+
+<!-- Note that there are any number of ways you can hose yourself
+     security-wise by screwing up this file; in particular, you
+     probably don't want to listen on any more addresses, add any more
+     auth mechanisms, run as a different user, etc. -->
+
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+
+  <!-- Our well-known bus type, do not change this -->
+  <type>system</type>
+
+  <!-- Run as special user -->
+  <user>@DBUS_USER@</user>
+
+  <!-- Fork into daemon mode -->
+  <fork/>
+
+  <!-- We use system service launching using a helper -->
+  <standard_system_servicedirs/>
+
+  <!-- This is a setuid helper that is used to launch system services -->
+  <servicehelper>@DBUS_LIBEXECDIR@/dbus-daemon-launch-helper</servicehelper>
+
+  <!-- Write a pid file -->
+  <pidfile>@DBUS_SYSTEM_PID_FILE@</pidfile>
+
+  <!-- Enable logging to syslog -->
+  <syslog/>
+
+  <!-- Only allow socket-credentials-based authentication -->
+  <auth>EXTERNAL</auth>
+
+  <!-- Only listen on a local socket. (abstract=/path/to/socket 
+       means use abstract namespace, don't really create filesystem 
+       file; only Linux supports this. Use path=/whatever on other 
+       systems.) -->
+  <listen>@DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@</listen>
+
+  <policy context="default">
+    <!-- All users can connect to system bus -->
+    <allow user="*"/>
+
+    <!-- Holes must be punched in service configuration files for
+         name ownership and sending method calls -->
+    <deny own="*"/>
+    <deny send_type="method_call"/>
+
+    <!-- Signals and reply messages (method returns, errors) are allowed
+         by default -->
+    <allow send_type="signal"/>
+    <allow send_requested_reply="true" send_type="method_return"/>
+    <allow send_requested_reply="true" send_type="error"/>
+
+    <!-- All messages may be received by default -->
+    <allow receive_type="method_call"/>
+    <allow receive_type="method_return"/>
+    <allow receive_type="error"/>
+    <allow receive_type="signal"/>
+
+    <!-- Allow anyone to talk to the message bus -->
+    <allow send_destination="org.freedesktop.DBus"
+           send_interface="org.freedesktop.DBus" />
+    <allow send_destination="org.freedesktop.DBus"
+           send_interface="org.freedesktop.DBus.Introspectable"/>
+    <allow send_destination="org.freedesktop.DBus"
+           send_interface="org.freedesktop.DBus.Properties"/>
+    <allow send_destination="org.freedesktop.DBus"
+           send_interface="org.freedesktop.DBus.Containers1"/>
+    <!-- But disallow some specific bus services -->
+    <deny send_destination="org.freedesktop.DBus"
+          send_interface="org.freedesktop.DBus"
+          send_member="UpdateActivationEnvironment"/>
+    <deny send_destination="org.freedesktop.DBus"
+          send_interface="org.freedesktop.DBus.Debug.Stats"/>
+    <deny send_destination="org.freedesktop.DBus"
+          send_interface="org.freedesktop.systemd1.Activator"/>
+  </policy>
+
+  <!-- Only systemd, which runs as root, may report activation failures. -->
+  <policy user="root">
+    <allow send_destination="org.freedesktop.DBus"
+           send_interface="org.freedesktop.systemd1.Activator"/>
+  </policy>
+
+  <!-- root may monitor the system bus. -->
+  <policy user="root">
+    <allow send_destination="org.freedesktop.DBus"
+           send_interface="org.freedesktop.DBus.Monitoring"/>
+  </policy>
+
+  <!-- If the Stats interface was enabled at compile-time, root may use it.
+       Copy this into system.local.conf or system.d/*.conf if you want to
+       enable other privileged users to view statistics and debug info -->
+  <policy user="root">
+    <allow send_destination="org.freedesktop.DBus"
+           send_interface="org.freedesktop.DBus.Debug.Stats"/>
+  </policy>
+
+  <!-- Include legacy configuration location -->
+  <include ignore_missing="yes">@SYSCONFDIR_FROM_PKGDATADIR@/dbus-1/system.conf</include>
+
+  <!-- The defaults for these limits are hard-coded in dbus-daemon.
+       Some clarifications:
+       Times are in milliseconds (ms); 1000ms = 1 second
+       133169152 bytes = 127 MiB
+       33554432 bytes = 32 MiB
+       150000ms = 2.5 minutes -->
+  <!-- <limit name="max_incoming_bytes">133169152</limit> -->
+  <!-- <limit name="max_incoming_unix_fds">64</limit> -->
+  <!-- <limit name="max_outgoing_bytes">133169152</limit> -->
+  <!-- <limit name="max_outgoing_unix_fds">64</limit> -->
+  <!-- <limit name="max_message_size">33554432</limit> -->
+  <!-- <limit name="max_message_unix_fds">16</limit> -->
+  <!-- <limit name="service_start_timeout">25000</limit> -->
+  <!-- <limit name="auth_timeout">5000</limit> -->
+  <!-- <limit name="pending_fd_timeout">150000</limit> -->
+  <!-- <limit name="max_completed_connections">2048</limit> -->
+  <!-- <limit name="max_incomplete_connections">64</limit> -->
+  <!-- <limit name="max_connections_per_user">256</limit> -->
+  <!-- <limit name="max_pending_service_starts">512</limit> -->
+  <!-- <limit name="max_names_per_connection">512</limit> -->
+  <!-- <limit name="max_match_rules_per_connection">512</limit> -->
+  <!-- <limit name="max_replies_per_connection">128</limit> -->
+  <!-- <limit name="max_containers">512</limit> -->
+  <!-- <limit name="max_containers_per_user">16</limit> -->
+  <!-- <limit name="max_container_metadata_bytes">4096</limit> -->
+  <!-- <limit name="max_connections_per_container">8</limit> -->
+
+  <!-- Allow root to do anything over the messagebus.
+       Don't whine about "security" - anyone with root privileges
+       can edit this file anyway, so -ENOHOLE here. -->
+  <policy user="root">
+    <allow send_destination="*"/>
+    <allow send_interface="*"/>
+  </policy>
+
+  <!-- Config files are placed here that among other things, punch 
+       holes in the above policy for specific services. -->
+  <includedir>system.d</includedir>
+
+  <includedir>@SYSCONFDIR_FROM_PKGDATADIR@/dbus-1/system.d</includedir>
+
+  <!-- This is included last so local configuration can override what's 
+       in this standard file -->
+  <include ignore_missing="yes">@SYSCONFDIR_FROM_PKGDATADIR@/dbus-1/system-local.conf</include>
+
+  <include if_selinux_enabled="yes" selinux_root_relative="yes">contexts/dbus_contexts</include>
+
+</busconfig>
Index: a/dbus/create-1.13.18-allow-root-patch/dbus-1.13.18-new/bus
===================================================================
--- a/dbus/create-1.13.18-allow-root-patch/dbus-1.13.18-new/bus	(nonexistent)
+++ a/dbus/create-1.13.18-allow-root-patch/dbus-1.13.18-new/bus	(revision 5)

Property changes on: a/dbus/create-1.13.18-allow-root-patch/dbus-1.13.18-new/bus
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dbus/create-1.13.18-allow-root-patch/dbus-1.13.18-new
===================================================================
--- a/dbus/create-1.13.18-allow-root-patch/dbus-1.13.18-new	(nonexistent)
+++ a/dbus/create-1.13.18-allow-root-patch/dbus-1.13.18-new	(revision 5)

Property changes on: a/dbus/create-1.13.18-allow-root-patch/dbus-1.13.18-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dbus/create-1.13.18-allow-root-patch/file.list
===================================================================
--- a/dbus/create-1.13.18-allow-root-patch/file.list	(nonexistent)
+++ a/dbus/create-1.13.18-allow-root-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+dbus-1.13.18/bus/system.conf.in
Index: a/dbus/create-1.13.18-allow-root-patch
===================================================================
--- a/dbus/create-1.13.18-allow-root-patch	(nonexistent)
+++ a/dbus/create-1.13.18-allow-root-patch	(revision 5)

Property changes on: a/dbus/create-1.13.18-allow-root-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dbus/create-1.13.18-enable-elogind-patch/create.patch.sh
===================================================================
--- a/dbus/create-1.13.18-enable-elogind-patch/create.patch.sh	(nonexistent)
+++ a/dbus/create-1.13.18-enable-elogind-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=1.13.18
+
+tar --files-from=file.list -xJvf ../dbus-$VERSION.tar.xz
+mv dbus-$VERSION dbus-$VERSION-orig
+
+cp -rf ./dbus-$VERSION-new ./dbus-$VERSION
+
+diff --unified -Nr  dbus-$VERSION-orig  dbus-$VERSION > dbus-$VERSION-enable-elogind.patch
+
+mv dbus-$VERSION-enable-elogind.patch ../patches
+
+rm -rf ./dbus-$VERSION
+rm -rf ./dbus-$VERSION-orig

Property changes on: a/dbus/create-1.13.18-enable-elogind-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new/configure.ac
===================================================================
--- a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new/configure.ac	(nonexistent)
+++ a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new/configure.ac	(revision 5)
@@ -0,0 +1,1860 @@
+dnl -*- mode: m4 -*-
+AC_PREREQ([2.63])
+
+m4_define([dbus_major_version], [1])
+m4_define([dbus_minor_version], [13])
+m4_define([dbus_micro_version], [18])
+m4_define([dbus_version],
+          [dbus_major_version.dbus_minor_version.dbus_micro_version])
+AC_INIT([dbus], [dbus_version], [https://gitlab.freedesktop.org/dbus/dbus/issues], [dbus])
+
+AC_CONFIG_AUX_DIR([build-aux])
+
+m4_pattern_forbid([^AX_(CHECK_ENABLE_DEBUG|CODE_COVERAGE|COMPILER_FLAGS|COMPILER_FLAGS_(CFLAGS|CXXFLAGS|LDFLAGS))\b],
+  [Unexpanded AX_ macro found. Please install GNU autoconf-archive])
+
+AC_CANONICAL_HOST
+
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
+
+AM_INIT_AUTOMAKE([1.13 tar-ustar no-dist-gzip dist-xz -Wno-portability subdir-objects foreign])
+
+GETTEXT_PACKAGE=dbus-1
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[The name of the gettext domain])
+
+# By default, rebuild autotools files on demand; only use ./missing if the
+# user says --disable-maintainer-mode (some distributions like to do this)
+AM_MAINTAINER_MODE([enable])
+
+m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+
+AC_DEFINE_UNQUOTED(DBUS_DAEMON_NAME,"dbus-daemon",[Name of executable])
+
+# libtool versioning - this applies to libdbus
+#
+# See http://sources.redhat.com/autobook/autobook/autobook_91.html#SEC91 for details
+#
+
+## increment if the interface has additions, changes, removals.
+LT_CURRENT=32
+
+## increment any time the source changes; set to
+##  0 if you increment CURRENT
+LT_REVISION=0
+
+## increment if any interfaces have been added; set to 0
+## if any interfaces have been changed or removed. removal has
+## precedence over adding, so set to 0 if both happened.
+LT_AGE=29
+
+AC_SUBST(LT_CURRENT)
+AC_SUBST(LT_REVISION)
+AC_SUBST(LT_AGE)
+SOVERSION=`expr ${LT_CURRENT} - ${LT_AGE}`
+AC_SUBST([SOVERSION])
+
+DBUS_MAJOR_VERSION=dbus_major_version
+DBUS_MINOR_VERSION=dbus_minor_version
+DBUS_MICRO_VERSION=dbus_micro_version
+DBUS_VERSION=dbus_major_version.dbus_minor_version.dbus_micro_version
+
+AC_SUBST(DBUS_MAJOR_VERSION)
+AC_SUBST(DBUS_MINOR_VERSION)
+AC_SUBST(DBUS_MICRO_VERSION)
+AC_SUBST(DBUS_VERSION)
+
+dnl
+dnl Build configuration
+dnl
+
+dnl This must come first: other options use this to set their defaults. Don't
+dnl enable developer mode on production builds.
+AC_ARG_ENABLE([developer],
+  [AS_HELP_STRING([--enable-developer],
+    [set defaults to be appropriate for a D-Bus developer instead of a distribution/end-user])],
+  [enable_developer=$enableval],
+  [enable_developer=no])
+
+dnl 'disable_developer' is the negation of 'enable_developer'. If
+dnl 'enable-developer' is set to 'no' (the default), the value of
+dnl 'disable_developer' is set to 'yes', and vice versa. It's used
+dnl for macros that require the opposite of 'enable_developer', such
+dnl as several AX_ macros.
+dnl See https://bugs.freedesktop.org/show_bug.cgi?id=97357
+AS_IF([test "x$enable_developer" = "xyes"],[
+    disable_developer=no
+  ],[
+    disable_developer=yes
+  ])
+
+# The debugging check must run before the compiler tests. Other command-line
+# options also use it to set their defaults. We disable debugging by default,
+# except for developer builds.
+AX_CHECK_ENABLE_DEBUG([$enable_developer])
+
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_PROG_CXX
+AC_USE_SYSTEM_EXTENSIONS
+AC_SYS_LARGEFILE
+AC_ISC_POSIX
+AC_HEADER_STDC
+AC_C_INLINE
+AM_PROG_LIBTOOL
+AC_PROG_MKDIR_P
+PKG_PROG_PKG_CONFIG
+
+# TAP test driver support
+AC_PROG_AWK
+AC_REQUIRE_AUX_FILE([tap-driver.sh])
+
+# This must come before we set up compiler warnings because it assumes
+# non-use of -Werror=missing-prototypes
+gl_VISIBILITY
+AM_CONDITIONAL([HAVE_VISIBILITY], [test "x$HAVE_VISIBILITY" = x1])
+
+# Initialize libtool
+LT_INIT([win32-dll])
+LT_LANG([Windows Resource])
+
+# Set some internal variables depending on the platform for later use.
+dbus_win=no
+dbus_cygwin=no
+dbus_unix=no
+case "${host}" in
+    *-mingw32ce*)
+        dbus_win=yes
+        dbus_wince=yes
+        ;;
+    *-mingw32*)
+        dbus_win=yes
+        ;;
+    *-cygwin*)
+        dbus_cygwin=yes
+        dbus_unix=yes
+        ;;
+    *)
+        dbus_unix=yes
+       ;;
+esac
+
+# Special defines for certain platforms
+if test "$dbus_win" = yes; then
+    AC_DEFINE(DBUS_WIN,1,[Defined if we run on a W32 API based system])
+    # Yes, on Windows it really does work like this.
+    # http://support.microsoft.com/kb/111855
+    AC_DEFINE(FD_SETSIZE,8192,[The maximum number of connections that can be handled at once])
+    BUILD_TIMESTAMP=`date --iso-8601=minutes`
+    AC_SUBST(BUILD_TIMESTAMP)
+    # Assume DBUS_VERSION is always three numbers
+    BUILD_FILEVERSION=`echo "$DBUS_VERSION" | sed -e 's/\./,/g'`,0
+    AC_SUBST(BUILD_FILEVERSION)
+    # In the CMake build system we generate multiple files, versioninfo-*.rc, with a
+    # different "internal name" and "original filename", for embedding in multiple
+    # executables. In the Autotools build system, we currently only generate
+    # versioninfo.rc and embed it in libdbus-1-${SOVERSION}.dll.
+    AC_SUBST([DBUS_VER_INTERNAL_NAME], [libdbus-1-${SOVERSION}])
+    AC_SUBST([DBUS_VER_ORIGINAL_NAME], [libdbus-1-${SOVERSION}.dll])
+    AC_SUBST([DBUS_VER_FILE_TYPE], [VFT_DLL])
+    AS_IF([test -z "$RC"],
+        [AC_MSG_ERROR([An implementation of windres is required])])
+    if test "$dbus_wince" = yes; then
+      AC_DEFINE(DBUS_WINCE,1,[Defined if we run on a W32 CE API based system])
+      AC_DEFINE(_WIN32_WCE, 0x0502, [Defined to get newer W32 CE APIs])
+    else
+      AC_DEFINE([_WIN32_WINNT], [0x0600],
+        [Define to the minimum supported Windows version (0x0600 is Vista)])
+    fi
+else
+    AC_DEFINE(DBUS_UNIX,1,[Defined if we run on a Unix-based system])
+fi
+if test "$dbus_cygwin" = yes; then
+    AC_DEFINE(DBUS_CYGWIN,1,[Defined if we run on a cygwin API based system])
+fi
+
+# For best security, assume that all non-Windows platforms can do
+# credentials-passing.
+AS_IF([test "$dbus_win" = yes],
+    [DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL="<!--<auth>EXTERNAL</auth>-->"],
+    [DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL="<auth>EXTERNAL</auth>"])
+AC_SUBST([DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL])
+
+AM_CONDITIONAL(DBUS_WIN, test "$dbus_win" = yes)
+AM_CONDITIONAL(DBUS_WINCE, test "$dbus_wince" = yes)
+AM_CONDITIONAL(DBUS_UNIX, test "$dbus_unix" = yes)
+AM_CONDITIONAL(DBUS_CYGWIN, test "$dbus_cygwin" = yes)
+
+DBUS_STATIC_BUILD_CPPFLAGS=
+if test "x$enable_shared" = xno; then
+    # On Windows, linking against the static library requires special effort
+    # to turn off DLL import/export processing. We normally link some things
+    # against the dynamic library, but if we're not building that, we'll
+    # have to link everything statically.
+    DBUS_STATIC_BUILD_CPPFLAGS=-DDBUS_STATIC_BUILD
+fi
+AC_SUBST([DBUS_STATIC_BUILD_CPPFLAGS])
+
+AC_ARG_ENABLE(ansi, AS_HELP_STRING([--enable-ansi],[enable -ansi -pedantic gcc flags]),enable_ansi=$enableval,enable_ansi=no)
+AC_ARG_ENABLE(verbose-mode, AS_HELP_STRING([--enable-verbose-mode],[support verbose debug mode]),enable_verbose_mode=$enableval,enable_verbose_mode=$enable_developer)
+AC_ARG_ENABLE(asserts, AS_HELP_STRING([--enable-asserts],[include assertion checks]),enable_asserts=$enableval,enable_asserts=$enable_developer)
+AC_ARG_ENABLE(checks, AS_HELP_STRING([--enable-checks],[include sanity checks on public API]),enable_checks=$enableval,enable_checks=yes)
+AC_ARG_ENABLE(xml-docs, AS_HELP_STRING([--enable-xml-docs],[build XML documentation (requires xmlto)]),enable_xml_docs=$enableval,enable_xml_docs=auto)
+AC_ARG_ENABLE(doxygen-docs, AS_HELP_STRING([--enable-doxygen-docs],[build DOXYGEN documentation (requires Doxygen)]),enable_doxygen_docs=$enableval,enable_doxygen_docs=auto)
+AC_ARG_ENABLE([ducktype-docs],
+              AS_HELP_STRING([--enable-ducktype-docs],
+                             [build Ducktype documentation (requires Ducktype)]),
+              [enable_ducktype_docs=$enableval], [enable_ducktype_docs=auto])
+AC_ARG_ENABLE(selinux, AS_HELP_STRING([--enable-selinux],[build with SELinux support]),enable_selinux=$enableval,enable_selinux=auto)
+AC_ARG_ENABLE([apparmor],
+  [AS_HELP_STRING([--enable-apparmor], [build with AppArmor support])],
+  [enable_apparmor=$enableval],
+  [enable_apparmor=auto])
+AC_ARG_ENABLE(libaudit,AS_HELP_STRING([--enable-libaudit],[build audit daemon support for SELinux]),enable_libaudit=$enableval,enable_libaudit=auto)
+AC_ARG_ENABLE(inotify, AS_HELP_STRING([--enable-inotify],[build with inotify support (linux only)]),enable_inotify=$enableval,enable_inotify=auto)
+AC_ARG_ENABLE(kqueue, AS_HELP_STRING([--enable-kqueue],[build with kqueue support]),enable_kqueue=$enableval,enable_kqueue=auto)
+AC_ARG_ENABLE(console-owner-file, AS_HELP_STRING([--enable-console-owner-file],[enable console owner file]),enable_console_owner_file=$enableval,enable_console_owner_file=auto)
+AC_ARG_ENABLE(launchd, AS_HELP_STRING([--enable-launchd],[build with launchd auto-launch support]),enable_launchd=$enableval,enable_launchd=auto)
+AC_ARG_ENABLE(systemd, AS_HELP_STRING([--enable-systemd],[build with systemd at_console support]),enable_systemd=$enableval,enable_systemd=auto)
+AC_ARG_ENABLE(elogind, AS_HELP_STRING([--enable-elogind],[build with elogind user seat support]),enable_elogind=$enableval,enable_elogind=auto)
+AC_ARG_ENABLE(traditional-activation, AS_HELP_STRING([--disable-traditional-activation], [Do not build support for service activation without using SystemdService]), enable_traditional_activation="$enableval", enable_traditional_activation=yes)
+
+AC_ARG_WITH(session-socket-dir, AS_HELP_STRING([--with-session-socket-dir=[dirname]],[Where to put sockets for the per-login-session message bus]))
+AC_ARG_WITH(test-socket-dir, AS_HELP_STRING([--with-test-socket-dir=[dirname]],[Where to put sockets for make check]))
+AC_ARG_WITH(system-pid-file, AS_HELP_STRING([--with-system-pid-file=[pidfile]],[PID file for systemwide daemon]))
+AC_ARG_WITH(system-socket, AS_HELP_STRING([--with-system-socket=[filename]],[UNIX domain socket for systemwide daemon]))
+AC_ARG_WITH(console-auth-dir, AS_HELP_STRING([--with-console-auth-dir=[dirname]],[directory to check for console ownerhip]))
+AC_ARG_WITH(console-owner-file, AS_HELP_STRING([--with-console-owner-file=[filename]],[file whose owner determines current console owner]))
+AC_ARG_WITH(launchd-agent-dir, AS_HELP_STRING([--with-launchd-agent-dir=[dirname]],[directory to put the launchd agent (default: /Library/LaunchAgents)]))
+AC_ARG_WITH(dbus_user, AS_HELP_STRING([--with-dbus-user=<user>],[User for running the DBUS daemon (messagebus)]))
+AC_ARG_WITH([test_user],
+  [AS_HELP_STRING([--with-test-user=<user>],
+    [Unprivileged user for regression tests, other than root and the dbus_user (default: nobody)])])
+AC_ARG_WITH(dbus_daemondir, AS_HELP_STRING([--with-dbus-daemondir=[dirname]],[Directory for installing the DBUS daemon]))
+
+AC_ARG_ENABLE([embedded-tests],
+  AS_HELP_STRING([--enable-embedded-tests],
+    [enable unit test code in the library and binaries]),
+  [], [enable_embedded_tests=$enable_developer])
+AC_ARG_ENABLE([modular-tests],
+  AS_HELP_STRING([--enable-modular-tests],
+    [enable modular regression tests (requires GLib)]),
+  [], [enable_modular_tests=auto])
+# --enable-tests overrides both --enable-embedded-tests and
+# --enable-modular-tests
+AC_ARG_ENABLE([tests],
+  AS_HELP_STRING([--enable-tests],
+    [enable/disable all tests, overriding embedded-tests/modular-tests]),
+  [
+  if test "x$enableval" = xyes; then
+    AC_MSG_NOTICE([Full test coverage was requested with --enable-tests=yes])
+    AC_MSG_NOTICE([This requires GLib])
+  fi
+  enable_embedded_tests=$enableval
+  enable_modular_tests=$enableval
+  ],
+  [])
+
+# DBUS_ENABLE_EMBEDDED_TESTS controls unit tests built in to .c files
+# and also some stuff in the test/ subdir.
+AM_CONDITIONAL([DBUS_ENABLE_EMBEDDED_TESTS],
+  [test "x$enable_embedded_tests" = xyes])
+if test "x$enable_embedded_tests" = xyes; then
+    AC_DEFINE([DBUS_ENABLE_EMBEDDED_TESTS], [1],
+      [Define to build test code into the library and binaries])
+fi
+
+# DBUS_ENABLE_MODULAR_TESTS controls tests that work based on public API.
+# These use GTest, from GLib, because life's too short. They're enabled by
+# default (unless you don't have GLib), because they don't bloat the library
+# or binaries.
+
+dnl Don't do anything too subtle here, because the CMake build system
+dnl parses these lines with regular expressions. If necessary, adjust
+dnl cmake/modules/MacrosAutotools.cmake to compensate.
+AC_DEFINE([GLIB_VERSION_MIN_REQUIRED], [GLIB_VERSION_2_38], [Ignore post-2.38 deprecations])
+AC_DEFINE([GLIB_VERSION_MAX_ALLOWED], [G_ENCODE_VERSION(2,44)], [Prevent post-2.44 APIs])
+
+with_glib=yes
+
+AS_IF([test "x$enable_modular_tests" != xno],
+  [
+  PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.40, gio-2.0 >= 2.40],
+    [
+      AS_IF([test "x$dbus_unix" = xyes],
+        [PKG_CHECK_MODULES([GIO_UNIX], [gio-unix-2.0],
+           [AC_DEFINE([HAVE_GIO_UNIX], [1], [Define if you have gio-unix-2.0])], [])])
+    ],
+    [if test "x$enable_modular_tests" = xyes; then
+      AC_MSG_NOTICE([Full test coverage (--enable-modular-tests=yes or --enable-tests=yes) requires GLib])
+      AC_MSG_ERROR([$GLIB_ERRORS])
+    else # assumed to be "auto"
+      with_glib=no
+    fi])
+  ],
+  [with_glib=no])
+
+if test "x$enable_modular_tests" != xno; then
+  AC_DEFINE([DBUS_ENABLE_MODULAR_TESTS], [1],
+    [Define to build independent test binaries])
+fi
+AM_CONDITIONAL([DBUS_ENABLE_MODULAR_TESTS],
+  [test "x$enable_modular_tests" != xno])
+
+if test "x$with_glib" != xno; then
+  AC_DEFINE([DBUS_WITH_GLIB], [1],
+    [Define if GLib, GObject, GIO are available])
+fi
+AM_CONDITIONAL([DBUS_WITH_GLIB], [test "x$with_glib" != xno])
+
+AC_ARG_ENABLE([installed-tests],
+  AS_HELP_STRING([--enable-installed-tests],
+    [enable unit test code in the library and binaries]),
+  [], [enable_installed_tests=no])
+AM_CONDITIONAL([DBUS_ENABLE_INSTALLED_TESTS],
+  [test "x$enable_installed_tests" = xyes])
+
+if test x$enable_verbose_mode = xyes; then
+    AC_DEFINE(DBUS_ENABLE_VERBOSE_MODE,1,[Support a verbose mode])
+fi
+
+dnl Intentional:
+dnl - $DISABLE_WARNINGS disables unused-label warnings if not
+dnl   checking or not asserting (tested further below)
+dnl - missing field initializers being 0 is a C feature, not a bug
+dnl - unused-parameter is to make writing callbacks less annoying
+DISABLE_WARNINGS="$DISABLE_WARNINGS
+                  -Wno-missing-field-initializers
+                  -Wno-unused-parameter"
+
+if test x$enable_asserts = xno; then
+    AC_DEFINE(DBUS_DISABLE_ASSERT,1,[Disable assertion checking])
+    DISABLE_WARNINGS="$DISABLE_WARNINGS -Wno-unused-label"
+    R_DYNAMIC_LDFLAG=""
+    if test x$enable_embedded_tests = xyes; then
+        DISABLE_WARNINGS="$DISABLE_WARNINGS
+                          -Wno-unused-but-set-variable
+                          -Wno-unused-variable
+                          -Wno-unused-function"
+    fi
+else
+    # -rdynamic is needed for glibc's backtrace_symbols to work.
+    # No clue how much overhead this adds, but it's useful
+    # to do this on any assertion failure,
+    # so for now it's enabled anytime asserts are (currently not
+    # in production builds).
+
+    # To get -rdynamic you pass -export-dynamic to libtool.
+    AC_DEFINE(DBUS_BUILT_R_DYNAMIC,1,[whether -export-dynamic was passed to libtool])
+    R_DYNAMIC_LDFLAG=-export-dynamic
+fi
+AC_SUBST(R_DYNAMIC_LDFLAG)
+
+if test x$enable_checks = xno; then
+    AC_DEFINE(DBUS_DISABLE_CHECKS,1,[Disable public API sanity checking])
+    AC_DEFINE(G_DISABLE_CHECKS,1,[Disable GLib public API sanity checking])
+    DISABLE_WARNINGS="$DISABLE_WARNINGS -Wno-unused-label"
+fi
+
+AH_BOTTOM([
+/* explicitly define these macros to get less confusing conditions */
+#ifndef DBUS_DISABLE_ASSERT
+#  define DBUS_ENABLE_ASSERT 1
+#endif
+#ifndef DBUS_DISABLE_CHECKS
+#  define DBUS_ENABLE_CHECKS 1
+#endif])
+
+# Test for code-coverage tools if --enable-code-coverage
+AX_CODE_COVERAGE
+
+AS_IF([test x$enable_code_coverage = xyes],[
+    AC_DEFINE_UNQUOTED(
+      [DBUS_GCOV_ENABLED], [1],
+      [Defined if gcov is enabled to force a rebuild due to config.h changing])
+  ])
+
+#### Simple checks for things with no special dependencies
+
+# This construct is only suitable for functions that are in the system's
+# standard C library and do not have unusual dependencies. Other
+# functions need their own checks. Please keep sorted in LC_ALL=C order
+AC_CHECK_FUNCS_ONCE([
+accept4
+clearenv
+fpathconf
+getgrouplist
+getpeereid
+getpeerucred
+getrandom
+getresuid
+getrlimit
+inotify_init1
+issetugid
+localeconv
+nanosleep
+pipe2
+poll
+prctl
+prlimit
+raise
+setenv
+setlocale
+setresuid
+setrlimit
+socketpair
+strtoll
+strtoull
+unsetenv
+usleep
+])
+
+# This construct is only suitable for headers that are self-contained
+# and do not require extra headers to be included first. More complex
+# headers need their own checks. Please keep sorted in LC_ALL=C order
+AC_CHECK_HEADERS_ONCE([
+alloca.h
+byteswap.h
+crt_externs.h
+dirent.h
+errno.h
+locale.h
+signal.h
+stdint.h
+sys/prctl.h
+sys/random.h
+sys/resource.h
+sys/syslimits.h
+sys/time.h
+unistd.h
+ws2tcpip.h
+])
+
+#### Integer sizes
+
+AC_CHECK_SIZEOF(char)
+AC_CHECK_SIZEOF(short)
+AC_CHECK_SIZEOF(long)
+AC_CHECK_SIZEOF(int)
+AC_CHECK_SIZEOF(void *)
+AC_CHECK_SIZEOF(long long)
+AC_CHECK_SIZEOF(__int64)
+
+### See what our 64 bit type is called
+AC_MSG_CHECKING([64-bit integer type])
+
+case 8 in
+$ac_cv_sizeof_int)
+  dbusint64=int
+  dbusint64_constant='(val)'
+  dbusuint64_constant='(val)'
+  ;;
+$ac_cv_sizeof_long)
+  dbusint64=long
+  dbusint64_constant='(val##L)'
+  dbusuint64_constant='(val##UL)'
+  ;;
+$ac_cv_sizeof_long_long)
+  dbusint64='long long'
+  dbusint64_constant='(val##LL)'
+  dbusuint64_constant='(val##ULL)'
+  ;;
+$ac_cv_sizeof___int64)
+  dbusint64=__int64
+  dbusint64_constant='(val##i64)'
+  dbusuint64_constant='(val##ui64)'
+  ;;
+esac
+
+AS_IF(
+  [test -z "$dbusint64"],
+  [AC_MSG_RESULT([not found])
+  AC_MSG_ERROR([Could not find a 64-bit integer type.
+
+Please report a bug here with details of your platform and compiler:
+
+    http://bugs.freedesktop.org/enter_bug.cgi?product=DBus&component=core])
+  ],
+  dnl else
+  [
+        DBUS_INT64_TYPE="$dbusint64"
+        DBUS_INT64_CONSTANT="$dbusint64_constant"
+        DBUS_UINT64_CONSTANT="$dbusuint64_constant"
+        AC_MSG_RESULT($DBUS_INT64_TYPE)
+  ])
+
+AC_SUBST(DBUS_INT64_TYPE)
+AC_SUBST(DBUS_INT64_CONSTANT)
+AC_SUBST(DBUS_UINT64_CONSTANT)
+
+### see what 32-bit int is called
+AC_MSG_CHECKING([32-bit integer type])
+
+case 4 in
+$ac_cv_sizeof_short)
+  dbusint32=short
+  ;;
+$ac_cv_sizeof_int)
+  dbusint32=int
+  ;;
+$ac_cv_sizeof_long)
+  dbusint32=long
+  ;;
+esac
+
+if test -z "$dbusint32" ; then
+        DBUS_INT32_TYPE="no_int32_type_detected"
+        AC_MSG_ERROR([No 32-bit integer type found])
+else
+        DBUS_INT32_TYPE="$dbusint32"
+        AC_MSG_RESULT($DBUS_INT32_TYPE)
+fi
+
+AC_SUBST(DBUS_INT32_TYPE)
+
+### see what 16-bit int is called
+AC_MSG_CHECKING([16-bit integer type])
+
+case 2 in
+$ac_cv_sizeof_short)
+  dbusint16=short
+  ;;
+$ac_cv_sizeof_int)
+  dbusint16=int
+  ;;
+esac
+
+if test -z "$dbusint16" ; then
+        DBUS_INT16_TYPE="no_int16_type_detected"
+        AC_MSG_ERROR([No 16-bit integer type found])
+else
+        DBUS_INT16_TYPE="$dbusint16"
+        AC_MSG_RESULT($DBUS_INT16_TYPE)
+fi
+
+AC_SUBST(DBUS_INT16_TYPE)
+
+## byte order
+case $host_os in
+	darwin*)
+		# check at compile-time, so that it is possible to build universal
+		# (with multiple architectures at once on the compile line)
+		AH_VERBATIM([WORDS_BIGENDIAN_DARWIN], [
+			/* Use the compiler-provided endianness defines to allow universal compiling. */
+			#if defined(__BIG_ENDIAN__)
+			#define WORDS_BIGENDIAN 1
+			#endif
+		])
+		;;
+	*)
+		AC_C_BIGENDIAN
+		;;
+esac
+
+# As a GNU extension, glibc declares environ in unistd.h, which is one of
+# the AC_INCLUDES_DEFAULT.
+AC_CHECK_DECLS([environ])
+
+dnl **********************************
+dnl *** va_copy checks (from GLib) ***
+dnl **********************************
+dnl we currently check for all three va_copy possibilities, so we get
+dnl all results in config.log for bug reports.
+AC_CACHE_CHECK([for an implementation of va_copy()],dbus_cv_va_copy,[
+	AC_LINK_IFELSE([AC_LANG_SOURCE([#include <stdarg.h>
+#include <stdlib.h>
+	static void f (int i, ...) {
+	va_list args1, args2;
+	va_start (args1, i);
+	va_copy (args2, args1);
+	if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
+	  exit (1);
+	va_end (args1); va_end (args2);
+	}
+	int main() {
+	  f (0, 42);
+	  return 0;
+	}])],
+	[dbus_cv_va_copy=yes],
+	[dbus_cv_va_copy=no])
+])
+AC_CACHE_CHECK([for an implementation of __va_copy()],dbus_cv___va_copy,[
+	AC_LINK_IFELSE([AC_LANG_SOURCE([#include <stdarg.h>
+#include <stdlib.h>
+	static void f (int i, ...) {
+	va_list args1, args2;
+	va_start (args1, i);
+	__va_copy (args2, args1);
+	if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
+	  exit (1);
+	va_end (args1); va_end (args2);
+	}
+	int main() {
+	  f (0, 42);
+	  return 0;
+	}])],
+	[dbus_cv___va_copy=yes],
+	[dbus_cv___va_copy=no])
+])
+
+if test "x$dbus_cv_va_copy" = "xyes"; then
+  dbus_va_copy_func=va_copy
+else if test "x$dbus_cv___va_copy" = "xyes"; then
+  dbus_va_copy_func=__va_copy
+fi
+fi
+
+AS_IF([test -n "$dbus_va_copy_func"],
+  [AC_DEFINE_UNQUOTED([DBUS_VA_COPY], [$dbus_va_copy_func], [A 'va_copy' style function])],
+  [AC_MSG_ERROR([dbus requires an ISO C99-compatible va_copy() macro, or a compatible __va_copy(), or MSVC >= 2010 and CMake])])
+
+#### Atomic integers
+
+AC_CACHE_CHECK([whether $CC knows __sync_sub_and_fetch()],
+  dbus_cv_sync_sub_and_fetch,
+  [AC_LINK_IFELSE([
+     AC_LANG_PROGRAM([[]], [[int a = 4; int b = __sync_sub_and_fetch(&a, 4); exit(b); ]])],
+     [dbus_cv_sync_sub_and_fetch=yes],
+     [dbus_cv_sync_sub_and_fetch=no])
+  ])
+
+if test "x$dbus_cv_sync_sub_and_fetch" = "xyes" ; then
+   have_sync=1
+else
+   have_sync=0
+fi
+
+AC_DEFINE_UNQUOTED([DBUS_USE_SYNC], [$have_sync], [Use the gcc __sync extension])
+
+#### Various functions
+AC_SEARCH_LIBS(socket,[socket network])
+AC_CHECK_FUNC(gethostbyname,,[AC_CHECK_LIB(nsl,gethostbyname)])
+
+AC_CHECK_HEADERS([syslog.h])
+if test "x$ac_cv_header_syslog_h" = "xyes"; then
+  AC_CHECK_DECLS([LOG_PERROR], [], [], [[#include <syslog.h>]])
+fi
+
+AC_MSG_CHECKING(for dirfd)
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <dirent.h>
+]], [[
+DIR *dirp;
+dirp = opendir(".");
+dirfd(dirp);
+closedir(dirp);
+]])],
+[dbus_have_dirfd=yes],
+[dbus_have_dirfd=no])
+AC_MSG_RESULT($dbus_have_dirfd)
+if test "$dbus_have_dirfd" = yes; then
+	AC_DEFINE(HAVE_DIRFD,1,[Have dirfd function])
+else
+	AC_MSG_CHECKING(for DIR *dirp->dd_fd)
+	AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <dirent.h>
+	]], [[
+DIR *dirp;
+int fd;
+dirp = opendir(".");
+fd = dirp->dd_fd;
+closedir(dirp);
+        ]])],
+        [dbus_have_ddfd=yes],
+        [dbus_have_ddfd=no])
+	AC_MSG_RESULT($dbus_have_ddfd)
+	if test "$dbus_have_ddfd" = yes; then
+		AC_DEFINE(HAVE_DDFD,1,[Have the ddfd member of DIR])
+	fi
+fi
+
+AC_CHECK_HEADERS([execinfo.h],
+	[AC_SEARCH_LIBS([backtrace], [execinfo],
+		[AC_DEFINE([HAVE_BACKTRACE], [1],
+			[Define to 1 if you have backtrace().])])])
+
+# Add -D_POSIX_PTHREAD_SEMANTICS if on Solaris
+#
+case $host_os in
+    solaris*)
+       CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS" ;;
+esac
+
+AC_CHECK_FUNCS_ONCE([getpwnam_r])
+
+dnl check for socklen_t
+AC_MSG_CHECKING(whether socklen_t is defined)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
+]], [[
+socklen_t foo;
+foo = 1;
+]])],
+[dbus_have_socklen_t=yes],
+[dbus_have_socklen_t=no])
+AC_MSG_RESULT($dbus_have_socklen_t)
+
+if test "x$dbus_have_socklen_t" = "xyes"; then
+    AC_DEFINE(HAVE_SOCKLEN_T,1,[Have socklen_t type])
+fi
+
+dnl check for writev header and writev function so we're
+dnl good to go if HAVE_WRITEV gets defined.
+AC_CHECK_HEADERS(sys/uio.h, [AC_CHECK_FUNCS(writev)])
+
+dnl Make it easy to check if we have MSG_NOSIGNAL without actually having to include sys/socket.h
+AC_CHECK_DECLS([MSG_NOSIGNAL], [], [], [[ #include <sys/types.h>
+#include <sys/socket.h> ]])
+
+dnl Check for various credentials.
+AC_MSG_CHECKING(for struct cmsgcred)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <sys/socket.h>
+]], [[
+struct cmsgcred cred;
+
+cred.cmcred_pid = 0;
+]])],
+[dbus_have_struct_cmsgcred=yes],
+[dbus_have_struct_cmsgcred=no])
+AC_MSG_RESULT($dbus_have_struct_cmsgcred)
+
+if test x$dbus_have_struct_cmsgcred = xyes; then
+    AC_DEFINE(HAVE_CMSGCRED,1,[Have cmsgcred structure])
+fi
+
+AC_CHECK_MEMBER([struct unpcbid.unp_pid],
+                [AC_DEFINE([HAVE_UNPCBID], 1, [Have unpcbid structure])],
+                [],
+                [[#include <sys/un.h>]])
+
+PKG_CHECK_MODULES([EXPAT], [expat])
+
+save_cflags="$CFLAGS"
+save_libs="$LIBS"
+CFLAGS="$CFLAGS $EXPAT_CFLAGS"
+LIBS="$LIBS $EXPAT_LIBS"
+AC_CHECK_FUNCS([XML_SetHashSalt])
+CFLAGS="$save_cflags"
+LIBS="$save_libs"
+
+# Thread lib detection
+AC_ARG_VAR([THREAD_LIBS])
+save_libs="$LIBS"
+LIBS="$LIBS $THREAD_LIBS"
+
+is_missing_pthread_function="is required when compiling D-Bus on Unix platforms, but is not in your libc or libpthread. Please open a bug on https://bugs.freedesktop.org/enter_bug.cgi?product=dbus with details of your platform."
+
+# Don't do these automatic checks if the user set THREAD_LIBS on the
+# configure command-line. If they did, we assume they're right.
+#
+# We also don't do these checks on Windows, because you don't need magical
+# linker flags to have threading support there.
+AS_IF([test "x$dbus_unix" = xyes && test "x$THREAD_LIBS" = x],
+  [
+    # Mandatory pthread functions. In principle, some of these could be made
+    # optional if there are platforms that don't have them.
+    #
+    # Currently, we only look in -lpthread.
+    # In principle we might need to look in -lpthreads, -lthreads, ...
+    # as well - please file a bug if your platform needs this.
+    AC_SEARCH_LIBS([pthread_cond_timedwait],
+        [pthread],
+        [THREAD_LIBS="$LIBS"],
+        [AC_MSG_ERROR([pthread_cond_timedwait $is_missing_pthread_function])],
+        [])
+    AC_SEARCH_LIBS([pthread_mutexattr_init],
+        [pthread],
+        [THREAD_LIBS="$LIBS"],
+        [AC_MSG_ERROR([pthread_mutexattr_init $is_missing_pthread_function])],
+        [])
+    AC_SEARCH_LIBS([pthread_mutexattr_settype],
+        [pthread],
+        [THREAD_LIBS="$LIBS"],
+        [AC_MSG_ERROR([pthread_mutexattr_settype $is_missing_pthread_function])],
+        [])
+
+    # Optional, for monotonic clocks. Because it's optional, this check
+    # is non-fatal if we don't find it.
+    AC_SEARCH_LIBS([pthread_condattr_setclock],
+        [pthread],
+        [THREAD_LIBS="$LIBS"])
+
+    AS_IF([test "x$ac_cv_search_pthread_condattr_setclock" != xno],
+      [
+        AC_SEARCH_LIBS([clock_getres], [rt], [THREAD_LIBS="$LIBS"])
+        AC_MSG_CHECKING([for CLOCK_MONOTONIC])
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+[[#include <time.h>
+#include <pthread.h>
+]], [[
+struct timespec monotonic_timer;
+pthread_condattr_t attr;
+pthread_condattr_init (&attr);
+pthread_condattr_setclock (&attr, CLOCK_MONOTONIC);
+clock_getres (CLOCK_MONOTONIC,&monotonic_timer);
+]])],
+            [have_clock_monotonic=true],
+            [have_clock_monotonic=false])
+        AS_IF([test x$have_clock_monotonic = xtrue],
+	  [
+            AC_MSG_RESULT([found])
+            AC_DEFINE(HAVE_MONOTONIC_CLOCK, 1, [Define if we have CLOCK_MONOTONIC])
+	  ],
+          [AC_MSG_RESULT([not found])])
+      ]) dnl have pthread_condattr_setclock
+  ]) dnl on Unix
+
+LIBS="$save_libs"
+
+AC_SUBST([THREAD_LIBS])
+
+# SELinux detection
+if test x$enable_selinux = xno ; then
+    have_selinux=no;
+else
+    # See if we have SELinux library
+    PKG_CHECK_MODULES([SELINUX], [libselinux >= 2.0.86],
+                 [have_selinux=yes], [have_selinux=no])
+
+    if test x$enable_selinux = xauto ; then
+        if test x$have_selinux = xno ; then
+                AC_MSG_WARN([Sufficiently new SELinux library not found])
+        fi
+    else
+        if test x$have_selinux = xno ; then
+                AC_MSG_ERROR([SElinux explicitly required, and SELinux library not found])
+        fi
+    fi
+fi
+
+AM_CONDITIONAL(HAVE_SELINUX, test x$have_selinux = xyes)
+
+if test x$have_selinux = xyes ; then
+    # the selinux code creates threads
+    # which requires libpthread even on linux
+    AC_CHECK_FUNC(pthread_create,,[AC_CHECK_LIB(pthread,pthread_create,
+                                                [SELINUX_THREAD_LIBS="-lpthread"])])
+
+    SELINUX_LIBS="$SELINUX_LIBS $SELINUX_THREAD_LIBS"
+    AC_DEFINE(HAVE_SELINUX,1,[SELinux support])
+else
+    SELINUX_LIBS=
+fi
+
+# AppArmor detection
+AS_IF([test x$enable_apparmor = xno],
+  [have_apparmor=no],
+  [
+  PKG_CHECK_MODULES([APPARMOR], [libapparmor >= 2.8.95],
+                    [have_apparmor=yes], [have_apparmor=no])
+  PKG_CHECK_MODULES([APPARMOR_2_10], [libapparmor >= 2.10],
+                    [have_apparmor_2_10=yes], [have_apparmor_2_10=no])
+
+  AS_IF([test x$enable_apparmor = xauto && test x$have_apparmor = xno],
+        [AC_MSG_WARN([Sufficiently new AppArmor library not found])])
+  AS_IF([test x$enable_apparmor != xauto && test x$have_apparmor = xno],
+        [AC_MSG_ERROR([AppArmor explicitly required, and AppArmor library not found])])
+  ])
+
+AS_IF([test x$have_apparmor = xyes],
+      [AC_DEFINE([HAVE_APPARMOR], [1], [AppArmor Support])])
+AS_IF([test x$have_apparmor_2_10 = xyes],
+      [AC_DEFINE([HAVE_APPARMOR_2_10], [1],
+                 [Define if libapparmor is version 2.10 or later])])
+
+# inotify checks
+if test x$enable_inotify = xno ; then
+    have_inotify=no;
+else
+    AC_CHECK_HEADERS(sys/inotify.h, have_inotify=yes, have_inotify=no)
+fi
+
+dnl check if inotify backend is enabled
+if test x$have_inotify = xyes; then
+   AC_DEFINE(DBUS_BUS_ENABLE_INOTIFY,1,[Use inotify])
+fi
+
+AM_CONDITIONAL(DBUS_BUS_ENABLE_INOTIFY, test x$have_inotify = xyes)
+
+# For simplicity, we require the userland API for epoll_create1 at
+# compile-time (glibc 2.9), but we'll run on kernels that turn out
+# not to have it at runtime.
+AC_ARG_ENABLE([epoll],
+              [AS_HELP_STRING([--enable-epoll],[use epoll(4) on Linux])],
+              [enable_epoll=$enableval], [enable_epoll=auto])
+if test x$enable_epoll = xno; then
+    have_linux_epoll=no
+else
+    AC_MSG_CHECKING([for Linux epoll(4)])
+    AC_LINK_IFELSE([AC_LANG_PROGRAM(
+        [
+        #ifndef __linux__
+        #error This is not Linux
+        #endif
+        #include <sys/epoll.h>
+        ],
+        [epoll_create1 (EPOLL_CLOEXEC);])],
+        [have_linux_epoll=yes],
+        [have_linux_epoll=no])
+    AC_MSG_RESULT([$have_linux_epoll])
+fi
+if test x$enable_epoll,$have_linux_epoll = xyes,no; then
+    AC_MSG_ERROR([epoll support explicitly enabled but not available])
+fi
+if test x$have_linux_epoll = xyes; then
+  AC_DEFINE([DBUS_HAVE_LINUX_EPOLL], 1, [Define to use epoll(4) on Linux])
+fi
+AM_CONDITIONAL([DBUS_HAVE_LINUX_EPOLL], [test x$have_linux_epoll = xyes])
+
+# kqueue checks
+if test x$enable_kqueue = xno ; then
+    have_kqueue=no
+else
+    have_kqueue=yes
+    AC_CHECK_HEADER(sys/event.h, , have_kqueue=no)
+    AC_CHECK_FUNC(kqueue, , have_kqueue=no)
+
+    if test x$enable_kqueue = xyes -a x$have_kqueue = xno; then
+        AC_MSG_ERROR(kqueue support explicitly enabled but not available)
+    fi
+fi
+
+dnl check if kqueue backend is enabled
+if test x$have_kqueue = xyes; then
+   AC_DEFINE(DBUS_BUS_ENABLE_KQUEUE,1,[Use kqueue])
+fi
+
+AM_CONDITIONAL(DBUS_BUS_ENABLE_KQUEUE, test x$have_kqueue = xyes)
+
+# launchd checks
+if test x$enable_launchd = xno ; then
+    have_launchd=no
+else
+    have_launchd=yes
+    AC_CHECK_HEADER([launch.h], , have_launchd=no)
+    AC_PATH_PROG([LAUNCHCTL], [launchctl])
+    if test "x$LAUNCHCTL" = "x"; then
+        have_launchd=no
+    fi
+
+    if test x$enable_launchd = xyes && test x$have_launchd = xno ; then
+        AC_MSG_ERROR([launchd support explicitly enabled but not available])
+    fi
+fi
+
+dnl check if launchd is enabled
+if test x$have_launchd = xyes; then
+    AC_DEFINE(DBUS_ENABLE_LAUNCHD,1,[Use launchd autolaunch])
+fi
+
+AM_CONDITIONAL(DBUS_ENABLE_LAUNCHD, test x$have_launchd = xyes)
+
+#### Directory to place launchd agent file
+if test "x$with_launchd_agent_dir" = "x"; then
+   LAUNCHD_AGENT_DIR="/Library/LaunchAgents"
+else
+   LAUNCHD_AGENT_DIR="$with_launchd_agent_dir"
+fi
+
+AC_SUBST(LAUNCHD_AGENT_DIR)
+
+dnl console owner file
+if test x$enable_console_owner_file = xno ; then
+    have_console_owner_file=no;
+else
+    case $host_os in
+    solaris*)
+        have_console_owner_file=yes;
+        AC_DEFINE(HAVE_CONSOLE_OWNER_FILE,1,[Have console owner file])
+        ;;
+    *)
+        have_console_owner_file=no;;
+    esac
+fi
+
+AM_CONDITIONAL(HAVE_CONSOLE_OWNER_FILE, test x$have_console_owner_file = xyes)
+
+dnl elogind detection
+if test x$enable_elogind = xno ; then
+    have_elogind=no;
+else
+    PKG_CHECK_MODULES([ELOGIND],
+        [libelogind >= 209],
+        [have_elogind=yes],
+        [have_elogind=no])
+fi
+
+if test x$have_elogind = xyes; then
+    AC_DEFINE(HAVE_ELOGIND,1,[Have elogind])
+fi
+
+if test x$enable_elogind = xyes -a x$have_elogind != xyes ; then
+    AC_MSG_ERROR([Explicitly requested elogind support, but libelogind not found])
+fi
+
+dnl systemd detection
+if test x$enable_systemd = xno ; then
+    have_systemd=no;
+else
+    PKG_CHECK_MODULES([SYSTEMD],
+        [libsystemd >= 209],
+        [have_systemd=yes],
+        [PKG_CHECK_MODULES([SYSTEMD],
+            [libsystemd-login >= 32, libsystemd-daemon >= 32, libsystemd-journal >= 32],
+            [have_systemd=yes],
+            [have_systemd=no])])
+fi
+
+if test x$have_systemd = xyes; then
+    AC_DEFINE(HAVE_SYSTEMD,1,[Have systemd])
+fi
+
+if test x$enable_systemd = xyes -a x$have_systemd != xyes ; then
+    AC_MSG_ERROR([Explicitly requested systemd support, but systemd not found])
+fi
+
+AS_IF([test "x$enable_traditional_activation" = xyes],
+    AC_DEFINE(ENABLE_TRADITIONAL_ACTIVATION,[1], [Enable traditional activation without using systemd])
+    AS_IF([test "x$enable_systemd" = xno],
+       AC_MSG_WARN([Traditional activation and systemd activation are both disabled, so service activation (automatically starting services that receive messages) will not work])))
+
+AM_CONDITIONAL(ENABLE_TRADITIONAL_ACTIVATION, test x$enable_traditional_activation = xyes)
+
+# If not found in $PATH, we might still have systemd and systemctl at runtime
+# (perhaps dbus is being compiled in a minimal chroot with no systemd).
+# Assume the upstream-recommended location. Distributors with split /usr
+# can override this with ./configure SYSTEMCTL=/bin/systemctl
+AC_PATH_PROG([SYSTEMCTL], [systemctl], [/usr/bin/systemctl])
+
+# libaudit detection
+if test x$enable_libaudit = xno ; then
+    have_libaudit=no;
+else
+    # See if we have audit daemon & capabilities library
+    AC_CHECK_LIB(audit, audit_log_user_avc_message,
+                 have_libaudit=yes, have_libaudit=no)
+    if test x$have_libaudit = xyes ; then
+        AC_CHECK_LIB(cap-ng, capng_clear,
+                 have_libaudit=yes, have_libaudit=no)
+    fi
+fi
+
+AM_CONDITIONAL(HAVE_LIBAUDIT, test x$have_libaudit = xyes)
+
+if test x$have_libaudit = xyes ; then
+    SELINUX_LIBS="$SELINUX_LIBS -laudit -lcap-ng"
+    AC_DEFINE(HAVE_LIBAUDIT,1,[audit daemon SELinux support])
+fi
+
+AC_SUBST([SELINUX_LIBS])
+
+# Check for ADT API (Solaris Basic Security Mode auditing)
+AC_MSG_CHECKING(for ADT API)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <bsm/adt.h>
+adt_user_context = ADT_USER;
+]], [[]])], [ check_adt_audit=yes ], [ check_adt_audit=no ])
+
+if test ${check_adt_audit} = yes
+then
+   AC_DEFINE([HAVE_ADT], [], [Adt audit API])
+   ADT_LIBS="-lbsm"
+   LIBS="-lbsm $LIBS"
+   AC_MSG_RESULT(yes)
+else
+   AC_MSG_RESULT(no)
+fi
+AC_SUBST([ADT_LIBS])
+
+# Check for SCM_RIGHTS
+AC_MSG_CHECKING([for SCM_RIGHTS])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+static int x = SCM_RIGHTS;
+]], [[]])],
+[ AC_MSG_RESULT([supported])
+  AC_DEFINE([HAVE_UNIX_FD_PASSING], [1], [Supports sending UNIX file descriptors]) ],
+[ AC_MSG_RESULT([not supported]) ])
+
+NETWORK_libs=
+if test x$dbus_win = xyes ; then
+  if test x$dbus_wince = xyes ; then
+    NETWORK_libs="-lws2"
+  else
+    NETWORK_libs="-lws2_32 -liphlpapi -ldbghelp"
+  fi
+fi
+
+AC_SUBST([NETWORK_libs])
+
+AC_ARG_WITH([valgrind],
+  [AS_HELP_STRING([--with-valgrind],
+     [Add instrumentation to help valgrind to understand our allocator])],
+  [],
+  [with_valgrind=no])
+
+AS_IF([test "x$with_valgrind" = xauto],
+  [PKG_CHECK_EXISTS([valgrind >= 3.6],
+    [with_valgrind=yes], [with_valgrind=no])])
+
+if test x$with_valgrind != xno; then
+  PKG_CHECK_MODULES([VALGRIND], [valgrind >= 3.6])
+  AC_DEFINE([WITH_VALGRIND], [1], [Define to add Valgrind instrumentation])
+fi
+
+#### Set up final flags
+LIBDBUS_LIBS="$THREAD_LIBS $NETWORK_libs $SYSTEMD_LIBS $ELOGIND_LIBS"
+AC_SUBST([LIBDBUS_LIBS])
+
+### X11 detection
+DBUS_X_LIBS=
+DBUS_X_CFLAGS=
+
+AC_ARG_ENABLE([x11-autolaunch],
+  AS_HELP_STRING([--enable-x11-autolaunch], [build with X11 auto-launch support]),
+  [], [enable_x11_autolaunch=auto])
+
+if test "x$dbus_win" = xyes; then
+    if test "x$enable_x11_autolaunch" = xyes; then
+        AC_MSG_ERROR([X11 auto-launch is not supported on Windows])
+    fi
+
+    enable_x11_autolaunch=no
+    have_x11=no
+else
+    AC_PATH_XTRA
+
+    if test "x$no_x" = xyes; then
+        have_x11=no
+    else
+        have_x11=yes
+        DBUS_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
+        DBUS_X_CFLAGS="$X_CFLAGS"
+    fi
+fi
+
+if test "x$enable_x11_autolaunch,$have_x11" = xyes,no; then
+    AC_MSG_ERROR([X11 auto-launch requires X headers/libraries])
+else
+    # move from "auto" to "yes" or "no" if necessary
+    if test "x$enable_x11_autolaunch" != xno; then
+        enable_x11_autolaunch="$have_x11"
+    fi
+fi
+
+if test "x$have_x11" = xyes ; then
+   AC_DEFINE([DBUS_BUILD_X11], [1], [Define to build X11 functionality])
+fi
+
+if test "x$enable_x11_autolaunch" = xyes ; then
+   AC_DEFINE([DBUS_ENABLE_X11_AUTOLAUNCH], [1], [Define to enable X11 auto-launch])
+fi
+AM_CONDITIONAL([DBUS_ENABLE_X11_AUTOLAUNCH],
+  [test "x$enable_x11_autolaunch" = xyes])
+
+AC_SUBST([DBUS_X_CFLAGS])
+AC_SUBST([DBUS_X_LIBS])
+
+# We're treating -fno-common like a warning: it makes the linker more
+# strict, because on some systems the linker is *always* this strict
+TEST_CFLAGS="$TEST_CFLAGS -fno-common"
+
+AS_IF([test "x$enable_ansi" = "xyes"],[
+    TEST_CFLAGS="$TEST_CFLAGS -ansi -pedantic"
+    AC_DEFINE([_POSIX_C_SOURCE],[199309L],[Define to enable POSIX features])
+    AC_DEFINE([_BSD_SOURCE],[1],[Define to enable BSD features])
+  ])
+
+dnl We are only calling this for its side-effect of setting up
+dnl --enable-compile-warnings; the WARN_CFLAGS, etc. are ignored,
+dnl to work around https://github.com/peti/autoconf-archive/pull/96
+AX_COMPILER_FLAGS([], [], [$disable_developer])
+
+dnl Work around https://github.com/peti/autoconf-archive/pull/96 by using
+dnl a non-default variable name here (in particular there is no way to tell
+dnl AX_COMPILER_FLAGS to not use WARN_CXXFLAGS)
+AX_COMPILER_FLAGS_CFLAGS([EXTRA_CFLAGS],
+                         [$disable_developer],
+                         [$TEST_CFLAGS],
+                         [-Wchar-subscripts \
+                          -Wfloat-equal \
+                          -Wpointer-sign \
+                          $DISABLE_WARNINGS])
+dnl cc1plus: warning: command line option ‘-Wpointer-sign’ is valid for
+dnl C/ObjC but not for C++
+AX_COMPILER_FLAGS_CXXFLAGS([EXTRA_CXXFLAGS],
+                           [$disable_developer],
+                           [],
+                           [-Wchar-subscripts \
+                            -Wfloat-equal \
+                            $DISABLE_WARNINGS])
+AX_COMPILER_FLAGS_LDFLAGS([EXTRA_LDFLAGS],
+                          [$disable_developer])
+
+dnl TODO: In principle we should put EXTRA_CFLAGS in each Makefile.am like
+dnl telepathy-glib does, since CFLAGS is meant to be reserved for the user...
+dnl but prepending to CFLAGS (so the user can override it with later CFLAGS)
+dnl is the next best thing.
+CFLAGS="$EXTRA_CFLAGS $CFLAGS"
+CXXFLAGS="$EXTRA_CXXFLAGS $CXXFLAGS"
+LDFLAGS="$EXTRA_LDFLAGS $LDFLAGS"
+
+AC_ARG_VAR([SANITIZE_CFLAGS],
+           [Extra CFLAGS for modules that are instrumented for error-checking])
+
+case $host_os in
+    solaris*)
+        # Solaris' C library apparently needs these runes to be threadsafe...
+        CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT"
+        # ... this opt-in to get sockaddr_in6 and sockaddr_storage...
+        CFLAGS="$CFLAGS -D__EXTENSIONS__"
+        # ... and this opt-in to get file descriptor passing support
+        CFLAGS="$CFLAGS -D_XOPEN_SOURCE=500"
+        ;;
+esac
+
+### Detect if ld supports --version-script
+
+gl_LD_VERSION_SCRIPT
+AM_CONDITIONAL([HAVE_LD_VERSION_SCRIPT],
+               [test "x$have_ld_version_script" = xyes])
+### Doxygen Documentation
+
+AC_PATH_PROG(DOXYGEN, doxygen, no)
+
+AC_MSG_CHECKING([whether to build Doxygen documentation])
+
+if test x$DOXYGEN = xno ; then
+    have_doxygen=no
+else
+    have_doxygen=yes
+fi
+
+if test x$enable_doxygen_docs = xauto ; then
+    if test x$have_doxygen = xno ; then
+        enable_doxygen_docs=no
+    else
+        enable_doxygen_docs=yes
+    fi
+fi
+
+if test x$enable_doxygen_docs = xyes; then
+    if test x$have_doxygen = xno; then
+	AC_MSG_ERROR([Building Doxygen docs explicitly required, but Doxygen not found])
+    fi
+fi
+
+if test x$dbus_win = xno; then
+    DBUS_GENERATE_MAN=YES
+else
+    DBUS_GENERATE_MAN=NO
+fi
+AC_SUBST([DBUS_GENERATE_MAN])
+
+AM_CONDITIONAL(DBUS_DOXYGEN_DOCS_ENABLED, test x$enable_doxygen_docs = xyes)
+AC_MSG_RESULT($enable_doxygen_docs)
+
+AC_ARG_WITH([qchdir],
+            AS_HELP_STRING([--with-qchdir=DIR], [Directory for installing Qt help file]),
+            [qchdir=$withval],
+            [qchdir="$docdir"])
+AC_SUBST([qchdir])
+
+AC_ARG_ENABLE([qt-help],
+              [AS_HELP_STRING([--enable-qt-help=auto|yes|no], [Build Qt help documentation])],
+              [],
+              [enable_qt_help=auto])
+AS_IF([test "x$enable_qt_help" != xno],
+      [AC_CHECK_PROGS([QHELPGENERATOR], [qhelpgenerator qhelpgenerator-qt5])],
+      [QHELPGENERATOR=])
+AS_IF([test "x$QHELPGENERATOR" = x && test "x$enable_qt_help" != xno && test "x$enable_qt_help" != xauto],
+      [AC_MSG_ERROR([Building of Qt help requested, but qhelpgenerator not found])])
+
+AC_MSG_CHECKING([whether to build Qt help documentation])
+AS_IF([test "x$enable_doxygen_docs" = xyes && test "x$QHELPGENERATOR" != x], [
+    enable_qthelp_docs=yes
+    DOXYGEN_GENERATE_QHP=YES
+    DOXYGEN_QHG_LOCATION="$QHELPGENERATOR"
+    DOXYGEN_QCH_FILE="$(pwd)/doc/api/qch/dbus-$VERSION.qch"
+  ], [
+    DOXYGEN_GENERATE_QHP=NO
+    enable_qthelp_docs=no
+  ])
+AC_SUBST([DOXYGEN_GENERATE_QHP])
+AC_SUBST([DOXYGEN_QHG_LOCATION])
+AC_SUBST([DOXYGEN_QCH_FILE])
+
+AM_CONDITIONAL([DBUS_QTHELP_DOCS_ENABLED], [test "x$enable_qthelp_docs" = xyes])
+AC_MSG_RESULT($enable_qthelp_docs)
+
+AC_CHECK_PROGS([XSLTPROC], [xsltproc])
+AM_CONDITIONAL([DBUS_HAVE_XSLTPROC], [test "x$XSLTPROC" != "x"])
+
+### Ducktype/Yelp documentation
+
+AC_PATH_PROG([DUCKTYPE],[ducktype],[no])
+AC_PATH_PROG([YELP_BUILD],[yelp-build],[no])
+
+AC_MSG_CHECKING([whether to build Ducktype documentation])
+
+AS_IF([test "$DUCKTYPE" = "no"],[have_ducktype=no],[have_ducktype=yes])
+AS_IF([test "$YELP_BUILD" = "no"],[have_yelp_build=no],[have_yelp_build=yes])
+
+AS_IF([test "$enable_ducktype_docs" = "auto"],[
+    AS_IF([test "$have_ducktype" = "no" || test "$have_yelp_build" = "no"],[
+        enable_ducktype_docs=no
+    ],[
+        enable_ducktype_docs=yes
+    ])
+])
+
+AS_IF([test "$enable_ducktype_docs" = "yes"],[
+    AS_IF([test "$have_ducktype" = "no"],[
+        AC_MSG_ERROR([Building Ducktype docs explicitly required, but ducktype not found])
+    ])
+    AS_IF([test "$have_yelp_build" = "no"],[
+        AC_MSG_ERROR([Building Ducktype docs explicitly required, but yelp-build not found])
+    ])
+])
+
+AM_CONDITIONAL([DBUS_DUCKTYPE_DOCS_ENABLED],[test "$enable_ducktype_docs" = "yes"])
+AC_MSG_RESULT([$enable_ducktype_docs])
+
+### XML Documentation
+
+AC_PATH_PROG(XMLTO, xmlto, no)
+
+AC_MSG_CHECKING([whether to build XML documentation])
+
+if test x$XMLTO = xno ; then
+    have_xmlto=no
+else
+    have_xmlto=yes
+fi
+
+if test x$enable_xml_docs = xauto ; then
+    if test x$have_xmlto = xno ; then
+        enable_xml_docs=no
+    else
+        enable_xml_docs=yes
+    fi
+fi
+
+if test x$enable_xml_docs = xyes; then
+    if test x$have_xmlto = xno; then
+	AC_MSG_ERROR([Building XML docs explicitly required, but xmlto not found])
+    fi
+fi
+
+AM_CONDITIONAL(DBUS_XML_DOCS_ENABLED, test x$enable_xml_docs = xyes)
+AC_MSG_RESULT($enable_xml_docs)
+
+AM_CONDITIONAL(DBUS_CAN_UPLOAD_DOCS,
+    [test x$enable_doxygen_docs = xyes && test x$enable_xml_docs = xyes &&
+     test x$enable_ducktype_docs = xyes])
+
+# Autoconf 2.70 will support this, and many distros patch this option in,
+# but Autoconf 2.70 hasn't actually been released yet.
+AS_IF([test -z "${runstatedir}"], [runstatedir='${localstatedir}/run'])
+AC_SUBST([runstatedir])
+
+#### Have to go $localstatedir->$prefix/var->/usr/local/var
+
+#### find the actual value for $prefix that we'll end up with
+##   (I know this is broken and should be done in the Makefile, but
+##    that's a major pain and almost nobody actually seems to care)
+AS_AC_EXPAND(EXPANDED_PREFIX, "$prefix")
+AS_AC_EXPAND(EXPANDED_LOCALSTATEDIR, "$localstatedir")
+AS_AC_EXPAND(EXPANDED_SYSCONFDIR, "$sysconfdir")
+AS_AC_EXPAND(EXPANDED_BINDIR, "$bindir")
+AS_AC_EXPAND(EXPANDED_LIBDIR, "$libdir")
+AS_AC_EXPAND(EXPANDED_LIBEXECDIR, "$libexecdir")
+AS_AC_EXPAND(EXPANDED_DATADIR, "$datadir")
+AS_AC_EXPAND(EXPANDED_RUNSTATEDIR, "$runstatedir")
+
+##### systemd unit files
+AC_ARG_WITH([systemdsystemunitdir],
+AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
+    [],
+    [
+    PKG_CHECK_EXISTS([systemd],
+      [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)],
+      [with_systemdsystemunitdir=no])
+    ])
+if test "x$with_systemdsystemunitdir" != xno; then
+   AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+fi
+AM_CONDITIONAL(HAVE_SYSTEMD, [test "x$have_systemd" != "xno" -a -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])
+
+AC_ARG_WITH([systemduserunitdir],
+AS_HELP_STRING([--with-systemduserunitdir=DIR], [Directory for systemd user service files]),
+    [],
+    [
+    PKG_CHECK_EXISTS([systemd],
+      [with_systemduserunitdir=$($PKG_CONFIG --variable=systemduserunitdir systemd)],
+      [with_systemduserunitdir='${libdir}/systemd/user'])
+    ])
+AC_SUBST([systemduserunitdir], [$with_systemduserunitdir])
+
+##### Set up location for system bus socket
+if ! test -z "$with_system_socket"; then
+   DBUS_SYSTEM_SOCKET=$with_system_socket
+else
+   # We don't use runstatedir for this (yet?), because /var/run has been the
+   # interoperable system bus socket for 10+ years.
+   # See https://bugs.freedesktop.org/show_bug.cgi?id=101628
+   DBUS_SYSTEM_SOCKET=${EXPANDED_LOCALSTATEDIR}/run/dbus/system_bus_socket
+fi
+
+AC_SUBST(DBUS_SYSTEM_SOCKET)
+AC_DEFINE_UNQUOTED(DBUS_SYSTEM_SOCKET,"$DBUS_SYSTEM_SOCKET",[The name of the socket the system bus listens on by default])
+
+## System bus only listens on local domain sockets, and never
+## on an abstract socket (so only root can create the socket).
+##
+## This won't work on Windows. It's not meant to - the system bus is
+## meaningless on Windows anyway.
+##
+## This has to be suitable for hard-coding in client libraries as well as
+## in the dbus-daemon's configuration, so it has to be valid to listen on
+## and also to connect to. If this ever changes, it'll need to be split into
+## two variables, one for the listening address and one for the connecting
+## address.
+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS="unix:path=$DBUS_SYSTEM_SOCKET"
+AC_SUBST(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS)
+AC_DEFINE_UNQUOTED(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS, "$DBUS_SYSTEM_BUS_DEFAULT_ADDRESS",[The default D-Bus address of the system bus])
+
+#### Set up the pid file
+if ! test -z "$with_system_pid_file"; then
+   DBUS_SYSTEM_PID_FILE=$with_system_pid_file
+else
+   DBUS_SYSTEM_PID_FILE="${EXPANDED_RUNSTATEDIR}/dbus/pid"
+fi
+
+AC_SUBST(DBUS_SYSTEM_PID_FILE)
+
+#### Directory to check for console ownership
+AS_IF([test -n "$with_console_auth_dir" && test "x$with_console_auth_dir" != xno],
+    [AC_DEFINE_UNQUOTED([DBUS_CONSOLE_AUTH_DIR], ["$with_console_auth_dir"],
+        [Directory to check for pam_console/pam_foreground flag files, or undefined])],
+    [with_console_auth_dir=])
+
+#### File to check for console ownership
+if test x$have_console_owner_file = xyes; then
+   if ! test -z "$with_console_owner_file"; then
+      DBUS_CONSOLE_OWNER_FILE=$with_console_owner_file
+   else
+      DBUS_CONSOLE_OWNER_FILE=/dev/console
+   fi
+else
+  DBUS_CONSOLE_OWNER_FILE=
+fi
+
+AC_SUBST(DBUS_CONSOLE_OWNER_FILE)
+AC_DEFINE_UNQUOTED(DBUS_CONSOLE_OWNER_FILE, "$DBUS_CONSOLE_OWNER_FILE", [File to check for console ownerhip])
+
+#### User to start the system bus as
+if test -z "$with_dbus_user" ; then
+    DBUS_USER=messagebus
+else
+    DBUS_USER=$with_dbus_user
+fi
+AC_SUBST(DBUS_USER)
+AC_DEFINE_UNQUOTED(DBUS_USER,"$DBUS_USER", [User for running the system BUS daemon])
+
+#### User for regression tests
+AS_IF([test -z "$with_test_user"], [with_test_user=nobody])
+DBUS_TEST_USER="$with_test_user"
+AC_SUBST([DBUS_TEST_USER])
+AC_DEFINE_UNQUOTED([DBUS_TEST_USER], ["$DBUS_TEST_USER"],
+  [Unprivileged user used in some regression tests])
+
+#### Prefix to install into
+DBUS_PREFIX=$EXPANDED_PREFIX
+AC_SUBST(DBUS_PREFIX)
+AC_DEFINE_UNQUOTED(DBUS_PREFIX,"$DBUS_PREFIX", [Prefix for installing DBUS])
+
+#### Direcotry to install data files into
+DBUS_DATADIR=$EXPANDED_DATADIR
+AC_SUBST(DBUS_DATADIR)
+AC_DEFINE_UNQUOTED(DBUS_DATADIR,"$DBUS_DATADIR", [Directory for installing DBUS data files])
+
+#### Directory to install dbus-daemon
+if test -z "$with_dbus_daemondir" ; then
+    DBUS_DAEMONDIR=$EXPANDED_BINDIR
+    dbus_daemondir='${bindir}'
+else
+    DBUS_DAEMONDIR=$with_dbus_daemondir
+    dbus_daemondir=$with_dbus_daemondir
+fi
+AC_SUBST(DBUS_DAEMONDIR)
+AC_SUBST(dbus_daemondir)
+AC_DEFINE_UNQUOTED(DBUS_DAEMONDIR,"$DBUS_DAEMONDIR", [Directory for installing the DBUS daemon])
+
+#### Directory to install the other binaries
+DBUS_BINDIR="$EXPANDED_BINDIR"
+AC_SUBST(DBUS_BINDIR)
+AC_DEFINE_UNQUOTED(DBUS_BINDIR,"$DBUS_BINDIR", [Directory for installing the binaries])
+
+#### Directory to install the libexec binaries
+DBUS_LIBEXECDIR="$EXPANDED_LIBEXECDIR"
+AC_SUBST(DBUS_LIBEXECDIR)
+AC_DEFINE_UNQUOTED(DBUS_LIBEXECDIR,"$DBUS_LIBEXECDIR", [Directory for installing the libexec binaries])
+
+AC_ARG_ENABLE([relocation],
+  [AS_HELP_STRING([--enable-relocation[=yes/no/auto]],
+    [Make pkg-config metadata relocatable [default=auto]])],
+  [], [enable_relocation=auto])
+
+can_relocate=yes
+
+AS_CASE(["${exec_prefix}"],
+  ['NONE'|'${prefix}'|"${prefix}"],
+    [:],
+  [*],
+    [
+      can_relocate=no
+      # If the user said --enable-relocation but we can't do it, error out
+      AS_IF([test "x$enable_relocation" = xyes],
+        [AC_MSG_ERROR([Relocatable pkg-config metadata requires --exec-prefix='\${prefix}', not ${exec_prefix}])])
+    ])
+
+AS_CASE(["${libdir}"],
+  ['${prefix}/lib'|'${prefix}/lib64'|'${exec_prefix}/lib'|'${exec_prefix}/lib64'|"${prefix}/lib"|"${exec_prefix}/lib"|"${prefix}/lib64"|"${exec_prefix}/lib64"],
+    [:],
+  [*],
+    [
+      can_relocate=no
+      # If the user said --enable-relocation but we can't do it, error out
+      AS_IF([test "x$enable_relocation" = xyes],
+        [AC_MSG_ERROR([Relocatable pkg-config metadata requires default libdir, not ${libdir}])])
+    ])
+
+# By default, on Windows we are relocatable if possible
+AS_IF([test "x$enable_relocation" = xauto && test "x$dbus_win" = xyes],
+  [enable_relocation="$can_relocate"])
+
+# By default, on non-Windows we are not relocatable because it can interfere
+# with pkg-config's ability to filter out system include directories,
+# resulting in linking an outdated system-wide library in preference to a
+# newer version installed elsewhere
+AS_IF([test "x$enable_relocation" = xauto],
+  [enable_relocation="no"])
+
+
+AS_IF([test "x$enable_relocation" = xyes],
+  [AC_SUBST([pkgconfig_prefix], ['${pcfiledir}/../..'])],
+  [AC_SUBST([pkgconfig_prefix], ['${original_prefix}'])])
+
+#### Directory to source sysconfdir configuration from
+
+# On Windows this is relative to where we put the bus setup, in
+# ${datadir}/dbus-1. For simplicity, we only do this if
+# ${sysconfdir} = ${prefix}/etc and ${datadir} = ${prefix}/share.
+#
+# On Unix, or on Windows with weird install layouts, it's the absolute path.
+AS_IF([test "${dbus_win}" = yes && \
+       test "$EXPANDED_SYSCONFDIR" = "$EXPANDED_PREFIX/etc" && \
+       test "$EXPANDED_DATADIR" = "$EXPANDED_PREFIX/share"],
+      [SYSCONFDIR_FROM_PKGDATADIR="../../etc"
+       DATADIR_FROM_PKGSYSCONFDIR="../../share"],
+      [SYSCONFDIR_FROM_PKGDATADIR="$EXPANDED_SYSCONFDIR"
+       DATADIR_FROM_PKGSYSCONFDIR="$EXPANDED_DATADIR"])
+AC_SUBST([SYSCONFDIR_FROM_PKGDATADIR])
+AC_SUBST([DATADIR_FROM_PKGSYSCONFDIR])
+
+#### Tell tests where to find certain stuff in builddir
+
+DBUS_PWD=`pwd`
+# Useful in a cross-compilation environment, where the tests are run on the host system.
+AC_ARG_WITH(dbus-test-dir, AS_HELP_STRING([--with-dbus-test-dir=[dirname]],[path where the tests tools are available]),
+			   DBUS_PWD=$withval)
+
+DBUS_TEST_EXEC="$DBUS_PWD/test"
+DBUS_TEST_DATA="$DBUS_PWD/test/data"
+
+AC_SUBST([DBUS_TEST_DATA])
+AC_SUBST([DBUS_TEST_EXEC])
+
+AC_DEFINE_UNQUOTED([DBUS_EXEEXT], ["$EXEEXT"],
+                   [Extension for executables, typically empty or .exe])
+
+## Export the non-setuid external helper
+TEST_LAUNCH_HELPER_BINARY="$DBUS_TEST_EXEC/dbus-daemon-launch-helper-for-tests$EXEEXT"
+AC_SUBST(TEST_LAUNCH_HELPER_BINARY)
+AC_DEFINE_UNQUOTED(DBUS_TEST_LAUNCH_HELPER_BINARY, "$TEST_LAUNCH_HELPER_BINARY",
+                   [Full path to the launch helper test program in the builddir])
+
+#### Find socket directories
+if ! test -z "$TMPDIR" ; then
+   DEFAULT_SOCKET_DIR=$TMPDIR
+elif ! test -z "$TEMP" ; then
+   DEFAULT_SOCKET_DIR=$TEMP
+elif ! test -z "$TMP" ; then
+   DEFAULT_SOCKET_DIR=$TMP
+else
+   DEFAULT_SOCKET_DIR=/tmp
+fi
+
+DEFAULT_SOCKET_DIR=`echo $DEFAULT_SOCKET_DIR | sed 's/+/%2B/g'`
+
+if ! test -z "$with_test_socket_dir" ; then
+   TEST_SOCKET_DIR="$with_test_socket_dir"
+else
+   TEST_SOCKET_DIR=$DEFAULT_SOCKET_DIR
+fi
+AC_SUBST(TEST_SOCKET_DIR)
+AC_DEFINE_UNQUOTED(DBUS_TEST_SOCKET_DIR, "$TEST_SOCKET_DIR", [Where to put test sockets])
+
+if test "x$dbus_unix" = xyes; then
+  TEST_LISTEN="unix:tmpdir=$TEST_SOCKET_DIR"
+else
+  TEST_LISTEN="tcp:host=localhost"
+fi
+AC_SUBST([TEST_LISTEN])
+AC_DEFINE_UNQUOTED([TEST_LISTEN], ["$TEST_LISTEN"],
+  [Listening address for regression tests])
+
+if ! test -z "$with_session_socket_dir" ; then
+   DBUS_SESSION_SOCKET_DIR="$with_session_socket_dir"
+else
+   DBUS_SESSION_SOCKET_DIR=$DEFAULT_SOCKET_DIR
+fi
+AC_DEFINE_UNQUOTED(DBUS_SESSION_SOCKET_DIR, "$DBUS_SESSION_SOCKET_DIR", [Where per-session bus puts its sockets])
+AC_SUBST(DBUS_SESSION_SOCKET_DIR)
+
+# This must be a listening address. It doesn't necessarily need to be an
+# address you can connect to - it can be something vague like
+# "nonce-tcp:".
+#
+# The default varies by platform.
+AC_ARG_WITH([dbus_session_bus_listen_address],
+            AS_HELP_STRING([--with-dbus-session-bus-listen-address=[ADDRESS]],
+                           [default address for a session bus to listen on (see configure.ac)]),
+            [with_dbus_session_bus_listen_address=$withval],
+            [with_dbus_session_bus_listen_address=])
+
+if test "x$with_dbus_session_bus_listen_address" != "x"; then
+        # the user specified something, trust them
+        DBUS_SESSION_BUS_LISTEN_ADDRESS="$with_dbus_session_bus_listen_address"
+elif test x$dbus_win = xyes; then
+        # On Windows, you can (and should) listen on autolaunch addresses,
+        # because autolaunching is different.
+        # See https://bugs.freedesktop.org/show_bug.cgi?id=38201
+        DBUS_SESSION_BUS_LISTEN_ADDRESS="autolaunch:"
+elif test x$have_launchd = xyes; then
+        # Mac OS X default is to use launchd
+        DBUS_SESSION_BUS_LISTEN_ADDRESS="launchd:env=DBUS_LAUNCHD_SESSION_BUS_SOCKET"
+else
+        # The default on all other Unix platforms (notably Linux)
+        # is to create a randomly named socket in /tmp or similar
+        DBUS_SESSION_BUS_LISTEN_ADDRESS="unix:tmpdir=$DBUS_SESSION_SOCKET_DIR"
+fi
+AC_SUBST([DBUS_SESSION_BUS_LISTEN_ADDRESS])
+
+# This must be an address you can connect to. It doesn't necessarily
+# need to be an address you can listen on - it can be "autolaunch:",
+# even on Unix.
+#
+# The default varies by platform.
+AC_ARG_WITH([dbus_session_bus_connect_address],
+            AS_HELP_STRING([--with-dbus-session-bus-connect-address=[ADDRESS]],
+                           [fallback address for a session bus client to connect to (see configure.ac)]),
+            [with_dbus_session_bus_connect_address=$withval],
+            [with_dbus_session_bus_connect_address=])
+
+if test "x$with_dbus_session_bus_connect_address" != "x"; then
+        # the user specified something, trust them
+        DBUS_SESSION_BUS_CONNECT_ADDRESS="$with_dbus_session_bus_connect_address"
+elif test x$dbus_win = xyes; then
+        # Windows autolaunching is a bit different; leaving it in its own
+        # branch of the conditional because the default might conceivably
+        # change (see #38201)
+        DBUS_SESSION_BUS_CONNECT_ADDRESS="autolaunch:"
+else
+        # The default on all other Unix platforms (notably Linux)
+        # is to use auto-launching - this works a bit differently on Mac OS X
+        # but comes out basically the same in the end
+        DBUS_SESSION_BUS_CONNECT_ADDRESS="autolaunch:"
+fi
+AC_SUBST([DBUS_SESSION_BUS_CONNECT_ADDRESS])
+AC_DEFINE_UNQUOTED([DBUS_SESSION_BUS_CONNECT_ADDRESS],
+  ["$DBUS_SESSION_BUS_CONNECT_ADDRESS"],
+  [Fallback address for session bus clients])
+
+# darwin needs this to initialize the environment
+AC_CHECK_FUNC(_NSGetEnviron, [AC_DEFINE(HAVE_NSGETENVIRON, 1, [Define if your system needs _NSGetEnviron to set up the environment])])
+AH_VERBATIM(_DARWIN_ENVIRON,
+[
+#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
+# include <sys/time.h>
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron())
+#endif
+])
+
+AC_ARG_ENABLE([stats],
+  [AS_HELP_STRING([--disable-stats],
+    [disable bus daemon usage statistics])],
+  [], [enable_stats=yes])
+if test "x$enable_stats" = xyes; then
+  AC_DEFINE([DBUS_ENABLE_STATS], [1],
+    [Define to enable bus daemon usage statistics])
+fi
+
+AC_ARG_ENABLE([user-session],
+  [AS_HELP_STRING([--enable-user-session],
+    [enable user-session semantics for session bus under systemd])],
+  [], [enable_user_session=no])
+AM_CONDITIONAL([DBUS_ENABLE_USER_SESSION],
+  [test "x$enable_user_session" = xyes])
+
+AC_ARG_ENABLE([containers],
+  [AS_HELP_STRING([--enable-containers],
+    [enable restricted servers for app containers])],
+  [], [enable_containers=no])
+AS_IF([test "x$enable_containers" = xyes && test "x$dbus_unix" != xyes],
+  [AC_MSG_ERROR([Restricted servers for app containers require Unix])])
+AS_IF([test "x$enable_containers" = xyes],
+  [AC_DEFINE([DBUS_ENABLE_CONTAINERS], [1],
+    [Define to enable restricted servers for app containers])])
+
+AC_CONFIG_FILES([
+Doxyfile
+dbus/Version
+dbus/versioninfo.rc
+dbus/dbus-arch-deps.h
+bus/system.conf
+bus/session.conf
+bus/legacy-config/system.conf
+bus/legacy-config/session.conf
+bus/example-system-enable-stats.conf
+bus/example-session-disable-stats.conf
+bus/org.freedesktop.dbus-session.plist
+bus/dbus.service
+bus/dbus.socket
+bus/systemd-user/dbus.service
+bus/systemd-user/dbus.socket
+bus/sysusers.d/dbus.conf
+bus/tmpfiles.d/dbus.conf
+Makefile
+dbus/Makefile
+bus/Makefile
+tools/Makefile
+test/Makefile
+test/name-test/Makefile
+doc/Makefile
+doc/dbus-cleanup-sockets.1.xml
+doc/dbus-daemon.1.xml
+doc/dbus-launch.1.xml
+doc/dbus-monitor.1.xml
+doc/dbus-run-session.1.xml
+doc/dbus-send.1.xml
+doc/dbus-test-tool.1.xml
+doc/dbus-update-activation-environment.1.xml
+doc/dbus-uuidgen.1.xml
+doc/index.html
+dbus-1.pc
+dbus-1-uninstalled.pc
+cmake/DBus1Config.cmake:cmake/DBus1Config.pkgconfig.in
+cmake/DBus1ConfigVersion.cmake
+])
+AC_OUTPUT
+
+dnl ==========================================================================
+echo "
+                    D-Bus $VERSION
+                  ==============
+
+	prefix:                   ${EXPANDED_PREFIX}
+	exec_prefix:              ${exec_prefix}
+        libdir:                   ${EXPANDED_LIBDIR}
+        libexecdir:               ${EXPANDED_LIBEXECDIR}
+        bindir:                   ${EXPANDED_BINDIR}
+        sysconfdir:               ${EXPANDED_SYSCONFDIR}
+        localstatedir:            ${EXPANDED_LOCALSTATEDIR}
+        runstatedir:              ${EXPANDED_RUNSTATEDIR}
+	datadir:                  ${EXPANDED_DATADIR}
+	source code location:	  ${srcdir}
+	compiler:		  ${CC}
+	cflags:		          ${CFLAGS}
+	cppflags:		  ${CPPFLAGS}
+	cxxflags:		  ${CXXFLAGS}
+	ldflags:		  ${LDFLAGS}
+	64-bit int:		  ${DBUS_INT64_TYPE}
+	32-bit int:		  ${DBUS_INT32_TYPE}
+	16-bit int:		  ${DBUS_INT16_TYPE}
+        Doxygen:                  ${DOXYGEN:-not found}
+        xmlto:                    ${XMLTO:-not found}
+        ducktype:                 ${DUCKTYPE:-not found}
+        yelp-build:               ${YELP_BUILD:-not found}"
+
+echo "
+        Rebuilding generated files: ${USE_MAINTAINER_MODE}
+        gcc coverage profiling:   ${enable_code_coverage}
+        Building embedded tests:  ${enable_embedded_tests}
+        Building modular tests:   ${enable_modular_tests}
+            - with GLib:          ${with_glib}
+        Installing tests:         ${enable_installed_tests}
+        Building verbose mode:    ${enable_verbose_mode}
+        Building assertions:      ${enable_asserts}
+        Building checks:          ${enable_checks}
+        Building bus stats API:   ${enable_stats}
+        Building container API:   ${enable_containers}
+        Building SELinux support: ${have_selinux}
+        Building AppArmor support: ${have_apparmor}
+        Building inotify support: ${have_inotify}
+        Building kqueue support:  ${have_kqueue}
+        Building elogind support: ${have_elogind}
+        Building systemd support: ${have_systemd}
+        Traditional activation:   ${enable_traditional_activation}
+        Building X11 code:        ${have_x11}
+        Building Doxygen docs:    ${enable_doxygen_docs}
+        Building Qt help file:    ${enable_qthelp_docs}
+        Building Ducktype docs:   ${enable_ducktype_docs}
+        Building XML docs:        ${enable_xml_docs}
+        Building launchd support: ${have_launchd}
+        System bus socket:        ${DBUS_SYSTEM_SOCKET}
+        System bus address:       ${DBUS_SYSTEM_BUS_DEFAULT_ADDRESS}
+        System bus PID file:      ${DBUS_SYSTEM_PID_FILE}
+        Session bus listens on:   ${DBUS_SESSION_BUS_LISTEN_ADDRESS}
+        Session clients connect to: ${DBUS_SESSION_BUS_CONNECT_ADDRESS}
+        pam_console auth dir:     ${with_console_auth_dir:-(none)}
+        Console owner file:       ${have_console_owner_file}
+        Console owner file path:  ${DBUS_CONSOLE_OWNER_FILE}
+	System bus user:          ${DBUS_USER}
+	Session bus services dir: ${EXPANDED_DATADIR}/dbus-1/services
+        'make check' socket dir:  ${TEST_SOCKET_DIR}
+"
+if test x$have_launchd = xyes; then
+        echo "        launchd agent dir:        ${LAUNCHD_AGENT_DIR}"
+fi
+echo
+
+if test x$enable_embedded_tests = xyes; then
+        echo "NOTE: building with unit tests increases the size of the installed library and renders it insecure."
+fi
+if test x$enable_embedded_tests = xyes -a x$enable_asserts = xno; then
+        echo "NOTE: building with embedded tests but without assertions means tests may not properly report failures (this configuration is only useful when doing something like profiling the tests)"
+fi
+AS_IF([test x$enable_code_coverage = xyes],[
+    AC_MSG_WARN([Building with coverage profiling is definitely for developers only.])
+  ])
+if test x$enable_verbose_mode = xyes; then
+        echo "NOTE: building with verbose mode increases library size, may slightly increase security risk, and decreases performance."
+fi
+if test x$enable_asserts = xyes; then
+        echo "NOTE: building with assertions increases library size and decreases performance."
+fi
+if test x$enable_checks = xno; then
+        echo "NOTE: building without checks for arguments passed to public API makes it harder to debug apps using D-Bus, but will slightly decrease D-Bus library size and _very_ slightly improve performance."
+fi
Index: a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new/dbus/dbus-userdb-util.c
===================================================================
--- a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new/dbus/dbus-userdb-util.c	(nonexistent)
+++ a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new/dbus/dbus-userdb-util.c	(revision 5)
@@ -0,0 +1,428 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/* dbus-userdb-util.c Would be in dbus-userdb.c, but not used in libdbus
+ *
+ * Copyright (C) 2003, 2004, 2005  Red Hat, Inc.
+ *
+ * Licensed under the Academic Free License version 2.1
+ *
+ * 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 2 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+#include <config.h>
+#include <unistd.h>
+#define DBUS_USERDB_INCLUDES_PRIVATE 1
+#include "dbus-userdb.h"
+#include "dbus-test.h"
+#include "dbus-internals.h"
+#include "dbus-protocol.h"
+#include <dbus/dbus-test-tap.h>
+#include <string.h>
+
+/* It isn't obvious from its name, but this file is part of the Unix
+ * system-dependent part of libdbus. */
+#if defined(DBUS_WIN) || !defined(DBUS_UNIX)
+#error "This file only makes sense on Unix OSs"
+#endif
+
+#ifdef HAVE_SYSTEMD
+#include <systemd/sd-login.h>
+#endif
+#if HAVE_ELOGIND
+#include <elogind/sd-login.h>
+#endif
+
+/**
+ * @addtogroup DBusInternalsUtils
+ * @{
+ */
+
+static DBusGroupInfo *
+_dbus_group_info_ref (DBusGroupInfo *info)
+{
+  _dbus_assert (info->refcount > 0);
+  _dbus_assert (info->refcount < SIZE_MAX);
+  info->refcount++;
+  return info;
+}
+
+/**
+ * Checks to see if the UID sent in is the console user
+ *
+ * @param uid UID of person to check 
+ * @param error return location for errors
+ * @returns #TRUE if the UID is the same as the console user and there are no errors
+ */
+dbus_bool_t
+_dbus_is_console_user (dbus_uid_t uid,
+		       DBusError *error)
+{
+
+  DBusUserDatabase *db;
+  const DBusUserInfo *info;
+  dbus_bool_t result = FALSE;
+
+#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
+  /* check if we have logind */
+  if (access ("/run/systemd/seats/", F_OK) >= 0)
+    {
+      int r;
+
+      /* Check whether this user is logged in on at least one physical
+         seat */
+      r = sd_uid_get_seats (uid, 0, NULL);
+      if (r < 0)
+        {
+          dbus_set_error (error, _dbus_error_from_errno (-r),
+                          "Failed to determine seats of user \"" DBUS_UID_FORMAT "\": %s",
+                          uid,
+                          _dbus_strerror (-r));
+          return FALSE;
+        }
+
+      return (r > 0);
+    }
+#endif
+
+#ifdef HAVE_CONSOLE_OWNER_FILE
+
+  DBusString f;
+  DBusStat st;
+
+  if (!_dbus_string_init (&f))
+    {
+      _DBUS_SET_OOM (error);
+      return FALSE;
+    }
+
+  if (!_dbus_string_append(&f, DBUS_CONSOLE_OWNER_FILE))
+    {
+      _dbus_string_free(&f);
+      _DBUS_SET_OOM (error);
+      return FALSE;
+    }
+
+  if (_dbus_stat(&f, &st, NULL) && (st.uid == uid))
+    {
+      _dbus_string_free(&f);
+      return TRUE;
+    }
+
+  _dbus_string_free(&f);
+
+#endif /* HAVE_CONSOLE_OWNER_FILE */
+
+  if (!_dbus_user_database_lock_system ())
+    {
+      _DBUS_SET_OOM (error);
+      return FALSE;
+    }
+
+  db = _dbus_user_database_get_system ();
+  if (db == NULL)
+    {
+      dbus_set_error (error, DBUS_ERROR_FAILED, "Could not get system database.");
+      _dbus_user_database_unlock_system ();
+      return FALSE;
+    }
+
+  /* TPTD: this should be cache-safe, we've locked the DB and
+    _dbus_user_at_console doesn't pass it on. */
+  info = _dbus_user_database_lookup (db, uid, NULL, error);
+
+  if (info == NULL)
+    {
+      _dbus_user_database_unlock_system ();
+       return FALSE;
+    }
+
+  result = _dbus_user_at_console (info->username, error);
+
+  _dbus_user_database_unlock_system ();
+
+  return result;
+}
+
+/**
+ * Gets user ID given username
+ *
+ * @param username the username
+ * @param uid return location for UID
+ * @returns #TRUE if username existed and we got the UID
+ */
+dbus_bool_t
+_dbus_get_user_id (const DBusString  *username,
+                   dbus_uid_t        *uid)
+{
+  return _dbus_get_user_id_and_primary_group (username, uid, NULL);
+}
+
+/**
+ * Gets group ID given groupname
+ *
+ * @param groupname the groupname
+ * @param gid return location for GID
+ * @returns #TRUE if group name existed and we got the GID
+ */
+dbus_bool_t
+_dbus_get_group_id (const DBusString  *groupname,
+                    dbus_gid_t        *gid)
+{
+  DBusUserDatabase *db;
+  const DBusGroupInfo *info;
+
+  /* FIXME: this can't distinguish ENOMEM from other errors */
+  if (!_dbus_user_database_lock_system ())
+    return FALSE;
+
+  db = _dbus_user_database_get_system ();
+  if (db == NULL)
+    {
+      _dbus_user_database_unlock_system ();
+      return FALSE;
+    }
+
+  info = _dbus_user_database_lookup_group (db, DBUS_GID_UNSET, groupname,
+                                           NULL);
+
+  if (info == NULL)
+    {
+      _dbus_user_database_unlock_system ();
+      return FALSE;
+    }
+
+  *gid = info->gid;
+  
+  _dbus_user_database_unlock_system ();
+  return TRUE;
+}
+
+/**
+ * Gets user ID and primary group given username
+ *
+ * @param username the username
+ * @param uid_p return location for UID
+ * @param gid_p return location for GID
+ * @returns #TRUE if username existed and we got the UID and GID
+ */
+dbus_bool_t
+_dbus_get_user_id_and_primary_group (const DBusString  *username,
+                                     dbus_uid_t        *uid_p,
+                                     dbus_gid_t        *gid_p)
+{
+  DBusUserDatabase *db;
+  const DBusUserInfo *info;
+
+  /* FIXME: this can't distinguish ENOMEM from other errors */
+  if (!_dbus_user_database_lock_system ())
+    return FALSE;
+
+  db = _dbus_user_database_get_system ();
+  if (db == NULL)
+    {
+      _dbus_user_database_unlock_system ();
+      return FALSE;
+    }
+
+  if (!_dbus_user_database_get_username (db, username,
+                                         &info, NULL))
+    {
+      _dbus_user_database_unlock_system ();
+      return FALSE;
+    }
+
+  if (uid_p)
+    *uid_p = info->uid;
+  if (gid_p)
+    *gid_p = info->primary_gid;
+  
+  _dbus_user_database_unlock_system ();
+  return TRUE;
+}
+
+/**
+ * Looks up a gid or group name in the user database.  Only one of
+ * name or GID can be provided. There are wrapper functions for this
+ * that are better to use, this one does no locking or anything on the
+ * database and otherwise sort of sucks.
+ *
+ * @param db the database
+ * @param gid the group ID or #DBUS_GID_UNSET
+ * @param groupname group name or #NULL 
+ * @param error error to fill in
+ * @returns the entry in the database (borrowed, do not free)
+ */
+const DBusGroupInfo *
+_dbus_user_database_lookup_group (DBusUserDatabase *db,
+                                  dbus_gid_t        gid,
+                                  const DBusString *groupname,
+                                  DBusError        *error)
+{
+  DBusGroupInfo *info;
+
+  _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+
+   /* See if the group is really a number */
+   if (gid == DBUS_UID_UNSET)
+    {
+      unsigned long n;
+
+      if (_dbus_is_a_number (groupname, &n))
+        gid = n;
+    }
+
+  if (gid != DBUS_GID_UNSET)
+    info = _dbus_hash_table_lookup_uintptr (db->groups, gid);
+  else
+    info = _dbus_hash_table_lookup_string (db->groups_by_name,
+                                           _dbus_string_get_const_data (groupname));
+  if (info)
+    {
+      _dbus_verbose ("Using cache for GID "DBUS_GID_FORMAT" information\n",
+                     info->gid);
+      return info;
+    }
+  else
+    {
+      if (gid != DBUS_GID_UNSET)
+	_dbus_verbose ("No cache for GID "DBUS_GID_FORMAT"\n",
+		       gid);
+      else
+	_dbus_verbose ("No cache for groupname \"%s\"\n",
+		       _dbus_string_get_const_data (groupname));
+      
+      info = dbus_new0 (DBusGroupInfo, 1);
+      if (info == NULL)
+        {
+          dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
+          return NULL;
+        }
+      info->refcount = 1;
+
+      if (gid != DBUS_GID_UNSET)
+        {
+          if (!_dbus_group_info_fill_gid (info, gid, error))
+            {
+              _DBUS_ASSERT_ERROR_IS_SET (error);
+              _dbus_group_info_unref (info);
+              return NULL;
+            }
+        }
+      else
+        {
+          if (!_dbus_group_info_fill (info, groupname, error))
+            {
+              _DBUS_ASSERT_ERROR_IS_SET (error);
+              _dbus_group_info_unref (info);
+              return NULL;
+            }
+        }
+
+      /* don't use these past here */
+      gid = DBUS_GID_UNSET;
+      groupname = NULL;
+
+      if (_dbus_hash_table_insert_uintptr (db->groups, info->gid, info))
+        {
+          _dbus_group_info_ref (info);
+        }
+      else
+        {
+          dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
+          _dbus_group_info_unref (info);
+          return NULL;
+        }
+
+
+      if (_dbus_hash_table_insert_string (db->groups_by_name,
+                                          info->groupname,
+                                          info))
+        {
+          _dbus_group_info_ref (info);
+        }
+      else
+        {
+          _dbus_hash_table_remove_uintptr (db->groups, info->gid);
+          _dbus_group_info_unref (info);
+          dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
+          return NULL;
+        }
+
+      /* Release the original reference */
+      _dbus_group_info_unref (info);
+
+      /* Return a borrowed reference to the DBusGroupInfo owned by the
+       * two hash tables */
+      return info;
+    }
+}
+
+/**
+ * Gets all groups  corresponding to the given UID. Returns #FALSE
+ * if no memory, or user isn't known, but always initializes
+ * group_ids to a NULL array. 
+ *
+ * @param uid the UID
+ * @param group_ids return location for array of group IDs
+ * @param n_group_ids return location for length of returned array
+ * @returns #TRUE if the UID existed and we got some credentials
+ */
+dbus_bool_t
+_dbus_groups_from_uid (dbus_uid_t         uid,
+                       dbus_gid_t       **group_ids,
+                       int               *n_group_ids)
+{
+  DBusUserDatabase *db;
+  const DBusUserInfo *info;
+  *group_ids = NULL;
+  *n_group_ids = 0;
+
+  /* FIXME: this can't distinguish ENOMEM from other errors */
+  if (!_dbus_user_database_lock_system ())
+    return FALSE;
+
+  db = _dbus_user_database_get_system ();
+  if (db == NULL)
+    {
+      _dbus_user_database_unlock_system ();
+      return FALSE;
+    }
+
+  if (!_dbus_user_database_get_uid (db, uid,
+                                    &info, NULL))
+    {
+      _dbus_user_database_unlock_system ();
+      return FALSE;
+    }
+
+  _dbus_assert (info->uid == uid);
+  
+  if (info->n_group_ids > 0)
+    {
+      *group_ids = dbus_new (dbus_gid_t, info->n_group_ids);
+      if (*group_ids == NULL)
+        {
+	  _dbus_user_database_unlock_system ();
+          return FALSE;
+        }
+
+      *n_group_ids = info->n_group_ids;
+
+      memcpy (*group_ids, info->group_ids, info->n_group_ids * sizeof (dbus_gid_t));
+    }
+
+  _dbus_user_database_unlock_system ();
+  return TRUE;
+}
+/** @} */
Index: a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new/dbus
===================================================================
--- a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new/dbus	(nonexistent)
+++ a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new/dbus	(revision 5)

Property changes on: a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new/dbus
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new
===================================================================
--- a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new	(nonexistent)
+++ a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new	(revision 5)

Property changes on: a/dbus/create-1.13.18-enable-elogind-patch/dbus-1.13.18-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dbus/create-1.13.18-enable-elogind-patch/file.list
===================================================================
--- a/dbus/create-1.13.18-enable-elogind-patch/file.list	(nonexistent)
+++ a/dbus/create-1.13.18-enable-elogind-patch/file.list	(revision 5)
@@ -0,0 +1,2 @@
+dbus-1.13.18/configure.ac
+dbus-1.13.18/dbus/dbus-userdb-util.c
Index: a/dbus/create-1.13.18-enable-elogind-patch
===================================================================
--- a/dbus/create-1.13.18-enable-elogind-patch	(nonexistent)
+++ a/dbus/create-1.13.18-enable-elogind-patch	(revision 5)

Property changes on: a/dbus/create-1.13.18-enable-elogind-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dbus/create-1.13.18-x11-launch-patch/create.patch.sh
===================================================================
--- a/dbus/create-1.13.18-x11-launch-patch/create.patch.sh	(nonexistent)
+++ a/dbus/create-1.13.18-x11-launch-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=1.13.18
+
+tar --files-from=file.list -xJvf ../dbus-$VERSION.tar.xz
+mv dbus-$VERSION dbus-$VERSION-orig
+
+cp -rf ./dbus-$VERSION-new ./dbus-$VERSION
+
+diff --unified -Nr  dbus-$VERSION-orig  dbus-$VERSION > dbus-$VERSION-x11-launch.patch
+
+mv dbus-$VERSION-x11-launch.patch ../patches
+
+rm -rf ./dbus-$VERSION
+rm -rf ./dbus-$VERSION-orig

Property changes on: a/dbus/create-1.13.18-x11-launch-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new/tools/Makefile.am
===================================================================
--- a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new/tools/Makefile.am	(nonexistent)
+++ a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new/tools/Makefile.am	(revision 5)
@@ -0,0 +1,151 @@
+AM_CPPFLAGS = \
+	-I$(top_srcdir) \
+	$(CODE_COVERAGE_CPPFLAGS) \
+	$(DBUS_STATIC_BUILD_CPPFLAGS) \
+	$(DBUS_X_CFLAGS) \
+	-DDBUS_COMPILATION \
+	-DDBUS_MACHINE_UUID_FILE=\""$(localstatedir)/lib/dbus/machine-id"\" \
+	$(NULL)
+
+AM_CFLAGS = \
+	$(CODE_COVERAGE_CFLAGS) \
+	$(SANITIZE_CFLAGS) \
+	$(NULL)
+
+# if assertions are enabled, improve backtraces
+AM_LDFLAGS = @R_DYNAMIC_LDFLAG@
+
+bin_PROGRAMS = \
+	dbus-launch \
+	dbus-monitor \
+	dbus-run-session \
+	dbus-send \
+	dbus-test-tool \
+	dbus-update-activation-environment \
+	$(NULL)
+
+if DBUS_UNIX
+bin_PROGRAMS += \
+	dbus-cleanup-sockets \
+	dbus-uuidgen \
+	$(NULL)
+endif
+
+dbus_send_SOURCES=				\
+	dbus-print-message.c			\
+	dbus-print-message.h			\
+	dbus-send.c \
+	tool-common.c \
+	tool-common.h \
+	$(NULL)
+
+dbus_monitor_SOURCES = \
+	dbus-monitor.c \
+	dbus-print-message.c \
+	dbus-print-message.h \
+	tool-common.c \
+	tool-common.h \
+	$(NULL)
+
+if DBUS_WIN
+dbus_launch_SOURCES=				\
+	dbus-launch-win.c			\
+	dbus-launch.h
+else
+dbus_launch_SOURCES=				\
+	dbus-launch.c				\
+	dbus-launch-x11.c			\
+	dbus-launch.h \
+	tool-common.c \
+	tool-common.h \
+	$(NULL)
+endif
+
+dbus_launch_CPPFLAGS = \
+	$(AM_CPPFLAGS) \
+	$(NULL)
+dbus_launch_LDADD = \
+	$(CODE_COVERAGE_LIBS) \
+	$(DBUS_X_LIBS) -ldbus-1 \
+	$(NULL)
+
+dbus_run_session_SOURCES =			\
+	dbus-run-session.c
+
+dbus_run_session_LDADD = \
+	$(CODE_COVERAGE_LIBS) -ldbus-1 \
+	$(NULL)
+
+dbus_cleanup_sockets_SOURCES=			\
+	dbus-cleanup-sockets.c
+
+dbus_uuidgen_SOURCES=				\
+	dbus-uuidgen.c
+
+dbus_send_LDADD = \
+	$(CODE_COVERAGE_LIBS) \
+	$(top_builddir)/dbus/libdbus-1.la \
+	$(NULL)
+
+dbus_monitor_LDADD = \
+	$(CODE_COVERAGE_LIBS) \
+	$(top_builddir)/dbus/libdbus-1.la \
+	$(NETWORK_libs) \
+	$(NULL)
+
+dbus_uuidgen_LDADD = \
+	$(CODE_COVERAGE_LIBS) \
+	$(top_builddir)/dbus/libdbus-1.la \
+	$(NULL)
+
+examplesdir = ${docdir}/examples
+dist_examples_SCRIPTS = \
+	GetAllMatchRules.py \
+	$(NULL)
+
+dbus_test_tool_SOURCES = \
+	dbus-echo.c \
+	dbus-spam.c \
+	tool-common.c \
+	tool-common.h \
+	test-tool.c \
+	test-tool.h \
+	$(NULL)
+dbus_test_tool_LDADD = \
+	$(CODE_COVERAGE_LIBS) \
+	$(top_builddir)/dbus/libdbus-1.la \
+	$(NULL)
+
+dbus_update_activation_environment_SOURCES = \
+	dbus-update-activation-environment.c \
+	tool-common.c \
+	tool-common.h \
+	$(NULL)
+dbus_update_activation_environment_LDADD = \
+	$(CODE_COVERAGE_LIBS) \
+	$(top_builddir)/dbus/libdbus-1.la \
+	$(NULL)
+
+if DBUS_WIN
+SUFFIXES = .rc
+
+.rc.o:
+	$(RC) $< -o $@
+
+nodist_dbus_update_activation_environment_SOURCES = disable-uac.rc
+
+disable-uac.rc: Win32.Manifest
+	echo '1 24 "$<"' > $@
+endif
+
+EXTRA_DIST = run-with-tmp-session-bus.sh strtoll.c strtoull.c Win32.Manifest
+CLEANFILES = 				\
+	run-with-tmp-session-bus.conf \
+	$(nodist_dbus_update_activation_environment_SOURCES)
+
+# create the /var/lib/dbus directory for dbus-uuidgen
+install-data-local:
+	$(MKDIR_P) $(DESTDIR)$(localstatedir)/lib/dbus
+
+installcheck-local:
+	test -d $(DESTDIR)$(localstatedir)/lib/dbus
Index: a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new/tools/Makefile.in
===================================================================
--- a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new/tools/Makefile.in	(nonexistent)
+++ a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new/tools/Makefile.in	(revision 5)
@@ -0,0 +1,1173 @@
+# Makefile.in generated by automake 1.16.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = dbus-launch$(EXEEXT) dbus-monitor$(EXEEXT) \
+	dbus-run-session$(EXEEXT) dbus-send$(EXEEXT) \
+	dbus-test-tool$(EXEEXT) \
+	dbus-update-activation-environment$(EXEEXT) $(am__EXEEXT_1)
+@DBUS_UNIX_TRUE@am__append_1 = \
+@DBUS_UNIX_TRUE@	dbus-cleanup-sockets \
+@DBUS_UNIX_TRUE@	dbus-uuidgen \
+@DBUS_UNIX_TRUE@	$(NULL)
+
+subdir = tools
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+	$(top_srcdir)/m4/ax_ac_append_to_file.m4 \
+	$(top_srcdir)/m4/ax_ac_print_to_file.m4 \
+	$(top_srcdir)/m4/ax_add_am_macro_static.m4 \
+	$(top_srcdir)/m4/ax_am_macros_static.m4 \
+	$(top_srcdir)/m4/ax_code_coverage.m4 \
+	$(top_srcdir)/m4/ax_file_escapes.m4 \
+	$(top_srcdir)/m4/ld-version-script.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/m4/visibility.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_examples_SCRIPTS) \
+	$(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+@DBUS_UNIX_TRUE@am__EXEEXT_1 = dbus-cleanup-sockets$(EXEEXT) \
+@DBUS_UNIX_TRUE@	dbus-uuidgen$(EXEEXT)
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(examplesdir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_dbus_cleanup_sockets_OBJECTS = dbus-cleanup-sockets.$(OBJEXT)
+dbus_cleanup_sockets_OBJECTS = $(am_dbus_cleanup_sockets_OBJECTS)
+dbus_cleanup_sockets_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+am__dbus_launch_SOURCES_DIST = dbus-launch.c dbus-launch-x11.c \
+	dbus-launch.h tool-common.c tool-common.h dbus-launch-win.c
+@DBUS_WIN_FALSE@am_dbus_launch_OBJECTS =  \
+@DBUS_WIN_FALSE@	dbus_launch-dbus-launch.$(OBJEXT) \
+@DBUS_WIN_FALSE@	dbus_launch-dbus-launch-x11.$(OBJEXT) \
+@DBUS_WIN_FALSE@	dbus_launch-tool-common.$(OBJEXT)
+@DBUS_WIN_TRUE@am_dbus_launch_OBJECTS =  \
+@DBUS_WIN_TRUE@	dbus_launch-dbus-launch-win.$(OBJEXT)
+dbus_launch_OBJECTS = $(am_dbus_launch_OBJECTS)
+am__DEPENDENCIES_1 =
+dbus_launch_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_dbus_monitor_OBJECTS = dbus-monitor.$(OBJEXT) \
+	dbus-print-message.$(OBJEXT) tool-common.$(OBJEXT)
+dbus_monitor_OBJECTS = $(am_dbus_monitor_OBJECTS)
+dbus_monitor_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(top_builddir)/dbus/libdbus-1.la $(am__DEPENDENCIES_1)
+am_dbus_run_session_OBJECTS = dbus-run-session.$(OBJEXT)
+dbus_run_session_OBJECTS = $(am_dbus_run_session_OBJECTS)
+dbus_run_session_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(top_builddir)/dbus/libdbus-internal.la
+am_dbus_send_OBJECTS = dbus-print-message.$(OBJEXT) \
+	dbus-send.$(OBJEXT) tool-common.$(OBJEXT)
+dbus_send_OBJECTS = $(am_dbus_send_OBJECTS)
+dbus_send_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(top_builddir)/dbus/libdbus-1.la
+am_dbus_test_tool_OBJECTS = dbus-echo.$(OBJEXT) dbus-spam.$(OBJEXT) \
+	tool-common.$(OBJEXT) test-tool.$(OBJEXT)
+dbus_test_tool_OBJECTS = $(am_dbus_test_tool_OBJECTS)
+dbus_test_tool_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(top_builddir)/dbus/libdbus-1.la
+am_dbus_update_activation_environment_OBJECTS =  \
+	dbus-update-activation-environment.$(OBJEXT) \
+	tool-common.$(OBJEXT)
+@DBUS_WIN_TRUE@nodist_dbus_update_activation_environment_OBJECTS =  \
+@DBUS_WIN_TRUE@	disable-uac.$(OBJEXT)
+dbus_update_activation_environment_OBJECTS =  \
+	$(am_dbus_update_activation_environment_OBJECTS) \
+	$(nodist_dbus_update_activation_environment_OBJECTS)
+dbus_update_activation_environment_DEPENDENCIES =  \
+	$(am__DEPENDENCIES_1) $(top_builddir)/dbus/libdbus-1.la
+am_dbus_uuidgen_OBJECTS = dbus-uuidgen.$(OBJEXT)
+dbus_uuidgen_OBJECTS = $(am_dbus_uuidgen_OBJECTS)
+dbus_uuidgen_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(top_builddir)/dbus/libdbus-1.la
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+SCRIPTS = $(dist_examples_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/dbus-cleanup-sockets.Po \
+	./$(DEPDIR)/dbus-echo.Po ./$(DEPDIR)/dbus-monitor.Po \
+	./$(DEPDIR)/dbus-print-message.Po \
+	./$(DEPDIR)/dbus-run-session.Po ./$(DEPDIR)/dbus-send.Po \
+	./$(DEPDIR)/dbus-spam.Po \
+	./$(DEPDIR)/dbus-update-activation-environment.Po \
+	./$(DEPDIR)/dbus-uuidgen.Po \
+	./$(DEPDIR)/dbus_launch-dbus-launch-win.Po \
+	./$(DEPDIR)/dbus_launch-dbus-launch-x11.Po \
+	./$(DEPDIR)/dbus_launch-dbus-launch.Po \
+	./$(DEPDIR)/dbus_launch-tool-common.Po \
+	./$(DEPDIR)/test-tool.Po ./$(DEPDIR)/tool-common.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(dbus_cleanup_sockets_SOURCES) $(dbus_launch_SOURCES) \
+	$(dbus_monitor_SOURCES) $(dbus_run_session_SOURCES) \
+	$(dbus_send_SOURCES) $(dbus_test_tool_SOURCES) \
+	$(dbus_update_activation_environment_SOURCES) \
+	$(nodist_dbus_update_activation_environment_SOURCES) \
+	$(dbus_uuidgen_SOURCES)
+DIST_SOURCES = $(dbus_cleanup_sockets_SOURCES) \
+	$(am__dbus_launch_SOURCES_DIST) $(dbus_monitor_SOURCES) \
+	$(dbus_run_session_SOURCES) $(dbus_send_SOURCES) \
+	$(dbus_test_tool_SOURCES) \
+	$(dbus_update_activation_environment_SOURCES) \
+	$(dbus_uuidgen_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/build-aux/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADT_LIBS = @ADT_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPARMOR_2_10_CFLAGS = @APPARMOR_2_10_CFLAGS@
+APPARMOR_2_10_LIBS = @APPARMOR_2_10_LIBS@
+APPARMOR_CFLAGS = @APPARMOR_CFLAGS@
+APPARMOR_LIBS = @APPARMOR_LIBS@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_FILEVERSION = @BUILD_FILEVERSION@
+BUILD_TIMESTAMP = @BUILD_TIMESTAMP@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIR_FROM_PKGSYSCONFDIR = @DATADIR_FROM_PKGSYSCONFDIR@
+DBUS_BINDIR = @DBUS_BINDIR@
+DBUS_CONSOLE_OWNER_FILE = @DBUS_CONSOLE_OWNER_FILE@
+DBUS_DAEMONDIR = @DBUS_DAEMONDIR@
+DBUS_DATADIR = @DBUS_DATADIR@
+DBUS_GENERATE_MAN = @DBUS_GENERATE_MAN@
+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
+DBUS_LIBEXECDIR = @DBUS_LIBEXECDIR@
+DBUS_MAJOR_VERSION = @DBUS_MAJOR_VERSION@
+DBUS_MICRO_VERSION = @DBUS_MICRO_VERSION@
+DBUS_MINOR_VERSION = @DBUS_MINOR_VERSION@
+DBUS_PREFIX = @DBUS_PREFIX@
+DBUS_SESSION_BUS_CONNECT_ADDRESS = @DBUS_SESSION_BUS_CONNECT_ADDRESS@
+DBUS_SESSION_BUS_LISTEN_ADDRESS = @DBUS_SESSION_BUS_LISTEN_ADDRESS@
+DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL = @DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL@
+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
+DBUS_STATIC_BUILD_CPPFLAGS = @DBUS_STATIC_BUILD_CPPFLAGS@
+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
+DBUS_TEST_DATA = @DBUS_TEST_DATA@
+DBUS_TEST_EXEC = @DBUS_TEST_EXEC@
+DBUS_TEST_USER = @DBUS_TEST_USER@
+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
+DBUS_USER = @DBUS_USER@
+DBUS_VERSION = @DBUS_VERSION@
+DBUS_VER_FILE_TYPE = @DBUS_VER_FILE_TYPE@
+DBUS_VER_INTERNAL_NAME = @DBUS_VER_INTERNAL_NAME@
+DBUS_VER_ORIGINAL_NAME = @DBUS_VER_ORIGINAL_NAME@
+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
+DBUS_X_LIBS = @DBUS_X_LIBS@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@
+DOXYGEN_QCH_FILE = @DOXYGEN_QCH_FILE@
+DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@
+DSYMUTIL = @DSYMUTIL@
+DUCKTYPE = @DUCKTYPE@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPANDED_BINDIR = @EXPANDED_BINDIR@
+EXPANDED_DATADIR = @EXPANDED_DATADIR@
+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
+EXPANDED_LIBEXECDIR = @EXPANDED_LIBEXECDIR@
+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
+EXPANDED_PREFIX = @EXPANDED_PREFIX@
+EXPANDED_RUNSTATEDIR = @EXPANDED_RUNSTATEDIR@
+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
+EXPAT_CFLAGS = @EXPAT_CFLAGS@
+EXPAT_LIBS = @EXPAT_LIBS@
+EXTRA_CFLAGS = @EXTRA_CFLAGS@
+EXTRA_CXXFLAGS = @EXTRA_CXXFLAGS@
+EXTRA_LDFLAGS = @EXTRA_LDFLAGS@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
+GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GREP = @GREP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LAUNCHCTL = @LAUNCHCTL@
+LAUNCHD_AGENT_DIR = @LAUNCHD_AGENT_DIR@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBDBUS_LIBS = @LIBDBUS_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NETWORK_libs = @NETWORK_libs@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+QHELPGENERATOR = @QHELPGENERATOR@
+RANLIB = @RANLIB@
+RC = @RC@
+R_DYNAMIC_LDFLAG = @R_DYNAMIC_LDFLAG@
+SANITIZE_CFLAGS = @SANITIZE_CFLAGS@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOVERSION = @SOVERSION@
+STRIP = @STRIP@
+SYSCONFDIR_FROM_PKGDATADIR = @SYSCONFDIR_FROM_PKGDATADIR@
+SYSTEMCTL = @SYSTEMCTL@
+SYSTEMD_CFLAGS = @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS = @SYSTEMD_LIBS@
+TEST_LAUNCH_HELPER_BINARY = @TEST_LAUNCH_HELPER_BINARY@
+TEST_LISTEN = @TEST_LISTEN@
+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
+THREAD_LIBS = @THREAD_LIBS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+WARN_LDFLAGS = @WARN_LDFLAGS@
+WARN_SCANNERFLAGS = @WARN_SCANNERFLAGS@
+XMKMF = @XMKMF@
+XMLTO = @XMLTO@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+YELP_BUILD = @YELP_BUILD@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+dbus_daemondir = @dbus_daemondir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+ifGNUmake = @ifGNUmake@
+ifnGNUmake = @ifnGNUmake@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgconfig_prefix = @pkgconfig_prefix@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+qchdir = @qchdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+systemdsystemunitdir = @systemdsystemunitdir@
+systemduserunitdir = @systemduserunitdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = \
+	-I$(top_srcdir) \
+	$(CODE_COVERAGE_CPPFLAGS) \
+	$(DBUS_STATIC_BUILD_CPPFLAGS) \
+	$(DBUS_X_CFLAGS) \
+	-DDBUS_COMPILATION \
+	-DDBUS_MACHINE_UUID_FILE=\""$(localstatedir)/lib/dbus/machine-id"\" \
+	$(NULL)
+
+AM_CFLAGS = \
+	$(CODE_COVERAGE_CFLAGS) \
+	$(SANITIZE_CFLAGS) \
+	$(NULL)
+
+
+# if assertions are enabled, improve backtraces
+AM_LDFLAGS = @R_DYNAMIC_LDFLAG@
+dbus_send_SOURCES = \
+	dbus-print-message.c			\
+	dbus-print-message.h			\
+	dbus-send.c \
+	tool-common.c \
+	tool-common.h \
+	$(NULL)
+
+dbus_monitor_SOURCES = \
+	dbus-monitor.c \
+	dbus-print-message.c \
+	dbus-print-message.h \
+	tool-common.c \
+	tool-common.h \
+	$(NULL)
+
+@DBUS_WIN_FALSE@dbus_launch_SOURCES = \
+@DBUS_WIN_FALSE@	dbus-launch.c				\
+@DBUS_WIN_FALSE@	dbus-launch-x11.c			\
+@DBUS_WIN_FALSE@	dbus-launch.h \
+@DBUS_WIN_FALSE@	tool-common.c \
+@DBUS_WIN_FALSE@	tool-common.h \
+@DBUS_WIN_FALSE@	$(NULL)
+
+@DBUS_WIN_TRUE@dbus_launch_SOURCES = \
+@DBUS_WIN_TRUE@	dbus-launch-win.c			\
+@DBUS_WIN_TRUE@	dbus-launch.h
+
+dbus_launch_CPPFLAGS = \
+	$(AM_CPPFLAGS) \
+	$(NULL)
+
+dbus_launch_LDADD = \
+	$(CODE_COVERAGE_LIBS) \
+	$(DBUS_X_LIBS) -ldbus-1 \
+	$(NULL)
+
+dbus_run_session_SOURCES = \
+	dbus-run-session.c
+
+dbus_run_session_LDADD = \
+	$(CODE_COVERAGE_LIBS) -ldbus-1 \
+	$(NULL)
+
+dbus_cleanup_sockets_SOURCES = \
+	dbus-cleanup-sockets.c
+
+dbus_uuidgen_SOURCES = \
+	dbus-uuidgen.c
+
+dbus_send_LDADD = \
+	$(CODE_COVERAGE_LIBS) \
+	$(top_builddir)/dbus/libdbus-1.la \
+	$(NULL)
+
+dbus_monitor_LDADD = \
+	$(CODE_COVERAGE_LIBS) \
+	$(top_builddir)/dbus/libdbus-1.la \
+	$(NETWORK_libs) \
+	$(NULL)
+
+dbus_uuidgen_LDADD = \
+	$(CODE_COVERAGE_LIBS) \
+	$(top_builddir)/dbus/libdbus-1.la \
+	$(NULL)
+
+examplesdir = ${docdir}/examples
+dist_examples_SCRIPTS = \
+	GetAllMatchRules.py \
+	$(NULL)
+
+dbus_test_tool_SOURCES = \
+	dbus-echo.c \
+	dbus-spam.c \
+	tool-common.c \
+	tool-common.h \
+	test-tool.c \
+	test-tool.h \
+	$(NULL)
+
+dbus_test_tool_LDADD = \
+	$(CODE_COVERAGE_LIBS) \
+	$(top_builddir)/dbus/libdbus-1.la \
+	$(NULL)
+
+dbus_update_activation_environment_SOURCES = \
+	dbus-update-activation-environment.c \
+	tool-common.c \
+	tool-common.h \
+	$(NULL)
+
+dbus_update_activation_environment_LDADD = \
+	$(CODE_COVERAGE_LIBS) \
+	$(top_builddir)/dbus/libdbus-1.la \
+	$(NULL)
+
+@DBUS_WIN_TRUE@SUFFIXES = .rc
+@DBUS_WIN_TRUE@nodist_dbus_update_activation_environment_SOURCES = disable-uac.rc
+EXTRA_DIST = run-with-tmp-session-bus.sh strtoll.c strtoull.c Win32.Manifest
+CLEANFILES = \
+	run-with-tmp-session-bus.conf \
+	$(nodist_dbus_update_activation_environment_SOURCES)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .rc .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tools/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign tools/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p \
+	 || test -f $$p1 \
+	  ; then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' \
+	    -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' \
+	`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+dbus-cleanup-sockets$(EXEEXT): $(dbus_cleanup_sockets_OBJECTS) $(dbus_cleanup_sockets_DEPENDENCIES) $(EXTRA_dbus_cleanup_sockets_DEPENDENCIES) 
+	@rm -f dbus-cleanup-sockets$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(dbus_cleanup_sockets_OBJECTS) $(dbus_cleanup_sockets_LDADD) $(LIBS)
+
+dbus-launch$(EXEEXT): $(dbus_launch_OBJECTS) $(dbus_launch_DEPENDENCIES) $(EXTRA_dbus_launch_DEPENDENCIES) 
+	@rm -f dbus-launch$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(dbus_launch_OBJECTS) $(dbus_launch_LDADD) $(LIBS)
+
+dbus-monitor$(EXEEXT): $(dbus_monitor_OBJECTS) $(dbus_monitor_DEPENDENCIES) $(EXTRA_dbus_monitor_DEPENDENCIES) 
+	@rm -f dbus-monitor$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(dbus_monitor_OBJECTS) $(dbus_monitor_LDADD) $(LIBS)
+
+dbus-run-session$(EXEEXT): $(dbus_run_session_OBJECTS) $(dbus_run_session_DEPENDENCIES) $(EXTRA_dbus_run_session_DEPENDENCIES) 
+	@rm -f dbus-run-session$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(dbus_run_session_OBJECTS) $(dbus_run_session_LDADD) $(LIBS)
+
+dbus-send$(EXEEXT): $(dbus_send_OBJECTS) $(dbus_send_DEPENDENCIES) $(EXTRA_dbus_send_DEPENDENCIES) 
+	@rm -f dbus-send$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(dbus_send_OBJECTS) $(dbus_send_LDADD) $(LIBS)
+
+dbus-test-tool$(EXEEXT): $(dbus_test_tool_OBJECTS) $(dbus_test_tool_DEPENDENCIES) $(EXTRA_dbus_test_tool_DEPENDENCIES) 
+	@rm -f dbus-test-tool$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(dbus_test_tool_OBJECTS) $(dbus_test_tool_LDADD) $(LIBS)
+
+dbus-update-activation-environment$(EXEEXT): $(dbus_update_activation_environment_OBJECTS) $(dbus_update_activation_environment_DEPENDENCIES) $(EXTRA_dbus_update_activation_environment_DEPENDENCIES) 
+	@rm -f dbus-update-activation-environment$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(dbus_update_activation_environment_OBJECTS) $(dbus_update_activation_environment_LDADD) $(LIBS)
+
+dbus-uuidgen$(EXEEXT): $(dbus_uuidgen_OBJECTS) $(dbus_uuidgen_DEPENDENCIES) $(EXTRA_dbus_uuidgen_DEPENDENCIES) 
+	@rm -f dbus-uuidgen$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(dbus_uuidgen_OBJECTS) $(dbus_uuidgen_LDADD) $(LIBS)
+install-dist_examplesSCRIPTS: $(dist_examples_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_examples_SCRIPTS)'; test -n "$(examplesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(examplesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(examplesdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(examplesdir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(examplesdir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-dist_examplesSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_examples_SCRIPTS)'; test -n "$(examplesdir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	dir='$(DESTDIR)$(examplesdir)'; $(am__uninstall_files_from_dir)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbus-cleanup-sockets.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbus-echo.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbus-monitor.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbus-print-message.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbus-run-session.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbus-send.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbus-spam.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbus-update-activation-environment.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbus-uuidgen.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbus_launch-dbus-launch-win.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbus_launch-dbus-launch-x11.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbus_launch-dbus-launch.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbus_launch-tool-common.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-tool.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool-common.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+	@$(MKDIR_P) $(@D)
+	@echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+dbus_launch-dbus-launch.o: dbus-launch.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dbus_launch-dbus-launch.o -MD -MP -MF $(DEPDIR)/dbus_launch-dbus-launch.Tpo -c -o dbus_launch-dbus-launch.o `test -f 'dbus-launch.c' || echo '$(srcdir)/'`dbus-launch.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/dbus_launch-dbus-launch.Tpo $(DEPDIR)/dbus_launch-dbus-launch.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='dbus-launch.c' object='dbus_launch-dbus-launch.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dbus_launch-dbus-launch.o `test -f 'dbus-launch.c' || echo '$(srcdir)/'`dbus-launch.c
+
+dbus_launch-dbus-launch.obj: dbus-launch.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dbus_launch-dbus-launch.obj -MD -MP -MF $(DEPDIR)/dbus_launch-dbus-launch.Tpo -c -o dbus_launch-dbus-launch.obj `if test -f 'dbus-launch.c'; then $(CYGPATH_W) 'dbus-launch.c'; else $(CYGPATH_W) '$(srcdir)/dbus-launch.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/dbus_launch-dbus-launch.Tpo $(DEPDIR)/dbus_launch-dbus-launch.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='dbus-launch.c' object='dbus_launch-dbus-launch.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dbus_launch-dbus-launch.obj `if test -f 'dbus-launch.c'; then $(CYGPATH_W) 'dbus-launch.c'; else $(CYGPATH_W) '$(srcdir)/dbus-launch.c'; fi`
+
+dbus_launch-dbus-launch-x11.o: dbus-launch-x11.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dbus_launch-dbus-launch-x11.o -MD -MP -MF $(DEPDIR)/dbus_launch-dbus-launch-x11.Tpo -c -o dbus_launch-dbus-launch-x11.o `test -f 'dbus-launch-x11.c' || echo '$(srcdir)/'`dbus-launch-x11.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/dbus_launch-dbus-launch-x11.Tpo $(DEPDIR)/dbus_launch-dbus-launch-x11.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='dbus-launch-x11.c' object='dbus_launch-dbus-launch-x11.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dbus_launch-dbus-launch-x11.o `test -f 'dbus-launch-x11.c' || echo '$(srcdir)/'`dbus-launch-x11.c
+
+dbus_launch-dbus-launch-x11.obj: dbus-launch-x11.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dbus_launch-dbus-launch-x11.obj -MD -MP -MF $(DEPDIR)/dbus_launch-dbus-launch-x11.Tpo -c -o dbus_launch-dbus-launch-x11.obj `if test -f 'dbus-launch-x11.c'; then $(CYGPATH_W) 'dbus-launch-x11.c'; else $(CYGPATH_W) '$(srcdir)/dbus-launch-x11.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/dbus_launch-dbus-launch-x11.Tpo $(DEPDIR)/dbus_launch-dbus-launch-x11.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='dbus-launch-x11.c' object='dbus_launch-dbus-launch-x11.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dbus_launch-dbus-launch-x11.obj `if test -f 'dbus-launch-x11.c'; then $(CYGPATH_W) 'dbus-launch-x11.c'; else $(CYGPATH_W) '$(srcdir)/dbus-launch-x11.c'; fi`
+
+dbus_launch-tool-common.o: tool-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dbus_launch-tool-common.o -MD -MP -MF $(DEPDIR)/dbus_launch-tool-common.Tpo -c -o dbus_launch-tool-common.o `test -f 'tool-common.c' || echo '$(srcdir)/'`tool-common.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/dbus_launch-tool-common.Tpo $(DEPDIR)/dbus_launch-tool-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='tool-common.c' object='dbus_launch-tool-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dbus_launch-tool-common.o `test -f 'tool-common.c' || echo '$(srcdir)/'`tool-common.c
+
+dbus_launch-tool-common.obj: tool-common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dbus_launch-tool-common.obj -MD -MP -MF $(DEPDIR)/dbus_launch-tool-common.Tpo -c -o dbus_launch-tool-common.obj `if test -f 'tool-common.c'; then $(CYGPATH_W) 'tool-common.c'; else $(CYGPATH_W) '$(srcdir)/tool-common.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/dbus_launch-tool-common.Tpo $(DEPDIR)/dbus_launch-tool-common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='tool-common.c' object='dbus_launch-tool-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dbus_launch-tool-common.obj `if test -f 'tool-common.c'; then $(CYGPATH_W) 'tool-common.c'; else $(CYGPATH_W) '$(srcdir)/tool-common.c'; fi`
+
+dbus_launch-dbus-launch-win.o: dbus-launch-win.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dbus_launch-dbus-launch-win.o -MD -MP -MF $(DEPDIR)/dbus_launch-dbus-launch-win.Tpo -c -o dbus_launch-dbus-launch-win.o `test -f 'dbus-launch-win.c' || echo '$(srcdir)/'`dbus-launch-win.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/dbus_launch-dbus-launch-win.Tpo $(DEPDIR)/dbus_launch-dbus-launch-win.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='dbus-launch-win.c' object='dbus_launch-dbus-launch-win.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dbus_launch-dbus-launch-win.o `test -f 'dbus-launch-win.c' || echo '$(srcdir)/'`dbus-launch-win.c
+
+dbus_launch-dbus-launch-win.obj: dbus-launch-win.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dbus_launch-dbus-launch-win.obj -MD -MP -MF $(DEPDIR)/dbus_launch-dbus-launch-win.Tpo -c -o dbus_launch-dbus-launch-win.obj `if test -f 'dbus-launch-win.c'; then $(CYGPATH_W) 'dbus-launch-win.c'; else $(CYGPATH_W) '$(srcdir)/dbus-launch-win.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/dbus_launch-dbus-launch-win.Tpo $(DEPDIR)/dbus_launch-dbus-launch-win.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='dbus-launch-win.c' object='dbus_launch-dbus-launch-win.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbus_launch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dbus_launch-dbus-launch-win.obj `if test -f 'dbus-launch-win.c'; then $(CYGPATH_W) 'dbus-launch-win.c'; else $(CYGPATH_W) '$(srcdir)/dbus-launch-win.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(SCRIPTS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(examplesdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+		-rm -f ./$(DEPDIR)/dbus-cleanup-sockets.Po
+	-rm -f ./$(DEPDIR)/dbus-echo.Po
+	-rm -f ./$(DEPDIR)/dbus-monitor.Po
+	-rm -f ./$(DEPDIR)/dbus-print-message.Po
+	-rm -f ./$(DEPDIR)/dbus-run-session.Po
+	-rm -f ./$(DEPDIR)/dbus-send.Po
+	-rm -f ./$(DEPDIR)/dbus-spam.Po
+	-rm -f ./$(DEPDIR)/dbus-update-activation-environment.Po
+	-rm -f ./$(DEPDIR)/dbus-uuidgen.Po
+	-rm -f ./$(DEPDIR)/dbus_launch-dbus-launch-win.Po
+	-rm -f ./$(DEPDIR)/dbus_launch-dbus-launch-x11.Po
+	-rm -f ./$(DEPDIR)/dbus_launch-dbus-launch.Po
+	-rm -f ./$(DEPDIR)/dbus_launch-tool-common.Po
+	-rm -f ./$(DEPDIR)/test-tool.Po
+	-rm -f ./$(DEPDIR)/tool-common.Po
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-dist_examplesSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am: installcheck-local
+
+maintainer-clean: maintainer-clean-am
+		-rm -f ./$(DEPDIR)/dbus-cleanup-sockets.Po
+	-rm -f ./$(DEPDIR)/dbus-echo.Po
+	-rm -f ./$(DEPDIR)/dbus-monitor.Po
+	-rm -f ./$(DEPDIR)/dbus-print-message.Po
+	-rm -f ./$(DEPDIR)/dbus-run-session.Po
+	-rm -f ./$(DEPDIR)/dbus-send.Po
+	-rm -f ./$(DEPDIR)/dbus-spam.Po
+	-rm -f ./$(DEPDIR)/dbus-update-activation-environment.Po
+	-rm -f ./$(DEPDIR)/dbus-uuidgen.Po
+	-rm -f ./$(DEPDIR)/dbus_launch-dbus-launch-win.Po
+	-rm -f ./$(DEPDIR)/dbus_launch-dbus-launch-x11.Po
+	-rm -f ./$(DEPDIR)/dbus_launch-dbus-launch.Po
+	-rm -f ./$(DEPDIR)/dbus_launch-tool-common.Po
+	-rm -f ./$(DEPDIR)/test-tool.Po
+	-rm -f ./$(DEPDIR)/tool-common.Po
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-dist_examplesSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+	clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-binPROGRAMS \
+	install-data install-data-am install-data-local \
+	install-dist_examplesSCRIPTS install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installcheck-local installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
+	uninstall-binPROGRAMS uninstall-dist_examplesSCRIPTS
+
+.PRECIOUS: Makefile
+
+
+@DBUS_WIN_TRUE@.rc.o:
+@DBUS_WIN_TRUE@	$(RC) $< -o $@
+
+@DBUS_WIN_TRUE@disable-uac.rc: Win32.Manifest
+@DBUS_WIN_TRUE@	echo '1 24 "$<"' > $@
+
+# create the /var/lib/dbus directory for dbus-uuidgen
+install-data-local:
+	$(MKDIR_P) $(DESTDIR)$(localstatedir)/lib/dbus
+
+installcheck-local:
+	test -d $(DESTDIR)$(localstatedir)/lib/dbus
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new/tools
===================================================================
--- a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new/tools	(nonexistent)
+++ a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new/tools	(revision 5)

Property changes on: a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new/tools
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new
===================================================================
--- a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new	(nonexistent)
+++ a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new	(revision 5)

Property changes on: a/dbus/create-1.13.18-x11-launch-patch/dbus-1.13.18-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dbus/create-1.13.18-x11-launch-patch/file.list
===================================================================
--- a/dbus/create-1.13.18-x11-launch-patch/file.list	(nonexistent)
+++ a/dbus/create-1.13.18-x11-launch-patch/file.list	(revision 5)
@@ -0,0 +1,2 @@
+dbus-1.13.18/tools/Makefile.am
+dbus-1.13.18/tools/Makefile.in
Index: a/dbus/create-1.13.18-x11-launch-patch
===================================================================
--- a/dbus/create-1.13.18-x11-launch-patch	(nonexistent)
+++ a/dbus/create-1.13.18-x11-launch-patch	(revision 5)

Property changes on: a/dbus/create-1.13.18-x11-launch-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dbus/patches/README
===================================================================
--- a/dbus/patches/README	(nonexistent)
+++ a/dbus/patches/README	(revision 5)
@@ -0,0 +1,8 @@
+
+/* begin *
+
+   dbus-1.13.18-x11-launch.patch - this patch is needed to link already inslalled libdbus-1 with
+                                   dbus-launch utility. This patch applicable only for building
+                                   dbus-x11-launch package.
+
+ * end */
Index: a/dbus/patches
===================================================================
--- a/dbus/patches	(nonexistent)
+++ a/dbus/patches	(revision 5)

Property changes on: a/dbus/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dbus
===================================================================
--- a/dbus	(nonexistent)
+++ a/dbus	(revision 5)

Property changes on: a/dbus
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dcron/Makefile
===================================================================
--- a/dcron/Makefile	(nonexistent)
+++ a/dcron/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/dcron
+
+versions    = 4.5
+pkgname     = dcron
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/dcron-4.5.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-4.5-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/dcron/create-4.5-patch/create.patch.sh
===================================================================
--- a/dcron/create-4.5-patch/create.patch.sh	(nonexistent)
+++ a/dcron/create-4.5-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=4.5
+
+tar --files-from=file.list -xzvf ../dcron-$VERSION.tar.gz
+mv dcron-$VERSION dcron-$VERSION-orig
+
+cp -rf ./dcron-$VERSION-new ./dcron-$VERSION
+
+diff --unified -Nr  dcron-$VERSION-orig  dcron-$VERSION > dcron-$VERSION.patch
+
+mv dcron-$VERSION.patch ../patches
+
+rm -rf ./dcron-$VERSION
+rm -rf ./dcron-$VERSION-orig

Property changes on: a/dcron/create-4.5-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/dcron/create-4.5-patch/dcron-4.5-new/CHANGELOG
===================================================================
--- a/dcron/create-4.5-patch/dcron-4.5-new/CHANGELOG	(nonexistent)
+++ a/dcron/create-4.5-patch/dcron-4.5-new/CHANGELOG	(revision 5)
@@ -0,0 +1,168 @@
+todo
+  * add timestamps to -d output
+
+  * manual cron.update prodding doesn't affect cl_NotUntil
+
+  * Use hash when ID=... is supplied. FS#18292.
+
+  * FS#18352: Another thing: when moving the original file to the backup name, and the edited version is written in it's place, the file is written without preserving the same permissions as the original, so if you have a umask that prevents others from reading your stuff, crontab won't be able to load the new file.
+
+git
+  * Numeric loglevels specified by 'crond -l <level>' weren't being validated.
+    Now we no longer accept numeric loglevels; they must be specified
+    symbolically. Thanks to Rogutės Sparnuotos.
+
+  * Continued portability improvements. Makefile now uses -lbsd-compat.
+    Factored allocation and string calls to utils.c.
+
+  * Many internal changes and annotations to pass splint review.
+
+  * Documentation and error message updates.
+
+v4.5  1-May-2011
+  * Some cron jobs were running multiple times. Now we make sure not to
+    ArmJobs that are already running; and not to resynchronize while jobs are
+    running; and to poll the DST setting. (Fixes Arch FS#18681; thanks to Vincent
+    Cappe and Paul Gideon Dann for identifying the second issue; and Tilman
+    Sauerbeck for identifying the third.)
+
+  * @monthly was wrongly being parsed the same as @yearly (fixes Arch
+    FS#19123). Thanks to Peter Johnson, Paul Gideon Dann, and Tilman Sauerbeck.
+
+  * extra/crond.rc: now uses $CROND_ARGS from /etc/conf.d/crond; sample included
+    as extra/crond.conf. Suggested by Eric Bélanger.
+
+  * Running `/etc/rc.d/crond start` after startup could leak unwanted
+    environment into cronjobs; now we force crond to start in empty env
+    (fixes Arch FS#22085). Thanks to Mantas.
+
+  * Also set LOGNAME environment variable in cronjobs. Requested by Michael
+    Trunner; fixes Arch FS#18338.
+
+  * extra/crond.logrotate now correctly gets pid from /var/run/crond.pid
+    (fixes Arch FS#18039). Thanks to Kay Abendroth, revel, and Chlump Chatkupt.
+
+  * extra/prune-cronstamps now only deletes files, and is formatted as a
+    @weekly crontab. Thanks to Alec Moskvin <alecm@gmx.com>.
+
+  * extra/crontab.vim works around an issue where vim's writebackup would
+    interfere with crontab's security model (addresses Arch FS#18352).
+    Thanks to Armadillo and Simon Williams.
+
+  * Makefile uses $LDFLAGS (fixes Arch FS#23784). Thanks to Kristoffer Tidemann
+    and Mike Frysinger.
+
+  * defs.h sets default locations for CRONTABS and CRONSTAMPS beneath /var/spool/cron/,
+    as in earlier versions of dcron.
+
+  * Documentation updates.
+
+  * Thanks for testing and feedback: Feifei Jia, Spider.007, Ray Kohler,
+    Igor Zakharoff, Edward Hades, and Joe Lightning.
+
+v4.4  17-Jan-2010
+  * Finished mailjobs were being left as zombie processes. Fixed.
+
+  * When using crond with logging-to-file, user jobs could only log some
+    events if they had write access to the log. Fixed this by having crond
+    keep a file descriptor open to the log; also added a SIGHUP handler
+    to make crond re-open the logfile. The sample logrotate script now
+    sends that signal.
+
+  * More sensible command-line parsing by crontab.
+
+  * Add prune-cronstamps to extra; document extra/*; general improvement
+    of README and manpages.
+
+  * Portability improvements, and defs.h now has fuller comments about
+    requirements.
+
+  * Makefile improvements: `make` now caches variables for `make install`;
+    don't stomp CFLAGS environment variable, and added BINDIR,SBINDIR,MANDIR.
+
+  * Thanks to Juergen Daubert for more testing and suggestions.
+
+v4.3  11-Jan-2010
+  * Internal refactoring to make buffer overflow checks
+    clearer and portability issues more explicit.
+
+  * Made file argument to -L mandatory; optional args to
+    getopt needs GNU extensions.
+
+  * Makefile tweaks. Added CRONTAB_GROUP for `make install`.
+    Renamed TIMESTAMPS -> CRONSTAMPS.
+
+  * Thanks to Juergen Daubert for testing and suggestions.
+
+v4.2  11-Jan-2010
+  * Makefile tweaks; moved more constants to #defines.
+
+v4.1  10-Jan-2010
+  * Fixed bug in parsing some numeric fields in crontabs. (Terminus of range
+    wasn't being modded.)
+
+  * Updated Makefile to make it easier to customize timestamps at configure
+    time. Also, if LC_TIME is defined when crond runs, we use that instead of
+    compiled-in default (for logging to files, to customize syslog output use
+    syslog-ng's 'template' command).
+
+  * Fixed Makefile permissions on crond and crontab binaries.
+
+v4.0  6-Jan-2010
+  * Jim Pryor took over development; folded in changes from his fork "yacron"
+
+  * Applied "Daniel's patch" from dcron 3.x tarballs to enable logging to syslog or
+    files. Added further logging improvements.
+
+  * Added -m user@host and -M mailer options
+
+  * Various crontab syntax extensions, including "2nd Monday of every month",
+    @reboot, @daily, and finer-grained frequency specifiers.
+
+  * Jobs can wait until AFTER other jobs have finished.
+
+  * Enhanced parsing of cron.update file, to make it possible for scripts to
+    interact with a running crond in limited ways.
+
+  * Various internal changes
+
+  * Updated Makefile, manpage buildchain, and docs
+
+v3.2
+    Fixed a minor bug, remove the newline terminating a line only if there
+    is a newline to remove.
+
+v3.1
+    Add support for root-run crontab files in /etc/cron.d and rewrite a
+    good chunk of the crontab file management code.  By VMiklos and Matt
+    Dillon.
+
+v3.0
+    Fix /tmp race and misc cleanups from Emiel Kollof <emiel@gamepoint.net>
+
+v2.9
+    Modernize the code, remove strcpy() and sprintf() in favor of snprintf().
+    (Supplied by Christine Jamison <technobabe@mail.nwmagic.net>)
+
+v2.8
+    Fixed bug found by Christian HOFFMANN.  newline removal was broken
+    for lines that began with whitespace, causing crontab lines to be
+    chopped off.
+
+v2.7
+    Committed changes suggested by
+    Ragnar Hojland Espinosa <ragnar@redestb.es>
+
+    Fixed a few printfs, removed strdup() function ( strdup() is now standard
+    in all major clib's )
+
+v2.4-2.6
+    ( changes lost )
+
+v2.3
+    dillon: Fixed bug in job.c -- if ChangeUser() fails, would return from child fork rather
+        then exit!  Oops.
+
+v2.2
+    dillon: Initial release
+
Index: a/dcron/create-4.5-patch/dcron-4.5-new/Makefile
===================================================================
--- a/dcron/create-4.5-patch/dcron-4.5-new/Makefile	(nonexistent)
+++ a/dcron/create-4.5-patch/dcron-4.5-new/Makefile	(revision 5)
@@ -0,0 +1,86 @@
+# Makefile for Dillon's crond and crontab
+VERSION = 4.5
+
+# these variables can be configured by e.g. `make SCRONTABS=/different/path`
+PREFIX = /usr
+CRONTAB_GROUP = root
+SCRONTABS = /etc/cron.d
+CRONTABS = /var/spool/cron/crontabs
+CRONSTAMPS = /var/spool/cron/cronstamps
+# used for syslog
+LOG_IDENT = crond
+# used for logging to file (syslog manages its own timestamps)
+# if LC_TIME is set, it will override any compiled-in timestamp format
+TIMESTAMP_FMT = %b %e %H:%M:%S
+SBINDIR = $(PREFIX)/sbin
+BINDIR = $(PREFIX)/bin
+MANDIR = $(PREFIX)/share/man
+
+-include config
+
+
+SHELL = /bin/sh
+INSTALL = install -o root
+INSTALL_PROGRAM = $(INSTALL) -D
+INSTALL_DATA = $(INSTALL) -D -m0644 -g root
+INSTALL_DIR = $(INSTALL) -d -m0755 -g root
+CFLAGS ?= -O2
+CFLAGS += -Wall -Wstrict-prototypes -Wno-missing-field-initializers
+SRCS = main.c subs.c database.c job.c concat.c chuser.c
+OBJS = main.o subs.o database.o job.o concat.o chuser.o
+TABSRCS = crontab.c chuser.c
+TABOBJS = crontab.o chuser.o
+PROTOS = protos.h
+DEFS =  -DVERSION='"$(VERSION)"' \
+		-DSCRONTABS='"$(SCRONTABS)"' -DCRONTABS='"$(CRONTABS)"' \
+		-DCRONSTAMPS='"$(CRONSTAMPS)"' -DLOG_IDENT='"$(LOG_IDENT)"' \
+		-DTIMESTAMP_FMT='"$(TIMESTAMP_FMT)"'
+
+# save variables needed for `make install` in config
+all: $(PROTOS) crond crontab ;
+	rm -f config
+	echo "PREFIX = $(PREFIX)" >> config
+	echo "SBINDIR = $(SBINDIR)" >> config
+	echo "BINDIR = $(BINDIR)" >> config
+	echo "MANDIR = $(MANDIR)" >> config
+	echo "CRONTAB_GROUP = $(CRONTAB_GROUP)" >> config
+	echo "SCRONTABS = $(SCRONTABS)" >> config
+	echo "CRONTABS = $(CRONTABS)" >> config
+	echo "CRONSTAMPS = $(CRONSTAMPS)" >> config
+
+protos.h: $(SRCS) $(TABSRCS)
+	fgrep -h Prototype $(SRCS) $(TABSRCS) > protos.h
+
+crond: $(OBJS)
+	$(CC) $(LDFLAGS) $^ $(LIBS) -o crond
+
+crontab: $(TABOBJS)
+	$(CC) $(LDFLAGS) $^ -o crontab
+
+%.o: %.c defs.h $(PROTOS)
+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(DEFS) $< -o $@
+
+install:
+	$(INSTALL_PROGRAM) -m0700 -g root crond $(DESTDIR)$(SBINDIR)/crond
+	$(INSTALL_PROGRAM) -m4750 -g $(CRONTAB_GROUP) crontab $(DESTDIR)$(BINDIR)/crontab
+	$(INSTALL_DATA) crontab.1 $(DESTDIR)$(MANDIR)/man1/crontab.1
+	$(INSTALL_DATA) crond.8 $(DESTDIR)$(MANDIR)/man8/crond.8
+	$(INSTALL_DIR) $(DESTDIR)$(SCRONTABS)
+	$(INSTALL_DIR) $(DESTDIR)$(CRONTABS)
+	$(INSTALL_DIR) $(DESTDIR)$(CRONSTAMPS)
+
+clean: force
+	rm -f *.o $(PROTOS)
+	rm -f crond crontab config
+
+force: ;
+
+man: force
+	-pandoc -t man -f markdown -s crontab.markdown -o crontab.1
+	-pandoc -t man -f markdown -s crond.markdown -o crond.8
+
+# for maintainer's use only
+TARNAME = /home/abs/_dcron/dcron-$(VERSION).tar.gz
+dist: clean man
+	bsdtar -cz --exclude repo/.git -f $(TARNAME).new -s'=^repo=dcron-$(VERSION)=' -C .. repo
+	mv -f $(TARNAME).new $(TARNAME)
Index: a/dcron/create-4.5-patch/dcron-4.5-new/README
===================================================================
--- a/dcron/create-4.5-patch/dcron-4.5-new/README	(nonexistent)
+++ a/dcron/create-4.5-patch/dcron-4.5-new/README	(revision 5)
@@ -0,0 +1,214 @@
+DCRON - DILLON'S LIGHTWEIGHT CRON DAEMON
+========================================
+
+This lightweight cron daemon aims to be simple and secure, with just enough
+features to stay useful. It was written from scratch by Matt Dillon in 1994.
+It's now developed and maintained by Jim Pryor.
+
+In the author's opinion, having to combine a cron daemon with another daemon
+like anacron makes for too much complexity. So the goal is a simple cron daemon
+that can also take over the central functions of anacron.
+
+Unlike other fatter cron daemons, though, this cron doesn't even try to manage
+environment variables or act as a shell. All jobs are run with `/bin/sh` for
+conformity and portability. We don't try to use the user's preferred shell:
+that breaks down for special users and even makes some of us normal users
+unhappy (for example, /bin/csh does not use a true O_APPEND mode and has
+difficulty redirecting stdout and stderr both to different places!). You can,
+of course, run shell scripts in whatever language you like by making them
+executable with #!/bin/csh or whatever as the first line. If you don't like
+the extra processes, just `exec` them.
+
+If you need to set special environment variables, pass them as arguments to a
+script.
+
+The programs were written with an eye towards security, hopefully we haven't
+forgotton anything. The programs were also written with an eye towards nice,
+clean, algorithmically sound code. It's small, and the only fancy code is that
+which deals with child processes. We do not try to optimize with vfork() since
+it causes headaches and is rather pointless considering we're execing a shell
+most of the time, and we pay close attention to leaving descriptors open in the
+crond and close attention to preventing crond from running away.
+
+
+DOWNLOADING
+-----------
+
+The project is hosted at: <http://www.jimpryor.net/linux/dcron.html>.
+
+The latest version is 4.5, which can be downloaded here:
+<http://www.jimpryor.net/linux/releases/dcron-4.5.tar.gz>.
+
+A public git repo is available at: <http://repo.or.cz/w/dcron.git>.
+
+
+COMPILING
+---------
+
+You must use a compiler that understands prototypes, such as GCC.
+
+(1) The following compile-time defaults are configurable via
+command-line assignments on the `make` line (they're shown here with
+their default values):
+
+	PREFIX=/usr/local         # where files will ultimately be installed
+	SBINDIR = $(PREFIX)/sbin  # where crond will be installed
+	BINDIR = $(PREFIX)/bin    # where crontab will be installed
+	MANDIR = $(PREFIX)/share/man  # where manpages will be installed
+	CRONTABS = /var/spool/cron/crontabs     # default dir for per-user crontabs
+	CRONSTAMPS = /var/spool/cron/cronstamps # default dir
+	SCRONTABS = /etc/cron.d   # default dir for system crontabs
+
+	CRONTAB_GROUP = wheel     # who's allowed to edit their own crontabs?
+	LOG_IDENT = crond         # syslog uses facility LOG_CRON and this identity
+	TIMESTAMP_FMT = %b %e %H:%M:%S  # used if LC_TIME unset and logging to file
+
+A few additional compile-time settings are defined in defs.h. If you find yourself
+wanting to edit defs.h directly, try editing the DEFS line in the Makefile instead.
+
+(2) Run make with your desired settings. For example:
+
+	make PREFIX=/usr CRONTAB_GROUP=users
+
+(3) If you're using the git version, you might also want to `make man`,
+to be sure the manpages are updated. This requires 
+[pandoc](http://johnmacfarlane.net/pandoc/).
+
+
+INSTALLING
+----------
+
+(4) `make install` installs the files underneath PREFIX (by default, /usr/local).
+If you're packaging, you can supply a DESTDIR argument here:
+
+	make DESTDIR=/path/to/your/package/root install
+
+Permissions will be as follows:
+
+	-rwx------  0 root   root    32232 Jan  6 18:58 /usr/local/sbin/crond
+	-rwsr-x---  0 root   wheel   15288 Jan  6 18:58 /usr/local/bin/crontab
+
+Only users belonging to crontab's group (here "wheel") will be able to use it.
+You may want to create a special "cron" group and assign crontab to it:
+
+	groupadd cron
+	chgrp cron /usr/local/bin/crontab
+	chmod 4750 /usr/local/bin/crontab
+
+(If the group already exists, you can specify it by supplying CRONTAB_GROUP
+to the `make` or `make install` commands.)
+
+Then add users to group "cron" when you want them to be able to install
+or edit their own crontabs. The superuser is able to install crontabs for users
+who don't have the privileges to edit their own.
+
+You should schedule crond to run automatically from system startup, using
+/etc/rc.local or a similar mechanism. crond automatically detaches. By default
+it logs all events <= loglevel NOTICE to syslog.
+
+The crontab files are normally located in /var/spool/cron/crontabs, and timestamps
+are normally in /var/spool/cron/cronstamps. These directories normally have permissions:
+
+	drwxr-xr-x  2 root   root     4096 Jan  6 18:50 /var/spool/cron
+	drwxr-xr-x  1 root   root        0 Jan  6 18:58 /var/spool/cron/crontabs
+	drwxr-xr-x  1 root   root        0 Jan  6 18:58 /var/spool/cron/cronstamps/
+
+Here is the superuser's crontab, created using `sudo crontab -e`:
+
+	-rw-------  0 root   root      513 Jan  6 18:58 /var/spool/cron/crontabs/root
+
+TESTING
+-------
+
+Use the crontab program to create a personal crontab with the following
+two lines:
+
+	* * * * *  date >> /tmp/test
+	* * * * *  date
+
+Check the log output of crond to ensure the cron entries are being
+run once a minute, check /tmp/test to ensure the date is being
+appended to it once a minute, and check your mail to ensure that crond
+is mailing you the date from the other entry once a minute.
+
+After you are through testing cron, delete the entries with `crontab -e`
+or `crontab -d`.
+
+EXTRAS
+------
+
+The following are included in the "extra" folder. None of them are installed
+by `make install`:
+
+crond.rc
+:	This is an example rc script to start and stop crond. It could be placed in
+/etc/rc.d or /etc/init.d in suitable systems.
+
+crond.conf
+:	This contains user-modifiable settings for crond.rc. The sample crond.rc
+expects to source this file from /etc/conf.d/crond.
+
+run-cron
+:	This simple shell script is a bare-bones alternative to Debian's run-parts.
+
+root.crontab
+:	This is an example crontab to install for the root user, or to install
+in /etc/cron.d. It runs any executable scripts located in the directories /etc/cron.hourly,
+/etc/cron.daily, /etc/cron.weekly, and /etc/cron.monthly at the appropriate times.
+This example uses the run-cron script mentioned above, and relies on you to
+create the /etc/cron.* directories.
+
+prune-cronstamps
+:	crond never removes any files from your cronstamps directory. If usernames
+are abandoned, or cron job names are abandoned, unused files will accumulate
+there. This simple cronjob will prune any cronstamp files older than three months.
+It will run weekly if placed in /etc/cron.d.
+
+crond.logrotate
+:	This is an example to place in /etc/logrotate.d. This config file assumes you
+run crond using -L /var/log/crond.log. If you run crond using syslog instead (the default),
+you may prefer to configure the rotation of all your syslog-generated logs in a
+single config file.
+
+crontab.vim
+:	This makes vim handle backup files in way that doesn't interfere with crontab's security
+model.
+
+
+BUG REPORTS, SUBMISSIONS
+------------------------
+
+Send any bug reports and source code changes to Jim Pryor:
+<profjim@jimpryor.net>.
+
+We aim to keep this program simple, secure, and bug-free, in preference to
+adding features. Those advanced features we have added recently (such as
+@noauto, FREQ= and AFTER= tags, advanced cron.update parsing) fit naturally
+into the existing codebase.
+
+Our goal is also to make this program compilable in as near to a C89-strict a
+manner as possible. Less-portable features we're aware of are described in the
+comments to defs.h. We'll reduce these dependencies as feasible. Do let us know
+if any of them are an obstacle to using crond on your platform.
+
+Changes to defs.h, whether to override defaults or to accommodate your platform,
+should be made by a combination of a -D option in the Makefile
+and an #ifdef for that option in defs.h. Don't rely on pre-definitions made
+by the C compiler.
+
+Prototypes for system functions should come from external include
+files and NOT from defs.h or any source file. If no prototype exists for a
+particular function, contact your vendor to get an update for your includes.
+
+Note that the source code, especially in regard to changing the
+effective user, is Linux specific (SysVish). We welcome any changes
+in regard to making the mechanism work with other platforms.
+
+
+CREDITS
+-------
+
+We use `concat`, a lightweight replacement for `asprintf`, in order to be more
+portable. This was written by Solar Designer and is in the public domain. See
+<http://www.openwall.com/popa3d/>.
+
Index: a/dcron/create-4.5-patch/dcron-4.5-new/crontab.c
===================================================================
--- a/dcron/create-4.5-patch/dcron-4.5-new/crontab.c	(nonexistent)
+++ a/dcron/create-4.5-patch/dcron-4.5-new/crontab.c	(revision 5)
@@ -0,0 +1,369 @@
+
+/*
+ * CRONTAB.C
+ *
+ * crontab [-u user] [-c dir] [-l|-e|-d|file|-]
+ * usually run as setuid root
+ * -u and -c options only work if getuid() == geteuid()
+ *
+ * Copyright 1994 Matthew Dillon (dillon@apollo.backplane.com)
+ * Copyright 2009-2011 James Pryor <profjim@jimpryor.net>
+ * May be distributed under the GNU General Public License
+ */
+
+#include "defs.h"
+
+Prototype void printlogf(int level, const char *ctl, ...);
+
+void Usage(void);
+int GetReplaceStream(const char *user, const char *file);
+void EditFile(const char *user, const char *file);
+
+const char *CDir = CRONTABS;
+int   UserId;
+
+
+int
+main(int ac, char **av)
+{
+	enum { NONE, EDIT, LIST, REPLACE, DELETE } option = NONE;
+	struct passwd *pas;
+	char *repFile = NULL;
+	int repFd = 0;
+	int i;
+	char caller[SMALL_BUFFER];		/* user that ran program */
+
+	UserId = getuid();
+	if ((pas = getpwuid(UserId)) == NULL) {
+		perror("getpwuid");
+		exit(1);
+	}
+	/* [v]snprintf write at most size including \0; they'll null-terminate, even when they truncate */
+	/* return value >= size means result was truncated */
+	if (snprintf(caller, sizeof(caller), "%s", pas->pw_name) >= sizeof(caller)) {
+		printlogf(0, "username '%s' too long", caller);
+		exit(1);
+	}
+
+	opterr = 0;
+	while ((i=getopt(ac,av,"ledu:c:")) != -1) {
+		switch(i) {
+			case 'l':
+				if (option != NONE)
+					Usage();
+				else
+					option = LIST;
+				break;
+			case 'e':
+				if (option != NONE)
+					Usage();
+				else
+					option = EDIT;
+				break;
+			case 'd':
+				if (option != NONE)
+					Usage();
+				else
+					option = DELETE;
+				break;
+			case 'u':
+				/* getopt guarantees optarg != 0 here */
+				if (*optarg != 0 && getuid() == geteuid()) {
+					pas = getpwnam(optarg);
+					if (pas) {
+						UserId = pas->pw_uid;
+						/* paranoia */
+						if ((pas = getpwuid(UserId)) == NULL) {
+							perror("getpwuid");
+							exit(1);
+						}
+					} else {
+						printlogf(0, "user '%s' unknown", optarg);
+						exit(1);
+					}
+				} else {
+					printlogf(0, "-u option: superuser only");
+					exit(1);
+				}
+				break;
+			case 'c':
+				/* getopt guarantees optarg != 0 here */
+				if (*optarg != 0 && getuid() == geteuid()) {
+					CDir = optarg;
+				} else {
+					printlogf(0, "-c option: superuser only");
+					exit(1);
+				}
+				break;
+			default:
+				/* unrecognized -X */
+				option = NONE;
+		}
+	}
+
+	if (option == NONE && optind == ac - 1) {
+		if (av[optind][0] != '-') {
+			option = REPLACE;
+			repFile = av[optind];
+			optind++;
+		} else if (av[optind][1] == 0) {
+			option = REPLACE;
+			optind++;
+		}
+	}
+	if (option == NONE || optind != ac) {
+		Usage();
+	}
+
+	/*
+	 * If there is a replacement file, obtain a secure descriptor to it.
+	 */
+
+	if (repFile) {
+		repFd = GetReplaceStream(caller, repFile);
+		if (repFd < 0) {
+			printlogf(0, "unable to read replacement file %s", repFile);
+			exit(1);
+		}
+	}
+
+	/*
+	 * Change directory to our crontab directory
+	 */
+
+	if (chdir(CDir) < 0) {
+		printlogf(0, "cannot change dir to %s: %s", CDir, strerror(errno));
+		exit(1);
+	}
+
+	/*
+	 * Handle options as appropriate
+	 */
+
+	switch(option) {
+		case LIST:
+			{
+				FILE *fi;
+				char buf[RW_BUFFER];
+
+				if ((fi = fopen(pas->pw_name, "r"))) {
+					while (fgets(buf, sizeof(buf), fi) != NULL)
+						fputs(buf, stdout);
+					fclose(fi);
+				} else {
+					fprintf(stderr, "no crontab for %s\n", pas->pw_name);
+					/* no error code */
+				}
+			}
+			break;
+		case EDIT:
+			{
+				FILE *fi;
+				int fd;
+				int n;
+				char tmp[] = TMPDIR "/crontab.XXXXXX";
+				char buf[RW_BUFFER];
+
+				/*
+				 * Create temp file with perm 0600 and O_EXCL flag, ensuring that this call creates the file
+				 * Read from fi for "$CDir/$USER", write to fd for temp file
+				 * EditFile changes user if necessary, and runs editor on temp file
+				 * Then we delete the temp file, keeping its fd as repFd
+				 */
+				if ((fd = mkstemp(tmp)) >= 0) {
+					chown(tmp, getuid(), getgid());
+					if ((fi = fopen(pas->pw_name, "r"))) {
+						while ((n = fread(buf, 1, sizeof(buf), fi)) > 0)
+							write(fd, buf, n);
+					}
+					EditFile(caller, tmp);
+					remove(tmp);
+					lseek(fd, 0L, 0);
+					repFd = fd;
+				} else {
+					printlogf(0, "unable to create %s: %s", tmp, strerror(errno));
+					exit(1);
+				}
+
+			}
+			option = REPLACE;
+			/* fall through */
+		case REPLACE:
+			{
+				char buf[RW_BUFFER];
+				char path[SMALL_BUFFER];
+				int fd;
+				int n;
+
+				/*
+				 * Read from repFd, write to fd for "$CDir/$USER.new"
+				 */
+				snprintf(path, sizeof(path), "%s.new", pas->pw_name);
+				if ((fd = open(path, O_CREAT|O_TRUNC|O_APPEND|O_WRONLY, 0600)) >= 0) {
+					while ((n = read(repFd, buf, sizeof(buf))) > 0) {
+						write(fd, buf, n);
+					}
+					close(fd);
+					rename(path, pas->pw_name);
+				} else {
+					fprintf(stderr, "unable to create %s/%s: %s\n",
+							CDir,
+							path,
+							strerror(errno)
+						   );
+				}
+				close(repFd);
+			}
+			break;
+		case DELETE:
+			remove(pas->pw_name);
+			break;
+		case NONE:
+		default:
+			break;
+	}
+
+	/*
+	 *  Bump notification file.  Handle window where crond picks file up
+	 *  before we can write our entry out.
+	 */
+
+	if (option == REPLACE || option == DELETE) {
+		FILE *fo;
+		struct stat st;
+
+		while ((fo = fopen(CRONUPDATE, "a"))) {
+			fprintf(fo, "%s\n", pas->pw_name);
+			fflush(fo);
+			if (fstat(fileno(fo), &st) != 0 || st.st_nlink != 0) {
+				fclose(fo);
+				break;
+			}
+			fclose(fo);
+			/* loop */
+		}
+		if (fo == NULL) {
+			fprintf(stderr, "unable to append to %s/%s\n", CDir, CRONUPDATE);
+		}
+	}
+	exit(0);
+	/* not reached */
+}
+
+void
+printlogf(int level, const char *ctl, ...)
+{
+	va_list va;
+	char buf[LOG_BUFFER];
+
+	va_start(va, ctl);
+	vsnprintf(buf, sizeof(buf), ctl, va);
+	write(2, buf, strlen(buf));
+	va_end(va);
+}
+
+void
+Usage(void)
+{
+	/*
+	 * parse error
+	 */
+	printf("crontab " VERSION "\n");
+	printf("crontab file [-u user]  replace crontab from file\n");
+	printf("crontab -  [-u user]    replace crontab from stdin\n");
+	printf("crontab -l [-u user]    list crontab\n");
+	printf("crontab -e [-u user]    edit crontab\n");
+	printf("crontab -d [-u user]    delete crontab\n");
+	printf("crontab -c dir <opts>   specify crontab directory\n");
+	exit(2);
+}
+
+int
+GetReplaceStream(const char *user, const char *file)
+{
+	int filedes[2];
+	int pid;
+	int fd;
+	int n;
+	char buf[RW_BUFFER];
+
+	if (pipe(filedes) < 0) {
+		perror("pipe");
+		return(-1);
+	}
+	if ((pid = fork()) < 0) {
+		perror("fork");
+		return(-1);
+	}
+	if (pid > 0) {
+		/*
+		 * PARENT
+		 * Read from pipe[0], return it (or -1 if it's empty)
+		 */
+
+		close(filedes[1]);
+		if (read(filedes[0], buf, 1) != 1) {
+			close(filedes[0]);
+			filedes[0] = -1;
+		}
+		return(filedes[0]);
+	}
+
+	/*
+	 * CHILD
+	 * Read from fd for "$file", write to pipe[1]
+	 */
+
+	close(filedes[0]);
+
+	if (ChangeUser(user, NULL) < 0)
+		exit(0);
+
+	fd = open(file, O_RDONLY);
+	if (fd < 0) {
+		printlogf(0, "unable to open %s: %s", file, strerror(errno));
+		exit(1);
+	}
+	buf[0] = 0;
+	write(filedes[1], buf, 1);
+	while ((n = read(fd, buf, sizeof(buf))) > 0) {
+		write(filedes[1], buf, n);
+	}
+	exit(0);
+}
+
+void
+EditFile(const char *user, const char *file)
+{
+	int pid;
+
+	if ((pid = fork()) == 0) {
+		/*
+		 * CHILD - change user and run editor on "$file"
+		 */
+		const char *ptr;
+		char visual[SMALL_BUFFER];
+
+		if (ChangeUser(user, TMPDIR) < 0)
+			exit(0);
+		if ((ptr = getenv("EDITOR")) == NULL || strlen(ptr) >= sizeof(visual))
+			if ((ptr = getenv("VISUAL")) == NULL || strlen(ptr) >= sizeof(visual))
+				ptr = PATH_VI;
+
+		/* [v]snprintf write at most size including \0; they'll null-terminate, even when they truncate */
+		/* return value >= size means result was truncated */
+		if (snprintf(visual, sizeof(visual), "%s %s", ptr, file) < sizeof(visual))
+			execl("/bin/sh", "/bin/sh", "-c", visual, NULL);
+		printlogf(0, "couldn't exec %s", visual);
+		exit(1);
+	}
+	if (pid < 0) {
+		/*
+		 * PARENT - failure
+		 */
+		perror("fork");
+		exit(1);
+	}
+	waitpid(pid, NULL, 0);
+}
+
Index: a/dcron/create-4.5-patch/dcron-4.5-new/database.c
===================================================================
--- a/dcron/create-4.5-patch/dcron-4.5-new/database.c	(nonexistent)
+++ a/dcron/create-4.5-patch/dcron-4.5-new/database.c	(revision 5)
@@ -0,0 +1,1250 @@
+
+/*
+ * DATABASE.C
+ *
+ * Copyright 1994 Matthew Dillon (dillon@apollo.backplane.com)
+ * Copyright 2009-2011 James Pryor <profjim@jimpryor.net>
+ * May be distributed under the GNU General Public License
+ */
+
+#include "defs.h"
+
+Prototype void CheckUpdates(const char *dpath, const char *user_override, time_t t1, time_t t2);
+Prototype void SynchronizeDir(const char *dpath, const char *user_override, int initial_scan);
+Prototype void ReadTimestamps(const char *user);
+Prototype int TestJobs(time_t t1, time_t t2);
+Prototype int TestStartupJobs(void);
+Prototype int ArmJob(CronFile *file, CronLine *line, time_t t1, time_t t2);
+Prototype void RunJobs(void);
+Prototype int CheckJobs(void);
+
+void SynchronizeFile(const char *dpath, const char *fname, const char *uname);
+void DeleteFile(CronFile **pfile);
+char *ParseInterval(int *interval, char *ptr);
+char *ParseField(char *userName, char *ary, int modvalue, int off, int onvalue, const char **names, char *ptr);
+void FixDayDow(CronLine *line);
+
+CronFile *FileBase = NULL;
+
+const char *DowAry[] = {
+	"sun",
+	"mon",
+	"tue",
+	"wed",
+	"thu",
+	"fri",
+	"sat",
+
+	"Sun",
+	"Mon",
+	"Tue",
+	"Wed",
+	"Thu",
+	"Fri",
+	"Sat",
+	NULL
+};
+
+const char *MonAry[] = {
+	"jan",
+	"feb",
+	"mar",
+	"apr",
+	"may",
+	"jun",
+	"jul",
+	"aug",
+	"sep",
+	"oct",
+	"nov",
+	"dec",
+
+	"Jan",
+	"Feb",
+	"Mar",
+	"Apr",
+	"May",
+	"Jun",
+	"Jul",
+	"Aug",
+	"Sep",
+	"Oct",
+	"Nov",
+	"Dec",
+	NULL
+};
+
+const char *FreqAry[] = {
+	"noauto",
+	"reboot",
+	"hourly",
+	"daily",
+	"weekly",
+	"monthly",
+	"yearly",
+	NULL
+};
+
+/*
+ * Check the cron.update file in the specified directory.  If user_override
+ * is NULL then the files in the directory belong to the user whose name is
+ * the file, otherwise they belong to the user_override user.
+ */
+void
+CheckUpdates(const char *dpath, const char *user_override, time_t t1, time_t t2)
+{
+	FILE *fi;
+	char buf[SMALL_BUFFER];
+	char *fname, *ptok, *job;
+	char *path;
+
+	if (!(path = concat(dpath, "/", CRONUPDATE, NULL))) {
+		errno = ENOMEM;
+		perror("CheckUpdates");
+		exit(1);
+	}
+	if ((fi = fopen(path, "r")) != NULL) {
+		remove(path);
+		printlogf(LOG_INFO, "reading %s/%s\n", dpath, CRONUPDATE);
+		while (fgets(buf, sizeof(buf), fi) != NULL) {
+			/*
+			 * if buf has only sep chars, return NULL and point ptok at buf's terminating 0
+			 * else return pointer to first non-sep of buf and
+			 * 		if there's a following sep, overwrite it to 0 and point ptok to next char
+			 * 		else point ptok at buf's terminating 0
+			 */
+			fname = strtok_r(buf, " \t\n", &ptok);
+
+			if (user_override)
+				SynchronizeFile(dpath, fname, user_override);
+			else if (!getpwnam(fname))
+				printlogf(LOG_WARNING, "ignoring %s/%s (non-existent user)\n", dpath, fname);
+			else if (*ptok == 0 || *ptok == '\n') {
+				SynchronizeFile(dpath, fname, fname);
+				ReadTimestamps(fname);
+			} else {
+				/* if fname is followed by whitespace, we prod any following jobs */
+				CronFile *file = FileBase;
+				while (file) {
+					if (strcmp(file->cf_UserName, fname) == 0)
+						break;
+					file = file->cf_Next;
+				}
+				if (!file)
+					printlogf(LOG_WARNING, "unable to prod for user %s: no crontab\n", fname);
+				else {
+					CronLine *line;
+					/* calling strtok(ptok...) then strtok(NULL) is equiv to calling strtok_r(NULL,..&ptok) */
+					while ((job = strtok(ptok, " \t\n")) != NULL) {
+						time_t force = t2;
+						ptok = NULL;
+						if (*job == '!') {
+							force = (time_t)-1;
+							++job;
+						}
+						line = file->cf_LineBase;
+						while (line) {
+							if (line->cl_JobName && strcmp(line->cl_JobName, job) == 0)
+								break;
+							line = line->cl_Next;
+						}
+						if (line)
+							ArmJob(file, line, t1, force);
+						else {
+							printlogf(LOG_WARNING, "unable to prod for user %s: unknown job %s\n", fname, job);
+							/* we can continue parsing this line, we just don't install any CronWaiter for the requested job */
+						}
+					}
+				}
+			}
+		}
+		fclose(fi);
+	}
+	free(path);
+}
+
+void
+SynchronizeDir(const char *dpath, const char *user_override, int initial_scan)
+{
+	CronFile **pfile;
+	CronFile *file;
+	struct dirent *den;
+	DIR *dir;
+	char *path;
+
+	if (DebugOpt)
+		printlogf(LOG_DEBUG, "Synchronizing %s\n", dpath);
+
+	/*
+	 * Delete all database CronFiles for this directory.  DeleteFile() will
+	 * free *pfile and relink the *pfile pointer, or in the alternative will
+	 * mark it as deleted.
+	 */
+	pfile = &FileBase;
+	while ((file = *pfile) != NULL) {
+		if (file->cf_Deleted == 0 && strcmp(file->cf_DPath, dpath) == 0) {
+			DeleteFile(pfile);
+		} else {
+			pfile = &file->cf_Next;
+		}
+	}
+
+	/*
+	 * Since we are resynchronizing the entire directory, remove the
+	 * the CRONUPDATE file.
+	 */
+	if (!(path = concat(dpath, "/", CRONUPDATE, NULL))) {
+		errno = ENOMEM;
+		perror("SynchronizeDir");
+		exit(1);
+	}
+	remove(path);
+	free(path);
+
+	/*
+	 * Scan the specified directory
+	 */
+	if ((dir = opendir(dpath)) != NULL) {
+		while ((den = readdir(dir)) != NULL) {
+			if (strchr(den->d_name, '.') != NULL)
+				continue;
+			if (strcmp(den->d_name, CRONUPDATE) == 0)
+				continue;
+			if (user_override) {
+				SynchronizeFile(dpath, den->d_name, user_override);
+			} else if (getpwnam(den->d_name)) {
+				SynchronizeFile(dpath, den->d_name, den->d_name);
+			} else {
+				printlogf(LOG_WARNING, "ignoring %s/%s (non-existent user)\n",
+						dpath, den->d_name);
+			}
+		}
+		closedir(dir);
+	} else {
+		if (initial_scan)
+			printlogf(LOG_ERR, "unable to scan directory %s\n", dpath);
+			/* softerror, do not exit the program */
+	}
+}
+
+
+void
+ReadTimestamps(const char *user)
+{
+	CronFile *file;
+	CronLine *line;
+	FILE *fi;
+	char buf[SMALL_BUFFER];
+	char *ptr;
+	struct tm tm = {0};
+	time_t sec, freq;
+
+	file = FileBase;
+	while (file != NULL) {
+		if (file->cf_Deleted == 0 && (!user || strcmp(user, file->cf_UserName) == 0)) {
+			line = file->cf_LineBase;
+			while (line != NULL) {
+				if (line->cl_Timestamp) {
+					if ((fi = fopen(line->cl_Timestamp, "r")) != NULL) {
+						if (fgets(buf, sizeof(buf), fi) != NULL) {
+							int fake = 0;
+							ptr = buf;
+							if (strncmp(buf, "after ", 6) == 0) {
+								fake = 1;
+								ptr += 6;
+							}
+							sec = (time_t)-1;
+							ptr = strptime(ptr, CRONSTAMP_FMT, &tm);
+							if (ptr && (*ptr == 0 || *ptr == '\n')) {
+								/* strptime uses current seconds when seconds not specified? anyway, we don't get round minutes */
+								tm.tm_sec = 0;
+								tm.tm_isdst = -1;
+								sec = mktime(&tm);
+							}
+							if (sec == (time_t)-1) {
+								printlogf(LOG_ERR, "unable to parse timestamp (user %s job %s)\n", file->cf_UserName, line->cl_JobName);
+								/* we continue checking other timestamps in this CronFile */
+							} else {
+								/* sec -= sec % 60; */
+								if (fake) {
+									line->cl_NotUntil = sec;
+								} else {
+									line->cl_LastRan = sec;
+									freq = (line->cl_Freq > 0) ? line->cl_Freq : line->cl_Delay;
+									/* if (line->cl_NotUntil < line->cl_LastRan + freq) */
+									line->cl_NotUntil = line->cl_LastRan + freq;
+								}
+							}
+						}
+						fclose(fi);
+					} else {
+						int succeeded = 0;
+						printlogf(LOG_NOTICE, "no timestamp found (user %s job %s)\n", file->cf_UserName, line->cl_JobName);
+						/* write a fake timestamp file so our initial NotUntil doesn't keep being reset every hour when crond does a SynchronizeDir */
+						if ((fi = fopen(line->cl_Timestamp, "w")) != NULL) {
+							if (strftime(buf, sizeof(buf), CRONSTAMP_FMT, localtime(&line->cl_NotUntil)))
+								if (fputs("after ", fi) >= 0)
+									if (fputs(buf,fi) >= 0)
+										succeeded = 1;
+							fclose(fi);
+						}
+						if (!succeeded)
+							printlogf(LOG_WARNING, "unable to write timestamp to %s (user %s %s)\n", line->cl_Timestamp, file->cf_UserName, line->cl_Description);
+					}
+				}
+				line = line->cl_Next;
+			}
+		}
+		file = file->cf_Next;
+	}
+}
+
+void
+SynchronizeFile(const char *dpath, const char *fileName, const char *userName)
+{
+	CronFile **pfile;
+	CronFile *file;
+	int maxEntries;
+	int maxLines;
+	char buf[RW_BUFFER]; /* max length for crontab lines */
+	char *path;
+	FILE *fi;
+
+	/*
+	 * Limit entries
+	 */
+	if (strcmp(userName, "root") == 0)
+		maxEntries = 65535;
+	else
+		maxEntries = MAXLINES;
+	maxLines = maxEntries * 10;
+
+	/*
+	 * Delete any existing copy of this CronFile
+	 */
+	pfile = &FileBase;
+	while ((file = *pfile) != NULL) {
+		if (file->cf_Deleted == 0 && strcmp(file->cf_DPath, dpath) == 0 &&
+				strcmp(file->cf_FileName, fileName) == 0
+		   ) {
+			DeleteFile(pfile);
+		} else {
+			pfile = &file->cf_Next;
+		}
+	}
+
+	if (!(path = concat(dpath, "/", fileName, NULL))) {
+		errno = ENOMEM;
+		perror("SynchronizeFile");
+		exit(1);
+	}
+	if ((fi = fopen(path, "r")) != NULL) {
+		struct stat sbuf;
+
+		if (fstat(fileno(fi), &sbuf) == 0 && sbuf.st_uid == DaemonUid) {
+			CronFile *file = calloc(1, sizeof(CronFile));
+			CronLine **pline;
+			time_t tnow = time(NULL);
+			tnow -= tnow % 60;
+
+			file->cf_UserName = strdup(userName);
+			file->cf_FileName = strdup(fileName);
+			file->cf_DPath = strdup(dpath);
+			pline = &file->cf_LineBase;
+
+			/* fgets reads at most size-1 chars until \n or EOF, then adds a\0; \n if present is stored in buf */
+			while (fgets(buf, sizeof(buf), fi) != NULL && --maxLines) {
+				CronLine line;
+				char *ptr = buf;
+				int len;
+
+				while (*ptr == ' ' || *ptr == '\t' || *ptr == '\n')
+					++ptr;
+
+				len = strlen(ptr);
+				if (len && ptr[len-1] == '\n')
+					ptr[--len] = 0;
+
+				if (*ptr == 0 || *ptr == '#')
+					continue;
+
+				if (--maxEntries == 0)
+					break;
+
+				memset(&line, 0, sizeof(line));
+
+				if (DebugOpt)
+					printlogf(LOG_DEBUG, "User %s Entry %s\n", userName, buf);
+
+				if (*ptr == '@') {
+					/*
+					 * parse @hourly, etc
+					 */
+					int	j;
+					line.cl_Delay = -1;
+					ptr += 1;
+					for (j = 0; FreqAry[j]; ++j) {
+						if (strncmp(ptr, FreqAry[j], strlen(FreqAry[j])) == 0) {
+							break;
+						}
+					}
+					if (FreqAry[j]) {
+						ptr += strlen(FreqAry[j]);
+						switch(j) {
+							case 0:
+								/* noauto */
+								line.cl_Freq = -2;
+								line.cl_Delay = 0;
+								break;
+							case 1:
+								/* reboot */
+								line.cl_Freq = -1;
+								line.cl_Delay = 0;
+								break;
+							case 2:
+								line.cl_Freq = HOURLY_FREQ;
+								break;
+							case 3:
+								line.cl_Freq = DAILY_FREQ;
+								break;
+							case 4:
+								line.cl_Freq = WEEKLY_FREQ;
+								break;
+							case 5:
+								line.cl_Freq = MONTHLY_FREQ;
+								break;
+							case 6:
+								line.cl_Freq = YEARLY_FREQ;
+								break;
+							/* else line.cl_Freq will remain 0 */
+						}
+					}
+
+					if (!line.cl_Freq || (*ptr != ' ' && *ptr != '\t')) {
+						printlogf(LOG_WARNING, "failed parsing crontab for user %s: %s\n", userName, buf);
+						continue;
+					}
+
+					if (line.cl_Delay < 0) {
+						/*
+						 * delays on @daily, @hourly, etc are 1/20 of the frequency
+						 * so they don't all start at once
+						 * this also affects how they behave when the job returns EAGAIN
+						 */
+						line.cl_Delay = line.cl_Freq / 20;
+						line.cl_Delay -= line.cl_Delay % 60;
+						if (line.cl_Delay == 0)
+							line.cl_Delay = 60;
+						/* all minutes are permitted */
+						for (j=0; j<60; ++j)
+							line.cl_Mins[j] = 1;
+						for (j=0; j<24; ++j)
+							line.cl_Hrs[j] = 1;
+						for (j=1; j<32; ++j)
+							/* days are numbered 1..31 */
+							line.cl_Days[j] = 1;
+						for (j=0; j<12; ++j)
+							line.cl_Mons[j] = 1;
+					}
+
+					while (*ptr == ' ' || *ptr == '\t')
+						++ptr;
+
+				} else {
+					/*
+					 * parse date ranges
+					 */
+
+					ptr = ParseField(file->cf_UserName, line.cl_Mins, 60, 0, 1,
+							NULL, ptr);
+					ptr = ParseField(file->cf_UserName, line.cl_Hrs,  24, 0, 1,
+							NULL, ptr);
+					ptr = ParseField(file->cf_UserName, line.cl_Days, 32, 0, 1,
+							NULL, ptr);
+					ptr = ParseField(file->cf_UserName, line.cl_Mons, 12, -1, 1,
+							MonAry, ptr);
+					ptr = ParseField(file->cf_UserName, line.cl_Dow, 7, 0, 31,
+							DowAry, ptr);
+					/*
+					 * check failure
+					 */
+
+					if (ptr == NULL)
+						continue;
+
+					/*
+					 * fix days and dow - if one is not * and the other
+					 * is *, the other is set to 0, and vise-versa
+					 */
+
+					FixDayDow(&line);
+				}
+
+				/* check for ID=... and AFTER=... and FREQ=... */
+				do {
+					if (strncmp(ptr, ID_TAG, strlen(ID_TAG)) == 0) {
+						if (line.cl_JobName) {
+							/* only assign ID_TAG once */
+							printlogf(LOG_WARNING, "failed parsing crontab for user %s: repeated %s\n", userName, ptr);
+							ptr = NULL;
+						} else {
+							ptr += strlen(ID_TAG);
+							/*
+							 * name = strsep(&ptr, seps):
+							 * return name = ptr, and if ptr contains sep chars, overwrite first with 0 and point ptr to next char
+							 *                    else set ptr=NULL
+							 */
+							if (!(line.cl_Description = concat("job ", strsep(&ptr, " \t"), NULL))) {
+								errno = ENOMEM;
+								perror("SynchronizeFile");
+								exit(1);
+							}
+							line.cl_JobName = line.cl_Description + 4;
+							if (!ptr)
+								printlogf(LOG_WARNING, "failed parsing crontab for user %s: no command after %s%s\n", userName, ID_TAG, line.cl_JobName);
+						}
+					} else if (strncmp(ptr, FREQ_TAG, strlen(FREQ_TAG)) == 0) {
+						if (line.cl_Freq) {
+							/* only assign FREQ_TAG once */
+							printlogf(LOG_WARNING, "failed parsing crontab for user %s: repeated %s\n", userName, ptr);
+							ptr = NULL;
+						} else {
+							char *base = ptr;
+							ptr += strlen(FREQ_TAG);
+							ptr = ParseInterval(&line.cl_Freq, ptr);
+							if (ptr && *ptr == '/')
+								ptr = ParseInterval(&line.cl_Delay, ++ptr);
+							else
+								line.cl_Delay = line.cl_Freq;
+							if (!ptr) {
+								printlogf(LOG_WARNING, "failed parsing crontab for user %s: %s\n", userName, base);
+							} else if (*ptr != ' ' && *ptr != '\t') {
+								printlogf(LOG_WARNING, "failed parsing crontab for user %s: no command after %s\n", userName, base);
+								ptr = NULL;
+							}
+						}
+					} else if (strncmp(ptr, WAIT_TAG, strlen(WAIT_TAG)) == 0) {
+						if (line.cl_Waiters) {
+							/* only assign WAIT_TAG once */
+							printlogf(LOG_WARNING, "failed parsing crontab for user %s: repeated %s\n", userName, ptr);
+							ptr = NULL;
+						} else {
+							short more = 1;
+							char *name;
+							ptr += strlen(WAIT_TAG);
+							do {
+								CronLine *job, **pjob;
+								if (strcspn(ptr,",") < strcspn(ptr," \t"))
+									name = strsep(&ptr, ",");
+								else {
+									more = 0;
+									name = strsep(&ptr, " \t");
+								}
+								if (!ptr || *ptr == 0) {
+									/* unexpectedly this was the last token in buf; so abort */
+									printlogf(LOG_WARNING, "failed parsing crontab for user %s: no command after %s%s\n", userName, WAIT_TAG, name);
+									ptr = NULL;
+								} else {
+									int waitfor = 0;
+									char *w, *wsave;
+									if ((w = strchr(name, '/')) != NULL) {
+										wsave = w++;
+										w = ParseInterval(&waitfor, w);
+										if (!w || *w != 0) {
+											printlogf(LOG_WARNING, "failed parsing crontab for user %s: %s%s\n", userName, WAIT_TAG, name);
+											ptr = NULL;
+										} else
+											/* truncate name */
+											*wsave = 0;
+									}
+									if (ptr) {
+										/* look for a matching CronLine */
+										pjob = &file->cf_LineBase;
+										while ((job = *pjob) != NULL) {
+											if (job->cl_JobName && strcmp(job->cl_JobName, name) == 0) {
+												CronWaiter *waiter = malloc(sizeof(CronWaiter));
+												CronNotifier *notif = malloc(sizeof(CronNotifier));
+												waiter->cw_Flag = -1;
+												waiter->cw_MaxWait = waitfor;
+												waiter->cw_NotifLine = job;
+												waiter->cw_Notifier = notif;
+												waiter->cw_Next = line.cl_Waiters;	/* add to head of line.cl_Waiters */
+												line.cl_Waiters = waiter;
+												notif->cn_Waiter = waiter;
+												notif->cn_Next = job->cl_Notifs;	/* add to head of job->cl_Notifs */
+												job->cl_Notifs = notif;
+												break;
+											} else
+												pjob = &job->cl_Next;
+										}
+										if (!job) {
+											printlogf(LOG_WARNING, "failed parsing crontab for user %s: unknown job %s\n", userName, name);
+											/* we can continue parsing this line, we just don't install any CronWaiter for the requested job */
+										}
+									}
+								}
+							} while (ptr && more);
+						}
+					} else
+						break;
+					if (!ptr)
+						break;
+					while (*ptr == ' ' || *ptr == '\t')
+						++ptr;
+				} while (!line.cl_JobName || !line.cl_Waiters || !line.cl_Freq);
+
+				if (line.cl_JobName && (!ptr || *line.cl_JobName == 0)) {
+					/* we're aborting, or ID= was empty */
+					free(line.cl_Description);
+					line.cl_Description = NULL;
+					line.cl_JobName = NULL;
+				}
+				if (ptr && line.cl_Delay > 0 && !line.cl_JobName) {
+					printlogf(LOG_WARNING, "failed parsing crontab for user %s: writing timestamp requires job %s to be named\n", userName, ptr);
+					ptr = NULL;
+				}
+				if (!ptr) {
+					/* couldn't parse so we abort; free any cl_Waiters */
+					if (line.cl_Waiters) {
+						CronWaiter **pwaiters, *waiters;
+						pwaiters = &line.cl_Waiters;
+						while ((waiters = *pwaiters) != NULL) {
+							*pwaiters = waiters->cw_Next;
+							/* leave the Notifier allocated but disabled */
+							waiters->cw_Notifier->cn_Waiter = NULL;
+							free(waiters);
+						}
+					}
+					continue;
+				}
+				/* now we've added any ID=... or AFTER=... */
+
+				/*
+				 * copy command string
+				 */
+				line.cl_Shell = strdup(ptr);
+
+				if (line.cl_Delay > 0) {
+					if (!(line.cl_Timestamp = concat(TSDir, "/", userName, ".", line.cl_JobName, NULL))) {
+						errno = ENOMEM;
+						perror("SynchronizeFile");
+						exit(1);
+					}
+					line.cl_NotUntil = tnow + line.cl_Delay;
+				}
+
+				if (line.cl_JobName) {
+					if (DebugOpt)
+						printlogf(LOG_DEBUG, "    Command %s Job %s\n", line.cl_Shell, line.cl_JobName);
+				} else {
+					/* when cl_JobName is NULL, we point cl_Description to cl_Shell */
+					line.cl_Description = line.cl_Shell;
+					if (DebugOpt)
+						printlogf(LOG_DEBUG, "    Command %s\n", line.cl_Shell);
+				}
+
+				*pline = calloc(1, sizeof(CronLine));
+				/* copy working CronLine to newly allocated one */
+				**pline = line;
+
+				pline = &((*pline)->cl_Next);
+			}
+
+			*pline = NULL;
+
+			file->cf_Next = FileBase;
+			FileBase = file;
+
+			if (maxLines == 0 || maxEntries == 0)
+				printlogf(LOG_WARNING, "maximum number of lines reached for user %s\n", userName);
+		}
+		fclose(fi);
+	}
+	free(path);
+}
+
+char *
+ParseInterval(int *interval, char *ptr)
+{
+	int n = 0;
+	if (ptr && *ptr >= '0' && *ptr <= '9' && (n = strtol(ptr, &ptr, 10)) > 0)
+		switch (*ptr) {
+			case 'm':
+				n *= 60;
+				break;
+			case 'h':
+				n *= HOURLY_FREQ;
+				break;
+			case 'd':
+				n *= DAILY_FREQ;
+				break;
+			case 'w':
+				n *= WEEKLY_FREQ;
+				break;
+			default:
+				n = 0;
+		}
+	if (n > 0) {
+		*interval = n;
+		return (ptr+1);
+	} else
+		return (NULL);
+}
+
+char *
+ParseField(char *user, char *ary, int modvalue, int off, int onvalue, const char **names, char *ptr)
+{
+	char *base = ptr;
+	int n1 = -1;
+	int n2 = -1;
+
+	if (base == NULL)
+		return (NULL);
+
+	while (*ptr != ' ' && *ptr != '\t' && *ptr != '\n') {
+		int skip = 0;
+
+		/*
+		 * Handle numeric digit or symbol or '*'
+		 */
+
+		if (*ptr == '*') {
+			n1 = 0;			/* everything will be filled */
+			n2 = modvalue - 1;
+			skip = 1;
+			++ptr;
+		} else if (*ptr >= '0' && *ptr <= '9') {
+			if (n1 < 0)
+				n1 = strtol(ptr, &ptr, 10) + off;
+			else
+				n2 = strtol(ptr, &ptr, 10) + off;
+			skip = 1;
+		} else if (names) {
+			int i;
+
+			for (i = 0; names[i]; ++i) {
+				if (strncmp(ptr, names[i], strlen(names[i])) == 0) {
+					break;
+				}
+			}
+			if (names[i]) {
+				ptr += strlen(names[i]);
+				if (n1 < 0)
+					n1 = i;
+				else
+					n2 = i;
+				skip = 1;
+			}
+		}
+
+		/*
+		 * handle optional range '-'
+		 */
+
+		if (skip == 0) {
+			printlogf(LOG_WARNING, "failed parsing crontab for user %s: %s\n", user, base);
+			return(NULL);
+		}
+		if (*ptr == '-' && n2 < 0) {
+			++ptr;
+			continue;
+		}
+
+		/*
+		 * collapse single-value ranges, handle skipmark, and fill
+		 * in the character array appropriately.
+		 */
+
+		if (n2 < 0)
+			n2 = n1;
+
+		n2 = n2 % modvalue;
+
+		if (*ptr == '/')
+			skip = strtol(ptr + 1, &ptr, 10);
+
+		/*
+		 * fill array, using a failsafe is the easiest way to prevent
+		 * an endless loop
+		 */
+
+		{
+			int s0 = 1;
+			int failsafe = 1024;
+
+			--n1;
+			do {
+				n1 = (n1 + 1) % modvalue;
+
+				if (--s0 == 0) {
+					ary[n1] = onvalue;
+					s0 = skip;
+				}
+			} while (n1 != n2 && --failsafe);
+
+			if (failsafe == 0) {
+				printlogf(LOG_WARNING, "failed parsing crontab for user %s: %s\n", user, base);
+				return(NULL);
+			}
+		}
+		if (*ptr != ',')
+			break;
+		++ptr;
+		n1 = -1;
+		n2 = -1;
+	}
+
+	if (*ptr != ' ' && *ptr != '\t' && *ptr != '\n') {
+		printlogf(LOG_WARNING, "failed parsing crontab for user %s: %s\n", user, base);
+		return(NULL);
+	}
+
+	while (*ptr == ' ' || *ptr == '\t' || *ptr == '\n')
+		++ptr;
+
+	if (DebugOpt) {
+		int i;
+
+		for (i = 0; i < modvalue; ++i)
+			if (modvalue == 7)
+				printlogf(LOG_DEBUG, "%2x ", ary[i]);
+			else
+				printlogf(LOG_DEBUG, "%d", ary[i]);
+		printlogf(LOG_DEBUG, "\n");
+	}
+
+	return(ptr);
+}
+
+void
+FixDayDow(CronLine *line)
+{
+	unsigned short i,j;
+	short weekUsed = 0;
+	short daysUsed = 0;
+
+	for (i = 0; i < arysize(line->cl_Dow); ++i) {
+		if (line->cl_Dow[i] == 0) {
+			weekUsed = 1;
+			break;
+		}
+	}
+	for (i = 0; i < arysize(line->cl_Days); ++i) {
+		if (line->cl_Days[i] == 0) {
+			if (weekUsed) {
+				if (!daysUsed) {
+					daysUsed = 1;
+					/* change from "every Mon" to "ith Mon"
+					 * 6th,7th... Dow are treated as 1st,2nd... */
+					for (j = 0; j < arysize(line->cl_Dow); ++j) {
+						line->cl_Dow[j] &= 1 << (i-1)%5;
+					}
+				} else {
+					/* change from "nth Mon" to "nth or ith Mon" */
+					for (j = 0; j < arysize(line->cl_Dow); ++j) {
+						if (line->cl_Dow[j])
+							line->cl_Dow[j] |= 1 << (i-1)%5;
+					}
+				}
+				/* continue cycling through cl_Days */
+			}
+			else {
+				daysUsed = 1;
+				break;
+			}
+		}
+	}
+	if (weekUsed) {
+		memset(line->cl_Days, 0, sizeof(line->cl_Days));
+	}
+	if (daysUsed && !weekUsed) {
+		memset(line->cl_Dow, 0, sizeof(line->cl_Dow));
+	}
+}
+
+/*
+ *  DeleteFile() - destroy a CronFile.
+ *
+ *  The CronFile (*pfile) is destroyed if possible, and marked cf_Deleted
+ *  if there are still active processes running on it.  *pfile is relinked
+ *  on success.
+ */
+void
+DeleteFile(CronFile **pfile)
+{
+	CronFile *file = *pfile;
+	CronLine **pline = &file->cf_LineBase;
+	CronLine *line;
+	CronWaiter **pwaiters, *waiters;
+	CronNotifier **pnotifs, *notifs;
+
+	file->cf_Running = 0;
+	file->cf_Deleted = 1;
+
+	while ((line = *pline) != NULL) {
+		if (line->cl_Pid > 0) {
+			file->cf_Running = 1;
+			pline = &line->cl_Next;
+		} else {
+			*pline = line->cl_Next;
+			free(line->cl_Shell);
+
+			if (line->cl_JobName)
+				/* this frees both cl_Description and cl_JobName
+				 * if cl_JobName is NULL, Description pointed to ch_Shell, which was already freed
+				 */
+				free(line->cl_Description);
+			if (line->cl_Timestamp)
+				free(line->cl_Timestamp);
+
+			pnotifs = &line->cl_Notifs;
+			while ((notifs = *pnotifs) != NULL) {
+				*pnotifs = notifs->cn_Next;
+				if (notifs->cn_Waiter) {
+					notifs->cn_Waiter->cw_NotifLine = NULL;
+					notifs->cn_Waiter->cw_Notifier = NULL;
+				}
+				free(notifs);
+			}
+			pwaiters = &line->cl_Waiters;
+			while ((waiters = *pwaiters) != NULL) {
+				*pwaiters = waiters->cw_Next;
+				if (waiters->cw_Notifier)
+					waiters->cw_Notifier->cn_Waiter = NULL;
+				free(waiters);
+			}
+
+			free(line);
+		}
+	}
+	if (file->cf_Running == 0) {
+		*pfile = file->cf_Next;
+		free(file->cf_DPath);
+		free(file->cf_FileName);
+		free(file->cf_UserName);
+		free(file);
+	}
+}
+
+
+/*
+ * TestJobs()
+ *
+ * determine which jobs need to be run.  Under normal conditions, the
+ * period is about a minute (one scan).  Worst case it will be one
+ * hour (60 scans).
+ */
+
+int
+TestJobs(time_t t1, time_t t2)
+{
+	short nJobs = 0;
+	time_t t;
+	CronFile *file;
+	CronLine *line;
+
+	for (file = FileBase; file; file = file->cf_Next) {
+		if (file->cf_Deleted)
+			continue;
+		for (line = file->cf_LineBase; line; line = line->cl_Next) {
+			struct CronWaiter *waiter;
+
+			if (line->cl_Pid == -2) {
+				/* can job stop waiting? */
+				int ready = 1;
+				waiter = line->cl_Waiters;
+				while (waiter != NULL) {
+					if (waiter->cw_Flag > 0) {
+						/* notifier exited unsuccessfully */
+						ready = 2;
+						break;
+					} else if (waiter->cw_Flag < 0)
+						/* still waiting, notifier hasn't run to completion */
+						ready = 0;
+					waiter = waiter->cw_Next;
+				}
+				if (ready == 2) {
+					if (DebugOpt)
+						printlogf(LOG_DEBUG, "cancelled waiting: user %s %s\n", file->cf_UserName, line->cl_Description);
+					line->cl_Pid = 0;
+				} else if (ready) {
+					if (DebugOpt)
+						printlogf(LOG_DEBUG, "finished waiting: user %s %s\n", file->cf_UserName, line->cl_Description);
+					nJobs += ArmJob(file, line, 0, -1);
+					/*
+					 if (line->cl_NotUntil)
+						 line->cl_NotUntil = t2;
+					*/
+				}
+			}
+		}
+	}
+
+	/*
+	 * Find jobs > t1 and <= t2
+	 */
+
+	for (t = t1 - t1 % 60; t <= t2; t += 60) {
+		if (t > t1) {
+			struct tm *tp = localtime(&t);
+
+			unsigned short n_wday = (tp->tm_mday - 1)%7 + 1;
+			if (n_wday >= 4) {
+				struct tm tnext = *tp;
+				tnext.tm_mday += 7;
+				if (mktime(&tnext) != (time_t)-1 && tnext.tm_mon != tp->tm_mon)
+					n_wday |= 16;	/* last dow in month is always recognized as 5th */
+			}
+
+			for (file = FileBase; file; file = file->cf_Next) {
+				if (file->cf_Deleted)
+					continue;
+				for (line = file->cf_LineBase; line; line = line->cl_Next) {
+					if ((line->cl_Pid == -2 || line->cl_Pid == 0) && (line->cl_Freq == 0 || (line->cl_Freq > 0 && t2 >= line->cl_NotUntil))) {
+						/* (re)schedule job? */
+						if (line->cl_Mins[tp->tm_min] &&
+								line->cl_Hrs[tp->tm_hour] &&
+								(line->cl_Days[tp->tm_mday] || (n_wday && line->cl_Dow[tp->tm_wday]) ) &&
+								line->cl_Mons[tp->tm_mon]
+						   ) {
+							if (line->cl_NotUntil)
+								line->cl_NotUntil = t2 - t2 % 60 + line->cl_Delay; /* save what minute this job was scheduled/started waiting, plus cl_Delay */
+							nJobs += ArmJob(file, line, t1, t2);
+						}
+					}
+				}
+			}
+		}
+	}
+	return(nJobs);
+}
+
+/*
+ * ArmJob: if t2 is (time_t)-1, we force-schedule the job without any waiting
+ * else it will wait on any of its declared notifiers who will run <= t2 + cw_MaxWait
+ */
+
+int
+ArmJob(CronFile *file, CronLine *line, time_t t1, time_t t2)
+{
+	struct CronWaiter *waiter;
+	if (line->cl_Pid > 0) {
+		printlogf(LOG_NOTICE, "process already running (%d): user %s %s\n",
+				line->cl_Pid,
+				file->cf_UserName,
+				line->cl_Description
+			);
+	} else if (t2 == -1 && line->cl_Pid != -1) {
+		line->cl_Pid = -1;
+		file->cf_Ready = 1;
+		return 1;
+	} else if (line->cl_Pid == 0) {
+		/* arming a waiting job (cl_Pid == -2) without forcing has no effect */
+		line->cl_Pid = -1;
+		/* if we have any waiters, zero them and arm cl_Pid=-2 */
+		waiter = line->cl_Waiters;
+		while (waiter != NULL) {
+			/* check if notifier will run <= t2 + cw_Max_Wait? */
+			if (!waiter->cw_NotifLine)
+				/* notifier deleted */
+				waiter->cw_Flag = 0;
+			else if (waiter->cw_NotifLine->cl_Pid != 0) {
+				/* if notifier is armed, or waiting, or running, we wait for it */
+				waiter->cw_Flag = -1;
+				line->cl_Pid = -2;
+			} else if (waiter->cw_NotifLine->cl_Freq < 0) {
+				/* arm any @noauto or @reboot jobs we're waiting on */
+				ArmJob(file, waiter->cw_NotifLine, t1, t2);
+				waiter->cw_Flag = -1;
+				line->cl_Pid = -2;
+			} else {
+				time_t t;
+				if (waiter->cw_MaxWait == 0)
+					/* when no MaxWait interval specified, we always wait */
+					waiter->cw_Flag = -1;
+				else if (waiter->cw_NotifLine->cl_Freq == 0 || (waiter->cw_NotifLine->cl_Freq > 0 && t2 + waiter->cw_MaxWait >= waiter->cw_NotifLine->cl_NotUntil)) {
+					/* default is don't wait */
+					waiter->cw_Flag = 0;
+					for (t = t1 - t1 % 60; t <= t2; t += 60) {
+						if (t > t1) {
+							struct tm *tp = localtime(&t);
+
+							unsigned short n_wday = (tp->tm_mday - 1)%7 + 1;
+							if (n_wday >= 4) {
+								struct tm tnext = *tp;
+								tnext.tm_mday += 7;
+								if (mktime(&tnext) != (time_t)-1 && tnext.tm_mon != tp->tm_mon)
+									n_wday |= 16;	/* last dow in month is always recognized as 5th */
+							}
+							if (line->cl_Mins[tp->tm_min] &&
+									line->cl_Hrs[tp->tm_hour] &&
+									(line->cl_Days[tp->tm_mday] || (n_wday && line->cl_Dow[tp->tm_wday]) ) &&
+									line->cl_Mons[tp->tm_mon]
+							   ) {
+								/* notifier will run soon enough, we wait for it */
+								waiter->cw_Flag = -1;
+								line->cl_Pid = -2;
+								break;
+							}
+						}
+					}
+				}
+			}
+			waiter = waiter->cw_Next;
+		}
+		if (line->cl_Pid == -1) {
+			/* job is ready to run */
+			file->cf_Ready = 1;
+			if (DebugOpt)
+				printlogf(LOG_DEBUG, "scheduled: user %s %s\n",
+						file->cf_UserName,
+						line->cl_Description
+					);
+			return 1;
+		} else if (DebugOpt)
+			printlogf(LOG_DEBUG, "waiting: user %s %s\n",
+					file->cf_UserName,
+					line->cl_Description
+				);
+	}
+	return 0;
+}
+
+int
+TestStartupJobs(void)
+{
+	short nJobs = 0;
+	time_t t1 = time(NULL);
+	CronFile *file;
+	CronLine *line;
+
+	t1 = t1 - t1 % 60 + 60;
+
+	for (file = FileBase; file; file = file->cf_Next) {
+		if (DebugOpt)
+			printlogf(LOG_DEBUG, "TestStartup for FILE %s/%s USER %s:\n",
+				file->cf_DPath, file->cf_FileName, file->cf_UserName);
+		for (line = file->cf_LineBase; line; line = line->cl_Next) {
+			struct CronWaiter *waiter;
+			if (DebugOpt) {
+				if (line->cl_JobName)
+					printlogf(LOG_DEBUG, "    LINE %s JOB %s\n", line->cl_Shell, line->cl_JobName);
+				else
+					printlogf(LOG_DEBUG, "    LINE %s\n", line->cl_Shell);
+			}
+
+			if (line->cl_Freq == -1) {
+				/* freq is @reboot */
+
+				line->cl_Pid = -1;
+				/* if we have any waiters, reset them and arm Pid = -2 */
+				waiter = line->cl_Waiters;
+				while (waiter != NULL) {
+					waiter->cw_Flag = -1;
+					line->cl_Pid = -2;
+					/* we only arm @noauto jobs we're waiting on, not other @reboot jobs */
+					if (waiter->cw_NotifLine && waiter->cw_NotifLine->cl_Freq == -2)
+						ArmJob(file, waiter->cw_NotifLine, t1, t1+60);
+					waiter = waiter->cw_Next;
+				}
+				if (line->cl_Pid == -1) {
+					/* job is ready to run */
+					file->cf_Ready = 1;
+					++nJobs;
+					if (DebugOpt)
+						printlogf(LOG_DEBUG, "    scheduled: %s\n", line->cl_Description);
+				} else if (DebugOpt)
+					printlogf(LOG_DEBUG, "    waiting: %s\n", line->cl_Description);
+
+			}
+
+		} /* for line */
+	}
+	return(nJobs);
+}
+
+void
+RunJobs(void)
+{
+	CronFile *file;
+	CronLine *line;
+
+	for (file = FileBase; file; file = file->cf_Next) {
+		if (file->cf_Ready) {
+			file->cf_Ready = 0;
+
+			for (line = file->cf_LineBase; line; line = line->cl_Next) {
+				if (line->cl_Pid == -1) {
+
+					RunJob(file, line);
+
+					printlogf(LOG_INFO, "FILE %s/%s USER %s PID %3d %s\n",
+							file->cf_DPath,
+							file->cf_FileName,
+							file->cf_UserName,
+							line->cl_Pid,
+							line->cl_Description
+						);
+					if (line->cl_Pid < 0)
+						/* QUESTION how could this happen? RunJob will leave cl_Pid set to 0 or the actual pid */
+						file->cf_Ready = 1;
+					else if (line->cl_Pid > 0)
+						file->cf_Running = 1;
+				}
+			}
+		}
+	}
+}
+
+/*
+ * CheckJobs() - check for job completion
+ *
+ * Check for job completion, return number of CronFiles still running after
+ * all done.
+ */
+
+int
+CheckJobs(void)
+{
+	CronFile *file;
+	CronLine *line;
+	int nStillRunning = 0;
+
+	for (file = FileBase; file; file = file->cf_Next) {
+		if (file->cf_Running) {
+			file->cf_Running = 0;
+
+			for (line = file->cf_LineBase; line; line = line->cl_Next) {
+				if (line->cl_Pid > 0) {
+					int status;
+					int r = waitpid(line->cl_Pid, &status, WNOHANG);
+
+					/* waitpid returns -1 for error, 0 if cl_Pid still running, cl_Pid if it's dead */
+
+					if (r < 0 || r == line->cl_Pid) {
+						if (r > 0 && WIFEXITED(status))
+							status = WEXITSTATUS(status);
+						else
+							status = 1;
+						EndJob(file, line, status);
+
+					} else if (r == 0) {
+						file->cf_Running = 1;
+					}
+				}
+			}
+			nStillRunning += file->cf_Running;
+		}
+		/* For the purposes of this check, increase the "still running" counter if a file has lines that are waiting */
+		if (file->cf_Running == 0) {
+			for (line = file->cf_LineBase; line; line = line->cl_Next) {
+				if (line->cl_Pid == -2) {
+					nStillRunning += 1;
+					break;
+				}
+			}
+		}
+	}
+	return(nStillRunning);
+}
+
Index: a/dcron/create-4.5-patch/dcron-4.5-new/defs.h
===================================================================
--- a/dcron/create-4.5-patch/dcron-4.5-new/defs.h	(nonexistent)
+++ a/dcron/create-4.5-patch/dcron-4.5-new/defs.h	(revision 5)
@@ -0,0 +1,165 @@
+
+/*
+ * DEFS.H
+ *
+ * Copyright 1994-1998 Matthew Dillon (dillon@backplane.com)
+ * Copyright 2009-2011 James Pryor <profjim@jimpryor.net>
+ * May be distributed under the GNU General Public License
+ */
+
+/*
+ * portability issues
+ * 0. gcc defaults to _BSD_SOURCE and _POSIX_SOURCE
+ * 1. need _POSIX_SOURCE or _XOPEN_SOURCE for getopt, fileno, sigaction
+ * 2. need _XOPEN_SOURCE for strptime
+ * 3. need _BSD_SOURCE for setenv, mk{d,s}temp, [v]snprintf, initgroups, strsep, strdup, setre{u,g}id, gethostname, perror
+ * 4. use concat.c instead of requiring asprintf / _GNU_SOURCE
+ */
+
+#define _XOPEN_SOURCE 1
+#define _DEFAULT_SOURCE 1
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <sys/wait.h>
+#include <sys/resource.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <errno.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <pwd.h>
+#ifndef S_SPLINT_S
+#include <unistd.h>
+#endif
+#include <grp.h>
+#include <syslog.h>
+#include <signal.h>
+#include <getopt.h>
+#include <err.h>
+#include <limits.h>
+
+#include <time.h>
+#include <string.h>
+#include <stdio.h>
+
+#define Prototype extern
+#define arysize(ary)	(sizeof(ary)/sizeof((ary)[0]))
+
+#ifndef SCRONTABS
+#define SCRONTABS	"/etc/cron.d"
+#endif
+#ifndef CRONTABS
+#define CRONTABS	"/var/spool/cron/crontabs"
+#endif
+#ifndef CRONSTAMPS
+#define CRONSTAMPS	"/var/spool/cron/cronstamps"
+#endif
+#ifndef LOG_IDENT
+#define LOG_IDENT	"crond"
+#endif
+#ifndef TIMESTAMP_FMT
+#define TIMESTAMP_FMT	"%b %e %H:%M:%S"
+#endif
+
+#ifndef LOG_LEVEL
+#define LOG_LEVEL LOG_NOTICE
+#endif
+#ifndef CRONSTAMP_FMT
+#define CRONSTAMP_FMT	"%Y-%m-%d %H:%M"
+#endif
+#ifndef CRONUPDATE
+#define CRONUPDATE	"cron.update"
+#endif
+#ifndef TMPDIR
+#define TMPDIR		"/var/spool/cron"
+#endif
+
+#ifndef SENDMAIL
+#define SENDMAIL	"/usr/sbin/sendmail"
+#endif
+#ifndef SENDMAIL_ARGS
+#define SENDMAIL_ARGS	"-t", "-oem", "-i"
+#endif
+#ifndef PATH_VI
+#define PATH_VI		"/usr/bin/vi"	/* location of vi	*/
+#endif
+
+#ifndef ID_TAG
+#define ID_TAG			"ID="
+#endif
+#ifndef WAIT_TAG
+#define WAIT_TAG		"AFTER="
+#endif
+#ifndef FREQ_TAG
+#define FREQ_TAG		"FREQ="
+#endif
+
+#define HOURLY_FREQ		60 * 60
+#define DAILY_FREQ		24 * HOURLY_FREQ
+#define	WEEKLY_FREQ		7 * DAILY_FREQ
+#define MONTHLY_FREQ	30 * DAILY_FREQ
+#define YEARLY_FREQ		365 * DAILY_FREQ
+
+#define LOGHEADER TIMESTAMP_FMT " %%s " LOG_IDENT ": "
+#define LOCALE_LOGHEADER "%c %%s " LOG_IDENT ": "
+
+/* Limits */
+#define MAXOPEN			256		/* close fds < this limit */ 
+#define MAXLINES		256		/* max lines in non-root crontabs */
+#define SMALL_BUFFER	256
+#define RW_BUFFER		1024
+#define LOG_BUFFER		2048 	/* max size of log line */
+
+
+
+
+typedef struct CronFile {
+    struct CronFile *cf_Next;
+    struct CronLine *cf_LineBase;
+    char	*cf_DPath;	/* Directory path to cronfile */
+    char	*cf_FileName;	/* Name of cronfile */
+    char	*cf_UserName;	/* username to execute jobs as */
+    int		cf_Ready;	/* bool: one or more jobs ready	*/
+    int		cf_Running;	/* bool: one or more jobs running */
+    int		cf_Deleted;	/* marked for deletion, ignore	*/
+} CronFile;
+
+typedef struct CronLine {
+    struct CronLine *cl_Next;
+    char	*cl_Shell;	/* shell command			*/
+	char	*cl_Description;	/* either "<cl_Shell>" or "job <cl_JobName>" */
+	char	*cl_JobName;	/* job name, if any			*/
+	char	*cl_Timestamp;	/* path to timestamp file, if cl_Freq defined */
+	struct	CronWaiter *cl_Waiters;
+	struct	CronNotifier *cl_Notifs;
+	int		cl_Freq;		/* 0 (use arrays),  minutes, -1 (noauto), -2 (startup)	*/
+	int		cl_Delay;		/* defaults to cl_Freq or hourly	*/
+	time_t	cl_LastRan;
+	time_t	cl_NotUntil;
+	int		cl_Pid;			/* running pid, 0, or armed (-1), or waiting (-2) */
+    int		cl_MailFlag;	/* running pid is for mail		*/
+    int		cl_MailPos;	/* 'empty file' size			*/
+    char	cl_Mins[60];	/* 0-59				*/
+    char	cl_Hrs[24];	/* 0-23					*/
+    char	cl_Days[32];	/* 1-31					*/
+    char	cl_Mons[12];	/* 0-11				*/
+    char	cl_Dow[7];	/* 0-6, beginning sunday		*/
+} CronLine;
+
+typedef struct CronWaiter {
+	struct	CronWaiter *cw_Next;
+	struct	CronNotifier *cw_Notifier;
+	struct	CronLine *cw_NotifLine;
+	short	cw_Flag;
+	int		cw_MaxWait;
+} CronWaiter;
+
+typedef struct CronNotifier {
+	struct	CronNotifier *cn_Next;
+	struct	CronWaiter *cn_Waiter;
+} CronNotifier;
+
+#include "protos.h"
+
Index: a/dcron/create-4.5-patch/dcron-4.5-new/main.c
===================================================================
--- a/dcron/create-4.5-patch/dcron-4.5-new/main.c	(nonexistent)
+++ a/dcron/create-4.5-patch/dcron-4.5-new/main.c	(revision 5)
@@ -0,0 +1,365 @@
+
+/*
+ * MAIN.C
+ *
+ * crond [-s dir] [-c dir] [-t dir] [-m user@host] [-M mailer] [-S|-L [file]] [-l level] [-b|-f|-d]
+ * run as root, but NOT setuid root
+ *
+ * Copyright 1994 Matthew Dillon (dillon@apollo.backplane.com)
+ * Copyright 2009-2011 James Pryor <profjim@jimpryor.net>
+ * May be distributed under the GNU General Public License
+ */
+
+#include "defs.h"
+
+Prototype short DebugOpt;
+Prototype short LogLevel;
+Prototype short ForegroundOpt;
+Prototype short SyslogOpt;
+Prototype const char *CDir;
+Prototype const char *SCDir;
+Prototype const char *TSDir;
+Prototype const char *LogFile;
+Prototype const char *LogHeader;
+Prototype uid_t DaemonUid;
+Prototype pid_t DaemonPid;
+Prototype const char *SendMail;
+Prototype const char *Mailto;
+Prototype char *TempDir;
+Prototype char *TempFileFmt;
+
+short DebugOpt = 0;
+short LogLevel = LOG_LEVEL;
+short ForegroundOpt = 0;
+short SyslogOpt = 1;
+const char  *CDir = CRONTABS;
+const char  *SCDir = SCRONTABS;
+const char *TSDir = CRONSTAMPS;
+const char *LogFile = NULL; 	/* opened with mode 0600 */
+const char *LogHeader = LOGHEADER;
+const char *SendMail = NULL;
+const char *Mailto = NULL;
+char *TempDir;
+char *TempFileFmt;
+
+uid_t DaemonUid;
+pid_t DaemonPid;
+
+int
+main(int ac, char **av)
+{
+	const char *LevelAry[] = {
+		"emerg",
+		"alert",
+		"crit",
+		"err",
+		"warning",
+		"notice",
+		"info",
+		"debug",
+		"panic",
+		"error",
+		"warn",
+		NULL
+	};
+	int i;
+
+	/*
+	 * parse options
+	 */
+
+	DaemonUid = getuid();
+
+	opterr = 0;
+
+	while ((i = getopt(ac,av,"dl:L:fbSc:s:m:M:t:")) != -1) {
+		switch (i) {
+			case 'l':
+				{
+					char *ptr;
+					int j;
+					ptr = optarg;
+					for (j = 0; LevelAry[j]; ++j) {
+						if (strncmp(ptr, LevelAry[j], strlen(LevelAry[j])) == 0) {
+							break;
+						}
+					}
+					switch(j) {
+						case 0:
+						case 8:
+							/* #define	LOG_EMERG	0	[* system is unusable *] */
+							LogLevel = LOG_EMERG;
+							break;
+						case 1:
+							/* #define	LOG_ALERT	1	[* action must be taken immediately *] */
+							LogLevel = LOG_ALERT;
+							break;
+						case 2:
+							/* #define	LOG_CRIT	2	[* critical conditions *] */
+							LogLevel = LOG_CRIT;
+							break;
+						case 3:
+						case 9:
+							/* #define	LOG_ERR		3	[* error conditions *] */
+							LogLevel = LOG_ERR;
+							break;
+						case 4:
+						case 10:
+							/* #define	LOG_WARNING	4	[* warning conditions *] */
+							LogLevel = LOG_WARNING;
+							break;
+						case 5:
+							/* #define	LOG_NOTICE	5	[* normal but significant condition *] */
+							LogLevel = LOG_NOTICE;
+							break;
+						case 6:
+							/* #define	LOG_INFO	6	[* informational *] */
+							LogLevel = LOG_INFO;
+							break;
+						case 7:
+							/* #define	LOG_DEBUG	7	[* debug-level messages *] */
+							LogLevel = LOG_DEBUG;
+							break;
+						default:
+							LogLevel = atoi(optarg);
+					}
+				}
+				break;
+			case 'd':
+				DebugOpt = 1;
+				LogLevel = LOG_DEBUG;
+				/* fall through to include f too */
+			case 'f':
+				ForegroundOpt = 1;
+				break;
+			case 'b':
+				ForegroundOpt = 0;
+				break;
+			case 'S':			/* log through syslog */
+				SyslogOpt = 1;
+				break;
+			case 'L':			/* use internal log formatter */
+				SyslogOpt = 0;
+				LogFile = optarg;
+				/* if LC_TIME is defined, we use it for logging to file instead of compiled-in TIMESTAMP_FMT */
+				if (getenv("LC_TIME") != NULL) {
+					LogHeader = LOCALE_LOGHEADER;
+				}
+				break;
+			case 'c':
+				if (*optarg != 0) CDir = optarg;
+				break;
+			case 's':
+				if (*optarg != 0) SCDir = optarg;
+				break;
+			case 't':
+				if (*optarg != 0) TSDir = optarg;
+				break;
+			case 'M':
+				if (*optarg != 0) SendMail = optarg;
+				break;
+			case 'm':
+				if (*optarg != 0) Mailto = optarg;
+				break;
+			default:
+				/*
+				 * check for parse error
+				 */
+				printf("dillon's cron daemon " VERSION "\n");
+				printf("crond [-s dir] [-c dir] [-t dir] [-m user@host] [-M mailer] [-S|-L [file]] [-l level] [-b|-f|-d]\n");
+				printf("-s            directory of system crontabs (defaults to %s)\n", SCRONTABS);
+				printf("-c            directory of per-user crontabs (defaults to %s)\n", CRONTABS);
+				printf("-t            directory of timestamps (defaults to %s)\n", CRONSTAMPS);
+				printf("-m user@host  where should cron output be directed? (defaults to local user)\n");
+				printf("-M mailer     (defaults to %s)\n", SENDMAIL);
+				printf("-S            log to syslog using identity '%s' (default)\n", LOG_IDENT);
+				printf("-L file       log to specified file instead of syslog\n");
+				printf("-l loglevel   log events <= this level (defaults to %s (level %d))\n", LevelAry[LOG_LEVEL], LOG_LEVEL);
+				printf("-b            run in background (default)\n");
+				printf("-f            run in foreground\n");
+				printf("-d            run in debugging mode\n");
+				exit(2);
+		}
+	}
+
+	/*
+	 * close stdin and stdout.
+	 * close unused descriptors -  don't need.
+	 * optional detach from controlling terminal
+	 */
+
+	fclose(stdin);
+	fclose(stdout);
+
+	i = open("/dev/null", O_RDWR);
+	if (i < 0) {
+		perror("open: /dev/null");
+		exit(1);
+	}
+	dup2(i, 0);
+	dup2(i, 1);
+
+	/* create tempdir with permissions 0755 for cron output */
+	TempDir = strdup(TMPDIR "/cron.XXXXXX");
+	if (mkdtemp(TempDir) == NULL) {
+		perror("mkdtemp");
+		exit(1);
+	}
+	if (chmod(TempDir, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)) {
+		perror("chmod");
+		exit(1);
+	}
+	if (!(TempFileFmt = concat(TempDir, "/cron.%s.%d", NULL))) {
+		errno = ENOMEM;
+		perror("main");
+		exit(1);
+	}
+
+	if (ForegroundOpt == 0) {
+
+		int fd;
+		int pid;
+
+		if ((pid = fork()) < 0) {
+			/* fork failed */
+			perror("fork");
+			exit(1);
+		} else if (pid > 0) {
+			/* parent */
+			exit(0);
+		}
+		/* child continues */
+
+		/* become session leader, detach from terminal */
+
+		if (setsid() < 0)
+			perror("setsid");
+		if ((fd = open("/dev/tty", O_RDWR)) >= 0) {
+			ioctl(fd, TIOCNOTTY, 0);
+			close(fd);
+		}
+
+		/* setup logging for backgrounded daemons */
+
+		if (SyslogOpt) {
+			/* start SIGHUP and SIGCHLD handling while stderr still open */
+			initsignals();
+			/* 2> /dev/null */
+			fclose(stderr);
+			dup2(1, 2);
+
+			/* open syslog */
+			openlog(LOG_IDENT, LOG_CONS|LOG_PID, LOG_CRON);
+
+		} else {
+			/* open logfile */
+			if ((fd = open(LogFile, O_WRONLY|O_CREAT|O_APPEND, 0600)) >= 0) {
+				/* start SIGHUP ignoring, SIGCHLD handling while stderr still open */
+				initsignals();
+				/* 2> LogFile */
+				fclose(stderr);
+				dup2(fd, 2);
+			} else {
+				int n = errno;
+				fdprintf(2, "failed to open logfile '%s', reason: %s", LogFile, strerror(n));
+				exit(n);
+			}
+		}
+	} else {
+		/* daemon in foreground */
+
+		/* stay in existing session, but start a new process group */
+		if (setpgid(0,0)) {
+			perror("setpgid");
+			exit(1);
+		}
+
+		/* stderr stays open, start SIGHUP ignoring, SIGCHLD handling */
+		initsignals();
+	}
+
+	/* close all other fds, including the ones we opened as /dev/null and LogFile */
+	for (i = 3; i < MAXOPEN; ++i) {
+        close(i);
+    }
+
+
+	/*
+	 * main loop - synchronize to 1 second after the minute, minimum sleep
+	 *             of 1 second.
+	 */
+
+	printlogf(LOG_NOTICE,"%s " VERSION " dillon's cron daemon, started with loglevel %s\n", av[0], LevelAry[LogLevel]);
+	SynchronizeDir(CDir, NULL, 1);
+	SynchronizeDir(SCDir, "root", 1);
+	ReadTimestamps(NULL);
+	TestStartupJobs(); /* @startup jobs only run when crond is started, not when their crontab is loaded */
+
+	{
+		time_t t1 = time(NULL);
+		time_t t2;
+		long dt;
+		short rescan = 60;
+		short stime = 60;
+
+		for (;;) {
+			sleep((stime + 1) - (short)(time(NULL) % stime));
+
+			t2 = time(NULL);
+			dt = t2 - t1;
+
+			/*
+			 * The file 'cron.update' is checked to determine new cron
+			 * jobs.  The directory is rescanned once an hour to deal
+			 * with any screwups.
+			 *
+			 * check for disparity.  Disparities over an hour either way
+			 * result in resynchronization.  A reverse-indexed disparity
+			 * less then an hour causes us to effectively sleep until we
+			 * match the original time (i.e. no re-execution of jobs that
+			 * have just been run).  A forward-indexed disparity less then
+			 * an hour causes intermediate jobs to be run, but only once
+			 * in the worst case.
+			 *
+			 * when running jobs, the inequality used is greater but not
+			 * equal to t1, and less then or equal to t2.
+			 */
+
+			if (--rescan == 0) {
+				/*
+				 * If we resynchronize while jobs are running, we'll clobber
+				 * the job pids, so we won't know what's already running.
+				 */
+				if (CheckJobs() > 0) {
+					rescan = 1;
+				} else {
+					rescan = 60;
+					SynchronizeDir(CDir, NULL, 0);
+					SynchronizeDir(SCDir, "root", 0);
+					ReadTimestamps(NULL);
+				}
+			}
+			if (rescan < 60) {
+				CheckUpdates(CDir, NULL, t1, t2);
+				CheckUpdates(SCDir, "root", t1, t2);
+			}
+			if (DebugOpt)
+				printlogf(LOG_DEBUG, "Wakeup dt=%d\n", dt);
+			if (dt < -60*60 || dt > 60*60) {
+				t1 = t2;
+				printlogf(LOG_NOTICE,"time disparity of %d minutes detected\n", dt / 60);
+			} else if (dt > 0) {
+				TestJobs(t1, t2);
+				RunJobs();
+				sleep(5);
+				if (CheckJobs() > 0)
+					stime = 10;
+				else
+					stime = 60;
+				t1 = t2;
+			}
+		}
+	}
+	/* not reached */
+}
+
Index: a/dcron/create-4.5-patch/dcron-4.5-new
===================================================================
--- a/dcron/create-4.5-patch/dcron-4.5-new	(nonexistent)
+++ a/dcron/create-4.5-patch/dcron-4.5-new	(revision 5)

Property changes on: a/dcron/create-4.5-patch/dcron-4.5-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dcron/create-4.5-patch/file.list
===================================================================
--- a/dcron/create-4.5-patch/file.list	(nonexistent)
+++ a/dcron/create-4.5-patch/file.list	(revision 5)
@@ -0,0 +1,7 @@
+dcron-4.5/CHANGELOG
+dcron-4.5/Makefile
+dcron-4.5/README
+dcron-4.5/crontab.c
+dcron-4.5/database.c
+dcron-4.5/defs.h
+dcron-4.5/main.c
Index: a/dcron/create-4.5-patch
===================================================================
--- a/dcron/create-4.5-patch	(nonexistent)
+++ a/dcron/create-4.5-patch	(revision 5)

Property changes on: a/dcron/create-4.5-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dcron/patches/README
===================================================================
--- a/dcron/patches/README	(nonexistent)
+++ a/dcron/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/dcron/patches
===================================================================
--- a/dcron/patches	(nonexistent)
+++ a/dcron/patches	(revision 5)

Property changes on: a/dcron/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dcron
===================================================================
--- a/dcron	(nonexistent)
+++ a/dcron	(revision 5)

Property changes on: a/dcron
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/debianutils/Makefile
===================================================================
--- a/debianutils/Makefile	(nonexistent)
+++ a/debianutils/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/debianutils
+
+versions    = 4.11.2
+pkgname     = debianutils
+suffix      = tar.xz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: a/debianutils
===================================================================
--- a/debianutils	(nonexistent)
+++ a/debianutils	(revision 5)

Property changes on: a/debianutils
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dialog/Makefile
===================================================================
--- a/dialog/Makefile	(nonexistent)
+++ a/dialog/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/dialog
+
+versions    = 1.3-20210621
+pkgname     = dialog
+suffix      = tgz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/dialog-1.3-20210621.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-1.3-20210621-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/dialog/create-1.3-20210621-patch/create.patch.sh
===================================================================
--- a/dialog/create-1.3-20210621-patch/create.patch.sh	(nonexistent)
+++ a/dialog/create-1.3-20210621-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+VERSION=1.3-20210621
+
+tar --files-from=file.list -xzvf ../dialog-$VERSION.tgz
+mv dialog-$VERSION dialog-$VERSION-orig
+
+cp -rf ./dialog-$VERSION-new ./dialog-$VERSION
+
+diff --unified -Nr  dialog-$VERSION-orig  dialog-$VERSION > dialog-$VERSION.patch
+
+mv dialog-$VERSION.patch ../patches
+
+rm -rf ./dialog-$VERSION
+rm -rf ./dialog-$VERSION-orig

Property changes on: a/dialog/create-1.3-20210621-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/buildlist.c
===================================================================
--- a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/buildlist.c	(nonexistent)
+++ a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/buildlist.c	(revision 5)
@@ -0,0 +1,1267 @@
+/*
+ *  $Id: buildlist.c,v 1.95 2021/03/05 00:51:16 tom Exp $
+ *
+ *  buildlist.c -- implements the buildlist dialog
+ *
+ *  Copyright 2012-2020,2021	Thomas E. Dickey
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License, version 2.1
+ *  as published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this program; if not, write to
+ *	Free Software Foundation, Inc.
+ *	51 Franklin St., Fifth Floor
+ *	Boston, MA 02110, USA.
+ */
+
+#include <dlg_internals.h>
+#include <dlg_keys.h>
+
+/*
+ * Visually like menubox, but two columns.
+ */
+
+#define sLEFT         (-2)
+#define sRIGHT        (-1)
+
+#define KEY_LEFTCOL   '^'
+#define KEY_RIGHTCOL  '$'
+
+#define MIN_HIGH  (1 + (5 * MARGIN))
+
+typedef struct {
+    WINDOW *win;
+    int box_y;
+    int box_x;
+    int top_index;
+    int cur_index;
+    DIALOG_LISTITEM **ip;	/* pointers to items in this list */
+} MY_DATA;
+
+#if 0
+#define TRACE(p)    dlg_trace_msg p
+#else
+#define TRACE(p)		/* nothing */
+#endif
+
+#define okIndex(all,index) ((index) >= 0 && (index) < (all)->item_no)
+
+#define myItem(p,n) ((p)->ip)[n]
+#define mySide(n)   ((n)?"right":"left")
+
+typedef struct {
+    DIALOG_LISTITEM *items;	/* all items in the widget */
+    int base_y;			/* base for mouse coordinates */
+    int base_x;
+    int use_height;		/* actual size of column box */
+    int use_width;
+    int item_no;
+    int check_x;
+    int item_x;
+    MY_DATA list[2];
+} ALL_DATA;
+
+/*
+ * Translate a choice from items[] to a row-number in an unbounded column,
+ * starting at zero.
+ */
+static int
+index2row(ALL_DATA * all, int choice, int selected)
+{
+    MY_DATA *data = all->list + selected;
+    int result = -1;
+
+    if (okIndex(all, choice)) {
+	int row;
+
+	for (row = 0; row < all->item_no; ++row) {
+	    TRACE(("!... choice %d: %p vs row %d: %p\n",
+		   choice, all->items + choice,
+		   row, myItem(data, row)));
+	    if (myItem(data, row) == all->items + choice) {
+		result = row;
+		break;
+	    }
+	}
+    }
+    TRACE(("! index2row(choice %d, %s) = %d\n", choice, mySide(selected), result));
+    return result;
+}
+
+/*
+ * Convert a row-number back to an item number, i.e., index into items[].
+ */
+static int
+row2index(ALL_DATA * all, int row, int selected)
+{
+    MY_DATA *data = all->list + selected;
+    int result = -1;
+    int n;
+    for (n = 0; n < all->item_no; ++n) {
+	TRACE(("!... row %d: %p vs choice %d: %p\n",
+	       row, myItem(data, row),
+	       n, all->items + n));
+	if (myItem(data, row) == all->items + n) {
+	    result = n;
+	    break;
+	}
+    }
+    TRACE(("! row2index(row %d, %s) = %d\n", row, mySide(selected), result));
+    return result;
+}
+
+/*
+ * Print list item.  The 'selected' parameter is true if 'choice' is the
+ * current item.  That one is colored differently from the other items.
+ */
+static void
+print_item(ALL_DATA * all,
+	   WINDOW *win,
+	   DIALOG_LISTITEM * item,
+	   int row,
+	   int selected)
+{
+    chtype save = dlg_get_attrs(win);
+    int i;
+    bool both = (!dialog_vars.no_tags && !dialog_vars.no_items);
+    bool first = TRUE;
+    int climit = (all->item_x - all->check_x - 1);
+    const char *show = (dialog_vars.no_items
+			? item->name
+			: item->text);
+
+    /* Clear 'residue' of last item */
+    dlg_attrset(win, menubox_attr);
+    (void) wmove(win, row, 0);
+    for (i = 0; i < getmaxx(win); i++)
+	(void) waddch(win, ' ');
+
+    (void) wmove(win, row, all->check_x);
+    dlg_attrset(win, menubox_attr);
+
+    if (both) {
+	dlg_print_listitem(win, item->name, climit, first, selected);
+	(void) waddch(win, ' ');
+	first = FALSE;
+    }
+
+    (void) wmove(win, row, all->item_x);
+    climit = (getmaxx(win) - all->item_x + 1);
+    dlg_print_listitem(win, show, climit, first, selected);
+
+    if (selected) {
+	dlg_item_help(item->help);
+    }
+    dlg_attrset(win, save);
+}
+
+/*
+ * Prints either the left (unselected) or right (selected) list.
+ */
+static void
+print_1_list(ALL_DATA * all,
+	     int choice,
+	     int selected)
+{
+    MY_DATA *data = all->list + selected;
+    DIALOG_LISTITEM *target = (okIndex(all, choice)
+			       ? all->items + choice
+			       : 0);
+    WINDOW *win = data->win;
+    int i, j;
+    int last = 0;
+    int top_row = index2row(all, data->top_index, selected);
+    int max_rows = getmaxy(win);
+
+    TRACE(("! print_1_list %d %s, top %d\n", choice, mySide(selected), top_row));
+    for (i = j = 0; j < max_rows; i++) {
+	int ii = i + top_row;
+	if (ii < 0) {
+	    continue;
+	} else if (myItem(data, ii)) {
+	    print_item(all,
+		       win,
+		       myItem(data, ii),
+		       j, myItem(data, ii) == target);
+	    last = ++j;
+	} else {
+	    break;
+	}
+    }
+    if (wmove(win, last, 0) != ERR) {
+	while (waddch(win, ' ') != ERR) {
+	    ;
+	}
+    }
+    (void) wnoutrefresh(win);
+}
+
+/*
+ * Return the previous item from the list, staying in the same column.  If no
+ * further movement is possible, return the same choice as given.
+ */
+static int
+prev_item(ALL_DATA * all, int choice, int selected)
+{
+    int result = choice;
+    int row = index2row(all, choice, selected);
+    if (row > 0) {
+	row--;
+	result = row2index(all, row, selected);
+    }
+    TRACE(("! prev_item choice %d, %s = %d\n", choice, mySide(selected), result));
+    return result;
+}
+
+/*
+ * Return true if the given choice is on the first page in the current column.
+ */
+static bool
+stop_prev(ALL_DATA * all, int choice, int selected)
+{
+    return (prev_item(all, choice, selected) == choice);
+}
+
+static bool
+check_hotkey(DIALOG_LISTITEM * items, int choice, int selected)
+{
+    bool result = FALSE;
+
+    if ((items[choice].state != 0) == selected) {
+	if (dlg_match_char(dlg_last_getc(),
+			   (dialog_vars.no_tags
+			    ? items[choice].text
+			    : items[choice].name))) {
+	    result = TRUE;
+	}
+    }
+    return result;
+}
+
+/*
+ * Return the next item from the list, staying in the same column.  If no
+ * further movement is possible, return the same choice as given.
+ */
+static int
+next_item(ALL_DATA * all, int choice, int selected)
+{
+    MY_DATA *data = all->list + selected;
+    int result = choice;
+    int row = index2row(all, choice, selected);
+    TRACE(("! given item %d, testing next-item on row %d\n", choice, row + 1));
+    if (myItem(data, row + 1)) {
+	result = row2index(all, row + 1, selected);
+    }
+    TRACE(("! next_item(%d, %s) ->%d\n", choice, mySide(selected), result));
+    return result;
+}
+
+/*
+ * Return the first choice from items[] for the given column.
+ */
+static int
+first_item(ALL_DATA * all, int selected)
+{
+    MY_DATA *data = all->list + selected;
+    int result = -1;
+
+    if (myItem(data, 0) != 0) {
+	int n;
+
+	for (n = 0; n < all->item_no; ++n) {
+	    if (myItem(data, 0) == &all->items[n]) {
+		result = n;
+		break;
+	    }
+	}
+    }
+    TRACE(("! first_item %s = %d\n", mySide(selected), result));
+    return result;
+}
+
+/*
+ * Return the last choice from items[] for the given column.
+ */
+static int
+last_item(ALL_DATA * all, int selected)
+{
+    MY_DATA *data = all->list + selected;
+    int result = -1;
+    int n;
+
+    for (n = 0; myItem(data, n) != 0; ++n) {
+	result = n;
+    }
+    if (result >= 0) {
+	result = row2index(all, result, selected);
+    }
+    TRACE(("! last_item %s = %d\n", mySide(selected), result));
+    return result;
+}
+
+static int
+skip_rows(ALL_DATA * all, int row, int skip, int selected)
+{
+    MY_DATA *data = all->list + selected;
+    int result = row;
+
+    if (skip > 0) {
+	int n;
+
+	for (n = row + 1; (n < all->item_no) && (n <= row + skip); ++n) {
+	    if (myItem(data, n) == 0)
+		break;
+	    result = n;
+	}
+    } else if (skip < 0) {
+	result -= skip;
+	if (result < 0)
+	    result = 0;
+    }
+    TRACE(("! skip_rows row %d, skip %d, %s = %d\n",
+	   row, skip, mySide(selected), result));
+    return result;
+}
+
+/*
+ * Find the closest item in the given column starting with the given choice.
+ */
+static int
+closest_item(ALL_DATA * all, int choice, int selected)
+{
+    int prev = choice;
+    int next = choice;
+    int result = choice;
+    int n;
+
+    for (n = choice; n >= 0; --n) {
+	if ((all->items[n].state != 0) == selected) {
+	    prev = n;
+	    break;
+	}
+    }
+    for (n = choice; n < all->item_no; ++n) {
+	if ((all->items[n].state != 0) == selected) {
+	    next = n;
+	    break;
+	}
+    }
+    if (prev != choice) {
+	result = prev;
+	if (next != choice) {
+	    if ((choice - prev) > (next - choice)) {
+		result = next;
+	    }
+	}
+    } else if (next != choice) {
+	result = next;
+    }
+    TRACE(("! XXX closest item choice %d, %s = %d\n",
+	   choice, mySide(selected), result));
+    return result;
+}
+
+static void
+print_both(ALL_DATA * all,
+	   int choice)
+{
+    int selected;
+    int cur_y, cur_x;
+    WINDOW *dialog = wgetparent(all->list[0].win);
+
+    TRACE(("! print_both %d\n", choice));
+    getyx(dialog, cur_y, cur_x);
+    for (selected = 0; selected < 2; ++selected) {
+	MY_DATA *data = all->list + selected;
+	WINDOW *win = data->win;
+	int thumb_top = index2row(all, data->top_index, selected);
+	int thumb_max = index2row(all, -1, selected);
+	int thumb_end = thumb_top + getmaxy(win);
+
+	print_1_list(all, choice, selected);
+
+	dlg_mouse_setcode(selected * KEY_MAX);
+	dlg_draw_scrollbar(dialog,
+			   (long) (data->top_index),
+			   (long) (thumb_top),
+			   (long) MIN(thumb_end, thumb_max),
+			   (long) thumb_max,
+			   data->box_x + all->check_x,
+			   data->box_x + getmaxx(win),
+			   data->box_y,
+			   data->box_y + getmaxy(win) + 1,
+			   menubox_border2_attr,
+			   menubox_border_attr);
+    }
+    (void) wmove(dialog, cur_y, cur_x);
+    dlg_mouse_setcode(0);
+}
+
+static void
+set_top_item(ALL_DATA * all, int choice, int selected)
+{
+    if (choice != all->list[selected].top_index) {
+	DLG_TRACE(("# set top of %s column to %d\n",
+		   mySide(selected),
+		   choice));
+	all->list[selected].top_index = choice;
+    }
+}
+
+/*
+ * Adjust the top-index as needed to ensure that it and the given item are
+ * visible.
+ */
+static void
+fix_top_item(ALL_DATA * all, int cur_item, int selected)
+{
+    int top_item = all->list[selected].top_index;
+    int cur_row = index2row(all, cur_item, selected);
+    int top_row = index2row(all, top_item, selected);
+
+    if (cur_row < top_row) {
+	top_item = cur_item;
+    } else if ((cur_row - top_row) >= all->use_height) {
+	top_item = row2index(all, cur_row + 1 - all->use_height, selected);
+    }
+    if (cur_row < all->use_height) {
+	top_item = row2index(all, 0, selected);
+    }
+    DLG_TRACE(("# fix_top_item(cur_item %d, %s) ->top_item %d\n",
+	       cur_item, mySide(selected), top_item));
+    set_top_item(all, top_item, selected);
+}
+
+static void
+append_right_side(ALL_DATA * all, int choice)
+{
+    MY_DATA *data = &all->list[1];
+    int j;
+    for (j = 0; j < all->item_no; ++j) {
+	if (myItem(data, j) == 0) {
+	    myItem(data, j) = &all->items[choice];
+	    break;
+	}
+    }
+}
+
+static void
+amend_right_side(ALL_DATA * all, int choice)
+{
+    MY_DATA *data = &all->list[1];
+    int j, k;
+    for (j = 0; j < all->item_no; ++j) {
+	if (myItem(data, j) == &all->items[choice]) {
+	    for (k = j; k < all->item_no; ++k) {
+		if ((myItem(data, k) = myItem(data, k + 1)) == 0)
+		    break;
+	    }
+	    break;
+	}
+    }
+}
+
+static void
+fill_one_side(ALL_DATA * all, int selected)
+{
+    int i, j;
+    MY_DATA *data = all->list + selected;
+
+    for (i = j = 0; j < all->item_no; ++j) {
+	myItem(data, i) = 0;
+	if ((all->items[j].state != 0) == selected) {
+	    myItem(data, i) = all->items + j;
+	    TRACE(("! %s item[%d] %p = all[%d] %p\n",
+		   mySide(selected),
+		   i, myItem(data, i),
+		   j, all->items + j));
+	    ++i;
+	}
+    }
+    myItem(data, i) = 0;
+}
+
+static void
+fill_both_sides(ALL_DATA * all)
+{
+    int k;
+
+    for (k = 0; k < 2; ++k) {
+	fill_one_side(all, k);
+    }
+}
+
+/*
+ * This is an alternate interface to 'buildlist' which allows the application
+ * to read the list item states back directly without putting them in the
+ * output buffer.
+ */
+int
+dlg_buildlist(const char *title,
+	      const char *cprompt,
+	      int height,
+	      int width,
+	      int list_height,
+	      int item_no,
+	      DIALOG_LISTITEM * items,
+	      const char *states,
+	      int order_mode,
+	      int *current_item)
+{
+#define THIS_FUNC "dlg_buildlist"
+    /* *INDENT-OFF* */
+    static DLG_KEYS_BINDING binding[] = {
+	HELPKEY_BINDINGS,
+	ENTERKEY_BINDINGS,
+	DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ),
+	DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ),
+	DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ),
+	DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ),
+	DLG_KEYS_DATA( DLGK_ITEM_FIRST, KEY_HOME ),
+	DLG_KEYS_DATA( DLGK_ITEM_LAST,	KEY_END ),
+	DLG_KEYS_DATA( DLGK_ITEM_LAST,	KEY_LL ),
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,	'+' ),
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,	KEY_DOWN ),
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,  CHR_NEXT ),
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,	'-' ),
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,	KEY_UP ),
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,  CHR_PREVIOUS ),
+	DLG_KEYS_DATA( DLGK_PAGE_NEXT,	KEY_NPAGE ),
+	DLG_KEYS_DATA( DLGK_PAGE_NEXT,	DLGK_MOUSE(KEY_NPAGE) ),
+	DLG_KEYS_DATA( DLGK_PAGE_NEXT,	DLGK_MOUSE(KEY_NPAGE+KEY_MAX) ),
+	DLG_KEYS_DATA( DLGK_PAGE_PREV,	KEY_PPAGE ),
+	DLG_KEYS_DATA( DLGK_PAGE_PREV,	DLGK_MOUSE(KEY_PPAGE) ),
+	DLG_KEYS_DATA( DLGK_PAGE_PREV,	DLGK_MOUSE(KEY_PPAGE+KEY_MAX) ),
+	DLG_KEYS_DATA( DLGK_GRID_LEFT,	KEY_LEFTCOL ),
+	DLG_KEYS_DATA( DLGK_GRID_RIGHT,	KEY_RIGHTCOL ),
+	TOGGLEKEY_BINDINGS,
+	END_KEYS_BINDING
+    };
+    /* *INDENT-ON* */
+
+#ifdef KEY_RESIZE
+    int old_height = height;
+    int old_width = width;
+#endif
+    ALL_DATA all;
+    MY_DATA *data = all.list;
+    int i, j, k, key2, found, x, y, cur_x, cur_y;
+    int key, fkey;
+    bool save_visit = dialog_state.visit_items;
+    int button;
+    int cur_item;
+    int name_width, text_width, full_width, list_width;
+    int result = DLG_EXIT_UNKNOWN;
+    int num_states;
+    bool first = TRUE;
+    WINDOW *dialog;
+    char *prompt;
+    const char **buttons = dlg_ok_labels();
+    const char *widget_name = "buildlist";
+
+    dialog_state.plain_buttons = TRUE;
+
+    /*
+     * Unlike other uses of --visit-items, we have two windows to visit.
+     */
+    if (dialog_state.visit_cols)
+	dialog_state.visit_cols = 2;
+
+    memset(&all, 0, sizeof(all));
+    all.items = items;
+    all.item_no = item_no;
+    for (k = 0; k < 2; ++k) {
+	data[k].ip = dlg_calloc(DIALOG_LISTITEM *, (item_no + 2));
+    }
+    fill_both_sides(&all);
+
+    if (dialog_vars.default_item != 0) {
+	cur_item = dlg_default_listitem(items);
+    } else {
+	if ((cur_item = first_item(&all, 0)) < 0)
+	    cur_item = first_item(&all, 1);
+    }
+    button = (dialog_state.visit_items
+	      ? (items[cur_item].state ? sRIGHT : sLEFT)
+	      : dlg_default_button());
+
+    dlg_does_output();
+
+#ifdef KEY_RESIZE
+  retry:
+#endif
+
+    prompt = dlg_strclone(cprompt);
+    dlg_tab_correct_str(prompt);
+
+    all.use_height = list_height;
+    all.use_width = (2 * (dlg_calc_list_width(item_no, items)
+			  + 4
+			  + 2 * MARGIN)
+		     + 1);
+    all.use_width = MAX(26, all.use_width);
+    if (all.use_height == 0) {
+	/* calculate height without items (4) */
+	dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, all.use_width);
+	dlg_calc_listh(&height, &all.use_height, item_no);
+    } else {
+	dlg_auto_size(title, prompt,
+		      &height, &width,
+		      MIN_HIGH + all.use_height, all.use_width);
+    }
+    dlg_button_layout(buttons, &width);
+    dlg_print_size(height, width);
+    dlg_ctl_size(height, width);
+
+    /* we need at least two states */
+    if (states == 0 || strlen(states) < 2)
+	states = " *";
+    num_states = (int) strlen(states);
+
+    x = dlg_box_x_ordinate(width);
+    y = dlg_box_y_ordinate(height);
+
+    dialog = dlg_new_window(height, width, y, x);
+    dlg_register_window(dialog, widget_name, binding);
+    dlg_register_buttons(dialog, widget_name, buttons);
+
+    dlg_mouse_setbase(all.base_x = x, all.base_y = y);
+
+    dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+    dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+    dlg_draw_title(dialog, title);
+
+    dlg_attrset(dialog, dialog_attr);
+    dlg_print_autowrap(dialog, prompt, height, width);
+
+    list_width = (width - 6 * MARGIN - 2) / 2;
+    getyx(dialog, cur_y, cur_x);
+    data[0].box_y = cur_y + 1;
+    data[0].box_x = MARGIN + 1;
+    data[1].box_y = cur_y + 1;
+    data[1].box_x = data[0].box_x + 1 + 2 * MARGIN + list_width;
+
+    /*
+     * After displaying the prompt, we know how much space we really have.
+     * Limit the list to avoid overwriting the ok-button.
+     */
+    if (all.use_height + MIN_HIGH > height - cur_y)
+       all.use_height = height - MIN_HIGH - cur_y;
+    if (all.use_height <= 0)
+	all.use_height = 1;
+
+    for (k = 0; k < 2; ++k) {
+	/* create new window for the list */
+	data[k].win = dlg_sub_window(dialog, all.use_height, list_width,
+				     y + data[k].box_y + 1,
+				     x + data[k].box_x + 1);
+
+	/* draw a box around the list items */
+	dlg_draw_box(dialog, data[k].box_y, data[k].box_x,
+		     all.use_height + 2 * MARGIN,
+		     list_width + 2 * MARGIN,
+		     menubox_border_attr, menubox_border2_attr);
+    }
+
+    text_width = 0;
+    name_width = 0;
+    /* Find length of longest item to center buildlist */
+    for (i = 0; i < item_no; i++) {
+	text_width = MAX(text_width, dlg_count_columns(items[i].text));
+	name_width = MAX(name_width, dlg_count_columns(items[i].name));
+    }
+
+    /* If the name+text is wider than the list is allowed, then truncate
+     * one or both of them.  If the name is no wider than 1/4 of the list,
+     * leave it intact.
+     */
+    all.use_width = (list_width - 6 * MARGIN);
+    if (dialog_vars.no_tags && !dialog_vars.no_items) {
+	full_width = MIN(all.use_width, text_width);
+    } else if (dialog_vars.no_items) {
+	full_width = MIN(all.use_width, name_width);
+    } else {
+	if (text_width >= 0
+	    && name_width >= 0
+	    && all.use_width > 0
+	    && text_width + name_width > all.use_width) {
+	    int need = (int) (0.25 * all.use_width);
+	    if (name_width > need) {
+		int want = (int) (all.use_width * ((double) name_width) /
+				  (text_width + name_width));
+		name_width = (want > need) ? want : need;
+	    }
+	    text_width = all.use_width - name_width;
+	}
+	full_width = text_width + name_width;
+    }
+
+    all.check_x = (all.use_width - full_width) / 2;
+    all.item_x = ((dialog_vars.no_tags
+		   ? 0
+		   : (dialog_vars.no_items
+		      ? 0
+		      : (name_width + 2)))
+		  + all.check_x);
+
+    /* ensure we are scrolled to show the current choice */
+    j = MIN(all.use_height, item_no);
+    for (i = 0; i < 2; ++i) {
+	if ((items[cur_item].state != 0) == i) {
+	    int top_item = cur_item - j + 1;
+	    if (top_item < 0)
+		top_item = 0;
+	    while ((items[top_item].state != 0) != i)
+		++top_item;
+	    set_top_item(&all, top_item, i);
+	} else {
+	    set_top_item(&all, 0, i);
+	}
+    }
+
+    /* register the new window, along with its borders */
+    for (i = 0; i < 2; ++i) {
+	dlg_mouse_mkbigregion(data[i].box_y + 1,
+			      data[i].box_x,
+			      all.use_height,
+			      list_width + 2,
+			      2 * KEY_MAX + (i * (1 + all.use_height)),
+			      1, 1, 1 /* by lines */ );
+    }
+
+    dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width);
+
+    while (result == DLG_EXIT_UNKNOWN) {
+	int which = (items[cur_item].state != 0);
+	MY_DATA *moi = data + which;
+	int at_top = index2row(&all, moi->top_index, which);
+	int at_end = index2row(&all, -1, which);
+	int at_bot = skip_rows(&all, at_top, all.use_height, which);
+	int was_mouse;
+
+	DLG_TRACE(("# ** state %d:%d top %d (%d:%d:%d) %s\n",
+		   cur_item, item_no - 1,
+		   moi->top_index,
+		   at_top, at_bot, at_end,
+		   mySide(which)));
+
+	if (first) {
+	    print_both(&all, cur_item);
+	    dlg_trace_win(dialog);
+	    first = FALSE;
+	}
+
+	if (button < 0) {	/* --visit-items */
+	    int cur_row = index2row(&all, cur_item, which);
+	    cur_y = (data[which].box_y
+		     + cur_row
+		     + 1);
+	    if (at_top > 0)
+		cur_y -= at_top;
+	    cur_x = (data[which].box_x
+		     + all.check_x + 1);
+	    DLG_TRACE(("# ...visit row %d (%d,%d)\n", cur_row, cur_y, cur_x));
+	    wmove(dialog, cur_y, cur_x);
+	}
+
+	key = dlg_mouse_wgetch(dialog, &fkey);
+	if (dlg_result_key(key, fkey, &result)) {
+	    if (!dlg_button_key(result, &button, &key, &fkey))
+		break;
+	}
+
+	was_mouse = (fkey && is_DLGK_MOUSE(key));
+	if (was_mouse)
+	    key -= M_EVENT;
+
+	if (!was_mouse) {
+	    ;
+	} else if (key >= 2 * KEY_MAX) {
+	    i = (key - 2 * KEY_MAX) % (1 + all.use_height);
+	    j = (key - 2 * KEY_MAX) / (1 + all.use_height);
+	    k = row2index(&all, i + at_top, j);
+	    DLG_TRACE(("# MOUSE column %d, row %d ->item %d\n", j, i, k));
+	    if (k >= 0 && j < 2) {
+		if (j != which) {
+		    /*
+		     * Mouse click was in the other column.
+		     */
+		    moi = data + j;
+		    fix_top_item(&all, k, j);
+		}
+		which = j;
+		at_top = index2row(&all, moi->top_index, which);
+		at_bot = skip_rows(&all, at_top, all.use_height, which);
+		cur_item = k;
+		print_both(&all, cur_item);
+		key = DLGK_TOGGLE;	/* force the selected item to toggle */
+	    } else {
+		beep();
+		continue;
+	    }
+	    fkey = FALSE;
+	} else if (key >= KEY_MIN) {
+	    if (key > KEY_MAX) {
+		if (which == 0) {
+		    key = KEY_RIGHTCOL;		/* switch to right-column */
+		    fkey = FALSE;
+		} else {
+		    key -= KEY_MAX;
+		}
+	    } else {
+		if (which == 1) {
+		    key = KEY_LEFTCOL;	/* switch to left-column */
+		    fkey = FALSE;
+		}
+	    }
+	    key = dlg_lookup_key(dialog, key, &fkey);
+	}
+
+	/*
+	 * A space toggles the item status.  Normally we put the cursor on
+	 * the next available item in the same column.  But if there are no
+	 * more items in the column, move the cursor to the other column.
+	 */
+	if (key == DLGK_TOGGLE) {
+	    int new_choice;
+	    int new_state = items[cur_item].state + 1;
+
+	    if ((new_choice = next_item(&all, cur_item, which)) == cur_item) {
+		new_choice = prev_item(&all, cur_item, which);
+	    }
+	    DLG_TRACE(("# cur_item %d, new_choice:%d\n", cur_item, new_choice));
+	    /* FIXME - how to test and handle multiple states? */
+	    if (new_state >= num_states)
+		new_state = 0;
+
+	    items[cur_item].state = new_state;
+	    if (order_mode) {
+		fill_one_side(&all, 0);
+		if (new_state) {
+		    append_right_side(&all, cur_item);
+		} else {
+		    amend_right_side(&all, cur_item);
+		}
+	    } else {
+		fill_both_sides(&all);
+	    }
+	    if (cur_item == moi->top_index) {
+		set_top_item(&all, new_choice, which);
+	    }
+
+	    if (new_choice >= 0) {
+		fix_top_item(&all, cur_item, !which);
+		cur_item = new_choice;
+	    }
+	    print_both(&all, cur_item);
+	    dlg_trace_win(dialog);
+	    continue;		/* wait for another key press */
+	}
+
+	/*
+	 * Check if key pressed matches first character of any item tag in
+	 * list.  If there is more than one match, we will cycle through
+	 * each one as the same key is pressed repeatedly.
+	 */
+	found = FALSE;
+	if (!fkey) {
+	    if (button < 0 || !dialog_state.visit_items) {
+		for (j = cur_item + 1; j < item_no; j++) {
+		    if (check_hotkey(items, j, which)) {
+			found = TRUE;
+			i = j;
+			break;
+		    }
+		}
+		if (!found) {
+		    for (j = 0; j <= cur_item; j++) {
+			if (check_hotkey(items, j, which)) {
+			    found = TRUE;
+			    i = j;
+			    break;
+			}
+		    }
+		}
+		if (found)
+		    dlg_flush_getc();
+	    } else if ((j = dlg_char_to_button(key, buttons)) >= 0) {
+		button = j;
+		ungetch('\n');
+		continue;
+	    }
+	}
+
+	/*
+	 * A single digit (1-9) positions the selection to that line in the
+	 * current screen.
+	 */
+	if (!found
+	    && (key <= '9')
+	    && (key > '0')
+	    && (key - '1' < at_bot)) {
+	    found = TRUE;
+	    i = key - '1';
+	}
+
+	if (!found && fkey) {
+	    switch (key) {
+	    case DLGK_FIELD_PREV:
+		if ((button == sRIGHT) && dialog_state.visit_items) {
+		    key = DLGK_GRID_LEFT;
+		    button = sLEFT;
+		} else {
+		    button = dlg_prev_button(buttons, button);
+		    dlg_draw_buttons(dialog, height - 2, 0, buttons, button,
+				     FALSE, width);
+		    if (button == sRIGHT) {
+			key = DLGK_GRID_RIGHT;
+		    } else {
+			continue;
+		    }
+		}
+		break;
+	    case DLGK_FIELD_NEXT:
+		if ((button == sLEFT) && dialog_state.visit_items) {
+		    key = DLGK_GRID_RIGHT;
+		    button = sRIGHT;
+		} else {
+		    button = dlg_next_button(buttons, button);
+		    dlg_draw_buttons(dialog, height - 2, 0, buttons, button,
+				     FALSE, width);
+		    if (button == sLEFT) {
+			key = DLGK_GRID_LEFT;
+		    } else {
+			continue;
+		    }
+		}
+		break;
+	    }
+
+	    i = cur_item;
+	    found = TRUE;
+	    switch (key) {
+	    case DLGK_GRID_LEFT:
+		i = closest_item(&all, cur_item, 0);
+		fix_top_item(&all, i, 0);
+		break;
+	    case DLGK_GRID_RIGHT:
+		if (order_mode) {
+		    i = last_item(&all, 1);
+		} else {
+		    i = closest_item(&all, cur_item, 1);
+		}
+		fix_top_item(&all, i, 1);
+		break;
+	    case DLGK_PAGE_PREV:
+		if (cur_item > moi->top_index) {
+		    i = moi->top_index;
+		} else if (moi->top_index != 0) {
+		    int temp = at_top;
+		    if ((temp -= all.use_height) < 0)
+			temp = 0;
+		    i = row2index(&all, temp, which);
+		}
+		break;
+	    case DLGK_PAGE_NEXT:
+		if ((at_end - at_bot) < all.use_height) {
+		    i = next_item(&all,
+				  row2index(&all, at_end, which),
+				  which);
+		} else {
+		    i = next_item(&all,
+				  row2index(&all, at_bot, which),
+				  which);
+		    at_top = at_bot;
+		    set_top_item(&all,
+				 next_item(&all,
+					   row2index(&all, at_top, which),
+					   which),
+				 which);
+		    at_bot = skip_rows(&all, at_top, all.use_height, which);
+		    at_bot = MIN(at_bot, at_end);
+		}
+		break;
+	    case DLGK_ITEM_FIRST:
+		i = first_item(&all, which);
+		break;
+	    case DLGK_ITEM_LAST:
+		i = last_item(&all, which);
+		break;
+	    case DLGK_ITEM_PREV:
+		i = prev_item(&all, cur_item, which);
+		if (stop_prev(&all, cur_item, which))
+		    continue;
+		break;
+	    case DLGK_ITEM_NEXT:
+		i = next_item(&all, cur_item, which);
+		break;
+	    default:
+		found = FALSE;
+		break;
+	    }
+	}
+
+	if (found) {
+	    if (i != cur_item) {
+		int now_at = index2row(&all, i, which);
+		int oops = item_no;
+		int old_item;
+
+		DLG_TRACE(("# <--CHOICE %d\n", i));
+		DLG_TRACE(("# <--topITM %d\n", moi->top_index));
+		DLG_TRACE(("# <--now_at %d\n", now_at));
+		DLG_TRACE(("# <--at_top %d\n", at_top));
+		DLG_TRACE(("# <--at_bot %d\n", at_bot));
+
+		if (now_at >= at_bot) {
+		    while (now_at >= at_bot) {
+			if ((at_bot - at_top) >= all.use_height) {
+			    set_top_item(&all,
+					 next_item(&all, moi->top_index, which),
+					 which);
+			}
+			at_top = index2row(&all, moi->top_index, which);
+			at_bot = skip_rows(&all, at_top, all.use_height, which);
+
+			DLG_TRACE(("# ...at_bot %d (now %d vs %d)\n",
+				   at_bot, now_at, at_end));
+			DLG_TRACE(("# ...topITM %d\n", moi->top_index));
+			DLG_TRACE(("# ...at_top %d (diff %d)\n", at_top,
+				   at_bot - at_top));
+
+			if (at_bot >= at_end) {
+			    /*
+			     * If we bumped into the end, move the top-item
+			     * down by one line so that we can display the
+			     * last item in the list.
+			     */
+			    if ((at_bot - at_top) > all.use_height) {
+				set_top_item(&all,
+					     next_item(&all, moi->top_index, which),
+					     which);
+			    } else if (at_top > 0 &&
+				       (at_bot - at_top) >= all.use_height) {
+				set_top_item(&all,
+					     next_item(&all, moi->top_index, which),
+					     which);
+			    }
+			    break;
+			}
+			if (--oops < 0) {
+			    DLG_TRACE(("# OOPS-forward\n"));
+			    break;
+			}
+		    }
+		} else if (now_at < at_top) {
+		    while (now_at < at_top) {
+			old_item = moi->top_index;
+			set_top_item(&all,
+				     prev_item(&all, moi->top_index, which),
+				     which);
+			at_top = index2row(&all, moi->top_index, which);
+
+			DLG_TRACE(("# ...at_top %d (now %d)\n", at_top, now_at));
+			DLG_TRACE(("# ...topITM %d\n", moi->top_index));
+
+			if (moi->top_index >= old_item)
+			    break;
+			if (at_top <= now_at)
+			    break;
+			if (--oops < 0) {
+			    DLG_TRACE(("# OOPS-backward\n"));
+			    break;
+			}
+		    }
+		}
+		DLG_TRACE(("# -->now_at %d\n", now_at));
+		cur_item = i;
+		print_both(&all, cur_item);
+	    }
+	    dlg_trace_win(dialog);
+	    continue;		/* wait for another key press */
+	}
+
+	if (fkey) {
+	    switch (key) {
+	    case DLGK_ENTER:
+		result = dlg_enter_buttoncode(button);
+		break;
+	    case DLGK_LEAVE:
+		result = dlg_ok_buttoncode(button);
+		break;
+#ifdef KEY_RESIZE
+	    case KEY_RESIZE:
+		dlg_will_resize(dialog);
+		/* reset data */
+		height = old_height;
+		width = old_width;
+		free(prompt);
+		_dlg_resize_cleanup(dialog);
+		/* repaint */
+		first = TRUE;
+		goto retry;
+#endif
+	    default:
+		if (was_mouse) {
+		    if ((key2 = dlg_ok_buttoncode(key)) >= 0) {
+			result = key2;
+			break;
+		    }
+		    beep();
+		}
+	    }
+	} else if (key > 0) {
+	    beep();
+	}
+    }
+
+    /*
+     * If told to re-order the list, update it to reflect the current display:
+     * a) The left-side will be at the beginning, without gaps.
+     * b) The right-side will follow, in display-order.
+     */
+    if (order_mode) {
+	DIALOG_LISTITEM *redo;
+	int row;
+	int choice;
+	int new_item = cur_item;
+
+	redo = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1);
+	assert_ptr(redo, THIS_FUNC);
+
+	j = 0;
+	for (k = 0; k < 2; ++k) {
+	    for (row = 0; row < item_no; ++row) {
+		if (myItem(all.list + k, row) == 0)
+		    break;
+		choice = row2index(&all, row, k);
+		if (choice == cur_item)
+		    new_item = j;
+		redo[j++] = items[choice];
+	    }
+	}
+
+	cur_item = new_item;
+	memcpy(items, redo, sizeof(DIALOG_LISTITEM) * (size_t) (item_no + 1));
+
+	free(redo);
+    }
+
+    for (k = 0; k < 2; ++k) {
+	free(data[k].ip);
+    }
+
+    dialog_state.visit_cols = save_visit;
+    dlg_del_window(dialog);
+    dlg_mouse_free_regions();
+    free(prompt);
+
+    *current_item = cur_item;
+    return result;
+#undef THIS_FUNC
+}
+
+/*
+ * Display a dialog box with a list of options that can be turned on or off
+ */
+int
+dialog_buildlist(const char *title,
+		 const char *cprompt,
+		 int height,
+		 int width,
+		 int list_height,
+		 int item_no,
+		 char **items,
+		 int order_mode)
+{
+#define THIS_FUNC "dialog_buildlist"
+    int result;
+    int i, j;
+    DIALOG_LISTITEM *listitems;
+    bool separate_output = dialog_vars.separate_output;
+    bool show_status = FALSE;
+    int current = 0;
+    char *help_result;
+
+    DLG_TRACE(("# buildlist args:\n"));
+    DLG_TRACE2S("title", title);
+    DLG_TRACE2S("message", cprompt);
+    DLG_TRACE2N("height", height);
+    DLG_TRACE2N("width", width);
+    DLG_TRACE2N("lheight", list_height);
+    DLG_TRACE2N("llength", item_no);
+    /* FIXME dump the items[][] too */
+    DLG_TRACE2N("order", order_mode != 0);
+
+    listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1);
+    assert_ptr(listitems, THIS_FUNC);
+
+    for (i = j = 0; i < item_no; ++i) {
+	listitems[i].name = items[j++];
+	listitems[i].text = (dialog_vars.no_items
+			     ? dlg_strempty()
+			     : items[j++]);
+	listitems[i].state = !dlg_strcmp(items[j++], "on");
+	listitems[i].help = ((dialog_vars.item_help)
+			     ? items[j++]
+			     : dlg_strempty());
+    }
+    dlg_align_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no);
+
+    result = dlg_buildlist(title,
+			   cprompt,
+			   height,
+			   width,
+			   list_height,
+			   item_no,
+			   listitems,
+			   NULL,
+			   order_mode,
+			   &current);
+
+    switch (result) {
+    case DLG_EXIT_OK:		/* FALLTHRU */
+    case DLG_EXIT_EXTRA:
+	show_status = TRUE;
+	break;
+    case DLG_EXIT_HELP:
+	dlg_add_help_listitem(&result, &help_result, &listitems[current]);
+	if ((show_status = dialog_vars.help_status)) {
+	    if (separate_output) {
+		dlg_add_string(help_result);
+	    } else {
+		dlg_add_quoted(help_result);
+	    }
+	} else {
+	    dlg_add_string(help_result);
+	}
+	break;
+    }
+
+    if (show_status) {
+	for (i = 0; i < item_no; i++) {
+	    if (listitems[i].state) {
+		if (dlg_need_separator())
+		    dlg_add_separator();
+		if (separate_output) {
+		    dlg_add_string(listitems[i].name);
+		} else {
+		    dlg_add_quoted(listitems[i].name);
+		}
+	    }
+	}
+	AddLastKey();
+    }
+
+    dlg_free_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no);
+    free(listitems);
+    return result;
+#undef THIS_FUNC
+}
Index: a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/checklist.c
===================================================================
--- a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/checklist.c	(nonexistent)
+++ a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/checklist.c	(revision 5)
@@ -0,0 +1,703 @@
+/*
+ *  $Id: checklist.c,v 1.167 2020/11/23 00:37:47 tom Exp $
+ *
+ *  checklist.c -- implements the checklist box
+ *
+ *  Copyright 2000-2019,2020	Thomas E. Dickey
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License, version 2.1
+ *  as published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this program; if not, write to
+ *	Free Software Foundation, Inc.
+ *	51 Franklin St., Fifth Floor
+ *	Boston, MA 02110, USA.
+ *
+ *  An earlier version of this program lists as authors:
+ *	Savio Lam (lam836@cs.cuhk.hk)
+ *	Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension
+ *	Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two
+ */
+
+#include <dialog.h>
+#include <dlg_keys.h>
+
+#define MIN_HIGH  4
+
+typedef struct {
+    /* the outer-window */
+    WINDOW *dialog;
+    int box_y;
+    int box_x;
+    int check_x;
+    int item_x;
+    int checkflag;
+    int use_height;
+    int use_width;
+    /* the inner-window */
+    WINDOW *list;
+    DIALOG_LISTITEM *items;
+    int item_no;
+    const char *states;
+} ALL_DATA;
+
+/*
+ * Print list item.  The 'selected' parameter is true if 'choice' is the
+ * current item.  That one is colored differently from the other items.
+ */
+static void
+print_item(ALL_DATA * data,
+	   WINDOW *win,
+	   DIALOG_LISTITEM * item,
+	   const char *states,
+	   int choice,
+	   int selected)
+{
+    chtype save = dlg_get_attrs(win);
+    int i;
+    bool both = (!dialog_vars.no_tags && !dialog_vars.no_items);
+    bool first = TRUE;
+    int climit = (getmaxx(win) - data->check_x + 1);
+    const char *show = (dialog_vars.no_items
+			? item->name
+			: item->text);
+
+    /* Clear 'residue' of last item */
+    dlg_attrset(win, menubox_attr);
+    (void) wmove(win, choice, 0);
+    for (i = 0; i < data->use_width; i++)
+	(void) waddch(win, ' ');
+
+    (void) wmove(win, choice, data->check_x);
+    dlg_attrset(win, selected ? check_selected_attr : check_attr);
+    (void) wprintw(win,
+		   (data->checkflag == FLAG_CHECK) ? "[%c]" : "(%c)",
+		   states[item->state]);
+    dlg_attrset(win, menubox_attr);
+    (void) waddch(win, ' ');
+
+    if (both) {
+	dlg_print_listitem(win, item->name, climit, first, selected);
+	first = FALSE;
+    }
+
+    (void) wmove(win, choice, data->item_x);
+    dlg_print_listitem(win, show, climit, first, selected);
+
+    if (selected) {
+	dlg_item_help(item->help);
+    }
+    dlg_attrset(win, save);
+}
+
+static void
+print_list(ALL_DATA * data, int choice, int scrollamt, int max_choice)
+{
+    int i;
+    int cur_y, cur_x;
+
+    getyx(data->dialog, cur_y, cur_x);
+    for (i = 0; i < max_choice; i++) {
+	print_item(data,
+		   data->list,
+		   &data->items[i + scrollamt],
+		   data->states,
+		   i, i == choice);
+    }
+    (void) wnoutrefresh(data->list);
+
+    dlg_draw_scrollbar(data->dialog,
+		       (long) (scrollamt),
+		       (long) (scrollamt),
+		       (long) (scrollamt + max_choice),
+		       (long) (data->item_no),
+		       data->box_x + data->check_x,
+		       data->box_x + data->use_width,
+		       data->box_y,
+		       data->box_y + data->use_height + 1,
+		       menubox_border2_attr,
+		       menubox_border_attr);
+
+    (void) wmove(data->dialog, cur_y, cur_x);
+}
+
+static bool
+check_hotkey(DIALOG_LISTITEM * items, int choice)
+{
+    bool result = FALSE;
+
+    if (dlg_match_char(dlg_last_getc(),
+		       (dialog_vars.no_tags
+			? items[choice].text
+			: items[choice].name))) {
+	result = TRUE;
+    }
+    return result;
+}
+
+/*
+ * This is an alternate interface to 'checklist' which allows the application
+ * to read the list item states back directly without putting them in the
+ * output buffer.  It also provides for more than two states over which the
+ * check/radio box can display.
+ */
+int
+dlg_checklist(const char *title,
+	      const char *cprompt,
+	      int height,
+	      int width,
+	      int list_height,
+	      int item_no,
+	      DIALOG_LISTITEM * items,
+	      const char *states,
+	      int flag,
+	      int *current_item)
+{
+    /* *INDENT-OFF* */
+    static DLG_KEYS_BINDING binding[] = {
+	HELPKEY_BINDINGS,
+	ENTERKEY_BINDINGS,
+	DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ),
+	DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ),
+	DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ),
+	DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ),
+	DLG_KEYS_DATA( DLGK_ITEM_FIRST, KEY_HOME ),
+	DLG_KEYS_DATA( DLGK_ITEM_LAST,	KEY_END ),
+	DLG_KEYS_DATA( DLGK_ITEM_LAST,	KEY_LL ),
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,	'+' ),
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,	KEY_DOWN ),
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,  CHR_NEXT ),
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,	'-' ),
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,	KEY_UP ),
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,  CHR_PREVIOUS ),
+	DLG_KEYS_DATA( DLGK_PAGE_NEXT,	KEY_NPAGE ),
+	DLG_KEYS_DATA( DLGK_PAGE_NEXT,	DLGK_MOUSE(KEY_NPAGE) ),
+	DLG_KEYS_DATA( DLGK_PAGE_PREV,	KEY_PPAGE ),
+	DLG_KEYS_DATA( DLGK_PAGE_PREV,	DLGK_MOUSE(KEY_PPAGE) ),
+	TOGGLEKEY_BINDINGS,
+	END_KEYS_BINDING
+    };
+    /* *INDENT-ON* */
+
+#ifdef KEY_RESIZE
+    int old_height = height;
+    int old_width = width;
+#endif
+    ALL_DATA all;
+    int i, j, key2, found, x, y, cur_x, cur_y;
+    int key, fkey;
+    int button = dialog_state.visit_items ? -1 : dlg_default_button();
+    int choice = dlg_default_listitem(items);
+    int scrollamt = 0;
+    int max_choice;
+    int use_width, list_width, name_width, text_width;
+    int result = DLG_EXIT_UNKNOWN;
+    int num_states;
+    WINDOW *dialog;
+    char *prompt;
+    const char **buttons = dlg_ok_labels();
+    const char *widget_name;
+
+    DLG_TRACE(("# %s args:\n", flag ? "checklist" : "radiolist"));
+    DLG_TRACE2S("title", title);
+    DLG_TRACE2S("message", cprompt);
+    DLG_TRACE2N("height", height);
+    DLG_TRACE2N("width", width);
+    DLG_TRACE2N("lheight", list_height);
+    DLG_TRACE2N("llength", item_no);
+    /* FIXME dump the items[][] too */
+    DLG_TRACE2S("states", states);
+    DLG_TRACE2N("flag", flag);
+    DLG_TRACE2N("current", *current_item);
+
+    dialog_state.plain_buttons = TRUE;
+
+    memset(&all, 0, sizeof(all));
+    all.items = items;
+    all.item_no = item_no;
+
+    dlg_does_output();
+
+    /*
+     * If this is a radiobutton list, ensure that no more than one item is
+     * selected initially.  Allow none to be selected, since some users may
+     * wish to provide this flavor.
+     */
+    if (flag == FLAG_RADIO) {
+	bool first = TRUE;
+
+	for (i = 0; i < item_no; i++) {
+	    if (items[i].state) {
+		if (first) {
+		    first = FALSE;
+		} else {
+		    items[i].state = 0;
+		}
+	    }
+	}
+	widget_name = "radiolist";
+    } else {
+	widget_name = "checklist";
+    }
+#ifdef KEY_RESIZE
+  retry:
+#endif
+
+    prompt = dlg_strclone(cprompt);
+    dlg_tab_correct_str(prompt);
+
+    all.use_height = list_height;
+    use_width = dlg_calc_list_width(item_no, items) + 10;
+    use_width = MAX(26, use_width);
+    if (all.use_height == 0) {
+	/* calculate height without items (4) */
+	dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, use_width);
+	dlg_calc_listh(&height, &all.use_height, item_no);
+    } else {
+	dlg_auto_size(title, prompt,
+		      &height, &width,
+		      MIN_HIGH + all.use_height, use_width);
+    }
+    dlg_button_layout(buttons, &width);
+    dlg_print_size(height, width);
+    dlg_ctl_size(height, width);
+
+    /* we need at least two states */
+    if (states == 0 || strlen(states) < 2)
+	states = " *";
+    num_states = (int) strlen(states);
+    all.states = states;
+
+    all.checkflag = flag;
+
+    x = dlg_box_x_ordinate(width);
+    y = dlg_box_y_ordinate(height);
+
+    dialog = dlg_new_window(height, width, y, x);
+    all.dialog = dialog;
+    dlg_register_window(dialog, widget_name, binding);
+    dlg_register_buttons(dialog, widget_name, buttons);
+
+    dlg_mouse_setbase(x, y);
+
+    dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+    dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+    dlg_draw_title(dialog, title);
+
+    dlg_attrset(dialog, dialog_attr);
+    dlg_print_autowrap(dialog, prompt, height, width);
+
+    all.use_width = width - 6;
+    getyx(dialog, cur_y, cur_x);
+    all.box_y = cur_y + 1;
+    all.box_x = (width - all.use_width) / 2 - 1;
+
+    /*
+     * After displaying the prompt, we know how much space we really have.
+     * Limit the list to avoid overwriting the ok-button.
+     */
+    if (all.use_height + MIN_HIGH > height - cur_y)
+       all.use_height = height - MIN_HIGH - cur_y;
+    if (all.use_height <= 0)
+	all.use_height = 1;
+
+    max_choice = MIN(all.use_height, item_no);
+    max_choice = MAX(max_choice, 1);
+
+    /* create new window for the list */
+    all.list = dlg_sub_window(dialog, all.use_height, all.use_width,
+			      y + all.box_y + 1, x + all.box_x + 1);
+
+    /* draw a box around the list items */
+    dlg_draw_box(dialog, all.box_y, all.box_x,
+		 all.use_height + 2 * MARGIN,
+		 all.use_width + 2 * MARGIN,
+		 menubox_border_attr, menubox_border2_attr);
+
+    text_width = 0;
+    name_width = 0;
+    /* Find length of longest item to center checklist */
+    for (i = 0; i < item_no; i++) {
+	text_width = MAX(text_width, dlg_count_columns(items[i].text));
+	name_width = MAX(name_width, dlg_count_columns(items[i].name));
+    }
+
+    /* If the name+text is wider than the list is allowed, then truncate
+     * one or both of them.  If the name is no wider than 1/4 of the list,
+     * leave it intact.
+     */
+    use_width = (all.use_width - 6);
+    if (dialog_vars.no_tags) {
+	list_width = MIN(all.use_width, text_width);
+    } else if (dialog_vars.no_items) {
+	list_width = MIN(all.use_width, name_width);
+    } else {
+	if (text_width >= 0
+	    && name_width >= 0
+	    && use_width > 0
+	    && text_width + name_width > use_width) {
+	    int need = (int) (0.25 * use_width);
+	    if (name_width > need) {
+		int want = (int) (use_width * ((double) name_width) /
+				  (text_width + name_width));
+		name_width = (want > need) ? want : need;
+	    }
+	    text_width = use_width - name_width;
+	}
+	list_width = (text_width + name_width);
+    }
+
+    all.check_x = (use_width - list_width) / 2;
+    all.item_x = ((dialog_vars.no_tags
+		   ? 0
+		   : (dialog_vars.no_items
+		      ? 0
+		      : (2 + name_width)))
+		  + all.check_x + 4);
+
+    /* ensure we are scrolled to show the current choice */
+    scrollamt = MIN(scrollamt, max_choice + item_no - 1);
+    if (choice >= (max_choice + scrollamt - 1)) {
+	scrollamt = MAX(0, choice - max_choice + 1);
+	choice = max_choice - 1;
+    }
+    print_list(&all, choice, scrollamt, max_choice);
+
+    /* register the new window, along with its borders */
+    dlg_mouse_mkbigregion(all.box_y + 1, all.box_x,
+			  all.use_height, all.use_width + 2,
+			  KEY_MAX, 1, 1, 1 /* by lines */ );
+
+    dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width);
+
+    dlg_trace_win(dialog);
+
+    while (result == DLG_EXIT_UNKNOWN) {
+	int was_mouse;
+
+	if (button < 0)		/* --visit-items */
+	    wmove(dialog, all.box_y + choice + 1, all.box_x + all.check_x + 2);
+
+	key = dlg_mouse_wgetch(dialog, &fkey);
+	if (dlg_result_key(key, fkey, &result)) {
+	    if (!dlg_button_key(result, &button, &key, &fkey))
+		break;
+	}
+
+	was_mouse = (fkey && is_DLGK_MOUSE(key));
+	if (was_mouse)
+	    key -= M_EVENT;
+
+	if (was_mouse && (key >= KEY_MAX)) {
+	    getyx(dialog, cur_y, cur_x);
+	    i = (key - KEY_MAX);
+	    if (i < max_choice) {
+		choice = (key - KEY_MAX);
+		print_list(&all, choice, scrollamt, max_choice);
+
+		key = DLGK_TOGGLE;	/* force the selected item to toggle */
+	    } else {
+		beep();
+		continue;
+	    }
+	    fkey = FALSE;
+	} else if (was_mouse && key >= KEY_MIN) {
+	    key = dlg_lookup_key(dialog, key, &fkey);
+	}
+
+	/*
+	 * A space toggles the item status.  We handle either a checklist
+	 * (any number of items can be selected) or radio list (zero or one
+	 * items can be selected).
+	 */
+	if (key == DLGK_TOGGLE) {
+	    int current = scrollamt + choice;
+	    int next = items[current].state + 1;
+
+	    if (next >= num_states)
+		next = 0;
+
+	    if (flag == FLAG_CHECK) {	/* checklist? */
+		getyx(dialog, cur_y, cur_x);
+		items[current].state = next;
+		print_item(&all, all.list,
+			   &items[scrollamt + choice],
+			   states,
+			   choice, TRUE);
+		(void) wnoutrefresh(all.list);
+		(void) wmove(dialog, cur_y, cur_x);
+	    } else {		/* radiolist */
+		for (i = 0; i < item_no; i++) {
+		    if (i != current) {
+			items[i].state = 0;
+		    }
+		}
+		if (items[current].state) {
+		    getyx(dialog, cur_y, cur_x);
+		    items[current].state = next ? next : 1;
+		    print_item(&all, all.list,
+			       &items[current],
+			       states,
+			       choice, TRUE);
+		    (void) wnoutrefresh(all.list);
+		    (void) wmove(dialog, cur_y, cur_x);
+		} else {
+		    items[current].state = 1;
+		    print_list(&all, choice, scrollamt, max_choice);
+		}
+	    }
+	    continue;		/* wait for another key press */
+	}
+
+	/*
+	 * Check if key pressed matches first character of any item tag in
+	 * list.  If there is more than one match, we will cycle through
+	 * each one as the same key is pressed repeatedly.
+	 */
+	found = FALSE;
+	if (!fkey) {
+	    if (button < 0 || !dialog_state.visit_items) {
+		for (j = scrollamt + choice + 1; j < item_no; j++) {
+		    if (check_hotkey(items, j)) {
+			found = TRUE;
+			i = j - scrollamt;
+			break;
+		    }
+		}
+		if (!found) {
+		    for (j = 0; j <= scrollamt + choice; j++) {
+			if (check_hotkey(items, j)) {
+			    found = TRUE;
+			    i = j - scrollamt;
+			    break;
+			}
+		    }
+		}
+		if (found)
+		    dlg_flush_getc();
+	    } else if ((j = dlg_char_to_button(key, buttons)) >= 0) {
+		button = j;
+		ungetch('\n');
+		continue;
+	    }
+	}
+
+	/*
+	 * A single digit (1-9) positions the selection to that line in the
+	 * current screen.
+	 */
+	if (!found
+	    && (key <= '9')
+	    && (key > '0')
+	    && (key - '1' < max_choice)) {
+	    found = TRUE;
+	    i = key - '1';
+	}
+
+	if (!found) {
+	    if (fkey) {
+		found = TRUE;
+		switch (key) {
+		case DLGK_ITEM_FIRST:
+		    i = -scrollamt;
+		    break;
+		case DLGK_ITEM_LAST:
+		    i = item_no - 1 - scrollamt;
+		    break;
+		case DLGK_PAGE_PREV:
+		    if (choice)
+			i = 0;
+		    else if (scrollamt != 0)
+			i = -MIN(scrollamt, max_choice);
+		    else
+			continue;
+		    break;
+		case DLGK_PAGE_NEXT:
+		    i = MIN(choice + max_choice, item_no - scrollamt - 1);
+		    break;
+		case DLGK_ITEM_PREV:
+		    i = choice - 1;
+		    if (choice == 0 && scrollamt == 0)
+			continue;
+		    break;
+		case DLGK_ITEM_NEXT:
+		    i = choice + 1;
+		    if (scrollamt + choice >= item_no - 1)
+			continue;
+		    break;
+		default:
+		    found = FALSE;
+		    break;
+		}
+	    }
+	}
+
+	if (found) {
+	    if (i != choice) {
+		getyx(dialog, cur_y, cur_x);
+		if (i < 0 || i >= max_choice) {
+		    if (i < 0) {
+			scrollamt += i;
+			choice = 0;
+		    } else {
+			choice = max_choice - 1;
+			scrollamt += (i - max_choice + 1);
+		    }
+		    print_list(&all, choice, scrollamt, max_choice);
+		} else {
+		    choice = i;
+		    print_list(&all, choice, scrollamt, max_choice);
+		}
+	    }
+	    continue;		/* wait for another key press */
+	}
+
+	if (fkey) {
+	    switch (key) {
+	    case DLGK_ENTER:
+		result = dlg_enter_buttoncode(button);
+		break;
+	    case DLGK_LEAVE:
+		result = dlg_ok_buttoncode(button);
+		break;
+	    case DLGK_FIELD_PREV:
+		button = dlg_prev_button(buttons, button);
+		dlg_draw_buttons(dialog, height - 2, 0, buttons, button,
+				 FALSE, width);
+		break;
+	    case DLGK_FIELD_NEXT:
+		button = dlg_next_button(buttons, button);
+		dlg_draw_buttons(dialog, height - 2, 0, buttons, button,
+				 FALSE, width);
+		break;
+#ifdef KEY_RESIZE
+	    case KEY_RESIZE:
+		dlg_will_resize(dialog);
+		/* reset data */
+		height = old_height;
+		width = old_width;
+		free(prompt);
+		_dlg_resize_cleanup(dialog);
+		/* repaint */
+		goto retry;
+#endif
+	    default:
+		if (was_mouse) {
+		    if ((key2 = dlg_ok_buttoncode(key)) >= 0) {
+			result = key2;
+			break;
+		    }
+		    beep();
+		}
+	    }
+	} else if (key > 0) {
+	    beep();
+	}
+    }
+
+    dlg_del_window(dialog);
+    dlg_mouse_free_regions();
+    free(prompt);
+    *current_item = (scrollamt + choice);
+    return result;
+}
+
+/*
+ * Display a dialog box with a list of options that can be turned on or off
+ * The `flag' parameter is used to select between radiolist and checklist.
+ */
+int
+dialog_checklist(const char *title,
+		 const char *cprompt,
+		 int height,
+		 int width,
+		 int list_height,
+		 int item_no,
+		 char **items,
+		 int flag)
+{
+    int result;
+    int i, j;
+    DIALOG_LISTITEM *listitems;
+    bool separate_output = ((flag == FLAG_CHECK)
+			    && (dialog_vars.separate_output));
+    bool show_status = FALSE;
+    int current = 0;
+    char *help_result;
+
+    listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1);
+    assert_ptr(listitems, "dialog_checklist");
+
+    for (i = j = 0; i < item_no; ++i) {
+	listitems[i].name = items[j++];
+	listitems[i].text = (dialog_vars.no_items
+			     ? dlg_strempty()
+			     : items[j++]);
+	listitems[i].state = !dlg_strcmp(items[j++], "on");
+	listitems[i].help = ((dialog_vars.item_help)
+			     ? items[j++]
+			     : dlg_strempty());
+    }
+    dlg_align_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no);
+
+    result = dlg_checklist(title,
+			   cprompt,
+			   height,
+			   width,
+			   list_height,
+			   item_no,
+			   listitems,
+			   NULL,
+			   flag,
+			   &current);
+
+    switch (result) {
+    case DLG_EXIT_OK:		/* FALLTHRU */
+    case DLG_EXIT_EXTRA:
+	show_status = TRUE;
+	break;
+    case DLG_EXIT_HELP:
+	dlg_add_help_listitem(&result, &help_result, &listitems[current]);
+	if ((show_status = dialog_vars.help_status)) {
+	    if (separate_output) {
+		dlg_add_string(help_result);
+		dlg_add_separator();
+	    } else {
+		dlg_add_quoted(help_result);
+	    }
+	} else {
+	    dlg_add_string(help_result);
+	}
+	break;
+    }
+
+    if (show_status) {
+	for (i = 0; i < item_no; i++) {
+	    if (listitems[i].state) {
+		if (separate_output) {
+		    dlg_add_string(listitems[i].name);
+		    dlg_add_separator();
+		} else {
+		    if (dlg_need_separator())
+			dlg_add_separator();
+		    if (flag == FLAG_CHECK)
+			dlg_add_quoted(listitems[i].name);
+		    else
+			dlg_add_string(listitems[i].name);
+		}
+	    }
+	}
+	dlg_add_last_key(separate_output);
+    }
+
+    dlg_free_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no);
+    free(listitems);
+    return result;
+}
Index: a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/dialog-config.in
===================================================================
--- a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/dialog-config.in	(nonexistent)
+++ a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/dialog-config.in	(revision 5)
@@ -0,0 +1,265 @@
+#!@SHELL@
+# $Id: dialog-config.in,v 1.14 2021/03/05 23:48:36 tom Exp $
+##############################################################################
+# Copyright (c) 2007-2019,2021 Thomas E. Dickey                              #
+#                                                                            #
+# Permission is hereby granted, free of charge, to any person obtaining a    #
+# copy of this software and associated documentation files (the "Software"), #
+# to deal in the Software without restriction, including without limitation  #
+# the rights to use, copy, modify, merge, publish, distribute, distribute    #
+# with modifications, sublicense, and/or sell copies of the Software, and to #
+# permit persons to whom the Software is furnished to do so, subject to the  #
+# following conditions:                                                      #
+#                                                                            #
+# The above copyright notice and this permission notice shall be included in #
+# all copies or substantial portions of the Software.                        #
+#                                                                            #
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
+# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
+# DEALINGS IN THE SOFTWARE.                                                  #
+#                                                                            #
+# Except as contained in this notice, the name(s) of the above copyright     #
+# holders shall not be used in advertising or otherwise to promote the sale, #
+# use or other dealings in this Software without prior written               #
+# authorization.                                                             #
+##############################################################################
+
+prefix="@prefix@"
+exec_prefix="@exec_prefix@"
+datarootdir="@datarootdir@"
+
+same_prefix=yes
+same_exec_prefix=yes
+
+THIS="@PACKAGE@"
+
+test $# = 0 && exec @SHELL@ "$0" --error
+
+while test $# -gt 0; do
+
+	# (re)evaluate symbols that may depend upon $prefix
+	if [ "x$same_prefix" != "xyes" ]
+	then
+		eval exec_prefix='@exec_prefix@'
+		eval datarootdir='@datarootdir@'
+	elif [ "x$same_exec_prefix" != "xyes" ]
+	then
+		eval datarootdir='@datarootdir@'
+	fi
+
+	eval bindir='"@bindir@"'
+	eval includedir='"@includedir@"'
+	eval libdir='"@libdir@"'
+	eval datadir='"@datadir@"'
+	eval mandir='"@mandir@"'
+
+	[ -z "$includedir" ] && includedir="${prefix}/include" 
+
+	eval LDFLAGS='"@LDFLAGS@"'
+	eval LIBS='"@LIBS@"'
+	LIBS="-l${THIS} $LIBS"
+
+	# If the directory given by --libdir is not in the LDFLAGS+LIBS set,
+	# prepend it to LDFLAGS to help link this application's library.
+	found=no
+	for opt in $LDFLAGS $LIBS
+	do
+		if [ "x$-L${libdir}" = "x$opt" ]
+		then
+			found=yes
+			break
+		fi
+	done
+	if [ $found = no ]
+	then
+		[ -n "$LFLAGS" ] && LDFLAGS=" $LFDLAGS"
+		LDFLAGS="-L${libdir}$LDFLAGS"
+	fi
+	[ -z "$LDFLAGS" ] && LDFLAGS="-L${libdir}"
+
+	# Ignore -L options which do not correspond to an actual directory,
+	# or which are standard library directories (i.e., the linker is
+	# supposed to search those directories).
+	#
+	# There is no portable way to find the list of standard library
+	# directories.  Require a POSIX shell anyway, to keep this simple.
+	lib_flags=
+	for opt in $LDFLAGS $LIBS
+	do
+		case $opt in
+		-L*)
+			opt_lib=`echo "x$opt" | sed -e 's/^x-L//'`
+			[ -d "$opt_lib" ] || continue
+			case "$opt_lib" in
+			@LD_SEARCHPATH@) # skip standard libdir
+				continue
+				;;
+			*)
+				;;
+			esac
+			;;
+		esac
+		lib_flags="$lib_flags $opt"
+	done
+
+	case "$1" in
+	-*=*)
+		ARG=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
+		;;
+	*)
+		ARG=
+		;;
+	esac
+
+	case "$1" in
+	# basic configuration
+	--prefix=*)
+		prefix="$ARG"
+		test -z "$exec_prefix" && exec_prefix="$ARG"
+		same_prefix=no
+		;;
+	--prefix)
+		echo "$prefix"
+		;;
+	--exec-prefix=*)
+		exec_prefix="$ARG"
+		same_exec_prefix=no
+		;;
+	--exec-prefix)
+		echo "$exec_prefix"
+		;;
+	# compile/link
+	--cflags|--cflags-only-I)
+		INCS="-I$includedir"
+		sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO
+			$INCS
+ENDECHO
+		;;
+	--cflags-only-other)
+		# no -D/-U options should be needed
+		echo
+		;;
+	--ldflags)
+		OPTS=
+		for opt in $LDFLAGS $LIBS
+		do
+			case "x$opt" in
+			x-[^l]*)
+				OPTS="$OPTS $opt"
+				;;
+			esac
+		done
+		printf "%s\n" "$OPTS"
+		;;
+	--libs)
+		OPTS=
+		for opt in $lib_flags
+		do
+			[ -n "$OPTS" ] && OPTS="$OPTS "
+			OPTS="${OPTS}${opt}"
+		done
+		printf "%s\n" "$OPTS"
+		;;
+	--libs-only-L)
+		OPTS=
+		for opt in $lib_flags
+		do
+			case "x$opt" in
+			x-L*)
+				[ -n "$OPTS" ] && OPTS="$OPTS "
+				OPTS="${OPTS}${opt}"
+				;;
+			esac
+		done
+		printf "%s\n" "$OPTS"
+		;;
+	--libs-only-l)
+		OPTS=
+		for opt in $lib_flags
+		do
+			case "x$opt" in
+			x-l*)
+				[ -n "$OPTS" ] && OPTS="$OPTS "
+				OPTS="${OPTS}${opt}"
+				;;
+			esac
+		done
+		printf "%s\n" "$OPTS"
+		;;
+	--libs-only-other)
+		OPTS=
+		for opt in $lib_flags
+		do
+			case "x$opt" in
+			x-[lL]*)
+				;;
+			*)
+				[ -n "$OPTS" ] && OPTS="$OPTS "
+				OPTS="${OPTS}${opt}"
+				;;
+			esac
+		done
+		printf "%s\n" "$OPTS"
+		;;
+	# identification
+	--version)
+		echo "@VERSION_MAJOR@.@VERSION_MINOR@.@VERSION_PATCH@"
+		;;
+	--abi-version)
+		echo "@VERSION@" | sed -e 's/:/./g'
+		;;
+	# locations
+	--bindir)
+		echo "${bindir}"
+		;;
+	--datadir)
+		echo "${datadir}"
+		;;
+	--libdir)
+		echo "${libdir}"
+		;;
+	--mandir)
+		echo "${mandir}"
+		;;
+	# general info
+	--help)
+		cat <<ENDHELP
+Usage: ${THIS}-config [options]
+
+Options:
+  --prefix           echos the package-prefix of ${THIS}
+  --prefix=ARG       sets the package-prefix of ${THIS}
+  --exec-prefix      echos the executable-prefix of ${THIS}
+  --exec-prefix=ARG  sets the executable-prefix of ${THIS}
+
+  --cflags           echos the C compiler flags needed to compile with ${THIS}
+  --ldflags          echos the linker flags needed to link with ${THIS}
+
+  --libs             echos the libraries needed to link with ${THIS}
+  --libs-only-L      echos -L linker options (search path) for ${THIS}
+  --libs-only-l      echos -l linker options (libraries) for ${THIS}
+  --libs-only-other  echos linker options other than -L/-l
+
+  --version          echos the release+patchdate version of ${THIS}
+  --abi-version      echos the ABI version of ${THIS}
+
+  --bindir           echos the directory containing ${THIS} programs
+  --datadir          echos the directory containing ${THIS} data
+  --libdir           echos the directory containing ${THIS} libraries
+  --mandir           echos the directory containing ${THIS} manual pages
+
+  --help             prints this message
+ENDHELP
+		;;
+	--error|*)
+		@SHELL@ "$0" --help 1>&2
+		exit 1
+		;;
+	esac
+	shift
+done
+# vile:shmode
Index: a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/dialog.m4
===================================================================
--- a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/dialog.m4	(nonexistent)
+++ a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/dialog.m4	(revision 5)
@@ -0,0 +1,324 @@
+dnl #
+dnl # /usr/share/aclocal/dialog.m4
+dnl #
+dnl # Configure paths for dialog
+dnl # Andrew V.Kosteltsev
+
+dnl ============================================================
+dnl
+dnl  Synopsis:
+dnl     AC_CHECK_DIALOG([MIN-VERSION [,                  # minimum dialog version, e.g. 1.3-20190211
+dnl                           DEFAULT-WITH-DIALOG [,     # default value for --with-dialog option
+dnl                           DEFAULT-WITH-DIALOG-TEST [,# default value for --with-dialog-test option
+dnl                           EXTEND-VARS [,                  # whether CFLAGS/LDFLAGS/etc are extended
+dnl                           ACTION-IF-FOUND [,              # action to perform if dialog was found
+dnl                           ACTION-IF-NOT-FOUND             # action to perform if dialog was not found
+dnl                          ]]]]]])
+dnl  Examples:
+dnl     AC_CHECK_DIALOG(1.3-20210621)
+dnl     AC_CHECK_DIALOG(1.3-20210621,,,no,CFLAGS="$CFLAGS -DHAVE_DIALOG $DIALOG_CFLAGS")
+dnl     AC_CHECK_DIALOG(1.3-20210621,yes,yes,yes,CFLAGS="$CFLAGS -DHAVE_DIALOG")
+dnl
+dnl
+dnl  If you have to change prefix returned by dialog-config script or change
+dnl  location of dialog-config, you may set environment variable DIALOG_CONFIG,
+dnl  for example:
+dnl
+dnl  # export DIALOG_CONFIG="dialog-config --prefix=/usr/local"
+dnl  # export DIALOG_CONFIG="/usr/bin/dialog-config --prefix=/usr/local"
+dnl
+dnl ============================================================
+dnl
+dnl ============================================================
+dnl  auxilliary macros
+dnl ============================================================
+AC_DEFUN([_AC_DIALOG_ERROR], [dnl
+AC_MSG_RESULT([*FAILED*])
+cat <<EOT | sed -e 's/^[[ 	]]*/ | /' -e 's/>>/  /' 1>&2
+$1
+EOT
+exit 1
+])
+
+AC_DEFUN([_AC_DIALOG_VERBOSE], [dnl
+if test ".$verbose" = .yes; then
+    AC_MSG_RESULT([  $1])
+fi
+])
+
+dnl ============================================================
+dnl  the user macro
+dnl ============================================================
+AC_DEFUN([AC_CHECK_DIALOG], [dnl
+dnl
+dnl ============================================================
+dnl  prerequisites
+dnl ============================================================
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_CPP])dnl
+dnl
+dnl ============================================================
+dnl  set DIALOG_CONFIG variable
+dnl ============================================================
+if test -z "$DIALOG_CONFIG"; then
+  DIALOG_CONFIG='dialog-config'
+fi
+dnl
+DIALOG_CFLAGS=''
+DIALOG_LDFLAGS=''
+DIALOG_LIBS=''
+AC_SUBST(DIALOG_CFLAGS)
+AC_SUBST(DIALOG_LDFLAGS)
+AC_SUBST(DIALOG_LIBS)
+dnl
+dnl ============================================================
+dnl  command line options
+dnl ============================================================
+_AC_DIALOG_VERBOSE([])
+AC_ARG_WITH(dialog,dnl
+[  --with-dialog[=ARG]       Build with dialog Library  (default=]ifelse([$2],,yes,$2)[)],dnl
+,dnl
+with_dialog="ifelse([$2],,yes,$2)"
+)dnl
+AC_ARG_WITH(dialog-test,dnl
+[  --with-dialog-test      Perform dialog Sanity Test (default=]ifelse([$3],,yes,$3)[)],dnl
+,dnl
+with_dialog_test="ifelse([$3],,yes,$3)"
+)dnl
+_AC_DIALOG_VERBOSE([+ Command Line Options:])
+_AC_DIALOG_VERBOSE([    o --with-dialog=$with_dialog])
+_AC_DIALOG_VERBOSE([    o --with-dialog-test=$with_dialog_test])
+dnl
+dnl ============================================================
+dnl  configuration
+dnl ============================================================
+if test ".$with_dialog" != .no; then
+    dialog_subdir=no
+    dialog_subdir_opts=''
+    case "$with_dialog" in
+        subdir:* )
+            dialog_subdir=yes
+            changequote(, )dnl
+            dialog_subdir_opts=`echo $with_dialog | sed -e 's/^subdir:[^ 	]*[ 	]*//'`
+            with_dialog=`echo $with_dialog | sed -e 's/^subdir:\([^ 	]*\).*$/\1/'`
+            changequote([, ])dnl
+            ;;
+    esac
+    dialog_version=""
+    dialog_location=""
+    dialog_type=""
+    dialog_cflags=""
+    dialog_ldflags=""
+    dialog_libs=""
+    if test ".$with_dialog" = .yes; then
+        #   via config script in $PATH
+        changequote(, )dnl
+        dialog_version=`($DIALOG_CONFIG --version) 2>/dev/null |\
+                      sed -e 's/^.*\([0-9]\.[0-9]*[-][0-9]*\).*$/\1/'`
+        changequote([, ])dnl
+        if test ".$dialog_version" != .; then
+            dialog_location=`$DIALOG_CONFIG --prefix`
+            dialog_type='installed'
+            dialog_cflags=`$DIALOG_CONFIG --cflags`
+            dialog_ldflags=`$DIALOG_CONFIG --ldflags`
+            dialog_libs=`$DIALOG_CONFIG --libs`
+        fi
+    elif test -d "$with_dialog"; then
+        with_dialog=`echo $with_dialog | sed -e 's;/*$;;'`
+        dialog_found=no
+        #   via config script under a specified directory
+        #   (a standard installation, but not a source tree)
+        if test ".$dialog_found" = .no; then
+            for _dir in $with_dialog/bin $with_dialog; do
+                if test -f "$_dir/dialog-config"; then
+                    test -f "$_dir/dialog-config.in" && continue # dialog-config in source tree!
+                    changequote(, )dnl
+                    dialog_version=`($_dir/dialog-config --version) 2>/dev/null |\
+                                  sed -e 's/^.*\([0-9]\.[0-9]*[.][0-9]*\).*$/\1/'`
+                    changequote([, ])dnl
+                    if test ".$dialog_version" != .; then
+                        dialog_location=`$_dir/dialog-config --prefix`
+                        dialog_type="installed"
+                        dialog_cflags=`$_dir/dialog-config --cflags`
+                        dialog_ldflags=`$_dir/dialog-config --ldflags`
+                        dialog_libs=`$_dir/dialog-config --libs`
+                        dialog_found=yes
+                        break
+                    fi
+                fi
+            done
+        fi
+    fi
+    _AC_DIALOG_VERBOSE([+ Determined Location:])
+    _AC_DIALOG_VERBOSE([    o path: $dialog_location])
+    _AC_DIALOG_VERBOSE([    o type: $dialog_type])
+    if test ".$dialog_version" = .; then
+        if test ".$with_dialog" != .yes; then
+             _AC_DIALOG_ERROR([dnl
+             Unable to locate dialog under $with_dialog.
+             Please specify the correct path to either a dialog installation tree
+             (use --with-dialog=DIR if you used --prefix=DIR for installing dialog in
+             the past).])
+        else
+             _AC_DIALOG_ERROR([dnl
+             Unable to locate dialog in any system-wide location (see \$PATH).
+             Please specify the correct path to either a dialog installation tree
+             (use --with-dialog=DIR if you used --prefix=DIR for installing dialog in
+             the past, or set the DIALOG_CONFIG environment variable to the full path
+             to dialog-config).])
+        fi
+    fi
+    dnl ========================================================
+    dnl  Check whether the found version is sufficiently new
+    dnl ========================================================
+    _req_version="ifelse([$1],,1.0.0,$1)"
+    for _var in dialog_version _req_version; do
+        eval "_val=\"\$${_var}\""
+        _major=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[.]]\)\([[0-9]]*\)/\1/'`
+        _minor=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[.]]\)\([[0-9]]*\)/\2/'`
+        _micro=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[.]]\)\([[0-9]]*\)/\4/'`
+        _hex=`echo dummy | awk '{ printf("%d%02d%02d", major, minor, micro); }' \
+              "major=$_major" "minor=$_minor" "micro=$_micro"`
+        eval "${_var}_hex=\"\$_hex\""
+    done
+    _AC_DIALOG_VERBOSE([+ Determined Versions:])
+    _AC_DIALOG_VERBOSE([    o existing: $dialog_version -> 0x$dialog_version_hex])
+    _AC_DIALOG_VERBOSE([    o required: $_req_version -> 0x$_req_version_hex])
+    _ok=0
+    if test ".$dialog_version_hex" != .; then
+        if test ".$_req_version_hex" != .; then
+            if test $dialog_version_hex -ge $_req_version_hex; then
+                _ok=1
+            fi
+        fi
+    fi
+    if test ".$_ok" = .0; then
+        _AC_DIALOG_ERROR([dnl
+        Found dialog version $dialog_version, but required at least version $_req_version.
+        Upgrade dialog under $dialog_location to $_req_version or higher first, please.])
+    fi
+    dnl ========================================================
+    dnl  Perform dialog Sanity Compile Check
+    dnl ========================================================
+    if test ".$with_dialog_test" = .yes; then
+        _ac_save_CFLAGS="$CFLAGS"
+        _ac_save_LDFLAGS="$LDFLAGS"
+        _ac_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $dialog_cflags"
+        LDFLAGS="$LDFLAGS $dialog_ldflags"
+        LIBS="$LIBS $dialog_libs"
+        _AC_DIALOG_VERBOSE([+ Test Build Environment:])
+        _AC_DIALOG_VERBOSE([    o CFLAGS="$CFLAGS"])
+        _AC_DIALOG_VERBOSE([    o LDFLAGS="$LDFLAGS"])
+        _AC_DIALOG_VERBOSE([    o LIBS="$LIBS"])
+        cross_compile=no
+        define([_code1], [
+#include <stdlib.h>
+#include <stdio.h>
+#include <strings.h>  /* index(3)    */
+
+#include <dialog.h>
+#include <dlg_colors.h>
+#include <dlg_keys.h>
+        ])
+        define([_code2], [
+  int status = 0;
+
+  bzero( (void *)&dialog_vars, sizeof(DIALOG_VARS) );
+
+  init_dialog(stdin, stdout);
+
+  dialog_vars.colors = 1;
+  dialog_vars.backtitle = "Test dialog Library";
+  dialog_vars.dlg_clear_screen = 1;
+  dialog_vars.sleep_secs = 1;
+
+
+  dlg_put_backtitle();
+
+  /*************************************************
+    Ruler: 68 characters + 2 spaces left and right:
+
+                           | ----handy-ruler----------------------------------------------------- | */
+  status = dialog_msgbox( " Dialog ==>libdialog<== [required] ",
+                          "\nPackage is installed and corect.\n",
+                          5, 72, 0 );
+
+  if( dialog_vars.sleep_secs )
+    (void)napms(dialog_vars.sleep_secs * 1000);
+
+  if( dialog_vars.dlg_clear_screen )
+  {
+    dlg_clear();
+    (void)refresh();
+  }
+  end_dialog();
+        ])
+        _AC_DIALOG_VERBOSE([+ Performing Sanity Checks:])
+        _AC_DIALOG_VERBOSE([    o pre-processor test])
+        AC_PREPROC_IFELSE([AC_LANG_PROGRAM([_code1], [_code2])], [_ok=yes], [_ok=no])
+        if test ".$_ok" != .yes; then
+            _AC_DIALOG_ERROR([dnl
+            Found dialog $dialog_version under $dialog_location, but
+            was unable to perform a sanity pre-processor check. This means
+            the dialog header dialog.h was not found.
+            We used the following build environment:
+            >> CPP="$CPP"
+            See config.log for possibly more details.])
+        fi
+        _AC_DIALOG_VERBOSE([    o link check])
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([_code1], [_code2])], [_ok=yes], [_ok=no])
+        if test ".$_ok" != .yes; then
+            _AC_DIALOG_ERROR([dnl
+            Found dialog $dialog_version under $dialog_location, but
+            was unable to perform a sanity linker check. This means
+            the dialog library libdialog.a was not found.
+            We used the following build environment:
+            >> CC="$CC"
+            >> CFLAGS="$CFLAGS"
+            >> LDFLAGS="$LDFLAGS"
+            >> LIBS="$LIBS"
+            See config.log for possibly more details.])
+        fi
+        _extendvars="ifelse([$4],,yes,$4)"
+        if test ".$_extendvars" != .yes; then
+            CFLAGS="$_ac_save_CFLAGS"
+            LDFLAGS="$_ac_save_LDFLAGS"
+            LIBS="$_ac_save_LIBS"
+        fi
+    else
+        _extendvars="ifelse([$4],,yes,$4)"
+        if test ".$_extendvars" = .yes; then
+            if test ".$dialog_subdir" = .yes; then
+                CFLAGS="$CFLAGS $dialog_cflags"
+                LDFLAGS="$LDFLAGS $dialog_ldflags"
+                LIBS="$LIBS $dialog_libs"
+            fi
+        fi
+    fi
+    DIALOG_CFLAGS="$dialog_cflags"
+    DIALOG_LDFLAGS="$dialog_ldflags"
+    DIALOG_LIBS="$dialog_libs"
+    AC_SUBST(DIALOG_CFLAGS)
+    AC_SUBST(DIALOG_LDFLAGS)
+    AC_SUBST(DIALOG_LIBS)
+
+    AC_SUBST(HAVE_DIALOG, [1])
+
+    AC_CHECK_HEADERS(dialog.h dlg_colors.h dlg_keys.h)
+
+    _AC_DIALOG_VERBOSE([+ Final Results:])
+    _AC_DIALOG_VERBOSE([    o DIALOG_CFLAGS="$DIALOG_CFLAGS"])
+    _AC_DIALOG_VERBOSE([    o DIALOG_LDFLAGS="$DIALOG_LDFLAGS"])
+    _AC_DIALOG_VERBOSE([    o DIALOG_LIBS="$DIALOG_LIBS"])
+fi
+if test ".$with_dialog" != .no; then
+    AC_MSG_CHECKING(for libdialog)
+    AC_MSG_RESULT([version $dialog_version, $dialog_type under $dialog_location])
+    ifelse([$5], , :, [$5])
+else
+    AC_MSG_CHECKING(for libdialog)
+    AC_MSG_RESULT([no])
+    ifelse([$6], , :, [$6])
+fi
+])
Index: a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/fselect.c
===================================================================
--- a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/fselect.c	(nonexistent)
+++ a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/fselect.c	(revision 5)
@@ -0,0 +1,971 @@
+/*
+ *  $Id: fselect.c,v 1.117 2021/06/21 19:50:35 tom Exp $
+ *
+ *  fselect.c -- implements the file-selector box
+ *
+ *  Copyright 2000-2020,2021	Thomas E. Dickey
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License, version 2.1
+ *  as published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this program; if not, write to
+ *	Free Software Foundation, Inc.
+ *	51 Franklin St., Fifth Floor
+ *	Boston, MA 02110, USA.
+ */
+
+#include <dlg_internals.h>
+#include <dlg_keys.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if HAVE_DIRENT_H
+# include <dirent.h>
+# define NAMLEN(dirent) strlen((dirent)->d_name)
+#else
+# define dirent direct
+# define NAMLEN(dirent) (dirent)->d_namlen
+# if HAVE_SYS_NDIR_H
+#  include <sys/ndir.h>
+# endif
+# if HAVE_SYS_DIR_H
+#  include <sys/dir.h>
+# endif
+# if HAVE_NDIR_H
+#  include <ndir.h>
+# endif
+#endif
+
+# if defined(_FILE_OFFSET_BITS) && defined(HAVE_STRUCT_DIRENT64)
+#  if !defined(_LP64) && (_FILE_OFFSET_BITS == 64)
+#   define      DIRENT  struct dirent64
+#  else
+#   define      DIRENT  struct dirent
+#  endif
+# else
+#  define       DIRENT  struct dirent
+# endif
+
+#define EXT_WIDE 1
+#define HDR_HIGH 1
+#define BTN_HIGH (1 + 2 * MARGIN)	/* Ok/Cancel, also input-box */
+#define MIN_HIGH (HDR_HIGH - MARGIN + (BTN_HIGH * 2) + 4 * MARGIN)
+#define MIN_WIDE (2 * MAX(dlg_count_columns(d_label), dlg_count_columns(f_label)) + 6 * MARGIN + 2 * EXT_WIDE)
+
+#define MOUSE_D (KEY_MAX + 0)
+#define MOUSE_F (KEY_MAX + 10000)
+#define MOUSE_T (KEY_MAX + 20000)
+
+typedef enum {
+    sDIRS = -3
+    ,sFILES = -2
+    ,sTEXT = -1
+} STATES;
+
+typedef struct {
+    WINDOW *par;		/* parent window */
+    WINDOW *win;		/* this window */
+    int length;			/* length of the data[] array */
+    int offset;			/* index of first item on screen */
+    int choice;			/* index of the selection */
+    int mousex;			/* base of mouse-code return-values */
+    unsigned allocd;
+    char **data;
+} LIST;
+
+typedef struct {
+    int length;
+    char **data;
+} MATCH;
+
+static void
+init_list(LIST * list, WINDOW *par, WINDOW *win, int mousex)
+{
+    list->par = par;
+    list->win = win;
+    list->length = 0;
+    list->offset = 0;
+    list->choice = 0;
+    list->mousex = mousex;
+    list->allocd = 0;
+    list->data = 0;
+    dlg_mouse_mkbigregion(getbegy(win), getbegx(win),
+			  getmaxy(win), getmaxx(win),
+			  mousex, 1, 1, 1 /* by lines */ );
+}
+
+static char *
+leaf_of(char *path)
+{
+    char *leaf = strrchr(path, '/');
+    if (leaf != 0)
+	leaf++;
+    else
+	leaf = path;
+    return leaf;
+}
+
+static char *
+data_of(LIST * list)
+{
+    if (list != 0
+	&& list->data != 0)
+	return list->data[list->choice];
+    return 0;
+}
+
+static void
+free_list(LIST * list, int reinit)
+{
+    if (list->data != 0) {
+	int n;
+
+	for (n = 0; list->data[n] != 0; n++)
+	    free(list->data[n]);
+	free(list->data);
+	list->data = 0;
+    }
+    if (reinit)
+	init_list(list, list->par, list->win, list->mousex);
+}
+
+static void
+add_to_list(LIST * list, char *text)
+{
+    unsigned need;
+
+    need = (unsigned) (list->length + 1);
+    if (need + 1 > list->allocd) {
+	list->allocd = 2 * (need + 1);
+	if (list->data == 0) {
+	    list->data = dlg_malloc(char *, list->allocd);
+	} else {
+	    list->data = dlg_realloc(char *, list->allocd, list->data);
+	}
+	assert_ptr(list->data, "add_to_list");
+    }
+    list->data[list->length++] = dlg_strclone(text);
+    list->data[list->length] = 0;
+}
+
+static void
+keep_visible(LIST * list)
+{
+    int high = getmaxy(list->win);
+
+    if (list->choice < list->offset) {
+	list->offset = list->choice;
+    }
+    if (list->choice - list->offset >= high)
+	list->offset = list->choice - high + 1;
+}
+
+#define Value(c) (int)((c) & 0xff)
+
+static int
+find_choice(char *target, LIST * list)
+{
+    int choice = list->choice;
+
+    if (*target == 0) {
+	list->choice = 0;
+    } else {
+	int n;
+	int len_1, cmp_1;
+
+	/* find the match with the longest length.  If more than one has the
+	 * same length, choose the one with the closest match of the final
+	 * character.
+	 */
+	len_1 = 0;
+	cmp_1 = 256;
+	for (n = 0; n < list->length; n++) {
+	    char *a = target;
+	    char *b = list->data[n];
+	    int len_2, cmp_2;
+
+	    len_2 = 0;
+	    while ((*a != 0) && (*b != 0) && (*a == *b)) {
+		a++;
+		b++;
+		len_2++;
+	    }
+	    cmp_2 = Value(*a) - Value(*b);
+	    if (cmp_2 < 0)
+		cmp_2 = -cmp_2;
+	    if ((len_2 > len_1)
+		|| (len_1 == len_2 && cmp_2 < cmp_1)) {
+		len_1 = len_2;
+		cmp_1 = cmp_2;
+		list->choice = n;
+	    }
+	}
+    }
+    if (choice != list->choice) {
+	keep_visible(list);
+    }
+    return (choice != list->choice);
+}
+
+static void
+display_list(LIST * list)
+{
+    if (list->win != 0) {
+	int n;
+	int x;
+	int y;
+	int top;
+	int bottom;
+
+	dlg_attr_clear(list->win, getmaxy(list->win), getmaxx(list->win), item_attr);
+	for (n = list->offset; n < list->length && list->data[n]; n++) {
+	    y = n - list->offset;
+	    if (y >= getmaxy(list->win))
+		break;
+	    (void) wmove(list->win, y, 0);
+	    if (n == list->choice)
+		dlg_attrset(list->win, item_selected_attr);
+	    (void) waddstr(list->win, list->data[n]);
+	    dlg_attrset(list->win, item_attr);
+	}
+	dlg_attrset(list->win, item_attr);
+
+	getparyx(list->win, y, x);
+
+	top = y - 1;
+	bottom = y + getmaxy(list->win);
+	dlg_draw_scrollbar(list->par,
+			   (long) list->offset,
+			   (long) list->offset,
+			   (long) (list->offset + getmaxy(list->win)),
+			   (long) (list->length),
+			   x + 1,
+			   x + getmaxx(list->win),
+			   top,
+			   bottom,
+			   menubox_border2_attr,
+			   menubox_border_attr);
+
+	(void) wmove(list->win, list->choice - list->offset, 0);
+	(void) wnoutrefresh(list->win);
+    }
+}
+
+/* FIXME: see arrows.c
+ * This workaround is used to allow two lists to have scroll-tabs at the same
+ * time, by reassigning their return-values to be different.  Just for
+ * readability, we use the names of keys with similar connotations, though all
+ * that is really required is that they're distinct, so we can put them in a
+ * switch statement.
+ */
+#if USE_MOUSE
+static void
+fix_arrows(LIST * list)
+{
+    if (list->win != 0) {
+	int x;
+	int y;
+	int top;
+	int right;
+	int bottom;
+
+	getparyx(list->win, y, x);
+	top = y - 1;
+	right = getmaxx(list->win);
+	bottom = y + getmaxy(list->win);
+
+	mouse_mkbutton(top, x, right,
+		       ((list->mousex == MOUSE_D)
+			? KEY_PREVIOUS
+			: KEY_PPAGE));
+	mouse_mkbutton(bottom, x, right,
+		       ((list->mousex == MOUSE_D)
+			? KEY_NEXT
+			: KEY_NPAGE));
+    }
+}
+
+#else
+#define fix_arrows(list)	/* nothing */
+#endif
+
+static bool
+show_list(char *target, LIST * list, bool keep)
+{
+    bool changed = keep || find_choice(target, list);
+    display_list(list);
+    return changed;
+}
+
+/*
+ * Highlight the closest match to 'target' in the given list, setting offset
+ * to match.
+ */
+static bool
+show_both_lists(char *input, LIST * d_list, LIST * f_list, bool keep)
+{
+    char *leaf = leaf_of(input);
+
+    return show_list(leaf, d_list, keep) || show_list(leaf, f_list, keep);
+}
+
+/*
+ * Move up/down in the given list
+ */
+static bool
+change_list(int choice, LIST * list)
+{
+    if (data_of(list) != 0) {
+	int last = list->length - 1;
+
+	choice += list->choice;
+	if (choice < 0)
+	    choice = 0;
+	if (choice > last)
+	    choice = last;
+	list->choice = choice;
+	keep_visible(list);
+	display_list(list);
+	return TRUE;
+    }
+    return FALSE;
+}
+
+static void
+scroll_list(int direction, LIST * list)
+{
+    if (data_of(list) != 0) {
+	int length = getmaxy(list->win);
+	if (change_list(direction * length, list))
+	    return;
+    }
+    beep();
+}
+
+static int
+compar(const void *a, const void *b)
+{
+    return strcmp(*(const char *const *) a, *(const char *const *) b);
+}
+
+static void
+match(char *name, LIST * d_list, LIST * f_list, MATCH * match_list)
+{
+    char *test = leaf_of(name);
+    size_t test_len = strlen(test);
+    char **matches = dlg_malloc(char *, (size_t) (d_list->length + f_list->length));
+    size_t data_len = 0;
+
+    if (matches != 0) {
+	int i;
+	char **new_ptr;
+
+	for (i = 2; i < d_list->length; i++) {
+	    if (strncmp(test, d_list->data[i], test_len) == 0) {
+		matches[data_len++] = d_list->data[i];
+	    }
+	}
+	for (i = 0; i < f_list->length; i++) {
+	    if (strncmp(test, f_list->data[i], test_len) == 0) {
+		matches[data_len++] = f_list->data[i];
+	    }
+	}
+	if ((new_ptr = dlg_realloc(char *, data_len + 1, matches)) != 0) {
+	    matches = new_ptr;
+	} else {
+	    free(matches);
+	    matches = 0;
+	    data_len = 0;
+	}
+    }
+    match_list->data = matches;
+    match_list->length = (int) data_len;
+}
+
+static void
+free_match(MATCH * match_list)
+{
+    free(match_list->data);
+    match_list->length = 0;
+}
+
+static int
+complete(char *name, LIST * d_list, LIST * f_list, char **buff_ptr)
+{
+    MATCH match_list;
+    char *test;
+    size_t test_len;
+    size_t i;
+    char *buff;
+
+    match(name, d_list, f_list, &match_list);
+    if (match_list.length == 0) {
+	free(match_list.data);
+	*buff_ptr = NULL;
+	return 0;
+    }
+
+    test = match_list.data[0];
+    test_len = strlen(test);
+    buff = dlg_malloc(char, test_len + 2);
+    if (match_list.length == 1) {
+	strcpy(buff, test);
+	i = test_len;
+	if (test == data_of(d_list)) {
+	    buff[test_len] = '/';
+	    i++;
+	}
+    } else {
+	int j;
+	char *next;
+
+	for (i = 0; i < test_len; i++) {
+	    char test_char = test[i];
+	    if (test_char == '\0')
+		break;
+	    for (j = 0; j < match_list.length; j++) {
+		if (match_list.data[j][i] != test_char) {
+		    break;
+		}
+	    }
+	    if (j == match_list.length) {
+		(buff)[i] = test_char;
+	    } else
+		break;
+	}
+	next = dlg_realloc(char, i + 1, buff);
+	if (next == NULL) {
+	    free(buff);
+	    *buff_ptr = NULL;
+	    return 0;
+	}
+	buff = next;
+    }
+    free_match(&match_list);
+    buff[i] = '\0';
+    *buff_ptr = buff;
+    return (i != 0);
+}
+
+static bool
+fill_lists(char *current, char *input, LIST * d_list, LIST * f_list, bool keep)
+{
+    bool result = TRUE;
+    bool rescan = FALSE;
+    struct stat sb;
+    int n;
+    char path[MAX_LEN + 1];
+
+    /* check if we've updated the lists */
+    for (n = 0; current[n] && input[n]; n++) {
+	if (current[n] != input[n])
+	    break;
+    }
+
+    if (current[n] == input[n]) {
+	result = FALSE;
+	rescan = (n == 0 && d_list->length == 0);
+    } else if (strchr(current + n, '/') == 0
+	       && strchr(input + n, '/') == 0) {
+	result = show_both_lists(input, d_list, f_list, keep);
+    } else {
+	rescan = TRUE;
+    }
+
+    if (rescan) {
+	DIR *dp;
+	size_t have = strlen(input);
+	char *leaf;
+
+	if (have > MAX_LEN)
+	    have = MAX_LEN;
+	memcpy(current, input, have);
+	current[have] = '\0';
+
+	/* refill the lists */
+	free_list(d_list, TRUE);
+	free_list(f_list, TRUE);
+	memcpy(path, current, have);
+	path[have] = '\0';
+	if ((leaf = strrchr(path, '/')) != 0) {
+	    *++leaf = 0;
+	} else {
+	    strcpy(path, "./");
+	    leaf = path + strlen(path);
+	}
+	DLG_TRACE(("opendir '%s'\n", path));
+	if ((dp = opendir(path)) != 0) {
+	    DIRENT *de;
+
+	    while ((de = readdir(dp)) != 0) {
+		size_t len = NAMLEN(de);
+		if (len == 0 || (len + have + 2) >= MAX_LEN)
+		    continue;
+		memcpy(leaf, de->d_name, len);
+		leaf[len] = '\0';
+		if (stat(path, &sb) == 0) {
+		    if ((sb.st_mode & S_IFMT) == S_IFDIR)
+			add_to_list(d_list, leaf);
+		    else if (f_list->win)
+			add_to_list(f_list, leaf);
+		}
+	    }
+	    (void) closedir(dp);
+	    /* sort the lists */
+	    if (d_list->data != 0 && d_list->length > 1) {
+		qsort(d_list->data,
+		      (size_t) d_list->length,
+		      sizeof(d_list->data[0]),
+		      compar);
+	    }
+	    if (f_list->data != 0 && f_list->length > 1) {
+		qsort(f_list->data,
+		      (size_t) f_list->length,
+		      sizeof(f_list->data[0]),
+		      compar);
+	    }
+	}
+
+	(void) show_both_lists(input, d_list, f_list, FALSE);
+	d_list->offset = d_list->choice;
+	f_list->offset = f_list->choice;
+	result = TRUE;
+    }
+    return result;
+}
+
+static bool
+usable_state(int state, LIST * dirs, LIST * files)
+{
+    bool result;
+
+    switch (state) {
+    case sDIRS:
+	result = (dirs->win != 0) && (data_of(dirs) != 0);
+	break;
+    case sFILES:
+	result = (files->win != 0) && (data_of(files) != 0);
+	break;
+    default:
+	result = TRUE;
+	break;
+    }
+    return result;
+}
+
+#define which_list() ((state == sFILES) \
+			? &f_list \
+			: ((state == sDIRS) \
+			  ? &d_list \
+			  : 0))
+#define NAVIGATE_BINDINGS \
+	DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), \
+	DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), \
+	DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), \
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,  KEY_DOWN ), \
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,  CHR_NEXT ), \
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,  KEY_NEXT ), \
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,  CHR_PREVIOUS ), \
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,  KEY_UP ), \
+	DLG_KEYS_DATA( DLGK_PAGE_NEXT,  KEY_NPAGE ), \
+	DLG_KEYS_DATA( DLGK_PAGE_PREV,  KEY_PPAGE )
+
+/*
+ * Display a dialog box for entering a filename
+ */
+static int
+dlg_fselect(const char *title, const char *path, int height, int width, int dselect)
+{
+    /* *INDENT-OFF* */
+    static DLG_KEYS_BINDING binding[] = {
+	HELPKEY_BINDINGS,
+	ENTERKEY_BINDINGS,
+	NAVIGATE_BINDINGS,
+	TOGGLEKEY_BINDINGS,
+	END_KEYS_BINDING
+    };
+    static DLG_KEYS_BINDING binding2[] = {
+	INPUTSTR_BINDINGS,
+	HELPKEY_BINDINGS,
+	ENTERKEY_BINDINGS,
+	NAVIGATE_BINDINGS,
+	TOGGLEKEY_BINDINGS,
+	END_KEYS_BINDING
+    };
+    /* *INDENT-ON* */
+
+#ifdef KEY_RESIZE
+    int old_height = height;
+    int old_width = width;
+    bool resized = FALSE;
+#endif
+    int tbox_y, tbox_x, tbox_width, tbox_height;
+    int dbox_y, dbox_x, dbox_width, dbox_height;
+    int fbox_y, fbox_x, fbox_width, fbox_height;
+    int show_buttons = TRUE;
+    int offset = 0;
+    int key = 0;
+    int fkey = FALSE;
+    int code;
+    int result = DLG_EXIT_UNKNOWN;
+    int state = dialog_vars.default_button >= 0 ? dlg_default_button() : sTEXT;
+    int button;
+    bool first = (state == sTEXT);
+    bool first_trace = TRUE;
+    char *input;
+    char *completed;
+    char current[MAX_LEN + 1];
+    WINDOW *dialog = 0;
+    WINDOW *w_text = 0;
+    WINDOW *w_work = 0;
+    const char **buttons = dlg_ok_labels();
+    const char *d_label = _("Directories");
+    const char *f_label = _("Files");
+    char *partial = 0;
+    int min_wide = MIN_WIDE;
+    int min_items = height ? 0 : 4;
+    LIST d_list, f_list;
+
+    DLG_TRACE(("# %s args:\n", dselect ? "dselect" : "fselect"));
+    DLG_TRACE2S("title", title);
+    DLG_TRACE2S("path", path);
+    DLG_TRACE2N("height", height);
+    DLG_TRACE2N("width", width);
+
+    dlg_does_output();
+
+    /* Set up the initial value */
+    input = dlg_set_result(path);
+    offset = (int) strlen(input);
+    *current = 0;
+
+    dlg_button_layout(buttons, &min_wide);
+
+#ifdef KEY_RESIZE
+  retry:
+#endif
+    if (height > 0)
+	height += MIN_HIGH;
+    dlg_auto_size(title, "", &height, &width, MIN_HIGH + min_items, min_wide);
+
+    dlg_print_size(height, width);
+    dlg_ctl_size(height, width);
+
+    dialog = dlg_new_window(height + 1, width,
+			    dlg_box_y_ordinate(height),
+			    dlg_box_x_ordinate(width));
+    dlg_register_window(dialog, "fselect", binding);
+    dlg_register_buttons(dialog, "fselect", buttons);
+
+    dlg_mouse_setbase(0, 0);
+
+    dlg_draw_box2(dialog, 0, 0, height + 1, width, dialog_attr, border_attr, border2_attr);
+    dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+    dlg_draw_title(dialog, title);
+
+    dlg_attrset(dialog, dialog_attr);
+
+    /* Draw the input field box */
+    tbox_height = 1;
+    tbox_width = width - (4 * MARGIN + 2);
+    tbox_y = height - (BTN_HIGH * 2) + MARGIN + 1;
+    tbox_x = (width - tbox_width) / 2;
+
+    w_text = dlg_der_window(dialog, tbox_height, tbox_width, tbox_y, tbox_x);
+    if (w_text == 0) {
+	result = DLG_EXIT_ERROR;
+	goto finish;
+    }
+
+    dlg_draw_box(dialog, tbox_y - MARGIN, tbox_x - MARGIN,
+		 (2 * MARGIN + 1), tbox_width + (MARGIN + EXT_WIDE),
+		 menubox_border_attr, menubox_border2_attr);
+    dlg_mouse_mkbigregion(getbegy(dialog) + tbox_y - MARGIN,
+			  getbegx(dialog) + tbox_x - MARGIN,
+			  1 + (2 * MARGIN),
+			  tbox_width + (MARGIN + EXT_WIDE),
+			  MOUSE_T, 1, 1, 3 /* doesn't matter */ );
+
+    dlg_register_window(w_text, "fselect2", binding2);
+
+    /* Draw the directory listing box */
+    if (dselect)
+	dbox_width = (width - (6 * MARGIN));
+    else
+	dbox_width = (width - (6 * MARGIN + 2 * EXT_WIDE)) / 2;
+    dbox_height = height - MIN_HIGH;
+    dbox_y = (2 * MARGIN + 2);
+    dbox_x = tbox_x;
+
+    w_work = dlg_der_window(dialog, dbox_height, dbox_width, dbox_y, dbox_x);
+    if (w_work == 0) {
+	result = DLG_EXIT_ERROR;
+	goto finish;
+    }
+
+    (void) mvwaddstr(dialog, dbox_y - (MARGIN + 1), dbox_x - MARGIN, d_label);
+    dlg_draw_box(dialog,
+		 dbox_y - MARGIN, dbox_x - MARGIN,
+		 dbox_height + (MARGIN + 1), dbox_width + (MARGIN + 1),
+		 menubox_border_attr, menubox_border2_attr);
+    init_list(&d_list, dialog, w_work, MOUSE_D);
+
+    if (!dselect) {
+	/* Draw the filename listing box */
+	fbox_height = dbox_height;
+	fbox_width = dbox_width;
+	fbox_y = dbox_y;
+	fbox_x = tbox_x + dbox_width + (2 * MARGIN);
+
+	w_work = dlg_der_window(dialog, fbox_height, fbox_width, fbox_y, fbox_x);
+	if (w_work == 0) {
+	    result = DLG_EXIT_ERROR;
+	    goto finish;
+	}
+
+	(void) mvwaddstr(dialog, fbox_y - (MARGIN + 1), fbox_x - MARGIN, f_label);
+	dlg_draw_box(dialog,
+		     fbox_y - MARGIN, fbox_x - MARGIN,
+		     fbox_height + (MARGIN + 1), fbox_width + (MARGIN + 1),
+		     menubox_border_attr, menubox_border2_attr);
+	init_list(&f_list, dialog, w_work, MOUSE_F);
+    } else {
+	memset(&f_list, 0, sizeof(f_list));
+    }
+
+    while (result == DLG_EXIT_UNKNOWN) {
+
+	if (fill_lists(current, input, &d_list, &f_list, state < sTEXT))
+	    show_buttons = TRUE;
+
+#ifdef KEY_RESIZE
+	if (resized) {
+	    resized = FALSE;
+	    dlg_show_string(w_text, input, offset, inputbox_attr,
+			    0, 0, tbox_width, FALSE, first);
+	}
+#endif
+
+	/*
+	 * The last field drawn determines where the cursor is shown:
+	 */
+	if (show_buttons) {
+	    show_buttons = FALSE;
+	    button = (state < 0) ? 0 : state;
+	    dlg_draw_buttons(dialog, height - 1, 0, buttons, button, FALSE, width);
+	}
+
+	if (first_trace) {
+	    first_trace = FALSE;
+	    dlg_trace_win(dialog);
+	}
+
+	if (state < 0) {
+	    switch (state) {
+	    case sTEXT:
+		dlg_set_focus(dialog, w_text);
+		break;
+	    case sFILES:
+		dlg_set_focus(dialog, f_list.win);
+		break;
+	    case sDIRS:
+		dlg_set_focus(dialog, d_list.win);
+		break;
+	    }
+	}
+
+	if (first) {
+	    (void) wrefresh(dialog);
+	} else {
+	    fix_arrows(&d_list);
+	    fix_arrows(&f_list);
+	    key = dlg_mouse_wgetch((state == sTEXT) ? w_text : dialog, &fkey);
+	    if (dlg_result_key(key, fkey, &result)) {
+		if (!dlg_button_key(result, &button, &key, &fkey))
+		    break;
+	    }
+	}
+
+	if (key == DLGK_TOGGLE) {
+	    key = DLGK_SELECT;
+	    fkey = TRUE;
+	}
+
+	if (fkey) {
+	    switch (key) {
+	    case DLGK_MOUSE(KEY_PREVIOUS):
+		state = sDIRS;
+		scroll_list(-1, which_list());
+		continue;
+	    case DLGK_MOUSE(KEY_NEXT):
+		state = sDIRS;
+		scroll_list(1, which_list());
+		continue;
+	    case DLGK_MOUSE(KEY_PPAGE):
+		state = sFILES;
+		scroll_list(-1, which_list());
+		continue;
+	    case DLGK_MOUSE(KEY_NPAGE):
+		state = sFILES;
+		scroll_list(1, which_list());
+		continue;
+	    case DLGK_PAGE_PREV:
+		scroll_list(-1, which_list());
+		continue;
+	    case DLGK_PAGE_NEXT:
+		scroll_list(1, which_list());
+		continue;
+	    case DLGK_ITEM_PREV:
+		if (change_list(-1, which_list()))
+		    continue;
+		/* FALLTHRU */
+	    case DLGK_FIELD_PREV:
+		show_buttons = TRUE;
+		do {
+		    state = dlg_prev_ok_buttonindex(state, sDIRS);
+		} while (!usable_state(state, &d_list, &f_list));
+		continue;
+	    case DLGK_ITEM_NEXT:
+		if (change_list(1, which_list()))
+		    continue;
+		/* FALLTHRU */
+	    case DLGK_FIELD_NEXT:
+		show_buttons = TRUE;
+		do {
+		    state = dlg_next_ok_buttonindex(state, sDIRS);
+		} while (!usable_state(state, &d_list, &f_list));
+		continue;
+	    case DLGK_SELECT:
+		completed = 0;
+		if (partial != 0) {
+		    free(partial);
+		    partial = 0;
+		}
+		if (state == sFILES && !dselect) {
+		    completed = data_of(&f_list);
+		} else if (state == sDIRS) {
+		    completed = data_of(&d_list);
+		} else {
+		    if (complete(input, &d_list, &f_list, &partial)) {
+			completed = partial;
+		    }
+		}
+		if (completed != 0) {
+		    state = sTEXT;
+		    show_buttons = TRUE;
+		    strcpy(leaf_of(input), completed);
+		    offset = (int) strlen(input);
+		    dlg_show_string(w_text, input, offset, inputbox_attr,
+				    0, 0, tbox_width, 0, first);
+		    if (partial != NULL) {
+			free(partial);
+			partial = 0;
+		    }
+		    continue;
+		} else {	/* if (state < sTEXT) */
+		    (void) beep();
+		    continue;
+		}
+		/* FALLTHRU */
+	    case DLGK_ENTER:
+		result = (state > 0) ? dlg_enter_buttoncode(state) : DLG_EXIT_OK;
+		continue;
+	    case DLGK_LEAVE:
+		if (state >= 0)
+		    result = dlg_ok_buttoncode(state);
+		break;
+#ifdef KEY_RESIZE
+	    case KEY_RESIZE:
+		dlg_will_resize(dialog);
+		/* reset data */
+		height = old_height;
+		width = old_width;
+		show_buttons = TRUE;
+		*current = 0;
+		resized = TRUE;
+		/* repaint */
+		free_list(&d_list, FALSE);
+		free_list(&f_list, FALSE);
+		_dlg_resize_cleanup(dialog);
+		goto retry;
+#endif
+	    default:
+		if (key >= DLGK_MOUSE(MOUSE_T)) {
+		    state = sTEXT;
+		    continue;
+		} else if (key >= DLGK_MOUSE(MOUSE_F)) {
+		    if (f_list.win != 0) {
+			state = sFILES;
+			f_list.choice = (key - DLGK_MOUSE(MOUSE_F)) + f_list.offset;
+			display_list(&f_list);
+		    }
+		    continue;
+		} else if (key >= DLGK_MOUSE(MOUSE_D)) {
+		    if (d_list.win != 0) {
+			state = sDIRS;
+			d_list.choice = (key - DLGK_MOUSE(MOUSE_D)) + d_list.offset;
+			display_list(&d_list);
+		    }
+		    continue;
+		} else if (is_DLGK_MOUSE(key)
+			   && (code = dlg_ok_buttoncode(key - M_EVENT)) >= 0) {
+		    result = code;
+		    continue;
+		}
+		break;
+	    }
+	}
+
+	if (state < 0) {	/* Input box selected if we're editing */
+	    int edit = dlg_edit_string(input, &offset, key, fkey, first);
+
+	    if (edit) {
+		dlg_show_string(w_text, input, offset, inputbox_attr,
+				0, 0, tbox_width, 0, first);
+		first = FALSE;
+		state = sTEXT;
+	    }
+	} else if ((code = dlg_char_to_button(key, buttons)) >= 0) {
+	    result = dlg_ok_buttoncode(code);
+	    break;
+	}
+    }
+    AddLastKey();
+
+    dlg_unregister_window(w_text);
+    dlg_del_window(dialog);
+    dlg_mouse_free_regions();
+    free_list(&d_list, FALSE);
+    free_list(&f_list, FALSE);
+
+  finish:
+    if (partial != 0)
+	free(partial);
+    return result;
+}
+
+/*
+ * Display a dialog box for entering a filename
+ */
+int
+dialog_fselect(const char *title, const char *path, int height, int width)
+{
+    return dlg_fselect(title, path, height, width, FALSE);
+}
+
+/*
+ * Display a dialog box for entering a directory
+ */
+int
+dialog_dselect(const char *title, const char *path, int height, int width)
+{
+    return dlg_fselect(title, path, height, width, TRUE);
+}
Index: a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/menubox.c
===================================================================
--- a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/menubox.c	(nonexistent)
+++ a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/menubox.c	(revision 5)
@@ -0,0 +1,815 @@
+/*
+ *  $Id: menubox.c,v 1.171 2020/11/23 21:03:11 tom Exp $
+ *
+ *  menubox.c -- implements the menu box
+ *
+ *  Copyright 2000-2019,2020	Thomas E. Dickey
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public Licens, version 2.1e
+ *  as published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this program; if not, write to
+ *	Free Software Foundation, Inc.
+ *	51 Franklin St., Fifth Floor
+ *	Boston, MA 02110, USA.
+ *
+ *  An earlier version of this program lists as authors
+ *	Savio Lam (lam836@cs.cuhk.hk)
+ */
+
+#include <dlg_internals.h>
+#include <dlg_keys.h>
+
+typedef enum {
+    Unselected = 0,
+    Selected,
+    Editing
+} Mode;
+
+typedef struct {
+    /* the outer-window */
+    WINDOW *dialog;
+    int box_y;
+    int box_x;
+    int tag_x;
+    int item_x;
+    int menu_height;
+    int menu_width;
+    /* the inner-window */
+    WINDOW *menu;
+    DIALOG_LISTITEM *items;
+    int item_no;
+} ALL_DATA;
+
+#define MIN_HIGH  4
+
+#define INPUT_ROWS     3	/* rows per inputmenu entry */
+
+#define RowHeight(i) (is_inputmenu ? ((i) * INPUT_ROWS) : ((i) * 1))
+#define ItemToRow(i) (is_inputmenu ? ((i) * INPUT_ROWS + 1) : (i))
+#define RowToItem(i) (is_inputmenu ? ((i) / INPUT_ROWS + 0) : (i))
+
+/*
+ * Print menu item
+ */
+static void
+print_item(ALL_DATA * data,
+	   WINDOW *win,
+	   DIALOG_LISTITEM * item,
+	   int choice,
+	   Mode selected,
+	   bool is_inputmenu)
+{
+    chtype save = dlg_get_attrs(win);
+    int climit = (data->item_x - data->tag_x - GUTTER);
+    int my_width = data->menu_width;
+    int my_x = data->item_x;
+    int my_y = ItemToRow(choice);
+    bool both = (!dialog_vars.no_tags && !dialog_vars.no_items);
+    bool first = TRUE;
+    chtype bordchar;
+    const char *show = (dialog_vars.no_items
+			? item->name
+			: item->text);
+
+    switch (selected) {
+    default:
+    case Unselected:
+	bordchar = item_attr;
+	break;
+    case Selected:
+	bordchar = item_selected_attr;
+	break;
+    case Editing:
+	bordchar = dialog_attr;
+	break;
+    }
+
+    /* Clear 'residue' of last item and mark current current item */
+    if (is_inputmenu) {
+	int n;
+
+	dlg_attrset(win, (selected != Unselected) ? item_selected_attr : item_attr);
+	for (n = my_y - 1; n < my_y + INPUT_ROWS - 1; n++) {
+	    wmove(win, n, 0);
+	    wprintw(win, "%*s", my_width, " ");
+	}
+    } else {
+	dlg_attrset(win, menubox_attr);
+	wmove(win, my_y, 0);
+	wprintw(win, "%*s", my_width, " ");
+    }
+
+    /* highlight first char of the tag to be special */
+    if (both) {
+	(void) wmove(win, my_y, data->tag_x);
+	dlg_print_listitem(win, item->name, climit, first, selected);
+	first = FALSE;
+    }
+
+    /* Draw the input field box (only for inputmenu) */
+    (void) wmove(win, my_y, my_x);
+    if (is_inputmenu) {
+	my_width -= 1;
+	dlg_draw_box(win, my_y - 1, my_x, INPUT_ROWS, my_width - my_x - data->tag_x,
+		     bordchar,
+		     bordchar);
+	my_width -= 1;
+	++my_x;
+    }
+
+    /* print actual item */
+    wmove(win, my_y, my_x);
+    dlg_print_listitem(win, show, my_width - my_x, first, selected);
+
+    if (selected) {
+	dlg_item_help(item->help);
+    }
+    dlg_attrset(win, save);
+}
+
+/*
+ * Allow the user to edit the text of a menu entry.
+ */
+static int
+input_menu_edit(ALL_DATA * data,
+		DIALOG_LISTITEM * items,
+		int choice,
+		char **resultp)
+{
+    chtype save = dlg_get_attrs(data->menu);
+    char *result;
+    int offset = 0;
+    int key = 0, fkey = 0;
+    bool first = TRUE;
+    /* see above */
+    bool is_inputmenu = TRUE;
+    int y = ItemToRow(choice);
+    int code = TRUE;
+    int max_len = dlg_max_input(MAX((int) strlen(items->text) + 1, MAX_LEN));
+
+    result = dlg_malloc(char, (size_t) max_len);
+    assert_ptr(result, "input_menu_edit");
+
+    /* original item is used to initialize the input string. */
+    result[0] = '\0';
+    strcpy(result, items->text);
+
+    print_item(data, data->menu, items, choice, Editing, TRUE);
+
+    /* taken out of inputbox.c - but somewhat modified */
+    for (;;) {
+	if (!first) {
+	    int check = DLG_EXIT_UNKNOWN;
+	    key = dlg_mouse_wgetch(data->menu, &fkey);
+	    if (dlg_result_key(key, fkey, &check)) {
+		if (check == DLG_EXIT_CANCEL) {
+		    code = FALSE;
+		    break;
+		} else {
+		    flash();
+		}
+	    }
+	}
+	if (dlg_edit_string(result, &offset, key, fkey, first)) {
+	    dlg_show_string(data->menu, result, offset, inputbox_attr,
+			    y,
+			    data->item_x + 1,
+			    data->menu_width - data->item_x - 3,
+			    FALSE, first);
+	    first = FALSE;
+	} else if (key == ESC || key == TAB) {
+	    code = FALSE;
+	    break;
+	} else {
+	    break;
+	}
+    }
+    print_item(data, data->menu, items, choice, Selected, TRUE);
+    dlg_attrset(data->menu, save);
+
+    *resultp = result;
+    return code;
+}
+
+static int
+handle_button(int code, DIALOG_LISTITEM * items, int choice)
+{
+    char *help_result;
+
+    switch (code) {
+    case DLG_EXIT_OK:		/* FALLTHRU */
+    case DLG_EXIT_EXTRA:
+	dlg_add_string(items[choice].name);
+	break;
+    case DLG_EXIT_HELP:
+	dlg_add_help_listitem(&code, &help_result, &items[choice]);
+	dlg_add_string(help_result);
+	break;
+    }
+    AddLastKey();
+    return code;
+}
+
+int
+dlg_renamed_menutext(DIALOG_LISTITEM * items, int current, char *newtext)
+{
+    if (dialog_vars.input_result)
+	dialog_vars.input_result[0] = '\0';
+    dlg_add_result("RENAMED ");
+    dlg_add_string(items[current].name);
+    dlg_add_result(" ");
+    dlg_add_string(newtext);
+    AddLastKey();
+    return DLG_EXIT_EXTRA;
+}
+
+int
+dlg_dummy_menutext(DIALOG_LISTITEM * items, int current, char *newtext)
+{
+    (void) items;
+    (void) current;
+    (void) newtext;
+    return DLG_EXIT_ERROR;
+}
+
+static void
+print_menu(ALL_DATA * data, int choice, int scrollamt, int max_choice, bool is_inputmenu)
+{
+    int i;
+
+    for (i = 0; i < max_choice; i++) {
+	print_item(data,
+		   data->menu,
+		   &data->items[i + scrollamt],
+		   i,
+		   (i == choice) ? Selected : Unselected,
+		   is_inputmenu);
+    }
+
+    /* Clean bottom lines */
+    if (is_inputmenu) {
+	int spare_lines, x_count;
+	spare_lines = data->menu_height % INPUT_ROWS;
+	dlg_attrset(data->menu, menubox_attr);
+	for (; spare_lines; spare_lines--) {
+	    wmove(data->menu, data->menu_height - spare_lines, 0);
+	    for (x_count = 0; x_count < data->menu_width;
+		 x_count++) {
+		waddch(data->menu, ' ');
+	    }
+	}
+    }
+
+    (void) wnoutrefresh(data->menu);
+
+    dlg_draw_scrollbar(data->dialog,
+		       scrollamt,
+		       scrollamt,
+		       scrollamt + max_choice,
+		       data->item_no,
+		       data->box_x,
+		       data->box_x + data->menu_width,
+		       data->box_y,
+		       data->box_y + data->menu_height + 1,
+		       menubox_border2_attr,
+		       menubox_border_attr);
+}
+
+static bool
+check_hotkey(DIALOG_LISTITEM * items, int choice)
+{
+    bool result = FALSE;
+
+    if (dlg_match_char(dlg_last_getc(),
+		       (dialog_vars.no_tags
+			? items[choice].text
+			: items[choice].name))) {
+	result = TRUE;
+    }
+    return result;
+}
+
+/*
+ * This is an alternate interface to 'menu' which allows the application
+ * to read the list item states back directly without putting them in the
+ * output buffer.
+ */
+int
+dlg_menu(const char *title,
+	 const char *cprompt,
+	 int height,
+	 int width,
+	 int menu_height,
+	 int item_no,
+	 DIALOG_LISTITEM * items,
+	 int *current_item,
+	 DIALOG_INPUTMENU rename_menutext)
+{
+    /* *INDENT-OFF* */
+    static DLG_KEYS_BINDING binding[] = {
+	HELPKEY_BINDINGS,
+	ENTERKEY_BINDINGS,
+	TOGGLEKEY_BINDINGS,
+	DLG_KEYS_DATA( DLGK_FIELD_NEXT,	KEY_RIGHT ),
+	DLG_KEYS_DATA( DLGK_FIELD_NEXT,	TAB ),
+	DLG_KEYS_DATA( DLGK_FIELD_PREV,	KEY_BTAB ),
+	DLG_KEYS_DATA( DLGK_FIELD_PREV,	KEY_LEFT ),
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,	'+' ),
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,	KEY_DOWN ),
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,  CHR_NEXT ),
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,	'-' ),
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,	KEY_UP ),
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,  CHR_PREVIOUS ),
+	DLG_KEYS_DATA( DLGK_PAGE_FIRST,	KEY_HOME ),
+	DLG_KEYS_DATA( DLGK_PAGE_LAST,	KEY_END ),
+	DLG_KEYS_DATA( DLGK_PAGE_LAST,	KEY_LL ),
+	DLG_KEYS_DATA( DLGK_PAGE_NEXT,	KEY_NPAGE ),
+	DLG_KEYS_DATA( DLGK_PAGE_PREV,	KEY_PPAGE ),
+	END_KEYS_BINDING
+    };
+    static DLG_KEYS_BINDING binding2[] = {
+	INPUTSTR_BINDINGS,
+	HELPKEY_BINDINGS,
+	ENTERKEY_BINDINGS,
+	END_KEYS_BINDING
+    };
+    /* *INDENT-ON* */
+
+#ifdef KEY_RESIZE
+    int old_LINES = LINES;
+    int old_COLS = COLS;
+    int old_height = height;
+    int old_width = width;
+#endif
+    ALL_DATA all;
+    int i, j, x, y, cur_x, cur_y;
+    int fkey;
+    int button = dialog_state.visit_items ? -1 : dlg_default_button();
+    int choice = dlg_default_listitem(items);
+    int result = DLG_EXIT_UNKNOWN;
+    int scrollamt = 0;
+    int max_choice;
+    int use_width, name_width, text_width, list_width;
+    WINDOW *dialog, *menu;
+    char *prompt = 0;
+    const char **buttons = dlg_ok_labels();
+    bool is_inputmenu = ((rename_menutext != 0)
+			 && (rename_menutext != dlg_dummy_menutext));
+
+    DLG_TRACE(("# menubox args:\n"));
+    DLG_TRACE2S("title", title);
+    DLG_TRACE2S("message", cprompt);
+    DLG_TRACE2N("height", height);
+    DLG_TRACE2N("width", width);
+    DLG_TRACE2N("lheight", menu_height);
+    DLG_TRACE2N("llength", item_no);
+    /* FIXME dump the items[][] too */
+    DLG_TRACE2N("rename", rename_menutext != 0);
+
+    dialog_state.plain_buttons = TRUE;
+
+    all.items = items;
+    all.item_no = item_no;
+
+    dlg_does_output();
+
+#ifdef KEY_RESIZE
+  retry:
+#endif
+
+    prompt = dlg_strclone(cprompt);
+    dlg_tab_correct_str(prompt);
+
+    all.menu_height = menu_height;
+    use_width = dlg_calc_list_width(item_no, items) + 10;
+    use_width = MAX(26, use_width);
+    if (all.menu_height == 0) {
+	/* calculate height without items (4) */
+	dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, use_width);
+	dlg_calc_listh(&height, &all.menu_height, item_no);
+    } else {
+	dlg_auto_size(title, prompt,
+		      &height, &width,
+		      MIN_HIGH + all.menu_height, use_width);
+    }
+    dlg_button_layout(buttons, &width);
+    dlg_print_size(height, width);
+    dlg_ctl_size(height, width);
+
+    x = dlg_box_x_ordinate(width);
+    y = dlg_box_y_ordinate(height);
+
+    dialog = dlg_new_window(height, width, y, x);
+    all.dialog = dialog;
+
+    dlg_register_window(dialog, "menubox", binding);
+    dlg_register_buttons(dialog, "menubox", buttons);
+
+    dlg_mouse_setbase(x, y);
+
+    dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+    dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+    dlg_draw_title(dialog, title);
+
+    dlg_attrset(dialog, dialog_attr);
+    dlg_print_autowrap(dialog, prompt, height, width);
+
+    all.menu_width = width - 6;
+    getyx(dialog, cur_y, cur_x);
+    all.box_y = cur_y + 1;
+    all.box_x = (width - all.menu_width) / 2 - 1;
+
+    /*
+     * After displaying the prompt, we know how much space we really have.
+     * Limit the list to avoid overwriting the ok-button.
+     */
+    if (all.menu_height + MIN_HIGH > height - cur_y)
+       all.menu_height = height - MIN_HIGH - cur_y;
+    if (all.menu_height <= 0)
+	all.menu_height = 1;
+
+    /* Find out maximal number of displayable items at once. */
+    max_choice = MIN(all.menu_height,
+		     RowHeight(item_no));
+    if (is_inputmenu)
+	max_choice /= INPUT_ROWS;
+
+    /* create new window for the menu */
+    menu = dlg_sub_window(dialog, all.menu_height, all.menu_width,
+			  y + all.box_y + 1,
+			  x + all.box_x + 1);
+    all.menu = menu;
+
+    dlg_register_window(menu, "menu", binding2);
+    dlg_register_buttons(menu, "menu", buttons);
+
+    /* draw a box around the menu items */
+    dlg_draw_box(dialog,
+		 all.box_y, all.box_x,
+		 all.menu_height + 2, all.menu_width + 2,
+		 menubox_border_attr, menubox_border2_attr);
+
+    name_width = 0;
+    text_width = 0;
+
+    /* Find length of longest item to center menu  *
+     * only if --menu was given, using --inputmenu *
+     * won't be centered.                         */
+    for (i = 0; i < item_no; i++) {
+	name_width = MAX(name_width, dlg_count_columns(items[i].name));
+	text_width = MAX(text_width, dlg_count_columns(items[i].text));
+    }
+
+    /* If the name+text is wider than the list is allowed, then truncate
+     * one or both of them.  If the name is no wider than 30% of the list,
+     * leave it intact.
+     *
+     * FIXME: the gutter width and name/list ratio should be configurable.
+     */
+    use_width = (all.menu_width - GUTTER);
+    if (dialog_vars.no_tags) {
+	list_width = MIN(use_width, text_width);
+    } else if (dialog_vars.no_items) {
+	list_width = MIN(use_width, name_width);
+    } else {
+	if (text_width >= 0
+	    && name_width >= 0
+	    && use_width > 0
+	    && text_width + name_width > use_width) {
+	    int need = (int) (0.30 * use_width);
+	    if (name_width > need) {
+		int want = (int) (use_width
+				  * ((double) name_width)
+				  / (text_width + name_width));
+		name_width = (want > need) ? want : need;
+	    }
+	    text_width = use_width - name_width;
+	}
+	list_width = (text_width + name_width);
+    }
+
+    all.tag_x = (is_inputmenu
+		 ? 0
+		 : (use_width - list_width) / 2);
+    all.item_x = ((dialog_vars.no_tags
+		   ? 0
+		   : (dialog_vars.no_items
+		      ? 0
+		      : (GUTTER + name_width)))
+		  + all.tag_x);
+
+    if (choice - scrollamt >= max_choice) {
+	scrollamt = choice - (max_choice - 1);
+	choice = max_choice - 1;
+    }
+
+    print_menu(&all, choice, scrollamt, max_choice, is_inputmenu);
+
+    /* register the new window, along with its borders */
+    dlg_mouse_mkbigregion(all.box_y + 1, all.box_x,
+			  all.menu_height + 2, all.menu_width + 2,
+			  KEY_MAX, 1, 1, 1 /* by lines */ );
+
+    dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width);
+
+    dlg_trace_win(dialog);
+
+    while (result == DLG_EXIT_UNKNOWN) {
+	int key, found;
+
+	if (button < 0)		/* --visit-items */
+	    wmove(dialog,
+		  all.box_y + ItemToRow(choice) + 1,
+		  all.box_x + all.tag_x + 1);
+
+	key = dlg_mouse_wgetch(dialog, &fkey);
+	if (dlg_result_key(key, fkey, &result)) {
+	    if (!dlg_button_key(result, &button, &key, &fkey))
+		break;
+	}
+
+	found = FALSE;
+	if (fkey) {
+	    /*
+	     * Allow a mouse-click on a box to switch selection to that box.
+	     * Handling a button click is a little more complicated, since we
+	     * push a KEY_ENTER back onto the input stream so we'll put the
+	     * cursor at the right place before handling the "keypress".
+	     */
+	    if (key >= DLGK_MOUSE(KEY_MAX)) {
+		key -= DLGK_MOUSE(KEY_MAX);
+		i = RowToItem(key);
+		if (i < max_choice) {
+		    found = TRUE;
+		} else {
+		    beep();
+		    continue;
+		}
+	    } else if (is_DLGK_MOUSE(key)
+		       && dlg_ok_buttoncode(key - M_EVENT) >= 0) {
+		button = (key - M_EVENT);
+		ungetch('\n');
+		continue;
+	    }
+	} else {
+	    /*
+	     * Check if key pressed matches first character of any item tag in
+	     * list.  If there is more than one match, we will cycle through
+	     * each one as the same key is pressed repeatedly.
+	     */
+	    if (button < 0 || !dialog_state.visit_items) {
+		for (j = scrollamt + choice + 1; j < item_no; j++) {
+		    if (check_hotkey(items, j)) {
+			found = TRUE;
+			i = j - scrollamt;
+			break;
+		    }
+		}
+		if (!found) {
+		    for (j = 0; j <= scrollamt + choice; j++) {
+			if (check_hotkey(items, j)) {
+			    found = TRUE;
+			    i = j - scrollamt;
+			    break;
+			}
+		    }
+		}
+		if (found)
+		    dlg_flush_getc();
+	    } else if ((j = dlg_char_to_button(key, buttons)) >= 0) {
+		button = j;
+		ungetch('\n');
+		continue;
+	    }
+
+	    /*
+	     * A single digit (1-9) positions the selection to that line in the
+	     * current screen.
+	     */
+	    if (!found
+		&& (key <= '9')
+		&& (key > '0')
+		&& (key - '1' < max_choice)) {
+		found = TRUE;
+		i = key - '1';
+	    }
+	}
+
+	if (!found && fkey) {
+	    found = TRUE;
+	    switch (key) {
+	    case DLGK_PAGE_FIRST:
+		i = -scrollamt;
+		break;
+	    case DLGK_PAGE_LAST:
+		i = item_no - 1 - scrollamt;
+		break;
+	    case DLGK_MOUSE(KEY_PPAGE):
+	    case DLGK_PAGE_PREV:
+		if (choice)
+		    i = 0;
+		else if (scrollamt != 0)
+		    i = -MIN(scrollamt, max_choice);
+		else
+		    continue;
+		break;
+	    case DLGK_MOUSE(KEY_NPAGE):
+	    case DLGK_PAGE_NEXT:
+		i = MIN(choice + max_choice, item_no - scrollamt - 1);
+		break;
+	    case DLGK_ITEM_PREV:
+		i = choice - 1;
+		if (choice == 0 && scrollamt == 0)
+		    continue;
+		break;
+	    case DLGK_ITEM_NEXT:
+		i = choice + 1;
+		if (scrollamt + choice >= item_no - 1)
+		    continue;
+		break;
+	    default:
+		found = FALSE;
+		break;
+	    }
+	}
+
+	if (found) {
+	    if (i != choice) {
+		getyx(dialog, cur_y, cur_x);
+		if (i < 0 || i >= max_choice) {
+		    if (i < 0) {
+			scrollamt += i;
+			choice = 0;
+		    } else {
+			choice = max_choice - 1;
+			scrollamt += (i - max_choice + 1);
+		    }
+		    print_menu(&all, choice, scrollamt, max_choice, is_inputmenu);
+		} else {
+		    choice = i;
+		    print_menu(&all, choice, scrollamt, max_choice, is_inputmenu);
+		    (void) wmove(dialog, cur_y, cur_x);
+		    wrefresh(dialog);
+		}
+	    }
+	    continue;		/* wait for another key press */
+	}
+
+	if (fkey) {
+	    switch (key) {
+	    case DLGK_FIELD_PREV:
+		button = dlg_prev_button(buttons, button);
+		dlg_draw_buttons(dialog, height - 2, 0, buttons, button,
+				 FALSE, width);
+		break;
+
+	    case DLGK_FIELD_NEXT:
+		button = dlg_next_button(buttons, button);
+		dlg_draw_buttons(dialog, height - 2, 0, buttons, button,
+				 FALSE, width);
+		break;
+
+	    case DLGK_TOGGLE:
+	    case DLGK_ENTER:
+	    case DLGK_LEAVE:
+		result = ((key == DLGK_LEAVE)
+			  ? dlg_ok_buttoncode(button)
+			  : dlg_enter_buttoncode(button));
+
+		/*
+		 * If dlg_menu() is called from dialog_menu(), we want to
+		 * capture the results into dialog_vars.input_result.
+		 */
+		if (result == DLG_EXIT_ERROR) {
+		    result = DLG_EXIT_UNKNOWN;
+		} else if (is_inputmenu
+			   || rename_menutext == dlg_dummy_menutext) {
+		    result = handle_button(result,
+					   items,
+					   scrollamt + choice);
+		}
+
+		/*
+		 * If we have a rename_menutext function, interpret the Extra
+		 * button as a request to rename the menu's text.  If that
+		 * function doesn't return "Unknown", we will exit from this
+		 * function.  Usually that is done for dialog_menu(), so the
+		 * shell script can use the updated value.  If it does return
+		 * "Unknown", update the list item only.  A direct caller of
+		 * dlg_menu() can free the renamed value - we cannot.
+		 */
+		if (is_inputmenu && result == DLG_EXIT_EXTRA) {
+		    char *tmp;
+
+		    if (input_menu_edit(&all,
+					&items[scrollamt + choice],
+					choice,
+					&tmp)) {
+			result = rename_menutext(items, scrollamt + choice, tmp);
+			if (result == DLG_EXIT_UNKNOWN) {
+			    items[scrollamt + choice].text = tmp;
+			} else {
+			    free(tmp);
+			}
+		    } else {
+			result = DLG_EXIT_UNKNOWN;
+			print_item(&all,
+				   menu,
+				   &items[scrollamt + choice],
+				   choice,
+				   Selected,
+				   is_inputmenu);
+			(void) wnoutrefresh(menu);
+			free(tmp);
+		    }
+
+		    if (result == DLG_EXIT_UNKNOWN) {
+			dlg_draw_buttons(dialog, height - 2, 0,
+					 buttons, button, FALSE, width);
+		    }
+		}
+		break;
+#ifdef KEY_RESIZE
+	    case KEY_RESIZE:
+		dlg_will_resize(dialog);
+		/* reset data */
+		resizeit(height, LINES);
+		resizeit(width, COLS);
+		free(prompt);
+		_dlg_resize_cleanup(dialog);
+		/* repaint */
+		goto retry;
+#endif
+	    default:
+		flash();
+		break;
+	    }
+	}
+    }
+
+    dlg_mouse_free_regions();
+    dlg_unregister_window(menu);
+    dlg_del_window(dialog);
+    free(prompt);
+
+    *current_item = scrollamt + choice;
+
+    DLG_TRACE2N("current", *current_item);
+    return result;
+}
+
+/*
+ * Display a menu for choosing among a number of options
+ */
+int
+dialog_menu(const char *title,
+	    const char *cprompt,
+	    int height,
+	    int width,
+	    int menu_height,
+	    int item_no,
+	    char **items)
+{
+    int result;
+    int choice;
+    int i, j;
+    DIALOG_LISTITEM *listitems;
+
+    listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1);
+    assert_ptr(listitems, "dialog_menu");
+
+    for (i = j = 0; i < item_no; ++i) {
+	listitems[i].name = items[j++];
+	listitems[i].text = (dialog_vars.no_items
+			     ? dlg_strempty()
+			     : items[j++]);
+	listitems[i].help = ((dialog_vars.item_help)
+			     ? items[j++]
+			     : dlg_strempty());
+    }
+    dlg_align_columns(&listitems[0].text, sizeof(DIALOG_LISTITEM), item_no);
+
+    result = dlg_menu(title,
+		      cprompt,
+		      height,
+		      width,
+		      menu_height,
+		      item_no,
+		      listitems,
+		      &choice,
+		      (dialog_vars.input_menu
+		       ? dlg_renamed_menutext
+		       : dlg_dummy_menutext));
+
+    dlg_free_columns(&listitems[0].text, sizeof(DIALOG_LISTITEM), item_no);
+    free(listitems);
+    return result;
+}
Index: a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/treeview.c
===================================================================
--- a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/treeview.c	(nonexistent)
+++ a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/treeview.c	(revision 5)
@@ -0,0 +1,675 @@
+/*
+ *  $Id: treeview.c,v 1.43 2020/11/23 00:38:31 tom Exp $
+ *
+ *  treeview.c -- implements the treeview dialog
+ *
+ *  Copyright 2012-2019,2020	Thomas E. Dickey
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License, version 2.1
+ *  as published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this program; if not, write to
+ *	Free Software Foundation, Inc.
+ *	51 Franklin St., Fifth Floor
+ *	Boston, MA 02110, USA.
+ */
+
+#include <dlg_internals.h>
+#include <dlg_keys.h>
+
+#define INDENT 3
+#define MIN_HIGH  (1 + (5 * MARGIN))
+
+typedef struct {
+    /* the outer-window */
+    WINDOW *dialog;
+    bool is_check;
+    int box_y;
+    int box_x;
+    int check_x;
+    int item_x;
+    int use_height;
+    int use_width;
+    /* the inner-window */
+    WINDOW *list;
+    DIALOG_LISTITEM *items;
+    int item_no;
+    int *depths;
+    const char *states;
+} ALL_DATA;
+
+/*
+ * Print list item.  The 'selected' parameter is true if 'choice' is the
+ * current item.  That one is colored differently from the other items.
+ */
+static void
+print_item(ALL_DATA * data,
+	   DIALOG_LISTITEM * item,
+	   const char *states,
+	   int depths,
+	   int choice,
+	   int selected)
+{
+    WINDOW *win = data->list;
+    chtype save = dlg_get_attrs(win);
+    int i;
+    bool first = TRUE;
+    int climit = (getmaxx(win) - data->check_x + 1);
+    const char *show = (dialog_vars.no_items
+			? item->name
+			: item->text);
+
+    /* Clear 'residue' of last item */
+    dlg_attrset(win, menubox_attr);
+    (void) wmove(win, choice, 0);
+    for (i = 0; i < data->use_width; i++)
+	(void) waddch(win, ' ');
+
+    (void) wmove(win, choice, data->check_x);
+    dlg_attrset(win, selected ? check_selected_attr : check_attr);
+    (void) wprintw(win,
+		   data->is_check ? "[%c]" : "(%c)",
+		   states[item->state]);
+    dlg_attrset(win, menubox_attr);
+
+    dlg_attrset(win, selected ? item_selected_attr : item_attr);
+    for (i = 0; i < depths; ++i) {
+	int j;
+	(void) wmove(win, choice, data->item_x + INDENT * i);
+	(void) waddch(win, ACS_VLINE);
+	for (j = INDENT - 1; j > 0; --j)
+	    (void) waddch(win, ' ');
+    }
+    (void) wmove(win, choice, data->item_x + INDENT * depths);
+
+    dlg_print_listitem(win, show, climit, first, selected);
+
+    if (selected) {
+	dlg_item_help(item->help);
+    }
+    dlg_attrset(win, save);
+}
+
+static void
+print_list(ALL_DATA * data,
+	   int choice,
+	   int scrollamt,
+	   int max_choice)
+{
+    int i;
+    int cur_y, cur_x;
+
+    getyx(data->dialog, cur_y, cur_x);
+
+    for (i = 0; i < max_choice; i++) {
+	print_item(data,
+		   &data->items[scrollamt + i],
+		   data->states,
+		   data->depths[scrollamt + i],
+		   i, i == choice);
+    }
+    (void) wnoutrefresh(data->list);
+
+    dlg_draw_scrollbar(data->dialog,
+		       (long) (scrollamt),
+		       (long) (scrollamt),
+		       (long) (scrollamt + max_choice),
+		       (long) (data->item_no),
+		       data->box_x + data->check_x,
+		       data->box_x + data->use_width,
+		       data->box_y,
+		       data->box_y + data->use_height + 1,
+		       menubox_border2_attr,
+		       menubox_border_attr);
+
+    (void) wmove(data->dialog, cur_y, cur_x);
+}
+
+static bool
+check_hotkey(DIALOG_LISTITEM * items, int choice)
+{
+    bool result = FALSE;
+
+    if (dlg_match_char(dlg_last_getc(),
+		       (dialog_vars.no_tags
+			? items[choice].text
+			: items[choice].name))) {
+	result = TRUE;
+    }
+    return result;
+}
+
+/*
+ * This is an alternate interface to 'treeview' which allows the application
+ * to read the list item states back directly without putting them in the
+ * output buffer.
+ */
+int
+dlg_treeview(const char *title,
+	     const char *cprompt,
+	     int height,
+	     int width,
+	     int list_height,
+	     int item_no,
+	     DIALOG_LISTITEM * items,
+	     const char *states,
+	     int *depths,
+	     int flag,
+	     int *current_item)
+{
+    /* *INDENT-OFF* */
+    static DLG_KEYS_BINDING binding[] = {
+	HELPKEY_BINDINGS,
+	ENTERKEY_BINDINGS,
+	DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ),
+	DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ),
+	DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ),
+	DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ),
+	DLG_KEYS_DATA( DLGK_ITEM_FIRST, KEY_HOME ),
+	DLG_KEYS_DATA( DLGK_ITEM_LAST,	KEY_END ),
+	DLG_KEYS_DATA( DLGK_ITEM_LAST,	KEY_LL ),
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,	'+' ),
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,	KEY_DOWN ),
+	DLG_KEYS_DATA( DLGK_ITEM_NEXT,  CHR_NEXT ),
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,	'-' ),
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,	KEY_UP ),
+	DLG_KEYS_DATA( DLGK_ITEM_PREV,  CHR_PREVIOUS ),
+	DLG_KEYS_DATA( DLGK_PAGE_NEXT,	KEY_NPAGE ),
+	DLG_KEYS_DATA( DLGK_PAGE_NEXT,	DLGK_MOUSE(KEY_NPAGE) ),
+	DLG_KEYS_DATA( DLGK_PAGE_PREV,	KEY_PPAGE ),
+	DLG_KEYS_DATA( DLGK_PAGE_PREV,	DLGK_MOUSE(KEY_PPAGE) ),
+	TOGGLEKEY_BINDINGS,
+	END_KEYS_BINDING
+    };
+    /* *INDENT-ON* */
+
+#ifdef KEY_RESIZE
+    int old_height = height;
+    int old_width = width;
+#endif
+    ALL_DATA all;
+    int i, j, key2, found, x, y, cur_y, box_x, box_y;
+    int key, fkey;
+    int button = dialog_state.visit_items ? -1 : dlg_default_button();
+    int choice = dlg_default_listitem(items);
+    int scrollamt = 0;
+    int max_choice;
+    int use_height;
+    int use_width, name_width, text_width, tree_width;
+    int result = DLG_EXIT_UNKNOWN;
+    int num_states;
+    WINDOW *dialog, *list;
+    char *prompt = dlg_strclone(cprompt);
+    const char **buttons = dlg_ok_labels();
+    const char *widget_name;
+
+    /* we need at least two states */
+    if (states == 0 || strlen(states) < 2)
+	states = " *";
+    num_states = (int) strlen(states);
+
+    dialog_state.plain_buttons = TRUE;
+
+    memset(&all, 0, sizeof(all));
+    all.items = items;
+    all.item_no = item_no;
+    all.states = states;
+    all.depths = depths;
+
+    dlg_does_output();
+    dlg_tab_correct_str(prompt);
+
+    /*
+     * If this is a radiobutton list, ensure that no more than one item is
+     * selected initially.  Allow none to be selected, since some users may
+     * wish to provide this flavor.
+     */
+    if (flag == FLAG_RADIO) {
+	bool first = TRUE;
+
+	for (i = 0; i < item_no; i++) {
+	    if (items[i].state) {
+		if (first) {
+		    first = FALSE;
+		} else {
+		    items[i].state = 0;
+		}
+	    }
+	}
+    } else {
+	all.is_check = TRUE;
+    }
+    widget_name = "treeview";
+#ifdef KEY_RESIZE
+  retry:
+#endif
+
+    use_height = list_height;
+    use_width = dlg_calc_list_width(item_no, items) + 10;
+    use_width = MAX(26, use_width);
+    if (use_height == 0) {
+	/* calculate height without items (4) */
+	dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, use_width);
+	dlg_calc_listh(&height, &use_height, item_no);
+    } else {
+	dlg_auto_size(title, prompt, &height, &width, MIN_HIGH + use_height, use_width);
+    }
+    dlg_button_layout(buttons, &width);
+    dlg_print_size(height, width);
+    dlg_ctl_size(height, width);
+
+    x = dlg_box_x_ordinate(width);
+    y = dlg_box_y_ordinate(height);
+
+    dialog = dlg_new_window(height, width, y, x);
+    dlg_register_window(dialog, widget_name, binding);
+    dlg_register_buttons(dialog, widget_name, buttons);
+
+    dlg_mouse_setbase(x, y);
+
+    dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+    dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+    dlg_draw_title(dialog, title);
+
+    dlg_attrset(dialog, dialog_attr);
+    dlg_print_autowrap(dialog, prompt, height, width);
+
+    all.use_width = width - 4;
+    cur_y = getcury(dialog);
+    box_y = cur_y + 1;
+    box_x = (width - all.use_width) / 2 - 1;
+
+    /*
+     * After displaying the prompt, we know how much space we really have.
+     * Limit the list to avoid overwriting the ok-button.
+     */
+    if (use_height + MIN_HIGH > height - cur_y)
+        use_height = height - MIN_HIGH - cur_y;
+    if (use_height <= 0)
+	use_height = 1;
+
+    max_choice = MIN(use_height, item_no);
+
+    /* create new window for the list */
+    list = dlg_sub_window(dialog, use_height, all.use_width,
+			  y + box_y + 1, x + box_x + 1);
+
+    /* draw a box around the list items */
+    dlg_draw_box(dialog, box_y, box_x,
+		 use_height + 2 * MARGIN,
+		 all.use_width + 2 * MARGIN,
+		 menubox_border_attr, menubox_border2_attr);
+
+    text_width = 0;
+    name_width = 0;
+    tree_width = 0;
+    /* Find length of longest item to center treeview */
+    for (i = 0; i < item_no; i++) {
+	tree_width = MAX(tree_width, INDENT * depths[i]);
+	text_width = MAX(text_width, dlg_count_columns(items[i].text));
+	name_width = MAX(name_width, dlg_count_columns(items[i].name));
+    }
+    if (dialog_vars.no_tags && !dialog_vars.no_items) {
+	tree_width += text_width;
+    } else if (dialog_vars.no_items) {
+	tree_width += name_width;
+    } else {
+	tree_width += (text_width + name_width);
+    }
+
+    use_width = (all.use_width - 4);
+    tree_width = MIN(tree_width, all.use_width);
+
+    all.check_x = (use_width - tree_width) / 2;
+    all.item_x = ((dialog_vars.no_tags
+		   ? 0
+		   : (dialog_vars.no_items
+		      ? 0
+		      : (2 + name_width)))
+		  + all.check_x + 4);
+
+    /* ensure we are scrolled to show the current choice */
+    if (choice >= (max_choice + scrollamt)) {
+	scrollamt = choice - max_choice + 1;
+	choice = max_choice - 1;
+    }
+
+    /* register the new window, along with its borders */
+    dlg_mouse_mkbigregion(box_y + 1, box_x,
+			  use_height, all.use_width + 2,
+			  KEY_MAX, 1, 1, 1 /* by lines */ );
+
+    all.dialog = dialog;
+    all.box_x = box_x;
+    all.box_y = box_y;
+    all.use_height = use_height;
+    all.list = list;
+    print_list(&all, choice, scrollamt, max_choice);
+
+    dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width);
+
+    dlg_trace_win(dialog);
+
+    while (result == DLG_EXIT_UNKNOWN) {
+	int was_mouse;
+
+	if (button < 0)		/* --visit-items */
+	    wmove(dialog, box_y + choice + 1, box_x + all.check_x + 2);
+
+	key = dlg_mouse_wgetch(dialog, &fkey);
+	if (dlg_result_key(key, fkey, &result)) {
+	    if (!dlg_button_key(result, &button, &key, &fkey))
+		break;
+	}
+
+	was_mouse = (fkey && is_DLGK_MOUSE(key));
+	if (was_mouse)
+	    key -= M_EVENT;
+
+	if (was_mouse && (key >= KEY_MAX)) {
+	    i = (key - KEY_MAX);
+	    if (i < max_choice) {
+		choice = (key - KEY_MAX);
+		print_list(&all, choice, scrollamt, max_choice);
+
+		key = DLGK_TOGGLE;	/* force the selected item to toggle */
+	    } else {
+		beep();
+		continue;
+	    }
+	    fkey = FALSE;
+	} else if (was_mouse && key >= KEY_MIN) {
+	    key = dlg_lookup_key(dialog, key, &fkey);
+	}
+
+	/*
+	 * A space toggles the item status.
+	 */
+	if (key == DLGK_TOGGLE) {
+	    int current = scrollamt + choice;
+	    int next = items[current].state + 1;
+
+	    if (next >= num_states)
+		next = 0;
+
+	    if (flag == FLAG_CHECK) {	/* checklist? */
+		items[current].state = next;
+	    } else {
+		for (i = 0; i < item_no; i++) {
+		    if (i != current) {
+			items[i].state = 0;
+		    }
+		}
+		if (items[current].state) {
+		    items[current].state = next ? next : 1;
+		} else {
+		    items[current].state = 1;
+		}
+	    }
+	    print_list(&all, choice, scrollamt, max_choice);
+	    continue;		/* wait for another key press */
+	}
+
+	/*
+	 * Check if key pressed matches first character of any item tag in
+	 * list.  If there is more than one match, we will cycle through
+	 * each one as the same key is pressed repeatedly.
+	 */
+	found = FALSE;
+	if (!fkey) {
+	    if (button < 0 || !dialog_state.visit_items) {
+		for (j = scrollamt + choice + 1; j < item_no; j++) {
+		    if (check_hotkey(items, j)) {
+			found = TRUE;
+			i = j - scrollamt;
+			break;
+		    }
+		}
+		if (!found) {
+		    for (j = 0; j <= scrollamt + choice; j++) {
+			if (check_hotkey(items, j)) {
+			    found = TRUE;
+			    i = j - scrollamt;
+			    break;
+			}
+		    }
+		}
+		if (found)
+		    dlg_flush_getc();
+	    } else if ((j = dlg_char_to_button(key, buttons)) >= 0) {
+		button = j;
+		ungetch('\n');
+		continue;
+	    }
+	}
+
+	/*
+	 * A single digit (1-9) positions the selection to that line in the
+	 * current screen.
+	 */
+	if (!found
+	    && (key <= '9')
+	    && (key > '0')
+	    && (key - '1' < max_choice)) {
+	    found = TRUE;
+	    i = key - '1';
+	}
+
+	if (!found) {
+	    if (fkey) {
+		found = TRUE;
+		switch (key) {
+		case DLGK_ITEM_FIRST:
+		    i = -scrollamt;
+		    break;
+		case DLGK_ITEM_LAST:
+		    i = item_no - 1 - scrollamt;
+		    break;
+		case DLGK_PAGE_PREV:
+		    if (choice)
+			i = 0;
+		    else if (scrollamt != 0)
+			i = -MIN(scrollamt, max_choice);
+		    else
+			continue;
+		    break;
+		case DLGK_PAGE_NEXT:
+		    i = MIN(choice + max_choice, item_no - scrollamt - 1);
+		    break;
+		case DLGK_ITEM_PREV:
+		    i = choice - 1;
+		    if (choice == 0 && scrollamt == 0)
+			continue;
+		    break;
+		case DLGK_ITEM_NEXT:
+		    i = choice + 1;
+		    if (scrollamt + choice >= item_no - 1)
+			continue;
+		    break;
+		default:
+		    found = FALSE;
+		    break;
+		}
+	    }
+	}
+
+	if (found) {
+	    if (i != choice) {
+		if (i < 0 || i >= max_choice) {
+		    if (i < 0) {
+			scrollamt += i;
+			choice = 0;
+		    } else {
+			choice = max_choice - 1;
+			scrollamt += (i - max_choice + 1);
+		    }
+		    print_list(&all, choice, scrollamt, max_choice);
+		} else {
+		    choice = i;
+		    print_list(&all, choice, scrollamt, max_choice);
+		}
+	    }
+	    continue;		/* wait for another key press */
+	}
+
+	if (fkey) {
+	    switch (key) {
+	    case DLGK_ENTER:
+		result = dlg_enter_buttoncode(button);
+		break;
+	    case DLGK_LEAVE:
+		result = dlg_ok_buttoncode(button);
+		break;
+	    case DLGK_FIELD_PREV:
+		button = dlg_prev_button(buttons, button);
+		dlg_draw_buttons(dialog, height - 2, 0, buttons, button,
+				 FALSE, width);
+		break;
+	    case DLGK_FIELD_NEXT:
+		button = dlg_next_button(buttons, button);
+		dlg_draw_buttons(dialog, height - 2, 0, buttons, button,
+				 FALSE, width);
+		break;
+#ifdef KEY_RESIZE
+	    case KEY_RESIZE:
+		dlg_will_resize(dialog);
+		/* reset data */
+		height = old_height;
+		width = old_width;
+		/* repaint */
+		_dlg_resize_cleanup(dialog);
+		goto retry;
+#endif
+	    default:
+		if (was_mouse) {
+		    if ((key2 = dlg_ok_buttoncode(key)) >= 0) {
+			result = key2;
+			break;
+		    }
+		    beep();
+		}
+	    }
+	} else if (key > 0) {
+	    beep();
+	}
+    }
+
+    dlg_del_window(dialog);
+    dlg_mouse_free_regions();
+    free(prompt);
+    *current_item = (scrollamt + choice);
+    return result;
+}
+
+/*
+ * Display a set of items as a tree.
+ */
+int
+dialog_treeview(const char *title,
+		const char *cprompt,
+		int height,
+		int width,
+		int list_height,
+		int item_no,
+		char **items,
+		int flag)
+{
+    int result;
+    int i, j;
+    DIALOG_LISTITEM *listitems;
+    int *depths;
+    bool show_status = FALSE;
+    int current = 0;
+    char *help_result;
+
+    DLG_TRACE(("# treeview args:\n"));
+    DLG_TRACE2S("title", title);
+    DLG_TRACE2S("message", cprompt);
+    DLG_TRACE2N("height", height);
+    DLG_TRACE2N("width", width);
+    DLG_TRACE2N("lheight", list_height);
+    DLG_TRACE2N("llength", item_no);
+    /* FIXME dump the items[][] too */
+    DLG_TRACE2N("flag", flag);
+
+    listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1);
+    assert_ptr(listitems, "dialog_treeview");
+
+    depths = dlg_calloc(int, (size_t) item_no + 1);
+    assert_ptr(depths, "dialog_treeview");
+
+    for (i = j = 0; i < item_no; ++i) {
+	listitems[i].name = items[j++];
+	listitems[i].text = (dialog_vars.no_items
+			     ? dlg_strempty()
+			     : items[j++]);
+	listitems[i].state = !dlg_strcmp(items[j++], "on");
+	depths[i] = atoi(items[j++]);
+	listitems[i].help = ((dialog_vars.item_help)
+			     ? items[j++]
+			     : dlg_strempty());
+    }
+    dlg_align_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no);
+
+    result = dlg_treeview(title,
+			  cprompt,
+			  height,
+			  width,
+			  list_height,
+			  item_no,
+			  listitems,
+			  NULL,
+			  depths,
+			  flag,
+			  &current);
+
+    switch (result) {
+    case DLG_EXIT_OK:		/* FALLTHRU */
+    case DLG_EXIT_EXTRA:
+	show_status = TRUE;
+	break;
+    case DLG_EXIT_HELP:
+	dlg_add_help_listitem(&result, &help_result, &listitems[current]);
+	if ((show_status = dialog_vars.help_status)) {
+	    if (dialog_vars.separate_output) {
+		dlg_add_string(help_result);
+		dlg_add_separator();
+	    } else {
+		dlg_add_quoted(help_result);
+	    }
+	} else {
+	    dlg_add_string(help_result);
+	}
+	break;
+    }
+
+    if (show_status) {
+	for (i = 0; i < item_no; i++) {
+	    if (listitems[i].state) {
+		if (dlg_need_separator())
+		    dlg_add_separator();
+		if (dialog_vars.separate_output) {
+		    dlg_add_string(listitems[i].name);
+		} else {
+		    if (flag == FLAG_CHECK)
+			dlg_add_quoted(listitems[i].name);
+		    else
+			dlg_add_string(listitems[i].name);
+		}
+	    }
+	}
+	AddLastKey();
+    }
+
+    dlg_free_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no);
+    free(depths);
+    free(listitems);
+    return result;
+}
Index: a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/util.c
===================================================================
--- a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/util.c	(nonexistent)
+++ a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new/util.c	(revision 5)
@@ -0,0 +1,3031 @@
+/*
+ *  $Id: util.c,v 1.303 2021/06/15 00:10:11 tom Exp $
+ *
+ *  util.c -- miscellaneous utilities for dialog
+ *
+ *  Copyright 2000-2020,2021	Thomas E. Dickey
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License, version 2.1
+ *  as published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this program; if not, write to
+ *	Free Software Foundation, Inc.
+ *	51 Franklin St., Fifth Floor
+ *	Boston, MA 02110, USA.
+ *
+ *  An earlier version of this program lists as authors
+ *	Savio Lam (lam836@cs.cuhk.hk)
+ */
+
+#include <dialog.h>
+#include <dlg_keys.h>
+#include <dlg_internals.h>
+
+#include <sys/time.h>
+
+#ifdef HAVE_SETLOCALE
+#include <locale.h>
+#endif
+
+#ifdef NEED_WCHAR_H
+#include <wchar.h>
+#endif
+
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
+#if defined(NCURSES_VERSION)
+#define CAN_KEEP_TITE 1
+#elif defined(__NetBSD_Version__) && (__NetBSD_Version__ >= 800000000)
+#define CAN_KEEP_TITE 1
+#else
+#define CAN_KEEP_TITE 0
+#endif
+
+#if CAN_KEEP_TITE
+#if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H)
+#include <ncursesw/term.h>
+#elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H)
+#include <ncurses/term.h>
+#else
+#include <term.h>
+#endif
+#endif
+
+#if defined(HAVE_WCHGAT)
+#  if defined(NCURSES_VERSION_PATCH)
+#    if NCURSES_VERSION_PATCH >= 20060715
+#      define USE_WCHGAT 1
+#    else
+#      define USE_WCHGAT 0
+#    endif
+#  else
+#    define USE_WCHGAT 1
+#  endif
+#else
+#  define USE_WCHGAT 0
+#endif
+
+/* globals */
+DIALOG_STATE dialog_state;
+DIALOG_VARS dialog_vars;
+
+#if !(defined(HAVE_WGETPARENT) && defined(HAVE_WINDOW__PARENT))
+#define NEED_WGETPARENT 1
+#else
+#undef NEED_WGETPARENT
+#endif
+
+#define concat(a,b) a##b
+
+#ifdef HAVE_RC_FILE
+#define RC_DATA(name,comment) , #name "_color", comment " color"
+#else
+#define RC_DATA(name,comment)	/*nothing */
+#endif
+
+#ifdef HAVE_COLOR
+#include <dlg_colors.h>
+#ifdef HAVE_RC_FILE2
+#define COLOR_DATA(upr) , \
+	concat(DLGC_FG_,upr), \
+	concat(DLGC_BG_,upr), \
+	concat(DLGC_HL_,upr), \
+	concat(DLGC_UL_,upr), \
+	concat(DLGC_RV_,upr)
+#else /* HAVE_RC_FILE2 */
+#define COLOR_DATA(upr) , \
+	concat(DLGC_FG_,upr), \
+	concat(DLGC_BG_,upr), \
+	concat(DLGC_HL_,upr)
+#endif /* HAVE_RC_FILE2 */
+#else /* HAVE_COLOR */
+#define COLOR_DATA(upr)		/*nothing */
+#endif /* HAVE_COLOR */
+
+#define UseShadow(dw) ((dw) != 0 && (dw)->normal != 0 && (dw)->shadow != 0)
+
+/*
+ * Table of color and attribute values, default is for mono display.
+ * The order matches the DIALOG_ATR() values.
+ */
+#define DATA(atr,upr,lwr,cmt) { atr COLOR_DATA(upr) RC_DATA(lwr,cmt) }
+/* *INDENT-OFF* */
+DIALOG_COLORS dlg_color_table[] =
+{
+    DATA(A_NORMAL,	SCREEN,			screen, "Screen"),
+    DATA(A_NORMAL,	SHADOW,			shadow, "Shadow"),
+    DATA(A_REVERSE,	DIALOG,			dialog, "Dialog box"),
+    DATA(A_REVERSE,	TITLE,			title, "Dialog box title"),
+    DATA(A_REVERSE,	BORDER,			border, "Dialog box border"),
+    DATA(A_BOLD,	BUTTON_ACTIVE,		button_active, "Active button"),
+    DATA(A_DIM,		BUTTON_INACTIVE,	button_inactive, "Inactive button"),
+    DATA(A_UNDERLINE,	BUTTON_KEY_ACTIVE,	button_key_active, "Active button key"),
+    DATA(A_UNDERLINE,	BUTTON_KEY_INACTIVE,	button_key_inactive, "Inactive button key"),
+    DATA(A_NORMAL,	BUTTON_LABEL_ACTIVE,	button_label_active, "Active button label"),
+    DATA(A_NORMAL,	BUTTON_LABEL_INACTIVE,	button_label_inactive, "Inactive button label"),
+    DATA(A_REVERSE,	INPUTBOX,		inputbox, "Input box"),
+    DATA(A_REVERSE,	INPUTBOX_BORDER,	inputbox_border, "Input box border"),
+    DATA(A_REVERSE,	SEARCHBOX,		searchbox, "Search box"),
+    DATA(A_REVERSE,	SEARCHBOX_TITLE,	searchbox_title, "Search box title"),
+    DATA(A_REVERSE,	SEARCHBOX_BORDER,	searchbox_border, "Search box border"),
+    DATA(A_REVERSE,	POSITION_INDICATOR,	position_indicator, "File position indicator"),
+    DATA(A_REVERSE,	MENUBOX,		menubox, "Menu box"),
+    DATA(A_REVERSE,	MENUBOX_BORDER,		menubox_border, "Menu box border"),
+    DATA(A_REVERSE,	ITEM,			item, "Item"),
+    DATA(A_NORMAL,	ITEM_SELECTED,		item_selected, "Selected item"),
+    DATA(A_REVERSE,	TAG,			tag, "Tag"),
+    DATA(A_REVERSE,	TAG_SELECTED,		tag_selected, "Selected tag"),
+    DATA(A_NORMAL,	TAG_KEY,		tag_key, "Tag key"),
+    DATA(A_BOLD,	TAG_KEY_SELECTED,	tag_key_selected, "Selected tag key"),
+    DATA(A_REVERSE,	CHECK,			check, "Check box"),
+    DATA(A_REVERSE,	CHECK_SELECTED,		check_selected, "Selected check box"),
+    DATA(A_REVERSE,	UARROW,			uarrow, "Up arrow"),
+    DATA(A_REVERSE,	DARROW,			darrow, "Down arrow"),
+    DATA(A_NORMAL,	ITEMHELP,		itemhelp, "Item help-text"),
+    DATA(A_BOLD,	FORM_ACTIVE_TEXT,	form_active_text, "Active form text"),
+    DATA(A_REVERSE,	FORM_TEXT,		form_text, "Form text"),
+    DATA(A_NORMAL,	FORM_ITEM_READONLY,	form_item_readonly, "Readonly form item"),
+    DATA(A_REVERSE,	GAUGE,			gauge, "Dialog box gauge"),
+    DATA(A_REVERSE,	BORDER2,		border2, "Dialog box border2"),
+    DATA(A_REVERSE,	INPUTBOX_BORDER2,	inputbox_border2, "Input box border2"),
+    DATA(A_REVERSE,	SEARCHBOX_BORDER2,	searchbox_border2, "Search box border2"),
+    DATA(A_REVERSE,	MENUBOX_BORDER2,	menubox_border2, "Menu box border2")
+};
+#undef DATA
+/* *INDENT-ON* */
+
+/*
+ * Maintain a list of subwindows so that we can delete them to cleanup.
+ * More important, this provides a fallback when wgetparent() is not available.
+ */
+static void
+add_subwindow(WINDOW *parent, WINDOW *child)
+{
+    DIALOG_WINDOWS *p = dlg_calloc(DIALOG_WINDOWS, 1);
+
+    if (p != 0) {
+	p->normal = parent;
+	p->shadow = child;
+	p->getc_timeout = WTIMEOUT_OFF;
+	p->next = dialog_state.all_subwindows;
+	dialog_state.all_subwindows = p;
+    }
+}
+
+static void
+del_subwindows(WINDOW *parent)
+{
+    DIALOG_WINDOWS *p = dialog_state.all_subwindows;
+    DIALOG_WINDOWS *q = 0;
+    DIALOG_WINDOWS *r;
+
+    while (p != 0) {
+	if (p->normal == parent) {
+	    delwin(p->shadow);
+	    r = p->next;
+	    if (q == 0) {
+		dialog_state.all_subwindows = r;
+	    } else {
+		q->next = r;
+	    }
+	    free(p);
+	    p = r;
+	} else {
+	    q = p;
+	    p = p->next;
+	}
+    }
+}
+
+/*
+ * Display background title if it exists ...
+ */
+void
+dlg_put_backtitle(void)
+{
+
+    if (dialog_vars.backtitle != NULL) {
+	chtype attr = A_NORMAL;
+	int backwidth = dlg_count_columns(dialog_vars.backtitle);
+	int i;
+
+	dlg_attrset(stdscr, screen_attr);
+	(void) wmove(stdscr, 0, 1);
+	dlg_print_text(stdscr, dialog_vars.backtitle, COLS - 2, &attr);
+	for (i = 0; i < COLS - backwidth; i++)
+	    (void) waddch(stdscr, ' ');
+	(void) wmove(stdscr, 1, 1);
+	for (i = 0; i < COLS - 2; i++)
+	    (void) waddch(stdscr, dlg_boxchar(ACS_HLINE));
+    }
+
+    (void) wnoutrefresh(stdscr);
+}
+
+/*
+ * Set window to attribute 'attr'.  There are more efficient ways to do this,
+ * but will not work on older/buggy ncurses versions.
+ */
+void
+dlg_attr_clear(WINDOW *win, int height, int width, chtype attr)
+{
+    int i, j;
+
+    dlg_attrset(win, attr);
+    for (i = 0; i < height; i++) {
+	(void) wmove(win, i, 0);
+	for (j = 0; j < width; j++)
+	    (void) waddch(win, ' ');
+    }
+    (void) touchwin(win);
+}
+
+void
+dlg_clear(void)
+{
+    dlg_attr_clear(stdscr, LINES, COLS, screen_attr);
+}
+
+#ifdef KEY_RESIZE
+void
+_dlg_resize_cleanup(WINDOW *w)
+{
+    dlg_clear();
+    dlg_put_backtitle();
+    dlg_del_window(w);
+    dlg_mouse_free_regions();
+}
+#endif /* KEY_RESIZE */
+
+#define isprivate(s) ((s) != 0 && strstr(s, "\033[?") != 0)
+
+#define TTY_DEVICE "/dev/tty"
+
+/*
+ * If $DIALOG_TTY exists, allow the program to try to open the terminal
+ * directly when stdout is redirected.  By default we require the "--stdout"
+ * option to be given, but some scripts were written making use of the
+ * behavior of dialog which tried opening the terminal anyway. 
+ */
+#define dialog_tty() (dlg_getenv_num("DIALOG_TTY", (int *)0) > 0)
+
+/*
+ * Open the terminal directly.  If one of stdin, stdout or stderr really points
+ * to a tty, use it.  Otherwise give up and open /dev/tty.
+ */
+static int
+open_terminal(char **result, int mode)
+{
+    const char *device = TTY_DEVICE;
+    if (!isatty(fileno(stderr))
+	|| (device = ttyname(fileno(stderr))) == 0) {
+	if (!isatty(fileno(stdout))
+	    || (device = ttyname(fileno(stdout))) == 0) {
+	    if (!isatty(fileno(stdin))
+		|| (device = ttyname(fileno(stdin))) == 0) {
+		device = TTY_DEVICE;
+	    }
+	}
+    }
+    *result = dlg_strclone(device);
+    return open(device, mode);
+}
+
+#if CAN_KEEP_TITE
+static int
+my_putc(int ch)
+{
+    char buffer[2];
+    int fd = fileno(dialog_state.screen_output);
+
+    buffer[0] = (char) ch;
+    return (int) write(fd, buffer, (size_t) 1);
+}
+#endif
+
+/*
+ * Do some initialization for dialog.
+ *
+ * 'input' is the real tty input of dialog.  Usually it is stdin, but if
+ * --input-fd option is used, it may be anything.
+ *
+ * 'output' is where dialog will send its result.  Usually it is stderr, but
+ * if --stdout or --output-fd is used, it may be anything.  We are concerned
+ * mainly with the case where it happens to be the same as stdout.
+ */
+void
+init_dialog(FILE *input, FILE *output)
+{
+    int fd1, fd2;
+    char *device = 0;
+
+    setlocale(LC_ALL, "");
+
+    dialog_state.output = output;
+    if (dialog_state.tab_len == 0)
+	dialog_state.tab_len = TAB_LEN;
+    if (dialog_state.aspect_ratio == 0)
+	dialog_state.aspect_ratio = DEFAULT_ASPECT_RATIO;
+#ifdef HAVE_COLOR
+    dialog_state.use_colors = USE_COLORS;	/* use colors by default? */
+    dialog_state.use_shadow = USE_SHADOW;	/* shadow dialog boxes by default? */
+#endif
+
+#ifdef HAVE_RC_FILE
+    if (dlg_parse_rc() == -1)	/* Read the configuration file */
+	dlg_exiterr("init_dialog: dlg_parse_rc");
+#endif
+
+    /*
+     * Some widgets (such as gauge) may read from the standard input.  Pipes
+     * only connect stdout/stdin, so there is not much choice.  But reading a
+     * pipe would get in the way of curses' normal reading stdin for getch.
+     *
+     * As in the --stdout (see below), reopening the terminal does not always
+     * work properly.  dialog provides a --pipe-fd option for this purpose.  We
+     * test that case first (differing fileno's for input/stdin).  If the
+     * fileno's are equal, but we're not reading from a tty, see if we can open
+     * /dev/tty.
+     */
+    dialog_state.pipe_input = stdin;
+    if (fileno(input) != fileno(stdin)) {
+	if ((fd1 = dup(fileno(input))) >= 0
+	    && (fd2 = dup(fileno(stdin))) >= 0) {
+	    (void) dup2(fileno(input), fileno(stdin));
+	    dialog_state.pipe_input = fdopen(fd2, "r");
+	    if (fileno(stdin) != 0)	/* some functions may read fd #0 */
+		(void) dup2(fileno(stdin), 0);
+	} else {
+	    dlg_exiterr("cannot open tty-input");
+	}
+	close(fd1);
+    } else if (!isatty(fileno(stdin))) {
+	if ((fd1 = open_terminal(&device, O_RDONLY)) >= 0) {
+	    if ((fd2 = dup(fileno(stdin))) >= 0) {
+		dialog_state.pipe_input = fdopen(fd2, "r");
+		if (freopen(device, "r", stdin) == 0)
+		    dlg_exiterr("cannot open tty-input");
+		if (fileno(stdin) != 0)		/* some functions may read fd #0 */
+		    (void) dup2(fileno(stdin), 0);
+	    }
+	    close(fd1);
+	}
+	free(device);
+    }
+
+    /*
+     * If stdout is not a tty and dialog is called with the --stdout option, we
+     * have to provide for a way to write to the screen.
+     *
+     * The curses library normally writes its output to stdout, leaving stderr
+     * free for scripting.  Scripts are simpler when stdout is redirected.  The
+     * newterm function is useful; it allows us to specify where the output
+     * goes.  Reopening the terminal is not portable since several
+     * configurations do not allow this to work properly:
+     *
+     * a) some getty implementations (and possibly broken tty drivers, e.g., on
+     *    HPUX 10 and 11) cause stdin to act as if it is still in cooked mode
+     *    even though results from ioctl's state that it is successfully
+     *    altered to raw mode.  Broken is the proper term.
+     *
+     * b) the user may not have permissions on the device, e.g., if one su's
+     *    from the login user to another non-privileged user.
+     */
+    if (!isatty(fileno(stdout))
+	&& (fileno(stdout) == fileno(output) || dialog_tty())) {
+	if ((fd1 = open_terminal(&device, O_WRONLY)) >= 0
+	    && (dialog_state.screen_output = fdopen(fd1, "w")) != 0) {
+	    if (newterm(NULL, dialog_state.screen_output, stdin) == 0) {
+		dlg_exiterr("cannot initialize curses");
+	    }
+	    free(device);
+	} else {
+	    dlg_exiterr("cannot open tty-output");
+	}
+    } else {
+	dialog_state.screen_output = stdout;
+	(void) initscr();
+    }
+    dlg_keep_tite(dialog_state.screen_output);
+#ifdef HAVE_FLUSHINP
+    (void) flushinp();
+#endif
+    (void) keypad(stdscr, TRUE);
+    (void) cbreak();
+    (void) noecho();
+
+    if (!dialog_state.no_mouse) {
+	mouse_open();
+    }
+
+    dialog_state.screen_initialized = TRUE;
+
+#ifdef HAVE_COLOR
+    if (dialog_state.use_colors || dialog_state.use_shadow)
+	dlg_color_setup();	/* Set up colors */
+#endif
+
+    /* Set screen to screen attribute */
+    dlg_clear();
+}
+
+void
+dlg_keep_tite(FILE *output)
+{
+    if (!dialog_vars.keep_tite) {
+#if CAN_KEEP_TITE
+	/*
+	 * Cancel xterm's alternate-screen mode.
+	 */
+	if ((fileno(output) != fileno(stdout)
+	     || isatty(fileno(output)))
+	    && key_mouse != 0	/* xterm and kindred */
+	    && isprivate(enter_ca_mode)
+	    && isprivate(exit_ca_mode)) {
+	    FILE *save = dialog_state.screen_output;
+
+	    /*
+	     * initscr() or newterm() already wrote enter_ca_mode as a side
+	     * effect of initializing the screen.  It would be nice to not even
+	     * do that, but we do not really have access to the correct copy of
+	     * the terminfo description until those functions have been
+	     * invoked.
+	     */
+	    (void) refresh();
+	    dialog_state.screen_output = output;
+	    (void) tputs(exit_ca_mode, 0, my_putc);
+	    (void) tputs(clear_screen, 0, my_putc);
+	    dialog_state.screen_output = save;
+
+	    /*
+	     * Prevent ncurses from switching "back" to the normal screen when
+	     * exiting from dialog.  That would move the cursor to the original
+	     * location saved in xterm.  Normally curses sets the cursor
+	     * position to the first line after the display, but the alternate
+	     * screen switching is done after that point.
+	     *
+	     * Cancelling the strings altogether also works around the buggy
+	     * implementation of alternate-screen in rxvt, etc., which clear
+	     * more of the display than they should.
+	     */
+	    enter_ca_mode = 0;
+	    exit_ca_mode = 0;
+	}
+#else
+	/*
+	 * For other implementations, there are no useful answers:
+	 * + SVr4 curses "could" support a similar approach, but the clue about
+	 *   xterm is absent from its terminal database.
+	 * + PDCurses does not provide terminfo.
+	 */
+	(void) output;
+#endif
+    }
+}
+
+#ifdef HAVE_COLOR
+static int defined_colors = 1;	/* pair-0 is reserved */
+/*
+ * Setup for color display
+ */
+void
+dlg_color_setup(void)
+{
+    if (has_colors()) {		/* Terminal supports color? */
+	unsigned i;
+
+	(void) start_color();
+
+#if defined(HAVE_USE_DEFAULT_COLORS)
+	use_default_colors();
+#endif
+
+#if defined(__NetBSD__) && defined(_CURSES_)
+#define C_ATTR(x,y) (((x) != 0 ? A_BOLD :  0) | COLOR_PAIR((y)))
+	/* work around bug in NetBSD curses */
+	for (i = 0; i < sizeof(dlg_color_table) /
+	     sizeof(dlg_color_table[0]); i++) {
+
+	    /* Initialize color pairs */
+	    (void) init_pair(i + 1,
+			     dlg_color_table[i].fg,
+			     dlg_color_table[i].bg);
+
+	    /* Setup color attributes */
+	    dlg_color_table[i].atr = C_ATTR(dlg_color_table[i].hilite, i + 1);
+	}
+	defined_colors = i + 1;
+#else
+	for (i = 0; i < sizeof(dlg_color_table) /
+	     sizeof(dlg_color_table[0]); i++) {
+
+	    /* Initialize color pairs */
+	    chtype atr = dlg_color_pair(dlg_color_table[i].fg,
+					dlg_color_table[i].bg);
+
+	    atr |= (dlg_color_table[i].hilite ? A_BOLD : 0);
+#ifdef HAVE_RC_FILE2
+	    atr |= (dlg_color_table[i].ul ? A_UNDERLINE : 0);
+	    atr |= (dlg_color_table[i].rv ? A_REVERSE : 0);
+#endif /* HAVE_RC_FILE2 */
+
+	    dlg_color_table[i].atr = atr;
+	}
+#endif
+    } else {
+	dialog_state.use_colors = FALSE;
+	dialog_state.use_shadow = FALSE;
+    }
+}
+
+int
+dlg_color_count(void)
+{
+    return TableSize(dlg_color_table);
+}
+
+/*
+ * Wrapper for getattrs(), or the more cumbersome X/Open wattr_get().
+ */
+chtype
+dlg_get_attrs(WINDOW *win)
+{
+    chtype result;
+#ifdef HAVE_GETATTRS
+    result = (chtype) getattrs(win);
+#else
+    attr_t my_result;
+    short my_pair;
+    wattr_get(win, &my_result, &my_pair, NULL);
+    result = my_result;
+#endif
+    return result;
+}
+
+/*
+ * Reuse color pairs (they are limited), returning a COLOR_PAIR() value if we
+ * have (or can) define a pair with the given color as foreground on the
+ * window's defined background.
+ */
+chtype
+dlg_color_pair(int foreground, int background)
+{
+    chtype result = 0;
+    int pair;
+    short fg, bg;
+    bool found = FALSE;
+
+    for (pair = 1; pair < defined_colors; ++pair) {
+	if (pair_content((short) pair, &fg, &bg) != ERR
+	    && fg == foreground
+	    && bg == background) {
+	    result = (chtype) COLOR_PAIR(pair);
+	    found = TRUE;
+	    break;
+	}
+    }
+    if (!found && (defined_colors + 1) < COLOR_PAIRS) {
+	pair = defined_colors++;
+	(void) init_pair((short) pair, (short) foreground, (short) background);
+	result = (chtype) COLOR_PAIR(pair);
+    }
+    return result;
+}
+
+/*
+ * Reuse color pairs (they are limited), returning a COLOR_PAIR() value if we
+ * have (or can) define a pair with the given color as foreground on the
+ * window's defined background.
+ */
+static chtype
+define_color(WINDOW *win, int foreground)
+{
+    short fg, bg, background;
+    if (dialog_state.text_only) {
+	background = COLOR_BLACK;
+    } else {
+	chtype attrs = dlg_get_attrs(win);
+	int pair;
+
+	if ((pair = PAIR_NUMBER(attrs)) != 0
+	    && pair_content((short) pair, &fg, &bg) != ERR) {
+	    background = bg;
+	} else {
+	    background = COLOR_BLACK;
+	}
+    }
+    return dlg_color_pair(foreground, background);
+}
+#endif
+
+/*
+ * End using dialog functions.
+ */
+void
+end_dialog(void)
+{
+    if (dialog_state.screen_initialized) {
+	dialog_state.screen_initialized = FALSE;
+	if (dialog_vars.erase_on_exit) {
+	    /*
+	     * Clear the screen to the native background color, and leave the
+	     * terminal cursor at the lower-left corner of the screen.
+	     */
+	    werase(stdscr);
+	    wrefresh(stdscr);
+	}
+	mouse_close();
+	(void) endwin();
+	(void) fflush(stdout);
+    }
+}
+
+#define ESCAPE_LEN 3
+#define isOurEscape(p) (((p)[0] == '\\') && ((p)[1] == 'Z') && ((p)[2] != 0))
+
+int
+dlg_count_real_columns(const char *text)
+{
+    int result = 0;
+    if (*text) {
+	result = dlg_count_columns(text);
+	if (result && dialog_vars.colors) {
+	    int hidden = 0;
+	    while (*text) {
+		if (isOurEscape(text)) {
+		    hidden += ESCAPE_LEN;
+		    text += ESCAPE_LEN;
+		} else {
+		    ++text;
+		}
+	    }
+	    result -= hidden;
+	}
+    }
+    return result;
+}
+
+static int
+centered(int width, const char *string)
+{
+    int need = dlg_count_real_columns(string);
+    int left;
+
+    left = (width - need) / 2 - 1;
+    if (left < 0)
+	left = 0;
+    return left;
+}
+
+#ifdef USE_WIDE_CURSES
+static bool
+is_combining(const char *txt, int *combined)
+{
+    bool result = FALSE;
+
+    if (*combined == 0) {
+	if (UCH(*txt) >= 128) {
+	    wchar_t wch;
+	    mbstate_t state;
+	    size_t given = strlen(txt);
+	    size_t len;
+
+	    memset(&state, 0, sizeof(state));
+	    len = mbrtowc(&wch, txt, given, &state);
+	    if ((int) len > 0 && wcwidth(wch) == 0) {
+		*combined = (int) len - 1;
+		result = TRUE;
+	    }
+	}
+    } else {
+	result = TRUE;
+	*combined -= 1;
+    }
+    return result;
+}
+#endif
+
+/*
+ * Print the name (tag) or text from a DIALOG_LISTITEM, highlighting the
+ * first character if selected.
+ */
+void
+dlg_print_listitem(WINDOW *win,
+		   const char *text,
+		   int climit,
+		   bool first,
+		   int selected)
+{
+    chtype attr = A_NORMAL;
+    int limit;
+    chtype attrs[4];
+
+    if (text == 0)
+	text = "";
+
+    if (first && !dialog_vars.no_hot_list) {
+	const int *indx = dlg_index_wchars(text);
+	attrs[3] = tag_key_selected_attr;
+	attrs[2] = tag_key_attr;
+	attrs[1] = tag_selected_attr;
+	attrs[0] = tag_attr;
+
+	dlg_attrset(win, selected ? attrs[3] : attrs[2]);
+	if (*text != '\0') {
+	    (void) waddnstr(win, text, indx[1]);
+
+	    if ((int) strlen(text) > indx[1]) {
+		limit = dlg_limit_columns(text, climit, 1);
+		if (limit > 1) {
+		    dlg_attrset(win, selected ? attrs[1] : attrs[0]);
+		    (void) waddnstr(win,
+				    text + indx[1],
+				    indx[limit] - indx[1]);
+		}
+	    }
+	}
+    } else {
+	const int *cols;
+
+	attrs[1] = item_selected_attr;
+	attrs[0] = item_attr;
+
+	cols = dlg_index_columns(text);
+	limit = dlg_limit_columns(text, climit, 0);
+
+	if (limit > 0) {
+	    dlg_attrset(win, selected ? attrs[1] : attrs[0]);
+	    dlg_print_text(win, text, cols[limit], &attr);
+	}
+    }
+}
+
+/*
+ * Print up to 'cols' columns from 'text', optionally rendering our escape
+ * sequence for attributes and color.
+ */
+void
+dlg_print_text(WINDOW *win, const char *txt, int cols, chtype *attr)
+{
+    int y_origin, x_origin;
+    int y_before, x_before = 0;
+    int y_after, x_after;
+    int tabbed = 0;
+    bool ended = FALSE;
+#ifdef USE_WIDE_CURSES
+    int combined = 0;
+#endif
+
+    if (dialog_state.text_only) {
+	y_origin = y_after = 0;
+	x_origin = x_after = 0;
+    } else {
+	y_after = 0;
+	x_after = 0;
+	getyx(win, y_origin, x_origin);
+    }
+    while (cols > 0 && (*txt != '\0')) {
+	bool thisTab;
+	chtype useattr;
+
+	if (dialog_vars.colors) {
+	    while (isOurEscape(txt)) {
+		int code;
+
+		txt += 2;
+		switch (code = CharOf(*txt)) {
+#ifdef HAVE_COLOR
+		case '0':
+		case '1':
+		case '2':
+		case '3':
+		case '4':
+		case '5':
+		case '6':
+		case '7':
+		    *attr &= ~A_COLOR;
+		    *attr |= define_color(win, code - '0');
+		    break;
+#endif
+		case 'B':
+		    *attr &= ~A_BOLD;
+		    break;
+		case 'b':
+		    *attr |= A_BOLD;
+		    break;
+		case 'R':
+		    *attr &= ~A_REVERSE;
+		    break;
+		case 'r':
+		    *attr |= A_REVERSE;
+		    break;
+		case 'U':
+		    *attr &= ~A_UNDERLINE;
+		    break;
+		case 'u':
+		    *attr |= A_UNDERLINE;
+		    break;
+		case 'n':
+		    *attr = A_NORMAL;
+		    break;
+		default:
+		    break;
+		}
+		++txt;
+	    }
+	}
+	if (ended || *txt == '\n' || *txt == '\0')
+	    break;
+	useattr = (*attr) & A_ATTRIBUTES;
+#ifdef HAVE_COLOR
+	/*
+	 * Prevent this from making text invisible when the foreground and
+	 * background colors happen to be the same, and there's no bold
+	 * attribute.
+	 */
+	if ((useattr & A_COLOR) != 0 && (useattr & A_BOLD) == 0) {
+	    short pair = (short) PAIR_NUMBER(useattr);
+	    short fg, bg;
+	    if (pair_content(pair, &fg, &bg) != ERR
+		&& fg == bg) {
+		useattr &= ~A_COLOR;
+		useattr |= dlg_color_pair(fg, ((bg == COLOR_BLACK)
+					       ? COLOR_WHITE
+					       : COLOR_BLACK));
+	    }
+	}
+#endif
+	/*
+	 * Write the character, using curses to tell exactly how wide it
+	 * is.  If it is a tab, discount that, since the caller thinks
+	 * tabs are nonprinting, and curses will expand tabs to one or
+	 * more blanks.
+	 */
+	thisTab = (CharOf(*txt) == TAB);
+	if (dialog_state.text_only) {
+	    x_before = x_after;
+	} else {
+	    if (thisTab) {
+		getyx(win, y_before, x_before);
+		(void) y_before;
+	    }
+	}
+	if (dialog_state.text_only) {
+	    int ch = CharOf(*txt++);
+	    if (thisTab) {
+		while ((x_after++) % 8) {
+		    fputc(' ', dialog_state.output);
+		}
+	    } else {
+		fputc(ch, dialog_state.output);
+		x_after++;	/* FIXME: handle meta per locale */
+	    }
+	} else {
+	    (void) waddch(win, CharOf(*txt++) | useattr);
+	    getyx(win, y_after, x_after);
+	}
+	if (thisTab && (y_after == y_origin))
+	    tabbed += (x_after - x_before);
+	if ((y_after != y_origin) ||
+	    (x_after >= (cols + tabbed + x_origin)
+#ifdef USE_WIDE_CURSES
+	     && !is_combining(txt, &combined)
+#endif
+	    )) {
+	    ended = TRUE;
+	}
+    }
+    if (dialog_state.text_only) {
+	fputc('\n', dialog_state.output);
+    }
+}
+
+/*
+ * Print one line of the prompt in the window within the limits of the
+ * specified right margin.  The line will end on a word boundary and a pointer
+ * to the start of the next line is returned, or a NULL pointer if the end of
+ * *prompt is reached.
+ */
+const char *
+dlg_print_line(WINDOW *win,
+	       chtype *attr,
+	       const char *prompt,
+	       int lm, int rm, int *x)
+{
+    const char *wrap_ptr;
+    const char *test_ptr;
+    const char *hide_ptr = 0;
+    const int *cols = dlg_index_columns(prompt);
+    const int *indx = dlg_index_wchars(prompt);
+    int wrap_inx = 0;
+    int test_inx = 0;
+    int cur_x = lm;
+    int hidden = 0;
+    int limit = dlg_count_wchars(prompt);
+    int n;
+    int tabbed = 0;
+
+    *x = 1;
+
+    /*
+     * Set *test_ptr to the end of the line or the right margin (rm), whichever
+     * is less, and set wrap_ptr to the end of the last word in the line.
+     */
+    for (n = 0; n < limit; ++n) {
+	int ch = *(test_ptr = prompt + indx[test_inx]);
+	if (ch == '\n' || ch == '\0' || cur_x >= (rm + hidden))
+	    break;
+	if (ch == TAB && n == 0) {
+	    tabbed = 8;		/* workaround for leading tabs */
+	} else if (isblank(UCH(ch))
+		   && n != 0
+		   && !isblank(UCH(prompt[indx[n - 1]]))) {
+	    wrap_inx = n;
+	    *x = cur_x;
+	} else if (dialog_vars.colors && isOurEscape(test_ptr)) {
+	    hide_ptr = test_ptr;
+	    hidden += ESCAPE_LEN;
+	    n += (ESCAPE_LEN - 1);
+	}
+	cur_x = lm + tabbed + cols[n + 1];
+	if (cur_x > (rm + hidden))
+	    break;
+	test_inx = n + 1;
+    }
+
+    /*
+     * If the line doesn't reach the right margin in the middle of a word, then
+     * we don't have to wrap it at the end of the previous word.
+     */
+    test_ptr = prompt + indx[test_inx];
+    if (*test_ptr == '\n' || isblank(UCH(*test_ptr)) || *test_ptr == '\0') {
+	wrap_inx = test_inx;
+	while (wrap_inx > 0 && isblank(UCH(prompt[indx[wrap_inx - 1]]))) {
+	    wrap_inx--;
+	}
+	*x = lm + indx[wrap_inx];
+    } else if (*x == 1 && cur_x >= rm) {
+	/*
+	 * If the line has no spaces, then wrap it anyway at the right margin
+	 */
+	*x = rm;
+	wrap_inx = test_inx;
+    }
+    wrap_ptr = prompt + indx[wrap_inx];
+#ifdef USE_WIDE_CURSES
+    if (UCH(*wrap_ptr) >= 128) {
+	int combined = 0;
+	while (is_combining(wrap_ptr, &combined)) {
+	    ++wrap_ptr;
+	}
+    }
+#endif
+
+    /*
+     * If we found hidden text past the last point that we will display,
+     * discount that from the displayed length.
+     */
+    if ((hide_ptr != 0) && (hide_ptr >= wrap_ptr)) {
+	hidden -= ESCAPE_LEN;
+	test_ptr = wrap_ptr;
+	while (test_ptr < wrap_ptr) {
+	    if (dialog_vars.colors && isOurEscape(test_ptr)) {
+		hidden -= ESCAPE_LEN;
+		test_ptr += ESCAPE_LEN;
+	    } else {
+		++test_ptr;
+	    }
+	}
+    }
+
+    /*
+     * Print the line if we have a window pointer.  Otherwise this routine
+     * is just being called for sizing the window.
+     */
+    if (dialog_state.text_only || win) {
+	dlg_print_text(win, prompt, (cols[wrap_inx] - hidden), attr);
+    }
+
+    /* *x tells the calling function how long the line was */
+    if (*x == 1) {
+	*x = rm;
+    }
+
+    *x -= hidden;
+
+    /* Find the start of the next line and return a pointer to it */
+    test_ptr = wrap_ptr;
+    while (isblank(UCH(*test_ptr)))
+	test_ptr++;
+    if (*test_ptr == '\n')
+	test_ptr++;
+    dlg_finish_string(prompt);
+    return (test_ptr);
+}
+
+static void
+justify_text(WINDOW *win,
+	     const char *prompt,
+	     int limit_y,
+	     int limit_x,
+	     int *high, int *wide)
+{
+    chtype attr = A_NORMAL;
+    int x;
+    int y = MARGIN;
+    int max_x = 2;
+    int lm = (2 * MARGIN);	/* left margin (box-border plus a space) */
+    int rm = limit_x;		/* right margin */
+    int bm = limit_y;		/* bottom margin */
+    int last_y = 0, last_x = 0;
+
+    dialog_state.text_height = 0;
+    dialog_state.text_width = 0;
+    if (dialog_state.text_only || win) {
+	rm -= (2 * MARGIN);
+	bm -= (2 * MARGIN);
+    }
+    if (prompt == 0)
+	prompt = "";
+
+    if (win != 0)
+	getyx(win, last_y, last_x);
+    while (y <= bm && *prompt) {
+	x = lm;
+
+	if (*prompt == '\n') {
+	    while (*prompt == '\n' && y < bm) {
+		if (*(prompt + 1) != '\0') {
+		    ++y;
+		    if (win != 0)
+			(void) wmove(win, y, lm);
+		}
+		prompt++;
+	    }
+	} else if (win != 0)
+	    (void) wmove(win, y, lm);
+
+	if (*prompt) {
+	    prompt = dlg_print_line(win, &attr, prompt, lm, rm, &x);
+	    if (win != 0)
+		getyx(win, last_y, last_x);
+	}
+	if (*prompt) {
+	    ++y;
+	    if (win != 0)
+		(void) wmove(win, y, lm);
+	}
+	max_x = MAX(max_x, x);
+    }
+    /* Move back to the last position after drawing prompt, for msgbox. */
+    if (win != 0)
+	(void) wmove(win, last_y, last_x);
+
+    /* Set the final height and width for the calling function */
+    if (high != 0)
+	*high = y;
+    if (wide != 0)
+	*wide = max_x;
+}
+
+/*
+ * Print a string of text in a window, automatically wrap around to the next
+ * line if the string is too long to fit on one line.  Note that the string may
+ * contain embedded newlines.
+ */
+void
+dlg_print_autowrap(WINDOW *win, const char *prompt, int height, int width)
+{
+    justify_text(win, prompt,
+		 height,
+		 width,
+		 (int *) 0, (int *) 0);
+}
+
+/*
+ * Display the message in a scrollable window.  Actually the way it works is
+ * that we create a "tall" window of the proper width, let the text wrap within
+ * that, and copy a slice of the result to the dialog.
+ *
+ * It works for ncurses.  Other curses implementations show only blanks (Tru64)
+ * or garbage (NetBSD).
+ */
+int
+dlg_print_scrolled(WINDOW *win,
+		   const char *prompt,
+		   int offset,
+		   int height,
+		   int width,
+		   int pauseopt)
+{
+    int oldy, oldx;
+    int last = 0;
+
+    (void) pauseopt;		/* used only for ncurses */
+
+    getyx(win, oldy, oldx);
+#ifdef NCURSES_VERSION
+    if (pauseopt) {
+	int wide = width - (2 * MARGIN);
+	int high = LINES;
+	int len;
+	WINDOW *dummy;
+
+#if defined(NCURSES_VERSION_PATCH) && NCURSES_VERSION_PATCH >= 20040417
+	/*
+	 * If we're not limited by the screensize, allow text to possibly be
+	 * one character per line.
+	 */
+	if ((len = dlg_count_columns(prompt)) > high)
+	    high = len;
+#endif
+	dummy = newwin(high, width, 0, 0);
+	if (dummy == 0) {
+	    dlg_attrset(win, dialog_attr);
+	    dlg_print_autowrap(win, prompt, height + 1 + (3 * MARGIN), width);
+	    last = 0;
+	} else {
+	    int y, x;
+
+	    wbkgdset(dummy, dialog_attr | ' ');
+	    dlg_attrset(dummy, dialog_attr);
+	    werase(dummy);
+	    dlg_print_autowrap(dummy, prompt, high, width);
+	    getyx(dummy, y, x);
+	    (void) x;
+
+	    copywin(dummy,	/* srcwin */
+		    win,	/* dstwin */
+		    offset + MARGIN,	/* sminrow */
+		    MARGIN,	/* smincol */
+		    MARGIN,	/* dminrow */
+		    MARGIN,	/* dmincol */
+		    height,	/* dmaxrow */
+		    wide,	/* dmaxcol */
+		    FALSE);
+
+	    delwin(dummy);
+
+	    /* if the text is incomplete, or we have scrolled, show the percentage */
+	    if (y > 0 && wide > 4) {
+		int percent = (int) ((height + offset) * 100.0 / y);
+
+		if (percent < 0)
+		    percent = 0;
+		if (percent > 100)
+		    percent = 100;
+
+		if (offset != 0 || percent != 100) {
+		    char buffer[5];
+
+		    dlg_attrset(win, position_indicator_attr);
+		    (void) wmove(win, MARGIN + height, wide - 4);
+		    (void) sprintf(buffer, "%d%%", percent);
+		    (void) waddstr(win, buffer);
+		    if ((len = (int) strlen(buffer)) < 4) {
+			dlg_attrset(win, border_attr);
+			whline(win, dlg_boxchar(ACS_HLINE), 4 - len);
+		    }
+		}
+	    }
+	    last = (y - height);
+	}
+    } else
+#endif
+    {
+	(void) offset;
+	dlg_attrset(win, dialog_attr);
+	dlg_print_autowrap(win, prompt, height + 1 + (3 * MARGIN), width);
+	last = 0;
+    }
+    wmove(win, oldy, oldx);
+    return last;
+}
+
+int
+dlg_check_scrolled(int key, int last, int page, bool * show, int *offset)
+{
+    int code = 0;
+
+    *show = FALSE;
+
+    switch (key) {
+    case DLGK_PAGE_FIRST:
+	if (*offset > 0) {
+	    *offset = 0;
+	    *show = TRUE;
+	}
+	break;
+    case DLGK_PAGE_LAST:
+	if (*offset < last) {
+	    *offset = last;
+	    *show = TRUE;
+	}
+	break;
+    case DLGK_GRID_UP:
+	if (*offset > 0) {
+	    --(*offset);
+	    *show = TRUE;
+	}
+	break;
+    case DLGK_GRID_DOWN:
+	if (*offset < last) {
+	    ++(*offset);
+	    *show = TRUE;
+	}
+	break;
+    case DLGK_PAGE_PREV:
+	if (*offset > 0) {
+	    *offset -= page;
+	    if (*offset < 0)
+		*offset = 0;
+	    *show = TRUE;
+	}
+	break;
+    case DLGK_PAGE_NEXT:
+	if (*offset < last) {
+	    *offset += page;
+	    if (*offset > last)
+		*offset = last;
+	    *show = TRUE;
+	}
+	break;
+    default:
+	code = -1;
+	break;
+    }
+    return code;
+}
+
+/*
+ * Calculate the window size for preformatted text.  This will calculate box
+ * dimensions that are at or close to the specified aspect ratio for the prompt
+ * string with all spaces and newlines preserved and additional newlines added
+ * as necessary.
+ */
+static void
+auto_size_preformatted(const char *prompt, int *height, int *width)
+{
+    int high = 0, wide = 0;
+    float car;			/* Calculated Aspect Ratio */
+    int max_y = SLINES - 1;
+    int max_x = SCOLS - 2;
+    int max_width = max_x;
+    int ar = dialog_state.aspect_ratio;
+
+    /* Get the initial dimensions */
+    justify_text((WINDOW *) 0, prompt, max_y, max_x, &high, &wide);
+    car = (float) (wide / high);
+
+    *height = high;
+    *width = wide;
+}
+
+/*
+ * Find the length of the longest "word" in the given string.  By setting the
+ * widget width at least this long, we can avoid splitting a word on the
+ * margin.
+ */
+static int
+longest_word(const char *string)
+{
+    int result = 0;
+
+    while (*string != '\0') {
+	int length = 0;
+	while (*string != '\0' && !isspace(UCH(*string))) {
+	    length++;
+	    string++;
+	}
+	result = MAX(result, length);
+	if (*string != '\0')
+	    string++;
+    }
+    return result;
+}
+
+/*
+ * if (height or width == -1) Maximize()
+ * if (height or width == 0), justify and return actual limits.
+ */
+static void
+real_auto_size(const char *title,
+	       const char *prompt,
+	       int *height, int *width,
+	       int boxlines, int mincols)
+{
+    int x = (dialog_vars.begin_set ? dialog_vars.begin_x : 2);
+    int y = (dialog_vars.begin_set ? dialog_vars.begin_y : 1);
+    int title_length = title ? dlg_count_columns(title) : 0;
+    int high;
+    int save_high = *height;
+    int save_wide = *width;
+    int max_high;
+    int max_wide;
+
+    if (prompt == 0) {
+	if (*height == 0)
+	    *height = -1;
+	if (*width == 0)
+	    *width = -1;
+    }
+
+    max_high = (*height < 0);
+    max_wide = (*width < 0);
+
+    if (*height > 0) {
+	high = *height;
+    } else {
+	high = SLINES - y;
+    }
+
+    if (*width <= 0) {
+	int wide;
+
+	if (prompt != 0) {
+	    wide = MAX(title_length, mincols);
+	    if (strchr(prompt, '\n') == 0) {
+		double val = (dialog_state.aspect_ratio *
+			      dlg_count_real_columns(prompt));
+		double xxx = sqrt(val);
+		int tmp = (int) xxx;
+		wide = MAX(wide, tmp);
+		wide = MAX(wide, longest_word(prompt));
+		justify_text((WINDOW *) 0, prompt, high, wide, height, width);
+	    } else {
+		auto_size_preformatted(prompt, height, width);
+	    }
+	} else {
+	    wide = SCOLS - x;
+	    justify_text((WINDOW *) 0, prompt, high, wide, height, width);
+	}
+    }
+
+    if (*width < title_length) {
+	justify_text((WINDOW *) 0, prompt, high, title_length, height, width);
+	*width = title_length;
+    }
+
+    dialog_state.text_height = *height;
+    dialog_state.text_width = *width;
+
+    if (*width < mincols && save_wide == 0)
+	*width = mincols;
+    if (prompt != 0) {
+	*width += ((2 * MARGIN) + SHADOW_COLS);
+	*height += boxlines + (2 * MARGIN);
+    }
+
+    if (save_high > 0)
+	*height = save_high;
+    if (save_wide > 0)
+	*width = save_wide;
+
+    if (max_high)
+	*height = SLINES - (dialog_vars.begin_set ? dialog_vars.begin_y : 0);
+    if (max_wide)
+	*width = SCOLS - (dialog_vars.begin_set ? dialog_vars.begin_x : 0);
+}
+
+/* End of real_auto_size() */
+
+void
+dlg_auto_size(const char *title,
+	      const char *prompt,
+	      int *height,
+	      int *width,
+	      int boxlines,
+	      int mincols)
+{
+    DLG_TRACE(("# dlg_auto_size(%d,%d) limits %d,%d\n",
+	       *height, *width,
+	       boxlines, mincols));
+
+    real_auto_size(title, prompt, height, width, boxlines, mincols);
+
+    if (*width > SCOLS) {
+	(*height)++;
+	*width = SCOLS;
+    }
+
+    if (*height > SLINES) {
+	*height = SLINES;
+    }
+    DLG_TRACE(("# ...dlg_auto_size(%d,%d) also %d,%d\n",
+	       *height, *width,
+	       dialog_state.text_height, dialog_state.text_width));
+}
+
+/*
+ * if (height or width == -1) Maximize()
+ * if (height or width == 0)
+ *    height=MIN(SLINES, num.lines in fd+n);
+ *    width=MIN(SCOLS, MAX(longer line+n, mincols));
+ */
+void
+dlg_auto_sizefile(const char *title,
+		  const char *file,
+		  int *height,
+		  int *width,
+		  int boxlines,
+		  int mincols)
+{
+    int count = 0;
+    int len = title ? dlg_count_columns(title) : 0;
+    int nc = 4;
+    int numlines = 2;
+    FILE *fd;
+
+    /* Open input file for reading */
+    if ((fd = fopen(file, "rb")) == NULL)
+	dlg_exiterr("dlg_auto_sizefile: Cannot open input file %s", file);
+
+    if ((*height == -1) || (*width == -1)) {
+	*height = SLINES - (dialog_vars.begin_set ? dialog_vars.begin_y : 0);
+	*width = SCOLS - (dialog_vars.begin_set ? dialog_vars.begin_x : 0);
+    }
+    if ((*height != 0) && (*width != 0)) {
+	(void) fclose(fd);
+	if (*width > SCOLS)
+	    *width = SCOLS;
+	if (*height > SLINES)
+	    *height = SLINES;
+	return;
+    }
+
+    while (!feof(fd)) {
+	int ch;
+	long offset;
+
+	if (ferror(fd))
+	    break;
+
+	offset = 0;
+	while (((ch = getc(fd)) != '\n') && !feof(fd)) {
+	    if ((ch == TAB) && (dialog_vars.tab_correct)) {
+		offset += dialog_state.tab_len - (offset % dialog_state.tab_len);
+	    } else {
+		offset++;
+	    }
+	}
+
+	if (offset > len)
+	    len = (int) offset;
+
+	count++;
+    }
+
+    /* now 'count' has the number of lines of fd and 'len' the max length */
+
+    *height = MIN(SLINES, count + numlines + boxlines);
+    *width = MIN(SCOLS, MAX((len + nc), mincols));
+    /* here width and height can be maximized if > SCOLS|SLINES because
+       textbox-like widgets don't put all <file> on the screen.
+       Msgbox-like widget instead have to put all <text> correctly. */
+
+    (void) fclose(fd);
+}
+
+/*
+ * Draw a rectangular box with line drawing characters.
+ *
+ * borderchar is used to color the upper/left edges.
+ *
+ * boxchar is used to color the right/lower edges.  It also is fill-color used
+ * for the box contents.
+ *
+ * Normally, if you are drawing a scrollable box, use menubox_border_attr for
+ * boxchar, and menubox_attr for borderchar since the scroll-arrows are drawn
+ * with menubox_attr at the top, and menubox_border_attr at the bottom.  That
+ * also (given the default color choices) produces a recessed effect.
+ *
+ * If you want a raised effect (and are not going to use the scroll-arrows),
+ * reverse this choice.
+ */
+void
+dlg_draw_box2(WINDOW *win, int y, int x, int height, int width,
+	      chtype boxchar, chtype borderchar, chtype borderchar2)
+{
+    int i, j;
+    chtype save = dlg_get_attrs(win);
+
+    dlg_attrset(win, 0);
+    for (i = 0; i < height; i++) {
+	(void) wmove(win, y + i, x);
+	for (j = 0; j < width; j++)
+	    if (!i && !j)
+		(void) waddch(win, borderchar | dlg_boxchar(ACS_ULCORNER));
+	    else if (i == height - 1 && !j)
+		(void) waddch(win, borderchar | dlg_boxchar(ACS_LLCORNER));
+	    else if (!i && j == width - 1)
+		(void) waddch(win, borderchar2 | dlg_boxchar(ACS_URCORNER));
+	    else if (i == height - 1 && j == width - 1)
+		(void) waddch(win, borderchar2 | dlg_boxchar(ACS_LRCORNER));
+	    else if (!i)
+		(void) waddch(win, borderchar | dlg_boxchar(ACS_HLINE));
+	    else if (i == height - 1)
+		(void) waddch(win, borderchar2 | dlg_boxchar(ACS_HLINE));
+	    else if (!j)
+		(void) waddch(win, borderchar | dlg_boxchar(ACS_VLINE));
+	    else if (j == width - 1)
+		(void) waddch(win, borderchar2 | dlg_boxchar(ACS_VLINE));
+	    else
+		(void) waddch(win, boxchar | ' ');
+    }
+    dlg_attrset(win, save);
+}
+
+void
+dlg_draw_box(WINDOW *win, int y, int x, int height, int width,
+	     chtype boxchar, chtype borderchar)
+{
+    dlg_draw_box2(win, y, x, height, width, boxchar, borderchar, boxchar);
+}
+
+/*
+ * Search the given 'list' for the given window 'win'.  Typically 'win' is an
+ * input-window, i.e., a window where we might use wgetch.
+ *
+ * The all-windows list has normal- and shadow-windows.  Since we never use the
+ * shadow as an input window, normally we just look for the normal-window.
+ *
+ * However, the all-subwindows list stores parent/child windows rather than
+ * normal/shadow windows.  When searching that list, we look for the child
+ * window (in the .shadow field).
+ */
+static DIALOG_WINDOWS *
+find_window(DIALOG_WINDOWS * list, WINDOW *win, bool normal)
+{
+    DIALOG_WINDOWS *result = 0;
+    DIALOG_WINDOWS *p;
+
+    for (p = list; p != 0; p = p->next) {
+	WINDOW *check = normal ? p->normal : p->shadow;
+	if (check == win) {
+	    result = p;
+	    break;
+	}
+    }
+    return result;
+}
+
+#define SearchTopWindows(win) find_window(dialog_state.all_windows, win, TRUE)
+#define SearchSubWindows(win) find_window(dialog_state.all_subwindows, win, FALSE)
+
+/*
+ * Check for the existence of a window, e.g., when used for input or updating
+ * the display.  This is used in dlg_getc() and related functions, to guard
+ * against an asynchronous window-deletion that might invalidate the input
+ * window used in dlg_getc().
+ */
+DIALOG_WINDOWS *
+_dlg_find_window(WINDOW *win)
+{
+    DIALOG_WINDOWS *result = 0;
+
+    if ((result = SearchTopWindows(win)) == NULL)
+	result = SearchSubWindows(win);
+    return result;
+}
+
+#ifdef HAVE_COLOR
+/*
+ * If we have wchgat(), use that for updating shadow attributes, to work with
+ * wide-character data.
+ */
+
+/*
+ * Check if the given point is "in" the given window.  If so, return the window
+ * pointer, otherwise null.
+ */
+static WINDOW *
+in_window(WINDOW *win, int y, int x)
+{
+    WINDOW *result = 0;
+    int y_base = getbegy(win);
+    int x_base = getbegx(win);
+    int y_last = getmaxy(win) + y_base;
+    int x_last = getmaxx(win) + x_base;
+
+    if (y >= y_base && y <= y_last && x >= x_base && x <= x_last)
+	result = win;
+    return result;
+}
+
+static WINDOW *
+window_at_cell(DIALOG_WINDOWS * dw, int y, int x)
+{
+    WINDOW *result = 0;
+    DIALOG_WINDOWS *p;
+    int y_want = y + getbegy(dw->shadow);
+    int x_want = x + getbegx(dw->shadow);
+
+    for (p = dialog_state.all_windows; p != 0; p = p->next) {
+	if (dw->normal != p->normal
+	    && dw->shadow != p->normal
+	    && (result = in_window(p->normal, y_want, x_want)) != 0) {
+	    break;
+	}
+    }
+    if (result == 0) {
+	result = stdscr;
+    }
+    return result;
+}
+
+static bool
+in_shadow(WINDOW *normal, WINDOW *shadow, int y, int x)
+{
+    bool result = FALSE;
+    int ybase = getbegy(normal);
+    int ylast = getmaxy(normal) + ybase;
+    int xbase = getbegx(normal);
+    int xlast = getmaxx(normal) + xbase;
+
+    y += getbegy(shadow);
+    x += getbegx(shadow);
+
+    if (y >= ybase + SHADOW_ROWS
+	&& y < ylast + SHADOW_ROWS
+	&& x >= xlast
+	&& x < xlast + SHADOW_COLS) {
+	/* in the right-side */
+	result = TRUE;
+    } else if (y >= ylast
+	       && y < ylast + SHADOW_ROWS
+	       && x >= ybase + SHADOW_COLS
+	       && x < ylast + SHADOW_COLS) {
+	/* check the bottom */
+	result = TRUE;
+    }
+
+    return result;
+}
+
+/*
+ * When erasing a shadow, check each cell to make sure that it is not part of
+ * another box's shadow.  This is a little complicated since most shadows are
+ * merged onto stdscr.
+ */
+static bool
+last_shadow(DIALOG_WINDOWS * dw, int y, int x)
+{
+    DIALOG_WINDOWS *p;
+    bool result = TRUE;
+
+    for (p = dialog_state.all_windows; p != 0; p = p->next) {
+	if (p->normal != dw->normal
+	    && in_shadow(p->normal, dw->shadow, y, x)) {
+	    result = FALSE;
+	    break;
+	}
+    }
+    return result;
+}
+
+static void
+repaint_cell(DIALOG_WINDOWS * dw, bool draw, int y, int x)
+{
+    WINDOW *win = dw->shadow;
+    WINDOW *cellwin;
+    int y2, x2;
+
+    if ((cellwin = window_at_cell(dw, y, x)) != 0
+	&& (draw || last_shadow(dw, y, x))
+	&& (y2 = (y + getbegy(win) - getbegy(cellwin))) >= 0
+	&& (x2 = (x + getbegx(win) - getbegx(cellwin))) >= 0
+	&& wmove(cellwin, y2, x2) != ERR) {
+	chtype the_cell = dlg_get_attrs(cellwin);
+	chtype the_attr = (draw ? shadow_attr : the_cell);
+
+	if (winch(cellwin) & A_ALTCHARSET) {
+	    the_attr |= A_ALTCHARSET;
+	}
+#if USE_WCHGAT
+	wchgat(cellwin, 1,
+	       the_attr & (chtype) (~A_COLOR),
+	       (short) PAIR_NUMBER(the_attr),
+	       NULL);
+#else
+	{
+	    chtype the_char = ((winch(cellwin) & A_CHARTEXT) | the_attr);
+	    (void) waddch(cellwin, the_char);
+	}
+#endif
+	wnoutrefresh(cellwin);
+    }
+}
+
+#define RepaintCell(dw, draw, y, x) repaint_cell(dw, draw, y, x)
+
+static void
+repaint_shadow(DIALOG_WINDOWS * dw, bool draw, int y, int x, int height, int width)
+{
+    if (UseShadow(dw)) {
+	int i, j;
+
+#if !USE_WCHGAT
+	chtype save = dlg_get_attrs(dw->shadow);
+	dlg_attrset(dw->shadow, draw ? shadow_attr : screen_attr);
+#endif
+	for (i = 0; i < SHADOW_ROWS; ++i) {
+	    for (j = 0; j < width; ++j) {
+		RepaintCell(dw, draw, i + y + height, j + x + SHADOW_COLS);
+	    }
+	}
+	for (i = 0; i < height; i++) {
+	    for (j = 0; j < SHADOW_COLS; ++j) {
+		RepaintCell(dw, draw, i + y + SHADOW_ROWS, j + x + width);
+	    }
+	}
+	(void) wnoutrefresh(dw->shadow);
+#if !USE_WCHGAT
+	dlg_attrset(dw->shadow, save);
+#endif
+    }
+}
+
+/*
+ * Draw a shadow on the parent window corresponding to the right- and
+ * bottom-edge of the child window, to give a 3-dimensional look.
+ */
+static void
+draw_childs_shadow(DIALOG_WINDOWS * dw)
+{
+    if (UseShadow(dw)) {
+	repaint_shadow(dw,
+		       TRUE,
+		       getbegy(dw->normal) - getbegy(dw->shadow),
+		       getbegx(dw->normal) - getbegx(dw->shadow),
+		       getmaxy(dw->normal),
+		       getmaxx(dw->normal));
+    }
+}
+
+/*
+ * Erase a shadow on the parent window corresponding to the right- and
+ * bottom-edge of the child window.
+ */
+static void
+erase_childs_shadow(DIALOG_WINDOWS * dw)
+{
+    if (UseShadow(dw)) {
+	repaint_shadow(dw,
+		       FALSE,
+		       getbegy(dw->normal) - getbegy(dw->shadow),
+		       getbegx(dw->normal) - getbegx(dw->shadow),
+		       getmaxy(dw->normal),
+		       getmaxx(dw->normal));
+    }
+}
+
+/*
+ * Draw shadows along the right and bottom edge to give a more 3D look
+ * to the boxes.
+ */
+void
+dlg_draw_shadow(WINDOW *win, int y, int x, int height, int width)
+{
+    repaint_shadow(SearchTopWindows(win), TRUE, y, x, height, width);
+}
+#endif /* HAVE_COLOR */
+
+/*
+ * Allow shell scripts to remap the exit codes so they can distinguish ESC
+ * from ERROR.
+ */
+void
+dlg_exit(int code)
+{
+    /* *INDENT-OFF* */
+    static const struct {
+	int code;
+	const char *name;
+    } table[] = {
+	{ DLG_EXIT_CANCEL, 	"DIALOG_CANCEL" },
+	{ DLG_EXIT_ERROR,  	"DIALOG_ERROR" },
+	{ DLG_EXIT_ESC,	   	"DIALOG_ESC" },
+	{ DLG_EXIT_EXTRA,  	"DIALOG_EXTRA" },
+	{ DLG_EXIT_HELP,   	"DIALOG_HELP" },
+	{ DLG_EXIT_OK,	   	"DIALOG_OK" },
+	{ DLG_EXIT_ITEM_HELP,	"DIALOG_ITEM_HELP" },
+	{ DLG_EXIT_TIMEOUT,	"DIALOG_TIMEOUT" },
+    };
+    /* *INDENT-ON* */
+
+    unsigned n;
+    bool overridden = FALSE;
+
+  retry:
+    for (n = 0; n < TableSize(table); n++) {
+	if (table[n].code == code) {
+	    if (dlg_getenv_num(table[n].name, &code)) {
+		overridden = TRUE;
+	    }
+	    break;
+	}
+    }
+
+    /*
+     * Prior to 2004/12/19, a widget using --item-help would exit with "OK"
+     * if the help button were selected.  Now we want to exit with "HELP",
+     * but allow the environment variable to override.
+     */
+    if (code == DLG_EXIT_ITEM_HELP && !overridden) {
+	code = DLG_EXIT_HELP;
+	goto retry;
+    }
+#ifdef HAVE_DLG_TRACE
+    dlg_trace((const char *) 0);	/* close it */
+#endif
+
+#ifdef NO_LEAKS
+    _dlg_inputstr_leaks();
+#if defined(NCURSES_VERSION) && (defined(HAVE_EXIT_CURSES) || defined(HAVE__NC_FREE_AND_EXIT))
+    exit_curses(code);
+#endif
+#endif
+
+    if (dialog_state.input == stdin) {
+	exit(code);
+    } else {
+	/*
+	 * Just in case of using --input-fd option, do not
+	 * call atexit functions of ncurses which may hang.
+	 */
+	if (dialog_state.input) {
+	    fclose(dialog_state.input);
+	    dialog_state.input = 0;
+	}
+	if (dialog_state.pipe_input) {
+	    if (dialog_state.pipe_input != stdin) {
+		fclose(dialog_state.pipe_input);
+		dialog_state.pipe_input = 0;
+	    }
+	}
+	_exit(code);
+    }
+}
+
+#define DATA(name) { DLG_EXIT_ ## name, #name }
+/* *INDENT-OFF* */
+static struct {
+    int code;
+    const char *name;
+} exit_codenames[] = {
+    DATA(ESC),
+    DATA(UNKNOWN),
+    DATA(ERROR),
+    DATA(OK),
+    DATA(CANCEL),
+    DATA(HELP),
+    DATA(EXTRA),
+    DATA(ITEM_HELP),
+};
+#undef DATA
+/* *INDENT-ON* */
+
+const char *
+dlg_exitcode2s(int code)
+{
+    const char *result = "?";
+    size_t n;
+
+    for (n = 0; n < TableSize(exit_codenames); ++n) {
+	if (exit_codenames[n].code == code) {
+	    result = exit_codenames[n].name;
+	    break;
+	}
+    }
+    return result;
+}
+
+int
+dlg_exitname2n(const char *name)
+{
+    int result = DLG_EXIT_UNKNOWN;
+    size_t n;
+
+    for (n = 0; n < TableSize(exit_codenames); ++n) {
+	if (!dlg_strcmp(exit_codenames[n].name, name)) {
+	    result = exit_codenames[n].code;
+	    break;
+	}
+    }
+    return result;
+}
+
+/* quit program killing all tailbg */
+void
+dlg_exiterr(const char *fmt, ...)
+{
+    int retval;
+    va_list ap;
+
+    end_dialog();
+
+    (void) fputc('\n', stderr);
+    va_start(ap, fmt);
+    (void) vfprintf(stderr, fmt, ap);
+    va_end(ap);
+    (void) fputc('\n', stderr);
+
+#ifdef HAVE_DLG_TRACE
+    va_start(ap, fmt);
+    dlg_trace_msg("## Error: ");
+    dlg_trace_va_msg(fmt, ap);
+    va_end(ap);
+#endif
+
+    dlg_killall_bg(&retval);
+
+    (void) fflush(stderr);
+    (void) fflush(stdout);
+    dlg_exit(strcmp(fmt, "timeout") == 0 ? DLG_EXIT_TIMEOUT : DLG_EXIT_ERROR);
+}
+
+/*
+ * Get a string from the environment, rejecting those which are entirely blank.
+ */
+char *
+dlg_getenv_str(const char *name)
+{
+    char *result = getenv(name);
+    if (result != NULL) {
+	while (*result != '\0' && isspace(UCH(*result)))
+	    ++result;
+	if (*result == '\0')
+	    result = NULL;
+    }
+    return result;
+}
+
+/*
+ * Get a number from the environment:
+ * + If the caller provides a pointer in the second parameter, return
+ *   success/failure for the function return, and the actual value via the
+ *   pointer.  Use this for decoding arbitrary numbers, e.g., negative or zero.
+ * + If the caller does not provide a pointer, return the decoded value for
+ *   the function-return.  Use this when only values greater than zero are
+ *   useful.
+ */
+int
+dlg_getenv_num(const char *name, int *value)
+{
+    int result = 0;
+    char *data = getenv(name);
+    if (data != NULL) {
+	char *temp = NULL;
+	long check = strtol(data, &temp, 0);
+	if (temp != 0 && temp != data && *temp == '\0') {
+	    result = (int) check;
+	    if (value != NULL) {
+		*value = result;
+		result = 1;
+	    }
+	}
+    }
+    return result;
+}
+
+void
+dlg_beeping(void)
+{
+    if (dialog_vars.beep_signal) {
+	(void) beep();
+	dialog_vars.beep_signal = 0;
+    }
+}
+
+void
+dlg_print_size(int height, int width)
+{
+    if (dialog_vars.print_siz) {
+	fprintf(dialog_state.output, "Size: %d, %d\n", height, width);
+	DLG_TRACE(("# print size: %dx%d\n", height, width));
+    }
+}
+
+void
+dlg_ctl_size(int height, int width)
+{
+    if (dialog_vars.size_err) {
+	if ((width > COLS) || (height > LINES)) {
+	    dlg_exiterr("Window too big. (height, width) = (%d, %d). Max allowed (%d, %d).",
+			height, width, LINES, COLS);
+	}
+#ifdef HAVE_COLOR
+	else if ((dialog_state.use_shadow)
+		 && ((width > SCOLS || height > SLINES))) {
+	    if ((width <= COLS) && (height <= LINES)) {
+		/* try again, without shadows */
+		dialog_state.use_shadow = 0;
+	    } else {
+		dlg_exiterr("Window+Shadow too big. (height, width) = (%d, %d). Max allowed (%d, %d).",
+			    height, width, SLINES, SCOLS);
+	    }
+	}
+#endif
+    }
+}
+
+/*
+ * If the --tab-correct was not selected, convert tabs to single spaces.
+ */
+void
+dlg_tab_correct_str(char *prompt)
+{
+    char *ptr;
+
+    if (dialog_vars.tab_correct) {
+	while ((ptr = strchr(prompt, TAB)) != NULL) {
+	    *ptr = ' ';
+	    prompt = ptr;
+	}
+    }
+}
+
+void
+dlg_calc_listh(int *height, int *list_height, int item_no)
+{
+    /* calculate new height and list_height */
+    int rows = SLINES - (dialog_vars.begin_set ? dialog_vars.begin_y : 0);
+    if (rows - (*height) > 0) {
+	if (rows - (*height) > item_no)
+	    *list_height = item_no;
+	else
+	    *list_height = rows - (*height);
+    }
+    (*height) += (*list_height);
+}
+
+/* obsolete */
+int
+dlg_calc_listw(int item_no, char **items, int group)
+{
+    int i, len1 = 0, len2 = 0;
+
+    for (i = 0; i < (item_no * group); i += group) {
+	int n;
+
+	if ((n = dlg_count_columns(items[i])) > len1)
+	    len1 = n;
+	if ((n = dlg_count_columns(items[i + 1])) > len2)
+	    len2 = n;
+    }
+    return len1 + len2;
+}
+
+int
+dlg_calc_list_width(int item_no, DIALOG_LISTITEM * items)
+{
+    int n, i, len1 = 0, len2 = 0;
+    int bits = ((dialog_vars.no_tags ? 1 : 0)
+		+ (dialog_vars.no_items ? 2 : 0));
+
+    for (i = 0; i < item_no; ++i) {
+	switch (bits) {
+	case 0:
+	    /* FALLTHRU */
+	case 1:
+	    if ((n = dlg_count_columns(items[i].name)) > len1)
+		len1 = n;
+	    if ((n = dlg_count_columns(items[i].text)) > len2)
+		len2 = n;
+	    break;
+	case 2:
+	    /* FALLTHRU */
+	case 3:
+	    if ((n = dlg_count_columns(items[i].name)) > len1)
+		len1 = n;
+	    break;
+	}
+    }
+    return len1 + len2;
+}
+
+char *
+dlg_strempty(void)
+{
+    static char empty[] = "";
+    return empty;
+}
+
+char *
+dlg_strclone(const char *cprompt)
+{
+    char *prompt = 0;
+    if (cprompt != 0) {
+	prompt = dlg_malloc(char, strlen(cprompt) + 1);
+	assert_ptr(prompt, "dlg_strclone");
+	strcpy(prompt, cprompt);
+    }
+    return prompt;
+}
+
+chtype
+dlg_asciibox(chtype ch)
+{
+    chtype result = 0;
+
+    if (ch == ACS_ULCORNER)
+	result = '+';
+    else if (ch == ACS_LLCORNER)
+	result = '+';
+    else if (ch == ACS_URCORNER)
+	result = '+';
+    else if (ch == ACS_LRCORNER)
+	result = '+';
+    else if (ch == ACS_HLINE)
+	result = '-';
+    else if (ch == ACS_VLINE)
+	result = '|';
+    else if (ch == ACS_LTEE)
+	result = '+';
+    else if (ch == ACS_RTEE)
+	result = '+';
+    else if (ch == ACS_UARROW)
+	result = '^';
+    else if (ch == ACS_DARROW)
+	result = 'v';
+
+    return result;
+}
+
+chtype
+dlg_boxchar(chtype ch)
+{
+    chtype result = dlg_asciibox(ch);
+
+    if (result != 0) {
+	if (dialog_vars.ascii_lines)
+	    ch = result;
+	else if (dialog_vars.no_lines)
+	    ch = ' ';
+    }
+    return ch;
+}
+
+int
+dlg_box_x_ordinate(int width)
+{
+    int x;
+
+    if (dialog_vars.begin_set == 1) {
+	x = dialog_vars.begin_x;
+    } else {
+	/* center dialog box on screen unless --begin-set */
+	x = (SCOLS - width) / 2;
+    }
+    return x;
+}
+
+int
+dlg_box_y_ordinate(int height)
+{
+    int y;
+
+    if (dialog_vars.begin_set == 1) {
+	y = dialog_vars.begin_y;
+    } else {
+	/* center dialog box on screen unless --begin-set */
+	y = (SLINES - height) / 2;
+    }
+    return y;
+}
+
+void
+dlg_draw_title(WINDOW *win, const char *title)
+{
+    if (title != NULL) {
+	chtype attr = A_NORMAL;
+	chtype save = dlg_get_attrs(win);
+	int x = centered(getmaxx(win), title);
+
+	dlg_attrset(win, title_attr);
+	wmove(win, 0, x);
+	dlg_print_text(win, title, getmaxx(win) - x, &attr);
+	dlg_attrset(win, save);
+	dlg_finish_string(title);
+    }
+}
+
+void
+dlg_draw_bottom_box2(WINDOW *win, chtype on_left, chtype on_right, chtype on_inside)
+{
+    int width = getmaxx(win);
+    int height = getmaxy(win);
+    int i;
+
+    dlg_attrset(win, on_left);
+    (void) wmove(win, height - 3, 0);
+    (void) waddch(win, dlg_boxchar(ACS_LTEE));
+    for (i = 0; i < width - 2; i++)
+	(void) waddch(win, dlg_boxchar(ACS_HLINE));
+    dlg_attrset(win, on_right);
+    (void) waddch(win, dlg_boxchar(ACS_RTEE));
+    dlg_attrset(win, on_inside);
+    (void) wmove(win, height - 2, 1);
+    for (i = 0; i < width - 2; i++)
+	(void) waddch(win, ' ');
+}
+
+void
+dlg_draw_bottom_box(WINDOW *win)
+{
+    dlg_draw_bottom_box2(win, border_attr, dialog_attr, dialog_attr);
+}
+
+/*
+ * Remove a window, repainting everything else.  This would be simpler if we
+ * used the panel library, but that is not _always_ available.
+ */
+void
+dlg_del_window(WINDOW *win)
+{
+    DIALOG_WINDOWS *p, *q, *r;
+
+    /*
+     * If --keep-window was set, do not delete/repaint the windows.
+     */
+    if (dialog_vars.keep_window)
+	return;
+
+    /* Leave the main window untouched if there are no background windows.
+     * We do this so the current window will not be cleared on exit, allowing
+     * things like the infobox demo to run without flicker.
+     */
+    if (dialog_state.getc_callbacks != 0) {
+	touchwin(stdscr);
+	wnoutrefresh(stdscr);
+    }
+
+    for (p = dialog_state.all_windows, q = r = 0; p != 0; r = p, p = p->next) {
+	if (p->normal == win) {
+	    q = p;		/* found a match - should be only one */
+	    if (r == 0) {
+		dialog_state.all_windows = p->next;
+	    } else {
+		r->next = p->next;
+	    }
+	} else {
+	    if (p->shadow != 0) {
+		touchwin(p->shadow);
+		wnoutrefresh(p->shadow);
+	    }
+	    touchwin(p->normal);
+	    wnoutrefresh(p->normal);
+	}
+    }
+
+    if (q) {
+	if (dialog_state.all_windows != 0)
+	    erase_childs_shadow(q);
+	del_subwindows(q->normal);
+	dlg_unregister_window(q->normal);
+	delwin(q->normal);
+	free(q);
+    }
+    doupdate();
+}
+
+/*
+ * Create a window, optionally with a shadow.
+ */
+WINDOW *
+dlg_new_window(int height, int width, int y, int x)
+{
+    return dlg_new_modal_window(stdscr, height, width, y, x);
+}
+
+/*
+ * "Modal" windows differ from normal ones by having a shadow in a window
+ * separate from the standard screen.
+ */
+WINDOW *
+dlg_new_modal_window(WINDOW *parent, int height, int width, int y, int x)
+{
+    WINDOW *win;
+    DIALOG_WINDOWS *p = dlg_calloc(DIALOG_WINDOWS, 1);
+
+    (void) parent;
+    if (p == 0
+	|| (win = newwin(height, width, y, x)) == 0) {
+	dlg_exiterr("Can't make new window at (%d,%d), size (%d,%d).\n",
+		    y, x, height, width);
+    }
+    p->next = dialog_state.all_windows;
+    p->normal = win;
+    p->getc_timeout = WTIMEOUT_OFF;
+    dialog_state.all_windows = p;
+#ifdef HAVE_COLOR
+    if (dialog_state.use_shadow) {
+	p->shadow = parent;
+	draw_childs_shadow(p);
+    }
+#endif
+
+    (void) keypad(win, TRUE);
+    return win;
+}
+
+/*
+ * dlg_getc() uses the return-value to determine how to handle an ERR return
+ * from a non-blocking read:
+ * a) if greater than zero, there was an expired timeout (blocking for a short
+ *    time), or
+ * b) if zero, it was a non-blocking read, or
+ * c) if negative, an error occurred on a blocking read.
+ */
+int
+dlg_set_timeout(WINDOW *win, bool will_getc)
+{
+    DIALOG_WINDOWS *p;
+    int result = 0;
+
+    if ((p = SearchTopWindows(win)) != NULL) {
+	int interval = (dialog_vars.timeout_secs * 1000);
+
+	if (will_getc || dialog_vars.pause_secs) {
+	    interval = WTIMEOUT_VAL;
+	} else {
+	    result = interval;
+	    if (interval <= 0) {
+		interval = WTIMEOUT_OFF;
+	    }
+	}
+	wtimeout(win, interval);
+	p->getc_timeout = interval;
+    }
+    return result;
+}
+
+void
+dlg_reset_timeout(WINDOW *win)
+{
+    DIALOG_WINDOWS *p;
+
+    if ((p = SearchTopWindows(win)) != NULL) {
+	wtimeout(win, p->getc_timeout);
+    } else {
+	wtimeout(win, WTIMEOUT_OFF);
+    }
+}
+
+/*
+ * Move/Resize a window, optionally with a shadow.
+ */
+#ifdef KEY_RESIZE
+void
+dlg_move_window(WINDOW *win, int height, int width, int y, int x)
+{
+    if (win != 0) {
+	DIALOG_WINDOWS *p;
+
+	dlg_ctl_size(height, width);
+
+	if ((p = SearchTopWindows(win)) != 0) {
+	    (void) wresize(win, height, width);
+	    (void) mvwin(win, y, x);
+#ifdef HAVE_COLOR
+	    if (p->shadow != 0) {
+		if (dialog_state.use_shadow) {
+		    (void) mvwin(p->shadow, y + SHADOW_ROWS, x + SHADOW_COLS);
+		} else {
+		    p->shadow = 0;
+		}
+	    }
+#endif
+	    (void) refresh();
+
+#ifdef HAVE_COLOR
+	    draw_childs_shadow(p);
+#endif
+	}
+    }
+}
+
+/*
+ * Having just received a KEY_RESIZE, wait a short time to ignore followup
+ * KEY_RESIZE events.
+ */
+void
+dlg_will_resize(WINDOW *win)
+{
+    int n, base;
+    int caught = 0;
+
+    dialog_state.had_resize = TRUE;
+    dlg_trace_win(win);
+    wtimeout(win, WTIMEOUT_VAL * 5);
+
+    for (n = base = 0; n < base + 10; ++n) {
+	int ch;
+
+	if ((ch = wgetch(win)) != ERR) {
+	    if (ch == KEY_RESIZE) {
+		base = n;
+		++caught;
+	    } else if (ch != ERR) {
+		ungetch(ch);
+		break;
+	    }
+	}
+    }
+    dlg_reset_timeout(win);
+    DLG_TRACE(("# caught %d KEY_RESIZE key%s\n",
+	       1 + caught,
+	       caught == 1 ? "" : "s"));
+}
+#endif /* KEY_RESIZE */
+
+WINDOW *
+dlg_der_window(WINDOW *parent, int height, int width, int y, int x)
+{
+    WINDOW *win;
+
+    /* existing uses of derwin are (almost) guaranteed to succeed, and the
+     * caller has to allow for failure.
+     */
+    if ((win = derwin(parent, height, width, y, x)) != 0) {
+	add_subwindow(parent, win);
+	(void) keypad(win, TRUE);
+    }
+    return win;
+}
+
+WINDOW *
+dlg_sub_window(WINDOW *parent, int height, int width, int y, int x)
+{
+    WINDOW *win;
+
+    if ((win = subwin(parent, height, width, y, x)) == 0) {
+	dlg_exiterr("Can't make sub-window at (%d,%d), size (%d,%d).\n",
+		    y, x, height, width);
+    }
+
+    add_subwindow(parent, win);
+    (void) keypad(win, TRUE);
+    return win;
+}
+
+/* obsolete */
+int
+dlg_default_item(char **items, int llen)
+{
+    int result = 0;
+
+    if (dialog_vars.default_item != 0) {
+	int count = 0;
+	while (*items != 0) {
+	    if (!strcmp(dialog_vars.default_item, *items)) {
+		result = count;
+		break;
+	    }
+	    items += llen;
+	    count++;
+	}
+    }
+    return result;
+}
+
+int
+dlg_default_listitem(DIALOG_LISTITEM * items)
+{
+    int result = 0;
+
+    if (dialog_vars.default_item != 0) {
+	int count = 0;
+	while (items->name != 0) {
+	    if (!strcmp(dialog_vars.default_item, items->name)) {
+		result = count;
+		break;
+	    }
+	    ++items;
+	    count++;
+	}
+    }
+    return result;
+}
+
+/*
+ * Draw the string for item_help
+ */
+void
+dlg_item_help(const char *txt)
+{
+    if (USE_ITEM_HELP(txt)) {
+	chtype attr = A_NORMAL;
+
+	dlg_attrset(stdscr, itemhelp_attr);
+	(void) wmove(stdscr, LINES - 1, 0);
+	(void) wclrtoeol(stdscr);
+	(void) addch(' ');
+	dlg_print_text(stdscr, txt, COLS - 1, &attr);
+
+	if (itemhelp_attr & A_COLOR) {
+	    int y, x;
+	    /* fill the remainder of the line with the window's attributes */
+	    getyx(stdscr, y, x);
+	    (void) y;
+	    while (x < COLS) {
+		(void) addch(' ');
+		++x;
+	    }
+	}
+	(void) wnoutrefresh(stdscr);
+    }
+}
+
+#ifndef HAVE_STRCASECMP
+int
+dlg_strcmp(const char *a, const char *b)
+{
+    int ac, bc, cmp;
+
+    for (;;) {
+	ac = UCH(*a++);
+	bc = UCH(*b++);
+	if (isalpha(ac) && islower(ac))
+	    ac = _toupper(ac);
+	if (isalpha(bc) && islower(bc))
+	    bc = _toupper(bc);
+	cmp = ac - bc;
+	if (ac == 0 || bc == 0 || cmp != 0)
+	    break;
+    }
+    return cmp;
+}
+#endif
+
+/*
+ * Returns true if 'dst' points to a blank which follows another blank which
+ * is not a leading blank on a line.
+ */
+static bool
+trim_blank(char *base, char *dst)
+{
+    int count = !!isblank(UCH(*dst));
+
+    while (dst-- != base) {
+	if (*dst == '\n') {
+	    break;
+	} else if (isblank(UCH(*dst))) {
+	    count++;
+	} else {
+	    break;
+	}
+    }
+    return (count > 1);
+}
+
+/*
+ * Change embedded "\n" substrings to '\n' characters and tabs to single
+ * spaces.  If there are no "\n"s, it will strip all extra spaces, for
+ * justification.  If it has "\n"'s, it will preserve extra spaces.  If cr_wrap
+ * is set, it will preserve '\n's.
+ */
+void
+dlg_trim_string(char *s)
+{
+    char *base = s;
+    char *p1;
+    char *p = s;
+    int has_newlines = !dialog_vars.no_nl_expand && (strstr(s, "\\n") != 0);
+
+    while (*p != '\0') {
+	if (*p == TAB && !dialog_vars.nocollapse)
+	    *p = ' ';
+
+	if (has_newlines) {	/* If prompt contains "\n" strings */
+	    if (*p == '\\' && *(p + 1) == 'n') {
+		*s++ = '\n';
+		p += 2;
+		p1 = p;
+		/*
+		 * Handle end of lines intelligently.  If '\n' follows "\n"
+		 * then ignore the '\n'.  This eliminates the need to escape
+		 * the '\n' character (no need to use "\n\").
+		 */
+		while (isblank(UCH(*p1)))
+		    p1++;
+		if (*p1 == '\n')
+		    p = p1 + 1;
+	    } else if (*p == '\n') {
+		if (dialog_vars.cr_wrap)
+		    *s++ = *p++;
+		else {
+		    /* Replace the '\n' with a space if cr_wrap is not set */
+		    if (!trim_blank(base, p))
+			*s++ = ' ';
+		    p++;
+		}
+	    } else		/* If *p != '\n' */
+		*s++ = *p++;
+	} else if (dialog_vars.trim_whitespace) {
+	    if (isblank(UCH(*p))) {
+		if (!isblank(UCH(*(s - 1)))) {
+		    *s++ = ' ';
+		    p++;
+		} else
+		    p++;
+	    } else if (*p == '\n') {
+		if (dialog_vars.cr_wrap)
+		    *s++ = *p++;
+		else if (!isblank(UCH(*(s - 1)))) {
+		    /* Strip '\n's if cr_wrap is not set. */
+		    *s++ = ' ';
+		    p++;
+		} else
+		    p++;
+	    } else
+		*s++ = *p++;
+	} else {		/* If there are no "\n" strings */
+	    if (isblank(UCH(*p)) && !dialog_vars.nocollapse) {
+		if (!trim_blank(base, p))
+		    *s++ = *p;
+		p++;
+	    } else
+		*s++ = *p++;
+	}
+    }
+
+    *s = '\0';
+}
+
+void
+dlg_set_focus(WINDOW *parent, WINDOW *win)
+{
+    if (win != 0) {
+	(void) wmove(parent,
+		     getpary(win) + getcury(win),
+		     getparx(win) + getcurx(win));
+	(void) wnoutrefresh(win);
+	(void) doupdate();
+    }
+}
+
+/*
+ * Returns the nominal maximum buffer size.
+ */
+int
+dlg_max_input(int max_len)
+{
+    if (dialog_vars.max_input != 0 && dialog_vars.max_input < MAX_LEN)
+	max_len = dialog_vars.max_input;
+
+    return max_len;
+}
+
+/*
+ * Free storage used for the result buffer.
+ */
+void
+dlg_clr_result(void)
+{
+    if (dialog_vars.input_length) {
+	dialog_vars.input_length = 0;
+	if (dialog_vars.input_result)
+	    free(dialog_vars.input_result);
+    }
+    dialog_vars.input_result = 0;
+}
+
+/*
+ * Setup a fixed-buffer for the result.
+ */
+char *
+dlg_set_result(const char *string)
+{
+    unsigned need = string ? (unsigned) strlen(string) + 1 : 0;
+
+    /* inputstr.c needs a fixed buffer */
+    if (need < MAX_LEN)
+	need = MAX_LEN;
+
+    /*
+     * If the buffer is not big enough, allocate a new one.
+     */
+    if (dialog_vars.input_length != 0
+	|| dialog_vars.input_result == 0
+	|| need > MAX_LEN) {
+
+	dlg_clr_result();
+
+	dialog_vars.input_length = need;
+	dialog_vars.input_result = dlg_malloc(char, need);
+	assert_ptr(dialog_vars.input_result, "dlg_set_result");
+    }
+
+    strcpy(dialog_vars.input_result, string ? string : "");
+
+    return dialog_vars.input_result;
+}
+
+/*
+ * Accumulate results in dynamically allocated buffer.
+ * If input_length is zero, it is a MAX_LEN buffer belonging to the caller.
+ */
+void
+dlg_add_result(const char *string)
+{
+    unsigned have = (dialog_vars.input_result
+		     ? (unsigned) strlen(dialog_vars.input_result)
+		     : 0);
+    unsigned want = (unsigned) strlen(string) + 1 + have;
+
+    if ((want >= MAX_LEN)
+	|| (dialog_vars.input_length != 0)
+	|| (dialog_vars.input_result == 0)) {
+
+	if (dialog_vars.input_length == 0
+	    || dialog_vars.input_result == 0) {
+
+	    char *save_result = dialog_vars.input_result;
+
+	    dialog_vars.input_length = want * 2;
+	    dialog_vars.input_result = dlg_malloc(char, dialog_vars.input_length);
+	    assert_ptr(dialog_vars.input_result, "dlg_add_result malloc");
+	    dialog_vars.input_result[0] = '\0';
+	    if (save_result != 0)
+		strcpy(dialog_vars.input_result, save_result);
+	} else if (want >= dialog_vars.input_length) {
+	    dialog_vars.input_length = want * 2;
+	    dialog_vars.input_result = dlg_realloc(char,
+						   dialog_vars.input_length,
+						   dialog_vars.input_result);
+	    assert_ptr(dialog_vars.input_result, "dlg_add_result realloc");
+	}
+    }
+    strcat(dialog_vars.input_result, string);
+}
+
+/*
+ * These are characters that (aside from the quote-delimiter) will have to
+ * be escaped in a single- or double-quoted string.
+ */
+#define FIX_SINGLE "\n\\"
+#define FIX_DOUBLE FIX_SINGLE "[]{}?*;`~#$^&()|<>"
+
+/*
+ * Returns the quote-delimiter.
+ */
+static const char *
+quote_delimiter(void)
+{
+    return dialog_vars.single_quoted ? "'" : "\"";
+}
+
+/*
+ * Returns true if we should quote the given string.
+ */
+static bool
+must_quote(char *string)
+{
+    bool code = FALSE;
+
+    if (*string != '\0') {
+	size_t len = strlen(string);
+	if (strcspn(string, quote_delimiter()) != len)
+	    code = TRUE;
+	else if (strcspn(string, "\n\t ") != len)
+	    code = TRUE;
+	else
+	    code = (strcspn(string, FIX_DOUBLE) != len);
+    } else {
+	code = TRUE;
+    }
+
+    return code;
+}
+
+/*
+ * Add a quoted string to the result buffer.
+ */
+void
+dlg_add_quoted(char *string)
+{
+    char temp[2];
+    const char *my_quote = quote_delimiter();
+    const char *must_fix = (dialog_vars.single_quoted
+			    ? FIX_SINGLE
+			    : FIX_DOUBLE);
+
+    if (must_quote(string)) {
+	temp[1] = '\0';
+	dlg_add_result(my_quote);
+	while (*string != '\0') {
+	    temp[0] = *string++;
+	    if ((strchr) (my_quote, *temp) || (strchr) (must_fix, *temp))
+		dlg_add_result("\\");
+	    dlg_add_result(temp);
+	}
+	dlg_add_result(my_quote);
+    } else {
+	dlg_add_result(string);
+    }
+}
+
+/*
+ * When adding a result, make that depend on whether "--quoted" is used.
+ */
+void
+dlg_add_string(char *string)
+{
+    if (dialog_vars.quoted) {
+	dlg_add_quoted(string);
+    } else {
+	dlg_add_result(string);
+    }
+}
+
+bool
+dlg_need_separator(void)
+{
+    bool result = FALSE;
+
+    if (dialog_vars.output_separator) {
+	result = TRUE;
+    } else if (dialog_vars.input_result && *(dialog_vars.input_result)) {
+	result = TRUE;
+    }
+    return result;
+}
+
+void
+dlg_add_separator(void)
+{
+    const char *separator = (dialog_vars.separate_output) ? "\n" : " ";
+
+    if (dialog_vars.output_separator)
+	separator = dialog_vars.output_separator;
+
+    dlg_add_result(separator);
+}
+
+#define HELP_PREFIX		"HELP "
+
+void
+dlg_add_help_listitem(int *result, char **tag, DIALOG_LISTITEM * item)
+{
+    dlg_add_result(HELP_PREFIX);
+    if (USE_ITEM_HELP(item->help)) {
+	*tag = dialog_vars.help_tags ? item->name : item->help;
+	*result = DLG_EXIT_ITEM_HELP;
+    } else {
+	*tag = item->name;
+    }
+}
+
+void
+dlg_add_help_formitem(int *result, char **tag, DIALOG_FORMITEM * item)
+{
+    dlg_add_result(HELP_PREFIX);
+    if (USE_ITEM_HELP(item->help)) {
+	*tag = dialog_vars.help_tags ? item->name : item->help;
+	*result = DLG_EXIT_ITEM_HELP;
+    } else {
+	*tag = item->name;
+    }
+}
+
+/*
+ * Some widgets support only one value of a given variable - save/restore the
+ * global dialog_vars so we can override it consistently.
+ */
+void
+dlg_save_vars(DIALOG_VARS * vars)
+{
+    *vars = dialog_vars;
+}
+
+/*
+ * Most of the data in DIALOG_VARS is normally set by command-line options.
+ * The input_result member is an exception; it is normally set by the dialog
+ * library to return result values.
+ */
+void
+dlg_restore_vars(DIALOG_VARS * vars)
+{
+    char *save_result = dialog_vars.input_result;
+    unsigned save_length = dialog_vars.input_length;
+
+    dialog_vars = *vars;
+    dialog_vars.input_result = save_result;
+    dialog_vars.input_length = save_length;
+}
+
+/*
+ * Called each time a widget is invoked which may do output, increment a count.
+ */
+void
+dlg_does_output(void)
+{
+    dialog_state.output_count += 1;
+}
+
+/*
+ * Compatibility for different versions of curses.
+ */
+#if !(defined(HAVE_GETBEGX) && defined(HAVE_GETBEGY))
+int
+dlg_getbegx(WINDOW *win)
+{
+    int y, x;
+    getbegyx(win, y, x);
+    (void) y;
+    return x;
+}
+int
+dlg_getbegy(WINDOW *win)
+{
+    int y, x;
+    getbegyx(win, y, x);
+    (void) x;
+    return y;
+}
+#endif
+
+#if !(defined(HAVE_GETCURX) && defined(HAVE_GETCURY))
+int
+dlg_getcurx(WINDOW *win)
+{
+    int y, x;
+    getyx(win, y, x);
+    (void) y;
+    return x;
+}
+int
+dlg_getcury(WINDOW *win)
+{
+    int y, x;
+    getyx(win, y, x);
+    (void) x;
+    return y;
+}
+#endif
+
+#if !(defined(HAVE_GETMAXX) && defined(HAVE_GETMAXY))
+int
+dlg_getmaxx(WINDOW *win)
+{
+    int y, x;
+    getmaxyx(win, y, x);
+    (void) y;
+    return x;
+}
+int
+dlg_getmaxy(WINDOW *win)
+{
+    int y, x;
+    getmaxyx(win, y, x);
+    (void) x;
+    return y;
+}
+#endif
+
+#if !(defined(HAVE_GETPARX) && defined(HAVE_GETPARY))
+int
+dlg_getparx(WINDOW *win)
+{
+    int y, x;
+    getparyx(win, y, x);
+    (void) y;
+    return x;
+}
+int
+dlg_getpary(WINDOW *win)
+{
+    int y, x;
+    getparyx(win, y, x);
+    (void) x;
+    return y;
+}
+#endif
+
+#ifdef NEED_WGETPARENT
+WINDOW *
+dlg_wgetparent(WINDOW *win)
+{
+#undef wgetparent
+    WINDOW *result = 0;
+    DIALOG_WINDOWS *p;
+
+    for (p = dialog_state.all_subwindows; p != 0; p = p->next) {
+	if (p->shadow == win) {
+	    result = p->normal;
+	    break;
+	}
+    }
+    return result;
+}
+#endif
Index: a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new
===================================================================
--- a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new	(nonexistent)
+++ a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new	(revision 5)

Property changes on: a/dialog/create-1.3-20210621-patch/dialog-1.3-20210621-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dialog/create-1.3-20210621-patch/file.list
===================================================================
--- a/dialog/create-1.3-20210621-patch/file.list	(nonexistent)
+++ a/dialog/create-1.3-20210621-patch/file.list	(revision 5)
@@ -0,0 +1,7 @@
+dialog-1.3-20210621/buildlist.c
+dialog-1.3-20210621/checklist.c
+dialog-1.3-20210621/dialog-config.in
+dialog-1.3-20210621/fselect.c
+dialog-1.3-20210621/menubox.c
+dialog-1.3-20210621/treeview.c
+dialog-1.3-20210621/util.c
Index: a/dialog/create-1.3-20210621-patch
===================================================================
--- a/dialog/create-1.3-20210621-patch	(nonexistent)
+++ a/dialog/create-1.3-20210621-patch	(revision 5)

Property changes on: a/dialog/create-1.3-20210621-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dialog/patches/README
===================================================================
--- a/dialog/patches/README	(nonexistent)
+++ a/dialog/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   dialog-1.3-20190808.patch   - Some enhance the appearance of dialogs.
+
+ * end */
Index: a/dialog/patches
===================================================================
--- a/dialog/patches	(nonexistent)
+++ a/dialog/patches	(revision 5)

Property changes on: a/dialog/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dialog
===================================================================
--- a/dialog	(nonexistent)
+++ a/dialog	(revision 5)

Property changes on: a/dialog
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/dosfstools/Makefile
===================================================================
--- a/dosfstools/Makefile	(nonexistent)
+++ a/dosfstools/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/dosfstools
+
+versions    = 4.2
+pkgname     = dosfstools
+suffix      = tar.xz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: a/dosfstools
===================================================================
--- a/dosfstools	(nonexistent)
+++ a/dosfstools	(revision 5)

Property changes on: a/dosfstools
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/e2fsprogs/Makefile
===================================================================
--- a/e2fsprogs/Makefile	(nonexistent)
+++ a/e2fsprogs/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/e2fsprogs
+
+versions    = 1.46.2
+pkgname     = e2fsprogs
+suffix      = tar.xz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches      = $(CURDIR)/patches/e2fsprogs-1.46.2-no-64bit-by-default.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-1.46.2-no-64bit-by-default-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/create.patch.sh
===================================================================
--- a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/create.patch.sh	(nonexistent)
+++ a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=1.46.2
+
+tar --files-from=file.list -xJvf ../e2fsprogs-$VERSION.tar.xz
+mv e2fsprogs-$VERSION e2fsprogs-$VERSION-orig
+
+cp -rf ./e2fsprogs-$VERSION-new ./e2fsprogs-$VERSION
+
+diff --unified -Nr  e2fsprogs-$VERSION-orig  e2fsprogs-$VERSION > e2fsprogs-$VERSION-no-64bit-by-default.patch
+
+mv e2fsprogs-$VERSION-no-64bit-by-default.patch ../patches
+
+rm -rf ./e2fsprogs-$VERSION
+rm -rf ./e2fsprogs-$VERSION-orig

Property changes on: a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/e2fsprogs-1.46.2-new/misc/mke2fs.conf.in
===================================================================
--- a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/e2fsprogs-1.46.2-new/misc/mke2fs.conf.in	(nonexistent)
+++ a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/e2fsprogs-1.46.2-new/misc/mke2fs.conf.in	(revision 5)
@@ -0,0 +1,48 @@
+[defaults]
+	base_features = sparse_super,large_file,filetype,resize_inode,dir_index,ext_attr
+	default_mntopts = acl,user_xattr
+	enable_periodic_fsck = 0
+	blocksize = 4096
+	inode_size = 256
+	inode_ratio = 16384
+
+[fs_types]
+	ext3 = {
+		features = has_journal
+	}
+	ext4 = {
+		features = has_journal,extent,huge_file,flex_bg,metadata_csum,dir_nlink,extra_isize
+		inode_size = 256
+		auto_64-bit_support = 1
+	}
+	small = {
+		blocksize = 1024
+		inode_size = 128
+		inode_ratio = 4096
+	}
+	floppy = {
+		blocksize = 1024
+		inode_size = 128
+		inode_ratio = 8192
+	}
+	big = {
+		inode_ratio = 32768
+	}
+	huge = {
+		inode_ratio = 65536
+	}
+	news = {
+		inode_ratio = 4096
+	}
+	largefile = {
+		inode_ratio = 1048576
+		blocksize = -1
+	}
+	largefile4 = {
+		inode_ratio = 4194304
+		blocksize = -1
+	}
+	hurd = {
+	     blocksize = 4096
+	     inode_size = 128
+	}
Index: a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/e2fsprogs-1.46.2-new/misc
===================================================================
--- a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/e2fsprogs-1.46.2-new/misc	(nonexistent)
+++ a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/e2fsprogs-1.46.2-new/misc	(revision 5)

Property changes on: a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/e2fsprogs-1.46.2-new/misc
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/e2fsprogs-1.46.2-new
===================================================================
--- a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/e2fsprogs-1.46.2-new	(nonexistent)
+++ a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/e2fsprogs-1.46.2-new	(revision 5)

Property changes on: a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/e2fsprogs-1.46.2-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/file.list
===================================================================
--- a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/file.list	(nonexistent)
+++ a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+e2fsprogs-1.46.2/misc/mke2fs.conf.in
Index: a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch
===================================================================
--- a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch	(nonexistent)
+++ a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch	(revision 5)

Property changes on: a/e2fsprogs/create-1.46.2-no-64bit-by-default-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/e2fsprogs/patches/README
===================================================================
--- a/e2fsprogs/patches/README	(nonexistent)
+++ a/e2fsprogs/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/e2fsprogs/patches
===================================================================
--- a/e2fsprogs/patches	(nonexistent)
+++ a/e2fsprogs/patches	(revision 5)

Property changes on: a/e2fsprogs/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/e2fsprogs
===================================================================
--- a/e2fsprogs	(nonexistent)
+++ a/e2fsprogs	(revision 5)

Property changes on: a/e2fsprogs
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/elogind/Makefile
===================================================================
--- a/elogind/Makefile	(nonexistent)
+++ a/elogind/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/elogind
+
+versions    = 246.10
+pkgname     = elogind
+suffix      = tar.xz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: a/elogind
===================================================================
--- a/elogind	(nonexistent)
+++ a/elogind	(revision 5)

Property changes on: a/elogind
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/Makefile
===================================================================
--- a/eudev/Makefile	(nonexistent)
+++ a/eudev/Makefile	(revision 5)
@@ -0,0 +1,62 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/eudev
+
+versions    = 3.2.10
+pkgname     = eudev
+suffix      = tar.xz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/eudev-3.2.10-bind-events.patch
+patches    += $(CURDIR)/patches/eudev-3.2.10-cdrom-id.patch
+patches    += $(CURDIR)/patches/eudev-3.2.10-ids-pl.patch
+patches    += $(CURDIR)/patches/eudev-3.2.10-udev-default.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-3.2.10-bind-events-patch  ; ./create.patch.sh ) ; \
+	 ( cd create-3.2.10-cdrom-id-patch     ; ./create.patch.sh ) ; \
+	 ( cd create-3.2.10-ids-pl-patch       ; ./create.patch.sh ) ; \
+	 ( cd create-3.2.10-udev-default-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/eudev/create-3.2.10-bind-events-patch/create.patch.sh
===================================================================
--- a/eudev/create-3.2.10-bind-events-patch/create.patch.sh	(nonexistent)
+++ a/eudev/create-3.2.10-bind-events-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=3.2.10
+
+tar --files-from=file.list -xJvf ../eudev-$VERSION.tar.xz
+mv eudev-$VERSION eudev-$VERSION-orig
+
+cp -rf ./eudev-$VERSION-new ./eudev-$VERSION
+
+diff --unified -Nr  eudev-$VERSION-orig  eudev-$VERSION > eudev-$VERSION-bind-events.patch
+
+mv eudev-$VERSION-bind-events.patch ../patches
+
+rm -rf ./eudev-$VERSION
+rm -rf ./eudev-$VERSION-orig

Property changes on: a/eudev/create-3.2.10-bind-events-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new/src/udev/udev-event.c
===================================================================
--- a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new/src/udev/udev-event.c	(nonexistent)
+++ a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new/src/udev/udev-event.c	(revision 5)
@@ -0,0 +1,1082 @@
+/*
+ * Copyright (C) 2003-2013 Kay Sievers <kay@vrfy.org>
+ *
+ * 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 2 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/>.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <ctype.h>
+#include <string.h>
+#include <time.h>
+#include <net/if.h>
+#include <sys/ioctl.h>
+#include <sys/prctl.h>
+#include <poll.h>
+#include <sys/epoll.h>
+#include <sys/wait.h>
+#include <sys/socket.h>
+#include <sys/signalfd.h>
+#include <linux/sockios.h>
+#include <sys/sysmacros.h>
+
+#include "udev.h"
+
+struct udev_event *udev_event_new(struct udev_device *dev) {
+        struct udev *udev = udev_device_get_udev(dev);
+        struct udev_event *event;
+
+        event = new0(struct udev_event, 1);
+        if (event == NULL)
+                return NULL;
+        event->dev = dev;
+        event->udev = udev;
+        udev_list_init(udev, &event->run_list, false);
+        udev_list_init(udev, &event->seclabel_list, false);
+        event->fd_signal = -1;
+        event->birth_usec = now(CLOCK_MONOTONIC);
+        return event;
+}
+
+void udev_event_unref(struct udev_event *event) {
+        if (event == NULL)
+                return;
+        udev_list_cleanup(&event->run_list);
+        udev_list_cleanup(&event->seclabel_list);
+        free(event->program_result);
+        free(event->name);
+        free(event);
+}
+
+size_t udev_event_apply_format(struct udev_event *event,
+                               const char *src, char *dest, size_t size,
+                               bool replace_whitespace) {
+        struct udev_device *dev = event->dev;
+        enum subst_type {
+                SUBST_UNKNOWN,
+                SUBST_DEVNODE,
+                SUBST_ATTR,
+                SUBST_ENV,
+                SUBST_KERNEL,
+                SUBST_KERNEL_NUMBER,
+                SUBST_DRIVER,
+                SUBST_DEVPATH,
+                SUBST_ID,
+                SUBST_MAJOR,
+                SUBST_MINOR,
+                SUBST_RESULT,
+                SUBST_PARENT,
+                SUBST_NAME,
+                SUBST_LINKS,
+                SUBST_ROOT,
+                SUBST_SYS,
+        };
+        static const struct subst_map {
+                const char *name;
+                const char fmt;
+                enum subst_type type;
+        } map[] = {
+                { .name = "devnode",  .fmt = 'N', .type = SUBST_DEVNODE },
+                { .name = "tempnode", .fmt = 'N', .type = SUBST_DEVNODE },
+                { .name = "attr",     .fmt = 's', .type = SUBST_ATTR },
+                { .name = "sysfs",    .fmt = 's', .type = SUBST_ATTR },
+                { .name = "env",      .fmt = 'E', .type = SUBST_ENV },
+                { .name = "kernel",   .fmt = 'k', .type = SUBST_KERNEL },
+                { .name = "number",   .fmt = 'n', .type = SUBST_KERNEL_NUMBER },
+                { .name = "driver",   .fmt = 'd', .type = SUBST_DRIVER },
+                { .name = "devpath",  .fmt = 'p', .type = SUBST_DEVPATH },
+                { .name = "id",       .fmt = 'b', .type = SUBST_ID },
+                { .name = "major",    .fmt = 'M', .type = SUBST_MAJOR },
+                { .name = "minor",    .fmt = 'm', .type = SUBST_MINOR },
+                { .name = "result",   .fmt = 'c', .type = SUBST_RESULT },
+                { .name = "parent",   .fmt = 'P', .type = SUBST_PARENT },
+                { .name = "name",     .fmt = 'D', .type = SUBST_NAME },
+                { .name = "links",    .fmt = 'L', .type = SUBST_LINKS },
+                { .name = "root",     .fmt = 'r', .type = SUBST_ROOT },
+                { .name = "sys",      .fmt = 'S', .type = SUBST_SYS },
+        };
+        const char *from;
+        char *s;
+        size_t l;
+
+        from = src;
+        s = dest;
+        l = size;
+
+        for (;;) {
+                enum subst_type type = SUBST_UNKNOWN;
+                char attrbuf[UTIL_PATH_SIZE], sbuf[UTIL_PATH_SIZE];
+                char *attr = NULL, *_s;
+                size_t _l;
+                bool replws = replace_whitespace;
+
+                while (from[0] != '\0') {
+                        if (from[0] == '$') {
+                                /* substitute named variable */
+                                unsigned int i;
+
+                                if (from[1] == '$') {
+                                        from++;
+                                        goto copy;
+                                }
+
+                                for (i = 0; i < ELEMENTSOF(map); i++) {
+                                        if (startswith(&from[1], map[i].name)) {
+                                                type = map[i].type;
+                                                from += strlen(map[i].name)+1;
+                                                goto subst;
+                                        }
+                                }
+                        } else if (from[0] == '%') {
+                                /* substitute format char */
+                                unsigned int i;
+
+                                if (from[1] == '%') {
+                                        from++;
+                                        goto copy;
+                                }
+
+                                for (i = 0; i < ELEMENTSOF(map); i++) {
+                                        if (from[1] == map[i].fmt) {
+                                                type = map[i].type;
+                                                from += 2;
+                                                goto subst;
+                                        }
+                                }
+                        }
+copy:
+                        /* copy char */
+                        if (l == 0)
+                                goto out;
+                        s[0] = from[0];
+                        from++;
+                        s++;
+                        l--;
+                }
+
+                goto out;
+subst:
+                /* extract possible $format{attr} */
+                if (from[0] == '{') {
+                        unsigned int i;
+
+                        from++;
+                        for (i = 0; from[i] != '}'; i++) {
+                                if (from[i] == '\0') {
+                                        log_error("missing closing brace for format '%s'", src);
+                                        goto out;
+                                }
+                        }
+                        if (i >= sizeof(attrbuf))
+                                goto out;
+                        memcpy(attrbuf, from, i);
+                        attrbuf[i] = '\0';
+                        from += i+1;
+                        attr = attrbuf;
+                } else {
+                        attr = NULL;
+                }
+
+                /* result subst handles space as field separator */
+                if (type == SUBST_RESULT)
+                        replws = false;
+
+                if (replws) {
+                        /* store dest string ptr and remaining len */
+                        _s = s;
+                        _l = l;
+                        /* temporarily use sbuf */
+                        s = sbuf;
+                        l = UTIL_PATH_SIZE;
+                }
+
+                switch (type) {
+                case SUBST_DEVPATH:
+                        l = strpcpy(&s, l, udev_device_get_devpath(dev));
+                        break;
+                case SUBST_KERNEL:
+                        l = strpcpy(&s, l, udev_device_get_sysname(dev));
+                        break;
+                case SUBST_KERNEL_NUMBER:
+                        if (udev_device_get_sysnum(dev) == NULL)
+                                break;
+                        l = strpcpy(&s, l, udev_device_get_sysnum(dev));
+                        break;
+                case SUBST_ID:
+                        if (event->dev_parent == NULL)
+                                break;
+                        l = strpcpy(&s, l, udev_device_get_sysname(event->dev_parent));
+                        break;
+                case SUBST_DRIVER: {
+                        const char *driver;
+
+                        if (event->dev_parent == NULL)
+                                break;
+
+                        driver = udev_device_get_driver(event->dev_parent);
+                        if (driver == NULL)
+                                break;
+                        l = strpcpy(&s, l, driver);
+                        break;
+                }
+                case SUBST_MAJOR: {
+                        char num[UTIL_PATH_SIZE];
+
+                        sprintf(num, "%u", major(udev_device_get_devnum(dev)));
+                        l = strpcpy(&s, l, num);
+                        break;
+                }
+                case SUBST_MINOR: {
+                        char num[UTIL_PATH_SIZE];
+
+                        sprintf(num, "%u", minor(udev_device_get_devnum(dev)));
+                        l = strpcpy(&s, l, num);
+                        break;
+                }
+                case SUBST_RESULT: {
+                        char *rest;
+                        int i;
+
+                        if (event->program_result == NULL)
+                                break;
+                        /* get part part of the result string */
+                        i = 0;
+                        if (attr != NULL)
+                                i = strtoul(attr, &rest, 10);
+                        if (i > 0) {
+                                char result[UTIL_PATH_SIZE];
+                                char tmp[UTIL_PATH_SIZE];
+                                char *cpos;
+
+                                strscpy(result, sizeof(result), event->program_result);
+                                cpos = result;
+                                while (--i) {
+                                        while (cpos[0] != '\0' && !isspace(cpos[0]))
+                                                cpos++;
+                                        while (isspace(cpos[0]))
+                                                cpos++;
+                                        if (cpos[0] == '\0')
+                                                break;
+                                }
+                                if (i > 0) {
+                                        log_error("requested part of result string not found");
+                                        break;
+                                }
+                                strscpy(tmp, sizeof(tmp), cpos);
+                                /* %{2+}c copies the whole string from the second part on */
+                                if (rest[0] != '+') {
+                                        cpos = strchr(tmp, ' ');
+                                        if (cpos)
+                                                cpos[0] = '\0';
+                                }
+                                l = strpcpy(&s, l, tmp);
+                        } else {
+                                l = strpcpy(&s, l, event->program_result);
+                        }
+                        break;
+                }
+                case SUBST_ATTR: {
+                        const char *value = NULL;
+                        char vbuf[UTIL_NAME_SIZE];
+                        size_t len;
+                        int count;
+
+                        if (attr == NULL) {
+                                log_error("missing file parameter for attr");
+                                break;
+                        }
+
+                        /* try to read the value specified by "[dmi/id]product_name" */
+                        if (util_resolve_subsys_kernel(event->udev, attr, vbuf, sizeof(vbuf), 1) == 0)
+                                value = vbuf;
+
+                        /* try to read the attribute the device */
+                        if (value == NULL)
+                                value = udev_device_get_sysattr_value(event->dev, attr);
+
+                        /* try to read the attribute of the parent device, other matches have selected */
+                        if (value == NULL && event->dev_parent != NULL && event->dev_parent != event->dev)
+                                value = udev_device_get_sysattr_value(event->dev_parent, attr);
+
+                        if (value == NULL)
+                                break;
+
+                        /* strip trailing whitespace, and replace unwanted characters */
+                        if (value != vbuf)
+                                strscpy(vbuf, sizeof(vbuf), value);
+                        len = strlen(vbuf);
+                        while (len > 0 && isspace(vbuf[--len]))
+                                vbuf[len] = '\0';
+                        count = util_replace_chars(vbuf, UDEV_ALLOWED_CHARS_INPUT);
+                        if (count > 0)
+                                log_debug("%i character(s) replaced" , count);
+                        l = strpcpy(&s, l, vbuf);
+                        break;
+                }
+                case SUBST_PARENT: {
+                        struct udev_device *dev_parent;
+                        const char *devnode;
+
+                        dev_parent = udev_device_get_parent(event->dev);
+                        if (dev_parent == NULL)
+                                break;
+                        devnode = udev_device_get_devnode(dev_parent);
+                        if (devnode != NULL)
+                                l = strpcpy(&s, l, devnode + strlen("/dev/"));
+                        break;
+                }
+                case SUBST_DEVNODE:
+                        if (udev_device_get_devnode(dev) != NULL)
+                                l = strpcpy(&s, l, udev_device_get_devnode(dev));
+                        break;
+                case SUBST_NAME:
+                        if (event->name != NULL)
+                                l = strpcpy(&s, l, event->name);
+                        else if (udev_device_get_devnode(dev) != NULL)
+                                l = strpcpy(&s, l, udev_device_get_devnode(dev) + strlen("/dev/"));
+                        else
+                                l = strpcpy(&s, l, udev_device_get_sysname(dev));
+                        break;
+                case SUBST_LINKS: {
+                        struct udev_list_entry *list_entry;
+
+                        list_entry = udev_device_get_devlinks_list_entry(dev);
+                        if (list_entry == NULL)
+                                break;
+                        l = strpcpy(&s, l, udev_list_entry_get_name(list_entry) + strlen("/dev/"));
+                        udev_list_entry_foreach(list_entry, udev_list_entry_get_next(list_entry))
+                                l = strpcpyl(&s, l, " ", udev_list_entry_get_name(list_entry) + strlen("/dev/"), NULL);
+                        break;
+                }
+                case SUBST_ROOT:
+                        l = strpcpy(&s, l, "/dev");
+                        break;
+                case SUBST_SYS:
+                        l = strpcpy(&s, l, "/sys");
+                        break;
+                case SUBST_ENV:
+                        if (attr == NULL) {
+                                break;
+                        } else {
+                                const char *value;
+
+                                value = udev_device_get_property_value(event->dev, attr);
+                                if (value == NULL)
+                                        break;
+                                l = strpcpy(&s, l, value);
+                                break;
+                        }
+                default:
+                        log_error("unknown substitution type=%i", type);
+                        break;
+                }
+
+                /* replace whitespace in sbuf and copy to dest */
+                if (replws) {
+                        size_t tmplen = UTIL_PATH_SIZE - l;
+
+                        /* restore s and l to dest string values */
+                        s = _s;
+                        l = _l;
+
+                        /* copy ws-replaced value to s */
+                        tmplen = util_replace_whitespace(sbuf, s, MIN(tmplen, l));
+                        l -= tmplen;
+                        s += tmplen;
+                }
+        }
+
+out:
+        s[0] = '\0';
+        return l;
+}
+
+static int spawn_exec(struct udev_event *event,
+                      const char *cmd, char *const argv[], char **envp, const sigset_t *sigmask,
+                      int fd_stdout, int fd_stderr) {
+        _cleanup_close_ int fd = -1;
+
+        /* discard child output or connect to pipe */
+        fd = open("/dev/null", O_RDWR);
+        if (fd >= 0) {
+                dup2(fd, STDIN_FILENO);
+                if (fd_stdout < 0)
+                        dup2(fd, STDOUT_FILENO);
+                if (fd_stderr < 0)
+                        dup2(fd, STDERR_FILENO);
+        } else
+                log_error_errno(errno, "open /dev/null failed: %m");
+
+        /* connect pipes to std{out,err} */
+        if (fd_stdout >= 0) {
+                dup2(fd_stdout, STDOUT_FILENO);
+                safe_close(fd_stdout);
+        }
+        if (fd_stderr >= 0) {
+                dup2(fd_stderr, STDERR_FILENO);
+                safe_close(fd_stderr);
+        }
+
+        /* terminate child in case parent goes away */
+        prctl(PR_SET_PDEATHSIG, SIGTERM);
+
+        /* restore original udev sigmask before exec */
+        if (sigmask)
+                sigprocmask(SIG_SETMASK, sigmask, NULL);
+
+        execve(argv[0], argv, envp);
+
+        /* exec failed */
+        log_error_errno(errno, "failed to execute '%s' '%s': %m", argv[0], cmd);
+
+        return -errno;
+}
+
+static void spawn_read(struct udev_event *event,
+                       usec_t timeout_usec,
+                       const char *cmd,
+                       int fd_stdout, int fd_stderr,
+                       char *result, size_t ressize) {
+        _cleanup_close_ int fd_ep = -1;
+        struct epoll_event ep_outpipe = {
+                .events = EPOLLIN,
+                .data.ptr = &fd_stdout,
+        };
+        struct epoll_event ep_errpipe = {
+                .events = EPOLLIN,
+                .data.ptr = &fd_stderr,
+        };
+        size_t respos = 0;
+        int r;
+
+        /* read from child if requested */
+        if (fd_stdout < 0 && fd_stderr < 0)
+                return;
+
+        fd_ep = epoll_create1(EPOLL_CLOEXEC);
+        if (fd_ep < 0) {
+                log_error_errno(errno, "error creating epoll fd: %m");
+                return;
+        }
+
+        if (fd_stdout >= 0) {
+                r = epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_stdout, &ep_outpipe);
+                if (r < 0) {
+                        log_error_errno(errno, "fail to add stdout fd to epoll: %m");
+                        return;
+                }
+        }
+
+        if (fd_stderr >= 0) {
+                r = epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_stderr, &ep_errpipe);
+                if (r < 0) {
+                        log_error_errno(errno, "fail to add stderr fd to epoll: %m");
+                        return;
+                }
+        }
+
+        /* read child output */
+        while (fd_stdout >= 0 || fd_stderr >= 0) {
+                int timeout;
+                int fdcount;
+                struct epoll_event ev[4];
+                int i;
+
+                if (timeout_usec > 0) {
+                        usec_t age_usec;
+
+                        age_usec = now(CLOCK_MONOTONIC) - event->birth_usec;
+                        if (age_usec >= timeout_usec) {
+                                log_error("timeout '%s'", cmd);
+                                return;
+                        }
+                        timeout = ((timeout_usec - age_usec) / USEC_PER_MSEC) + MSEC_PER_SEC;
+                } else {
+                        timeout = -1;
+                }
+
+                fdcount = epoll_wait(fd_ep, ev, ELEMENTSOF(ev), timeout);
+                if (fdcount < 0) {
+                        if (errno == EINTR)
+                                continue;
+                        log_error_errno(errno, "failed to poll: %m");
+                        return;
+                } else if (fdcount == 0) {
+                        log_error("timeout '%s'", cmd);
+                        return;
+                }
+
+                for (i = 0; i < fdcount; i++) {
+                        int *fd = (int *)ev[i].data.ptr;
+
+                        if (*fd < 0)
+                                continue;
+
+                        if (ev[i].events & EPOLLIN) {
+                                ssize_t count;
+                                char buf[4096];
+
+                                count = read(*fd, buf, sizeof(buf)-1);
+                                if (count <= 0)
+                                        continue;
+                                buf[count] = '\0';
+
+                                /* store stdout result */
+                                if (result != NULL && *fd == fd_stdout) {
+                                        if (respos + count < ressize) {
+                                                memcpy(&result[respos], buf, count);
+                                                respos += count;
+                                        } else {
+                                                log_error("'%s' ressize %zu too short", cmd, ressize);
+                                        }
+                                }
+
+                                /* log debug output only if we watch stderr */
+                                if (fd_stderr >= 0) {
+                                        char *pos;
+                                        char *line;
+
+                                        pos = buf;
+                                        while ((line = strsep(&pos, "\n"))) {
+                                                if (pos != NULL || line[0] != '\0')
+                                                        log_debug("'%s'(%s) '%s'", cmd, *fd == fd_stdout ? "out" : "err" , line);
+                                        }
+                                }
+                        } else if (ev[i].events & EPOLLHUP) {
+                                r = epoll_ctl(fd_ep, EPOLL_CTL_DEL, *fd, NULL);
+                                if (r < 0) {
+                                        log_error_errno(errno, "failed to remove fd from epoll: %m");
+                                        return;
+                                }
+                                *fd = -1;
+                        }
+                }
+        }
+
+        /* return the child's stdout string */
+        if (result != NULL)
+                result[respos] = '\0';
+}
+
+static int spawn_wait(struct udev_event *event,
+                      usec_t timeout_usec,
+                      usec_t timeout_warn_usec,
+                      const char *cmd, pid_t pid) {
+        struct pollfd pfd[1];
+        int err = 0;
+
+        pfd[0].events = POLLIN;
+        pfd[0].fd = event->fd_signal;
+
+        while (pid > 0) {
+                int timeout;
+                int timeout_warn = 0;
+                int fdcount;
+
+                if (timeout_usec > 0) {
+                        usec_t age_usec;
+
+                        age_usec = now(CLOCK_MONOTONIC) - event->birth_usec;
+                        if (age_usec >= timeout_usec)
+                                timeout = 1000;
+                        else {
+                                if (timeout_warn_usec > 0)
+                                        timeout_warn = ((timeout_warn_usec - age_usec) / USEC_PER_MSEC) + MSEC_PER_SEC;
+
+                                timeout = ((timeout_usec - timeout_warn_usec - age_usec) / USEC_PER_MSEC) + MSEC_PER_SEC;
+                        }
+                } else {
+                        timeout = -1;
+                }
+
+                fdcount = poll(pfd, 1, timeout_warn);
+                if (fdcount < 0) {
+                        if (errno == EINTR)
+                                continue;
+                        err = -errno;
+                        log_error_errno(errno, "failed to poll: %m");
+                        goto out;
+                }
+                if (fdcount == 0) {
+                        log_warning("slow: '%s' ["PID_FMT"]", cmd, pid);
+
+                        fdcount = poll(pfd, 1, timeout);
+                        if (fdcount < 0) {
+                                if (errno == EINTR)
+                                        continue;
+                                err = -errno;
+                                log_error_errno(errno, "failed to poll: %m");
+                                goto out;
+                        }
+                        if (fdcount == 0) {
+                                log_error("timeout: killing '%s' ["PID_FMT"]", cmd, pid);
+                                kill(pid, SIGKILL);
+                        }
+                }
+
+                if (pfd[0].revents & POLLIN) {
+                        struct signalfd_siginfo fdsi;
+                        int status;
+                        ssize_t size;
+
+                        size = read(event->fd_signal, &fdsi, sizeof(struct signalfd_siginfo));
+                        if (size != sizeof(struct signalfd_siginfo))
+                                continue;
+
+                        switch (fdsi.ssi_signo) {
+                        case SIGTERM:
+                                event->sigterm = true;
+                                break;
+                        case SIGCHLD:
+                                if (waitpid(pid, &status, WNOHANG) < 0)
+                                        break;
+                                if (WIFEXITED(status)) {
+                                        log_debug("'%s' ["PID_FMT"] exit with return code %i", cmd, pid, WEXITSTATUS(status));
+                                        if (WEXITSTATUS(status) != 0)
+                                                err = -1;
+                                } else if (WIFSIGNALED(status)) {
+                                        log_error("'%s' ["PID_FMT"] terminated by signal %i (%s)", cmd, pid, WTERMSIG(status), strsignal(WTERMSIG(status)));
+                                        err = -1;
+                                } else if (WIFSTOPPED(status)) {
+                                        log_error("'%s' ["PID_FMT"] stopped", cmd, pid);
+                                        err = -1;
+                                } else if (WIFCONTINUED(status)) {
+                                        log_error("'%s' ["PID_FMT"] continued", cmd, pid);
+                                        err = -1;
+                                } else {
+                                        log_error("'%s' ["PID_FMT"] exit with status 0x%04x", cmd, pid, status);
+                                        err = -1;
+                                }
+                                pid = 0;
+                                break;
+                        }
+                }
+        }
+out:
+        return err;
+}
+
+int udev_build_argv(struct udev *udev, char *cmd, int *argc, char *argv[]) {
+        int i = 0;
+        char *pos;
+
+        if (strchr(cmd, ' ') == NULL) {
+                argv[i++] = cmd;
+                goto out;
+        }
+
+        pos = cmd;
+        while (pos != NULL && pos[0] != '\0') {
+                if (pos[0] == '\'') {
+                        /* do not separate quotes */
+                        pos++;
+                        argv[i] = strsep(&pos, "\'");
+                        if (pos != NULL)
+                                while (pos[0] == ' ')
+                                        pos++;
+                } else {
+                        argv[i] = strsep(&pos, " ");
+                        if (pos != NULL)
+                                while (pos[0] == ' ')
+                                        pos++;
+                }
+                i++;
+        }
+out:
+        argv[i] = NULL;
+        if (argc)
+                *argc = i;
+        return 0;
+}
+
+int udev_event_spawn(struct udev_event *event,
+                     usec_t timeout_usec,
+                     usec_t timeout_warn_usec,
+                     const char *cmd, char **envp, const sigset_t *sigmask,
+                     char *result, size_t ressize) {
+        int outpipe[2] = {-1, -1};
+        int errpipe[2] = {-1, -1};
+        pid_t pid;
+        char arg[UTIL_PATH_SIZE];
+        char *argv[128];
+        char program[UTIL_PATH_SIZE];
+        int err = 0;
+
+        strscpy(arg, sizeof(arg), cmd);
+        udev_build_argv(event->udev, arg, NULL, argv);
+
+        /* pipes from child to parent */
+        if (result != NULL || log_get_max_level() >= LOG_INFO) {
+                if (pipe2(outpipe, O_NONBLOCK) != 0) {
+                        err = -errno;
+                        log_error_errno(errno, "pipe failed: %m");
+                        goto out;
+                }
+        }
+        if (log_get_max_level() >= LOG_INFO) {
+                if (pipe2(errpipe, O_NONBLOCK) != 0) {
+                        err = -errno;
+                        log_error_errno(errno, "pipe failed: %m");
+                        goto out;
+                }
+        }
+
+        /* allow programs in /usr/lib/udev/ to be called without the path */
+        if (argv[0][0] != '/') {
+                strscpyl(program, sizeof(program), UDEV_LIBEXEC_DIR "/", argv[0], NULL);
+#ifdef HAVE_SPLIT_USR
+                if(access(program, X_OK))
+                        strscpyl(program, sizeof(program), "/usr/lib/udev/", argv[0], NULL);
+                if(access(program, X_OK))
+                        strscpyl(program, sizeof(program), "/lib/udev/", argv[0], NULL);
+#endif
+                argv[0] = program;
+        }
+
+        pid = fork();
+        switch(pid) {
+        case 0:
+                /* child closes parent's ends of pipes */
+                if (outpipe[READ_END] >= 0) {
+                        close(outpipe[READ_END]);
+                        outpipe[READ_END] = -1;
+                }
+                if (errpipe[READ_END] >= 0) {
+                        close(errpipe[READ_END]);
+                        errpipe[READ_END] = -1;
+                }
+
+                log_debug("starting '%s'", cmd);
+
+                spawn_exec(event, cmd, argv, envp, sigmask,
+                           outpipe[WRITE_END], errpipe[WRITE_END]);
+
+                _exit(2 );
+        case -1:
+                log_error_errno(errno, "fork of '%s' failed: %m", cmd);
+                err = -1;
+                goto out;
+        default:
+                /* parent closed child's ends of pipes */
+                if (outpipe[WRITE_END] >= 0) {
+                        close(outpipe[WRITE_END]);
+                        outpipe[WRITE_END] = -1;
+                }
+                if (errpipe[WRITE_END] >= 0) {
+                        close(errpipe[WRITE_END]);
+                        errpipe[WRITE_END] = -1;
+                }
+
+                spawn_read(event,
+                           timeout_usec,
+                           cmd,
+                           outpipe[READ_END], errpipe[READ_END],
+                           result, ressize);
+
+                err = spawn_wait(event, timeout_usec, timeout_warn_usec, cmd, pid);
+        }
+
+out:
+        if (outpipe[READ_END] >= 0)
+                close(outpipe[READ_END]);
+        if (outpipe[WRITE_END] >= 0)
+                close(outpipe[WRITE_END]);
+        if (errpipe[READ_END] >= 0)
+                close(errpipe[READ_END]);
+        if (errpipe[WRITE_END] >= 0)
+                close(errpipe[WRITE_END]);
+        return err;
+}
+
+#ifdef ENABLE_RULE_GENERATOR
+/* function to return the count of rules that assign NAME= to a value matching arg#2 , defined in udev-rules.c */
+int udev_rules_assigning_name_to(struct udev_rules *rules,const char *match_name);
+#endif
+
+static int rename_netif_dev_fromname_toname(struct udev_device *dev,const char *oldname,const char *name) {
+        int r;
+        int sk;
+        struct ifreq ifr;
+
+	log_debug("changing net interface name from '%s' to '%s'\n",oldname,name);
+
+        sk = socket(PF_INET, SOCK_DGRAM, 0);
+        if (sk < 0)
+                return log_error_errno(-errno, "error opening socket: %m");
+
+        memzero(&ifr, sizeof(struct ifreq));
+        strscpy(ifr.ifr_name, IFNAMSIZ, oldname);
+        strscpy(ifr.ifr_newname, IFNAMSIZ, name);
+        r = ioctl(sk, SIOCSIFNAME, &ifr);
+
+#ifdef ENABLE_RULE_GENERATOR
+	int loop;
+
+	if (r == 0) {
+		log_info("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname);
+		goto out;
+	}
+	/* keep trying if the destination interface name already exists */
+	log_debug("collision on rename of network interface %s to %s , retrying until timeout\n",
+		ifr.ifr_name, ifr.ifr_newname);
+
+	r = -errno;
+	if (r != -EEXIST)
+		goto out;
+
+	/* wait a maximum of 90 seconds for our target to become available */
+	loop = 90 * 20;
+	while (loop--) {
+		const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 };
+
+		nanosleep(&duration, NULL);
+
+		r = ioctl(sk, SIOCSIFNAME, &ifr);
+		if (r == 0) {
+			log_info("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname);
+			break;
+		}
+		r = -errno;
+		if (r != -EEXIST)
+			break;
+	}
+
+out:
+#endif
+	if (r < 0)
+                log_error_errno(-errno, "Error changing net interface name %s to %s: %m\n", ifr.ifr_name, ifr.ifr_newname);
+	else
+	        log_debug("renamed network interface '%s' to '%s'", oldname, name);
+
+        close(sk);
+        return r;
+}
+
+static int rename_netif(struct udev_event *event) {
+	return rename_netif_dev_fromname_toname(event->dev,udev_device_get_sysname(event->dev),event->name);
+}
+
+void udev_event_execute_rules(struct udev_event *event,
+                              usec_t timeout_usec, usec_t timeout_warn_usec,
+                              struct udev_list *properties_list,
+                              struct udev_rules *rules,
+                              const sigset_t *sigmask) {
+        struct udev_device *dev = event->dev;
+
+        if (udev_device_get_subsystem(dev) == NULL)
+                return;
+
+        if (streq(udev_device_get_action(dev), "bind") || streq(udev_device_get_action(dev), "unbind")) {
+            // Ignore bind/unbind events
+            return;
+        }
+
+        if (streq(udev_device_get_action(dev), "remove")) {
+                udev_device_read_db(dev);
+                udev_device_tag_index(dev, NULL, false);
+                udev_device_delete_db(dev);
+
+                if (major(udev_device_get_devnum(dev)) != 0)
+                        udev_watch_end(event->udev, dev);
+
+                udev_rules_apply_to_event(rules, event,
+                                          timeout_usec, timeout_warn_usec,
+                                          properties_list,
+                                          sigmask);
+
+                if (major(udev_device_get_devnum(dev)) != 0)
+                        udev_node_remove(dev);
+        } else {
+                event->dev_db = udev_device_clone_with_db(dev);
+                if (event->dev_db != NULL) {
+                        /* disable watch during event processing */
+                        if (major(udev_device_get_devnum(dev)) != 0)
+                                udev_watch_end(event->udev, event->dev_db);
+                }
+
+                if (major(udev_device_get_devnum(dev)) == 0 &&
+                    streq(udev_device_get_action(dev), "move"))
+                        udev_device_copy_properties(dev, event->dev_db);
+
+                udev_rules_apply_to_event(rules, event,
+                                          timeout_usec, timeout_warn_usec,
+                                          properties_list,
+                                          sigmask);
+
+                /* rename a new network interface, if needed */
+
+                /* ENABLE_RULE_GENERATOR conditional:
+                 * if this is a net iface, and it is an add event,
+                 * and as long as all of the following are FALSE:
+                 *  - no NAME target and the current name is not being used
+                 *  - there is a NAME target and it is the same as the current name
+                 *  - the rules can successfully be searched for the current name (not really part of the conditional)
+                 * the run the rename.
+                 *
+                 * note - udev_rules_assigning_name_to is run when event->name is NULL to ensure renames happen,
+                 * but also on its own to check if a temp-rename is necessary when event->name exists.
+                 *
+                 * A temp-rename is necessary when:
+                 * - there is no rule renaming the current iface but the current name IS used in some other rule
+                 * - there is a rule renaming the current iface,
+                 *   the current name IS used AND the target name != the current name
+                 */
+
+#ifdef ENABLE_RULE_GENERATOR
+		int r;
+                if (udev_device_get_ifindex(dev) > 0 && streq(udev_device_get_action(dev), "add") &&
+                    (event->name == NULL && (r=udev_rules_assigning_name_to(rules,udev_device_get_sysname(dev))) > 0 ||
+                    event->name != NULL && !streq(event->name, udev_device_get_sysname(dev)))) {
+                        char syspath[UTIL_PATH_SIZE];
+                        char *pos;
+                        char *finalifname = event->name;
+                        char newifname[IFNAMSIZ];
+
+                        /* r is the number of rules that assign a device with NAME= this sysname */
+                        if (r > 0 || (r=udev_rules_assigning_name_to(rules,udev_device_get_sysname(dev))) > 0) {
+                                /* have a conflict, rename to a temp name */
+                                char *newpos;
+                                int ifidnum;
+
+                                /* build the temporary iface name */
+                                strscpy(newifname, IFNAMSIZ, udev_device_get_sysname(dev));
+                                newpos=pos=&newifname[strcspn(newifname,"0123456789")];
+                                ifidnum=(int)strtol(pos,&newpos,10);
+                                *pos='\0';
+                                if (newpos > pos && *newpos == '\0') /* append new iface num to name */
+                                        /* use udev_device_get_ifindex(dev) as it is unique to every iface */
+                                        snprintf(pos,IFNAMSIZ+(newifname-pos), "%d", 128 - udev_device_get_ifindex(dev));
+
+                                /* note, r > 0, which will skip the post-rename stuff if no rename occurs */
+
+                                /* if sysname isn't already the tmpname (ie there is no numeric component), do the rename */
+                                if (!streq(newifname,udev_device_get_sysname(dev))) {
+                                        r = rename_netif_dev_fromname_toname(dev,udev_device_get_sysname(dev),newifname);
+                                        if (r == 0) {
+                                                finalifname = newifname;
+                                                log_debug("renamed netif to '%s' for collision avoidance\n", newifname);
+                                        } else {
+                                                log_error("could not rename netif to '%s' for collision avoidance\n",newifname);
+                                        }
+                                }
+                                /* rename it now to its final target if its not already there */
+                                if (event->name != NULL && !streq(event->name, newifname)) {
+                                        r = rename_netif_dev_fromname_toname(dev,newifname,event->name);
+                                        if (r == 0)
+                                                finalifname = event->name;
+                               }
+
+                        } else { /* no need to rename to a tempname first, do a regular direct rename to event->name */
+
+                                r = 1; /* skip the post-rename stuff if no rename occurs */
+                                if (!streq(event->name, udev_device_get_sysname(dev)))
+                                        r = rename_netif(event);
+                        }
+
+                        if (r == 0) {
+                                log_debug("renamed netif to '%s'\n", finalifname);
+                                r = udev_device_rename(dev, finalifname);
+#else
+                if (udev_device_get_ifindex(dev) > 0 && streq(udev_device_get_action(dev), "add") &&
+                    event->name != NULL && !streq(event->name, udev_device_get_sysname(dev))) {
+                        int r;
+
+                        r = rename_netif(event);
+                        if (r < 0)
+                                log_warning_errno(r, "could not rename interface '%d' from '%s' to '%s': %m", udev_device_get_ifindex(dev),
+                                                  udev_device_get_sysname(dev), event->name);
+                        else {
+                                r = udev_device_rename(dev, event->name);
+#endif
+                                if (r < 0)
+                                        log_warning_errno(r, "renamed interface '%d' from '%s' to '%s', but could not update udev_device: %m",
+                                                          udev_device_get_ifindex(dev), udev_device_get_sysname(dev), event->name);
+                                else
+                                        log_debug("changed devpath to '%s'", udev_device_get_devpath(dev));
+                        }
+                }
+
+                if (major(udev_device_get_devnum(dev)) > 0) {
+                        bool apply;
+
+                        /* remove/update possible left-over symlinks from old database entry */
+                        if (event->dev_db != NULL)
+                                udev_node_update_old_links(dev, event->dev_db);
+
+                        if (!event->owner_set)
+                                event->uid = udev_device_get_devnode_uid(dev);
+
+                        if (!event->group_set)
+                                event->gid = udev_device_get_devnode_gid(dev);
+
+                        if (!event->mode_set) {
+                                if (udev_device_get_devnode_mode(dev) > 0) {
+                                        /* kernel supplied value */
+                                        event->mode = udev_device_get_devnode_mode(dev);
+                                } else if (event->gid > 0) {
+                                        /* default 0660 if a group is assigned */
+                                        event->mode = 0660;
+                                } else {
+                                        /* default 0600 */
+                                        event->mode = 0600;
+                                }
+                        }
+
+                        apply = streq(udev_device_get_action(dev), "add") || event->owner_set || event->group_set || event->mode_set;
+                        udev_node_add(dev, apply, event->mode, event->uid, event->gid, &event->seclabel_list);
+                }
+
+                /* preserve old, or get new initialization timestamp */
+                udev_device_ensure_usec_initialized(event->dev, event->dev_db);
+
+                /* (re)write database file */
+                udev_device_tag_index(dev, event->dev_db, true);
+                udev_device_update_db(dev);
+                udev_device_set_is_initialized(dev);
+
+                event->dev_db = udev_device_unref(event->dev_db);
+        }
+}
+
+void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, const sigset_t *sigmask) {
+        struct udev_list_entry *list_entry;
+
+        udev_list_entry_foreach(list_entry, udev_list_get_entry(&event->run_list)) {
+                const char *cmd = udev_list_entry_get_name(list_entry);
+                enum udev_builtin_cmd builtin_cmd = udev_list_entry_get_num(list_entry);
+
+                if (builtin_cmd < UDEV_BUILTIN_MAX) {
+                        char command[UTIL_PATH_SIZE];
+
+                        udev_event_apply_format(event, cmd, command, sizeof(command), false);
+                        udev_builtin_run(event->dev, builtin_cmd, command, false);
+                } else {
+                        char program[UTIL_PATH_SIZE];
+                        char **envp;
+
+                        if (event->exec_delay > 0) {
+                                log_debug("delay execution of '%s'", program);
+                                sleep(event->exec_delay);
+                        }
+
+                        udev_event_apply_format(event, cmd, program, sizeof(program), false);
+                        envp = udev_device_get_properties_envp(event->dev);
+                        udev_event_spawn(event, timeout_usec, timeout_warn_usec, program, envp, sigmask, NULL, 0);
+                }
+        }
+}
Index: a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new/src/udev
===================================================================
--- a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new/src/udev	(nonexistent)
+++ a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new/src/udev	(revision 5)

Property changes on: a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new/src/udev
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new/src
===================================================================
--- a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new/src	(nonexistent)
+++ a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new/src	(revision 5)

Property changes on: a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new/src
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new
===================================================================
--- a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new	(nonexistent)
+++ a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new	(revision 5)

Property changes on: a/eudev/create-3.2.10-bind-events-patch/eudev-3.2.10-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/create-3.2.10-bind-events-patch/file.list
===================================================================
--- a/eudev/create-3.2.10-bind-events-patch/file.list	(nonexistent)
+++ a/eudev/create-3.2.10-bind-events-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+eudev-3.2.10/src/udev/udev-event.c
Index: a/eudev/create-3.2.10-bind-events-patch
===================================================================
--- a/eudev/create-3.2.10-bind-events-patch	(nonexistent)
+++ a/eudev/create-3.2.10-bind-events-patch	(revision 5)

Property changes on: a/eudev/create-3.2.10-bind-events-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/create-3.2.10-cdrom-id-patch/create.patch.sh
===================================================================
--- a/eudev/create-3.2.10-cdrom-id-patch/create.patch.sh	(nonexistent)
+++ a/eudev/create-3.2.10-cdrom-id-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=3.2.10
+
+tar --files-from=file.list -xJvf ../eudev-$VERSION.tar.xz
+mv eudev-$VERSION eudev-$VERSION-orig
+
+cp -rf ./eudev-$VERSION-new ./eudev-$VERSION
+
+diff --unified -Nr  eudev-$VERSION-orig  eudev-$VERSION > eudev-$VERSION-cdrom-id.patch
+
+mv eudev-$VERSION-cdrom-id.patch ../patches
+
+rm -rf ./eudev-$VERSION
+rm -rf ./eudev-$VERSION-orig

Property changes on: a/eudev/create-3.2.10-cdrom-id-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/eudev/create-3.2.10-cdrom-id-patch/eudev-3.2.10-new/rules/60-cdrom_id.rules
===================================================================
--- a/eudev/create-3.2.10-cdrom-id-patch/eudev-3.2.10-new/rules/60-cdrom_id.rules	(nonexistent)
+++ a/eudev/create-3.2.10-cdrom-id-patch/eudev-3.2.10-new/rules/60-cdrom_id.rules	(revision 5)
@@ -0,0 +1,47 @@
+# do not edit this file, it will be overwritten on update
+
+ACTION=="remove", GOTO="cdrom_end"
+SUBSYSTEM!="block", GOTO="cdrom_end"
+KERNEL!="sr[0-9]*|vdisk*|xvd*", GOTO="cdrom_end"
+ENV{DEVTYPE}!="disk", GOTO="cdrom_end"
+
+# unconditionally tag device as CDROM
+KERNEL=="sr[0-9]*", ENV{ID_CDROM}="1"
+
+# stop automatically any mount units bound to the device if the media eject
+# button is pressed.
+ENV{ID_CDROM}=="1", ENV{SYSTEMD_MOUNT_DEVICE_BOUND}="1"
+
+# media eject button pressed
+ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"
+
+# import device and media properties and lock tray to
+# enable the receiving of media eject button events
+IMPORT{program}="cdrom_id --lock-media $devnode"
+
+# ejecting a CD does not remove the device node, so mark the systemd device
+# unit as inactive while there is no medium; this automatically cleans up of
+# stale mounts after ejecting
+ENV{DISK_MEDIA_CHANGE}=="?*", ENV{ID_CDROM_MEDIA}!="?*", ENV{SYSTEMD_READY}="0"
+
+# create default links to the first detected device
+KERNEL=="sr0", ENV{ID_CDROM}=="1",        SYMLINK+="cdrom", OPTIONS+="link_priority=-100"
+KERNEL=="sr0", ENV{ID_CDROM_CD_R}=="1",   SYMLINK+="cdr",   OPTIONS+="link_priority=-100"
+KERNEL=="sr0", ENV{ID_CDROM_CD_R}=="1",   SYMLINK+="cdwriter",   OPTIONS+="link_priority=-100"
+KERNEL=="sr0", ENV{ID_CDROM_CD_RW}=="1",  SYMLINK+="cdrw",  OPTIONS+="link_priority=-100"
+KERNEL=="sr0", ENV{ID_CDROM_DVD}=="1",    SYMLINK+="dvd",   OPTIONS+="link_priority=-100"
+KERNEL=="sr0", ENV{ID_CDROM_DVD_R}=="1",  SYMLINK+="dvdr",  OPTIONS+="link_priority=-100"
+KERNEL=="sr0", ENV{ID_CDROM_DVD_R}=="1",  SYMLINK+="dvdwriter", OPTIONS+="link_priority=-100"
+KERNEL=="sr0", ENV{ID_CDROM_DVD_RW}=="1", SYMLINK+="dvdrw", OPTIONS+="link_priority=-100"
+
+# create all other device links
+KERNEL=="sr[0-9]*", ENV{ID_CDROM}=="1",        SYMLINK+="cdrom%n", OPTIONS+="link_priority=-100"
+KERNEL=="sr[0-9]*", ENV{ID_CDROM_CD_R}=="1",   SYMLINK+="cdr%n",   OPTIONS+="link_priority=-100"
+KERNEL=="sr[0-9]*", ENV{ID_CDROM_CD_R}=="1",   SYMLINK+="cdwriter%n",   OPTIONS+="link_priority=-100"
+KERNEL=="sr[0-9]*", ENV{ID_CDROM_CD_RW}=="1",  SYMLINK+="cdrw%n",  OPTIONS+="link_priority=-100"
+KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD}=="1",    SYMLINK+="dvd%n",   OPTIONS+="link_priority=-100"
+KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD_R}=="1",  SYMLINK+="dvdr%n",  OPTIONS+="link_priority=-100"
+KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD_R}=="1",  SYMLINK+="dvdwriter%n", OPTIONS+="link_priority=-100"
+KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD_RW}=="1", SYMLINK+="dvdrw%n", OPTIONS+="link_priority=-100"
+
+LABEL="cdrom_end"
Index: a/eudev/create-3.2.10-cdrom-id-patch/eudev-3.2.10-new/rules
===================================================================
--- a/eudev/create-3.2.10-cdrom-id-patch/eudev-3.2.10-new/rules	(nonexistent)
+++ a/eudev/create-3.2.10-cdrom-id-patch/eudev-3.2.10-new/rules	(revision 5)

Property changes on: a/eudev/create-3.2.10-cdrom-id-patch/eudev-3.2.10-new/rules
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/create-3.2.10-cdrom-id-patch/eudev-3.2.10-new
===================================================================
--- a/eudev/create-3.2.10-cdrom-id-patch/eudev-3.2.10-new	(nonexistent)
+++ a/eudev/create-3.2.10-cdrom-id-patch/eudev-3.2.10-new	(revision 5)

Property changes on: a/eudev/create-3.2.10-cdrom-id-patch/eudev-3.2.10-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/create-3.2.10-cdrom-id-patch/file.list
===================================================================
--- a/eudev/create-3.2.10-cdrom-id-patch/file.list	(nonexistent)
+++ a/eudev/create-3.2.10-cdrom-id-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+eudev-3.2.10/rules/60-cdrom_id.rules
Index: a/eudev/create-3.2.10-cdrom-id-patch
===================================================================
--- a/eudev/create-3.2.10-cdrom-id-patch	(nonexistent)
+++ a/eudev/create-3.2.10-cdrom-id-patch	(revision 5)

Property changes on: a/eudev/create-3.2.10-cdrom-id-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/create-3.2.10-ids-pl-patch/create.patch.sh
===================================================================
--- a/eudev/create-3.2.10-ids-pl-patch/create.patch.sh	(nonexistent)
+++ a/eudev/create-3.2.10-ids-pl-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=3.2.10
+
+tar --files-from=file.list -xJvf ../eudev-$VERSION.tar.xz
+mv eudev-$VERSION eudev-$VERSION-orig
+
+cp -rf ./eudev-$VERSION-new ./eudev-$VERSION
+
+diff --unified -Nr  eudev-$VERSION-orig  eudev-$VERSION > eudev-$VERSION-ids-pl.patch
+
+mv eudev-$VERSION-ids-pl.patch ../patches
+
+rm -rf ./eudev-$VERSION
+rm -rf ./eudev-$VERSION-orig

Property changes on: a/eudev/create-3.2.10-ids-pl-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new/configure.ac
===================================================================
--- a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new/configure.ac	(nonexistent)
+++ a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new/configure.ac	(revision 5)
@@ -0,0 +1,403 @@
+AC_PREREQ([2.68])
+AC_INIT([eudev],[3.2.10],[https://github.com/gentoo/eudev/issues])
+AC_SUBST(UDEV_VERSION, 243)
+AC_CONFIG_SRCDIR([src/udev/udevd.c])
+
+AC_USE_SYSTEM_EXTENSIONS
+AC_SYS_LARGEFILE
+AC_PREFIX_DEFAULT([/usr])
+
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_HEADERS([config.h])
+
+AM_INIT_AUTOMAKE([foreign 1.11])
+AM_SILENT_RULES([yes])
+
+LT_PREREQ(2.2)
+LT_INIT
+
+# Checks for programs.
+AC_PROG_MKDIR_P
+AC_PROG_LN_S
+AC_PROG_SED
+AC_PROG_GREP
+AC_PROG_AWK
+
+AC_PROG_CC_C99
+AS_IF([test "x$ac_cv_prog_cc_c99" = "xno"], [
+        AC_MSG_ERROR([no C99 compiler found, $PACKAGE requires a C99 compiler.])
+])
+
+AC_PROG_CXX
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+
+AC_PATH_PROG([M4], [m4])
+
+# Checks for header files.
+AC_CHECK_HEADERS(
+        [arpa/inet.h fcntl.h inttypes.h limits.h locale.h \
+         netinet/in.h sys/ioctl.h sys/mount.h \
+         sys/param.h sys/socket.h sys/statvfs.h sys/time.h sys/vfs.h syslog.h \
+         termios.h unistd.h],
+        [],
+        [AC_MSG_ERROR([*** POSIX header not found])]
+)
+
+AC_CHECK_HEADERS(
+        [mtd/mtd-user.h],
+        [],
+        [AC_MSG_ERROR([*** KERNEL header not found])]
+)
+
+AC_CHECK_HEADERS(
+        [linux/btrfs.h],
+        [],
+        [AC_MSG_WARN([*** KERNEL header not found])]
+)
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_TYPE_UID_T
+AC_C_INLINE
+AC_TYPE_MODE_T
+AC_TYPE_PID_T
+AC_CHECK_MEMBERS([struct stat.st_rdev])
+AC_CHECK_DECLS([getrandom, gettid, name_to_handle_at, accept4, mkostemp, ppoll, strndupa], [], [],
+[[#include <fcntl.h>
+#include <linux/random.h>
+#include <poll.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mount.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <unistd.h>]])
+
+AC_CHECK_SIZEOF(pid_t)
+AC_CHECK_SIZEOF(uid_t)
+AC_CHECK_SIZEOF(gid_t)
+AC_CHECK_SIZEOF(dev_t)
+AC_CHECK_SIZEOF(time_t)
+AC_CHECK_SIZEOF(rlim_t,,[[
+#include <sys/time.h>
+#include <sys/resource.h>]])
+
+# Checks for library functions.
+AC_FUNC_CHOWN
+AC_FUNC_FORK
+AC_FUNC_FSEEKO
+AC_FUNC_GETGROUPS
+AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
+AC_HEADER_MAJOR
+AC_FUNC_MMAP
+
+AC_CHECK_FUNCS(
+        [alarm dup2 ftruncate localtime_r mempcpy \
+         mkdir munmap nl_langinfo rmdir setlocale socket stpcpy \
+         uname],
+        [],
+        [AC_MSG_ERROR([*** POSIX function not found])]
+)
+AC_SEARCH_LIBS([clock_gettime], [rt], [], [AC_MSG_ERROR([*** POSIX librt not found])])
+LT_LIB_M
+
+# ------------------------------------------------------------------------------
+
+# TODO: the old python checks are irrelevant, but we do need python and perl for tests
+
+# ------------------------------------------------------------------------------
+# Set paths here
+
+AC_ARG_WITH(
+        [rootprefix],
+        [AS_HELP_STRING(
+                [--with-rootprefix=DIR],
+                [rootfs directory prefix for config files and kernel modules])],
+        [],
+        [with_rootprefix="\${prefix}"]
+)
+
+AC_ARG_WITH(
+        [rootlibdir],
+        [AS_HELP_STRING(
+                [--with-rootlibdir=DIR],
+                [Root directory for libraries necessary for boot])],
+        [],
+        [with_rootlibdir=${libdir}]
+)
+
+AC_ARG_WITH(
+        [rootlibexecdir],
+        [AS_HELP_STRING(
+                [--with-rootlibexecdir=DIR],
+                [Root directory for libexecs necessary for boot])],
+        [],
+        [with_rootlibexecdir=${with_rootlibdir}/udev]
+)
+
+AC_ARG_WITH(
+        [rootrundir],
+        [AS_HELP_STRING(
+                [--with-rootrundir=DIR],
+                [Configurable path for /run])],
+        [],
+        [with_rootrundir=/run]
+)
+
+AC_ARG_ENABLE(
+        [split-usr],
+        [AS_HELP_STRING(
+                [--enable-split-usr],
+                [Include hard-coded default search paths in / and /usr])],
+        [],
+        [AS_IF(
+                [test "x${ac_default_prefix}" != "x${with_rootprefix}" && test "x${with_rootprefix}" != "x\${prefix}"],
+                [enable_split_usr=yes],
+                [enable_split_usr=no])]
+)
+
+AS_IF(
+        [test "x${enable_split_usr}" = "xyes"],
+        [AC_DEFINE(HAVE_SPLIT_USR, 1, [Define to include hard-coded default search paths in / and /usr])]
+)
+
+# Configured paths
+AC_SUBST([rootprefix], [${with_rootprefix}])
+AC_SUBST([rootlibdir], [${with_rootlibdir}])
+AC_SUBST([rootlibexecdir], [${with_rootlibexecdir}])
+AC_SUBST([udevlibexecdir], [${rootlibexecdir}])
+
+# sysconfdir paths
+AC_SUBST([udevconfdir],[${sysconfdir}/udev])
+AC_SUBST([udevconffile],[${udevconfdir}/udev.conf])
+AC_SUBST([udevhwdbdir],[${udevconfdir}/hwdb.d])
+AC_SUBST([udevhwdbbin],[${udevconfdir}/hwdb.bin])
+
+# udevlibexecdir paths
+AC_SUBST([udevkeymapdir],[${udevlibexecdir}/keymaps])
+AC_SUBST([udevkeymapforceredir],[${udevkeymapdir}/force-release])
+AC_SUBST([udevrulesdir],[${udevlibexecdir}/rules.d])
+
+# pkgconfigdir paths
+AC_SUBST([pkgconfiglibdir], [${libdir}/pkgconfig])
+AC_SUBST([sharepkgconfigdir],[${datadir}/pkgconfig])
+
+AC_SUBST([rootrundir],[${with_rootrundir}])
+
+# ------------------------------------------------------------------------------
+AC_ARG_ENABLE([programs],
+        AS_HELP_STRING([--disable-programs], [disable programs (udevd, udevadm and helpers)]),
+        [], [enable_programs="yes"])
+AM_CONDITIONAL([ENABLE_PROGRAMS], [test "x$enable_programs" = "xyes"])
+
+# ------------------------------------------------------------------------------
+have_blkid=no
+AC_ARG_ENABLE(blkid, AS_HELP_STRING([--disable-blkid], [Disable optional blkid support]))
+if test "x$enable_blkid" != "xno"; then
+        PKG_CHECK_MODULES([BLKID], [blkid >= 2.20],
+                [AC_DEFINE(HAVE_BLKID, 1, [Define if blkid is available]) have_blkid=yes], have_blkid=no)
+        if test "x$have_blkid" = xno && test "x$enable_blkid" = xyes; then
+                AC_MSG_ERROR([*** blkid support requested but not found])
+        fi
+fi
+AM_CONDITIONAL(HAVE_BLKID, [test "x$have_blkid" = "xyes"])
+
+# ------------------------------------------------------------------------------
+have_selinux=no
+AC_ARG_ENABLE(selinux, AS_HELP_STRING([--disable-selinux], [Disable optional SELINUX support]))
+if test "x$enable_selinux" != "xno"; then
+        PKG_CHECK_MODULES([SELINUX], [libselinux >= 2.1.9],
+                [AC_DEFINE(HAVE_SELINUX, 1, [Define if SELinux is available]) have_selinux=yes], have_selinux=no)
+        if test "x$have_selinux" = xno && test "x$enable_selinux" = xyes; then
+                AC_MSG_ERROR([*** SELinux support requested but libraries not found])
+        fi
+fi
+AM_CONDITIONAL(HAVE_SELINUX, [test "$have_selinux" = "yes"])
+if test "x${have_selinux}" != xno ; then
+        sushell=/sbin/sushell
+else
+        sushell=/bin/bash
+fi
+AC_SUBST(sushell)
+
+# selinux-util.c uses struct mallinfo which is not available for all C libraries (musl).
+AC_CHECK_FUNCS([mallinfo])
+
+# ------------------------------------------------------------------------------
+
+AC_CHECK_DECL([unshare],
+        [AC_DEFINE(HAVE_UNSHARE, 1, [Define if unshare is declared])],
+        [AC_CHECK_DECL([SYS_unshare],
+                [ ] ,
+                [AC_MSG_ERROR([*** unshare nor SYS_unshare found.])],
+                [#include <syscall.h>])],
+        [#include <sched.h>])
+
+# ------------------------------------------------------------------------------
+AC_PATH_TOOL(GPERF, gperf)
+if test -z "$GPERF" ; then
+        AC_MSG_ERROR([*** gperf not found])
+fi
+
+# ------------------------------------------------------------------------------
+AC_ARG_ENABLE([manpages], AS_HELP_STRING([--disable-manpages],[disable manpages]),[],[enable_manpages=no])
+AM_CONDITIONAL(ENABLE_MANPAGES, [test "x$enable_manpages" = "xyes"])
+
+# ------------------------------------------------------------------------------
+if test "x$cross_compiling" = "xno" ; then
+       AC_CHECK_FILES([/usr/share/pci.ids], [pciids=/usr/share/pci.ids])
+       AC_CHECK_FILES([/usr/share/hwdata/pci.ids], [pciids=/usr/share/hwdata/pci.ids])
+       AC_CHECK_FILES([/usr/share/misc/pci.ids], [pciids=/usr/share/misc/pci.ids])
+fi
+
+AC_ARG_WITH(usb-ids-path,
+       [AS_HELP_STRING([--with-usb-ids-path=DIR], [Path to usb.ids file])],
+       [USB_IDS_PATH=${withval} ; USB_IDS="${USB_IDS_PATH}/usb.ids" ],
+       [if test -n "$usdids" ; then
+              USB_IDS="$usbids"
+       else
+              PKG_CHECK_MODULES(USBUTILS, usbutils >= 0.82)
+              AC_SUBST([USB_IDS], [$($PKG_CONFIG --variable=usbids usbutils)])
+       fi])
+if test -z "$USB_IDS" ; then
+  USB_IDS_PATH="${udevhwdbdir}"
+  USB_IDS="usb.ids"
+fi
+AC_MSG_CHECKING([for USB IDs database location])
+AC_MSG_RESULT([$USB_IDS])
+AC_SUBST(USB_IDS)
+
+AC_ARG_WITH(pci-ids-path,
+       [AS_HELP_STRING([--with-pci-ids-path=DIR], [Path to pci.ids file])],
+       [PCI_IDS_PATH=${withval} ; PCI_IDS="${PCI_IDS_PATH}/pci.ids" ],
+       [if test -n "$pciids" ; then
+              PCI_IDS="$pciids"
+       else
+              PCI_IDS="pci.ids"
+       fi])
+AC_MSG_CHECKING([for PCI IDs database location])
+AC_MSG_RESULT([$PCI_IDS])
+AC_SUBST(PCI_IDS)
+
+AC_ARG_WITH(misc-ids-path,
+       [AS_HELP_STRING([--with-misc-ids-path=DIR], [Path to unique ids files])],
+       [MISC_IDS_PATH=${withval}], [MISC_IDS_PATH="/usr/share/hwdata"])
+AC_MSG_CHECKING([for MISC IDs database location])
+AC_MSG_RESULT([$MISC_IDS_PATH])
+AC_SUBST(MISC_IDS_PATH)
+
+AC_ARG_ENABLE(update-ids-script,
+       AS_HELP_STRING(--disable-update-ids-script, [disable installing update-udev-ids.pl @<:@default=install@:>@]))
+AM_CONDITIONAL([INSTALL_UPDATE_IDS_SCRIPT], [test "x$enable_update_ids_script" != "xno"])
+
+# ------------------------------------------------------------------------------
+have_kmod=no
+AC_ARG_ENABLE(kmod, AS_HELP_STRING([--disable-kmod], [disable loadable modules support]))
+if test "x$enable_kmod" != "xno"; then
+        PKG_CHECK_EXISTS([ libkmod ], have_kmod=yes, have_kmod=no)
+        if test "x$have_kmod" = "xyes"; then
+                PKG_CHECK_MODULES(KMOD, [ libkmod >= 15 ],
+                        [AC_DEFINE(HAVE_KMOD, 1, [Define if kmod is available])],
+                        AC_MSG_ERROR([*** kmod version >= 15 not found]))
+        fi
+        if test "x$have_kmod" = xno && test "x$enable_kmod" = xyes; then
+                AC_MSG_ERROR([*** kmod support requested, but libraries not found])
+        fi
+fi
+AM_CONDITIONAL(HAVE_KMOD, [test "$have_kmod" = "yes"])
+
+# ------------------------------------------------------------------------------
+
+AC_ARG_ENABLE([hwdb], AS_HELP_STRING([--enable-hwdb],[install hwdb.d files]),[],[enable_hwdb=yes])
+AM_CONDITIONAL(ENABLE_HWDB, [test "x$enable_hwdb" = "xyes"])
+
+# ------------------------------------------------------------------------------
+# rule-generator - persistent network and optical device rule generator
+# ------------------------------------------------------------------------------
+AC_ARG_ENABLE([rule-generator],
+        AS_HELP_STRING([--enable-rule-generator], [enable legacy persistent network, cdrom support]),
+        [], [enable_rule_generator=no])
+
+if test "x${enable_rule_generator}" != xno; then
+        AC_DEFINE([ENABLE_RULE_GENERATOR], [1], [Define if we are enabling rule generator])
+fi
+
+AM_CONDITIONAL([ENABLE_RULE_GENERATOR], [test "x$enable_rule_generator" = xyes])
+
+# ------------------------------------------------------------------------------
+# mtd_probe - autoloads FTL module for mtd devices
+# ------------------------------------------------------------------------------
+AC_ARG_ENABLE([mtd_probe],
+        AS_HELP_STRING([--disable-mtd_probe], [disable MTD support]),
+        [], [enable_mtd_probe=yes])
+AM_CONDITIONAL([ENABLE_MTD_PROBE], [test "x$enable_mtd_probe" = xyes])
+
+# ------------------------------------------------------------------------------
+
+AC_CONFIG_FILES([Makefile
+                 hwdb/Makefile
+                 hwdb/ids-update.pl
+                 man/Makefile
+                 rule_generator/Makefile
+                 rule_generator/write_net_rules
+                 rules/Makefile
+                 src/Makefile
+                 src/ata_id/Makefile
+                 src/cdrom_id/Makefile
+                 src/collect/Makefile
+                 src/mtd_probe/Makefile
+                 src/scsi_id/Makefile
+                 src/v4l_id/Makefile
+                 src/shared/Makefile
+                 src/libudev/Makefile
+                 src/libudev/libudev.pc
+                 src/udev/Makefile
+                 src/udev/udev.pc
+                 test/Makefile], [chmod a+x hwdb/ids-update.pl])
+
+AC_OUTPUT
+
+# ------------------------------------------------------------------------------
+
+AC_MSG_RESULT([
+        prefix:                  ${prefix}
+        exec_prefix:             ${exec_prefix}
+        sysconfdir:              ${sysconfdir}
+        datadir:                 ${datadir}
+        includedir:              ${includedir}
+        bindir:                  ${bindir}
+        libdir:                  ${libdir}
+
+        rootprefix:              ${rootprefix}
+        rootlibdir:              ${rootlibdir}
+        rootlibexecdir:          ${rootlibexecdir}
+        datarootdir:             ${datarootdir}
+        rootrundir:              ${rootrundir}
+
+        udevconfdir:             ${udevconfdir}
+        udevconffile:            ${udevconffile}
+        udevhwdbdir:             ${udevhwdbdir}
+        udevhwdbbin:             ${udevhwdbbin}
+        udevlibexecdir:          ${udevlibexecdir}
+        udevkeymapdir:           ${udevkeymapdir}
+        udevkeymapforceredir:    ${udevkeymapforceredir}
+        udevrulesdir:            ${udevrulesdir}
+
+        pkgconfiglibdir:         ${libdir}/pkgconfig
+        sharepkgconfigdir        ${datadir}/pkgconfig
+])
+
+# ------------------------------------------------------------------------------
+
+dnl Set configured scripts executable
+if test -f  src/keymap/check-keymaps.sh; then
+        chmod +x src/keymap/check-keymaps.sh
+fi
+
+if test -f src/keymap/keyboard-force-release.sh; then
+        chmod +x src/keymap/keyboard-force-release.sh
+fi
+
Index: a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new/hwdb/Makefile.am
===================================================================
--- a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new/hwdb/Makefile.am	(nonexistent)
+++ a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new/hwdb/Makefile.am	(revision 5)
@@ -0,0 +1,30 @@
+ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
+
+dist_udevhwdb_DATA = \
+	20-OUI.hwdb \
+	20-acpi-vendor.hwdb \
+	20-bluetooth-vendor-product.hwdb \
+	20-net-ifname.hwdb \
+	20-pci-classes.hwdb \
+	20-pci-vendor-model.hwdb \
+	20-sdio-classes.hwdb \
+	20-sdio-vendor-model.hwdb \
+	20-usb-classes.hwdb \
+	20-usb-vendor-model.hwdb \
+	20-vmbus-class.hwdb \
+	60-evdev.hwdb \
+	60-keyboard.hwdb \
+	60-sensor.hwdb \
+	70-mouse.hwdb \
+	70-pointingstick.hwdb \
+	70-touchpad.hwdb
+
+sbin_SCRIPTS =
+
+if INSTALL_UPDATE_IDS_SCRIPT
+sbin_SCRIPTS += update-udev-ids.pl
+
+update-udev-ids.pl: ids-update.pl
+	cp $< $@
+	chmod 755 $@
+endif
Index: a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new/hwdb/ids-update.pl.in
===================================================================
--- a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new/hwdb/ids-update.pl.in	(nonexistent)
+++ a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new/hwdb/ids-update.pl.in	(revision 5)
@@ -0,0 +1,375 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+sub usb_vendor {
+        my $vendor;
+
+        open(IN, "<", "@USB_IDS@");
+        open(OUT, ">", "@udevhwdbdir@/20-usb-vendor-model.hwdb");
+        print(OUT "# This file is part of systemd.\n" .
+                  "#\n" .
+                  "# Data imported from: http://www.linux-usb.org/usb.ids\n");
+
+        while (my $line = <IN>) {
+                $line =~ s/\s+$//;
+                $line =~ m/^([0-9a-f]{4})\s*(.+)$/;
+                if (defined $1) {
+                        $vendor = uc $1;
+                        my $text = $2;
+                        print(OUT "\n");
+                        print(OUT "usb:v" . $vendor . "*\n");
+                        print(OUT " ID_VENDOR_FROM_DATABASE=" . $text . "\n");
+                        next;
+                }
+
+                $line =~ m/^\t([0-9a-f]{4})\s*(.+)$/;
+                if (defined $1) {
+                        my $model = uc $1;
+                        my $text = $2;
+                        print(OUT "\n");
+                        print(OUT "usb:v" . $vendor . "p" . $model . "*\n");
+                        print(OUT " ID_MODEL_FROM_DATABASE=" . $text . "\n");
+                }
+        }
+
+        close(IN);
+        close(OUT);
+}
+
+sub usb_classes {
+        my $class;
+        my $subclass;
+        my $protocol;
+
+        open(IN, "<", "@USB_IDS@");
+        open(OUT, ">", "@udevhwdbdir@/20-usb-classes.hwdb");
+        print(OUT "# This file is part of systemd.\n" .
+                  "#\n" .
+                  "# Data imported from: http://www.linux-usb.org/usb.ids\n");
+
+        while (my $line = <IN>) {
+                $line =~ s/\s+$//;
+
+                $line =~ m/^C\ ([0-9a-f]{2})\s*(.+)$/;
+                if (defined $1) {
+                        $class = uc $1;
+                        if ($class =~ m/^00$/) {
+                                next;
+                        }
+                        my $text = $2;
+                        print(OUT "\n");
+                        print(OUT "usb:v*p*d*dc" . $class . "*\n");
+                        print(OUT " ID_USB_CLASS_FROM_DATABASE=" . $text . "\n");
+                        next;
+                }
+
+                if (not defined $class) {
+                        next;
+                } elsif ($line =~ m/^$/) {
+                        last;
+                }
+
+                $line =~ m/^\t([0-9a-f]{2})\s*(.+)$/;
+                if (defined $1) {
+                        $subclass = uc $1;
+                        if ($subclass =~ m/^00$/) {
+                                next;
+                        }
+                        my $text = $2;
+                        if ($text =~ m/^(\?|None|Unused)$/) {
+                                next;
+                        }
+                        print(OUT "\n");
+                        print(OUT "usb:v*p*d*dc" . $class . "dsc" . $subclass . "*\n");
+                        print(OUT " ID_USB_SUBCLASS_FROM_DATABASE=" . $text . "\n");
+                        next;
+                }
+
+                $line =~ m/^\t\t([0-9a-f]{2})\s*(.+)$/;
+                if (defined $1) {
+                        $protocol = uc $1;
+                        my $text = $2;
+                        if ($text =~ m/^(\?|None|Unused)$/) {
+                                next;
+                        }
+                        print(OUT "\n");
+                        print(OUT "usb:v*p*d*dc" .  $class . "dsc" . $subclass . "dp" . $protocol . "*\n");
+                        print(OUT " ID_USB_PROTOCOL_FROM_DATABASE=" . $text . "\n");
+                }
+        }
+
+        close(IN);
+        close(OUT);
+}
+
+sub pci_vendor {
+        my $vendor;
+        my $device;
+        my $device_text;
+
+        open(IN, "<", "@PCI_IDS@");
+        open(OUT, ">", "@udevhwdbdir@/20-pci-vendor-model.hwdb");
+        print(OUT "# This file is part of systemd.\n" .
+                  "#\n" .
+                  "# Data imported from: http://pci-ids.ucw.cz/v2.2/pci.ids\n");
+
+        while (my $line = <IN>) {
+                $line =~ s/\s+$//;
+                $line =~ m/^([0-9a-f]{4})\s*(.+)$/;
+
+                if (defined $1) {
+                        $vendor = uc $1;
+                        my $text = $2;
+                        print(OUT "\n");
+                        print(OUT "pci:v0000" . $vendor . "*\n");
+                        print(OUT " ID_VENDOR_FROM_DATABASE=" . $text . "\n");
+                        next;
+                }
+
+                $line =~ m/^\t([0-9a-f]{4})\s*(.+)$/;
+                if (defined $1) {
+                        $device = uc $1;
+                        $device_text = $2;
+                        print(OUT "\n");
+                        print(OUT "pci:v0000" . $vendor . "d0000" . $device . "*\n");
+                        print(OUT " ID_MODEL_FROM_DATABASE=" . $device_text . "\n");
+                        next;
+                }
+
+                $line =~ m/^\t\t([0-9a-f]{4})\s*([0-9a-f]{4})\s*(.*)$/;
+                if (defined $1) {
+                        my $sub_vendor = uc $1;
+                        my $sub_device = uc $2;
+                        my $sub_text = $3;
+                        $sub_text =~ s/^\Q$device_text\E\s*//;
+                        $sub_text =~ s/(.+)/\ ($1)/;
+                        print(OUT "\n");
+                        print(OUT "pci:v0000" . $vendor . "d0000" . $device . "sv0000" . $sub_vendor . "sd0000" . $sub_device . "*\n");
+                        print(OUT " ID_MODEL_FROM_DATABASE=" . $device_text . $sub_text . "\n");
+                }
+        }
+
+        close(IN);
+        close(OUT);
+}
+
+sub pci_classes {
+        my $class;
+        my $subclass;
+        my $interface;
+
+        open(IN, "<", "@PCI_IDS@");
+        open(OUT, ">", "@udevhwdbdir@/20-pci-classes.hwdb");
+        print(OUT "# This file is part of systemd.\n" .
+                  "#\n" .
+                  "# Data imported from: http://pci-ids.ucw.cz/v2.2/pci.ids\n");
+
+        while (my $line = <IN>) {
+                $line =~ s/\s+$//;
+
+                $line =~ m/^C\ ([0-9a-f]{2})\s*(.+)$/;
+                if (defined $1) {
+                        $class = uc $1;
+                        my $text = $2;
+                        print(OUT "\n");
+                        print(OUT "pci:v*d*sv*sd*bc" . $class . "*\n");
+                        print(OUT " ID_PCI_CLASS_FROM_DATABASE=" . $text . "\n");
+                        next;
+                }
+
+                if (not defined $class) {
+                        next;
+                } elsif ($line =~ m/^$/) {
+                        last;
+                }
+
+                $line =~ m/^\t([0-9a-f]{2})\s*(.+)$/;
+                if (defined $1) {
+                        $subclass = uc $1;
+                        my $text = $2;
+                        print(OUT "\n");
+                        print(OUT "pci:v*d*sv*sd*bc" . $class . "sc" . $subclass . "*\n");
+                        print(OUT " ID_PCI_SUBCLASS_FROM_DATABASE=" . $text . "\n");
+                        next;
+                }
+
+                $line =~ m/^\t\t([0-9a-f]{2})\s*(.+)$/;
+                if (defined $1) {
+                        $interface = uc $1;
+                        my $text = $2;
+                        print(OUT "\n");
+                        print(OUT "pci:v*d*sv*sd*bc" .  $class . "sc" . $subclass . "i" . $interface . "*\n");
+                        print(OUT " ID_PCI_INTERFACE_FROM_DATABASE=" . $text . "\n");
+                }
+        }
+
+        close(IN);
+        close(OUT);
+}
+
+sub sdio_vendor {
+        my $vendor;
+        my $device;
+
+        open(IN, "<", "@MISC_IDS_PATH@/sdio.ids");
+        open(OUT, ">", "@udevhwdbdir@/20-sdio-vendor-model.hwdb");
+        print(OUT "# This file is part of systemd.\n" .
+                  "#\n" .
+                  "# Data imported from: hwdb/sdio.ids\n");
+
+        while (my $line = <IN>) {
+                $line =~ s/\s+$//;
+                $line =~ m/^([0-9a-f]{4})\s*(.+)$/;
+
+                if (defined $1) {
+                        $vendor = uc $1;
+                        my $text = $2;
+                        print(OUT "\n");
+                        print(OUT "sdio:c*v" . $vendor . "*\n");
+                        print(OUT " ID_VENDOR_FROM_DATABASE=" . $text . "\n");
+                        next;
+                }
+
+                $line =~ m/^\t([0-9a-f]{4})\s*(.+)$/;
+                if (defined $1) {
+                        $device = uc $1;
+                        my $text = $2;
+                        print(OUT "\n");
+                        print(OUT "sdio:c*v" . $vendor . "d" . $device . "*\n");
+                        print(OUT " ID_MODEL_FROM_DATABASE=" . $text . "\n");
+                        next;
+                }
+        }
+
+        close(IN);
+        close(OUT);
+}
+
+sub sdio_classes {
+        my $class;
+        my $subclass;
+        my $interface;
+
+        open(IN, "<", "@MISC_IDS_PATH@/sdio.ids");
+        open(OUT, ">", "@udevhwdbdir@/20-sdio-classes.hwdb");
+        print(OUT "# This file is part of systemd.\n" .
+                  "#\n" .
+                  "# Data imported from: hwdb/sdio.ids\n");
+
+        while (my $line = <IN>) {
+                $line =~ s/\s+$//;
+
+                $line =~ m/^C\ ([0-9a-f]{2})\s*(.+)$/;
+                if (defined $1) {
+                        $class = uc $1;
+                        my $text = $2;
+                        print(OUT "\n");
+                        print(OUT "sdio:c" . $class . "v*d*\n");
+                        print(OUT " ID_SDIO_CLASS_FROM_DATABASE=" . $text . "\n");
+                        next;
+                }
+        }
+
+        close(IN);
+        close(OUT);
+}
+
+# MAC Address Block Large/Medium/Small
+# Large  MA-L 24/24 bit (OUI)
+# Medium MA-M 28/20 bit (OUI prefix owned by IEEE)
+# Small  MA-S 36/12 bit (OUI prefix owned by IEEE)
+sub oui {
+        my $prefix;
+        my %ieee_prefixes = ();
+
+        open(OUT, ">", "@udevhwdbdir@/20-OUI.hwdb");
+        print(OUT "# This file is part of systemd.\n" .
+                  "#\n" .
+                  "# Data imported from:\n" .
+                  "#   https://services13.ieee.org/RST/standards-ra-web/rest/assignments/download/?registry=MA-L&format=txt\n" .
+                  "#   https://services13.ieee.org/RST/standards-ra-web/rest/assignments/download/?registry=MA-M&format=txt\n" .
+                  "#   https://services13.ieee.org/RST/standards-ra-web/rest/assignments/download/?registry=MA-S&format=txt\n");
+
+        open(IN, "<", "@MISC_IDS_PATH@/ma-small.txt");
+        while (my $line = <IN>) {
+                $line =~ s/^ +//;
+                $line =~ s/\s+$//;
+                $line =~ m/^([0-9A-F]{2})-([0-9A-F]{2})-([0-9A-F]{2})\s*\(hex\)\s*.+$/;
+                if (defined $1) {
+                        $prefix = $1 . $2 . $3;
+                        $ieee_prefixes{ $prefix } = 1;
+                        next;
+                }
+
+                $line =~ m/^([0-9A-F]{3})000-\g1FFF\s*\(base 16\)\s*(.+)$/;
+                if (defined $1) {
+                        my $vendor = uc $1;
+                        my $text = $2;
+
+                        print(OUT "\n");
+                        print(OUT "OUI:" . $prefix . $vendor . "*\n");
+                        print(OUT " ID_OUI_FROM_DATABASE=" . $text . "\n");
+                }
+        }
+        close(IN);
+
+        open(IN, "<", "@MISC_IDS_PATH@/ma-medium.txt");
+        while (my $line = <IN>) {
+                $line =~ s/^ +//;
+                $line =~ s/\s+$//;
+                $line =~ m/^([0-9A-F]{2})-([0-9A-F]{2})-([0-9A-F]{2})\s*\(hex\)\s*.+$/;
+                if (defined $1) {
+                        $prefix = $1 . $2 . $3;
+                        $ieee_prefixes{ $prefix } = 1;
+                        next;
+                }
+
+                $line =~ m/^([0-9A-F])00000-\g1FFFFF\s*\(base 16\)\s*(.+)$/;
+                if (defined $1) {
+                        my $vendor = uc $1;
+                        my $text = $2;
+
+                        print(OUT "\n");
+                        print(OUT "OUI:" . $prefix . $vendor . "*\n");
+                        print(OUT " ID_OUI_FROM_DATABASE=" . $text . "\n");
+                }
+        }
+
+        open(IN, "<", "@MISC_IDS_PATH@/ma-large.txt");
+        while (my $line = <IN>) {
+                $line =~ s/^ +//;
+                $line =~ s/\s+$//;
+                $line =~ m/^([0-9A-F]{6})\s*\(base 16\)\s*(.+)$/;
+                if (defined $1) {
+                        my $vendor = uc $1;
+                        my $text = $2;
+
+                        if ($text =~ m/^IEEE REGISTRATION AUTHORITY/) {
+                                next;
+                        }
+
+                        # skip the IEEE owned prefixes
+                        if (! exists $ieee_prefixes{ $vendor }) {
+                                print(OUT "\n");
+                                print(OUT "OUI:" . $vendor . "*\n");
+                                print(OUT " ID_OUI_FROM_DATABASE=" . $text . "\n");
+                        }
+                }
+        }
+        close(IN);
+
+        close(OUT);
+}
+
+usb_vendor();
+usb_classes();
+
+pci_vendor();
+pci_classes();
+
+sdio_vendor();
+sdio_classes();
+
+oui();
Index: a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new/hwdb
===================================================================
--- a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new/hwdb	(nonexistent)
+++ a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new/hwdb	(revision 5)

Property changes on: a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new/hwdb
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new
===================================================================
--- a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new	(nonexistent)
+++ a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new	(revision 5)

Property changes on: a/eudev/create-3.2.10-ids-pl-patch/eudev-3.2.10-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/create-3.2.10-ids-pl-patch/file.list
===================================================================
--- a/eudev/create-3.2.10-ids-pl-patch/file.list	(nonexistent)
+++ a/eudev/create-3.2.10-ids-pl-patch/file.list	(revision 5)
@@ -0,0 +1,3 @@
+eudev-3.2.10/configure.ac
+eudev-3.2.10/hwdb/Makefile.am
+eudev-3.2.10/hwdb/ids-update.pl
Index: a/eudev/create-3.2.10-ids-pl-patch
===================================================================
--- a/eudev/create-3.2.10-ids-pl-patch	(nonexistent)
+++ a/eudev/create-3.2.10-ids-pl-patch	(revision 5)

Property changes on: a/eudev/create-3.2.10-ids-pl-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/create-3.2.10-udev-default-patch/create.patch.sh
===================================================================
--- a/eudev/create-3.2.10-udev-default-patch/create.patch.sh	(nonexistent)
+++ a/eudev/create-3.2.10-udev-default-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=3.2.10
+
+tar --files-from=file.list -xJvf ../eudev-$VERSION.tar.xz
+mv eudev-$VERSION eudev-$VERSION-orig
+
+cp -rf ./eudev-$VERSION-new ./eudev-$VERSION
+
+diff --unified -Nr  eudev-$VERSION-orig  eudev-$VERSION > eudev-$VERSION-udev-default.patch
+
+mv eudev-$VERSION-udev-default.patch ../patches
+
+rm -rf ./eudev-$VERSION
+rm -rf ./eudev-$VERSION-orig

Property changes on: a/eudev/create-3.2.10-udev-default-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/eudev/create-3.2.10-udev-default-patch/eudev-3.2.10-new/rules/50-udev-default.rules
===================================================================
--- a/eudev/create-3.2.10-udev-default-patch/eudev-3.2.10-new/rules/50-udev-default.rules	(nonexistent)
+++ a/eudev/create-3.2.10-udev-default-patch/eudev-3.2.10-new/rules/50-udev-default.rules	(revision 5)
@@ -0,0 +1,87 @@
+# do not edit this file, it will be overwritten on update
+
+# run a command on remove events
+ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}"
+ACTION=="remove", GOTO="default_end"
+
+SUBSYSTEM=="virtio-ports", KERNEL=="vport*", ATTR{name}=="?*", SYMLINK+="virtio-ports/$attr{name}"
+
+# select "system RTC" or just use the first one
+SUBSYSTEM=="rtc", ATTR{hctosys}=="1", SYMLINK+="rtc"
+SUBSYSTEM=="rtc", KERNEL=="rtc0", SYMLINK+="rtc", OPTIONS+="link_priority=-100"
+
+SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb"
+ENV{MODALIAS}!="", IMPORT{builtin}="hwdb --subsystem=$env{SUBSYSTEM}"
+
+ACTION!="add", GOTO="default_end"
+
+SUBSYSTEM=="tty", KERNEL=="ptmx", GROUP="tty", MODE="0666"
+SUBSYSTEM=="tty", KERNEL=="tty", GROUP="tty", MODE="0666"
+SUBSYSTEM=="tty", KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620"
+SUBSYSTEM=="tty", KERNEL=="sclp_line[0-9]*", GROUP="tty", MODE="0620"
+SUBSYSTEM=="tty", KERNEL=="ttysclp[0-9]*", GROUP="tty", MODE="0620"
+SUBSYSTEM=="tty", KERNEL=="3270/tty[0-9]*", GROUP="tty", MODE="0620"
+SUBSYSTEM=="vc", KERNEL=="vcs*|vcsa*", GROUP="tty"
+KERNEL=="tty[A-Z]*[0-9]|ttymxc[0-9]*|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout"
+
+SUBSYSTEM=="mem", KERNEL=="mem|kmem|port", GROUP="kmem", MODE="0640"
+
+SUBSYSTEM=="input", GROUP="input"
+SUBSYSTEM=="input", KERNEL=="js[0-9]*", MODE="0664"
+
+SUBSYSTEM=="video4linux", GROUP="video"
+SUBSYSTEM=="graphics", GROUP="video"
+SUBSYSTEM=="drm", GROUP="video"
+SUBSYSTEM=="dvb", GROUP="video"
+SUBSYSTEM=="media", GROUP="video"
+SUBSYSTEM=="cec", GROUP="video"
+
+SUBSYSTEM=="drm", GROUP="video", MODE="0666"
+SUBSYSTEM=="kfd", GROUP="video", MODE="0666"
+
+SUBSYSTEM=="sound", GROUP="audio", \
+  OPTIONS+="static_node=snd/seq", OPTIONS+="static_node=snd/timer"
+
+SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664"
+
+SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x00010*", GROUP="video"
+SUBSYSTEM=="firewire", ATTR{units}=="*0x00b09d:0x00010*", GROUP="video"
+SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x010001*", GROUP="video"
+SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x014001*", GROUP="video"
+
+KERNEL=="parport[0-9]*", GROUP="lp"
+SUBSYSTEM=="printer", KERNEL=="lp*", GROUP="lp"
+SUBSYSTEM=="ppdev", GROUP="lp"
+KERNEL=="lp[0-9]*", GROUP="lp"
+KERNEL=="irlpt[0-9]*", GROUP="lp"
+SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", GROUP="lp"
+
+SUBSYSTEM=="block", GROUP="disk"
+SUBSYSTEM=="block", KERNEL=="sr[0-9]*", GROUP="cdrom"
+SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", GROUP="cdrom"
+KERNEL=="sch[0-9]*", GROUP="cdrom"
+KERNEL=="pktcdvd[0-9]*", GROUP="cdrom"
+KERNEL=="pktcdvd", GROUP="cdrom"
+
+SUBSYSTEM=="scsi_generic|scsi_tape", SUBSYSTEMS=="scsi", ATTRS{type}=="1|8", GROUP="tape"
+SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="0", GROUP="disk"
+KERNEL=="qft[0-9]*|nqft[0-9]*|zqft[0-9]*|nzqft[0-9]*|rawqft[0-9]*|nrawqft[0-9]*", GROUP="disk"
+KERNEL=="loop-control", GROUP="disk", OPTIONS+="static_node=loop-control"
+KERNEL=="btrfs-control", GROUP="disk"
+KERNEL=="rawctl", GROUP="disk"
+SUBSYSTEM=="raw", KERNEL=="raw[0-9]*", GROUP="disk"
+SUBSYSTEM=="aoe", GROUP="disk", MODE="0220"
+SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440"
+
+KERNEL=="rfkill", MODE="0664"
+KERNEL=="tun", MODE="0666", OPTIONS+="static_node=net/tun"
+
+KERNEL=="fuse", MODE="0666", OPTIONS+="static_node=fuse"
+
+# Commented out as these seem to be systemd requirements:
+## The static_node is required on s390x and ppc (they are using MODULE_ALIAS)
+#KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"
+#
+#SUBSYSTEM=="ptp", ATTR{clock_name}=="KVM virtual PTP", SYMLINK += "ptp_kvm"
+
+LABEL="default_end"
Index: a/eudev/create-3.2.10-udev-default-patch/eudev-3.2.10-new/rules
===================================================================
--- a/eudev/create-3.2.10-udev-default-patch/eudev-3.2.10-new/rules	(nonexistent)
+++ a/eudev/create-3.2.10-udev-default-patch/eudev-3.2.10-new/rules	(revision 5)

Property changes on: a/eudev/create-3.2.10-udev-default-patch/eudev-3.2.10-new/rules
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/create-3.2.10-udev-default-patch/eudev-3.2.10-new
===================================================================
--- a/eudev/create-3.2.10-udev-default-patch/eudev-3.2.10-new	(nonexistent)
+++ a/eudev/create-3.2.10-udev-default-patch/eudev-3.2.10-new	(revision 5)

Property changes on: a/eudev/create-3.2.10-udev-default-patch/eudev-3.2.10-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/create-3.2.10-udev-default-patch/file.list
===================================================================
--- a/eudev/create-3.2.10-udev-default-patch/file.list	(nonexistent)
+++ a/eudev/create-3.2.10-udev-default-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+eudev-3.2.10/rules/50-udev-default.rules
Index: a/eudev/create-3.2.10-udev-default-patch
===================================================================
--- a/eudev/create-3.2.10-udev-default-patch	(nonexistent)
+++ a/eudev/create-3.2.10-udev-default-patch	(revision 5)

Property changes on: a/eudev/create-3.2.10-udev-default-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev/patches/README
===================================================================
--- a/eudev/patches/README	(nonexistent)
+++ a/eudev/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/eudev/patches
===================================================================
--- a/eudev/patches	(nonexistent)
+++ a/eudev/patches	(revision 5)

Property changes on: a/eudev/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/eudev
===================================================================
--- a/eudev	(nonexistent)
+++ a/eudev	(revision 5)

Property changes on: a/eudev
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file/Makefile
===================================================================
--- a/file/Makefile	(nonexistent)
+++ a/file/Makefile	(revision 5)
@@ -0,0 +1,62 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/file
+
+versions    = 5.39
+pkgname     = file
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/file-5.39-cross.patch
+patches    += $(CURDIR)/patches/file-5.39-etc-file.patch
+patches    += $(CURDIR)/patches/file-5.39-magic.patch
+patches    += $(CURDIR)/patches/file-5.39-short.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-5.39-cross-patch    ; ./create.patch.sh ) ; \
+	 ( cd create-5.39-etc-file-patch ; ./create.patch.sh ) ; \
+	 ( cd create-5.39-magic-patch    ; ./create.patch.sh ) ; \
+	 ( cd create-5.39-short-patch    ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/file/create-5.39-cross-patch/create.patch.sh
===================================================================
--- a/file/create-5.39-cross-patch/create.patch.sh	(nonexistent)
+++ a/file/create-5.39-cross-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=5.39
+
+tar --files-from=file.list -xzvf ../file-$VERSION.tar.gz
+mv file-$VERSION file-$VERSION-orig
+
+cp -rf ./file-$VERSION-new ./file-$VERSION
+
+diff --unified -Nr  file-$VERSION-orig file-$VERSION > file-$VERSION-cross.patch
+
+mv file-$VERSION-cross.patch ../patches
+
+rm -rf ./file-$VERSION
+rm -rf ./file-$VERSION-orig

Property changes on: a/file/create-5.39-cross-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/file/create-5.39-cross-patch/file-5.39-new/magic/Makefile.am
===================================================================
--- a/file/create-5.39-cross-patch/file-5.39-new/magic/Makefile.am	(nonexistent)
+++ a/file/create-5.39-cross-patch/file-5.39-new/magic/Makefile.am	(revision 5)
@@ -0,0 +1,356 @@
+#
+# $File: Makefile.am,v 1.157 2020/05/21 16:22:47 christos Exp $
+#
+MAGIC_FRAGMENT_BASE = Magdir
+MAGIC_DIR = $(top_srcdir)/magic
+MAGIC_FRAGMENT_DIR = $(MAGIC_DIR)/$(MAGIC_FRAGMENT_BASE)
+
+pkgdata_DATA = magic.mgc
+
+EXTRA_DIST = \
+$(MAGIC_DIR)/Header \
+$(MAGIC_DIR)/Localstuff \
+$(MAGIC_FRAGMENT_DIR)/acorn \
+$(MAGIC_FRAGMENT_DIR)/adi \
+$(MAGIC_FRAGMENT_DIR)/adventure \
+$(MAGIC_FRAGMENT_DIR)/algol68 \
+$(MAGIC_FRAGMENT_DIR)/allegro \
+$(MAGIC_FRAGMENT_DIR)/alliant \
+$(MAGIC_FRAGMENT_DIR)/amanda \
+$(MAGIC_FRAGMENT_DIR)/amigaos \
+$(MAGIC_FRAGMENT_DIR)/android \
+$(MAGIC_FRAGMENT_DIR)/animation \
+$(MAGIC_FRAGMENT_DIR)/aout \
+$(MAGIC_FRAGMENT_DIR)/apache \
+$(MAGIC_FRAGMENT_DIR)/apl \
+$(MAGIC_FRAGMENT_DIR)/apple \
+$(MAGIC_FRAGMENT_DIR)/application \
+$(MAGIC_FRAGMENT_DIR)/applix \
+$(MAGIC_FRAGMENT_DIR)/apt \
+$(MAGIC_FRAGMENT_DIR)/archive \
+$(MAGIC_FRAGMENT_DIR)/asf \
+$(MAGIC_FRAGMENT_DIR)/assembler \
+$(MAGIC_FRAGMENT_DIR)/asterix \
+$(MAGIC_FRAGMENT_DIR)/att3b \
+$(MAGIC_FRAGMENT_DIR)/audio \
+$(MAGIC_FRAGMENT_DIR)/basis \
+$(MAGIC_FRAGMENT_DIR)/beetle \
+$(MAGIC_FRAGMENT_DIR)/ber \
+$(MAGIC_FRAGMENT_DIR)/bflt \
+$(MAGIC_FRAGMENT_DIR)/bhl \
+$(MAGIC_FRAGMENT_DIR)/bioinformatics \
+$(MAGIC_FRAGMENT_DIR)/biosig \
+$(MAGIC_FRAGMENT_DIR)/blackberry \
+$(MAGIC_FRAGMENT_DIR)/blcr \
+$(MAGIC_FRAGMENT_DIR)/blender \
+$(MAGIC_FRAGMENT_DIR)/blit \
+$(MAGIC_FRAGMENT_DIR)/bout \
+$(MAGIC_FRAGMENT_DIR)/bsdi \
+$(MAGIC_FRAGMENT_DIR)/bsi \
+$(MAGIC_FRAGMENT_DIR)/btsnoop \
+$(MAGIC_FRAGMENT_DIR)/c-lang \
+$(MAGIC_FRAGMENT_DIR)/c64 \
+$(MAGIC_FRAGMENT_DIR)/cad \
+$(MAGIC_FRAGMENT_DIR)/cafebabe \
+$(MAGIC_FRAGMENT_DIR)/cbor \
+$(MAGIC_FRAGMENT_DIR)/cddb \
+$(MAGIC_FRAGMENT_DIR)/chord \
+$(MAGIC_FRAGMENT_DIR)/cisco \
+$(MAGIC_FRAGMENT_DIR)/citrus \
+$(MAGIC_FRAGMENT_DIR)/clarion \
+$(MAGIC_FRAGMENT_DIR)/claris \
+$(MAGIC_FRAGMENT_DIR)/clipper \
+$(MAGIC_FRAGMENT_DIR)/clojure \
+$(MAGIC_FRAGMENT_DIR)/coff \
+$(MAGIC_FRAGMENT_DIR)/commands \
+$(MAGIC_FRAGMENT_DIR)/communications \
+$(MAGIC_FRAGMENT_DIR)/compress \
+$(MAGIC_FRAGMENT_DIR)/console \
+$(MAGIC_FRAGMENT_DIR)/convex \
+$(MAGIC_FRAGMENT_DIR)/coverage \
+$(MAGIC_FRAGMENT_DIR)/cracklib \
+$(MAGIC_FRAGMENT_DIR)/ctags \
+$(MAGIC_FRAGMENT_DIR)/ctf \
+$(MAGIC_FRAGMENT_DIR)/cubemap \
+$(MAGIC_FRAGMENT_DIR)/cups \
+$(MAGIC_FRAGMENT_DIR)/dact \
+$(MAGIC_FRAGMENT_DIR)/database \
+$(MAGIC_FRAGMENT_DIR)/dataone \
+$(MAGIC_FRAGMENT_DIR)/dbpf \
+$(MAGIC_FRAGMENT_DIR)/der \
+$(MAGIC_FRAGMENT_DIR)/diamond \
+$(MAGIC_FRAGMENT_DIR)/dif \
+$(MAGIC_FRAGMENT_DIR)/diff \
+$(MAGIC_FRAGMENT_DIR)/digital \
+$(MAGIC_FRAGMENT_DIR)/dolby \
+$(MAGIC_FRAGMENT_DIR)/dump \
+$(MAGIC_FRAGMENT_DIR)/dyadic \
+$(MAGIC_FRAGMENT_DIR)/ebml \
+$(MAGIC_FRAGMENT_DIR)/edid \
+$(MAGIC_FRAGMENT_DIR)/editors \
+$(MAGIC_FRAGMENT_DIR)/efi \
+$(MAGIC_FRAGMENT_DIR)/elf \
+$(MAGIC_FRAGMENT_DIR)/encore \
+$(MAGIC_FRAGMENT_DIR)/epoc \
+$(MAGIC_FRAGMENT_DIR)/erlang \
+$(MAGIC_FRAGMENT_DIR)/espressif \
+$(MAGIC_FRAGMENT_DIR)/esri \
+$(MAGIC_FRAGMENT_DIR)/fcs \
+$(MAGIC_FRAGMENT_DIR)/filesystems \
+$(MAGIC_FRAGMENT_DIR)/finger \
+$(MAGIC_FRAGMENT_DIR)/flash \
+$(MAGIC_FRAGMENT_DIR)/flif \
+$(MAGIC_FRAGMENT_DIR)/fonts \
+$(MAGIC_FRAGMENT_DIR)/forth \
+$(MAGIC_FRAGMENT_DIR)/fortran \
+$(MAGIC_FRAGMENT_DIR)/frame \
+$(MAGIC_FRAGMENT_DIR)/freebsd \
+$(MAGIC_FRAGMENT_DIR)/fsav \
+$(MAGIC_FRAGMENT_DIR)/fusecompress \
+$(MAGIC_FRAGMENT_DIR)/games \
+$(MAGIC_FRAGMENT_DIR)/gcc \
+$(MAGIC_FRAGMENT_DIR)/gconv \
+$(MAGIC_FRAGMENT_DIR)/geo \
+$(MAGIC_FRAGMENT_DIR)/geos \
+$(MAGIC_FRAGMENT_DIR)/gimp \
+$(MAGIC_FRAGMENT_DIR)/git \
+$(MAGIC_FRAGMENT_DIR)/glibc \
+$(MAGIC_FRAGMENT_DIR)/gnome \
+$(MAGIC_FRAGMENT_DIR)/gnu \
+$(MAGIC_FRAGMENT_DIR)/gnumeric \
+$(MAGIC_FRAGMENT_DIR)/gpt \
+$(MAGIC_FRAGMENT_DIR)/gpu \
+$(MAGIC_FRAGMENT_DIR)/grace \
+$(MAGIC_FRAGMENT_DIR)/graphviz \
+$(MAGIC_FRAGMENT_DIR)/gringotts \
+$(MAGIC_FRAGMENT_DIR)/guile \
+$(MAGIC_FRAGMENT_DIR)/hardware \
+$(MAGIC_FRAGMENT_DIR)/hitachi-sh \
+$(MAGIC_FRAGMENT_DIR)/hp \
+$(MAGIC_FRAGMENT_DIR)/human68k \
+$(MAGIC_FRAGMENT_DIR)/ibm370 \
+$(MAGIC_FRAGMENT_DIR)/ibm6000 \
+$(MAGIC_FRAGMENT_DIR)/icc \
+$(MAGIC_FRAGMENT_DIR)/iff \
+$(MAGIC_FRAGMENT_DIR)/images \
+$(MAGIC_FRAGMENT_DIR)/inform \
+$(MAGIC_FRAGMENT_DIR)/intel \
+$(MAGIC_FRAGMENT_DIR)/interleaf \
+$(MAGIC_FRAGMENT_DIR)/island \
+$(MAGIC_FRAGMENT_DIR)/ispell \
+$(MAGIC_FRAGMENT_DIR)/isz \
+$(MAGIC_FRAGMENT_DIR)/java \
+$(MAGIC_FRAGMENT_DIR)/javascript \
+$(MAGIC_FRAGMENT_DIR)/jpeg \
+$(MAGIC_FRAGMENT_DIR)/karma \
+$(MAGIC_FRAGMENT_DIR)/kde \
+$(MAGIC_FRAGMENT_DIR)/keepass \
+$(MAGIC_FRAGMENT_DIR)/kerberos \
+$(MAGIC_FRAGMENT_DIR)/kicad \
+$(MAGIC_FRAGMENT_DIR)/kml \
+$(MAGIC_FRAGMENT_DIR)/lecter \
+$(MAGIC_FRAGMENT_DIR)/lex \
+$(MAGIC_FRAGMENT_DIR)/lif \
+$(MAGIC_FRAGMENT_DIR)/linux \
+$(MAGIC_FRAGMENT_DIR)/lisp \
+$(MAGIC_FRAGMENT_DIR)/llvm \
+$(MAGIC_FRAGMENT_DIR)/lua \
+$(MAGIC_FRAGMENT_DIR)/luks \
+$(MAGIC_FRAGMENT_DIR)/m4 \
+$(MAGIC_FRAGMENT_DIR)/mach \
+$(MAGIC_FRAGMENT_DIR)/macintosh \
+$(MAGIC_FRAGMENT_DIR)/macos \
+$(MAGIC_FRAGMENT_DIR)/magic \
+$(MAGIC_FRAGMENT_DIR)/mail.news \
+$(MAGIC_FRAGMENT_DIR)/make \
+$(MAGIC_FRAGMENT_DIR)/map \
+$(MAGIC_FRAGMENT_DIR)/maple \
+$(MAGIC_FRAGMENT_DIR)/marc21 \
+$(MAGIC_FRAGMENT_DIR)/mathcad \
+$(MAGIC_FRAGMENT_DIR)/mathematica \
+$(MAGIC_FRAGMENT_DIR)/matroska \
+$(MAGIC_FRAGMENT_DIR)/mcrypt \
+$(MAGIC_FRAGMENT_DIR)/measure \
+$(MAGIC_FRAGMENT_DIR)/mercurial \
+$(MAGIC_FRAGMENT_DIR)/metastore \
+$(MAGIC_FRAGMENT_DIR)/meteorological \
+$(MAGIC_FRAGMENT_DIR)/microfocus \
+$(MAGIC_FRAGMENT_DIR)/mime \
+$(MAGIC_FRAGMENT_DIR)/mips \
+$(MAGIC_FRAGMENT_DIR)/mirage \
+$(MAGIC_FRAGMENT_DIR)/misctools \
+$(MAGIC_FRAGMENT_DIR)/mkid \
+$(MAGIC_FRAGMENT_DIR)/mlssa \
+$(MAGIC_FRAGMENT_DIR)/mmdf \
+$(MAGIC_FRAGMENT_DIR)/modem \
+$(MAGIC_FRAGMENT_DIR)/modulefile \
+$(MAGIC_FRAGMENT_DIR)/motorola \
+$(MAGIC_FRAGMENT_DIR)/mozilla \
+$(MAGIC_FRAGMENT_DIR)/msdos \
+$(MAGIC_FRAGMENT_DIR)/msooxml \
+$(MAGIC_FRAGMENT_DIR)/msvc \
+$(MAGIC_FRAGMENT_DIR)/msx \
+$(MAGIC_FRAGMENT_DIR)/mup \
+$(MAGIC_FRAGMENT_DIR)/music \
+$(MAGIC_FRAGMENT_DIR)/nasa \
+$(MAGIC_FRAGMENT_DIR)/natinst \
+$(MAGIC_FRAGMENT_DIR)/ncr \
+$(MAGIC_FRAGMENT_DIR)/neko \
+$(MAGIC_FRAGMENT_DIR)/netbsd \
+$(MAGIC_FRAGMENT_DIR)/netscape \
+$(MAGIC_FRAGMENT_DIR)/netware \
+$(MAGIC_FRAGMENT_DIR)/news \
+$(MAGIC_FRAGMENT_DIR)/nitpicker \
+$(MAGIC_FRAGMENT_DIR)/numpy \
+$(MAGIC_FRAGMENT_DIR)/oasis \
+$(MAGIC_FRAGMENT_DIR)/ocaml \
+$(MAGIC_FRAGMENT_DIR)/octave \
+$(MAGIC_FRAGMENT_DIR)/ole2compounddocs \
+$(MAGIC_FRAGMENT_DIR)/olf \
+$(MAGIC_FRAGMENT_DIR)/openfst \
+$(MAGIC_FRAGMENT_DIR)/opentimestamps \
+$(MAGIC_FRAGMENT_DIR)/os2 \
+$(MAGIC_FRAGMENT_DIR)/os400 \
+$(MAGIC_FRAGMENT_DIR)/os9 \
+$(MAGIC_FRAGMENT_DIR)/osf1 \
+$(MAGIC_FRAGMENT_DIR)/palm \
+$(MAGIC_FRAGMENT_DIR)/parix \
+$(MAGIC_FRAGMENT_DIR)/parrot \
+$(MAGIC_FRAGMENT_DIR)/pascal \
+$(MAGIC_FRAGMENT_DIR)/pbf \
+$(MAGIC_FRAGMENT_DIR)/pbm \
+$(MAGIC_FRAGMENT_DIR)/pc88 \
+$(MAGIC_FRAGMENT_DIR)/pc98 \
+$(MAGIC_FRAGMENT_DIR)/pdf \
+$(MAGIC_FRAGMENT_DIR)/pdp \
+$(MAGIC_FRAGMENT_DIR)/perl \
+$(MAGIC_FRAGMENT_DIR)/pgf \
+$(MAGIC_FRAGMENT_DIR)/pgp \
+$(MAGIC_FRAGMENT_DIR)/pkgadd \
+$(MAGIC_FRAGMENT_DIR)/plan9 \
+$(MAGIC_FRAGMENT_DIR)/plus5 \
+$(MAGIC_FRAGMENT_DIR)/pmem \
+$(MAGIC_FRAGMENT_DIR)/polyml \
+$(MAGIC_FRAGMENT_DIR)/printer \
+$(MAGIC_FRAGMENT_DIR)/project \
+$(MAGIC_FRAGMENT_DIR)/psdbms \
+$(MAGIC_FRAGMENT_DIR)/psl \
+$(MAGIC_FRAGMENT_DIR)/pulsar \
+$(MAGIC_FRAGMENT_DIR)/pwsafe \
+$(MAGIC_FRAGMENT_DIR)/pyramid \
+$(MAGIC_FRAGMENT_DIR)/python \
+$(MAGIC_FRAGMENT_DIR)/qt \
+$(MAGIC_FRAGMENT_DIR)/revision \
+$(MAGIC_FRAGMENT_DIR)/riff \
+$(MAGIC_FRAGMENT_DIR)/rpi \
+$(MAGIC_FRAGMENT_DIR)/rpm \
+$(MAGIC_FRAGMENT_DIR)/rpmsg \
+$(MAGIC_FRAGMENT_DIR)/rtf \
+$(MAGIC_FRAGMENT_DIR)/rst \
+$(MAGIC_FRAGMENT_DIR)/ruby \
+$(MAGIC_FRAGMENT_DIR)/sc \
+$(MAGIC_FRAGMENT_DIR)/sccs \
+$(MAGIC_FRAGMENT_DIR)/scientific \
+$(MAGIC_FRAGMENT_DIR)/securitycerts \
+$(MAGIC_FRAGMENT_DIR)/selinux \
+$(MAGIC_FRAGMENT_DIR)/sendmail \
+$(MAGIC_FRAGMENT_DIR)/sequent \
+$(MAGIC_FRAGMENT_DIR)/sereal \
+$(MAGIC_FRAGMENT_DIR)/sgi \
+$(MAGIC_FRAGMENT_DIR)/sgml \
+$(MAGIC_FRAGMENT_DIR)/sharc \
+$(MAGIC_FRAGMENT_DIR)/sinclair \
+$(MAGIC_FRAGMENT_DIR)/sisu \
+$(MAGIC_FRAGMENT_DIR)/sketch \
+$(MAGIC_FRAGMENT_DIR)/smalltalk \
+$(MAGIC_FRAGMENT_DIR)/smile \
+$(MAGIC_FRAGMENT_DIR)/sniffer \
+$(MAGIC_FRAGMENT_DIR)/softquad \
+$(MAGIC_FRAGMENT_DIR)/sosi \
+$(MAGIC_FRAGMENT_DIR)/spec \
+$(MAGIC_FRAGMENT_DIR)/spectrum \
+$(MAGIC_FRAGMENT_DIR)/sql \
+$(MAGIC_FRAGMENT_DIR)/ssh \
+$(MAGIC_FRAGMENT_DIR)/ssl \
+$(MAGIC_FRAGMENT_DIR)/sun \
+$(MAGIC_FRAGMENT_DIR)/sylk \
+$(MAGIC_FRAGMENT_DIR)/symbos \
+$(MAGIC_FRAGMENT_DIR)/sysex \
+$(MAGIC_FRAGMENT_DIR)/tcl \
+$(MAGIC_FRAGMENT_DIR)/teapot \
+$(MAGIC_FRAGMENT_DIR)/terminfo \
+$(MAGIC_FRAGMENT_DIR)/tex \
+$(MAGIC_FRAGMENT_DIR)/tgif \
+$(MAGIC_FRAGMENT_DIR)/ti-8x \
+$(MAGIC_FRAGMENT_DIR)/timezone \
+$(MAGIC_FRAGMENT_DIR)/tplink \
+$(MAGIC_FRAGMENT_DIR)/troff \
+$(MAGIC_FRAGMENT_DIR)/tuxedo \
+$(MAGIC_FRAGMENT_DIR)/typeset \
+$(MAGIC_FRAGMENT_DIR)/unicode \
+$(MAGIC_FRAGMENT_DIR)/unisig \
+$(MAGIC_FRAGMENT_DIR)/unknown \
+$(MAGIC_FRAGMENT_DIR)/usd \
+$(MAGIC_FRAGMENT_DIR)/uterus \
+$(MAGIC_FRAGMENT_DIR)/uuencode \
+$(MAGIC_FRAGMENT_DIR)/vacuum-cleaner \
+$(MAGIC_FRAGMENT_DIR)/varied.out \
+$(MAGIC_FRAGMENT_DIR)/varied.script \
+$(MAGIC_FRAGMENT_DIR)/vax \
+$(MAGIC_FRAGMENT_DIR)/vicar \
+$(MAGIC_FRAGMENT_DIR)/virtual \
+$(MAGIC_FRAGMENT_DIR)/virtutech \
+$(MAGIC_FRAGMENT_DIR)/visx \
+$(MAGIC_FRAGMENT_DIR)/vms \
+$(MAGIC_FRAGMENT_DIR)/vmware \
+$(MAGIC_FRAGMENT_DIR)/vorbis \
+$(MAGIC_FRAGMENT_DIR)/vxl \
+$(MAGIC_FRAGMENT_DIR)/warc \
+$(MAGIC_FRAGMENT_DIR)/web \
+$(MAGIC_FRAGMENT_DIR)/weak \
+$(MAGIC_FRAGMENT_DIR)/webassembly \
+$(MAGIC_FRAGMENT_DIR)/windows \
+$(MAGIC_FRAGMENT_DIR)/wireless \
+$(MAGIC_FRAGMENT_DIR)/wordprocessors \
+$(MAGIC_FRAGMENT_DIR)/wsdl \
+$(MAGIC_FRAGMENT_DIR)/x68000 \
+$(MAGIC_FRAGMENT_DIR)/xdelta \
+$(MAGIC_FRAGMENT_DIR)/xenix \
+$(MAGIC_FRAGMENT_DIR)/xilinx \
+$(MAGIC_FRAGMENT_DIR)/xo65 \
+$(MAGIC_FRAGMENT_DIR)/xwindows \
+$(MAGIC_FRAGMENT_DIR)/yara \
+$(MAGIC_FRAGMENT_DIR)/zfs \
+$(MAGIC_FRAGMENT_DIR)/zilog \
+$(MAGIC_FRAGMENT_DIR)/zip \
+$(MAGIC_FRAGMENT_DIR)/zyxel
+
+MAGIC = magic.mgc
+CLEANFILES = ${MAGIC} $(MAGIC_FRAGMENT_DIR)/Localstuff
+
+# FIXME: Build file natively as well so that it can be used to compile
+# the target's magic file; for now we bail if the local version does not match
+if IS_CROSS_COMPILE
+FILE_COMPILE = LD_PRELOAD=$(top_srcdir)/host/libmagic.so $(top_srcdir)/host/file${EXEEXT}
+FILE_COMPILE_DEP =
+else
+FILE_COMPILE = $(top_builddir)/src/file${EXEEXT}
+FILE_COMPILE_DEP = $(FILE_COMPILE)
+endif
+
+${MAGIC}: $(EXTRA_DIST) $(FILE_COMPILE_DEP)
+	@rm -fr magic
+	@mkdir magic && cp -p $(EXTRA_DIST) magic
+	@(if expr "${FILE_COMPILE}" : '.*/.*' > /dev/null; then \
+	    echo "Using ${FILE_COMPILE} to generate ${MAGIC}" > /dev/null; \
+	  else \
+	    v=$$(${FILE_COMPILE} --version | sed -e s/file-// -e q); \
+	    if [ "$$v" != "${PACKAGE_VERSION}" ]; then \
+		echo "Cannot use the installed version of file ($$v) to"; \
+		echo "cross-compile file ${PACKAGE_VERSION}"; \
+		echo "Please install file ${PACKAGE_VERSION} locally first"; \
+		exit 1; \
+	    fi; \
+	  fi)
+	$(FILE_COMPILE) -C -m magic
+	@rm -fr magic
Index: a/file/create-5.39-cross-patch/file-5.39-new/magic/Makefile.in
===================================================================
--- a/file/create-5.39-cross-patch/file-5.39-new/magic/Makefile.in	(nonexistent)
+++ a/file/create-5.39-cross-patch/file-5.39-new/magic/Makefile.in	(revision 5)
@@ -0,0 +1,849 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = magic
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(pkgdatadir)"
+DATA = $(pkgdata_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MINGW = @MINGW@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+WARNINGS = @WARNINGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fsect = @fsect@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+#
+# $File: Makefile.am,v 1.157 2020/05/21 16:22:47 christos Exp $
+#
+MAGIC_FRAGMENT_BASE = Magdir
+MAGIC_DIR = $(top_srcdir)/magic
+MAGIC_FRAGMENT_DIR = $(MAGIC_DIR)/$(MAGIC_FRAGMENT_BASE)
+pkgdata_DATA = magic.mgc
+EXTRA_DIST = \
+$(MAGIC_DIR)/Header \
+$(MAGIC_DIR)/Localstuff \
+$(MAGIC_FRAGMENT_DIR)/acorn \
+$(MAGIC_FRAGMENT_DIR)/adi \
+$(MAGIC_FRAGMENT_DIR)/adventure \
+$(MAGIC_FRAGMENT_DIR)/algol68 \
+$(MAGIC_FRAGMENT_DIR)/allegro \
+$(MAGIC_FRAGMENT_DIR)/alliant \
+$(MAGIC_FRAGMENT_DIR)/amanda \
+$(MAGIC_FRAGMENT_DIR)/amigaos \
+$(MAGIC_FRAGMENT_DIR)/android \
+$(MAGIC_FRAGMENT_DIR)/animation \
+$(MAGIC_FRAGMENT_DIR)/aout \
+$(MAGIC_FRAGMENT_DIR)/apache \
+$(MAGIC_FRAGMENT_DIR)/apl \
+$(MAGIC_FRAGMENT_DIR)/apple \
+$(MAGIC_FRAGMENT_DIR)/application \
+$(MAGIC_FRAGMENT_DIR)/applix \
+$(MAGIC_FRAGMENT_DIR)/apt \
+$(MAGIC_FRAGMENT_DIR)/archive \
+$(MAGIC_FRAGMENT_DIR)/asf \
+$(MAGIC_FRAGMENT_DIR)/assembler \
+$(MAGIC_FRAGMENT_DIR)/asterix \
+$(MAGIC_FRAGMENT_DIR)/att3b \
+$(MAGIC_FRAGMENT_DIR)/audio \
+$(MAGIC_FRAGMENT_DIR)/basis \
+$(MAGIC_FRAGMENT_DIR)/beetle \
+$(MAGIC_FRAGMENT_DIR)/ber \
+$(MAGIC_FRAGMENT_DIR)/bflt \
+$(MAGIC_FRAGMENT_DIR)/bhl \
+$(MAGIC_FRAGMENT_DIR)/bioinformatics \
+$(MAGIC_FRAGMENT_DIR)/biosig \
+$(MAGIC_FRAGMENT_DIR)/blackberry \
+$(MAGIC_FRAGMENT_DIR)/blcr \
+$(MAGIC_FRAGMENT_DIR)/blender \
+$(MAGIC_FRAGMENT_DIR)/blit \
+$(MAGIC_FRAGMENT_DIR)/bout \
+$(MAGIC_FRAGMENT_DIR)/bsdi \
+$(MAGIC_FRAGMENT_DIR)/bsi \
+$(MAGIC_FRAGMENT_DIR)/btsnoop \
+$(MAGIC_FRAGMENT_DIR)/c-lang \
+$(MAGIC_FRAGMENT_DIR)/c64 \
+$(MAGIC_FRAGMENT_DIR)/cad \
+$(MAGIC_FRAGMENT_DIR)/cafebabe \
+$(MAGIC_FRAGMENT_DIR)/cbor \
+$(MAGIC_FRAGMENT_DIR)/cddb \
+$(MAGIC_FRAGMENT_DIR)/chord \
+$(MAGIC_FRAGMENT_DIR)/cisco \
+$(MAGIC_FRAGMENT_DIR)/citrus \
+$(MAGIC_FRAGMENT_DIR)/clarion \
+$(MAGIC_FRAGMENT_DIR)/claris \
+$(MAGIC_FRAGMENT_DIR)/clipper \
+$(MAGIC_FRAGMENT_DIR)/clojure \
+$(MAGIC_FRAGMENT_DIR)/coff \
+$(MAGIC_FRAGMENT_DIR)/commands \
+$(MAGIC_FRAGMENT_DIR)/communications \
+$(MAGIC_FRAGMENT_DIR)/compress \
+$(MAGIC_FRAGMENT_DIR)/console \
+$(MAGIC_FRAGMENT_DIR)/convex \
+$(MAGIC_FRAGMENT_DIR)/coverage \
+$(MAGIC_FRAGMENT_DIR)/cracklib \
+$(MAGIC_FRAGMENT_DIR)/ctags \
+$(MAGIC_FRAGMENT_DIR)/ctf \
+$(MAGIC_FRAGMENT_DIR)/cubemap \
+$(MAGIC_FRAGMENT_DIR)/cups \
+$(MAGIC_FRAGMENT_DIR)/dact \
+$(MAGIC_FRAGMENT_DIR)/database \
+$(MAGIC_FRAGMENT_DIR)/dataone \
+$(MAGIC_FRAGMENT_DIR)/dbpf \
+$(MAGIC_FRAGMENT_DIR)/der \
+$(MAGIC_FRAGMENT_DIR)/diamond \
+$(MAGIC_FRAGMENT_DIR)/dif \
+$(MAGIC_FRAGMENT_DIR)/diff \
+$(MAGIC_FRAGMENT_DIR)/digital \
+$(MAGIC_FRAGMENT_DIR)/dolby \
+$(MAGIC_FRAGMENT_DIR)/dump \
+$(MAGIC_FRAGMENT_DIR)/dyadic \
+$(MAGIC_FRAGMENT_DIR)/ebml \
+$(MAGIC_FRAGMENT_DIR)/edid \
+$(MAGIC_FRAGMENT_DIR)/editors \
+$(MAGIC_FRAGMENT_DIR)/efi \
+$(MAGIC_FRAGMENT_DIR)/elf \
+$(MAGIC_FRAGMENT_DIR)/encore \
+$(MAGIC_FRAGMENT_DIR)/epoc \
+$(MAGIC_FRAGMENT_DIR)/erlang \
+$(MAGIC_FRAGMENT_DIR)/espressif \
+$(MAGIC_FRAGMENT_DIR)/esri \
+$(MAGIC_FRAGMENT_DIR)/fcs \
+$(MAGIC_FRAGMENT_DIR)/filesystems \
+$(MAGIC_FRAGMENT_DIR)/finger \
+$(MAGIC_FRAGMENT_DIR)/flash \
+$(MAGIC_FRAGMENT_DIR)/flif \
+$(MAGIC_FRAGMENT_DIR)/fonts \
+$(MAGIC_FRAGMENT_DIR)/forth \
+$(MAGIC_FRAGMENT_DIR)/fortran \
+$(MAGIC_FRAGMENT_DIR)/frame \
+$(MAGIC_FRAGMENT_DIR)/freebsd \
+$(MAGIC_FRAGMENT_DIR)/fsav \
+$(MAGIC_FRAGMENT_DIR)/fusecompress \
+$(MAGIC_FRAGMENT_DIR)/games \
+$(MAGIC_FRAGMENT_DIR)/gcc \
+$(MAGIC_FRAGMENT_DIR)/gconv \
+$(MAGIC_FRAGMENT_DIR)/geo \
+$(MAGIC_FRAGMENT_DIR)/geos \
+$(MAGIC_FRAGMENT_DIR)/gimp \
+$(MAGIC_FRAGMENT_DIR)/git \
+$(MAGIC_FRAGMENT_DIR)/glibc \
+$(MAGIC_FRAGMENT_DIR)/gnome \
+$(MAGIC_FRAGMENT_DIR)/gnu \
+$(MAGIC_FRAGMENT_DIR)/gnumeric \
+$(MAGIC_FRAGMENT_DIR)/gpt \
+$(MAGIC_FRAGMENT_DIR)/gpu \
+$(MAGIC_FRAGMENT_DIR)/grace \
+$(MAGIC_FRAGMENT_DIR)/graphviz \
+$(MAGIC_FRAGMENT_DIR)/gringotts \
+$(MAGIC_FRAGMENT_DIR)/guile \
+$(MAGIC_FRAGMENT_DIR)/hardware \
+$(MAGIC_FRAGMENT_DIR)/hitachi-sh \
+$(MAGIC_FRAGMENT_DIR)/hp \
+$(MAGIC_FRAGMENT_DIR)/human68k \
+$(MAGIC_FRAGMENT_DIR)/ibm370 \
+$(MAGIC_FRAGMENT_DIR)/ibm6000 \
+$(MAGIC_FRAGMENT_DIR)/icc \
+$(MAGIC_FRAGMENT_DIR)/iff \
+$(MAGIC_FRAGMENT_DIR)/images \
+$(MAGIC_FRAGMENT_DIR)/inform \
+$(MAGIC_FRAGMENT_DIR)/intel \
+$(MAGIC_FRAGMENT_DIR)/interleaf \
+$(MAGIC_FRAGMENT_DIR)/island \
+$(MAGIC_FRAGMENT_DIR)/ispell \
+$(MAGIC_FRAGMENT_DIR)/isz \
+$(MAGIC_FRAGMENT_DIR)/java \
+$(MAGIC_FRAGMENT_DIR)/javascript \
+$(MAGIC_FRAGMENT_DIR)/jpeg \
+$(MAGIC_FRAGMENT_DIR)/karma \
+$(MAGIC_FRAGMENT_DIR)/kde \
+$(MAGIC_FRAGMENT_DIR)/keepass \
+$(MAGIC_FRAGMENT_DIR)/kerberos \
+$(MAGIC_FRAGMENT_DIR)/kicad \
+$(MAGIC_FRAGMENT_DIR)/kml \
+$(MAGIC_FRAGMENT_DIR)/lecter \
+$(MAGIC_FRAGMENT_DIR)/lex \
+$(MAGIC_FRAGMENT_DIR)/lif \
+$(MAGIC_FRAGMENT_DIR)/linux \
+$(MAGIC_FRAGMENT_DIR)/lisp \
+$(MAGIC_FRAGMENT_DIR)/llvm \
+$(MAGIC_FRAGMENT_DIR)/lua \
+$(MAGIC_FRAGMENT_DIR)/luks \
+$(MAGIC_FRAGMENT_DIR)/m4 \
+$(MAGIC_FRAGMENT_DIR)/mach \
+$(MAGIC_FRAGMENT_DIR)/macintosh \
+$(MAGIC_FRAGMENT_DIR)/macos \
+$(MAGIC_FRAGMENT_DIR)/magic \
+$(MAGIC_FRAGMENT_DIR)/mail.news \
+$(MAGIC_FRAGMENT_DIR)/make \
+$(MAGIC_FRAGMENT_DIR)/map \
+$(MAGIC_FRAGMENT_DIR)/maple \
+$(MAGIC_FRAGMENT_DIR)/marc21 \
+$(MAGIC_FRAGMENT_DIR)/mathcad \
+$(MAGIC_FRAGMENT_DIR)/mathematica \
+$(MAGIC_FRAGMENT_DIR)/matroska \
+$(MAGIC_FRAGMENT_DIR)/mcrypt \
+$(MAGIC_FRAGMENT_DIR)/measure \
+$(MAGIC_FRAGMENT_DIR)/mercurial \
+$(MAGIC_FRAGMENT_DIR)/metastore \
+$(MAGIC_FRAGMENT_DIR)/meteorological \
+$(MAGIC_FRAGMENT_DIR)/microfocus \
+$(MAGIC_FRAGMENT_DIR)/mime \
+$(MAGIC_FRAGMENT_DIR)/mips \
+$(MAGIC_FRAGMENT_DIR)/mirage \
+$(MAGIC_FRAGMENT_DIR)/misctools \
+$(MAGIC_FRAGMENT_DIR)/mkid \
+$(MAGIC_FRAGMENT_DIR)/mlssa \
+$(MAGIC_FRAGMENT_DIR)/mmdf \
+$(MAGIC_FRAGMENT_DIR)/modem \
+$(MAGIC_FRAGMENT_DIR)/modulefile \
+$(MAGIC_FRAGMENT_DIR)/motorola \
+$(MAGIC_FRAGMENT_DIR)/mozilla \
+$(MAGIC_FRAGMENT_DIR)/msdos \
+$(MAGIC_FRAGMENT_DIR)/msooxml \
+$(MAGIC_FRAGMENT_DIR)/msvc \
+$(MAGIC_FRAGMENT_DIR)/msx \
+$(MAGIC_FRAGMENT_DIR)/mup \
+$(MAGIC_FRAGMENT_DIR)/music \
+$(MAGIC_FRAGMENT_DIR)/nasa \
+$(MAGIC_FRAGMENT_DIR)/natinst \
+$(MAGIC_FRAGMENT_DIR)/ncr \
+$(MAGIC_FRAGMENT_DIR)/neko \
+$(MAGIC_FRAGMENT_DIR)/netbsd \
+$(MAGIC_FRAGMENT_DIR)/netscape \
+$(MAGIC_FRAGMENT_DIR)/netware \
+$(MAGIC_FRAGMENT_DIR)/news \
+$(MAGIC_FRAGMENT_DIR)/nitpicker \
+$(MAGIC_FRAGMENT_DIR)/numpy \
+$(MAGIC_FRAGMENT_DIR)/oasis \
+$(MAGIC_FRAGMENT_DIR)/ocaml \
+$(MAGIC_FRAGMENT_DIR)/octave \
+$(MAGIC_FRAGMENT_DIR)/ole2compounddocs \
+$(MAGIC_FRAGMENT_DIR)/olf \
+$(MAGIC_FRAGMENT_DIR)/openfst \
+$(MAGIC_FRAGMENT_DIR)/opentimestamps \
+$(MAGIC_FRAGMENT_DIR)/os2 \
+$(MAGIC_FRAGMENT_DIR)/os400 \
+$(MAGIC_FRAGMENT_DIR)/os9 \
+$(MAGIC_FRAGMENT_DIR)/osf1 \
+$(MAGIC_FRAGMENT_DIR)/palm \
+$(MAGIC_FRAGMENT_DIR)/parix \
+$(MAGIC_FRAGMENT_DIR)/parrot \
+$(MAGIC_FRAGMENT_DIR)/pascal \
+$(MAGIC_FRAGMENT_DIR)/pbf \
+$(MAGIC_FRAGMENT_DIR)/pbm \
+$(MAGIC_FRAGMENT_DIR)/pc88 \
+$(MAGIC_FRAGMENT_DIR)/pc98 \
+$(MAGIC_FRAGMENT_DIR)/pdf \
+$(MAGIC_FRAGMENT_DIR)/pdp \
+$(MAGIC_FRAGMENT_DIR)/perl \
+$(MAGIC_FRAGMENT_DIR)/pgf \
+$(MAGIC_FRAGMENT_DIR)/pgp \
+$(MAGIC_FRAGMENT_DIR)/pkgadd \
+$(MAGIC_FRAGMENT_DIR)/plan9 \
+$(MAGIC_FRAGMENT_DIR)/plus5 \
+$(MAGIC_FRAGMENT_DIR)/pmem \
+$(MAGIC_FRAGMENT_DIR)/polyml \
+$(MAGIC_FRAGMENT_DIR)/printer \
+$(MAGIC_FRAGMENT_DIR)/project \
+$(MAGIC_FRAGMENT_DIR)/psdbms \
+$(MAGIC_FRAGMENT_DIR)/psl \
+$(MAGIC_FRAGMENT_DIR)/pulsar \
+$(MAGIC_FRAGMENT_DIR)/pwsafe \
+$(MAGIC_FRAGMENT_DIR)/pyramid \
+$(MAGIC_FRAGMENT_DIR)/python \
+$(MAGIC_FRAGMENT_DIR)/qt \
+$(MAGIC_FRAGMENT_DIR)/revision \
+$(MAGIC_FRAGMENT_DIR)/riff \
+$(MAGIC_FRAGMENT_DIR)/rpi \
+$(MAGIC_FRAGMENT_DIR)/rpm \
+$(MAGIC_FRAGMENT_DIR)/rpmsg \
+$(MAGIC_FRAGMENT_DIR)/rtf \
+$(MAGIC_FRAGMENT_DIR)/rst \
+$(MAGIC_FRAGMENT_DIR)/ruby \
+$(MAGIC_FRAGMENT_DIR)/sc \
+$(MAGIC_FRAGMENT_DIR)/sccs \
+$(MAGIC_FRAGMENT_DIR)/scientific \
+$(MAGIC_FRAGMENT_DIR)/securitycerts \
+$(MAGIC_FRAGMENT_DIR)/selinux \
+$(MAGIC_FRAGMENT_DIR)/sendmail \
+$(MAGIC_FRAGMENT_DIR)/sequent \
+$(MAGIC_FRAGMENT_DIR)/sereal \
+$(MAGIC_FRAGMENT_DIR)/sgi \
+$(MAGIC_FRAGMENT_DIR)/sgml \
+$(MAGIC_FRAGMENT_DIR)/sharc \
+$(MAGIC_FRAGMENT_DIR)/sinclair \
+$(MAGIC_FRAGMENT_DIR)/sisu \
+$(MAGIC_FRAGMENT_DIR)/sketch \
+$(MAGIC_FRAGMENT_DIR)/smalltalk \
+$(MAGIC_FRAGMENT_DIR)/smile \
+$(MAGIC_FRAGMENT_DIR)/sniffer \
+$(MAGIC_FRAGMENT_DIR)/softquad \
+$(MAGIC_FRAGMENT_DIR)/sosi \
+$(MAGIC_FRAGMENT_DIR)/spec \
+$(MAGIC_FRAGMENT_DIR)/spectrum \
+$(MAGIC_FRAGMENT_DIR)/sql \
+$(MAGIC_FRAGMENT_DIR)/ssh \
+$(MAGIC_FRAGMENT_DIR)/ssl \
+$(MAGIC_FRAGMENT_DIR)/sun \
+$(MAGIC_FRAGMENT_DIR)/sylk \
+$(MAGIC_FRAGMENT_DIR)/symbos \
+$(MAGIC_FRAGMENT_DIR)/sysex \
+$(MAGIC_FRAGMENT_DIR)/tcl \
+$(MAGIC_FRAGMENT_DIR)/teapot \
+$(MAGIC_FRAGMENT_DIR)/terminfo \
+$(MAGIC_FRAGMENT_DIR)/tex \
+$(MAGIC_FRAGMENT_DIR)/tgif \
+$(MAGIC_FRAGMENT_DIR)/ti-8x \
+$(MAGIC_FRAGMENT_DIR)/timezone \
+$(MAGIC_FRAGMENT_DIR)/tplink \
+$(MAGIC_FRAGMENT_DIR)/troff \
+$(MAGIC_FRAGMENT_DIR)/tuxedo \
+$(MAGIC_FRAGMENT_DIR)/typeset \
+$(MAGIC_FRAGMENT_DIR)/unicode \
+$(MAGIC_FRAGMENT_DIR)/unisig \
+$(MAGIC_FRAGMENT_DIR)/unknown \
+$(MAGIC_FRAGMENT_DIR)/usd \
+$(MAGIC_FRAGMENT_DIR)/uterus \
+$(MAGIC_FRAGMENT_DIR)/uuencode \
+$(MAGIC_FRAGMENT_DIR)/vacuum-cleaner \
+$(MAGIC_FRAGMENT_DIR)/varied.out \
+$(MAGIC_FRAGMENT_DIR)/varied.script \
+$(MAGIC_FRAGMENT_DIR)/vax \
+$(MAGIC_FRAGMENT_DIR)/vicar \
+$(MAGIC_FRAGMENT_DIR)/virtual \
+$(MAGIC_FRAGMENT_DIR)/virtutech \
+$(MAGIC_FRAGMENT_DIR)/visx \
+$(MAGIC_FRAGMENT_DIR)/vms \
+$(MAGIC_FRAGMENT_DIR)/vmware \
+$(MAGIC_FRAGMENT_DIR)/vorbis \
+$(MAGIC_FRAGMENT_DIR)/vxl \
+$(MAGIC_FRAGMENT_DIR)/warc \
+$(MAGIC_FRAGMENT_DIR)/web \
+$(MAGIC_FRAGMENT_DIR)/weak \
+$(MAGIC_FRAGMENT_DIR)/webassembly \
+$(MAGIC_FRAGMENT_DIR)/windows \
+$(MAGIC_FRAGMENT_DIR)/wireless \
+$(MAGIC_FRAGMENT_DIR)/wordprocessors \
+$(MAGIC_FRAGMENT_DIR)/wsdl \
+$(MAGIC_FRAGMENT_DIR)/x68000 \
+$(MAGIC_FRAGMENT_DIR)/xdelta \
+$(MAGIC_FRAGMENT_DIR)/xenix \
+$(MAGIC_FRAGMENT_DIR)/xilinx \
+$(MAGIC_FRAGMENT_DIR)/xo65 \
+$(MAGIC_FRAGMENT_DIR)/xwindows \
+$(MAGIC_FRAGMENT_DIR)/yara \
+$(MAGIC_FRAGMENT_DIR)/zfs \
+$(MAGIC_FRAGMENT_DIR)/zilog \
+$(MAGIC_FRAGMENT_DIR)/zip \
+$(MAGIC_FRAGMENT_DIR)/zyxel
+
+MAGIC = magic.mgc
+CLEANFILES = ${MAGIC} $(MAGIC_FRAGMENT_DIR)/Localstuff
+@IS_CROSS_COMPILE_FALSE@FILE_COMPILE = $(top_builddir)/src/file${EXEEXT}
+
+# FIXME: Build file natively as well so that it can be used to compile
+# the target's magic file; for now we bail if the local version does not match
+@IS_CROSS_COMPILE_TRUE@FILE_COMPILE = LD_PRELOAD=$(top_srcdir)/host/libmagic.so $(top_srcdir)/host/file${EXEEXT}
+@IS_CROSS_COMPILE_FALSE@FILE_COMPILE_DEP = $(FILE_COMPILE)
+@IS_CROSS_COMPILE_TRUE@FILE_COMPILE_DEP = 
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign magic/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign magic/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-pkgdataDATA: $(pkgdata_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
+	done
+
+uninstall-pkgdataDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(pkgdatadir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pkgdataDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkgdataDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	cscopelist-am ctags-am distclean distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkgdataDATA install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags-am uninstall uninstall-am uninstall-pkgdataDATA
+
+.PRECIOUS: Makefile
+
+
+${MAGIC}: $(EXTRA_DIST) $(FILE_COMPILE_DEP)
+	@rm -fr magic
+	@mkdir magic && cp -p $(EXTRA_DIST) magic
+	@(if expr "${FILE_COMPILE}" : '.*/.*' > /dev/null; then \
+	    echo "Using ${FILE_COMPILE} to generate ${MAGIC}" > /dev/null; \
+	  else \
+	    v=$$(${FILE_COMPILE} --version | sed -e s/file-// -e q); \
+	    if [ "$$v" != "${PACKAGE_VERSION}" ]; then \
+		echo "Cannot use the installed version of file ($$v) to"; \
+		echo "cross-compile file ${PACKAGE_VERSION}"; \
+		echo "Please install file ${PACKAGE_VERSION} locally first"; \
+		exit 1; \
+	    fi; \
+	  fi)
+	$(FILE_COMPILE) -C -m magic
+	@rm -fr magic
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: a/file/create-5.39-cross-patch/file-5.39-new/magic
===================================================================
--- a/file/create-5.39-cross-patch/file-5.39-new/magic	(nonexistent)
+++ a/file/create-5.39-cross-patch/file-5.39-new/magic	(revision 5)

Property changes on: a/file/create-5.39-cross-patch/file-5.39-new/magic
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file/create-5.39-cross-patch/file-5.39-new
===================================================================
--- a/file/create-5.39-cross-patch/file-5.39-new	(nonexistent)
+++ a/file/create-5.39-cross-patch/file-5.39-new	(revision 5)

Property changes on: a/file/create-5.39-cross-patch/file-5.39-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file/create-5.39-cross-patch/file.list
===================================================================
--- a/file/create-5.39-cross-patch/file.list	(nonexistent)
+++ a/file/create-5.39-cross-patch/file.list	(revision 5)
@@ -0,0 +1,2 @@
+file-5.39/magic/Makefile.am
+file-5.39/magic/Makefile.in
Index: a/file/create-5.39-cross-patch
===================================================================
--- a/file/create-5.39-cross-patch	(nonexistent)
+++ a/file/create-5.39-cross-patch	(revision 5)

Property changes on: a/file/create-5.39-cross-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file/create-5.39-etc-file-patch/create.patch.sh
===================================================================
--- a/file/create-5.39-etc-file-patch/create.patch.sh	(nonexistent)
+++ a/file/create-5.39-etc-file-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=5.39
+
+tar --files-from=file.list -xzvf ../file-$VERSION.tar.gz
+mv file-$VERSION file-$VERSION-orig
+
+cp -rf ./file-$VERSION-new ./file-$VERSION
+
+diff --unified -Nr  file-$VERSION-orig file-$VERSION > file-$VERSION-etc-file.patch
+
+mv file-$VERSION-etc-file.patch ../patches
+
+rm -rf ./file-$VERSION
+rm -rf ./file-$VERSION-orig

Property changes on: a/file/create-5.39-etc-file-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/file/create-5.39-etc-file-patch/file-5.39-new/configure
===================================================================
--- a/file/create-5.39-etc-file-patch/file-5.39-new/configure	(nonexistent)
+++ a/file/create-5.39-etc-file-patch/file-5.39-new/configure	(revision 5)
@@ -0,0 +1,17472 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for file 5.39.
+#
+# Report bugs to <christos@astron.com>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1
+
+  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org and
+$0: christos@astron.com about your system, including any
+$0: error possibly output before this message. Then install
+$0: a modern shell, or manually run the script under such a
+$0: shell if you do have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='file'
+PACKAGE_TARNAME='file'
+PACKAGE_VERSION='5.39'
+PACKAGE_STRING='file 5.39'
+PACKAGE_BUGREPORT='christos@astron.com'
+PACKAGE_URL=''
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_header_list=
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+IS_CROSS_COMPILE_FALSE
+IS_CROSS_COMPILE_TRUE
+LIBOBJS
+HAVE_VISIBILITY
+CFLAG_VISIBILITY
+LT_SYS_LIBRARY_PATH
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+RANLIB
+ac_ct_AR
+AR
+DLLTOOL
+OBJDUMP
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+SED
+LIBTOOL
+LN_S
+EGREP
+GREP
+CPP
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+WARNINGS
+FSECT5_FALSE
+FSECT5_TRUE
+fsect
+pkgdatadir
+MINGW_FALSE
+MINGW_TRUE
+MINGW
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL
+am__quote'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+enable_elf
+enable_elf_core
+enable_zlib
+enable_bzlib
+enable_xzlib
+enable_libseccomp
+enable_fsect_man5
+enable_dependency_tracking
+enable_static
+with_pic
+enable_shared
+enable_fast_install
+with_aix_soname
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_largefile
+enable_warnings
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+LT_SYS_LIBRARY_PATH'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures file 5.39 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking ...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/file]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of file 5.39:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
+  --disable-elf            disable builtin ELF support
+  --disable-elf-core       disable ELF core file support
+  --disable-zlib          disable zlib compression support [default=auto]
+  --disable-bzlib         disable bz2lib compression support [default=auto]
+  --disable-xzlib         disable liblzma/xz compression support
+                          [default=auto]
+  --disable-libseccomp    disable libseccomp sandboxing [default=auto]
+  --enable-fsect-man5      enable file formats in man section 5
+  --enable-dependency-tracking
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking
+                          speeds up one-time build
+  --enable-static[=PKGS]  build static libraries [default=no]
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --disable-largefile     omit support for large files
+  --disable-warnings	disable compiler warnings
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-aix-soname=aix|svr4|both
+                          shared library versioning (aka "SONAME") variant to
+                          provide on AIX, [default=aix].
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-sysroot[=DIR]    Search for dependent libraries within DIR (or the
+                          compiler's sysroot if not specified).
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  LT_SYS_LIBRARY_PATH
+              User-defined run-time library search path.
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <christos@astron.com>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+file configure 5.39
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval \${$3+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ---------------------------------- ##
+## Report this to christos@astron.com ##
+## ---------------------------------- ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 test -x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+	 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+	    return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+$as_echo_n "checking for $2.$3... " >&6; }
+if eval \${$4+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  eval "$4=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$4
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_member
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+
+# ac_fn_c_find_uintX_t LINENO BITS VAR
+# ------------------------------------
+# Finds an unsigned integer type with width BITS, setting cache variable VAR
+# accordingly.
+ac_fn_c_find_uintX_t ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5
+$as_echo_n "checking for uint$2_t... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+     # Order is important - never check a type that is potentially smaller
+     # than half of the expected target width.
+     for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \
+	 'unsigned long long int' 'unsigned short int' 'unsigned char'; do
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  case $ac_type in #(
+  uint$2_t) :
+    eval "$3=yes" ;; #(
+  *) :
+    eval "$3=\$ac_type" ;;
+esac
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       if eval test \"x\$"$3"\" = x"no"; then :
+
+else
+  break
+fi
+     done
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_find_uintX_t
+
+# ac_fn_c_find_intX_t LINENO BITS VAR
+# -----------------------------------
+# Finds a signed integer type with width BITS, setting cache variable VAR
+# accordingly.
+ac_fn_c_find_intX_t ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5
+$as_echo_n "checking for int$2_t... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+     # Order is important - never check a type that is potentially smaller
+     # than half of the expected target width.
+     for ac_type in int$2_t 'int' 'long int' \
+	 'long long int' 'short int' 'signed char'; do
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+	     enum { N = $2 / 2 - 1 };
+int
+main ()
+{
+static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+	        enum { N = $2 / 2 - 1 };
+int
+main ()
+{
+static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1)
+		 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  case $ac_type in #(
+  int$2_t) :
+    eval "$3=yes" ;; #(
+  *) :
+    eval "$3=\$ac_type" ;;
+esac
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       if eval test \"x\$"$3"\" = x"no"; then :
+
+else
+  break
+fi
+     done
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_find_intX_t
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by file $as_me 5.39, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+as_fn_append ac_header_list " stdlib.h"
+as_fn_append ac_header_list " unistd.h"
+as_fn_append ac_header_list " sys/param.h"
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+am__api_version='1.16'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$*" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$*" != "X $srcdir/configure conftest.file" \
+	&& test "$*" != "X conftest.file $srcdir/configure"; then
+
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment" "$LINENO" 5
+     fi
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if ${ac_cv_path_mkdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='file'
+ VERSION='5.39'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+fi
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=0;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for builtin ELF support" >&5
+$as_echo_n "checking for builtin ELF support... " >&6; }
+# Check whether --enable-elf was given.
+if test "${enable_elf+set}" = set; then :
+  enableval=$enable_elf; if test "${enableval}" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define BUILTIN_ELF 1" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+else
+
+  # enable by default
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define BUILTIN_ELF 1" >>confdefs.h
+
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ELF core file support" >&5
+$as_echo_n "checking for ELF core file support... " >&6; }
+# Check whether --enable-elf-core was given.
+if test "${enable_elf_core+set}" = set; then :
+  enableval=$enable_elf_core; if test "${enableval}" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define ELFCORE 1" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+else
+
+  # enable by default
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define ELFCORE 1" >>confdefs.h
+
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for zlib support" >&5
+$as_echo_n "checking for zlib support... " >&6; }
+# Check whether --enable-zlib was given.
+if test "${enable_zlib+set}" = set; then :
+  enableval=$enable_zlib;
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_zlib" >&5
+$as_echo "$enable_zlib" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for bzlib support" >&5
+$as_echo_n "checking for bzlib support... " >&6; }
+# Check whether --enable-bzlib was given.
+if test "${enable_bzlib+set}" = set; then :
+  enableval=$enable_bzlib;
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_bzlib" >&5
+$as_echo "$enable_bzlib" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for xzlib support" >&5
+$as_echo_n "checking for xzlib support... " >&6; }
+# Check whether --enable-xzlib was given.
+if test "${enable_xzlib+set}" = set; then :
+  enableval=$enable_xzlib;
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_xzlib" >&5
+$as_echo "$enable_xzlib" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libseccomp support" >&5
+$as_echo_n "checking for libseccomp support... " >&6; }
+# Check whether --enable-libseccomp was given.
+if test "${enable_libseccomp+set}" = set; then :
+  enableval=$enable_libseccomp;
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_libseccomp" >&5
+$as_echo "$enable_libseccomp" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for file formats in man section 5" >&5
+$as_echo_n "checking for file formats in man section 5... " >&6; }
+# Check whether --enable-fsect-man5 was given.
+if test "${enable_fsect_man5+set}" = set; then :
+  enableval=$enable_fsect_man5; if test "${enableval}" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  fsect=5
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  fsect=4
+fi
+else
+
+  # disable by default
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  fsect=4
+
+fi
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+case "$host_os" in
+   mingw32*)
+      MINGW=1
+      ;;
+   *)
+      MINGW=0
+      ;;
+esac
+
+ if test "$MINGW" = 1; then
+  MINGW_TRUE=
+  MINGW_FALSE='#'
+else
+  MINGW_TRUE='#'
+  MINGW_FALSE=
+fi
+
+
+pkgdatadir='$(datadir)/file'
+
+
+ if test x$fsect = x5; then
+  FSECT5_TRUE=
+  FSECT5_FALSE='#'
+else
+  FSECT5_TRUE='#'
+  FSECT5_FALSE=
+fi
+
+
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
+cat > confinc.mk << 'END'
+am__doit:
+	@echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+  { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
+   (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+  case $?:`cat confinc.out 2>/dev/null` in #(
+  '0:this is the am__doit target') :
+    case $s in #(
+  BSD) :
+    am__include='.include' am__quote='"' ;; #(
+  *) :
+    am__include='include' am__quote='' ;;
+esac ;; #(
+  *) :
+     ;;
+esac
+  if test "$am__include" != "#"; then
+    _am_result="yes ($s style)"
+    break
+  fi
+done
+rm -f confinc.* confmf.*
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+$as_echo "${_am_result}" >&6; }
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+   case $ac_cv_prog_cc_stdc in #(
+  no) :
+    ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #(
+  *) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
+$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
+if ${ac_cv_prog_cc_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// Check varargs macros.  These examples are taken from C99 6.10.3.5.
+#define debug(...) fprintf (stderr, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+  int x = 1234;
+  int y = 5678;
+  debug ("Flag");
+  debug ("X = %d\n", x);
+  showlist (The first, second, and third items.);
+  report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+  your preprocessor is broken;
+#endif
+#if BIG_OK
+#else
+  your preprocessor is broken;
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+  int datasize;
+  double data[];
+};
+
+struct named_init {
+  int number;
+  const wchar_t *name;
+  double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+  // See if C++-style comments work.
+  // Iterate through items via the restricted pointer.
+  // Also check for declarations in for loops.
+  for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+    continue;
+  return 0;
+}
+
+// Check varargs and va_copy.
+static void
+test_varargs (const char *format, ...)
+{
+  va_list args;
+  va_start (args, format);
+  va_list args_copy;
+  va_copy (args_copy, args);
+
+  const char *str;
+  int number;
+  float fnumber;
+
+  while (*format)
+    {
+      switch (*format++)
+	{
+	case 's': // string
+	  str = va_arg (args_copy, const char *);
+	  break;
+	case 'd': // int
+	  number = va_arg (args_copy, int);
+	  break;
+	case 'f': // float
+	  fnumber = va_arg (args_copy, double);
+	  break;
+	default:
+	  break;
+	}
+    }
+  va_end (args_copy);
+  va_end (args);
+}
+
+int
+main ()
+{
+
+  // Check bool.
+  _Bool success = false;
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  test_varargs ("s, d' f .", "string", 65, 34.234);
+  test_varargs_macros ();
+
+  // Check flexible array members.
+  struct incomplete_array *ia =
+    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+  ia->datasize = 10;
+  for (int i = 0; i < ia->datasize; ++i)
+    ia->data[i] = i * 1.234;
+
+  // Check named initializers.
+  struct named_init ni = {
+    .number = 34,
+    .name = L"Test wide string",
+    .average = 543.34343,
+  };
+
+  ni.number = 58;
+
+  int dynamic_array[ni.number];
+  dynamic_array[ni.number - 1] = 543;
+
+  // work around unused variable warnings
+  return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+	  || dynamic_array[ni.number - 1] != 543);
+
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c99" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c99"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c99" != xno; then :
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+else
+  ac_cv_prog_cc_stdc=no
+fi
+
+fi
+ ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5
+$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; }
+  if ${ac_cv_prog_cc_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+fi
+
+  case $ac_cv_prog_cc_stdc in #(
+  no) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;; #(
+  '') :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;; #(
+  *) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5
+$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if ${ac_cv_prog_CPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = xyes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if ${ac_cv_safe_to_define___extensions__+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#         define __EXTENSIONS__ 1
+          $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if ${ac_cv_c_bigendian+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+	       not a universal capable compiler
+	     #endif
+	     typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+	# Check for potential -arch flags.  It is not universal unless
+	# there are at least two -arch flags with different values.
+	ac_arch=
+	ac_prev=
+	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+	 if test -n "$ac_prev"; then
+	   case $ac_word in
+	     i?86 | x86_64 | ppc | ppc64)
+	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+		 ac_arch=$ac_word
+	       else
+		 ac_cv_c_bigendian=universal
+		 break
+	       fi
+	       ;;
+	   esac
+	   ac_prev=
+	 elif test "x$ac_word" = "x-arch"; then
+	   ac_prev=arch
+	 fi
+       done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+	     #include <sys/param.h>
+
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+		     && LITTLE_ENDIAN)
+	      bogus endian macros
+	     #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+		#include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+		 not big endian
+		#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+	      bogus endian macros
+	     #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+		 not big endian
+		#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+		short int ascii_ii[] =
+		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+		int use_ascii (int i) {
+		  return ascii_mm[i] + ascii_ii[i];
+		}
+		short int ebcdic_ii[] =
+		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+		short int ebcdic_mm[] =
+		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+		int use_ebcdic (int i) {
+		  return ebcdic_mm[i] + ebcdic_ii[i];
+		}
+		extern int foo;
+
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+	      ac_cv_c_bigendian=yes
+	    fi
+	    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+	      if test "$ac_cv_c_bigendian" = unknown; then
+		ac_cv_c_bigendian=no
+	      else
+		# finding both strings is unlikely to happen, but who knows?
+		ac_cv_c_bigendian=unknown
+	      fi
+	    fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+	     /* Are we little or big endian?  From Harbison&Steele.  */
+	     union
+	     {
+	       long int l;
+	       char c[sizeof (long int)];
+	     } u;
+	     u.l = 1;
+	     return u.c[sizeof (long int) - 1] == 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_bigendian=no
+else
+  ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+   yes)
+     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+   no)
+      ;; #(
+   universal)
+
+$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+     ;; #(
+   *)
+     as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+case `pwd` in
+  *\ * | *\	*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.6'
+macro_revision='2.4.6'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case $ECHO in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test yes = "$GCC"; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return, which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD=$ac_prog
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test yes = "$with_gnu_ld"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD=$ac_dir/$ac_prog
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test no != "$with_gnu_ld" && break
+	;;
+      *)
+	test yes != "$with_gnu_ld" && break
+	;;
+      esac
+    fi
+  done
+  IFS=$lt_save_ifs
+else
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
+
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM=$NM
+else
+  lt_nm_to_check=${ac_tool_prefix}nm
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS=$lt_save_ifs
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm=$ac_dir/$lt_tmp_nm
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	# MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+	case $build_os in
+	mingw*) lt_bad_file=conftest.nm/nofile ;;
+	*) lt_bad_file=/dev/null ;;
+	esac
+	case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+	*$lt_bad_file* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break 2
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break 2
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS=$lt_save_ifs
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in dumpbin "link -dump"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols -headers"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring=ABCD
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[	 ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len" && \
+       test undefined != "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test 17 != "$i" # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n "$lt_cv_sys_max_cmd_len"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test yes != "$GCC"; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test yes = "$GCC"; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd* | bitrig*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+os2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh;
+  # decide which one to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test 0 -eq "$ac_status"; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	if test 0 -ne "$ac_status"; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test no = "$lt_cv_ar_at_file"; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  bitrig* | openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test ia64 = "$host_cpu"; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  # Gets list of data symbols to import.
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+  # Adjust the below global symbol transforms to fixup imported variables.
+  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
+  lt_c_name_lib_hook="\
+  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
+else
+  # Disable hooks by default.
+  lt_cv_sys_global_symbol_to_import=
+  lt_cdecl_hook=
+  lt_c_name_hook=
+  lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function,
+    # D for any global variable and I for any imported variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+"     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+"     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+"     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+"     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT_DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
+	  LIBS=conftstm.$ac_objext
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+	    pipe_works=yes
+	  fi
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test yes = "$pipe_works"; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot;
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+   if test yes = "$GCC"; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+$as_echo "$with_sysroot" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+$as_echo_n "checking for a working dd... " >&6; }
+if ${ac_cv_path_lt_DD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+if test -z "$lt_DD"; then
+  ac_path_lt_DD_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in dd; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_lt_DD" || continue
+if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi
+      $ac_path_lt_DD_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_lt_DD"; then
+    :
+  fi
+else
+  ac_cv_path_lt_DD=$lt_DD
+fi
+
+rm -f conftest.i conftest2.i conftest.out
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+$as_echo "$ac_cv_path_lt_DD" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+$as_echo_n "checking how to truncate binary pipes... " >&6; }
+if ${lt_cv_truncate_bin+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+$as_echo "$lt_cv_truncate_bin" >&6; }
+
+
+
+
+
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in $*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock;
+fi
+
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out what ABI is being produced by ac_compile, and set mode
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE=32
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE=64
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test yes = "$lt_cv_prog_gnu_ld"; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+mips64*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    emul=elf
+    case `/usr/bin/file conftest.$ac_objext` in
+      *32-bit*)
+	emul="${emul}32"
+	;;
+      *64-bit*)
+	emul="${emul}64"
+	;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *MSB*)
+	emul="${emul}btsmip"
+	;;
+      *LSB*)
+	emul="${emul}ltsmip"
+	;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *N32*)
+	emul="${emul}n32"
+	;;
+    esac
+    LD="${LD-ld} -m $emul"
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.  Note that the listed cases only cover the
+  # situations where additional linker options are needed (such as when
+  # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+  # vice versa); the common cases where no linker options are needed do
+  # not appear in the list.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    case `/usr/bin/file conftest.o` in
+	      *x86-64*)
+		LD="${LD-ld} -m elf32_x86_64"
+		;;
+	      *)
+		LD="${LD-ld} -m elf_i386"
+		;;
+	    esac
+	    ;;
+	  powerpc64le-*linux*)
+	    LD="${LD-ld} -m elf32lppclinux"
+	    ;;
+	  powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  powerpcle-*linux*)
+	    LD="${LD-ld} -m elf64lppc"
+	    ;;
+	  powerpc-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS=$CFLAGS
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test yes != "$lt_cv_cc_needs_belf"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS=$SAVE_CFLAGS
+  fi
+  ;;
+*-*solaris*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*)
+        case $host in
+        i?86-*-solaris*|x86_64-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD=${LD-ld}_sol2
+        fi
+        ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks=$enable_libtool_lock
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+  fi
+else
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test yes != "$lt_cv_path_mainfest_tool"; then
+  MANIFEST_TOOL=:
+fi
+
+
+
+
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_LIPO="lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "$LT_MULTI_MODULE"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&5
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&5
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+	LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&5
+      elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+	  _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+	10.[012][,.]*)
+	  _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test yes = "$lt_cv_apple_cc_single_mod"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test yes = "$lt_cv_ld_exported_symbols_list"; then
+      _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+    fi
+    if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x$2 in
+    x)
+        ;;
+    *:)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+        ;;
+    x:*)
+        eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+        ;;
+    *)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+# Set options
+# Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+	IFS=$lt_save_ifs
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  enable_static=no
+fi
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for lt_pkg in $withval; do
+	IFS=$lt_save_ifs
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  pic_mode=yes
+fi
+
+
+
+
+
+
+
+
+
+        enable_dlopen=no
+
+
+  enable_win32_dll=no
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+	IFS=$lt_save_ifs
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+	IFS=$lt_save_ifs
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+  shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[5-9]*,yes)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
+
+# Check whether --with-aix-soname was given.
+if test "${with_aix_soname+set}" = set; then :
+  withval=$with_aix_soname; case $withval in
+    aix|svr4|both)
+      ;;
+    *)
+      as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
+      ;;
+    esac
+    lt_cv_with_aix_soname=$with_aix_soname
+else
+  if ${lt_cv_with_aix_soname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_with_aix_soname=aix
+fi
+
+    with_aix_soname=$lt_cv_with_aix_soname
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+$as_echo "$with_aix_soname" >&6; }
+  if test aix != "$with_aix_soname"; then
+    # For the AIX way of multilib, we name the shared archive member
+    # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+    # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+    # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+    # the AIX toolchain works better with OBJECT_MODE set (default 32).
+    if test 64 = "${OBJECT_MODE-32}"; then
+      shared_archive_member_spec=shr_64
+    else
+      shared_archive_member_spec=shr
+    fi
+  fi
+  ;;
+*)
+  with_aix_soname=aix
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test set != "${COLLECT_NAMES+set}"; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/${ac_tool_prefix}file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC=$CC
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test yes = "$GCC"; then
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+  if test yes = "$GCC"; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+	lt_prog_compiler_static='$wl-static'
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test ia64 = "$host_cpu"; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        lt_prog_compiler_wl='-Wl,-Wl,,'
+        lt_prog_compiler_pic='-PIC'
+        lt_prog_compiler_static='-Bstatic'
+        ;;
+      esac
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+	lt_prog_compiler_static='$wl-static'
+	;;
+      esac
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='$wl-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+      case $cc_basename in
+      # old Intel for x86_64, which still supported -KPIC.
+      ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='--shared'
+	lt_prog_compiler_static='--static'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl='-Wl,-Wl,,'
+	lt_prog_compiler_pic='-PIC'
+	lt_prog_compiler_static='-Bstatic'
+	;;
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
+	lt_prog_compiler_static='-static'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fpic'
+	lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-qpic'
+	lt_prog_compiler_static='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Qoption ld '
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Wl,'
+	  ;;
+        *Intel*\ [CF]*Compiler*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fPIC'
+	  lt_prog_compiler_static='-static'
+	  ;;
+	*Portland\ Group*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fpic'
+	  lt_prog_compiler_static='-Bstatic'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms that do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_pic_works"; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_static_works"; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ' (' and ')$', so one must not match beginning or
+  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+  # as well as any symbol that contains 'd'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test yes != "$GCC"; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd* | bitrig*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test yes = "$with_gnu_ld"; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test yes = "$lt_use_gnu_ld_interface"; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='$wl'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+    export_dynamic_flag_spec='$wl--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test ia64 != "$host_cpu"; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='$wl--export-all-symbols'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file, use it as
+	# is; otherwise, prepend EXPORTS...
+	archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+          cp $export_symbols $output_objdir/$soname.def;
+        else
+          echo EXPORTS > $output_objdir/$soname.def;
+          cat $export_symbols >> $output_objdir/$soname.def;
+        fi~
+        $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+      export_dynamic_flag_spec='$wl-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test linux-dietlibc = "$host_os"; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test no = "$tmp_diet"
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  whole_archive_flag_spec=
+	  tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  compiler_needs_object=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  compiler_needs_object=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+        if test yes = "$supports_anon_versioning"; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	tcc*)
+	  export_dynamic_flag_spec='-rdynamic'
+	  ;;
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+	  hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test yes = "$supports_anon_versioning"; then
+	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    ld_shlibs=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test no = "$ld_shlibs"; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test ia64 = "$host_cpu"; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to GNU nm, but means don't demangle to AIX nm.
+	# Without the "-l" option, or with the "-B" option, AIX nm treats
+	# weak defined symbols like other global defined symbols, whereas
+	# GNU nm marks them as "W".
+	# While the 'weak' keyword is ignored in the Export File, we need
+	# it in the Import File for the 'aix-soname' feature, so we have
+	# to replace the "-B" option with "-P" for AIX nm.
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# have runtime linking enabled, and use it for executables.
+	# For shared libraries, we enable/disable runtime linking
+	# depending on the kind of the shared library created -
+	# when "with_aix_soname,aix_use_runtimelinking" is:
+	# "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "aix,yes"  lib.so          shared, rtl:yes, for executables
+	#            lib.a           static archive
+	# "both,no"  lib.so.V(shr.o) shared, rtl:yes
+	#            lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a(lib.so.V) shared, rtl:no
+	# "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a           static archive
+	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+	    # With aix-soname=svr4, we create the lib.so.V shared archives only,
+	    # so we don't have lib.a shared libs to link our executables.
+	    # We have to force runtime linking in this case.
+	    aix_use_runtimelinking=yes
+	    LDFLAGS="$LDFLAGS -Wl,-brtl"
+	  fi
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='$wl-f,'
+      case $with_aix_soname,$aix_use_runtimelinking in
+      aix,*) ;; # traditional, no import file
+      svr4,* | *,yes) # use import file
+	# The Import File defines what to hardcode.
+	hardcode_direct=no
+	hardcode_direct_absolute=no
+	;;
+      esac
+
+      if test yes = "$GCC"; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`$CC -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test yes = "$aix_use_runtimelinking"; then
+	  shared_flag="$shared_flag "'$wl-G'
+	fi
+	# Need to ensure runtime linking is disabled for the traditional
+	# shared library, or the linker may eventually find shared libraries
+	# /with/ Import File - we do not want to mix them.
+	shared_flag_aix='-shared'
+	shared_flag_svr4='-shared $wl-G'
+      else
+	# not using gcc
+	if test ia64 = "$host_cpu"; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test yes = "$aix_use_runtimelinking"; then
+	    shared_flag='$wl-G'
+	  else
+	    shared_flag='$wl-bM:SRE'
+	  fi
+	  shared_flag_aix='$wl-bM:SRE'
+	  shared_flag_svr4='$wl-G'
+	fi
+      fi
+
+      export_dynamic_flag_spec='$wl-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=/usr/lib:/lib
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+        hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+      else
+	if test ia64 = "$host_cpu"; then
+	  hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=/usr/lib:/lib
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+	 hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' $wl-bernotok'
+	  allow_undefined_flag=' $wl-berok'
+	  if test yes = "$with_gnu_ld"; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec='$convenience'
+	  fi
+	  archive_cmds_need_lc=yes
+	  archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+	  # -brtl affects multiple linker settings, -berok does not and is overridden later
+	  compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+	  if test svr4 != "$with_aix_soname"; then
+	    # This is similar to how AIX traditionally builds its shared libraries.
+	    archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+	  fi
+	  if test aix != "$with_aix_soname"; then
+	    archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+	  else
+	    # used by -dlpreopen to get the symbols
+	    archive_expsym_cmds="$archive_expsym_cmds"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+	  fi
+	  archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	always_export_symbols=yes
+	file_list_spec='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=.dll
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+	archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+	enable_shared_with_static_runtimes=yes
+	exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds='chmod 644 $oldlib'
+	postlink_cmds='lt_outputfile="@OUTPUT@"~
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=.dll
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes=yes
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+  else
+    whole_archive_flag_spec=''
+  fi
+  link_all_deplibs=yes
+  allow_undefined_flag=$_lt_dar_allow_undefined
+  case $cc_basename in
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test yes = "$_lt_dar_can_shared"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test yes = "$GCC"; then
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='$wl-E'
+      ;;
+
+    hpux10*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+	archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test no = "$with_gnu_ld"; then
+	hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+	hardcode_libdir_separator=:
+	hardcode_direct=yes
+	hardcode_direct_absolute=yes
+	export_dynamic_flag_spec='$wl-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test yes = "$lt_cv_prog_compiler__b"; then
+    archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+	  ;;
+	esac
+      fi
+      if test no = "$with_gnu_ld"; then
+	hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+	hardcode_libdir_separator=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	*)
+	  hardcode_direct=yes
+	  hardcode_direct_absolute=yes
+	  export_dynamic_flag_spec='$wl-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test yes = "$GCC"; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS=$LDFLAGS
+	   LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           LDFLAGS=$save_LDFLAGS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test yes = "$lt_cv_irix_exported_symbol"; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+	fi
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    linux*)
+      case $cc_basename in
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	ld_shlibs=yes
+	archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+      esac
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd* | bitrig*)
+      if test -f /usr/libexec/ld.so; then
+	hardcode_direct=yes
+	hardcode_shlibpath_var=no
+	hardcode_direct_absolute=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+	  hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+	  export_dynamic_flag_spec='$wl-E'
+	else
+	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+	fi
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    osf3*)
+      if test yes = "$GCC"; then
+	allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+	archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test yes = "$GCC"; then
+	allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+	archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test yes = "$GCC"; then
+	wlarc='$wl'
+	archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='$wl'
+	  archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands '-z linker_flag'.  GCC discards it without '$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test yes = "$GCC"; then
+	  whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+	else
+	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test sequent = "$host_vendor"; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='$wl-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+	archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We CANNOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='$wl-z,text'
+      allow_undefined_flag='$wl-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='$wl-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='$wl-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+	archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test sni = "$host_vendor"; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	export_dynamic_flag_spec='$wl-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test no = "$ld_shlibs" && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test yes,yes = "$GCC,$enable_shared"; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl
+	  pic_flag=$lt_prog_compiler_pic
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag
+	  allow_undefined_flag=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc=no
+	  else
+	    lt_cv_archive_cmds_need_lc=yes
+	  fi
+	  allow_undefined_flag=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test yes = "$GCC"; then
+  case $host_os in
+    darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+    *) lt_awk_arg='/^libraries:/' ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
+    *) lt_sed_strip_eq='s|=/|/|g' ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary...
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  # ...but if some path component already ends with the multilib dir we assume
+  # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+  case "$lt_multi_os_dir; $lt_search_path_spec " in
+  "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+    lt_multi_os_dir=
+    ;;
+  esac
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+    elif test -n "$lt_multi_os_dir"; then
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+  lt_foo = "";
+  lt_count = 0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo = "/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='$libname$release$shared_ext$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test ia64 = "$host_cpu"; then
+    # AIX 5 supports IA64
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='$libname$shared_ext'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec=$LIB
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+    fi
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test yes = "$lt_cv_prog_gnu_ld"; then
+		version_type=linux # correct to gnu/linux during the next big refactor
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec='-L$libdir'
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd* | bitrig*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec=/usr/lib
+  need_lib_prefix=no
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+os2*)
+  libname_spec='$name'
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test yes = "$with_gnu_ld"; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec; then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=sco
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test yes = "$with_gnu_ld"; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test yes = "$hardcode_automatic"; then
+
+  # We can hardcode non-existent directories.
+  if test no != "$hardcode_direct" &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
+     test no != "$hardcode_minus_L"; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test relink = "$hardcode_action" ||
+   test yes = "$inherit_rpath"; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test yes != "$enable_dlopen"; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen=load_add_on
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen=LoadLibrary
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+    # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
+
+    lt_cv_dlopen=dyld
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+  lt_cv_dlopen=shl_load
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+  lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+  lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test no = "$lt_cv_dlopen"; then
+    enable_dlopen=no
+  else
+    enable_dlopen=yes
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS=$LDFLAGS
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS=$LIBS
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test yes = "$cross_compiling"; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test yes = "$lt_cv_dlopen_self"; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test yes = "$cross_compiling"; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP"; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report what library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test no = "$can_build_shared" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test yes = "$enable_shared" && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test ia64 != "$host_cpu"; then
+      case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+      yes,aix,yes) ;;			# shared object as lib.so file only
+      yes,svr4,*) ;;			# shared object as lib.so archive member only
+      yes,*) enable_static=no ;;	# shared object in lib.a archive as well
+      esac
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test yes = "$enable_shared" || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC=$lt_save_CC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+
+  CFLAG_VISIBILITY=
+  HAVE_VISIBILITY=0
+  if test -n "$GCC"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5
+$as_echo_n "checking whether the -Werror option is usable... " >&6; }
+if ${gl_cv_cc_vis_werror+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_save_CFLAGS="$CFLAGS"
+       CFLAGS="$CFLAGS -Werror"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_cc_vis_werror=yes
+else
+  gl_cv_cc_vis_werror=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       CFLAGS="$gl_save_CFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5
+$as_echo "$gl_cv_cc_vis_werror" >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5
+$as_echo_n "checking for simple visibility declarations... " >&6; }
+if ${gl_cv_cc_visibility+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_save_CFLAGS="$CFLAGS"
+       CFLAGS="$CFLAGS -fvisibility=hidden"
+                                          if test $gl_cv_cc_vis_werror = yes; then
+         CFLAGS="$CFLAGS -Werror"
+       fi
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+extern __attribute__((__visibility__("hidden"))) int hiddenvar;
+              extern __attribute__((__visibility__("default"))) int exportedvar;
+              extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
+              extern __attribute__((__visibility__("default"))) int exportedfunc (void);
+              void dummyfunc (void) {}
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_cc_visibility=yes
+else
+  gl_cv_cc_visibility=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       CFLAGS="$gl_save_CFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5
+$as_echo "$gl_cv_cc_visibility" >&6; }
+    if test $gl_cv_cc_visibility = yes; then
+      CFLAG_VISIBILITY="-fvisibility=hidden"
+      HAVE_VISIBILITY=1
+    fi
+  fi
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_VISIBILITY $HAVE_VISIBILITY
+_ACEOF
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h defines makedev" >&5
+$as_echo_n "checking whether sys/types.h defines makedev... " >&6; }
+if ${ac_cv_header_sys_types_h_makedev+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+int
+main ()
+{
+return makedev(0, 0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_header_sys_types_h_makedev=yes
+else
+  ac_cv_header_sys_types_h_makedev=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_types_h_makedev" >&5
+$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; }
+
+if test $ac_cv_header_sys_types_h_makedev = no; then
+ac_fn_c_check_header_mongrel "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mkdev_h" = xyes; then :
+
+$as_echo "#define MAJOR_IN_MKDEV 1" >>confdefs.h
+
+fi
+
+
+
+  if test $ac_cv_header_sys_mkdev_h = no; then
+    ac_fn_c_check_header_mongrel "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_sysmacros_h" = xyes; then :
+
+$as_echo "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h
+
+fi
+
+
+  fi
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
+$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
+if ${ac_cv_header_sys_wait_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/wait.h>
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
+
+int
+main ()
+{
+  int s;
+  wait (&s);
+  s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_sys_wait_h=yes
+else
+  ac_cv_header_sys_wait_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5
+$as_echo "$ac_cv_header_sys_wait_h" >&6; }
+if test $ac_cv_header_sys_wait_h = yes; then
+
+$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
+
+fi
+
+for ac_header in stdint.h fcntl.h inttypes.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in utime.h wchar.h wctype.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in getopt.h err.h xlocale.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in sys/mman.h sys/stat.h sys/types.h sys/utime.h sys/time.h sys/sysmacros.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+if test "$enable_zlib" != "no"; then
+  for ac_header in zlib.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_zlib_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_ZLIB_H 1
+_ACEOF
+
+fi
+
+done
+
+fi
+if test "$enable_bzlib" != "no"; then
+  for ac_header in bzlib.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "bzlib.h" "ac_cv_header_bzlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_bzlib_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_BZLIB_H 1
+_ACEOF
+
+fi
+
+done
+
+fi
+if test "$enable_xzlib" != "no"; then
+  for ac_header in lzma.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "lzma.h" "ac_cv_header_lzma_h" "$ac_includes_default"
+if test "x$ac_cv_header_lzma_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LZMA_H 1
+_ACEOF
+
+fi
+
+done
+
+fi
+ac_fn_c_check_type "$LINENO" "sig_t" "ac_cv_type_sig_t" "#include <signal.h>
+"
+if test "x$ac_cv_type_sig_t" = xyes; then :
+
+$as_echo "#define HAVE_SIG_T 1" >>confdefs.h
+
+fi
+
+
+ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
+if test "x$ac_cv_type_off_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define off_t long int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_rdev" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_RDEV 1
+_ACEOF
+
+
+fi
+
+
+ac_fn_c_check_member "$LINENO" "struct tm" "tm_gmtoff" "ac_cv_member_struct_tm_tm_gmtoff" "#include <time.h>
+"
+if test "x$ac_cv_member_struct_tm_tm_gmtoff" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_TM_TM_GMTOFF 1
+_ACEOF
+
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
+$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
+if ${ac_cv_struct_tm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm tm;
+				     int *p = &tm.tm_sec;
+				     return !p;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_struct_tm=time.h
+else
+  ac_cv_struct_tm=sys/time.h
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
+$as_echo "$ac_cv_struct_tm" >&6; }
+if test $ac_cv_struct_tm = sys/time.h; then
+
+$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_zone" "#include <sys/types.h>
+#include <$ac_cv_struct_tm>
+
+"
+if test "x$ac_cv_member_struct_tm_tm_zone" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_TM_TM_ZONE 1
+_ACEOF
+
+
+fi
+
+if test "$ac_cv_member_struct_tm_tm_zone" = yes; then
+
+$as_echo "#define HAVE_TM_ZONE 1" >>confdefs.h
+
+else
+  ac_fn_c_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include <time.h>
+"
+if test "x$ac_cv_have_decl_tzname" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TZNAME $ac_have_decl
+_ACEOF
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5
+$as_echo_n "checking for tzname... " >&6; }
+if ${ac_cv_var_tzname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <time.h>
+#if !HAVE_DECL_TZNAME
+extern char *tzname[];
+#endif
+
+int
+main ()
+{
+return tzname[0][0];
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_var_tzname=yes
+else
+  ac_cv_var_tzname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5
+$as_echo "$ac_cv_var_tzname" >&6; }
+  if test $ac_cv_var_tzname = yes; then
+
+$as_echo "#define HAVE_TZNAME 1" >>confdefs.h
+
+  fi
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tm_zone in struct tm" >&5
+$as_echo_n "checking for tm_zone in struct tm... " >&6; }
+if ${ac_cv_struct_tm_zone+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <$ac_cv_struct_tm>
+int
+main ()
+{
+struct tm tm; tm.tm_zone;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_struct_tm_zone=yes
+else
+  ac_cv_struct_tm_zone=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm_zone" >&5
+$as_echo "$ac_cv_struct_tm_zone" >&6; }
+if test "$ac_cv_struct_tm_zone" = yes; then
+
+$as_echo "#define HAVE_TM_ZONE 1" >>confdefs.h
+
+fi
+
+# On SGI, apparently tzname is a #define, but that's ok, AC_CHECK_DECL will
+# consider it declared and we won't give our own extern.
+ac_fn_c_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include <time.h>
+"
+if test "x$ac_cv_have_decl_tzname" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TZNAME $ac_have_decl
+_ACEOF
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5
+$as_echo_n "checking for tzname... " >&6; }
+if ${ac_cv_var_tzname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <time.h>
+#if !HAVE_DECL_TZNAME
+extern char *tzname[];
+#endif
+int
+main ()
+{
+return tzname[0][0];
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_var_tzname=yes
+else
+  ac_cv_var_tzname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5
+$as_echo "$ac_cv_var_tzname" >&6; }
+  if test $ac_cv_var_tzname = yes; then
+
+$as_echo "#define HAVE_TZNAME 1" >>confdefs.h
+
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tm_isdst in struct tm" >&5
+$as_echo_n "checking for tm_isdst in struct tm... " >&6; }
+if ${ac_cv_struct_tm_isdst+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <$ac_cv_struct_tm>
+int
+main ()
+{
+struct tm tm; tm.tm_isdst;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_struct_tm_isdst=yes
+else
+  ac_cv_struct_tm_isdst=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm_isdst" >&5
+$as_echo "$ac_cv_struct_tm_isdst" >&6; }
+if test "$ac_cv_struct_tm_isdst" = yes; then
+
+$as_echo "#define HAVE_TM_ISDST 1" >>confdefs.h
+
+fi
+
+
+ac_fn_c_check_decl "$LINENO" "daylight" "ac_cv_have_decl_daylight" "#include <time.h>
+"
+if test "x$ac_cv_have_decl_daylight" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_DAYLIGHT $ac_have_decl
+_ACEOF
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for daylight" >&5
+$as_echo_n "checking for daylight... " >&6; }
+if ${ac_cv_var_daylight+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <time.h>
+#if !HAVE_DECL_DAYLIGHT
+extern int daylight;
+#endif
+int
+main ()
+{
+atoi(daylight);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_var_daylight=yes
+else
+  ac_cv_var_daylight=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_daylight" >&5
+$as_echo "$ac_cv_var_daylight" >&6; }
+  if test $ac_cv_var_daylight = yes; then
+
+$as_echo "#define HAVE_DAYLIGHT 1" >>confdefs.h
+
+  fi
+
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then :
+  enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if ${ac_cv_sys_largefile_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_sys_largefile_CC=no
+     if test "$GCC" != yes; then
+       ac_save_CC=$CC
+       while :; do
+	 # IRIX 6.2 and later do not support large files by default,
+	 # so use the C compiler's -n32 option if that helps.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+	 if ac_fn_c_try_compile "$LINENO"; then :
+  break
+fi
+rm -f core conftest.err conftest.$ac_objext
+	 CC="$CC -n32"
+	 if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext
+	 break
+       done
+       CC=$ac_save_CC
+       rm -f conftest.$ac_ext
+    fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+  if test "$ac_cv_sys_largefile_CC" != no; then
+    CC=$CC$ac_cv_sys_largefile_CC
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if ${ac_cv_sys_file_offset_bits+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=64; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_file_offset_bits=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  if test $ac_cv_sys_file_offset_bits = unknown; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if ${ac_cv_sys_large_files+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_large_files=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  fi
+
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5
+$as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; }
+if ${ac_cv_sys_largefile_source+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h> /* for off_t */
+     #include <stdio.h>
+int
+main ()
+{
+int (*fp) (FILE *, off_t, int) = fseeko;
+     return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_sys_largefile_source=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _LARGEFILE_SOURCE 1
+#include <sys/types.h> /* for off_t */
+     #include <stdio.h>
+int
+main ()
+{
+int (*fp) (FILE *, off_t, int) = fseeko;
+     return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_sys_largefile_source=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  ac_cv_sys_largefile_source=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5
+$as_echo "$ac_cv_sys_largefile_source" >&6; }
+case $ac_cv_sys_largefile_source in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source
+_ACEOF
+;;
+esac
+rm -rf conftest*
+
+# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
+# in glibc 2.1.3, but that breaks too many other things.
+# If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
+if test $ac_cv_sys_largefile_source != unknown; then
+
+$as_echo "#define HAVE_FSEEKO 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5
+$as_echo_n "checking for mbstate_t... " >&6; }
+if ${ac_cv_type_mbstate_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+#	    include <wchar.h>
+int
+main ()
+{
+mbstate_t x; return sizeof x;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_type_mbstate_t=yes
+else
+  ac_cv_type_mbstate_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5
+$as_echo "$ac_cv_type_mbstate_t" >&6; }
+   if test $ac_cv_type_mbstate_t = yes; then
+
+$as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h
+
+   else
+
+$as_echo "#define mbstate_t int" >>confdefs.h
+
+   fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct option in getopt" >&5
+$as_echo_n "checking for struct option in getopt... " >&6; }
+if ${ac_cv_struct_option_getopt_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <getopt.h>
+int
+main ()
+{
+struct option op; op.name;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_struct_option_getopt_h=yes
+else
+  ac_cv_struct_option_getopt_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_option_getopt_h" >&5
+$as_echo "$ac_cv_struct_option_getopt_h" >&6; }
+if test "$ac_cv_struct_option_getopt_h" = yes; then
+
+$as_echo "#define HAVE_STRUCT_OPTION 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
+if test "x$ac_cv_type_pid_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
+
+fi
+
+ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t"
+case $ac_cv_c_uint8_t in #(
+  no|yes) ;; #(
+  *)
+
+$as_echo "#define _UINT8_T 1" >>confdefs.h
+
+
+cat >>confdefs.h <<_ACEOF
+#define uint8_t $ac_cv_c_uint8_t
+_ACEOF
+;;
+  esac
+
+ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t"
+case $ac_cv_c_uint16_t in #(
+  no|yes) ;; #(
+  *)
+
+
+cat >>confdefs.h <<_ACEOF
+#define uint16_t $ac_cv_c_uint16_t
+_ACEOF
+;;
+  esac
+
+ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t"
+case $ac_cv_c_uint32_t in #(
+  no|yes) ;; #(
+  *)
+
+$as_echo "#define _UINT32_T 1" >>confdefs.h
+
+
+cat >>confdefs.h <<_ACEOF
+#define uint32_t $ac_cv_c_uint32_t
+_ACEOF
+;;
+  esac
+
+ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t"
+case $ac_cv_c_int32_t in #(
+  no|yes) ;; #(
+  *)
+
+cat >>confdefs.h <<_ACEOF
+#define int32_t $ac_cv_c_int32_t
+_ACEOF
+;;
+esac
+
+ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t"
+case $ac_cv_c_uint64_t in #(
+  no|yes) ;; #(
+  *)
+
+$as_echo "#define _UINT64_T 1" >>confdefs.h
+
+
+cat >>confdefs.h <<_ACEOF
+#define uint64_t $ac_cv_c_uint64_t
+_ACEOF
+;;
+  esac
+
+ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t"
+case $ac_cv_c_int64_t in #(
+  no|yes) ;; #(
+  *)
+
+cat >>confdefs.h <<_ACEOF
+#define int64_t $ac_cv_c_int64_t
+_ACEOF
+;;
+esac
+
+
+  ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default"
+if test "x$ac_cv_type_intptr_t" = xyes; then :
+
+$as_echo "#define HAVE_INTPTR_T 1" >>confdefs.h
+
+else
+  for ac_type in 'int' 'long int' 'long long int'; do
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define intptr_t $ac_type
+_ACEOF
+
+	  ac_type=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       test -z "$ac_type" && break
+     done
+fi
+
+
+
+  ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default"
+if test "x$ac_cv_type_uintptr_t" = xyes; then :
+
+$as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h
+
+else
+  for ac_type in 'unsigned int' 'unsigned long int' \
+	'unsigned long long int'; do
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define uintptr_t $ac_type
+_ACEOF
+
+	  ac_type=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       test -z "$ac_type" && break
+     done
+fi
+
+
+
+
+
+  for ac_header in $ac_header_list
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+for ac_func in getpagesize
+do :
+  ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
+if test "x$ac_cv_func_getpagesize" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_GETPAGESIZE 1
+_ACEOF
+
+fi
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
+$as_echo_n "checking for working mmap... " >&6; }
+if ${ac_cv_func_mmap_fixed_mapped+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_mmap_fixed_mapped=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+/* malloc might have been renamed as rpl_malloc. */
+#undef malloc
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+   Here is a matrix of mmap possibilities:
+	mmap private not fixed
+	mmap private fixed at somewhere currently unmapped
+	mmap private fixed at somewhere already mapped
+	mmap shared not fixed
+	mmap shared fixed at somewhere currently unmapped
+	mmap shared fixed at somewhere already mapped
+   For private mappings, we should verify that changes cannot be read()
+   back from the file, nor mmap's back from the file at a different
+   address.  (There have been systems where private was not correctly
+   implemented like the infamous i386 svr4.0, and systems where the
+   VM page cache was not coherent with the file system buffer cache
+   like early versions of FreeBSD and possibly contemporary NetBSD.)
+   For shared mappings, we should conversely verify that changes get
+   propagated back to all the places they're supposed to be.
+
+   Grep wants private fixed already mapped.
+   The main things grep needs to know about mmap are:
+   * does it exist and is it safe to write into the mmap'd area
+   * how to use it (BSD variants)  */
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
+char *malloc ();
+#endif
+
+/* This mess was copied from the GNU getpagesize.h.  */
+#ifndef HAVE_GETPAGESIZE
+# ifdef _SC_PAGESIZE
+#  define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+#  ifdef HAVE_SYS_PARAM_H
+#   include <sys/param.h>
+#   ifdef EXEC_PAGESIZE
+#    define getpagesize() EXEC_PAGESIZE
+#   else /* no EXEC_PAGESIZE */
+#    ifdef NBPG
+#     define getpagesize() NBPG * CLSIZE
+#     ifndef CLSIZE
+#      define CLSIZE 1
+#     endif /* no CLSIZE */
+#    else /* no NBPG */
+#     ifdef NBPC
+#      define getpagesize() NBPC
+#     else /* no NBPC */
+#      ifdef PAGESIZE
+#       define getpagesize() PAGESIZE
+#      endif /* PAGESIZE */
+#     endif /* no NBPC */
+#    endif /* no NBPG */
+#   endif /* no EXEC_PAGESIZE */
+#  else /* no HAVE_SYS_PARAM_H */
+#   define getpagesize() 8192	/* punt totally */
+#  endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+int
+main ()
+{
+  char *data, *data2, *data3;
+  const char *cdata2;
+  int i, pagesize;
+  int fd, fd2;
+
+  pagesize = getpagesize ();
+
+  /* First, make a file with some known garbage in it. */
+  data = (char *) malloc (pagesize);
+  if (!data)
+    return 1;
+  for (i = 0; i < pagesize; ++i)
+    *(data + i) = rand ();
+  umask (0);
+  fd = creat ("conftest.mmap", 0600);
+  if (fd < 0)
+    return 2;
+  if (write (fd, data, pagesize) != pagesize)
+    return 3;
+  close (fd);
+
+  /* Next, check that the tail of a page is zero-filled.  File must have
+     non-zero length, otherwise we risk SIGBUS for entire page.  */
+  fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600);
+  if (fd2 < 0)
+    return 4;
+  cdata2 = "";
+  if (write (fd2, cdata2, 1) != 1)
+    return 5;
+  data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L);
+  if (data2 == MAP_FAILED)
+    return 6;
+  for (i = 0; i < pagesize; ++i)
+    if (*(data2 + i))
+      return 7;
+  close (fd2);
+  if (munmap (data2, pagesize))
+    return 8;
+
+  /* Next, try to mmap the file at a fixed address which already has
+     something else allocated at it.  If we can, also make sure that
+     we see the same garbage.  */
+  fd = open ("conftest.mmap", O_RDWR);
+  if (fd < 0)
+    return 9;
+  if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
+		     MAP_PRIVATE | MAP_FIXED, fd, 0L))
+    return 10;
+  for (i = 0; i < pagesize; ++i)
+    if (*(data + i) != *(data2 + i))
+      return 11;
+
+  /* Finally, make sure that changes to the mapped area do not
+     percolate back to the file as seen by read().  (This is a bug on
+     some variants of i386 svr4.0.)  */
+  for (i = 0; i < pagesize; ++i)
+    *(data2 + i) = *(data2 + i) + 1;
+  data3 = (char *) malloc (pagesize);
+  if (!data3)
+    return 12;
+  if (read (fd, data3, pagesize) != pagesize)
+    return 13;
+  for (i = 0; i < pagesize; ++i)
+    if (*(data + i) != *(data3 + i))
+      return 14;
+  close (fd);
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_mmap_fixed_mapped=yes
+else
+  ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5
+$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; }
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+
+$as_echo "#define HAVE_MMAP 1" >>confdefs.h
+
+fi
+rm -f conftest.mmap conftest.txt
+
+for ac_header in vfork.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default"
+if test "x$ac_cv_header_vfork_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VFORK_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_func in fork vfork
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+if test "x$ac_cv_func_fork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
+$as_echo_n "checking for working fork... " >&6; }
+if ${ac_cv_func_fork_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_fork_works=cross
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+	  /* By Ruediger Kuhlmann. */
+	  return fork () < 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_fork_works=yes
+else
+  ac_cv_func_fork_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5
+$as_echo "$ac_cv_func_fork_works" >&6; }
+
+else
+  ac_cv_func_fork_works=$ac_cv_func_fork
+fi
+if test "x$ac_cv_func_fork_works" = xcross; then
+  case $host in
+    *-*-amigaos* | *-*-msdosdjgpp*)
+      # Override, as these systems have only a dummy fork() stub
+      ac_cv_func_fork_works=no
+      ;;
+    *)
+      ac_cv_func_fork_works=yes
+      ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
+fi
+ac_cv_func_vfork_works=$ac_cv_func_vfork
+if test "x$ac_cv_func_vfork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
+$as_echo_n "checking for working vfork... " >&6; }
+if ${ac_cv_func_vfork_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_vfork_works=cross
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Thanks to Paul Eggert for this test.  */
+$ac_includes_default
+#include <sys/wait.h>
+#ifdef HAVE_VFORK_H
+# include <vfork.h>
+#endif
+/* On some sparc systems, changes by the child to local and incoming
+   argument registers are propagated back to the parent.  The compiler
+   is told about this with #include <vfork.h>, but some compilers
+   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a
+   static variable whose address is put into a register that is
+   clobbered by the vfork.  */
+static void
+#ifdef __cplusplus
+sparc_address_test (int arg)
+# else
+sparc_address_test (arg) int arg;
+#endif
+{
+  static pid_t child;
+  if (!child) {
+    child = vfork ();
+    if (child < 0) {
+      perror ("vfork");
+      _exit(2);
+    }
+    if (!child) {
+      arg = getpid();
+      write(-1, "", 0);
+      _exit (arg);
+    }
+  }
+}
+
+int
+main ()
+{
+  pid_t parent = getpid ();
+  pid_t child;
+
+  sparc_address_test (0);
+
+  child = vfork ();
+
+  if (child == 0) {
+    /* Here is another test for sparc vfork register problems.  This
+       test uses lots of local variables, at least as many local
+       variables as main has allocated so far including compiler
+       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris
+       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should
+       reuse the register of parent for one of the local variables,
+       since it will think that parent can't possibly be used any more
+       in this routine.  Assigning to the local variable will thus
+       munge parent in the parent process.  */
+    pid_t
+      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
+      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
+    /* Convince the compiler that p..p7 are live; otherwise, it might
+       use the same hardware register for all 8 local variables.  */
+    if (p != p1 || p != p2 || p != p3 || p != p4
+	|| p != p5 || p != p6 || p != p7)
+      _exit(1);
+
+    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
+       from child file descriptors.  If the child closes a descriptor
+       before it execs or exits, this munges the parent's descriptor
+       as well.  Test for this by closing stdout in the child.  */
+    _exit(close(fileno(stdout)) != 0);
+  } else {
+    int status;
+    struct stat st;
+
+    while (wait(&status) != child)
+      ;
+    return (
+	 /* Was there some problem with vforking?  */
+	 child < 0
+
+	 /* Did the child fail?  (This shouldn't happen.)  */
+	 || status
+
+	 /* Did the vfork/compiler bug occur?  */
+	 || parent != getpid()
+
+	 /* Did the file descriptor bug occur?  */
+	 || fstat(fileno(stdout), &st) != 0
+	 );
+  }
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_vfork_works=yes
+else
+  ac_cv_func_vfork_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5
+$as_echo "$ac_cv_func_vfork_works" >&6; }
+
+fi;
+if test "x$ac_cv_func_fork_works" = xcross; then
+  ac_cv_func_vfork_works=$ac_cv_func_vfork
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
+fi
+
+if test "x$ac_cv_func_vfork_works" = xyes; then
+
+$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
+
+else
+
+$as_echo "#define vfork fork" >>confdefs.h
+
+fi
+if test "x$ac_cv_func_fork_works" = xyes; then
+
+$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
+
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc and mbstate_t are properly declared" >&5
+$as_echo_n "checking whether mbrtowc and mbstate_t are properly declared... " >&6; }
+if ${ac_cv_func_mbrtowc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <wchar.h>
+int
+main ()
+{
+wchar_t wc;
+	      char const s[] = "";
+	      size_t n = 1;
+	      mbstate_t state;
+	      return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_func_mbrtowc=yes
+else
+  ac_cv_func_mbrtowc=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5
+$as_echo "$ac_cv_func_mbrtowc" >&6; }
+  if test $ac_cv_func_mbrtowc = yes; then
+
+$as_echo "#define HAVE_MBRTOWC 1" >>confdefs.h
+
+  fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc compiler warnings" >&5
+$as_echo_n "checking for gcc compiler warnings... " >&6; }
+# Check whether --enable-warnings was given.
+if test "${enable_warnings+set}" = set; then :
+  enableval=$enable_warnings; if test "${enableval}" = no -o "$GCC" = no; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+   WARNINGS=
+else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+   WARNINGS="-Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \
+       -Wmissing-declarations -Wredundant-decls -Wnested-externs \
+       -Wsign-compare -Wreturn-type -Wswitch -Wshadow \
+       -Wcast-qual -Wwrite-strings -Wextra -Wunused-parameter -Wformat=2"
+fi
+else
+
+if test "$GCC" = yes; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+   WARNINGS="-Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \
+       -Wmissing-declarations -Wredundant-decls -Wnested-externs \
+       -Wsign-compare -Wreturn-type -Wswitch -Wshadow \
+       -Wcast-qual -Wwrite-strings -Wextra -Wunused-parameter -Wformat=2"
+else
+   WARNINGS=
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+fi
+
+
+for ac_func in strndup mkstemp mkostemp utimes utime wcwidth strtof newlocale uselocale freelocale memmem
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long"
+if test "x$ac_cv_func_getopt_long" = xyes; then :
+  $as_echo "#define HAVE_GETOPT_LONG 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" getopt_long.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS getopt_long.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "asprintf" "ac_cv_func_asprintf"
+if test "x$ac_cv_func_asprintf" = xyes; then :
+  $as_echo "#define HAVE_ASPRINTF 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" asprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS asprintf.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf"
+if test "x$ac_cv_func_vasprintf" = xyes; then :
+  $as_echo "#define HAVE_VASPRINTF 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" vasprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy"
+if test "x$ac_cv_func_strlcpy" = xyes; then :
+  $as_echo "#define HAVE_STRLCPY 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" strlcpy.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strlcpy.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "strlcat" "ac_cv_func_strlcat"
+if test "x$ac_cv_func_strlcat" = xyes; then :
+  $as_echo "#define HAVE_STRLCAT 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" strlcat.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strlcat.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline"
+if test "x$ac_cv_func_getline" = xyes; then :
+  $as_echo "#define HAVE_GETLINE 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" getline.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS getline.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "ctime_r" "ac_cv_func_ctime_r"
+if test "x$ac_cv_func_ctime_r" = xyes; then :
+  $as_echo "#define HAVE_CTIME_R 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" ctime_r.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS ctime_r.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "asctime_r" "ac_cv_func_asctime_r"
+if test "x$ac_cv_func_asctime_r" = xyes; then :
+  $as_echo "#define HAVE_ASCTIME_R 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" asctime_r.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS asctime_r.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r"
+if test "x$ac_cv_func_localtime_r" = xyes; then :
+  $as_echo "#define HAVE_LOCALTIME_R 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" localtime_r.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS localtime_r.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r"
+if test "x$ac_cv_func_gmtime_r" = xyes; then :
+  $as_echo "#define HAVE_GMTIME_R 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" gmtime_r.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS gmtime_r.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "pread" "ac_cv_func_pread"
+if test "x$ac_cv_func_pread" = xyes; then :
+  $as_echo "#define HAVE_PREAD 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" pread.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS pread.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr"
+if test "x$ac_cv_func_strcasestr" = xyes; then :
+  $as_echo "#define HAVE_STRCASESTR 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" strcasestr.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strcasestr.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "fmtcheck" "ac_cv_func_fmtcheck"
+if test "x$ac_cv_func_fmtcheck" = xyes; then :
+  $as_echo "#define HAVE_FMTCHECK 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" fmtcheck.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS fmtcheck.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "dprintf" "ac_cv_func_dprintf"
+if test "x$ac_cv_func_dprintf" = xyes; then :
+  $as_echo "#define HAVE_DPRINTF 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" dprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS dprintf.$ac_objext"
+ ;;
+esac
+
+fi
+
+
+
+if test "$enable_zlib" != "no"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzopen in -lz" >&5
+$as_echo_n "checking for gzopen in -lz... " >&6; }
+if ${ac_cv_lib_z_gzopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gzopen ();
+int
+main ()
+{
+return gzopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_z_gzopen=yes
+else
+  ac_cv_lib_z_gzopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzopen" >&5
+$as_echo "$ac_cv_lib_z_gzopen" >&6; }
+if test "x$ac_cv_lib_z_gzopen" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBZ 1
+_ACEOF
+
+  LIBS="-lz $LIBS"
+
+fi
+
+fi
+if test "$enable_bzlib" != "no"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BZ2_bzCompressInit in -lbz2" >&5
+$as_echo_n "checking for BZ2_bzCompressInit in -lbz2... " >&6; }
+if ${ac_cv_lib_bz2_BZ2_bzCompressInit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbz2  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char BZ2_bzCompressInit ();
+int
+main ()
+{
+return BZ2_bzCompressInit ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_bz2_BZ2_bzCompressInit=yes
+else
+  ac_cv_lib_bz2_BZ2_bzCompressInit=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_BZ2_bzCompressInit" >&5
+$as_echo "$ac_cv_lib_bz2_BZ2_bzCompressInit" >&6; }
+if test "x$ac_cv_lib_bz2_BZ2_bzCompressInit" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBBZ2 1
+_ACEOF
+
+  LIBS="-lbz2 $LIBS"
+
+fi
+
+fi
+if test "$enable_xzlib" != "no"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lzma_stream_decoder in -llzma" >&5
+$as_echo_n "checking for lzma_stream_decoder in -llzma... " >&6; }
+if ${ac_cv_lib_lzma_lzma_stream_decoder+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-llzma  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char lzma_stream_decoder ();
+int
+main ()
+{
+return lzma_stream_decoder ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_lzma_lzma_stream_decoder=yes
+else
+  ac_cv_lib_lzma_lzma_stream_decoder=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzma_lzma_stream_decoder" >&5
+$as_echo "$ac_cv_lib_lzma_lzma_stream_decoder" >&6; }
+if test "x$ac_cv_lib_lzma_lzma_stream_decoder" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBLZMA 1
+_ACEOF
+
+  LIBS="-llzma $LIBS"
+
+fi
+
+fi
+if test "$enable_libseccomp" != "no"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for seccomp_init in -lseccomp" >&5
+$as_echo_n "checking for seccomp_init in -lseccomp... " >&6; }
+if ${ac_cv_lib_seccomp_seccomp_init+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lseccomp  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char seccomp_init ();
+int
+main ()
+{
+return seccomp_init ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_seccomp_seccomp_init=yes
+else
+  ac_cv_lib_seccomp_seccomp_init=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_seccomp_seccomp_init" >&5
+$as_echo "$ac_cv_lib_seccomp_seccomp_init" >&6; }
+if test "x$ac_cv_lib_seccomp_seccomp_init" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSECCOMP 1
+_ACEOF
+
+  LIBS="-lseccomp $LIBS"
+
+fi
+
+fi
+if test "$MINGW" = 1; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for regexec in -lgnurx" >&5
+$as_echo_n "checking for regexec in -lgnurx... " >&6; }
+if ${ac_cv_lib_gnurx_regexec+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgnurx  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char regexec ();
+int
+main ()
+{
+return regexec ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_gnurx_regexec=yes
+else
+  ac_cv_lib_gnurx_regexec=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gnurx_regexec" >&5
+$as_echo "$ac_cv_lib_gnurx_regexec" >&6; }
+if test "x$ac_cv_lib_gnurx_regexec" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGNURX 1
+_ACEOF
+
+  LIBS="-lgnurx $LIBS"
+
+else
+  as_fn_error $? "libgnurx is required to build file(1) with MinGW" "$LINENO" 5
+fi
+
+fi
+
+ if test "$cross_compiling" = yes; then
+  IS_CROSS_COMPILE_TRUE=
+  IS_CROSS_COMPILE_FALSE='#'
+else
+  IS_CROSS_COMPILE_TRUE='#'
+  IS_CROSS_COMPILE_FALSE=
+fi
+
+
+if test "$enable_zlib" = "yes"; then
+  if test "$ac_cv_header_zlib_h$ac_cv_lib_z_gzopen" != "yesyes"; then
+    as_fn_error $? "zlib support requested but not found" "$LINENO" 5
+  fi
+fi
+if  test "$ac_cv_header_zlib_h$ac_cv_lib_z_gzopen" = "yesyes"; then
+
+$as_echo "#define ZLIBSUPPORT 1" >>confdefs.h
+
+fi
+if test "$enable_bzlib" = "yes"; then
+  if test "$ac_cv_header_bzlib_h$ac_cv_lib_bz2_BZ2_bzCompressInit" != "yesyes"; then
+    as_fn_error $? "bzlib support requested but not found" "$LINENO" 5
+  fi
+fi
+if  test "$ac_cv_header_bzlib_h$ac_cv_lib_bz2_BZ2_bzCompressInit" = "yesyes"; then
+
+$as_echo "#define BZLIBSUPPORT 1" >>confdefs.h
+
+fi
+if test "$enable_xzlib" = "yes"; then
+  if test "$ac_cv_header_lzma_h$ac_cv_lib_lzma_lzma_stream_decoder" != "yesyes"; then
+    as_fn_error $? "xzlib support requested but not found" "$LINENO" 5
+  fi
+fi
+if  test "$ac_cv_header_lzma_h$ac_cv_lib_lzma_lzma_stream_decoder" = "yesyes"; then
+
+$as_echo "#define XZLIBSUPPORT 1" >>confdefs.h
+
+fi
+
+ac_config_files="$ac_config_files Makefile src/Makefile magic/Makefile tests/Makefile doc/Makefile python/Makefile libmagic.pc"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    if test "x$cache_file" != "x/dev/null"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${MINGW_TRUE}" && test -z "${MINGW_FALSE}"; then
+  as_fn_error $? "conditional \"MINGW\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${FSECT5_TRUE}" && test -z "${FSECT5_FALSE}"; then
+  as_fn_error $? "conditional \"FSECT5\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+if test -z "${IS_CROSS_COMPILE_TRUE}" && test -z "${IS_CROSS_COMPILE_FALSE}"; then
+  as_fn_error $? "conditional \"IS_CROSS_COMPILE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by file $as_me 5.39, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <christos@astron.com>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+file config.status 5.39
+configured by $0, generated by GNU Autoconf 2.69,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
+configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_import \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_cv_nm_interface \
+nm_file_list_spec \
+lt_cv_truncate_bin \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+configure_time_dlsearch_path \
+configure_time_lt_sys_library_path; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "magic/Makefile") CONFIG_FILES="$CONFIG_FILES magic/Makefile" ;;
+    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;;
+    "libmagic.pc") CONFIG_FILES="$CONFIG_FILES libmagic.pc" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp= ac_tmp=
+  trap 'exit_status=$?
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$ac_tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$ac_tmp/stdin"
+  case $ac_file in
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$ac_tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$_am_arg" : 'X\(//\)[^/]' \| \
+	 X"$_am_arg" : 'X\(//\)$' \| \
+	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Older Autoconf quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  # TODO: see whether this extra hack can be removed once we start
+  # requiring Autoconf 2.70 or later.
+  case $CONFIG_FILES in #(
+  *\'*) :
+    eval set x "$CONFIG_FILES" ;; #(
+  *) :
+    set x $CONFIG_FILES ;; #(
+  *) :
+     ;;
+esac
+  shift
+  # Used to flag and report bootstrapping failures.
+  am_rc=0
+  for am_mf
+  do
+    # Strip MF so we end up with the name of the file.
+    am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile which includes
+    # dependency-tracking related rules and includes.
+    # Grep'ing the whole file directly is not great: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+      || continue
+    am_dirpart=`$as_dirname -- "$am_mf" ||
+$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$am_mf" : 'X\(//\)[^/]' \| \
+	 X"$am_mf" : 'X\(//\)$' \| \
+	 X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$am_mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    am_filepart=`$as_basename -- "$am_mf" ||
+$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$am_mf" : 'X\(//\)$' \| \
+	 X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$am_mf" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    { echo "$as_me:$LINENO: cd "$am_dirpart" \
+      && sed -e '/# am--include-marker/d' "$am_filepart" \
+        | $MAKE -f - am--depfiles" >&5
+   (cd "$am_dirpart" \
+      && sed -e '/# am--include-marker/d' "$am_filepart" \
+        | $MAKE -f - am--depfiles) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } || am_rc=$?
+  done
+  if test $am_rc -ne 0; then
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Something went wrong bootstrapping makefile fragments
+    for automatic dependency tracking.  Try re-running configure with the
+    '--disable-dependency-tracking' option to at least be able to build
+    the package (albeit without support for automatic dependency tracking).
+See \`config.log' for more details" "$LINENO" 5; }
+  fi
+  { am_dirpart=; unset am_dirpart;}
+  { am_filepart=; unset am_filepart;}
+  { am_mf=; unset am_mf;}
+  { am_rc=; unset am_rc;}
+  rm -f conftest-deps.mk
+}
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options that allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}"; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile=${ofile}T
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool 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 2 of of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the  same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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/>.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=''
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name lister interface.
+nm_interface=$lt_lt_cv_nm_interface
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and where our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
+
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+    cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x$2 in
+    x)
+        ;;
+    *:)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+        ;;
+    x:*)
+        eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+        ;;
+    *)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in $*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+ ;;
+
+  esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+

Property changes on: a/file/create-5.39-etc-file-patch/file-5.39-new/configure
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/file/create-5.39-etc-file-patch/file-5.39-new/configure.ac
===================================================================
--- a/file/create-5.39-etc-file-patch/file-5.39-new/configure.ac	(nonexistent)
+++ a/file/create-5.39-etc-file-patch/file-5.39-new/configure.ac	(revision 5)
@@ -0,0 +1,221 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT([file],[5.39],[christos@astron.com])
+AM_INIT_AUTOMAKE([subdir-objects foreign])
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
+
+AC_MSG_CHECKING(for builtin ELF support)
+AC_ARG_ENABLE(elf,
+[  --disable-elf            disable builtin ELF support],
+[if test "${enableval}" = yes; then
+  AC_MSG_RESULT(yes)
+  AC_DEFINE([BUILTIN_ELF], 1, [Define if built-in ELF support is used])
+else
+  AC_MSG_RESULT(no)
+fi], [
+  # enable by default
+  AC_MSG_RESULT(yes)
+  AC_DEFINE([BUILTIN_ELF], 1, [Define in built-in ELF support is used])
+])
+
+AC_MSG_CHECKING(for ELF core file support)
+AC_ARG_ENABLE(elf-core,
+[  --disable-elf-core       disable ELF core file support],
+[if test "${enableval}" = yes; then
+  AC_MSG_RESULT(yes)
+  AC_DEFINE([ELFCORE], 1, [Define for ELF core file support])
+else
+  AC_MSG_RESULT(no)
+fi], [
+  # enable by default
+  AC_MSG_RESULT(yes)
+  AC_DEFINE([ELFCORE], 1, [Define for ELF core file support])
+])
+
+AC_MSG_CHECKING(for zlib support)
+AC_ARG_ENABLE([zlib],
+[AS_HELP_STRING([--disable-zlib], [disable zlib compression support @<:@default=auto@:>@])])
+AC_MSG_RESULT($enable_zlib)
+
+AC_MSG_CHECKING(for bzlib support)
+AC_ARG_ENABLE([bzlib],
+[AS_HELP_STRING([--disable-bzlib], [disable bz2lib compression support @<:@default=auto@:>@])])
+AC_MSG_RESULT($enable_bzlib)
+
+AC_MSG_CHECKING(for xzlib support)
+AC_ARG_ENABLE([xzlib],
+[AS_HELP_STRING([--disable-xzlib], [disable liblzma/xz compression support @<:@default=auto@:>@])])
+AC_MSG_RESULT($enable_xzlib)
+
+AC_MSG_CHECKING(for libseccomp support)
+AC_ARG_ENABLE([libseccomp],
+[AS_HELP_STRING([--disable-libseccomp], [disable libseccomp sandboxing @<:@default=auto@:>@])])
+AC_MSG_RESULT($enable_libseccomp)
+
+AC_MSG_CHECKING(for file formats in man section 5)
+AC_ARG_ENABLE(fsect-man5,
+[  --enable-fsect-man5      enable file formats in man section 5],
+[if test "${enableval}" = yes; then
+  AC_MSG_RESULT(yes)
+  fsect=5
+else
+  AC_MSG_RESULT(no)
+  fsect=4
+fi], [
+  # disable by default
+  AC_MSG_RESULT(no)
+  fsect=4
+])
+
+AC_CANONICAL_HOST
+case "$host_os" in
+   mingw32*)
+      MINGW=1
+      ;;
+   *)
+      MINGW=0
+      ;;
+esac
+AC_SUBST(MINGW)
+AM_CONDITIONAL(MINGW, test "$MINGW" = 1)
+
+AC_SUBST([pkgdatadir], ['$(datadir)/file'])
+AC_SUBST(fsect)
+AM_CONDITIONAL(FSECT5, test x$fsect = x5)
+
+AC_SUBST(WARNINGS)
+
+dnl Checks for programs.
+AC_PROG_CC_STDC
+AC_USE_SYSTEM_EXTENSIONS
+AM_PROG_CC_C_O
+AC_C_BIGENDIAN
+AC_PROG_INSTALL
+AC_PROG_LN_S
+LT_INIT([disable-static pic-only])
+gl_VISIBILITY
+dnl Checks for headers
+AC_HEADER_STDC
+AC_HEADER_MAJOR
+AC_HEADER_SYS_WAIT
+AC_CHECK_HEADERS(stdint.h fcntl.h inttypes.h unistd.h)
+AC_CHECK_HEADERS(utime.h wchar.h wctype.h)
+AC_CHECK_HEADERS(getopt.h err.h xlocale.h)
+AC_CHECK_HEADERS(sys/mman.h sys/stat.h sys/types.h sys/utime.h sys/time.h sys/sysmacros.h)
+if test "$enable_zlib" != "no"; then
+  AC_CHECK_HEADERS(zlib.h)
+fi
+if test "$enable_bzlib" != "no"; then
+  AC_CHECK_HEADERS(bzlib.h)
+fi
+if test "$enable_xzlib" != "no"; then
+  AC_CHECK_HEADERS(lzma.h)
+fi
+AC_CHECK_TYPE([sig_t],[AC_DEFINE([HAVE_SIG_T],1,[Have sig_t type])],,[#include <signal.h>])
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_TYPE_OFF_T
+AC_TYPE_SIZE_T
+AC_CHECK_MEMBERS([struct stat.st_rdev])
+
+AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[#include <time.h>])
+AC_STRUCT_TIMEZONE
+AC_STRUCT_TIMEZONE_DAYLIGHT
+AC_SYS_LARGEFILE
+AC_FUNC_FSEEKO
+AC_TYPE_MBSTATE_T
+
+AC_STRUCT_OPTION_GETOPT_H
+AC_TYPE_PID_T
+AC_TYPE_UINT8_T
+AC_TYPE_UINT16_T
+AC_TYPE_UINT32_T
+AC_TYPE_INT32_T
+AC_TYPE_UINT64_T
+AC_TYPE_INT64_T
+AC_TYPE_INTPTR_T
+AC_TYPE_UINTPTR_T
+AC_FUNC_MMAP
+AC_FUNC_FORK
+AC_FUNC_MBRTOWC
+
+AC_MSG_CHECKING(for gcc compiler warnings)
+AC_ARG_ENABLE(warnings,
+[  --disable-warnings	disable compiler warnings],
+[if test "${enableval}" = no -o "$GCC" = no; then
+   AC_MSG_RESULT(no)
+   WARNINGS=
+else
+   AC_MSG_RESULT(yes)
+   WARNINGS="-Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \
+       -Wmissing-declarations -Wredundant-decls -Wnested-externs \
+       -Wsign-compare -Wreturn-type -Wswitch -Wshadow \
+       -Wcast-qual -Wwrite-strings -Wextra -Wunused-parameter -Wformat=2"
+fi], [
+if test "$GCC" = yes; then
+   AC_MSG_RESULT(yes)
+   WARNINGS="-Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \
+       -Wmissing-declarations -Wredundant-decls -Wnested-externs \
+       -Wsign-compare -Wreturn-type -Wswitch -Wshadow \
+       -Wcast-qual -Wwrite-strings -Wextra -Wunused-parameter -Wformat=2"
+else
+   WARNINGS=
+   AC_MSG_RESULT(no)
+fi])
+
+dnl Checks for functions
+AC_CHECK_FUNCS(strndup mkstemp mkostemp utimes utime wcwidth strtof newlocale uselocale freelocale memmem)
+
+dnl Provide implementation of some required functions if necessary
+AC_REPLACE_FUNCS(getopt_long asprintf vasprintf strlcpy strlcat getline ctime_r asctime_r localtime_r gmtime_r pread strcasestr fmtcheck dprintf)
+
+dnl Checks for libraries
+if test "$enable_zlib" != "no"; then
+  AC_CHECK_LIB(z, gzopen)
+fi
+if test "$enable_bzlib" != "no"; then
+  AC_CHECK_LIB(bz2, BZ2_bzCompressInit)
+fi
+if test "$enable_xzlib" != "no"; then
+  AC_CHECK_LIB(lzma, lzma_stream_decoder)
+fi
+if test "$enable_libseccomp" != "no"; then
+    AC_CHECK_LIB(seccomp, seccomp_init)
+fi
+if test "$MINGW" = 1; then
+  AC_CHECK_LIB(gnurx,regexec,,AC_MSG_ERROR([libgnurx is required to build file(1) with MinGW]))
+fi
+
+dnl See if we are cross-compiling
+AM_CONDITIONAL(IS_CROSS_COMPILE, test "$cross_compiling" = yes)
+
+dnl Final sanity checks
+if test "$enable_zlib" = "yes"; then
+  if test "$ac_cv_header_zlib_h$ac_cv_lib_z_gzopen" != "yesyes"; then
+    AC_MSG_ERROR([zlib support requested but not found])
+  fi
+fi
+if  test "$ac_cv_header_zlib_h$ac_cv_lib_z_gzopen" = "yesyes"; then
+  AC_DEFINE([ZLIBSUPPORT], 1, [Enable zlib compression support])
+fi
+if test "$enable_bzlib" = "yes"; then
+  if test "$ac_cv_header_bzlib_h$ac_cv_lib_bz2_BZ2_bzCompressInit" != "yesyes"; then
+    AC_MSG_ERROR([bzlib support requested but not found])
+  fi
+fi
+if  test "$ac_cv_header_bzlib_h$ac_cv_lib_bz2_BZ2_bzCompressInit" = "yesyes"; then
+  AC_DEFINE([BZLIBSUPPORT], 1, [Enable bzlib compression support])
+fi
+if test "$enable_xzlib" = "yes"; then
+  if test "$ac_cv_header_lzma_h$ac_cv_lib_lzma_lzma_stream_decoder" != "yesyes"; then
+    AC_MSG_ERROR([xzlib support requested but not found])
+  fi
+fi
+if  test "$ac_cv_header_lzma_h$ac_cv_lib_lzma_lzma_stream_decoder" = "yesyes"; then
+  AC_DEFINE([XZLIBSUPPORT], 1, [Enable xzlib compression support])
+fi
+
+AC_CONFIG_FILES([Makefile src/Makefile magic/Makefile tests/Makefile doc/Makefile python/Makefile libmagic.pc])
+AC_OUTPUT
Index: a/file/create-5.39-etc-file-patch/file-5.39-new
===================================================================
--- a/file/create-5.39-etc-file-patch/file-5.39-new	(nonexistent)
+++ a/file/create-5.39-etc-file-patch/file-5.39-new	(revision 5)

Property changes on: a/file/create-5.39-etc-file-patch/file-5.39-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file/create-5.39-etc-file-patch/file.list
===================================================================
--- a/file/create-5.39-etc-file-patch/file.list	(nonexistent)
+++ a/file/create-5.39-etc-file-patch/file.list	(revision 5)
@@ -0,0 +1,2 @@
+file-5.39/configure
+file-5.39/configure.ac
Index: a/file/create-5.39-etc-file-patch
===================================================================
--- a/file/create-5.39-etc-file-patch	(nonexistent)
+++ a/file/create-5.39-etc-file-patch	(revision 5)

Property changes on: a/file/create-5.39-etc-file-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file/create-5.39-magic-patch/create.patch.sh
===================================================================
--- a/file/create-5.39-magic-patch/create.patch.sh	(nonexistent)
+++ a/file/create-5.39-magic-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=5.39
+
+tar --files-from=file.list -xzvf ../file-$VERSION.tar.gz
+mv file-$VERSION file-$VERSION-orig
+
+cp -rf ./file-$VERSION-new ./file-$VERSION
+
+diff --unified -Nr  file-$VERSION-orig file-$VERSION > file-$VERSION-magic.patch
+
+mv file-$VERSION-magic.patch ../patches
+
+rm -rf ./file-$VERSION
+rm -rf ./file-$VERSION-orig

Property changes on: a/file/create-5.39-magic-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/file/create-5.39-magic-patch/file-5.39-new/magic/Magdir/compress
===================================================================
--- a/file/create-5.39-magic-patch/file-5.39-new/magic/Magdir/compress	(nonexistent)
+++ a/file/create-5.39-magic-patch/file-5.39-new/magic/Magdir/compress	(revision 5)
@@ -0,0 +1,411 @@
+#------------------------------------------------------------------------------
+# $File: compress,v 1.79 2020/05/30 23:53:04 christos Exp $
+# compress:  file(1) magic for pure-compression formats (no archives)
+#
+# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.
+#
+# Formats for various forms of compressed data
+# Formats for "compress" proper have been moved into "compress.c",
+# because it tries to uncompress it to figure out what's inside.
+
+# standard unix compress
+0	string		\037\235	compress'd data
+!:mime	application/x-compress
+!:apple	LZIVZIVU
+>2	byte&0x80	>0		block compressed
+>2	byte&0x1f	x		%d bits
+
+# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)
+# URL: https://en.wikipedia.org/wiki/Gzip
+# Reference: https://tools.ietf.org/html/rfc1952
+# Update: Joerg Jenderek, Apr 2019
+#   Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002
+#	* Original filename is only at offset 10 if "extra field" absent
+#	* Produce shorter output - notably, only report compression methods
+#         other than 8 ("deflate", the only method defined in RFC 1952).
+# Note: find defs -iname '*.trid.xml' -exec grep -q '<Bytes>1F8B08' {} \; -ls
+# TODO:
+# FBR	Blueberry FlashBack screen Record	https://www.flashbackrecorder.com/
+# KPR	KOffice/Calligra KPresenter		application/x-kpresenter
+# KPT	KOffice/Calligra KPresenter template?	application/x-kpresenter
+# SAV	Diggles Saved Game File			http://www.innonics.com
+# SAV	FarCry (demo) saved game		http://www.farcry-thegame.com
+# DAT	ZOAGZIP game data format		http://en.wikipedia.org/wiki/SD_Gundam_Capsule_Fighter
+0       string          \037\213
+# to display gzip compressed (strength=100=2*50) before other (strength=50)?
+#!:strength * 2
+# no FNAME and FCOMMENT bit implies no file name/comment. That means only binary
+>3	byte&0x18	=0
+# For binary gzipped no ASCII text should occur
+#	mcd-monu-cad.trid.xml
+>>10	string		MCD			Monu-Cad Drawing, Component or Font
+#>>36	string		Created\ with\ MONU-CAD	
+#!:mime	application/octet-stream
+# http://fileformats.archiveteam.org/wiki/Monu-CAD
+#	http://www.monucad.com/downloads/FullDemo-2005.EXE
+#	/HANDS96.MCC	Component
+#	/DEMO_DD01.MCD	Drawing
+#	/MCALF020.FNT	Font
+!:ext	mcc/mcd/fnt
+# http://www.generalcadd.com
+>>10	string		GXD			General CADD, Drawing or Component
+#!:mime	application/octet-stream
+#	/gxc/BUILDINGEDGE.gxc			Component
+#	/gxd/HOCKETT-STPAUL-WRHSE.gxd		Drawing
+#	/gxd/POWERLAND-MILL-ADD-11.gxd		Drawing		v9.1.06
+!:ext	gxc/gxd
+#>>>13	ubyte		0			\b, version 0
+>>>13	string		09			\b, version 9
+# other gzipped binary like gzipped tar, VirtualBox extension package,...
+>>10	default		x		gzip compressed data
+!:mime	application/gzip
+>>>0	use	gzip-info
+# size of the original (uncompressed) input data modulo 2^32
+>>-0	offset		>48
+>>>-4	ulelong		x		\b, original size modulo 2^32 %u
+>>-0	offset		<48		\b, truncated
+# gzipped TAR or VirtualBox extension package
+#!:mime	application/x-compressed-tar
+#!:mime	application/x-virtualbox-vbox-extpack
+# https://www.w3.org/TR/SVG/mimereg.html
+#!:mime	image/image/svg+xml-compressed
+#	zlib.3.gz
+#	microcode-20180312.tgz
+#	tpz same as tgz
+#	lua-md5_1.2-1_i386_i486.ipk	https://en.wikipedia.org/wiki/Opkg
+#	Oracle_VM_VirtualBox_Extension_Pack-5.0.12-104815.vbox-extpack
+!:ext	gz/tgz/tpz/ipk/vbox-extpack/svgz
+# FNAME/FCOMMENT bit implies file name/comment as iso-8859-1 text
+>3	byte&0x18	>0		gzip compressed data
+!:mime	application/gzip
+# gzipped tar, gzipped Abiword document
+#!:mime	application/x-compressed-tar
+#!:mime	application/x-abiword-compressed
+#!:mime	image/image/svg+xml-compressed
+#	kleopatra_splashscreen.svgz	gzipped .svg
+!:ext	gz/tgz/tpz/zabw/svgz
+>>0	use	gzip-info
+# size of the original (uncompressed) input data modulo 2^32
+>>-0	offset		>48
+>>>-4	ulelong		x		\b, original size modulo 2^32 %u
+>>-0	offset		<48		\b, truncated
+#	display information of gzip compressed files
+0	name				gzip-info
+#>2	byte		x		THIS iS GZIP
+>2	byte		<8		\b, reserved method
+>2	byte		>8		\b, unknown method
+>3	byte		&0x01		\b, ASCII
+>3	byte		&0x02		\b, has CRC
+>3	byte		&0x04		\b, extra field
+>3	byte&0xC	=0x08
+>>10	string		x		\b, was "%s"
+>3	byte		&0x10		\b, has comment
+>3	byte		&0x20		\b, encrypted
+>4	ledate		>0		\b, last modified: %s
+>8	byte		2		\b, max compression
+>8	byte		4		\b, max speed
+>9	byte		=0x00		\b, from FAT filesystem (MS-DOS, OS/2, NT)
+>9	byte		=0x01		\b, from Amiga
+>9	byte		=0x02		\b, from VMS
+>9	byte		=0x03		\b, from Unix
+>9	byte		=0x04		\b, from VM/CMS
+>9	byte		=0x05		\b, from Atari
+>9	byte		=0x06		\b, from HPFS filesystem (OS/2, NT)
+>9	byte		=0x07		\b, from MacOS
+>9	byte		=0x08		\b, from Z-System
+>9	byte		=0x09		\b, from CP/M
+>9	byte		=0x0A		\b, from TOPS/20
+>9	byte		=0x0B		\b, from NTFS filesystem (NT)
+>9	byte		=0x0C		\b, from QDOS
+>9	byte		=0x0D		\b, from Acorn RISCOS
+# size of the original (uncompressed) input data modulo 2^32
+#>-4	ulelong		x		\b, original size modulo 2^32 %u
+#ERROR: line 114: non zero offset 1048572 at level 1
+
+# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis
+0	string		\037\036	packed data
+!:mime	application/octet-stream
+>2	belong		>1		\b, %d characters originally
+>2	belong		=1		\b, %d character originally
+#
+# This magic number is byte-order-independent.
+0	short		0x1f1f		old packed data
+!:mime	application/octet-stream
+
+# XXX - why *two* entries for "compacted data", one of which is
+# byte-order independent, and one of which is byte-order dependent?
+#
+0	short		0x1fff		compacted data
+!:mime	application/octet-stream
+# This string is valid for SunOS (BE) and a matching "short" is listed
+# in the Ultrix (LE) magic file.
+0	string		\377\037	compacted data
+!:mime	application/octet-stream
+0	short		0145405		huf output
+!:mime	application/octet-stream
+
+# bzip2
+0	string		BZh		bzip2 compressed data
+!:mime	application/x-bzip2
+>3	byte		>47		\b, block size = %c00k
+
+# bzip	a block-sorting file compressor
+#	by Julian Seward <sewardj@cs.man.ac.uk> and others
+0	string		BZ0		bzip compressed data
+!:mime	application/x-bzip
+>3	byte		>47		\b, block size = %c00k
+
+# lzip
+0	string		LZIP		lzip compressed data
+!:mime application/x-lzip
+>4	byte		x		\b, version: %d
+
+# squeeze and crunch
+# Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
+0	beshort		0x76FF		squeezed data,
+>4	string		x		original name %s
+0	beshort		0x76FE		crunched data,
+>2	string		x		original name %s
+0	beshort		0x76FD		LZH compressed data,
+>2	string		x		original name %s
+
+# Freeze
+0	string		\037\237	frozen file 2.1
+0	string		\037\236	frozen file 1.0 (or gzip 0.5)
+
+# SCO compress -H (LZH)
+0	string		\037\240	SCO compress -H (LZH) data
+
+# European GSM 06.10 is a provisional standard for full-rate speech
+# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse
+# excitation/long term prediction) coding at 13 kbit/s.
+#
+# There's only a magic nibble (4 bits); that nibble repeats every 33
+# bytes.  This isn't suited for use, but maybe we can use it someday.
+#
+# This will cause very short GSM files to be declared as data and
+# mismatches to be declared as data too!
+#0	byte&0xF0	0xd0		data
+#>33	byte&0xF0	0xd0
+#>66	byte&0xF0	0xd0
+#>99	byte&0xF0	0xd0
+#>132	byte&0xF0	0xd0		GSM 06.10 compressed audio
+
+# lzop from <markus.oberhumer@jk.uni-linz.ac.at>
+0	string		\x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a	lzop compressed data
+>9	beshort		<0x0940
+>>9	byte&0xf0	=0x00		- version 0.
+>>9	beshort&0x0fff	x		\b%03x,
+>>13	byte		1		LZO1X-1,
+>>13	byte		2		LZO1X-1(15),
+>>13	byte		3		LZO1X-999,
+## >>22	bedate		>0		last modified: %s,
+>>14	byte		=0x00		os: MS-DOS
+>>14	byte		=0x01		os: Amiga
+>>14	byte		=0x02		os: VMS
+>>14	byte		=0x03		os: Unix
+>>14	byte		=0x05		os: Atari
+>>14	byte		=0x06		os: OS/2
+>>14	byte		=0x07		os: MacOS
+>>14	byte		=0x0A		os: Tops/20
+>>14	byte		=0x0B		os: WinNT
+>>14	byte		=0x0E		os: Win32
+>9	beshort		>0x0939
+>>9	byte&0xf0	=0x00		- version 0.
+>>9	byte&0xf0	=0x10		- version 1.
+>>9	byte&0xf0	=0x20		- version 2.
+>>9	beshort&0x0fff	x		\b%03x,
+>>15	byte		1		LZO1X-1,
+>>15	byte		2		LZO1X-1(15),
+>>15	byte		3		LZO1X-999,
+## >>25	bedate		>0		last modified: %s,
+>>17	byte		=0x00		os: MS-DOS
+>>17	byte		=0x01		os: Amiga
+>>17	byte		=0x02		os: VMS
+>>17	byte		=0x03		os: Unix
+>>17	byte		=0x05		os: Atari
+>>17	byte		=0x06		os: OS/2
+>>17	byte		=0x07		os: MacOS
+>>17	byte		=0x0A		os: Tops/20
+>>17	byte		=0x0B		os: WinNT
+>>17	byte		=0x0E		os: Win32
+
+# 4.3BSD-Quasijarus Strong Compression
+# https://minnie.tuhs.org/Quasijarus/compress.html
+0	string		\037\241	Quasijarus strong compressed data
+
+# From: Cory Dikkers <cdikkers@swbell.net>
+0	string		XPKF		Amiga xpkf.library compressed data
+0	string		PP11		Power Packer 1.1 compressed data
+0	string		PP20		Power Packer 2.0 compressed data,
+>4	belong		0x09090909	fast compression
+>4	belong		0x090A0A0A	mediocre compression
+>4	belong		0x090A0B0B	good compression
+>4	belong		0x090A0C0C	very good compression
+>4	belong		0x090A0C0D	best compression
+
+# 7-zip archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at)
+# https://www.7-zip.org or DOC/7zFormat.txt
+#
+0	string		7z\274\257\047\034	7-zip archive data,
+>6	byte		x			version %d
+>7	byte		x			\b.%d
+!:mime	application/x-7z-compressed
+!:ext 7z/cb7
+
+# Type: LZMA
+0	lelong&0xffffff	=0x5d
+>12	leshort		0xff			LZMA compressed data,
+!:mime	application/x-lzma
+>>5	lequad		=0xffffffffffffffff	streamed
+>>5	lequad		!0xffffffffffffffff	non-streamed, size %lld
+>12	leshort		0			LZMA compressed data,
+>>5	lequad		=0xffffffffffffffff	streamed
+>>5	lequad		!0xffffffffffffffff	non-streamed, size %lld
+
+# http://tukaani.org/xz/xz-file-format.txt
+0	ustring		\xFD7zXZ\x00		XZ compressed data
+!:strength * 2
+!:mime	application/x-xz
+
+# https://github.com/ckolivas/lrzip/blob/master/doc/magic.header.txt
+0	string		LRZI			LRZIP compressed data
+>4	byte		x			- version %d
+>5	byte		x			\b.%d
+!:mime	application/x-lrzip
+
+# https://fastcompression.blogspot.fi/2013/04/lz4-streaming-format-final.html
+0	lelong		0x184d2204	LZ4 compressed data (v1.4+)
+!:mime	application/x-lz4
+# Added by osm0sis@xda-developers.com
+0 	lelong		0x184c2103	LZ4 compressed data (v1.0-v1.3)
+!:mime	application/x-lz4
+0	lelong		0x184c2102	LZ4 compressed data (v0.1-v0.9)
+!:mime	application/x-lz4
+
+# Zstandard/LZ4 skippable frames
+# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md
+0         lelong&0xFFFFFFF0  0x184D2A50
+>(4.l+8)  indirect	x
+
+# Zstandard Dictionary ID subroutine
+0     name        zstd-dictionary-id
+# Single Segment = True
+>0    byte        &0x20   \b, Dictionary ID:
+>>0   byte&0x03   0       None
+>>0   byte&0x03   1
+>>>1  byte        x       %u
+>>0   byte&0x03   2
+>>>1  leshort     x       %u
+>>0   byte&0x03   3
+>>>1  lelong      x       %u
+# Single Segment = False
+>0    byte        ^0x20   \b, Dictionary ID:
+>>0   byte&0x03   0       None
+>>0   byte&0x03   1
+>>>2  byte        x       %u
+>>0   byte&0x03   2
+>>>2  leshort     x       %u
+>>0   byte&0x03   3
+>>>2  lelong      x       %u
+
+# Zstandard compressed data
+# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md
+0     lelong       0xFD2FB522  Zstandard compressed data (v0.2)
+!:mime  application/zstd
+0     lelong       0xFD2FB523  Zstandard compressed data (v0.3)
+!:mime  application/zstd
+0     lelong       0xFD2FB524  Zstandard compressed data (v0.4)
+!:mime  application/zstd
+0     lelong       0xFD2FB525  Zstandard compressed data (v0.5)
+!:mime  application/zstd
+0     lelong       0xFD2FB526  Zstandard compressed data (v0.6)
+!:mime  application/zstd
+0     lelong       0xFD2FB527  Zstandard compressed data (v0.7)
+!:mime  application/zstd
+>4    use          zstd-dictionary-id
+0     lelong       0xFD2FB528  Zstandard compressed data (v0.8+)
+!:mime  application/zstd
+>4    use          zstd-dictionary-id
+
+# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md
+0  lelong    0xEC30A437  Zstandard dictionary
+!:mime  application/x-std-dictionary
+>4 lelong    x           (ID %u)
+
+# AFX compressed files (Wolfram Kleff)
+2	string		-afx-		AFX compressed file data
+
+# Supplementary magic data for the file(1) command to support
+# rzip(1).  The format is described in magic(5).
+#
+# Copyright (C) 2003 by Andrew Tridgell.  You may do whatever you want with
+# this file.
+#
+0	string		RZIP		rzip compressed data
+>4	byte		x		- version %d
+>5	byte		x		\b.%d
+>6	belong		x		(%d bytes)
+
+0	string		ArC\x01		FreeArc archive <http://freearc.org>
+
+# Type:	DACT compressed files
+0	long	0x444354C3	DACT compressed data
+>4	byte	>-1		(version %i.
+>5	byte	>-1		%i.
+>6	byte	>-1		%i)
+>7	long	>0		, original size: %i bytes
+>15	long	>30		, block size: %i bytes
+
+# Valve Pack (VPK) files
+0	lelong	0x55aa1234	Valve Pak file
+>0x4	lelong	x		\b, version %u
+>0x8	lelong	x		\b, %u entries
+
+#------------------------------------------------------------------------------
+# zisofs: file(1) magic for zisofs/RockRidge compressed files
+#
+# from H. Peter Anvin <hpa@zytor.com> May 4, 2001
+#
+0	string	\x37\xE4\x53\x96\xC9\xDB\xD6\x07	zisofs/Rockridge compressed file
+>8	lelong		x		- %d bytes
+
+# Snappy framing format
+# https://code.google.com/p/snappy/source/browse/trunk/framing_format.txt
+0	string	\377\006\0\0sNaPpY	snappy framed data
+!:mime	application/x-snappy-framed
+
+# qpress, https://www.quicklz.com/
+0	string	qpress10	qpress compressed data
+!:mime	application/x-qpress
+
+# Zlib https://www.ietf.org/rfc/rfc6713.txt
+0	string/b	x
+>0	beshort%31	=0
+>>0	byte&0xf	=8
+>>>0	byte&0x80 	=0	zlib compressed data
+!:mime	application/zlib
+
+# BWC compression
+0	string		BWC
+>3	byte		0	BWC compressed data
+
+# UCL compression
+0	bequad		0x00e955434cff011a	UCL compressed data
+
+# Softlib archive
+0	string		SLIB	Softlib archive
+>4	leshort		x	\b, version %d
+>6	leshort		x	(contains %d files)
+
+# URL:  https://github.com/lzfse/lzfse/blob/master/src/lzfse_internal.h#L276
+# From: Eric Hall <eric.hall@darkart.com>
+0	string	bvx-	lzfse encoded, no compression
+0	string	bvx1	lzfse compressed, uncompressed tables
+0	string	bvx2	lzfse compressed, compressed tables
+0	string	bvxn	lzfse encoded, lzvn compressed
+
+# pcxLib.exe compression program
+# http://www.shikadi.net/moddingwiki/PCX_Library
+0	string/b	pcxLib
+>0x0A	string/b	Copyright\020(c)\020Genus\020Microprogramming,\020Inc.	pcxLib compressed
Index: a/file/create-5.39-magic-patch/file-5.39-new/magic/Magdir/cracklib
===================================================================
--- a/file/create-5.39-magic-patch/file-5.39-new/magic/Magdir/cracklib	(nonexistent)
+++ a/file/create-5.39-magic-patch/file-5.39-new/magic/Magdir/cracklib	(revision 5)
@@ -0,0 +1,14 @@
+
+#------------------------------------------------------------------------------
+# $File: cracklib,v 2.7 2014/07/08 17:53:07 christos Exp $
+# cracklib:  file (1) magic for cracklib v2.9
+
+0	lelong	0x70775631	Cracklib password index, little endian
+>4	long	>0		(%i words)
+>4	long	0		("64-bit")
+>>8	long	>-1		(%i words)
+0	belong	0x70775631	Cracklib password index, big endian
+>4	belong	>-1		(%i words)
+0	long	0
+>4	belong	0x70775631	Cracklib password index, big endian ("64-bit")
+>12	belong	>0		(%i words)
Index: a/file/create-5.39-magic-patch/file-5.39-new/magic/Magdir/crdaregbin
===================================================================
--- a/file/create-5.39-magic-patch/file-5.39-new/magic/Magdir/crdaregbin	(nonexistent)
+++ a/file/create-5.39-magic-patch/file-5.39-new/magic/Magdir/crdaregbin	(revision 5)
@@ -0,0 +1,5 @@
+# CRDA Regulatory database file
+# http://git.kernel.org/?p=linux/kernel/git/mcgrof/crda.git;a=summary
+# (see regdb.h)
+0       belong          0x52474442      CRDA regulatory database file
+>4      belong          19              (Version 1)
Index: a/file/create-5.39-magic-patch/file-5.39-new/magic/Magdir
===================================================================
--- a/file/create-5.39-magic-patch/file-5.39-new/magic/Magdir	(nonexistent)
+++ a/file/create-5.39-magic-patch/file-5.39-new/magic/Magdir	(revision 5)

Property changes on: a/file/create-5.39-magic-patch/file-5.39-new/magic/Magdir
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file/create-5.39-magic-patch/file-5.39-new/magic
===================================================================
--- a/file/create-5.39-magic-patch/file-5.39-new/magic	(nonexistent)
+++ a/file/create-5.39-magic-patch/file-5.39-new/magic	(revision 5)

Property changes on: a/file/create-5.39-magic-patch/file-5.39-new/magic
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file/create-5.39-magic-patch/file-5.39-new
===================================================================
--- a/file/create-5.39-magic-patch/file-5.39-new	(nonexistent)
+++ a/file/create-5.39-magic-patch/file-5.39-new	(revision 5)

Property changes on: a/file/create-5.39-magic-patch/file-5.39-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file/create-5.39-magic-patch/file.list
===================================================================
--- a/file/create-5.39-magic-patch/file.list	(nonexistent)
+++ a/file/create-5.39-magic-patch/file.list	(revision 5)
@@ -0,0 +1,2 @@
+file-5.39/magic/Magdir/compress
+file-5.39/magic/Magdir/cracklib
Index: a/file/create-5.39-magic-patch
===================================================================
--- a/file/create-5.39-magic-patch	(nonexistent)
+++ a/file/create-5.39-magic-patch	(revision 5)

Property changes on: a/file/create-5.39-magic-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file/create-5.39-short-patch/create.patch.sh
===================================================================
--- a/file/create-5.39-short-patch/create.patch.sh	(nonexistent)
+++ a/file/create-5.39-short-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=5.39
+
+tar --files-from=file.list -xzvf ../file-$VERSION.tar.gz
+mv file-$VERSION file-$VERSION-orig
+
+cp -rf ./file-$VERSION-new ./file-$VERSION
+
+diff --unified -Nr  file-$VERSION-orig file-$VERSION > file-$VERSION-short.patch
+
+mv file-$VERSION-short.patch ../patches
+
+rm -rf ./file-$VERSION
+rm -rf ./file-$VERSION-orig

Property changes on: a/file/create-5.39-short-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/file/create-5.39-short-patch/file-5.39-new/src/readelf.h
===================================================================
--- a/file/create-5.39-short-patch/file-5.39-new/src/readelf.h	(nonexistent)
+++ a/file/create-5.39-short-patch/file-5.39-new/src/readelf.h	(revision 5)
@@ -0,0 +1,545 @@
+/*
+ * Copyright (c) Christos Zoulas 2003.
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice immediately at the beginning of the file, without modification,
+ *    this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * @(#)Id: readelf.h,v 1.9 2002/05/16 18:45:56 christos Exp
+ *
+ * Provide elf data structures for non-elf machines, allowing file
+ * non-elf hosts to determine if an elf binary is stripped.
+ * Note: cobbled from the linux header file, with modifications
+ */
+#ifndef __fake_elf_h__
+#define	__fake_elf_h__
+
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+typedef uint32_t	Elf32_Addr;
+typedef uint32_t	Elf32_Off;
+typedef uint16_t	Elf32_Half;
+typedef uint32_t	Elf32_Word;
+typedef uint8_t		Elf32_Char;
+
+typedef	uint64_t 	Elf64_Addr;
+typedef	uint64_t 	Elf64_Off;
+typedef uint64_t 	Elf64_Xword;
+typedef uint16_t	Elf64_Half;
+typedef uint32_t	Elf64_Word;
+typedef uint8_t		Elf64_Char;
+
+#define	EI_NIDENT	16
+
+typedef struct {
+	Elf32_Word	a_type;		/* 32-bit id */
+	Elf32_Word	a_v;		/* 32-bit id */
+} Aux32Info;
+
+typedef struct {
+	Elf64_Xword	a_type;		/* 64-bit id */
+	Elf64_Xword	a_v;		/* 64-bit id */
+} Aux64Info;
+
+#define AT_NULL   0     /* end of vector */
+#define AT_IGNORE 1     /* entry should be ignored */
+#define AT_EXECFD 2     /* file descriptor of program */
+#define AT_PHDR   3     /* program headers for program */
+#define AT_PHENT  4     /* size of program header entry */
+#define AT_PHNUM  5     /* number of program headers */
+#define AT_PAGESZ 6     /* system page size */
+#define AT_BASE   7     /* base address of interpreter */
+#define AT_FLAGS  8     /* flags */
+#define AT_ENTRY  9     /* entry point of program */
+#define AT_LINUX_NOTELF 10    /* program is not ELF */
+#define AT_LINUX_UID    11    /* real uid */
+#define AT_LINUX_EUID   12    /* effective uid */
+#define AT_LINUX_GID    13    /* real gid */
+#define AT_LINUX_EGID   14    /* effective gid */
+#define AT_LINUX_PLATFORM 15  /* string identifying CPU for optimizations */
+#define AT_LINUX_HWCAP  16    /* arch dependent hints at CPU capabilities */
+#define AT_LINUX_CLKTCK 17    /* frequency at which times() increments */
+/* AT_* values 18 through 22 are reserved */
+#define AT_LINUX_SECURE 23   /* secure mode boolean */
+#define AT_LINUX_BASE_PLATFORM 24     /* string identifying real platform, may
+                                 * differ from AT_PLATFORM. */
+#define AT_LINUX_RANDOM 25    /* address of 16 random bytes */
+#define AT_LINUX_HWCAP2 26    /* extension of AT_HWCAP */
+#define AT_LINUX_EXECFN 31   /* filename of program */
+
+typedef struct {
+    Elf32_Char	e_ident[EI_NIDENT];
+    Elf32_Half	e_type;
+    Elf32_Half	e_machine;
+    Elf32_Word	e_version;
+    Elf32_Addr	e_entry;  /* Entry point */
+    Elf32_Off	e_phoff;
+    Elf32_Off	e_shoff;
+    Elf32_Word	e_flags;
+    Elf32_Half	e_ehsize;
+    Elf32_Half	e_phentsize;
+    Elf32_Half	e_phnum;
+    Elf32_Half	e_shentsize;
+    Elf32_Half	e_shnum;
+    Elf32_Half	e_shstrndx;
+} Elf32_Ehdr;
+
+typedef struct {
+    Elf64_Char	e_ident[EI_NIDENT];
+    Elf64_Half	e_type;
+    Elf64_Half	e_machine;
+    Elf64_Word	e_version;
+    Elf64_Addr	e_entry;  /* Entry point */
+    Elf64_Off	e_phoff;
+    Elf64_Off	e_shoff;
+    Elf64_Word	e_flags;
+    Elf64_Half	e_ehsize;
+    Elf64_Half	e_phentsize;
+    Elf64_Half	e_phnum;
+    Elf64_Half	e_shentsize;
+    Elf64_Half	e_shnum;
+    Elf64_Half	e_shstrndx;
+} Elf64_Ehdr;
+
+/* e_type */
+#define	ET_REL		1
+#define	ET_EXEC		2
+#define	ET_DYN		3
+#define	ET_CORE		4
+
+/* e_machine (used only for SunOS 5.x hardware capabilities) */
+#define	EM_SPARC	2
+#define	EM_386		3
+#define	EM_SPARC32PLUS	18
+#define	EM_SPARCV9	43
+#define	EM_IA_64	50
+#define	EM_AMD64	62
+
+/* sh_type */
+#define	SHT_SYMTAB	2
+#define	SHT_NOTE	7
+#define	SHT_DYNSYM	11
+#define	SHT_SUNW_cap	0x6ffffff5	/* SunOS 5.x hw/sw capabilities */
+
+/* elf type */
+#define	ELFDATANONE	0		/* e_ident[EI_DATA] */
+#define	ELFDATA2LSB	1
+#define	ELFDATA2MSB	2
+
+/* elf class */
+#define	ELFCLASSNONE	0
+#define	ELFCLASS32	1
+#define	ELFCLASS64	2
+
+/* magic number */
+#define	EI_MAG0		0		/* e_ident[] indexes */
+#define	EI_MAG1		1
+#define	EI_MAG2		2
+#define	EI_MAG3		3
+#define	EI_CLASS	4
+#define	EI_DATA		5
+#define	EI_VERSION	6
+#define	EI_PAD		7
+
+#define	ELFMAG0		0x7f		/* EI_MAG */
+#define	ELFMAG1		'E'
+#define	ELFMAG2		'L'
+#define	ELFMAG3		'F'
+#define	ELFMAG		"\177ELF"
+
+#define	OLFMAG1		'O'
+#define	OLFMAG		"\177OLF"
+
+typedef struct {
+    Elf32_Word	p_type;
+    Elf32_Off	p_offset;
+    Elf32_Addr	p_vaddr;
+    Elf32_Addr	p_paddr;
+    Elf32_Word	p_filesz;
+    Elf32_Word	p_memsz;
+    Elf32_Word	p_flags;
+    Elf32_Word	p_align;
+} Elf32_Phdr;
+
+typedef struct {
+    Elf64_Word	p_type;
+    Elf64_Word	p_flags;
+    Elf64_Off	p_offset;
+    Elf64_Addr	p_vaddr;
+    Elf64_Addr	p_paddr;
+    Elf64_Xword	p_filesz;
+    Elf64_Xword	p_memsz;
+    Elf64_Xword	p_align;
+} Elf64_Phdr;
+
+#define	PT_NULL		0		/* p_type */
+#define	PT_LOAD		1
+#define	PT_DYNAMIC	2
+#define	PT_INTERP	3
+#define	PT_NOTE		4
+#define	PT_SHLIB	5
+#define	PT_PHDR		6
+#define	PT_NUM		7
+
+typedef struct {
+    Elf32_Word	sh_name;
+    Elf32_Word	sh_type;
+    Elf32_Word	sh_flags;
+    Elf32_Addr	sh_addr;
+    Elf32_Off	sh_offset;
+    Elf32_Word	sh_size;
+    Elf32_Word	sh_link;
+    Elf32_Word	sh_info;
+    Elf32_Word	sh_addralign;
+    Elf32_Word	sh_entsize;
+} Elf32_Shdr;
+
+typedef struct {
+    Elf64_Word	sh_name;
+    Elf64_Word	sh_type;
+    Elf64_Off	sh_flags;
+    Elf64_Addr	sh_addr;
+    Elf64_Off	sh_offset;
+    Elf64_Off	sh_size;
+    Elf64_Word	sh_link;
+    Elf64_Word	sh_info;
+    Elf64_Off	sh_addralign;
+    Elf64_Off	sh_entsize;
+} Elf64_Shdr;
+
+#define	NT_NETBSD_CORE_PROCINFO		1
+#define	NT_NETBSD_CORE_AUXV		2
+
+struct NetBSD_elfcore_procinfo {
+	/* Version 1 fields start here. */
+	uint32_t	cpi_version;		/* our version */
+	uint32_t	cpi_cpisize;		/* sizeof(this struct) */
+	uint32_t	cpi_signo;		/* killing signal */
+	uint32_t	cpi_sigcode;		/* signal code */
+	uint32_t	cpi_sigpend[4];		/* pending signals */
+	uint32_t	cpi_sigmask[4];		/* blocked signals */
+	uint32_t	cpi_sigignore[4];	/* ignored signals */
+	uint32_t	cpi_sigcatch[4];	/* caught signals */
+	int32_t		cpi_pid;		/* process ID */
+	int32_t		cpi_ppid;		/* parent process ID */
+	int32_t		cpi_pgrp;		/* process group ID */
+	int32_t		cpi_sid;		/* session ID */
+	uint32_t	cpi_ruid;		/* real user ID */
+	uint32_t	cpi_euid;		/* effective user ID */
+	uint32_t	cpi_svuid;		/* saved user ID */
+	uint32_t	cpi_rgid;		/* real group ID */
+	uint32_t	cpi_egid;		/* effective group ID */
+	uint32_t	cpi_svgid;		/* saved group ID */
+	uint32_t	cpi_nlwps;		/* number of LWPs */
+	int8_t		cpi_name[32];		/* copy of p->p_comm */
+	/* Add version 2 fields below here. */
+	int32_t		cpi_siglwp;	/* LWP target of killing signal */
+};
+
+/* Note header in a PT_NOTE section */
+typedef struct elf_note {
+    Elf32_Word	n_namesz;	/* Name size */
+    Elf32_Word	n_descsz;	/* Content size */
+    Elf32_Word	n_type;		/* Content type */
+} Elf32_Nhdr;
+
+typedef struct {
+    Elf64_Word	n_namesz;
+    Elf64_Word	n_descsz;
+    Elf64_Word	n_type;
+} Elf64_Nhdr;
+
+/* Notes used in ET_CORE */
+#define	NT_PRSTATUS	1
+#define	NT_PRFPREG	2
+#define	NT_PRPSINFO	3
+#define	NT_PRXREG	4
+#define	NT_TASKSTRUCT	4
+#define	NT_PLATFORM	5
+#define	NT_AUXV		6
+
+/* Note types used in executables */
+/* NetBSD executables (name = "NetBSD") */
+#define	NT_NETBSD_VERSION	1
+#define	NT_NETBSD_EMULATION	2
+#define	NT_FREEBSD_VERSION	1
+#define	NT_OPENBSD_VERSION	1
+#define	NT_DRAGONFLY_VERSION	1
+/*
+ * GNU executables (name = "GNU")
+ * word[0]: GNU OS tags
+ * word[1]: major version
+ * word[2]: minor version
+ * word[3]: tiny version
+ */
+#define	NT_GNU_VERSION		0
+
+/* GNU OS tags */
+#define	GNU_OS_LINUX	0
+#define	GNU_OS_HURD	1
+#define	GNU_OS_SOLARIS	2
+#define	GNU_OS_KFREEBSD	3
+#define	GNU_OS_KNETBSD	4
+
+/*
+ * GNU Hardware capability information
+ * word[0]: Number of entries
+ * word[1]: Bitmask of enabled entries
+ * Followed by a byte id, and a NUL terminated string per entry
+ */
+#define	NT_GNU_HWCAP		2
+
+/*
+ * GNU Build ID generated by ld
+ * 160 bit SHA1 [default]
+ * 128 bit md5 or uuid
+ */
+#define	NT_GNU_BUILD_ID		3
+
+/*
+ * NetBSD-specific note type: PaX.
+ * There should be 1 NOTE per executable.
+ * name: PaX\0
+ * namesz: 4
+ * desc:
+ *	word[0]: capability bitmask
+ * descsz: 4
+ */
+#define NT_NETBSD_PAX		3
+#define NT_NETBSD_PAX_MPROTECT		0x01	/* Force enable Mprotect */
+#define NT_NETBSD_PAX_NOMPROTECT	0x02	/* Force disable Mprotect */
+#define NT_NETBSD_PAX_GUARD		0x04	/* Force enable Segvguard */
+#define NT_NETBSD_PAX_NOGUARD		0x08	/* Force disable Servguard */
+#define NT_NETBSD_PAX_ASLR		0x10	/* Force enable ASLR */
+#define NT_NETBSD_PAX_NOASLR		0x20	/* Force disable ASLR */
+
+/*
+ * NetBSD-specific note type: MACHINE_ARCH.
+ * There should be 1 NOTE per executable.
+ * name:	NetBSD\0
+ * namesz:	7
+ * desc:	string
+ * descsz:	variable
+ */
+#define NT_NETBSD_MARCH		5
+
+/*
+ * NetBSD-specific note type: COMPILER MODEL.
+ * There should be 1 NOTE per executable.
+ * name:	NetBSD\0
+ * namesz:	7
+ * desc:	string
+ * descsz:	variable
+ */
+#define NT_NETBSD_CMODEL	6
+
+/*
+ * Golang-specific note type
+ * name: Go\0\0
+ * namesz: 4
+ * desc: base-64 build id.
+ * descsz: < 128
+ */
+#define NT_GO_BUILD_ID	4
+
+/*
+ * FreeBSD specific notes
+ */
+#define NT_FREEBSD_PROCSTAT_AUXV	16
+
+#if !defined(ELFSIZE) && defined(ARCH_ELFSIZE)
+#define ELFSIZE ARCH_ELFSIZE
+#endif
+/* SunOS 5.x hardware/software capabilities */
+typedef struct {
+	Elf32_Word	c_tag;
+	union {
+		Elf32_Word	c_val;
+		Elf32_Addr	c_ptr;
+	} c_un;
+} Elf32_Cap;
+
+typedef struct {
+	Elf64_Xword	c_tag;
+	union {
+		Elf64_Xword	c_val;
+		Elf64_Addr	c_ptr;
+	} c_un;
+} Elf64_Cap;
+
+/* SunOS 5.x hardware/software capability tags */
+#define	CA_SUNW_NULL	0
+#define	CA_SUNW_HW_1	1
+#define	CA_SUNW_SF_1	2
+
+/* SunOS 5.x software capabilities */
+#define	SF1_SUNW_FPKNWN	0x01
+#define	SF1_SUNW_FPUSED	0x02
+#define	SF1_SUNW_MASK	0x03
+
+/* SunOS 5.x hardware capabilities: sparc */
+#define	AV_SPARC_MUL32		0x0001
+#define	AV_SPARC_DIV32		0x0002
+#define	AV_SPARC_FSMULD		0x0004
+#define	AV_SPARC_V8PLUS		0x0008
+#define	AV_SPARC_POPC		0x0010
+#define	AV_SPARC_VIS		0x0020
+#define	AV_SPARC_VIS2		0x0040
+#define	AV_SPARC_ASI_BLK_INIT	0x0080
+#define	AV_SPARC_FMAF		0x0100
+#define	AV_SPARC_FJFMAU		0x4000
+#define	AV_SPARC_IMA		0x8000
+
+/* SunOS 5.x hardware capabilities: 386 */
+#define	AV_386_FPU		0x00000001
+#define	AV_386_TSC		0x00000002
+#define	AV_386_CX8		0x00000004
+#define	AV_386_SEP		0x00000008
+#define	AV_386_AMD_SYSC		0x00000010
+#define	AV_386_CMOV		0x00000020
+#define	AV_386_MMX		0x00000040
+#define	AV_386_AMD_MMX		0x00000080
+#define	AV_386_AMD_3DNow	0x00000100
+#define	AV_386_AMD_3DNowx	0x00000200
+#define	AV_386_FXSR		0x00000400
+#define	AV_386_SSE		0x00000800
+#define	AV_386_SSE2		0x00001000
+#define	AV_386_PAUSE		0x00002000
+#define	AV_386_SSE3		0x00004000
+#define	AV_386_MON		0x00008000
+#define	AV_386_CX16		0x00010000
+#define	AV_386_AHF		0x00020000
+#define	AV_386_TSCP		0x00040000
+#define	AV_386_AMD_SSE4A	0x00080000
+#define	AV_386_POPCNT		0x00100000
+#define	AV_386_AMD_LZCNT	0x00200000
+#define	AV_386_SSSE3		0x00400000
+#define	AV_386_SSE4_1		0x00800000
+#define	AV_386_SSE4_2		0x01000000
+
+/*
+ * Dynamic Section structure array
+ */
+typedef struct {
+	Elf32_Word		d_tag;	/* entry tag value */
+	union {
+		Elf32_Addr	d_ptr;
+		Elf32_Word	d_val;
+	} d_un;
+} Elf32_Dyn;
+
+typedef struct {
+	Elf64_Xword		d_tag;	/* entry tag value */
+	union {
+		Elf64_Addr	d_ptr;
+		Elf64_Xword	d_val;
+	} d_un;
+} Elf64_Dyn;
+
+/* d_tag */
+#define DT_NULL		0	/* Marks end of dynamic array */
+#define DT_NEEDED	1	/* Name of needed library (DT_STRTAB offset) */
+#define DT_PLTRELSZ	2	/* Size, in bytes, of relocations in PLT */
+#define DT_PLTGOT	3	/* Address of PLT and/or GOT */
+#define DT_HASH		4	/* Address of symbol hash table */
+#define DT_STRTAB	5	/* Address of string table */
+#define DT_SYMTAB	6	/* Address of symbol table */
+#define DT_RELA		7	/* Address of Rela relocation table */
+#define DT_RELASZ	8	/* Size, in bytes, of DT_RELA table */
+#define DT_RELAENT	9	/* Size, in bytes, of one DT_RELA entry */
+#define DT_STRSZ	10	/* Size, in bytes, of DT_STRTAB table */
+#define DT_SYMENT	11	/* Size, in bytes, of one DT_SYMTAB entry */
+#define DT_INIT		12	/* Address of initialization function */
+#define DT_FINI		13	/* Address of termination function */
+#define DT_SONAME	14	/* Shared object name (DT_STRTAB offset) */
+#define DT_RPATH	15	/* Library search path (DT_STRTAB offset) */
+#define DT_SYMBOLIC	16	/* Start symbol search within local object */
+#define DT_REL		17	/* Address of Rel relocation table */
+#define DT_RELSZ	18	/* Size, in bytes, of DT_REL table */
+#define DT_RELENT	19	/* Size, in bytes, of one DT_REL entry */
+#define DT_PLTREL	20	/* Type of PLT relocation entries */
+#define DT_DEBUG	21	/* Used for debugging; unspecified */
+#define DT_TEXTREL	22	/* Relocations might modify non-writable seg */
+#define DT_JMPREL	23	/* Address of relocations associated with PLT */
+#define DT_BIND_NOW	24	/* Process all relocations at load-time */
+#define DT_INIT_ARRAY	25	/* Address of initialization function array */
+#define DT_FINI_ARRAY	26	/* Size, in bytes, of DT_INIT_ARRAY array */
+#define DT_INIT_ARRAYSZ 27	/* Address of termination function array */
+#define DT_FINI_ARRAYSZ 28	/* Size, in bytes, of DT_FINI_ARRAY array*/
+#define DT_RUNPATH	29	/* overrides DT_RPATH */
+#define DT_FLAGS	30	/* Encodes ORIGIN, SYMBOLIC, TEXTREL, BIND_NOW, STATIC_TLS */
+#define DT_ENCODING	31	/* ??? */
+#define DT_PREINIT_ARRAY 32	/* Address of pre-init function array */
+#define DT_PREINIT_ARRAYSZ 33	/* Size, in bytes, of DT_PREINIT_ARRAY array */
+#define DT_NUM		34
+
+#define DT_LOOS		0x60000000	/* Operating system specific range */
+#define DT_VERSYM	0x6ffffff0	/* Symbol versions */
+#define DT_FLAGS_1	0x6ffffffb	/* ELF dynamic flags */
+#define DT_VERDEF	0x6ffffffc	/* Versions defined by file */
+#define DT_VERDEFNUM	0x6ffffffd	/* Number of versions defined by file */
+#define DT_VERNEED	0x6ffffffe	/* Versions needed by file */
+#define DT_VERNEEDNUM	0x6fffffff	/* Number of versions needed by file */
+#define DT_HIOS		0x6fffffff
+#define DT_LOPROC	0x70000000	/* Processor-specific range */
+#define DT_HIPROC	0x7fffffff
+
+/* Flag values for DT_FLAGS */
+#define DF_ORIGIN	0x00000001	/* uses $ORIGIN */
+#define DF_SYMBOLIC	0x00000002	/* */
+#define DF_TEXTREL	0x00000004	/* */
+#define DF_BIND_NOW	0x00000008	/* */
+#define DF_STATIC_TLS	0x00000010	/* */
+
+/* Flag values for DT_FLAGS_1 */
+#define	DF_1_NOW	0x00000001	/* Same as DF_BIND_NOW */
+#define	DF_1_GLOBAL	0x00000002	/* Unused */
+#define	DF_1_GROUP	0x00000004	/* Is member of group */
+#define	DF_1_NODELETE	0x00000008	/* Cannot be deleted from process */
+#define	DF_1_LOADFLTR	0x00000010	/* Immediate loading of filters */
+#define	DF_1_INITFIRST	0x00000020	/* init/fini takes priority */
+#define	DF_1_NOOPEN	0x00000040	/* Do not allow loading on dlopen() */
+#define	DF_1_ORIGIN	0x00000080 	/* Require $ORIGIN processing */
+#define	DF_1_DIRECT	0x00000100	/* Enable direct bindings */
+#define	DF_1_INTERPOSE 	0x00000400	/* Is an interposer */
+#define	DF_1_NODEFLIB	0x00000800 	/* Ignore default library search path */
+#define	DF_1_NODUMP	0x00001000 	/* Cannot be dumped with dldump(3C) */
+#define	DF_1_CONFALT	0x00002000 	/* Configuration alternative */
+#define	DF_1_ENDFILTEE	0x00004000	/* Filtee ends filter's search */
+#define	DF_1_DISPRELDNE	0x00008000	/* Did displacement relocation */
+#define	DF_1_DISPRELPND 0x00010000	/* Pending displacement relocation */
+#define	DF_1_NODIRECT	0x00020000 	/* Has non-direct bindings */
+#define	DF_1_IGNMULDEF	0x00040000	/* Used internally */
+#define	DF_1_NOKSYMS	0x00080000	/* Used internally */
+#define	DF_1_NOHDR	0x00100000	/* Used internally */
+#define	DF_1_EDITED	0x00200000	/* Has been modified since build */
+#define	DF_1_NORELOC	0x00400000 	/* Used internally */
+#define	DF_1_SYMINTPOSE 0x00800000 	/* Has individual symbol interposers */
+#define	DF_1_GLOBAUDIT	0x01000000	/* Require global auditing */
+#define	DF_1_SINGLETON	0x02000000	/* Has singleton symbols */
+#define	DF_1_STUB	0x04000000	/* Stub */
+#define	DF_1_PIE	0x08000000	/* Position Independent Executable */
+
+#endif
Index: a/file/create-5.39-short-patch/file-5.39-new/src
===================================================================
--- a/file/create-5.39-short-patch/file-5.39-new/src	(nonexistent)
+++ a/file/create-5.39-short-patch/file-5.39-new/src	(revision 5)

Property changes on: a/file/create-5.39-short-patch/file-5.39-new/src
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file/create-5.39-short-patch/file-5.39-new
===================================================================
--- a/file/create-5.39-short-patch/file-5.39-new	(nonexistent)
+++ a/file/create-5.39-short-patch/file-5.39-new	(revision 5)

Property changes on: a/file/create-5.39-short-patch/file-5.39-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file/create-5.39-short-patch/file.list
===================================================================
--- a/file/create-5.39-short-patch/file.list	(nonexistent)
+++ a/file/create-5.39-short-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+file-5.39/src/readelf.h
Index: a/file/create-5.39-short-patch
===================================================================
--- a/file/create-5.39-short-patch	(nonexistent)
+++ a/file/create-5.39-short-patch	(revision 5)

Property changes on: a/file/create-5.39-short-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file/patches/README
===================================================================
--- a/file/patches/README	(nonexistent)
+++ a/file/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/file/patches
===================================================================
--- a/file/patches	(nonexistent)
+++ a/file/patches	(revision 5)

Property changes on: a/file/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/file
===================================================================
--- a/file	(nonexistent)
+++ a/file	(revision 5)

Property changes on: a/file
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/ghostscript/Makefile
===================================================================
--- a/ghostscript/Makefile	(nonexistent)
+++ a/ghostscript/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/ghostscript
+
+versions    = 10.0.0
+pkgname     = ghostscript
+suffix      = tar.xz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/ghostscript-10.0.0-cross.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-10.0.0-cross-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/ghostscript/create-10.0.0-cross-patch/create.patch.sh
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/create.patch.sh	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=10.0.0
+
+tar --files-from=file.list -xJvf ../ghostscript-$VERSION.tar.xz
+mv ghostscript-$VERSION ghostscript-$VERSION-orig
+
+cp -rf ./ghostscript-$VERSION-new ./ghostscript-$VERSION
+
+diff --unified -Nr  ghostscript-$VERSION-orig  ghostscript-$VERSION > ghostscript-$VERSION-cross.patch
+
+mv ghostscript-$VERSION-cross.patch ../patches
+
+rm -rf ./ghostscript-$VERSION
+rm -rf ./ghostscript-$VERSION-orig

Property changes on: a/ghostscript/create-10.0.0-cross-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/ghostscript/create-10.0.0-cross-patch/file.list
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/file.list	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/file.list	(revision 5)
@@ -0,0 +1,12 @@
+ghostscript-10.0.0/base/gs.mak
+ghostscript-10.0.0/base/ijs.mak
+ghostscript-10.0.0/base/jpeg.mak
+ghostscript-10.0.0/base/lib.mak
+ghostscript-10.0.0/base/openvms.mak
+ghostscript-10.0.0/base/tesseract.mak
+ghostscript-10.0.0/base/ugcclib.mak
+ghostscript-10.0.0/base/unix-aux.mak
+ghostscript-10.0.0/base/unixlink.mak
+ghostscript-10.0.0/base/winlib.mak
+ghostscript-10.0.0/devices/devs.mak
+ghostscript-10.0.0/configure.ac
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/gs.mak
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/gs.mak	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/gs.mak	(revision 5)
@@ -0,0 +1,592 @@
+# Copyright (C) 2001-2021 Artifex Software, Inc.
+# All Rights Reserved.
+#
+# This software is provided AS-IS with no warranty, either express or
+# implied.
+#
+# This software is distributed under license and may not be copied,
+# modified or distributed except as expressly authorized under the terms
+# of the license contained in the file LICENSE in this distribution.
+#
+# Refer to licensing information at http://www.artifex.com or contact
+# Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
+# CA 94945, U.S.A., +1(415)492-9861, for further information.
+#
+#
+# Generic makefile, common to all platforms, products, and configurations.
+# The platform-specific makefiles `include' this file.
+
+# Ghostscript makefiles cannot use default compilation rules, because
+# they may place the output in (multiple) different directories.
+# All compilation rules must have the form
+#	<<compiler>> $(O_)<<output_file>> $(C_)<<input_file>>
+# to cope with the divergent syntaxes of the various compilers.
+# Spaces must appear where indicated, and nowhere else; in particular,
+# there must be no space between $(O_) and the output file name.
+
+# The platform-specific makefiles define the following symbols:
+#	GS - the name of the executable (without the extension, if any).
+#	GS_LIB_DEFAULT - the default directory/ies for searching for the
+#	    initialization and font files at run time.
+#	GS_DEV_DEFAULT - array of default device names, in order of
+#	    preference. If empty the first DEVICE_DEV will be used.
+#	GS_CACHE_DIR - the default directory for caching data between
+#	    ghostscript invocations.
+#	SEARCH_HERE_FIRST - the default setting of -P (whether or not to
+#	    look for files in the current directory first).
+#	GS_DOCDIR - the directory where documentation will be available
+#	    at run time.
+#	FTSRCDIR - the directory where there the FreeType library
+#	    source code is stored, relative to the source directory.
+#	JSRCDIR - the directory where the IJG JPEG library source code
+#	    is stored (at compilation time).
+#	PNGSRCDIR - the same for libpng.
+#	ZSRCDIR - the same for zlib.
+#	SHARE_FT - normally 0; if set to 1, asks the linker to use
+#	    and existing compiled freetype library instead of compiling
+#	    in the source code availabel in FTSRCDIR.
+#	SHARE_JPEG - normally 0; if set to 1, asks the linker to use
+#	    an existing compiled libjpeg (-ljpeg) instead of compiling and
+#	    linking libjpeg explicitly.  (We strongly recommend against
+#	    doing this: see Make.htm details.)
+#	JPEG_NAME - the name of the shared library, currently always
+#	    jpeg (libjpeg, -lpjeg).
+#	SHARE_LIBPNG - normally 0; if set to 1, asks the linker to use
+#	    an existing compiled libpng (-lpng) instead of compiling and
+#	    linking libpng explicitly.
+#	LIBPNG_NAME, the name of the shared libpng, currently always
+#	    png (libpng, -lpng).
+#	SHARE_ZLIB - normally 0; if set to 1, asks the linker to use
+#	    an existing compiled zlib (-lgz or -lz) instead of compiling
+#	    and linking libgz/libz explicitly.
+#	ZLIB_NAME - the name of the shared zlib, either gz (for libgz, -lgz)
+#	    or z (for libz, -lz).
+#	JBIG2_LIB - choice of which jbig2 implementation to use
+#	SHARE_JBIG2 - normally 0; if set to 1, asks the linker to use
+#	    an existing complied libjbig2dec instead of compiling and linking
+#	    in from a local copy of the source
+#	JBIG2SRCDIR - the name of the jbig2dec library source directory
+#	    typically 'jbig2dec' or 'jbig2dec-/version/'
+#	JPX_LIB - choice of which jpeg2k implementation to use
+#	SHARE_JPX - If set to 1, asks the linker to use an existing
+#	    complied jpeg2k library. If set to 0, asks to compile and
+#	    link from a local copy of the source using our custom
+#	    makefile.
+#	JPXSRCDIR - the name of the jpeg2k library source directory
+#	    e.g. 'openjpeg'
+#	JPX_CFLAGS - any platform-specific flags that are required
+#	    to properly compile in the jpeg2k library source
+#	SHARE_LCMS - If set to 1, asks the linker to use a separately
+#	    compiled lcms library. If set to 0, the build will compile
+#	    in the library source found in LCMSSRCDIR
+#	LCMSSRCDIR - the name of the lcms library source directory
+#	    e.g. 'lcms' or 'lcms-<version>'
+#	DEVICE_DEVS - the devices to include in the executable.
+#	    See devs.mak for details.
+#	DEVICE_DEVS1...DEVICE_DEVS21 - additional devices, if the definition
+#	    of DEVICE_DEVS doesn't fit on one line.  See devs.mak for details.
+#	FEATURE_DEVS - what features to include in the executable.
+#	    Normally this is one of:
+#		    $(PSD)psl1.dev - a PostScript Level 1 language interpreter.
+#		    $(PSD)psl2.dev - a PostScript Level 2 language interpreter.
+#		    $(PSD)psl3.dev - a PostScript LanguageLevel 3 language
+#		      interpreter.
+#	      and/or
+#		    pdf - a PDF 1.2 interpreter.
+#	    psl3 includes everything in psl2, and psl2 includes everything
+#	      in psl1.  For backward compatibility, level1 is a synonym for
+#	      psl1, and level2 is a synonym for psl2.
+#	    The remaining features are of interest primarily to developers
+#	      who want to "mix and match" features to create custom
+#	      configurations:
+#		    btoken - support for binary token encodings.
+#			Included automatically in the dps and psl2 features.
+#		    cidfont - (currently partial) support for CID-keyed fonts.
+#		    color - support for the Level 1 CMYK color extensions.
+#			Included automatically in the dps and psl2 features.
+#		    compfont - support for composite (type 0) fonts.
+#			Included automatically in the psl2 feature.
+#		    dct - support for DCTEncode/Decode filters.
+#			Included automatically in the psl2 feature.
+#                   diskn - support for %disk IODevice emulation. Adds support
+#                       for %disk0 thru %disk9. Use requires setting the /Root
+#                       paramter for each %disk (see Language.htm).
+#		    dps - (partial) support for Display PostScript extensions:
+#			see Language.htm for details.
+#		    epsf - support for recognizing and skipping the binary
+#			header of MS-DOS EPSF files.
+#		    filter - support for Level 2 filters (other than eexec,
+#			ASCIIHexEncode/Decode, NullEncode, PFBDecode,
+#			RunLengthEncode/Decode, and SubFileDecode, which are
+#			always included, and DCTEncode/Decode,
+#			which are separate).
+#			Included automatically in the psl2 feature.
+#		    fzlib - support for zlibEncode/Decode filters.
+#		    ttfont - support for TrueType fonts.
+#		    type1 - support for Type 1 fonts and eexec;
+#			normally included automatically in all configurations.
+#		    type32 - support for Type 32 (downloaded bitmap) fonts.
+#			Included automatically in the psl2 feature.
+#		    type42 - support for Type 42 (embedded TrueType) fonts.
+#			Included automatically in the psl2 feature.
+#                   fapi - Font API (3d party font renderer interface).
+#		There are quite a number of other sub-features that can be
+#		selectively included in or excluded from a configuration,
+#		but the above are the ones that are most likely to be of
+#		interest.
+#	COMPILE_INITS - normally 1; compiles the PostScript language
+#	    initialization files (gs_init.ps et al) and Resource/* tree
+#	    into the executable, eliminating the need for these files
+#	    to be present at run time. Files will be placed in the
+#	    %rom% device.
+#	BAND_LIST_STORAGE - normally file; if set to memory, stores band
+#	    lists in memory (with compression if needed).
+#	BAND_LIST_COMPRESSOR - normally zlib: selects the compression method
+#	    to use for band lists in memory.
+#	FILE_IMPLEMENTATION - normally stdio; if set to fd, uses file
+#	    descriptors instead of buffered stdio for file I/O; if set to
+#	    both, provides both implementations with different procedure
+#	    names for the fd-based implementation (see sfxfd.c for
+#	    more information).
+#
+# It is very unlikely that anyone would want to edit the remaining
+#   symbols, but we describe them here for completeness:
+#	GS_INIT - the name of the initialization file for the interpreter,
+#		normally gs_init.ps.
+#	GSPLATFORM - a "device" name for the platform, so that platforms can
+#		add various kinds of resources like devices and features.
+#	CMD - the suffix for shell command files (e.g., null or .bat).
+#		(This is only needed in a few places.)
+#	D - the directory separator character (\ for MS-DOS, / for Unix).
+#	O_ - the string for specifying the output file from the C compiler
+#		(-o for MS-DOS, -o ./ for Unix).
+#	OBJ - the extension for relocatable object files (e.g., o or obj).
+#	XE - the extension for executable files (e.g., null or .exe).
+#	XEAUX - the extension for the executable files (e.g., null or .exe)
+#		for the utility programs (those compiled with CCAUX).
+#	BEGINFILES - the list of additional files that `make clean' should
+#		delete.
+#	CCAUX - the C invocation for auxiliary programs (echogs, genarch,
+#		genconf, gendev, genht, geninit).
+#	CC_ - the C invocation for normal compilation.
+#	CCD - the C invocation for files that store into frame buffers or
+#		device registers.  Needed because some optimizing compilers
+#		will eliminate necessary stores.
+#	CCINT - the C invocation for compiling the main interpreter module,
+#		normally the same as CC_: this is needed because the
+#		Borland compiler generates *worse* code for this module
+#		(but only this module) when optimization (-O) is turned on.
+#	AK - if a particular platform requires any programs or data files
+#		to be built before compiling the source code, AK must list
+#		them.
+#	EXP - the prefix for invoking an executable program in a specified
+#		directory (MCR on OpenVMS, null on all other platforms).
+#	SH - the shell for scripts (null on MS-DOS, sh on Unix).
+#	CONFILES - the arguments for genconf to generate the appropriate
+#		linker control files (various).
+#	CONFLDTR - the genconf switch for generating ld_tr.
+#	CP_ - the command for copying one file to another.  Because of
+#		limitations in the MS-DOS/MS Windows environment, the
+#		second argument must be either '.' (in which case the
+#		write date may be either preserved or set to the current
+#		date) or a file name (in which case the write date is
+#		always updated).
+#	RM_ - the command for deleting (a) file(s) (including wild cards,
+#		but limited to a single file or pattern).
+#	RMN_ = the command for deleting multiple files / patterns.
+#
+# The platform-specific makefiles must also include rules for creating
+# certain dynamically generated files:
+#	gconfig_.h - this indicates the presence or absence of
+#	    certain system header files that are located in different
+#	    places on different systems.  (It could be generated by
+#	    the GNU `configure' program.)
+#	gconfigd.h - this is used for configuration-specific definitions
+#	    such as paths that must be defined by all top-level makefiles.
+
+#**************** PATCHES
+FTGENDIR=$(GLGENDIR)
+FTOBJDIR=$(GLOBJDIR)
+JGENDIR=$(GLGENDIR)
+JOBJDIR=$(GLOBJDIR)
+PNGGENDIR=$(GLGENDIR)
+PNGOBJDIR=$(GLOBJDIR)
+ZGENDIR=$(GLGENDIR)
+ZOBJDIR=$(GLOBJDIR)
+ZAUXDIR=$(AUXDIR)
+TIFFGENDIR=$(GLGENDIR)
+TIFFOBJDIR=$(GLOBJDIR)
+JBIG2GENDIR=$(GLGENDIR)
+JBIG2OBJDIR=$(GLOBJDIR)
+JPXGENDIR=$(GLGENDIR)
+JPXOBJDIR=$(GLOBJDIR)
+LCMSGENDIR=$(GLGENDIR)
+LCMSOBJDIR=$(GLOBJDIR)
+LCMS2GENDIR=$(GLGENDIR)
+LCMS2OBJDIR=$(GLOBJDIR)
+EXPATGENDIR=$(GLGENDIR)
+EXPATOBJDIR=$(GLOBJDIR)
+IJSGENDIR=$(GLGENDIR)
+IJSOBJDIR=$(GLOBJDIR)
+LCUPSGENDIR=$(GLGENDIR)
+LCUPSOBJDIR=$(GLOBJDIR)
+LCUPSIGENDIR=$(GLGENDIR)
+LCUPSIOBJDIR=$(GLOBJDIR)
+CALOBJDIR=$(GLOBJDIR)
+
+#**************** END PATCHES
+
+GSGEN=$(GLGENDIR)$(D)
+GSOBJ=$(GLOBJDIR)$(D)
+# All top-level makefiles define DD.
+#DD=$(GLGEN)
+
+# Define the name of this makefile.
+GS_MAK=$(GLSRCDIR)$(D)gs.mak $(TOP_MAKEFILES)
+
+# Define the names of the executables.
+GS_XE=$(BINDIR)$(D)$(GS)$(XE)
+GPCL_XE=$(BINDIR)$(D)$(PCL)$(XE)
+GXPS_XE=$(BINDIR)$(D)$(XPS)$(XE)
+GPDF_XE=$(BINDIR)$(D)$(PDF)$(XE)
+GPDL_XE=$(BINDIR)$(D)$(GPDL)$(XE)
+
+AUX=$(AUXDIR)$(D)
+ECHOGS_XE=$(AUX)echogs$(XEAUX)
+GENARCH_XE=$(AUX)genarch$(XEAUX)
+GENCONF_XE=$(AUX)genconf$(XEAUX)
+GENDEV_XE=$(AUX)gendev$(XEAUX)
+GENHT_XE=$(AUX)genht$(XEAUX)
+MKROMFS_XE=$(AUX)mkromfs$(XEAUX)
+PACKPS_XE=$(AUX)packps$(XEAUX)
+
+GENARCH_XE_BUILD=$(AUX)genarch-build$(XEAUX)
+ECHOGS_XE_BUILD=$(AUX)echogs-build$(XEAUX)
+GENCONF_XE_BUILD=$(AUX)genconf-build$(XEAUX)
+PACKPS_XE_BUILD=$(AUX)packps-build$(XEAUX)
+
+# Define the names of the generated header files.
+# gconfig*.h and gconfx*.h are generated dynamically.
+gconfig_h=$(GLGENDIR)$(D)gconfig.h
+gconfxx_h=$(GLGENDIR)$(D)gconfxx.h
+gconfigf_h=$(GLGENDIR)$(D)gconfxc.h
+gconfigd_h=$(GLGENDIR)$(D)gconfigd.h
+
+iconfxx_h=$(GLGENDIR)$(D)iconfxx.h
+iconfig_h=$(GLGENDIR)$(D)iconfig.h
+
+all default : $(GS_XE) $(PCL_XPS_PDL_TARGETS) $(GS_SHARED_OBJS) $(MAKEDIRSTOP) $(GS_MAK) $(MAKEDIRS)
+	$(NO_OP)
+
+experimental: all
+	$(NO_OP)
+
+# the distclean and maintainer-clean targets (if any)
+# are the responsibility of the platform-specific
+# makefiles. We only handle the internal build system
+# apparatus here.
+realclean : clean
+	$(NO_OP)
+
+cleansub : mostlyclean
+	$(RM_) $(GSGEN)arch.h
+	$(RM_) $(GS_XE)
+	$(RM_) $(GS_SHARED_OBJS)
+	$(RMN_) -r $(BINDIR) $(GLGENDIR) $(GLOBJDIR) $(PSGENDIR) $(PSOBJDIR)
+
+clean : cleansub  $(PCL_XPS_CLEAN)
+	$(NO_OP)
+#****** FOLLOWING IS WRONG, NEEDS TO BE PER-SUBSYSTEM ******
+mostlyclean : config-clean
+	$(RMN_) $(GSOBJ)*.$(OBJ) $(GSOBJ)*.a $(GSOBJ)core $(GSOBJ)gmon.out
+	$(RMN_) $(GSGEN)deflate.h $(GSGEN)zutil.h
+	$(RMN_) $(GSGEN)gconfig*.c $(GSGEN)gscdefs*.c $(GSGEN)iconfig*.c
+	$(RMN_) $(GSGEN)_temp_* $(GSGEN)_temp_*.* $(GSOBJ)*.map $(GSOBJ)*.sym
+	$(RMN_) $(GENARCH_XE) $(GENCONF_XE) $(GENDEV_XE) $(GENHT_XE)
+	$(RMN_) $(ECHOGS_XE)
+	$(RMN_) $(GSGEN)gs_init.ps $(BEGINFILES)
+	$(RMN_) $(MKROMFS_XE)
+	$(RMN_) $(MKROMFS_XE)_0
+	$(RMN_) $(MKROMFS_XE)_1
+	$(RMN_) $(PACKPS_XE)
+	$(RMN_) $(GSGEN)gsromfs1.c $(GSGEN)gsromfs1_.c $(GSGEN)gsromfs1_1.c
+	$(RMN_) $(AUX)*.$(OBJ) $(AUX)gscdefs*.c
+
+# Remove only configuration-dependent information.
+#****** FOLLOWING IS WRONG, NEEDS TO BE PER-SUBSYSTEM ******
+config-clean :
+	$(RMN_) $(GSGEN)*.dev $(GSGEN)devs*.tr $(GSGEN)gconfig*.h
+	$(RMN_) $(GSGEN)gconfx*.h $(GSGEN)j*.h $(GSGEN)tif*.h
+	$(RMN_) $(GSGEN)c*.tr $(GSGEN)o*.tr $(GSGEN)l*.tr
+
+# Macros for constructing the *.dev files that describe features and
+# devices.
+SETDEV=$(EXP)$(ECHOGS_XE_BUILD) -e .dev -w- -l-dev -b -s -l-obj
+SETPDEV=$(EXP)$(ECHOGS_XE_BUILD) -e .dev -w- -l-dev -b -s -l-include -l$(GLGENDIR)$(D)page -l-obj
+SETDEV2=$(EXP)$(ECHOGS_XE_BUILD) -e .dev -w- -l-dev2 -b -s -l-obj
+SETPDEV2=$(EXP)$(ECHOGS_XE_BUILD) -e .dev -w- -l-dev2 -b -s -l-include -l$(GLGENDIR)$(D)page -l-obj
+SETMOD=$(EXP)$(ECHOGS_XE_BUILD) -e .dev -w- -l-obj
+ADDMOD=$(EXP)$(ECHOGS_XE_BUILD) -e .dev -a- $(NULL)
+SETCOMP=$(EXP)$(ECHOGS_XE_BUILD) -e .dev -w- -l-comp
+ADDCOMP=$(EXP)$(ECHOGS_XE_BUILD) -e .dev -a- -l-comp
+
+IJSI_=$(IJSSRCDIR)
+IJSF_=
+# Currently there is no option for sharing ijs.
+IJSCF_=
+JI_=$(JSRCDIR)
+JF_=
+JCF_=$(D_)SHARE_JPEG=$(SHARE_JPEG)$(_D)
+ZI_=$(ZSRCDIR)
+PI_=$(PNGSRCDIR) $(II)$(ZI_)
+# PF_ should include PNG_USE_CONST, but this doesn't work.
+#PF_=-DPNG_USE_CONST
+TI_=$(TIFFSRCDIR)$(D)libtiff $(II)$(TIFFCONFDIR)$(D)libtiff $(II)$(JGENDIR) $(II)$(ZI_)
+PF_=
+PCF_=$(D_)SHARE_LIBPNG=$(SHARE_LIBPNG)$(_D)
+ZI_=$(ZSRCDIR)
+ZF_=
+ZCF_=$(D_)SHARE_ZLIB=$(SHARE_ZLIB)$(_D)
+JB2I_=$(JBIG2SRCDIR)
+JB2CF_=$(JBIG2_CFLAGS)
+LDF_JB2I_=$(JBIG2SRCDIR)$(D)source$(D)libraries
+LWF_JPXI_=$(JPXSRCDIR)$(D)library$(D)source
+JPXCF_=$(JPX_CFLAGS)
+JPX_OPENJPEG_I_=$(JPXSRCDIR)$(D)src$(D)lib$(D)openjp2
+
+######################## How to define new 'features' #######################
+#
+# One defines new 'features' exactly like devices (see devs.mak for details).
+# For example, one would define a feature abc by adding the following to
+# gs.mak:
+#
+#	abc_=abc1.$(OBJ) ...
+#	$(PSD)abc.dev : $(GS_MAK) $(ECHOGS_XE) $(abc_)
+#		$(SETMOD) $(PSD)abc $(abc_)
+#		$(ADDMOD) $(PSD)abc -obj ... [if needed]
+#		$(ADDMOD) $(PSD)abc -oper ... [if appropriate]
+#		$(ADDMOD) $(PSD)abc -ps ... [if appropriate]
+#
+# Use PSD for interpreter-related features, GLD for library-related.
+# If the abc feature requires the presence of some other features jkl and
+# pqr, then the rules must look like this:
+#
+#	abc_=abc1.$(OBJ) ...
+#	$(PSD)abc.dev : $(GS_MAK) $(ECHOGS_XE) $(abc_)\
+#	 $(PSD)jkl.dev $(PSD)pqr.dev
+#		$(SETMOD) $(PSD)abc $(abc_)
+#		...
+#		$(ADDMOD) $(PSD)abc -include $(PSD)jkl
+#		$(ADDMOD) $(PSD)abc -include $(PSD)pqr
+
+# --------------------- Configuration-dependent files --------------------- #
+
+# gconfig.h shouldn't have to depend on DEVS_ALL, but that would
+# involve rewriting gsconfig to only save the device name, not the
+# contents of the <device>.dev files.
+# FEATURE_DEVS must precede DEVICE_DEVS so that devices can override
+# features in obscure cases.
+
+# FEATURE_DEVS_EXTRA and DEVICE_DEVS_EXTRA are explicitly reserved
+# to be set from the command line.
+
+GSPLAT_DEVS_ALL=$(GLGENDIR)$(D)$(GSPLATFORM).dev
+
+DEVICE_DEVS_ALL=$(DEVICE_DEVS) $(DEVICE_DEVS1) \
+ $(DEVICE_DEVS2) $(DEVICE_DEVS3) $(DEVICE_DEVS4) $(DEVICE_DEVS5) \
+ $(DEVICE_DEVS6) $(DEVICE_DEVS7) $(DEVICE_DEVS8) $(DEVICE_DEVS9) \
+ $(DEVICE_DEVS10) $(DEVICE_DEVS11) $(DEVICE_DEVS12) $(DEVICE_DEVS13) \
+ $(DEVICE_DEVS14) $(DEVICE_DEVS15) $(DEVICE_DEVS16) $(DEVICE_DEVS17) \
+ $(DEVICE_DEVS18) $(DEVICE_DEVS19) $(DEVICE_DEVS20) $(DEVICE_DEVS21) \
+ $(DEVICE_DEVS_EXTRA)
+
+PSI_DEVS_ALL=$(GSPLAT_DEVS_ALL) \
+ $(PSI_FEATURE_DEVS) \
+ $(PSD)iapi.dev \
+ $(FEATURE_DEVS) \
+ $(FEATURE_DEVS_EXTRA) \
+ $(DEVICE_DEVS_ALL)
+
+PCL_DEVS_ALL=$(GSPLAT_DEVS_ALL) \
+ $(FEATURE_DEVS) \
+ $(FEATURE_DEVS_EXTRA) \
+ $(DEVICE_DEVS_ALL)
+
+XPS_DEVS_ALL=$(GSPLAT_DEVS_ALL) \
+ $(FEATURE_DEVS) \
+ $(FEATURE_DEVS_EXTRA) \
+ $(DEVICE_DEVS_ALL)
+
+PDF_DEVS_ALL=$(GSPLAT_DEVS_ALL) \
+ $(FEATURE_DEVS) \
+ $(FEATURE_DEVS_EXTRA) \
+ $(DEVICE_DEVS_ALL)
+
+DEVS_ALL=$(GLGENDIR)$(D)$(GSPLATFORM).dev\
+ $(FEATURE_DEVS_EXTRA) \
+ $(DEVICE_DEVS) $(DEVICE_DEVS1) \
+ $(DEVICE_DEVS2) $(DEVICE_DEVS3) $(DEVICE_DEVS4) $(DEVICE_DEVS5) \
+ $(DEVICE_DEVS6) $(DEVICE_DEVS7) $(DEVICE_DEVS8) $(DEVICE_DEVS9) \
+ $(DEVICE_DEVS10) $(DEVICE_DEVS11) $(DEVICE_DEVS12) $(DEVICE_DEVS13) \
+ $(DEVICE_DEVS14) $(DEVICE_DEVS15) $(DEVICE_DEVS16) $(DEVICE_DEVS17) \
+ $(DEVICE_DEVS18) $(DEVICE_DEVS19) $(DEVICE_DEVS20) $(DEVICE_DEVS21) \
+ $(DEVICE_DEVS_EXTRA)
+
+
+$(GLGENDIR)$(D)fdevs.tr: $(GS_MAK) $(ECHOGS_XE) $(GSPLAT_DEVS_ALL) $(FEATURE_DEVS) $(MAKEDIRS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(GLGENDIR)$(D)fdevs.tr - -include $(GLGENDIR)$(D)$(GSPLATFORM)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)fdevs.tr -+ $(FEATURE_DEVS)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)fdevs.tr -+ $(FEATURE_DEVS_EXTRA)
+
+$(GLGENDIR)$(D)devdevs.tr: $(GS_MAK) $(ECHOGS_XE) $(DEVICE_DEVS_ALL) $(MAKEDIRS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS1)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS2)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS3)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS4)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS5)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS6)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS7)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS8)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS9)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS10)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS11)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS12)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS13)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS14)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS15)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS16)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS17)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS18)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS19)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS20)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS21)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr -+ $(DEVICE_DEVS_EXTRA)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(GLGENDIR)$(D)devdevs.tr - $(GLGENDIR)$(D)libcore
+
+devs_tr=$(GLGENDIR)$(D)devs.tr
+psdevs_tr=$(GLGENDIR)$(D)psdevs.tr
+
+$(devs_tr) : $(GS_MAK) $(ECHOGS_XE) $(GLGENDIR)$(D)fdevs.tr $(GLGENDIR)$(D)devdevs.tr $(MAKEDIRS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(devs_tr) -n -R $(GLGENDIR)$(D)fdevs.tr
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(devs_tr) -+ ""
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(devs_tr) -n -R $(GLGENDIR)$(D)devdevs.tr
+
+# GCONFIG_EXTRAS can be set on the command line.
+# Note that it consists of arguments for echogs, i.e.,
+# it isn't just literal text.
+GCONFIG_EXTRAS=
+
+ld_tr=$(GLGENDIR)$(D)ld.tr
+$(ld_tr) : \
+  $(GS_MAK) $(GLSRCDIR)$(D)version.mak $(GENCONF_XE) $(ECHOGS_XE) $(devs_tr)\
+  $(GLGENDIR)$(D)libcore.dev $(MAKEDIRS)
+	$(EXP)$(GENCONF_XE_BUILD) $(devs_tr) -h $(gconfxx_h) $(CONFILES) $(CONFLDTR) $(ld_tr)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(gconfxx_h) $(GCONFIG_EXTRAS)
+
+gsnoapi_tr=$(GLGENDIR)$(D)gsnoapi.tr
+gs_tr=$(GLGENDIR)$(D)gs.tr
+igs_tr=$(GLGENDIR)$(D)igs.tr
+gsld_tr=$(GLGENDIR)$(D)gsld.tr
+gsnoapild_tr=$(GLGENDIR)$(D)gsnoapild.tr
+$(gsnoapi_tr): $(GS_MAK) $(GLSRCDIR)$(D)version.mak $(GENCONF_XE) $(ECHOGS_XE) $(ld_tr) $(devs_tr) $(PSI_DEVS_ALL)\
+ $(GLGENDIR)$(D)libcore.dev $(MAKEDIRS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(igs_tr) - -include $(PSI_FEATURE_DEVS)
+	$(EXP)$(GENCONF_XE_BUILD) $(igs_tr) -h $(iconfxx_h) $(CONFILES) $(CONFLDTR) $(gsld_tr)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(iconfig_h) -R $(iconfxx_h)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(gsnoapi_tr) -R $(devs_tr)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(gsnoapi_tr) -R $(igs_tr)
+	$(EXP)$(GENCONF_XE_BUILD) $(gsnoapi_tr) -h $(GLGENDIR)$(D)unused.h $(CONFILES) $(CONFLDTR) $(gsnoapild_tr)
+
+$(gs_tr): $(gsnoapi_tr)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(gs_tr) -R $(gsnoapi_tr)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(gs_tr) - -include $(PSD)iapi.dev
+	$(EXP)$(GENCONF_XE_BUILD) $(gs_tr) -h $(GLGENDIR)$(D)unused.h $(CONFILES) $(CONFLDTR) $(gsld_tr)
+
+
+pcl_tr=$(GLGENDIR)$(D)pcl.tr
+ipcl_tr=$(GLGENDIR)$(D)ipcl.tr
+pclld_tr=$(GLGENDIR)$(D)pclld.tr
+$(pcl_tr): $(GS_MAK) $(GLSRCDIR)$(D)version.mak $(GENCONF_XE) $(ECHOGS_XE) $(ld_tr) $(devs_tr) $(PCL_DEVS_ALL) \
+                                             $(devs_tr) $(PCL_FEATURE_DEVS) $(GLGENDIR)$(D)libcore.dev $(MAKEDIRS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(ipcl_tr) - -include $(PCL_FEATURE_DEVS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(pcl_tr) -R $(devs_tr)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(pcl_tr) -R $(ipcl_tr)
+	$(EXP)$(GENCONF_XE_BUILD) $(pcl_tr) -h $(GLGENDIR)$(D)unused.h $(CONFILES) $(CONFLDTR) $(pclld_tr)
+
+xps_tr=$(GLGENDIR)$(D)xps.tr
+ixps_tr=$(GLGENDIR)$(D)ixps.tr
+xpsld_tr=$(GLGENDIR)$(D)xpsld.tr
+$(xps_tr): $(GS_MAK) $(GLSRCDIR)$(D)version.mak $(GENCONF_XE) $(ECHOGS_XE) $(ld_tr) $(devs_tr) $(XPS_DEVS_ALL) \
+                                             $(devs_tr) $(XPS_FEATURE_DEVS) $(GLGENDIR)$(D)libcore.dev $(MAKEDIRS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(ixps_tr) - -include $(XPS_FEATURE_DEVS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(xps_tr) -R $(devs_tr)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(xps_tr) -R $(ixps_tr)
+	$(EXP)$(GENCONF_XE_BUILD) $(xps_tr) -h $(GLGENDIR)$(D)unused.h $(CONFILES) $(CONFLDTR) $(xpsld_tr)
+
+pdf_tr=$(GLGENDIR)$(D)pdf.tr
+ipdf_tr=$(GLGENDIR)$(D)ipdf.tr
+pdfld_tr=$(GLGENDIR)$(D)pdfld.tr
+$(pdf_tr): $(GS_MAK) $(GLSRCDIR)$(D)version.mak $(GENCONF_XE) $(ECHOGS_XE) $(ld_tr) $(devs_tr) $(PDF_DEVS_ALL) \
+                                             $(devs_tr) $(PDF_FEATURE_DEVS) $(GLGENDIR)$(D)libcore.dev $(MAKEDIRS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(ipdf_tr) - -include $(PDF_FEATURE_DEVS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(pdf_tr) -R $(devs_tr)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(pdf_tr) -R $(ipdf_tr)
+	$(EXP)$(GENCONF_XE_BUILD) $(pdf_tr) -h $(GLGENDIR)$(D)unused.h $(CONFILES) $(CONFLDTR) $(pdfld_tr)
+
+gpdl_tr=$(GLGENDIR)$(D)gpdl.tr
+igpdl_tr=$(GLGENDIR)$(D)igpdl.tr
+gpdlld_tr=$(GLGENDIR)$(D)gpdlld.tr
+$(gpdl_tr): $(GS_MAK) $(GLSRCDIR)$(D)version.mak $(GENCONF_XE) $(ECHOGS_XE) $(ld_tr) $(devs_tr) $(XPS_DEVS_ALL) \
+		$(devs_tr) $(PSI_DEVS_ALL) $(PCL_FEATURE_DEVS) $(XPS_FEATURE_DEVS) $(PDF_FEATURE_DEVS) \
+		$(GLGENDIR)$(D)libcore.dev $(MAKEDIRS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(igpdl_tr) - -include $(PSI_FEATURE_DEVS)
+	$(EXP)$(GENCONF_XE_BUILD) $(igpdl_tr) -h $(iconfxx_h) $(CONFILES) $(CONFLDTR) $(gpdlld_tr)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(iconfig_h) -R $(iconfxx_h)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(gpdl_tr) -R $(devs_tr)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(gpdl_tr) -R $(igpdl_tr)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(gpdl_tr) - -include $(PCL_FEATURE_DEVS) $(XPS_FEATURE_DEVS) $(PDF_FEATURE_DEVS)
+	$(EXP)$(GENCONF_XE_BUILD) $(gpdl_tr) -h $(GLGENDIR)$(D)unused2.h $(CONFILES) $(CONFLDTR) $(gpdlld_tr)
+
+$(gconfxx_h) : $(ld_tr)
+	$(NO_OP)
+
+$(gconfig_h) : $(gconfxx_h)
+	$(RM_) $(gconfig_h)
+	$(CP_) $(gconfxx_h) $(gconfig_h)
+
+# The line above is an empty command; don't delete.
+
+# save our set of makefile variables that are defined in every build (paths, etc.)
+$(gconfigd_h) : $(ECHOGS_XE) $(GS_MAK) $(GLSRCDIR)$(D)version.mak $(MAKEDIRS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(gconfigd_h) -x 23 define -s -u GS_LIB_DEFAULT -x 2022 $(GS_LIB_DEFAULT) -x 22
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(gconfigd_h) -x 23 define -s -u GS_DEV_DEFAULT -x 2022 $(GS_DEV_DEFAULT) -x 22
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(gconfigd_h) -x 23 define -s -u GS_CACHE_DIR -x 2022 $(GS_CACHE_DIR) -x 22
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(gconfigd_h) -x 23 define -s -u SEARCH_HERE_FIRST -s $(SEARCH_HERE_FIRST)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(gconfigd_h) -x 23 define -s -u GS_DOCDIR -x 2022 $(GS_DOCDIR) -x 22
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(gconfigd_h) -x 23 define -s -u GS_INIT -x 2022 $(GS_INIT) -x 22
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(gconfigd_h) -x 23 define -s -u GS_REVISION -s $(GS_REVISION)
+	$(EXP)$(ECHOGS_XE_BUILD) -a $(gconfigd_h) -x 23 define -s -u GS_REVISIONDATE -s $(GS_REVISIONDATE)
+
+obj_tr=$(GLGENDIR)$(D)obj.tr
+$(obj_tr) : $(gs_tr)
+	$(EXP)$(GENCONF_XE_BUILD) $(gs_tr) -h $(GLGENDIR)$(D)unused.h $(CONFILES) -o $(obj_tr)
+
+
+pclobj_tr=$(GLGENDIR)$(D)pclobj.tr
+$(pclobj_tr) : $(pcl_tr)
+	$(EXP)$(GENCONF_XE_BUILD) $(pcl_tr) -h $(GLGENDIR)$(D)unused.h $(CONFILES) -o $(pclobj_tr)
+
+
+xpsobj_tr=$(GLGENDIR)$(D)xpsobj.tr
+$(xpsobj_tr) : $(xps_tr)
+	$(EXP)$(GENCONF_XE_BUILD) $(xps_tr) -h $(GLGENDIR)$(D)unused.h $(CONFILES) -o $(xpsobj_tr)
+
+pdfobj_tr=$(GLGENDIR)$(D)pdfobj.tr
+$(pdfobj_tr) : $(pdf_tr)
+	$(EXP)$(GENCONF_XE_BUILD) $(pdf_tr) -h $(GLGENDIR)$(D)unused.h $(CONFILES) -o $(pdfobj_tr)
+
+
+pdlobj_tr=$(GLGENDIR)$(D)pdlobj.tr
+$(pdlobj_tr) : $(gpdl_tr)
+	$(EXP)$(GENCONF_XE_BUILD) $(gpdl_tr) -h $(GLGENDIR)$(D)unused.h $(CONFILES) -o $(pdlobj_tr)
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/ijs.mak
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/ijs.mak	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/ijs.mak	(revision 5)
@@ -0,0 +1,127 @@
+# Copyright (C) 2001-2021 Artifex Software, Inc.
+# All Rights Reserved.
+#
+# This software is provided AS-IS with no warranty, either express or
+# implied.
+#
+# This software is distributed under license and may not be copied,
+# modified or distributed except as expressly authorized under the terms
+# of the license contained in the file LICENSE in this distribution.
+#
+# Refer to licensing information at http://www.artifex.com or contact
+# Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
+# CA 94945, U.S.A., +1(415)492-9861, for further information.
+#
+#
+# makefile for ijs client library code.
+# Users of this makefile must define the following:
+#	IJSSRCDIR - the ijs source directory
+#	IJSEXECTYPE - which process control code to use
+#		in spawning the server. currently
+#		'unix' and 'win' are supported.
+#	BINDIR - where to put the executible examples
+#	SHARE_IJS - 0 to compile the library, 1 to share
+#	IJS_NAME - if SHARE_IJS = 1, the name of the shared library
+
+# This partial makefile compiles the IJS client library for use in
+# Ghostscript.
+
+IJSSRC=$(IJSSRCDIR)$(D)
+IJSGEN=$(IJSGENDIR)$(D)
+IJSOBJ=$(IJSOBJDIR)$(D)
+IJSO_=$(O_)$(IJSOBJ)
+
+# We need I_, _I_, and _I because the OpenVMS compiler uses different
+# syntax from other compilers.
+# IJSI_ and IJSF_ are defined in gs.mak (why?)
+# as are IJSGENDIR and IJSOBJDIR above.
+IJS_INCL=$(I_)$(IJSI_)$(_I)
+IJS_CCFLAGS=$(IJS_INCL) $(IJSF_)
+IJS_CC=$(CC) $(IJS_CCFLAGS) $(CCFLAGS)
+
+# Define the name of this makefile.
+IJS_MAK=$(GLSRC)ijs.mak $(TOP_MAKEFILES)
+
+ijs.clean : ijs.config-clean ijs.clean-not-config-clean
+
+### WRONG.  MUST DELETE OBJ AND GEN FILES SELECTIVELY.
+ijs.clean-not-config-clean :
+#	echo $(IJSSRC) $(IJSGEN) $(IJSOBJ) $(IJSO_)
+	$(EXP)$(ECHOGS_XE_BUILD) $(IJSSRC) $(IJSGEN) $(IJSOBJ) $(IJSO_)
+	$(RM_) $(IJSOBJ)*.$(OBJ)
+
+ijs.config-clean :
+	$(RMN_) $(IJSGEN)ijs*.dev
+
+IJSDEP=$(AK)
+
+ijslib_=$(IJSOBJ)ijs.$(OBJ) $(IJSOBJ)ijs_server.$(OBJ) \
+    $(IJSOBJ)ijs_client.$(OBJ) $(IJSOBJ)ijs_exec_$(IJSEXECTYPE).$(OBJ)
+
+$(IJSGEN)ijslib_0.dev : $(IJS_MAK) $(ECHOGS_XE) $(ijslib_) $(MAKEDIRS)
+	$(SETMOD) $(IJSGEN)ijslib_0 $(ijslib_)
+
+$(IJSGEN)ijslib_1.dev : $(IJS_MAK) $(ECHOGS_XE) $(MAKEDIRS)
+	$(SETMOD) $(IJSGEN)ijslib_1 -lib $(IJS_NAME)
+
+
+$(IJSGEN)ijslib.dev : $(IJS_MAK) $(IJSGEN)ijslib_$(SHARE_IJS).dev $(MAKEDIRS)
+	$(CP_) $(IJSGEN)ijslib_$(SHARE_IJS).dev $(IJSGEN)ijslib.dev
+
+
+ijs_h=$(IJSSRC)ijs.h
+
+ijs_client_h=$(IJSSRC)$(D)ijs_client.h
+ijs_server_h=$(IJSSRC)$(D)ijs_server.h
+
+$(IJSOBJ)ijs.$(OBJ) : $(IJSSRC)ijs.c $(IJSDEP) $(ijs_h) $(ECHOGS_XE) $(IJS_MAK) $(IJS_MAK) $(MAKEDIRS)
+#	echo $(IJS_CCFLAGS)
+	$(EXP)$(ECHOGS_XE_BUILD) $(IJS_CCFLAGS)
+	$(IJS_CC) $(IJSO_)ijs.$(OBJ) $(C_) $(IJSSRC)ijs.c
+
+$(IJSOBJ)ijs_client.$(OBJ) : $(IJSSRC)ijs_client.c \
+    $(IJSDEP) $(ijs_h) $(ijs_client_h) $(IJS_MAK) $(MAKEDIRS)
+	$(IJS_CC) $(IJSO_)ijs_client.$(OBJ) $(C_) $(IJSSRC)ijs_client.c
+
+$(IJSOBJ)ijs_server.$(OBJ) : $(IJSSRC)ijs_server.c \
+    $(IJSDEP) $(ijs_h) $(ijs_server_h) $(IJS_MAK) $(MAKEDIRS)
+	$(IJS_CC) $(IJSO_)ijs_server.$(OBJ) $(C_) $(IJSSRC)ijs_server.c
+
+$(IJSOBJ)ijs_exec_unix.$(OBJ) : $(IJSSRC)ijs_exec_unix.c \
+    $(IJSDEP) $(ijs_h) $(ijs_client_h) $(IJS_MAK) $(MAKEDIRS)
+	$(IJS_CC) $(IJSO_)ijs_exec_unix.$(OBJ) $(C_) $(IJSSRC)ijs_exec_unix.c
+
+$(IJSOBJ)ijs_exec_win.$(OBJ) : $(IJSSRC)ijs_exec_win.c \
+    $(IJSDEP) $(ijs_h) $(ijs_client_h) $(IJS_MAK) $(MAKEDIRS)
+# This can't be compiled with /Za because it needs windows.h.
+	$(CC_WX) $(IJS_CCFLAGS) $(IJSO_)ijs_exec_win.$(OBJ) $(C_) $(IJSSRC)ijs_exec_win.c
+
+
+#
+# rules for the example client/server implementation
+# FIXME: linking not portable (or per policy!)
+
+ijs_server_example_=$(BINDIR)$(D)ijs_server_example
+
+ijs_client_example_=$(BINDIR)$(D)ijs_client_example
+
+
+ijs_examples_=$(ijs_server_example_) $(ijs_client_example_)
+$(IJSGEN)ijs_examples.dev : $(IJS_MAK) $(ECHOGS_XE) \
+    $(ijs_examples_) $(ijslib_) $(IJS_MAK) $(MAKEDIRS)
+	$(SETMOD) $(IJSGEN)ijs_examples $(ijs_examples_)
+	$(ADDMOD) $(IJSGEN)ijs_examples $(ijslib_)
+
+$(IJSOBJ)ijs_client_example.$(OBJ) : $(IJSSRC)ijs_client_example.c \
+    $(IJSDEP) $(ijs_h) $(ijs_client_h) $(IJS_MAK) $(MAKEDIRS)
+	$(IJS_CC) $(IJSO_)ijs_client_example.$(OBJ) $(C_) $(IJSSRC)ijs_client_example.c
+
+$(BINDIR)$(D)ijs_client_example : $(IJSOBJ)ijs_client_example.$(OBJ) $(ijslib_) $(IJS_MAK) $(MAKEDIRS)
+	$(IJS_CC) -o bin/ijs_client_example $(IJSOBJ)ijs_client_example.$(OBJ) $(ijslib_)
+
+$(IJSOBJ)ijs_server_example.$(OBJ) : $(IJSSRC)ijs_server_example.c \
+    $(IJSDEP) $(ijs_h) $(ijs_server_h) $(IJS_MAK) $(MAKEDIRS)
+	$(IJS_CC) $(IJSO_)ijs_server_example.$(OBJ) $(C_) $(IJSSRC)ijs_server_example.c
+
+$(BINDIR)$(D)ijs_server_example : $(IJSOBJ)ijs_server_example.$(OBJ) $(ijslib_) $(IJS_MAK) $(MAKEDIRS)
+	$(IJS_CC) -o bin/ijs_server_example $(IJSOBJ)ijs_server_example.$(OBJ) $(ijslib_)
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/jpeg.mak
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/jpeg.mak	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/jpeg.mak	(revision 5)
@@ -0,0 +1,407 @@
+# Copyright (C) 2001-2021 Artifex Software, Inc.
+# All Rights Reserved.
+#
+# This software is provided AS-IS with no warranty, either express or
+# implied.
+#
+# This software is distributed under license and may not be copied,
+# modified or distributed except as expressly authorized under the terms
+# of the license contained in the file LICENSE in this distribution.
+#
+# Refer to licensing information at http://www.artifex.com or contact
+# Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
+# CA 94945, U.S.A., +1(415)492-9861, for further information.
+#
+# $Id: jpeg.mak 12063 2011-01-26 12:25:36Z chrisl $
+# makefile for Independent JPEG Group library code.
+# Users of this makefile must define the following:
+#	GSSRCDIR - the GS library source directory
+#	JSRCDIR - the source directory
+#	JGENDIR - the generated intermediate file directory
+#	JOBJDIR - the object directory
+#	SHARE_JPEG - 0 to compile the library, 1 to share
+#	JPEG_NAME - if SHARE_JPEG = 1, the name of the shared library
+#
+# Note that if SHARE_JPEG = 1, you must still have the library header files
+# available to compile Ghostscript: see doc/Make.htm for more information.
+
+# NOTE: This makefile is only known to work with the following versions
+# of the IJG library: 6, 6a, 6b.
+# As of March 27, 1998, version 6b is the current version.
+# The odds are good that other versions v6* will work.
+#
+# You can get the IJG library by Internet anonymous FTP from the following
+# places:
+#   Standard distribution (tar + gzip format, Unix end-of-line):
+#	ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v*.tar.gz
+#   MS-DOS archive (PKZIP a.k.a. zip format, MS-DOS end-of-line):
+#	ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/jpegsr*.zip
+# Please see Ghostscript's `Make.htm' file for instructions about how to
+# unpack these archives.
+#
+# When each version of Ghostscript is released, we copy the associated
+# version of the IJG library to
+#	ftp://ftp.cs.wisc.edu/ghost/3rdparty/
+# for more convenient access.
+#
+# The platform-specific makefiles expect the jpeg source to be in a
+# directory named 'jpeg' at the top level of the source tree, as per
+# the instructions in Make.htm. If you'd prefer to use the versioned
+# directory name of the native library source, you can override this
+# by setting JSRCSDIR in the platform-specific makefile.
+#
+# NOTE: For some obscure reason (probably a bug in djtarx), if you are
+# compiling on a DesqView/X system, you should use the zip version of the
+# IJG library, not the tar.gz version.
+
+JSRC=$(JSRCDIR)$(D)
+JGEN=$(JGENDIR)$(D)
+JOBJ=$(JOBJDIR)$(D)
+JO_=$(O_)$(JOBJ)
+
+# Define the name of this makefile.
+JPEG_MAK=$(GLSRC)jpeg.mak $(TOP_MAKEFILES)
+
+jpeg.clean : jpeg.config-clean jpeg.clean-not-config-clean
+
+### WRONG.  MUST DELETE OBJ AND GEN FILES SELECTIVELY.
+jpeg.clean-not-config-clean :
+	$(RM_) $(JOBJ)*.$(OBJ)
+	$(RM_) $(GLGEN)jcomapi.c
+	$(RM_) $(GLGEN)jutils.c
+	$(RM_) $(GLGEN)jmemmgr.c
+	$(RM_) $(GLGEN)jerror.c
+	$(RM_) $(GLGEN)jaricom.c
+	$(RM_) $(GLGEN)jcapimin.c
+	$(RM_) $(GLGEN)jcapistd.c
+	$(RM_) $(GLGEN)jcinit.c
+	$(RM_) $(GLGEN)jccoefct.c
+	$(RM_) $(GLGEN)jccolor.c
+	$(RM_) $(GLGEN)jcdctmgr.c
+	$(RM_) $(GLGEN)jchuff.c
+	$(RM_) $(GLGEN)jcmainct.c
+	$(RM_) $(GLGEN)jcmarker.c
+	$(RM_) $(GLGEN)jcmaster.c
+	$(RM_) $(GLGEN)jcparam.c
+	$(RM_) $(GLGEN)jcprepct.c
+	$(RM_) $(GLGEN)jcsample.c
+	$(RM_) $(GLGEN)jfdctint.c
+	$(RM_) $(GLGEN)jcarith.c
+	$(RM_) $(GLGEN)jdapimin.c
+	$(RM_) $(GLGEN)jdapistd.c
+	$(RM_) $(GLGEN)jdcoefct.c
+	$(RM_) $(GLGEN)jdcolor.c
+	$(RM_) $(GLGEN)jddctmgr.c
+	$(RM_) $(GLGEN)jdhuff.c
+	$(RM_) $(GLGEN)jdinput.c
+	$(RM_) $(GLGEN)jdmainct.c
+	$(RM_) $(GLGEN)jdmarker.c
+	$(RM_) $(GLGEN)jdmaster.c
+	$(RM_) $(GLGEN)jdpostct.c
+	$(RM_) $(GLGEN)jdsample.c
+	$(RM_) $(GLGEN)jidctint.c
+	$(RM_) $(GLGEN)jdarith.c
+
+jpeg.config-clean :
+	$(RMN_) $(JGEN)jpeg*.dev
+
+# JI_ and JF_ are defined in gs.mak.
+# See below for why we need to include GLGENDIR here.
+JCC=$(CC) $(I_)$(GLGENDIR) $(II)$(JI_)$(_I) $(JF_) $(CCFLAGS)
+
+# We need our own version of jconfig.h, and our own "wrapper" for
+# jmorecfg.h.
+# We also need to change D_MAX_BLOCKS_IN_MCU for Adobe compatibility;
+# we do this in jmorecfg.h.
+
+# Because this file is included after lib.mak, we can't use _h macros
+# to express indirect dependencies; instead, we build the dependencies
+# into the rules for copying the files.
+# Note: jerror__h and jpeglib__h are defined in lib.mak.
+jconfig__h=$(GLGEN)jconfig_.h $(GLGEN)arch.h
+#jerror__h=$(GLSRC)jerror_.h
+jmorecf__h=$(GLGEN)jmorecf_.h
+#jpeglib__h=$(GLGEN)jpeglib_.h
+
+# We use our own jconfig.h and jmorecfg.h iff we aren't sharing the library.
+# The library itself may need copies of them.
+jconfig_h=$(GLGEN)jconfig.h
+jmorecfg_h=$(GLGEN)jmorecfg.h
+jmemcust_h=$(GLSRC)jmemcust.h $(jconfig_h)
+
+$(GLGEN)jconfig_.h : $(GLGEN)jconfig$(SHARE_JPEG).h $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)jconfig$(SHARE_JPEG).h $(GLGEN)jconfig_.h
+
+$(GLGEN)jconfig0.h : $(ECHOGS_XE) $(GLSRC)gsjconf.h $(stdpre_h) $(JPEG_MAK)\
+ $(MAKEDIRS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(GLGEN)jconfig0.h -+R $(GLSRC)stdpre.h -+R $(GLSRC)gsjconf.h
+	$(RM_) $(GLGEN)jconfig1.h
+
+$(GLGEN)jconfig1.h : $(ECHOGS_XE) $(JPEG_MAK) $(JPEG_MAK) $(MAKEDIRS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(GLGEN)jconfig1.h -x 23 include -x 203c jconfig.h -x 3e
+	$(RMN_) $(GLGEN)jconfig0.h $(GLGEN)jconfig.h
+
+$(GLGEN)jconfig.h : $(GLGEN)jconfig0.h $(arch_h) $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)jconfig0.h $(GLGEN)jconfig.h
+
+$(GLGEN)jmorecf_.h : $(GLGEN)jmorecf$(SHARE_JPEG).h $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)jmorecf$(SHARE_JPEG).h $(GLGEN)jmorecf_.h
+
+$(GLGEN)jmorecf0.h : $(GLSRC)gsjmorec.h $(GLGEN)jmcorig.h $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(GLSRC)gsjmorec.h $(GLGEN)jmorecf0.h
+	$(RM_) $(GLGEN)jmorecf1.h
+
+$(GLGEN)jmorecf1.h : $(ECHOGS_XE) $(JPEG_MAK) $(MAKEDIRS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(GLGEN)jmorecf1.h -x 23 include -x 203c jmorecfg.h -x 3e
+	$(RMN_) $(GLGEN)jmorecf0.h $(GLGEN)jmorecfg.h
+
+$(GLGEN)jmorecfg.h : $(GLGEN)jmorecf0.h $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)jmorecf0.h $(GLGEN)jmorecfg.h
+
+$(GLGEN)jmcorig.h : $(JSRC)jmorecfg.h $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(JSRC)jmorecfg.h $(GLGEN)jmcorig.h
+
+# Contrary to what some portability bigots assert as fact, C compilers are
+# not consistent about where they start searching for #included files:
+# some always start by looking in the same directory as the .c file being
+# compiled, before using the search path specified with -I on the command
+# line, while others do not do this.  For this reason, we must explicitly
+# copy and then delete all the .c files, because they need to obtain our
+# modified version of the header files.  We must similarly copy up all
+# all .h files that include either of these files, directly or indirectly.
+# (The only such .h files currently are jinclude.h and jpeglib.h.)
+# And finally, we must include GLGENDIR in the -I list (see JCC= above).
+
+JHCOPY=$(GLGEN)jinclude.h $(GLGEN)jpeglib.h
+
+$(GLGEN)jinclude.h : $(JSRC)jinclude.h $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(JSRC)jinclude.h $(GLGEN)jinclude.h
+
+# jpeglib_.h doesn't really depend on jconfig.h or jmcorig.h,
+# but we choose to put the dependencies here rather than in the
+# definition of jpeglib__h.
+$(GLGEN)jpeglib_.h : $(GLGEN)jpeglib$(SHARE_JPEG).h $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)jpeglib$(SHARE_JPEG).h $(GLGEN)jpeglib_.h
+
+$(GLGEN)jpeglib0.h : $(JSRC)jpeglib.h $(jconfig_h) $(jmorecfg_h) $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(JSRC)jpeglib.h $(GLGEN)jpeglib0.h
+
+$(GLGEN)jpeglib1.h : $(ECHOGS_XE) $(JPEG_MAK) $(MAKEDIRS)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(GLGEN)jpeglib1.h -x 23 include -x 203c jpeglib.h -x 3e
+
+# We also need jpeglib.h for #includes in the library itself.
+$(GLGEN)jpeglib.h : $(JSRC)jpeglib.h $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(JSRC)jpeglib.h $(GLGEN)jpeglib.h
+
+# In order to avoid having to keep the dependency lists for the IJG code
+# accurate, we simply make all of them depend on the only files that
+# we are ever going to change, and on all the .h files that must be copied up.
+# This is too conservative, but only hurts us if we are changing our own
+# j*.h files, which happens only rarely during development.
+
+JDEP=$(AK) $(jconfig_h) $(jmorecfg_h) $(JHCOPY) $(JPEG_MAK) $(MAKEDIRS)
+
+
+# Code common to compression and decompression.
+jpegc0_=$(JOBJ)jcomapi.$(OBJ) $(JOBJ)jutils.$(OBJ) $(JOBJ)jmemmgr.$(OBJ) $(JOBJ)jerror.$(OBJ) $(JOBJ)jaricom.$(OBJ) \
+        $(GLOBJ)jmemcust.$(OBJ)
+
+# custom memory handler
+$(GLOBJ)jmemcust.$(OBJ) : $(GLSRC)jmemcust.c $(JDEP)
+	$(JCC) $(JO_)jmemcust.$(OBJ) $(C_) $(GLSRC)jmemcust.c
+
+
+$(JGEN)jpegc0.dev : $(JPEG_MAK) $(ECHOGS_XE) $(jpegc0_)
+	$(SETMOD) $(JGEN)jpegc0 $(jpegc0_)
+
+$(JOBJ)jcomapi.$(OBJ) : $(JSRC)jcomapi.c $(JDEP)
+	$(CP_) $(JSRC)jcomapi.c $(GLGEN)jcomapi.c
+	$(JCC) $(JO_)jcomapi.$(OBJ) $(C_) $(GLGEN)jcomapi.c
+
+$(JOBJ)jutils.$(OBJ) : $(JSRC)jutils.c $(JDEP)
+	$(CP_) $(JSRC)jutils.c $(GLGEN)jutils.c
+	$(JCC) $(JO_)jutils.$(OBJ) $(C_) $(GLGEN)jutils.c
+
+$(JOBJ)jmemmgr.$(OBJ) : $(JSRC)jmemmgr.c $(JDEP)
+	$(CP_) $(JSRC)jmemmgr.c $(GLGEN)jmemmgr.c
+	$(JCC) $(JO_)jmemmgr.$(OBJ) $(C_) $(GLGEN)jmemmgr.c
+
+$(JOBJ)jerror.$(OBJ) : $(JSRC)jerror.c $(JDEP)
+	$(CP_) $(JSRC)jerror.c $(GLGEN)jerror.c
+	$(JCC) $(JO_)jerror.$(OBJ) $(C_) $(GLGEN)jerror.c
+
+$(JOBJ)jaricom.$(OBJ) : $(JSRC)jaricom.c $(JDEP)
+	$(CP_) $(JSRC)jaricom.c $(GLGEN)jaricom.c
+	$(JCC) $(JO_)jaricom.$(OBJ) $(C_) $(GLGEN)jaricom.c
+
+# Encoding (compression) code.
+
+$(JGEN)jpege.dev : $(JPEG_MAK) $(JGEN)jpege_$(SHARE_JPEG).dev $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(JGEN)jpege_$(SHARE_JPEG).dev $(JGEN)jpege.dev
+
+$(JGEN)jpege_1.dev : $(JPEG_MAK) $(ECHOGS_XE) $(JPEG_MAK) $(MAKEDIRS)
+	$(SETMOD) $(JGEN)jpege_1 -lib $(JPEG_NAME)
+
+$(JGEN)jpege_0.dev : $(JPEG_MAK) $(JGEN)jpege6.dev $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(JGEN)jpege6.dev $(JGEN)jpege_0.dev
+
+jpege6=$(JOBJ)jcapimin.$(OBJ) $(JOBJ)jcapistd.$(OBJ) $(JOBJ)jcinit.$(OBJ)
+
+jpege_1=$(JOBJ)jccoefct.$(OBJ) $(JOBJ)jccolor.$(OBJ) $(JOBJ)jcdctmgr.$(OBJ) $(JOBJ)jcarith.$(OBJ)
+jpege_2=$(JOBJ)jchuff.$(OBJ) $(JOBJ)jcmainct.$(OBJ) $(JOBJ)jcmarker.$(OBJ) $(JOBJ)jcmaster.$(OBJ)
+jpege_3=$(JOBJ)jcparam.$(OBJ) $(JOBJ)jcprepct.$(OBJ) $(JOBJ)jcsample.$(OBJ) $(JOBJ)jfdctint.$(OBJ)
+
+$(JGEN)jpege6.dev : $(JPEG_MAK) $(ECHOGS_XE) $(JGEN)jpegc0.dev $(jpege6) $(jpege_1) $(jpege_2) $(jpege_3) \
+  $(JPEG_MAK) $(MAKEDIRS)
+	$(SETMOD) $(JGEN)jpege6 $(jpege6)
+	$(ADDMOD) $(JGEN)jpege6 -include $(JGEN)jpegc0.dev
+	$(ADDMOD) $(JGEN)jpege6 -obj $(jpege_1)
+	$(ADDMOD) $(JGEN)jpege6 -obj $(jpege_2)
+	$(ADDMOD) $(JGEN)jpege6 -obj $(jpege_3)
+
+$(JOBJ)jcapimin.$(OBJ) : $(JSRC)jcapimin.c $(JDEP)
+	$(CP_) $(JSRC)jcapimin.c $(GLGEN)jcapimin.c
+	$(JCC) $(JO_)jcapimin.$(OBJ) $(C_) $(GLGEN)jcapimin.c
+
+$(JOBJ)jcapistd.$(OBJ) : $(JSRC)jcapistd.c $(JDEP)
+	$(CP_) $(JSRC)jcapistd.c $(GLGEN)jcapistd.c
+	$(JCC) $(JO_)jcapistd.$(OBJ) $(C_) $(GLGEN)jcapistd.c
+
+$(JOBJ)jcinit.$(OBJ) : $(JSRC)jcinit.c $(JDEP)
+	$(CP_) $(JSRC)jcinit.c $(GLGEN)jcinit.c
+	$(JCC) $(JO_)jcinit.$(OBJ) $(C_) $(GLGEN)jcinit.c
+
+$(JOBJ)jccoefct.$(OBJ) : $(JSRC)jccoefct.c $(JDEP)
+	$(CP_) $(JSRC)jccoefct.c $(GLGEN)jccoefct.c
+	$(JCC) $(JO_)jccoefct.$(OBJ) $(C_) $(GLGEN)jccoefct.c
+
+$(JOBJ)jccolor.$(OBJ) : $(JSRC)jccolor.c $(JDEP)
+	$(CP_) $(JSRC)jccolor.c $(GLGEN)jccolor.c
+	$(JCC) $(JO_)jccolor.$(OBJ) $(C_) $(GLGEN)jccolor.c
+
+$(JOBJ)jcdctmgr.$(OBJ) : $(JSRC)jcdctmgr.c $(JDEP)
+	$(CP_) $(JSRC)jcdctmgr.c $(GLGEN)jcdctmgr.c
+	$(JCC) $(JO_)jcdctmgr.$(OBJ) $(C_) $(GLGEN)jcdctmgr.c
+
+$(JOBJ)jchuff.$(OBJ) : $(JSRC)jchuff.c $(JDEP)
+	$(CP_) $(JSRC)jchuff.c $(GLGEN)jchuff.c
+	$(JCC) $(JO_)jchuff.$(OBJ) $(C_) $(GLGEN)jchuff.c
+
+$(JOBJ)jcmainct.$(OBJ) : $(JSRC)jcmainct.c $(JDEP)
+	$(CP_) $(JSRC)jcmainct.c $(GLGEN)jcmainct.c
+	$(JCC) $(JO_)jcmainct.$(OBJ) $(C_) $(GLGEN)jcmainct.c
+
+$(JOBJ)jcmarker.$(OBJ) : $(JSRC)jcmarker.c $(JDEP)
+	$(CP_) $(JSRC)jcmarker.c $(GLGEN)jcmarker.c
+	$(JCC) $(JO_)jcmarker.$(OBJ) $(C_) $(GLGEN)jcmarker.c
+
+$(JOBJ)jcmaster.$(OBJ) : $(JSRC)jcmaster.c $(JDEP)
+	$(CP_) $(JSRC)jcmaster.c $(GLGEN)jcmaster.c
+	$(JCC) $(JO_)jcmaster.$(OBJ) $(C_) $(GLGEN)jcmaster.c
+
+$(JOBJ)jcparam.$(OBJ) : $(JSRC)jcparam.c $(JDEP)
+	$(CP_) $(JSRC)jcparam.c $(GLGEN)jcparam.c
+	$(JCC) $(JO_)jcparam.$(OBJ) $(C_) $(GLGEN)jcparam.c
+
+$(JOBJ)jcprepct.$(OBJ) : $(JSRC)jcprepct.c $(JDEP)
+	$(CP_) $(JSRC)jcprepct.c $(GLGEN)jcprepct.c
+	$(JCC) $(JO_)jcprepct.$(OBJ) $(C_) $(GLGEN)jcprepct.c
+
+$(JOBJ)jcsample.$(OBJ) : $(JSRC)jcsample.c $(JDEP)
+	$(CP_) $(JSRC)jcsample.c $(GLGEN)jcsample.c
+	$(JCC) $(JO_)jcsample.$(OBJ) $(C_) $(GLGEN)jcsample.c
+
+$(JOBJ)jfdctint.$(OBJ) : $(JSRC)jfdctint.c $(JDEP)
+	$(CP_) $(JSRC)jfdctint.c $(GLGEN)jfdctint.c
+	$(JCC) $(JO_)jfdctint.$(OBJ) $(C_) $(GLGEN)jfdctint.c
+
+$(JOBJ)jcarith.$(OBJ) : $(JSRC)jcarith.c $(JDEP)
+	$(CP_) $(JSRC)jcarith.c $(GLGEN)jcarith.c
+	$(JCC) $(JO_)jcarith.$(OBJ) $(C_) $(GLGEN)jcarith.c
+
+# Decompression code
+
+$(JGEN)jpegd.dev : $(JPEG_MAK) $(JGEN)jpegd_$(SHARE_JPEG).dev \
+  $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(JGEN)jpegd_$(SHARE_JPEG).dev $(JGEN)jpegd.dev
+
+$(JGEN)jpegd_1.dev : $(JPEG_MAK) $(ECHOGS_XE) $(JPEG_MAK) $(MAKEDIRS)
+	$(SETMOD) $(JGEN)jpegd_1 -lib $(JPEG_NAME)
+
+$(JGEN)jpegd_0.dev : $(JPEG_MAK) $(JGEN)jpegd6.dev $(JPEG_MAK) $(MAKEDIRS)
+	$(CP_) $(JGEN)jpegd6.dev $(JGEN)jpegd_0.dev
+
+jpegd6=$(JOBJ)jdapimin.$(OBJ) $(JOBJ)jdapistd.$(OBJ) $(JOBJ)jdinput.$(OBJ) $(JOBJ)jdhuff.$(OBJ)
+
+jpegd_1=$(JOBJ)jdcoefct.$(OBJ) $(JOBJ)jdcolor.$(OBJ)
+jpegd_2=$(JOBJ)jddctmgr.$(OBJ) $(JOBJ)jdhuff.$(OBJ) $(JOBJ)jdmainct.$(OBJ) $(JOBJ)jdmarker.$(OBJ)
+jpegd_3=$(JOBJ)jdmaster.$(OBJ) $(JOBJ)jdpostct.$(OBJ) $(JOBJ)jdsample.$(OBJ) $(JOBJ)jidctint.$(OBJ) $(JOBJ)jdarith.$(OBJ)
+
+$(JGEN)jpegd6.dev : $(JPEG_MAK) $(ECHOGS_XE) $(JGEN)jpegc0.dev $(jpegd6) $(jpegd_1) $(jpegd_2) $(jpegd_3) \
+ $(JPEG_MAK) $(MAKEDIRS)
+	$(SETMOD) $(JGEN)jpegd6 $(jpegd6)
+	$(ADDMOD) $(JGEN)jpegd6 -include $(JGEN)jpegc0.dev
+	$(ADDMOD) $(JGEN)jpegd6 -obj $(jpegd_1)
+	$(ADDMOD) $(JGEN)jpegd6 -obj $(jpegd_2)
+	$(ADDMOD) $(JGEN)jpegd6 -obj $(jpegd_3)
+
+$(JOBJ)jdapimin.$(OBJ) : $(JSRC)jdapimin.c $(JDEP)
+	$(CP_) $(JSRC)jdapimin.c $(GLGEN)jdapimin.c
+	$(JCC) $(JO_)jdapimin.$(OBJ) $(C_) $(GLGEN)jdapimin.c
+
+$(JOBJ)jdapistd.$(OBJ) : $(JSRC)jdapistd.c $(JDEP)
+	$(CP_) $(JSRC)jdapistd.c $(GLGEN)jdapistd.c
+	$(JCC) $(JO_)jdapistd.$(OBJ) $(C_) $(GLGEN)jdapistd.c
+
+$(JOBJ)jdcoefct.$(OBJ) : $(JSRC)jdcoefct.c $(JDEP)
+	$(CP_) $(JSRC)jdcoefct.c $(GLGEN)jdcoefct.c
+	$(JCC) $(JO_)jdcoefct.$(OBJ) $(C_) $(GLGEN)jdcoefct.c
+
+$(JOBJ)jdcolor.$(OBJ) : $(JSRC)jdcolor.c $(JDEP)
+	$(CP_) $(JSRC)jdcolor.c $(GLGEN)jdcolor.c
+	$(JCC) $(JO_)jdcolor.$(OBJ) $(C_) $(GLGEN)jdcolor.c
+
+$(JOBJ)jddctmgr.$(OBJ) : $(JSRC)jddctmgr.c $(JDEP)
+	$(CP_) $(JSRC)jddctmgr.c $(GLGEN)jddctmgr.c
+	$(JCC) $(JO_)jddctmgr.$(OBJ) $(C_) $(GLGEN)jddctmgr.c
+
+$(JOBJ)jdhuff.$(OBJ) : $(JSRC)jdhuff.c $(JDEP)
+	$(CP_) $(JSRC)jdhuff.c $(GLGEN)jdhuff.c
+	$(JCC) $(JO_)jdhuff.$(OBJ) $(C_) $(GLGEN)jdhuff.c
+
+$(JOBJ)jdinput.$(OBJ) : $(JSRC)jdinput.c $(JDEP)
+	$(CP_) $(JSRC)jdinput.c $(GLGEN)jdinput.c
+	$(JCC) $(JO_)jdinput.$(OBJ) $(C_) $(GLGEN)jdinput.c
+
+$(JOBJ)jdmainct.$(OBJ) : $(JSRC)jdmainct.c $(JDEP)
+	$(CP_) $(JSRC)jdmainct.c $(GLGEN)jdmainct.c
+	$(JCC) $(JO_)jdmainct.$(OBJ) $(C_) $(GLGEN)jdmainct.c
+
+$(JOBJ)jdmarker.$(OBJ) : $(JSRC)jdmarker.c $(JDEP)
+	$(CP_) $(JSRC)jdmarker.c $(GLGEN)jdmarker.c
+	$(JCC) $(JO_)jdmarker.$(OBJ) $(C_) $(GLGEN)jdmarker.c
+
+$(JOBJ)jdmaster.$(OBJ) : $(JSRC)jdmaster.c $(JDEP)
+	$(CP_) $(JSRC)jdmaster.c $(GLGEN)jdmaster.c
+	$(JCC) $(JO_)jdmaster.$(OBJ) $(C_) $(GLGEN)jdmaster.c
+
+#$(JOBJ)jdhuff.$(OBJ) : $(JSRC)jdhuff.c $(JDEP)
+#	$(CP_) $(JSRC)jdhuff.c $(GLGEN)jdhuff.c
+#	$(JCC) $(JO_)jdhuff.$(OBJ) $(C_) $(GLGEN)jdhuff.c
+#	$(RM_) $(GLGEN)jdhuff.c
+
+$(JOBJ)jdpostct.$(OBJ) : $(JSRC)jdpostct.c $(JDEP)
+	$(CP_) $(JSRC)jdpostct.c $(GLGEN)jdpostct.c
+	$(JCC) $(JO_)jdpostct.$(OBJ) $(C_) $(GLGEN)jdpostct.c
+
+$(JOBJ)jdsample.$(OBJ) : $(JSRC)jdsample.c $(JDEP)
+	$(CP_) $(JSRC)jdsample.c $(GLGEN)jdsample.c
+	$(JCC) $(JO_)jdsample.$(OBJ) $(C_) $(GLGEN)jdsample.c
+
+$(JOBJ)jidctint.$(OBJ) : $(JSRC)jidctint.c $(JDEP)
+	$(CP_) $(JSRC)jidctint.c $(GLGEN)jidctint.c
+	$(JCC) $(JO_)jidctint.$(OBJ) $(C_) $(GLGEN)jidctint.c
+
+$(JOBJ)jdarith.$(OBJ) : $(JSRC)jdarith.c $(JDEP)
+	$(CP_) $(JSRC)jdarith.c $(GLGEN)jdarith.c
+	$(JCC) $(JO_)jdarith.$(OBJ) $(C_) $(GLGEN)jdarith.c
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/lib.mak
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/lib.mak	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/lib.mak	(revision 5)
@@ -0,0 +1,12675 @@
+# Copyright (C) 2001-2022 Artifex Software, Inc.
+# All Rights Reserved.
+#
+# This software is provided AS-IS with no warranty, either express or
+# implied.
+#
+# This software is distributed under license and may not be copied,
+# modified or distributed except as expressly authorized under the terms
+# of the license contained in the file LICENSE in this distribution.
+#
+# Refer to licensing information at http://www.artifex.com or contact
+# Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
+# CA 94945, U.S.A., +1(415)492-9861, for further information.
+#
+# (Platform-independent) makefile for Ghostscript graphics library
+# and other support code.
+# Users of this makefile must define the following:
+#       GLSRCDIR - the source directory
+#       GLGENDIR - the directory for source files generated during building
+#       GLOBJDIR - the object code directory
+#       DEVSRCDIR - source directory for the device drivers
+#       AUXDIR - the directory to build the "aux" (host executable) files
+#       JSRCDIR - JPEG library source directory
+#       JGENDIR - JPEG library object code directory
+#       ZSRCDIR - zlib source directory
+#       ZGENDIR - zlib object code directory
+#       LCMSGENDIR - Little CMS object code directory
+# One of:
+#       LCMS2MTSRCDIR - Artifex (Thread Safe) Little CMS 2 source directory
+#       LCMS2SRCDIR - Little CMS verion 2 source directory
+#
+# For dependencies:
+#       MAKEDIRS
+
+GLSRC=$(GLSRCDIR)$(D)
+GLGEN=$(GLGENDIR)$(D)
+GLOBJ=$(GLOBJDIR)$(D)
+AUX=$(AUXDIR)$(D)
+GLO_=$(O_)$(GLOBJ)
+AUXO_=$(O_)$(AUX)
+GLI_=$(GLGENDIR) $(II)$(GLSRCDIR) $(II)$(DEVSRCDIR)
+GLF_=
+GLINCLUDES=$(I_)$(GLI_)$(_I)
+GLCCFLAGS=$(GLINCLUDES) $(GLF_) $(D_)WHICH_CMS="$(WHICH_CMS)"$(_D)
+GLCC=$(CC_) $(GLCCFLAGS)
+GLCCAUX=$(CCAUX_) $(GLCCFLAGS)
+GLLDFJB2CC=$(CC_) $(I_)$(LDF_JB2I_) $(II)$(GLI_)$(_I) $(JB2CF_) $(GLF_)
+GLLWFJPXCC=$(CC_) $(I_)$(LWF_JPXI_) $(II)$(GLI_)$(_I) $(JPXCF_) $(GLF_)
+GLCCSHARED=$(CC_SHARED) $(GLCCFLAGS)
+
+GLJCC=$(CC) $(I_)$(GLI_) $(II)$(JI_)$(_I) $(JCF_) $(GLF_) $(CCFLAGS)
+GLZCC=$(CC) $(I_)$(GLI_) $(II)$(ZI_)$(_I) $(ZCF_) $(GLF_) $(CCFLAGS)
+GLJBIG2CC=$(CC) $(I_)$(GLI_) $(II)$(JB2I_)$(_I) $(JB2CF_) $(GLF_) $(CCFLAGS)
+GLJASCC=$(CC) $(I_)$(JPXI_) $(II)$(GLI_)$(_I) $(JPXCF_) $(GLF_) $(CCFLAGS)
+GLJPXOPJCC=$(CC) $(I_)$(JPX_OPENJPEG_I_)$(D).. $(I_)$(JPX_OPENJPEG_I_) $(II)$(GLI_)$(_I) $(JPXCF_) $(GLF_) $(CCFLAGS)
+GLFTCC=$(CC) $(FT_CFLAGS) $(D_)FT_CONFIG_OPTIONS_H=\"$(FTCONFH)\"$(_D) $(CCFLAGS) $(GLCCFLAGS)
+
+# We can't use $(CC_) for GLLCMS2MTCC because that includes /Za on
+# msvc builds, and lcms configures itself to depend on msvc extensions
+# (inline asm, including windows.h) when compiled under msvc.
+GLLCMS2MTCC=$(CC) $(LCMS2MT_CFLAGS) $(CFLAGS) $(I_)$(GLI_) $(II)$(LCMS2MTSRCDIR)$(D)include$(_I) $(GLF_)
+lcms2mt_h=$(LCMS2MTSRCDIR)$(D)include$(D)lcms2mt.h
+lcms2mt_plugin_h=$(LCMS2MTSRCDIR)$(D)include$(D)lcms2mt_plugin.h
+icc34_h=$(GLSRC)icc34.h
+# We can't use $(CC_) for GLLCMS2CC because that includes /Za on
+# msvc builds, and lcms configures itself to depend on msvc extensions
+# (inline asm, including windows.h) when compiled under msvc.
+GLLCMS2CC=$(CC) $(LCMS2_CFLAGS) $(CFLAGS) $(I_)$(GLI_) $(II)$(LCMS2SRCDIR)$(D)include$(_I) $(GLF_)
+lcms2_h=$(LCMS2SRCDIR)$(D)include$(D)lcms2.h
+lcms2_plugin_h=$(LCMS2SRCDIR)$(D)include$(D)lcms2_plugin.h
+
+gdevdcrd_h=$(GLSRC)gdevdcrd.h
+gdevpccm_h=$(GLSRC)gdevpccm.h
+
+gs_mro_e_h=$(GLSRC)gs_mro_e.h
+gs_mgl_e_h=$(GLSRC)gs_mgl_e.h
+
+# All top-level makefiles define GLD.
+#GLD=$(GLGEN)
+# Define the name of this makefile.
+LIB_MAK=$(GLSRC)lib.mak $(TOP_MAKEFILES)
+
+# Define the inter-dependencies of the .h files.
+# Since not all versions of `make' defer expansion of macros,
+# we must list these in bottom-to-top order.
+
+# Generic files
+
+arch_h=$(GLGEN)arch.h
+stdpre_h=$(GLSRC)stdpre.h
+stdint__h=$(GLSRC)stdint_.h
+
+$(GLGEN)arch.h : $(GENARCH_XE)
+	$(EXP)$(GENARCH_XE_BUILD) $(GLGEN)arch.h $(TARGET_ARCH_FILE)
+
+# Platform interfaces
+
+# gp.h requires gstypes.h and srdline.h.
+gstypes_h=$(GLSRC)gstypes.h
+srdline_h=$(GLSRC)srdline.h
+gpgetenv_h=$(GLSRC)gpgetenv.h
+gpmisc_h=$(GLSRC)gpmisc.h
+gp_h=$(GLSRC)gp.h
+globals_h=$(GLSRC)globals.h
+gpcheck_h=$(GLSRC)gpcheck.h
+gpsync_h=$(GLSRC)gpsync.h
+
+# Configuration definitions
+
+gconf_h=$(GLSRC)gconf.h
+# gconfig*.h are generated dynamically.
+gconfig__h=$(GLGEN)gconfig_.h
+gscdefs_h=$(GLSRC)gscdefs.h
+
+std_h=$(GLSRC)std.h
+
+# C library interfaces
+
+# Because of variations in the "standard" header files between systems, and
+# because we must include std.h before any file that includes sys/types.h,
+# we define local include files named *_.h to substitute for <*.h>.
+
+vmsmath_h=$(GLSRC)vmsmath.h
+
+# declare here for use by string__h
+gssprintf_h=$(GLSRC)gssprintf.h
+gsstrtok_h=$(GLSRC)gsstrtok.h
+gsstrl_h=$(GLSRC)gsstrl.h
+
+dos__h=$(GLSRC)dos_.h
+ctype__h=$(GLSRC)ctype_.h
+dirent__h=$(GLSRC)dirent_.h
+errno__h=$(GLSRC)errno_.h
+fcntl__h=$(GLSRC)fcntl_.h
+locale__h=$(GLSRC)locale_.h $(MAKEFILE)
+memento_h=$(GLSRC)memento.h
+bobbin_h=$(GLSRC)bobbin.h
+malloc__h=$(GLSRC)malloc_.h
+math__h=$(GLSRC)math_.h
+memory__h=$(GLSRC)memory_.h
+setjmp__h=$(GLSRC)setjmp_.h
+stat__h=$(GLSRC)stat_.h
+stdio__h=$(GLSRC)stdio_.h
+string__h=$(GLSRC)string_.h
+time__h=$(GLSRC)time_.h $(std_h) $(gconfig__h)
+unistd__h=$(GLSRC)unistd_.h
+windows__h=$(GLSRC)windows_.h
+assert__h=$(GLSRC)assert_.h
+# Out of order
+pipe__h=$(GLSRC)pipe_.h
+
+# Third-party library interfaces
+
+jerror_h=$(JSRCDIR)$(D)jerror.h
+jerror__h=$(GLSRC)jerror_.h $(MAKEFILE)
+jpeglib__h=$(GLGEN)jpeglib_.h
+
+cal_h=$(CALSRCDIR)$(D)cal.h
+
+# The following would logically be better in freetype.mak
+# but we need it for fapi_ft.c below
+FTCONFH=gsftopts.h
+GENFTCONFH=$(FTGENDIR)$(D)$(FTCONFH)
+BASEFTCONFH=$(GLSRC)$(FTCONFH)
+
+$(GENFTCONFH) : $(BASEFTCONFH) $(MAKEDIRS)
+	$(CP_) $(BASEFTCONFH) $(GENFTCONFH)
+
+# Miscellaneous
+
+gsio_h=$(GLSRC)gsio.h
+gxstdio_h=$(GLSRC)gxstdio.h
+gs_dll_call_h=$(GLSRC)gs_dll_call.h
+gslibctx_h=$(GLSRC)gslibctx.h
+gdbflags_h=$(GLSRC)gdbflags.h
+gdebug_h=$(GLSRC)gdebug.h
+gsalloc_h=$(GLSRC)gsalloc.h
+gsargs_h=$(GLSRC)gsargs.h
+gserrors_h=$(GLSRC)gserrors.h
+gsexit_h=$(GLSRC)gsexit.h
+gsgc_h=$(GLSRC)gsgc.h
+gsgstate_h=$(GLSRC)gsgstate.h
+gsmalloc_h=$(GLSRC)gsmalloc.h
+gsmchunk_h=$(GLSRC)gsmchunk.h
+valgrind_h=$(GLSRC)valgrind.h
+gsmdebug_h=$(GLSRC)gsmdebug.h
+gsmemraw_h=$(GLSRC)gsmemraw.h
+gsmemory_h=$(GLSRC)gsmemory.h
+gsmemret_h=$(GLSRC)gsmemret.h
+gsnogc_h=$(GLSRC)gsnogc.h
+gsrefct_h=$(GLSRC)gsrefct.h
+gsserial_h=$(GLSRC)gsserial.h
+gsstype_h=$(GLSRC)gsstype.h
+gx_h=$(GLSRC)gx.h
+gxsync_h=$(GLSRC)gxsync.h
+gxclthrd_h=$(GLSRC)gxclthrd.h
+gxdevsop_h=$(GLSRC)gxdevsop.h
+gdevflp_h=$(GLSRC)gdevflp.h
+pagelist_h=$(GLSRC)pagelist.h
+gdevkrnlsclass_h=$(GLSRC)gdevkrnlsclass.h
+gdevsclass_h=$(GLSRC)gdevsclass.h
+
+# Out of order
+gsnotify_h=$(GLSRC)gsnotify.h
+gsstruct_h=$(GLSRC)gsstruct.h
+
+###### Support
+
+### Include files
+
+gsbitmap_h=$(GLSRC)gsbitmap.h
+gsbitops_h=$(GLSRC)gsbitops.h
+gsbittab_h=$(GLSRC)gsbittab.h
+gsflip_h=$(GLSRC)gsflip.h
+gsuid_h=$(GLSRC)gsuid.h
+gsutil_h=$(GLSRC)gsutil.h
+gxarith_h=$(GLSRC)gxarith.h
+gxbitmap_h=$(GLSRC)gxbitmap.h
+gxfarith_h=$(GLSRC)gxfarith.h
+gxfixed_h=$(GLSRC)gxfixed.h
+gxobj_h=$(GLSRC)gxobj.h
+gxrplane_h=$(GLSRC)gxrplane.h
+# Out of order
+gsrect_h=$(GLSRC)gsrect.h
+gxalloc_h=$(GLSRC)gxalloc.h
+gxbitops_h=$(GLSRC)gxbitops.h
+gxcindex_h=$(GLSRC)gxcindex.h
+gxfont42_h=$(GLSRC)gxfont42.h
+gstrans_h=$(GLSRC)gstrans.h
+
+# Streams
+scommon_h=$(GLSRC)scommon.h
+stream_h=$(GLSRC)stream.h
+ramfs_h=$(GLSRC)ramfs.h
+
+### Memory manager
+
+$(GLOBJ)gsalloc.$(OBJ) : $(GLSRC)gsalloc.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(string__h) $(gsexit_h) $(gsmdebug_h) $(gsstruct_h) $(gxalloc_h)\
+ $(stream_h) $(malloc__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsalloc.$(OBJ) $(C_) $(GLSRC)gsalloc.c
+
+$(GLOBJ)gsmalloc.$(OBJ) : $(GLSRC)gsmalloc.c $(malloc__h)\
+ $(gdebug_h) $(gp_h) \
+ $(gserrors_h)\
+ $(gsmalloc_h) $(gsmdebug_h) $(gsmemret_h)\
+ $(gsmemory_h) $(gsstruct_h) $(gstypes_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsmalloc.$(OBJ) $(C_) $(GLSRC)gsmalloc.c
+
+# Memento uses windows.h on windows. This requires that /Za not be
+# used (as this disables Microsoft extensions, which breaks windows.h).
+# GLCC has the /Za pickled into it on windows, so we can't use GLCC.
+# Therefore use our own compiler invocation.
+MEMENTO_CC=$(CC) $(GENOPT) $(GLINCLUDES) $(CFLAGS)
+
+# We have an extra dependency here on malloc__h. This is deliberate to allow
+# windows users to set #define MEMENTO in the top of malloc_h and have
+# rebuilds work.
+$(GLOBJ)memento.$(OBJ) : $(GLSRC)memento.c $(valgrind_h) $(memento_h)\
+ $(malloc__h) $(LIB_MAK) $(MAKEDIRS)
+	$(MEMENTO_CC) $(GLO_)memento.$(OBJ) $(C_) $(GLSRC)memento.c
+
+$(AUX)memento.$(OBJ) : $(GLSRC)memento.c $(valgrind_h) $(memento_h)\
+ $(malloc__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCCAUX) $(AUXO_)memento.$(OBJ) $(C_) $(GLSRC)memento.c
+
+# Bobbin uses windows.h on windows. This requires that /Za not be
+# used (as this disables Microsoft extensions, which breaks windows.h).
+# GLCC has the /Za pickled into it on windows, so we can't use GLCC.
+# Therefore use our own compiler invocation.
+BOBBIN_CC=$(CC) $(GENOPT) $(GLINCLUDES) $(CFLAGS)
+
+$(GLOBJ)bobbin.$(OBJ) : $(GLSRC)bobbin.c $(bobbin_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(BOBBIN_CC) $(GLO_)bobbin.$(OBJ) $(C_) $(GLSRC)bobbin.c
+
+$(AUX)bobbin.$(OBJ) : $(GLSRC)bobbin.c $(valgrind_h) $(bobbin_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCCAUX) $(AUXO_)bobbin.$(OBJ) $(C_) $(GLSRC)bobbin.c
+
+$(GLOBJ)gsmemory.$(OBJ) : $(GLSRC)gsmemory.c $(memory__h)\
+ $(gdebug_h)\
+ $(gsmdebug_h) $(gsmemory_h) $(gsrefct_h) $(gsstruct_h) $(gstypes_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsmemory.$(OBJ) $(C_) $(GLSRC)gsmemory.c
+
+$(GLOBJ)gsmemret.$(OBJ) : $(GLSRC)gsmemret.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gsmemret_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsmemret.$(OBJ) $(C_) $(GLSRC)gsmemret.c
+
+# gsnogc is not part of the base configuration.
+# We make it available as a .dev so it can be used in configurations that
+# don't include the garbage collector, as well as by the "async" logic.
+gsnogc_=$(GLOBJ)gsnogc.$(OBJ)
+$(GLD)gsnogc.dev : $(ECHOGS_XE) $(gsnogc_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)gsnogc $(gsnogc_)
+
+$(GLOBJ)gsnogc.$(OBJ) : $(GLSRC)gsnogc.c $(AK) $(gx_h)\
+ $(gsmdebug_h) $(gsnogc_h) $(gsstruct_h) $(gxalloc_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsnogc.$(OBJ) $(C_) $(GLSRC)gsnogc.c
+
+### Bitmap processing
+
+$(GLOBJ)gsbitcom.$(OBJ) : $(GLSRC)gsbitcom.c $(AK) $(std_h)\
+ $(gdebug_h) $(gsbitops_h) $(gstypes_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsbitcom.$(OBJ) $(C_) $(GLSRC)gsbitcom.c
+
+$(GLOBJ)gsbitops.$(OBJ) : $(GLSRC)gsbitops.c $(AK) $(memory__h)\
+ $(stdio__h) $(gdebug_h) $(gsbittab_h) $(gserrors_h) $(gstypes_h)\
+ $(gxbitops_h) $(gxcindex_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsbitops.$(OBJ) $(C_) $(GLSRC)gsbitops.c
+
+$(GLOBJ)gsbittab.$(OBJ) : $(GLSRC)gsbittab.c $(AK) $(stdpre_h)\
+ $(gsbittab_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsbittab.$(OBJ) $(C_) $(GLSRC)gsbittab.c
+
+# gsflip is not part of the standard configuration: it's rather large,
+# and no standard facility requires it.
+$(GLOBJ)gsflip.$(OBJ) : $(GLSRC)gsflip.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gsbitops_h) $(gsbittab_h) $(gsflip_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsflip.$(OBJ) $(C_) $(GLSRC)gsflip.c
+
+### Multi-threading
+
+# These are required in the standard configuration, because gsmalloc.c
+# needs them even if the underlying primitives are dummies.
+
+$(GLOBJ)gxsync.$(OBJ) : $(GLSRC)gxsync.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsmemory_h) $(gxsync_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxsync.$(OBJ) $(C_) $(GLSRC)gxsync.c
+
+### Miscellaneous
+
+# Support for platform code
+$(GLOBJ)gpmisc.$(OBJ) : $(GLSRC)gpmisc.c $(errno__h) $(unistd__h) $(fcntl__h) \
+ $(stat__h) $(stdio__h) $(memory__h) $(string__h) $(gp_h) $(gpgetenv_h) \
+ $(gpmisc_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gpmisc.$(OBJ) $(C_) $(GLSRC)gpmisc.c
+
+$(AUX)gpmisc.$(OBJ) : $(GLSRC)gpmisc.c $(errno__h) $(unistd__h) $(fcntl__h) \
+ $(stat__h) $(stdio__h) $(memory__h) $(string__h) $(gp_h) $(gpgetenv_h) \
+ $(gpmisc_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCCAUX) $(AUXO_)gpmisc.$(OBJ) $(C_) $(GLSRC)gpmisc.c
+
+# Command line argument list management
+$(GLOBJ)gsargs.$(OBJ) : $(GLSRC)gsargs.c\
+ $(ctype__h) $(stdio__h) $(string__h)\
+ $(gsargs_h) $(gsexit_h) $(gsmemory_h)\
+ $(gserrors_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsargs.$(OBJ) $(C_) $(GLSRC)gsargs.c
+
+$(GLOBJ)gsmisc.$(OBJ) : $(GLSRC)gsmisc.c $(AK) $(gx_h) $(gserrors_h)\
+ $(vmsmath_h) $(std_h) $(ctype__h) $(malloc__h) $(math__h) $(memory__h)\
+ $(string__h) $(gpcheck_h) $(gxfarith_h) $(gxfixed_h) $(stdint__h) $(stdio__h)\
+ $(gdbflags_h) $(gp_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsmisc.$(OBJ) $(C_) $(GLSRC)gsmisc.c
+
+$(AUX)gsmisc.$(OBJ) : $(GLSRC)gsmisc.c $(AK) $(gx_h) $(gpmisc_h) $(gserrors_h)\
+ $(vmsmath_h) $(std_h)  $(ctype__h) $(malloc__h) $(math__h) $(memory__h)\
+ $(string__h) $(gpcheck_h) $(gxfarith_h) $(gxfixed_h) $(stdint__h) $(stdio__h)\
+ $(gdbflags_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCCAUX) $(C_) $(AUXO_)gsmisc.$(OBJ) $(GLSRC)gsmisc.c
+
+$(GLOBJ)gslibctx_1.$(OBJ) : $(GLSRC)gslibctx.c  $(AK) $(gp_h) $(gpmisc_h) \
+  $(gsmemory_h) $(gslibctx_h) $(stdio__h) $(string__h) $(gsicc_manage_h) \
+  $(gserrors_h) $(gscdefs_h) $(gsstruct_h) $(globals_h)
+	$(GLCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(GLO_)gslibctx_1.$(OBJ) $(C_) $(GLSRC)gslibctx.c
+
+$(GLOBJ)gslibctx_0.$(OBJ) : $(GLSRC)gslibctx.c  $(AK) $(gp_h) $(gpmisc_h) $(gsmemory_h)\
+  $(gslibctx_h) $(stdio__h) $(string__h) $(gsicc_manage_h) $(gserrors_h)\
+  $(gscdefs_h) $(gsstruct_h)
+	$(GLCC) $(GLO_)gslibctx_0.$(OBJ) $(C_) $(GLSRC)gslibctx.c
+
+$(GLOBJ)gslibctx.$(OBJ) : $(GLOBJ)gslibctx_$(WITH_CAL).$(OBJ)  $(AK) $(gp_h)
+	$(CP_) $(GLOBJ)gslibctx_$(WITH_CAL).$(OBJ) $(GLOBJ)gslibctx.$(OBJ)
+
+$(AUX)gslibctx.$(OBJ) : $(GLSRC)gslibctx.c  $(AK) $(gp_h) $(gsmemory_h)\
+  $(gslibctx_h) $(stdio__h) $(string__h) $(gsicc_manage_h) $(gserrors_h)\
+  $(gscdefs_h) $(gsstruct_h)
+	$(GLCCAUX) $(C_) $(AUXO_)gslibctx.$(OBJ) $(GLSRC)gslibctx.c
+
+$(GLOBJ)gsnotify.$(OBJ) : $(GLSRC)gsnotify.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gsnotify_h) $(gsstruct_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsnotify.$(OBJ) $(C_) $(GLSRC)gsnotify.c
+
+$(GLOBJ)gsserial.$(OBJ) : $(GLSRC)gsserial.c $(stdpre_h) $(gstypes_h)\
+ $(gsserial_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsserial.$(OBJ) $(C_) $(GLSRC)gsserial.c
+
+$(GLOBJ)gsutil.$(OBJ) : $(GLSRC)gsutil.c $(AK) $(memory__h)\
+ $(string__h) $(gstypes_h) $(gserrors_h) $(gsmemory_h)\
+ $(gsrect_h) $(gsuid_h) $(gsutil_h) $(gxsync_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsutil.$(OBJ) $(C_) $(GLSRC)gsutil.c
+
+$(AUX)gsutil.$(OBJ) : $(GLSRC)gsutil.c $(AK) $(memory__h) $(string__h)\
+ $(gstypes_h) $(gserrors_h) $(gsmemory_h)\
+ $(gsrect_h) $(gsuid_h) $(gsutil_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCCAUX) $(C_) $(AUXO_)gsutil.$(OBJ) $(GLSRC)gsutil.c
+
+$(GLOBJ)gssprintf.$(OBJ) : $(GLSRC)gssprintf.c $(gssprintf_h) $(unistd__h) \
+ $(gp_h) $(stdio__h) $(stdint__h) $(string__h) $(math__h)
+	$(GLCC) $(GLO_)gssprintf.$(OBJ) $(C_) $(GLSRC)gssprintf.c
+
+$(GLOBJ)gsstrtok.$(OBJ) : $(GLSRC)gsstrtok.c $(gsstrtok_h) $(string__h)
+	$(GLCC) $(GLO_)gsstrtok.$(OBJ) $(C_) $(GLSRC)gsstrtok.c
+
+$(GLOBJ)gsstrl.$(OBJ) : $(GLSRC)gsstrl.c $(gsstrl_h) $(string__h)
+	$(GLCC) $(GLO_)gsstrl.$(OBJ) $(C_) $(GLSRC)gsstrl.c
+
+# MD5 digest
+gsmd5_h=$(GLSRC)gsmd5.h
+# We have to use a slightly different compilation approach in order to
+# get std.h included when compiling md5.c.
+md5_=$(GLOBJ)gsmd5.$(OBJ)
+$(GLOBJ)gsmd5.$(OBJ) : $(GLSRC)gsmd5.c $(AK) $(gsmd5_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsmd5.$(OBJ) $(C_) $(GLSRC)gsmd5.c
+
+# SHA-256 digest
+sha2_h=$(GLSRC)sha2.h
+sha2_=$(GLOBJ)sha2.$(OBJ)
+$(GLOBJ)sha2.$(OBJ) : $(GLSRC)sha2.c $(AK) $(std_h) $(string__h)\
+ $(sha2_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sha2.$(OBJ) $(C_) $(GLSRC)sha2.c
+
+# AES cipher
+aes_h=$(GLSRC)aes.h
+aes_=$(GLOBJ)aes.$(OBJ)
+$(GLOBJ)aes.$(OBJ) : $(GLSRC)aes.c $(AK) $(string__h) $(aes_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)aes.$(OBJ) $(C_) $(GLSRC)aes.c
+
+###### Low-level facilities and utilities
+
+### Include files
+
+gsccode_h=$(GLSRC)gsccode.h $(std_h) $(stdint__h) $(gstypes_h)
+gsccolor_h=$(GLSRC)gsccolor.h
+# gscedata.[ch] are generated automatically by lib/encs2c.ps.
+gscedata_h=$(GLSRC)gscedata.h
+gscencs_h=$(GLSRC)gscencs.h
+gsagl_h=$(GLSRC)gsagl.h
+gsclipsr_h=$(GLSRC)gsclipsr.h
+gscsel_h=$(GLSRC)gscsel.h
+gscolor1_h=$(GLSRC)gscolor1.h
+gscompt_h=$(GLSRC)gscompt.h
+gscoord_h=$(GLSRC)gscoord.h
+gscpm_h=$(GLSRC)gscpm.h
+gscsepnm_h=$(GLSRC)gscsepnm.h
+gsdevice_h=$(GLSRC)gsdevice.h
+gsfcmap_h=$(GLSRC)gsfcmap.h
+gsfname_h=$(GLSRC)gsfname.h
+gsfont_h=$(GLSRC)gsfont.h
+gsgdata_h=$(GLSRC)gsgdata.h
+gsgcache_h=$(GLSRC)gsgcache.h
+gshsb_h=$(GLSRC)gshsb.h
+gsht_h=$(GLSRC)gsht.h
+gsht1_h=$(GLSRC)gsht1.h
+gsjconf_h=$(GLSRC)gsjconf.h
+gslib_h=$(GLSRC)gslib.h
+gslparam_h=$(GLSRC)gslparam.h
+gsmatrix_h=$(GLSRC)gsmatrix.h
+# Out of order
+gxbitfmt_h=$(GLSRC)gxbitfmt.h
+gxcomp_h=$(GLSRC)gxcomp.h
+gsovrc_h=$(GLSRC)gsovrc.h
+gspaint_h=$(GLSRC)gspaint.h
+gsparam_h=$(GLSRC)gsparam.h
+gsparams_h=$(GLSRC)gsparams.h
+gsparamx_h=$(GLSRC)gsparamx.h
+gspath2_h=$(GLSRC)gspath2.h
+gspcolor_h=$(GLSRC)gspcolor.h
+gspenum_h=$(GLSRC)gspenum.h
+gsptype1_h=$(GLSRC)gsptype1.h
+gsropt_h=$(GLSRC)gsropt.h
+gstext_h=$(GLSRC)gstext.h
+gsxfont_h=$(GLSRC)gsxfont.h
+# Out of order
+gschar_h=$(GLSRC)gschar.h
+gsiparam_h=$(GLSRC)gsiparam.h
+gsimage_h=$(GLSRC)gsimage.h
+gsline_h=$(GLSRC)gsline.h
+gspath_h=$(GLSRC)gspath.h
+gsrop_h=$(GLSRC)gsrop.h
+gstparam_h=$(GLSRC)gstparam.h
+
+gxalpha_h=$(GLSRC)gxalpha.h
+gxbcache_h=$(GLSRC)gxbcache.h
+gxcvalue_h=$(GLSRC)gxcvalue.h
+gxclio_h=$(GLSRC)gxclio.h
+gxclip_h=$(GLSRC)gxclip.h
+gxclipsr_h=$(GLSRC)gxclipsr.h
+gxcoord_h=$(GLSRC)gxcoord.h
+gxcpath_h=$(GLSRC)gxcpath.h
+gxdda_h=$(GLSRC)gxdda.h
+gxdevbuf_h=$(GLSRC)gxdevbuf.h
+gxdevmem_h=$(GLSRC)gxdevmem.h
+gxdhtres_h=$(GLSRC)gxdhtres.h
+gxfont0_h=$(GLSRC)gxfont0.h
+gxfrac_h=$(GLSRC)gxfrac.h
+gxftype_h=$(GLSRC)gxftype.h
+gxgetbit_h=$(GLSRC)gxgetbit.h
+gxhttile_h=$(GLSRC)gxhttile.h
+gxhttype_h=$(GLSRC)gxhttype.h
+gxiclass_h=$(GLSRC)gxiclass.h
+gxiodev_h=$(GLSRC)gxiodev.h
+gxline_h=$(GLSRC)gxline.h
+gxlum_h=$(GLSRC)gxlum.h
+gxmatrix_h=$(GLSRC)gxmatrix.h
+gxmclip_h=$(GLSRC)gxmclip.h
+gxoprect_h=$(GLSRC)gxoprect.h
+gxp1impl_h=$(GLSRC)gxp1impl.h
+gxpaint_h=$(GLSRC)gxpaint.h
+gxpath_h=$(GLSRC)gxpath.h
+gxpcache_h=$(GLSRC)gxpcache.h
+gxsample_h=$(GLSRC)gxsample.h
+gxsamplp_h=$(GLSRC)gxsamplp.h
+gxscanc_h=$(GLSRC)gxscanc.h
+gxstate_h=$(GLSRC)gxstate.h
+gxtext_h=$(GLSRC)gxtext.h
+gxtmap_h=$(GLSRC)gxtmap.h
+gxxfont_h=$(GLSRC)gxxfont.h
+# The following are out of order because they include other files.
+gxband_h=$(GLSRC)gxband.h
+gxcdevn_h=$(GLSRC)gxcdevn.h
+gxchar_h=$(GLSRC)gxchar.h
+gxchrout_h=$(GLSRC)gxchrout.h
+gsdcolor_h=$(GLSRC)gsdcolor.h
+gxdcolor_h=$(GLSRC)gxdcolor.h
+gsnamecl_h=$(GLSRC)gsnamecl.h
+gsncdummy_h=$(GLSRC)gsncdummy.h
+gscspace_h=$(GLSRC)gscspace.h
+# FIXME: gscspace_h should depend on $(gscms_h) too.
+gscssub_h=$(GLSRC)gscssub.h
+gxdevcli_h=$(GLSRC)gxdevcli.h
+gscicach_h=$(GLSRC)gscicach.h
+gxdevice_h=$(GLSRC)gxdevice.h
+gxdht_h=$(GLSRC)gxdht.h
+gxdhtserial_h=$(GLSRC)gxdhtserial.h
+gxdither_h=$(GLSRC)gxdither.h
+gxclip2_h=$(GLSRC)gxclip2.h
+gxclipm_h=$(GLSRC)gxclipm.h
+gxctable_h=$(GLSRC)gxctable.h
+gxfcache_h=$(GLSRC)gxfcache.h
+
+gxfont_h=$(GLSRC)gxfont.h
+gxiparam_h=$(GLSRC)gxiparam.h
+gximask_h=$(GLSRC)gximask.h
+gscie_h=$(GLSRC)gscie.h
+gsicc_h=$(GLSRC)gsicc.h
+gscrd_h=$(GLSRC)gscrd.h
+gscrdp_h=$(GLSRC)gscrdp.h
+gscdevn_h=$(GLSRC)gscdevn.h
+gscindex_h=$(GLSRC)gscindex.h
+gscolor2_h=$(GLSRC)gscolor2.h
+gscsepr_h=$(GLSRC)gscsepr.h
+gxdcconv_h=$(GLSRC)gxdcconv.h
+gxfmap_h=$(GLSRC)gxfmap.h
+gxcmap_h=$(GLSRC)gxcmap.h
+
+gxgstate_h=$(GLSRC)gxgstate.h
+
+gxcolor2_h=$(GLSRC)gxcolor2.h
+gxclist_h=$(GLSRC)gxclist.h
+gxcspace_h=$(GLSRC)gxcspace.h
+gxht_h=$(GLSRC)gxht.h
+gxcie_h=$(GLSRC)gxcie.h
+gxht_thresh_h=$(GLSRC)gxht_thresh.h
+gxpcolor_h=$(GLSRC)gxpcolor.h
+gscolor_h=$(GLSRC)gscolor.h
+gsstate_h=$(GLSRC)gsstate.h
+gsicc_create_h=$(GLSRC)gsicc_create.h
+gximdecode_h=$(GLSRC)gximdecode.h
+
+gzacpath_h=$(GLSRC)gzacpath.h
+gzcpath_h=$(GLSRC)gzcpath.h
+gzht_h=$(GLSRC)gzht.h
+gzline_h=$(GLSRC)gzline.h
+gzpath_h=$(GLSRC)gzpath.h
+gzstate_h=$(GLSRC)gzstate.h
+
+gdevbbox_h=$(GLSRC)gdevbbox.h
+gdevmem_h=$(GLSRC)gdevmem.h
+gdevmpla_h=$(GLSRC)gdevmpla.h
+gdevmrop_h=$(GLSRC)gdevmrop.h
+gdevmrun_h=$(GLSRC)gdevmrun.h
+gdevplnx_h=$(GLSRC)gdevplnx.h
+gdevepo_h=$(GLSRC)gdevepo.h
+
+sa85d_h=$(GLSRC)sa85d.h
+sa85x_h=$(GLSRC)sa85x.h
+sbcp_h=$(GLSRC)sbcp.h
+sbtx_h=$(GLSRC)sbtx.h
+scanchar_h=$(GLSRC)scanchar.h
+sfilter_h=$(GLSRC)sfilter.h
+sdct_h=$(GLSRC)sdct.h
+shc_h=$(GLSRC)shc.h
+sisparam_h=$(GLSRC)sisparam.h
+sjpeg_h=$(GLSRC)sjpeg.h
+slzwx_h=$(GLSRC)slzwx.h
+smd5_h=$(GLSRC)smd5.h
+sarc4_h=$(GLSRC)sarc4.h
+saes_h=$(GLSRC)saes.h
+sjbig2_h=$(GLSRC)sjbig2.h
+sjpx_openjpeg_h=$(GLSRC)sjpx_openjpeg.h $(scommon_h) $(openjpeg_h)
+spdiffx_h=$(GLSRC)spdiffx.h
+spngpx_h=$(GLSRC)spngpx.h
+spprint_h=$(GLSRC)spprint.h
+spsdf_h=$(GLSRC)spsdf.h
+srlx_h=$(GLSRC)srlx.h
+spwgx_h=$(GLSRC)spwgx.h
+surfx_h=$(SURFX_H)
+sstring_h=$(GLSRC)sstring.h
+strimpl_h=$(GLSRC)strimpl.h
+szlibx_h=$(GLSRC)szlibx.h
+zlib_h=$(ZSRCDIR)$(D)zlib.h
+# We have two of the following, for shared zlib (_1)
+# and 'local' zlib (_0)
+szlibxx_h_1=$(GLSRC)szlibxx.h $(szlibx_h)
+szlibxx_h_0=$(GLSRC)szlibxx.h $(szlibx_h) $(zlib_h)
+# Out of order
+scf_h=$(GLSRC)scf.h
+scfx_h=$(GLSRC)scfx.h
+siinterp_h=$(GLSRC)siinterp.h
+siscale_h=$(GLSRC)siscale.h
+sidscale_h=$(GLSRC)sidscale.h
+simscale_h=$(GLSRC)simscale.h
+simscale_foo_h=$(GLSRC)simscale_foo.h
+gximage_h=$(GLSRC)gximage.h
+gxhldevc_h=$(GLSRC)gxhldevc.h
+gsptype2_h=$(GLSRC)gsptype2.h
+gdevddrw_h=$(GLSRC)gdevddrw.h
+gxfill_h=$(GLSRC)gxfill.h
+gxfilltr_h=$(GLSRC)gxfilltr.h
+gxfillsl_h=$(GLSRC)gxfillsl.h
+gxfillts_h=$(GLSRC)gxfillts.h
+gxdtfill_h=$(GLSRC)gxdtfill.h
+
+ttfoutl_h=$(GLSRC)ttfoutl.h
+gxttfb_h=$(GLSRC)gxttfb.h
+gzspotan_h=$(GLSRC)gzspotan.h
+
+gdevpxen_h=$(GLSRC)gdevpxen.h
+gdevpxat_h=$(GLSRC)gdevpxat.h
+gdevpxop_h=$(GLSRC)gdevpxop.h
+
+gsequivc_h=$(GLSRC)gsequivc.h
+gdevdevn_h=$(GLSRC)gdevdevn.h
+gdevdevnprn_h=$(GLSRC)gdevdevnprn.h
+
+gdevoflt_h=$(GLSRC)gdevoflt.h
+
+gdevnup_h=$(GLSRC)gdevnup.h
+
+png__h=$(GLSRC)png_.h $(MAKEFILE)
+x__h=$(GLSRC)x_.h
+
+### Executable code
+
+# gconfig and gscdefs are handled specially.  Currently they go in psbase
+# rather than in libcore, which is clearly wrong.
+$(GLOBJ)gconfig.$(OBJ) : $(gconfig_h) $(GLSRC)gconf.c $(AK) $(gx_h)\
+ $(gscdefs_h) $(gconf_h)\
+ $(gxdevice_h) $(gxiclass_h) $(gxiodev_h) $(gxiparam_h) $(LIB_MAK) $(MAKEDIRS)
+	$(RM_) $(GLGEN)gconfig.c
+	$(CP_) $(GLSRC)gconf.c $(GLGEN)gconfig.c
+	$(GLCC) $(GLO_)gconfig.$(OBJ) $(C_) $(GLGEN)gconfig.c
+
+$(GLOBJ)gscdefs.$(OBJ) : $(GLSRC)gscdef.c\
+ $(std_h) $(gscdefs_h) $(gconfigd_h) $(LIB_MAK) $(MAKEDIRS)
+	$(RM_) $(GLGEN)gscdefs.c
+	$(CP_) $(GLSRC)gscdef.c $(GLGEN)gscdefs.c
+	$(GLCC) $(GLO_)gscdefs.$(OBJ) $(C_) $(GLGEN)gscdefs.c
+
+$(AUX)gscdefs.$(OBJ) : $(GLSRC)gscdef.c\
+ $(std_h) $(gscdefs_h) $(gconfigd_h) $(LIB_MAK) $(MAKEDIRS)
+	$(RM_) $(AUX)gscdefs.c
+	$(CP_) $(GLSRC)gscdef.c $(AUX)gscdefs.c
+	$(GLCCAUX) $(C_) $(AUXO_)gscdefs.$(OBJ) $(AUX)gscdefs.c
+
+$(GLOBJ)gxacpath.$(OBJ) : $(GLSRC)gxacpath.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gsdcolor_h) $(gsrop_h) $(gsstate_h) $(gsstruct_h) $(gsutil_h)\
+ $(gxdevice_h) $(gxfixed_h) $(gxgstate_h) $(gxpaint_h)\
+ $(gzacpath_h) $(gzcpath_h) $(gzpath_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxacpath.$(OBJ) $(C_) $(GLSRC)gxacpath.c
+
+$(GLOBJ)gxbcache.$(OBJ) : $(GLSRC)gxbcache.c $(AK) $(gx_h) $(gxobj_h) \
+ $(memory__h) $(gsmdebug_h) $(gxbcache_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxbcache.$(OBJ) $(C_) $(GLSRC)gxbcache.c
+
+$(GLOBJ)gxccache.$(OBJ) : $(GLSRC)gxccache.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gpcheck_h) $(gsstruct_h)\
+ $(gscencs_h) $(gxfixed_h) $(gxmatrix_h)\
+ $(gzstate_h) $(gzpath_h) $(gxdevice_h) $(gxdevmem_h)\
+ $(gzcpath_h) $(gxchar_h) $(gxfont_h) $(gxfcache_h)\
+ $(gxxfont_h) $(gximask_h) $(gscspace_h) $(gsimage_h) $(gxhttile_h)\
+ $(gsptype1_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxccache.$(OBJ) $(C_) $(GLSRC)gxccache.c
+
+$(GLOBJ)gxccman.$(OBJ) : $(GLSRC)gxccman.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gpcheck_h)\
+ $(gsbitops_h) $(gsstruct_h) $(gsutil_h) $(gxfixed_h) $(gxmatrix_h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gxfont_h) $(gxfcache_h) $(gxchar_h)\
+ $(gxpath_h) $(gxxfont_h) $(gzstate_h) $(gxttfb_h) $(gxfont42_h) $(gxobj_h) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxccman.$(OBJ) $(C_) $(GLSRC)gxccman.c
+
+$(GLOBJ)gxchar.$(OBJ) : $(GLSRC)gxchar.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(string__h) $(gspath_h) $(gsstruct_h) $(gxfcid_h)\
+ $(gxfixed_h) $(gxarith_h) $(gxmatrix_h) $(gxcoord_h) $(gxdevice_h) $(gxdevmem_h)\
+ $(gxfont_h) $(gxfont0_h) $(gxchar_h) $(gxfcache_h) $(gzpath_h) $(gzstate_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxchar.$(OBJ) $(C_) $(GLSRC)gxchar.c
+
+$(GLOBJ)gxchrout.$(OBJ) : $(GLSRC)gxchrout.c $(AK) $(gx_h) $(math__h)\
+ $(gxchrout_h) $(gxfarith_h) $(gxgstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxchrout.$(OBJ) $(C_) $(GLSRC)gxchrout.c
+
+$(GLOBJ)gxcht.$(OBJ) : $(GLSRC)gxcht.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsutil_h) $(gxdevsop_h)\
+ $(gxarith_h) $(gxcmap_h) $(gxdcolor_h) $(gxdevice_h) $(gxfixed_h)\
+ $(gxgstate_h) $(gxmatrix_h) $(gzht_h) $(gsserial_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxcht.$(OBJ) $(C_) $(GLSRC)gxcht.c
+
+$(GLOBJ)gxclip.$(OBJ) : $(GLSRC)gxclip.c $(AK) $(gx_h)\
+ $(gxclip_h) $(gxcpath_h) $(gxdevice_h) $(gxpath_h) $(gzcpath_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclip.$(OBJ) $(C_) $(GLSRC)gxclip.c
+
+$(GLOBJ)gxcmap.$(OBJ) : $(GLSRC)gxcmap.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gsccolor_h)\
+ $(gxalpha_h) $(gxcspace_h) $(gxfarith_h) $(gxfrac_h)\
+ $(gxdcconv_h) $(gxdevice_h) $(gxcmap_h) $(gxlum_h)\
+ $(gzstate_h) $(gxdither_h) $(gxcdevn_h) $(string__h)\
+ $(gsicc_manage_h) $(gdevdevn_h) $(gsicc_cache_h)\
+ $(gscms_h) $(gsicc_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxcmap.$(OBJ) $(C_) $(GLSRC)gxcmap.c
+
+$(GLOBJ)gxcpath.$(OBJ) : $(GLSRC)gxcpath.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gscoord_h) $(gsline_h) $(gsstruct_h) $(gsutil_h)\
+ $(gxdevice_h) $(gxfixed_h) $(gxgstate_h) $(gxpaint_h)\
+ $(gzpath_h) $(gzcpath_h) $(gzacpath_h) $(string__h) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxcpath.$(OBJ) $(C_) $(GLSRC)gxcpath.c
+
+$(GLOBJ)gxdcconv.$(OBJ) : $(GLSRC)gxdcconv.c $(AK) $(gx_h)\
+ $(gsdcolor_h) $(gxcmap_h) $(gxdcconv_h) $(gxdevice_h)\
+ $(gxfarith_h) $(gxgstate_h) $(gxlum_h) $(gsstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxdcconv.$(OBJ) $(C_) $(GLSRC)gxdcconv.c
+
+$(GLOBJ)gxdcolor.$(OBJ) : $(GLSRC)gxdcolor.c $(AK) $(gx_h)\
+ $(memory__h) $(gsbittab_h) $(gserrors_h) $(gxdcolor_h) $(gxpcolor_h)\
+ $(gxdevice_h) $(gxdevcli_h) $(gxclist_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxdcolor.$(OBJ) $(C_) $(GLSRC)gxdcolor.c
+
+$(GLOBJ)gxhldevc.$(OBJ) : $(GLSRC)gxhldevc.c $(AK) $(gx_h)\
+ $(gzstate_h) $(gscspace_h) $(gxcspace_h) $(gxhldevc_h) $(memory__h)\
+ $(gxpcolor_h) $(gsptype2_h) $(gsptype1_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxhldevc.$(OBJ) $(C_) $(GLSRC)gxhldevc.c
+
+$(GLOBJ)gxfill.$(OBJ) : $(GLSRC)gxfill.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gsstruct_h) $(gxdevsop_h) $(assert__h) $(gxdcolor_h) $(gxdevice_h)\
+ $(gxfixed_h) $(gxhttile_h) $(gxgstate_h) $(gxpaint_h) $(gxfill_h) $(gxpath_h)\
+ $(gsptype1_h) $(gsptype2_h) $(gxpcolor_h) $(gsstate_h) $(gzcpath_h)\
+ $(gzpath_h) $(gzspotan_h) $(gdevddrw_h) $(memory__h) $(stdint__h)\
+ $(gxfilltr_h) $(gxfillsl_h) $(gxfillts_h) $(gxscanc_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxfill.$(OBJ) $(C_) $(GLSRC)gxfill.c
+
+$(GLOBJ)gxht.$(OBJ) : $(GLSRC)gxht.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsbitops_h) $(gsstruct_h) $(gsutil_h)\
+ $(gxdcolor_h) $(gxdevice_h) $(gxfixed_h) $(gxgstate_h) $(gzht_h)\
+ $(gsserial_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxht.$(OBJ) $(C_) $(GLSRC)gxht.c
+
+$(GLOBJ)gxhtbit.$(OBJ) : $(GLSRC)gxhtbit.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsbitops_h) $(gscdefs_h)\
+ $(gxbitmap_h) $(gxdht_h) $(gxdhtres_h) $(gxhttile_h) $(gxtmap_h) $(gp_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxhtbit.$(OBJ) $(C_) $(GLSRC)gxhtbit.c
+
+$(GLOBJ)gxht_thresh.$(OBJ) : $(GLSRC)gxht_thresh.c $(AK) $(memory__h)\
+ $(gx_h) $(gxgstate_h) $(gsiparam_h) $(math__h) $(gxfixed_h) $(gximage_h)\
+ $(gxdevice_h) $(gxdht_h) $(gxht_thresh_h) $(gzht_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxht_thresh.$(OBJ) $(C_) $(GLSRC)gxht_thresh.c
+
+$(GLOBJ)gxidata_0.$(OBJ) : $(GLSRC)gxidata.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gxcpath_h) $(gxdevice_h) $(gximage_h) $(gsicc_cache_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxidata_0.$(OBJ) $(C_) $(GLSRC)gxidata.c
+
+$(GLOBJ)gxidata_1.$(OBJ) : $(GLSRC)gxidata.c $(AK) $(cal_h) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gxcpath_h) $(gxdevice_h) $(gximage_h) $(gsicc_cache_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(GLO_)gxidata_1.$(OBJ) $(C_) $(GLSRC)gxidata.c
+
+$(GLOBJ)gxidata.$(OBJ) : $(GLOBJ)gxidata_$(WITH_CAL).$(OBJ) $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gxcpath_h) $(gxdevice_h) $(gximage_h) $(gsicc_cache_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)gxidata_$(WITH_CAL).$(OBJ) $(GLOBJ)gxidata.$(OBJ)
+
+$(GLOBJ)gxifast.$(OBJ) : $(GLSRC)gxifast.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gpcheck_h) $(gdevmem_h) $(gsbittab_h) $(gsccolor_h)\
+ $(gspaint_h) $(gsutil_h) $(gxarith_h) $(gxcmap_h) $(gxcpath_h) $(gxdcolor_h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gxfixed_h) $(gximage_h) $(gxgstate_h) \
+ $(gxmatrix_h) $(gzht_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxifast.$(OBJ) $(C_) $(GLSRC)gxifast.c
+
+$(GLOBJ)gximage.$(OBJ) : $(GLSRC)gximage.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gscspace_h) $(gsmatrix_h) $(gsutil_h)\
+ $(gxcolor2_h) $(gxiparam_h) $(stream_h) $(memory__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gximage.$(OBJ) $(C_) $(GLSRC)gximage.c
+
+$(GLOBJ)gximage1.$(OBJ) : $(GLSRC)gximage1.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gximage_h) $(gxiparam_h) $(stream_h) $(memory__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gximage1.$(OBJ) $(C_) $(GLSRC)gximage1.c
+
+$(GLOBJ)gximono_0.$(OBJ) : $(GLSRC)gximono.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gpcheck_h) $(gdevmem_h) $(gsccolor_h) $(gspaint_h) $(gsutil_h)\
+ $(gxarith_h) $(gxcmap_h) $(gxcpath_h) $(gxdcolor_h) $(gxdevice_h)\
+ $(gxdevmem_h) $(gxfixed_h) $(gximage_h) $(gxgstate_h) $(gxmatrix_h)\
+ $(gzht_h) $(gsicc_h) $(gsicc_cache_h)  $(gsicc_cms_h)\
+ $(gxcie_h) $(gscie_h) $(gxht_thresh_h) $(gxdda_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gximono_0.$(OBJ) $(C_) $(GLSRC)gximono.c
+
+$(GLOBJ)gximono_1.$(OBJ) : $(GLSRC)gximono.c $(AK) $(cal_h) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gpcheck_h) $(gdevmem_h) $(gsccolor_h) $(gspaint_h) $(gsutil_h)\
+ $(gxarith_h) $(gxcmap_h) $(gxcpath_h) $(gxdcolor_h) $(gxdevice_h)\
+ $(gxdevmem_h) $(gxfixed_h) $(gximage_h) $(gxgstate_h) $(gxmatrix_h)\
+ $(gzht_h) $(gsicc_h) $(gsicc_cache_h)  $(gsicc_cms_h)\
+ $(gxcie_h) $(gscie_h) $(gxht_thresh_h) $(gxdda_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(GLO_)gximono_1.$(OBJ) $(C_) $(GLSRC)gximono.c
+
+$(GLOBJ)gximono.$(OBJ) : $(GLOBJ)gximono_$(WITH_CAL).$(OBJ) $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gpcheck_h) $(gdevmem_h) $(gsccolor_h) $(gspaint_h) $(gsutil_h)\
+ $(gxarith_h) $(gxcmap_h) $(gxcpath_h) $(gxdcolor_h) $(gxdevice_h)\
+  $(gxdevmem_h) $(gxfixed_h) $(gximage_h) $(gxgstate_h) $(gxmatrix_h)\
+ $(gzht_h) $(gsicc_h) $(gsicc_cache_h)  $(gsicc_cms_h)\
+ $(gxcie_h) $(gscie_h) $(gxht_thresh_h) $(gxdda_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)gximono_$(WITH_CAL).$(OBJ) $(GLOBJ)gximono.$(OBJ)
+
+$(GLOBJ)gximask.$(OBJ) : $(GLSRC)gximask.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsptype1_h) $(gsptype2_h) $(gxdevice_h) $(gxdcolor_h)\
+ $(gxcpath_h) $(gximask_h) $(gzacpath_h) $(gzcpath_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gximask.$(OBJ) $(C_) $(GLSRC)gximask.c
+
+$(GLOBJ)gxipixel.$(OBJ) : $(GLSRC)gxipixel.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(gpcheck_h) $(gscindex_h) $(gscspace_h)\
+ $(gsccolor_h) $(gscdefs_h) $(gspaint_h) $(gsstruct_h) $(gsutil_h)\
+ $(gxfixed_h) $(gxfrac_h) $(gxarith_h) $(gxiparam_h) $(gxmatrix_h)\
+ $(gxdevice_h) $(gzpath_h) $(gzstate_h) $(gsicc_cache_h) $(gsicc_cms_h)\
+ $(gzcpath_h) $(gxdevmem_h) $(gximage_h) $(gdevmrop_h) $(gsicc_manage_h)\
+ $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxipixel.$(OBJ) $(C_) $(GLSRC)gxipixel.c
+
+$(GLOBJ)gxi12bit.$(OBJ) : $(GLSRC)gxi12bit.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gpcheck_h)\
+ $(gsccolor_h) $(gspaint_h)\
+ $(gxarith_h) $(gxcmap_h) $(gxcpath_h) $(gxdcolor_h) $(gxdevice_h)\
+ $(gxdevmem_h) $(gxfixed_h) $(gxfrac_h) $(gximage_h) $(gxgstate_h)\
+ $(gxmatrix_h) $(gsicc_h) $(gsicc_cache_h) $(gsicc_cms_h)\
+ $(gxcie_h) $(gscie_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxi12bit.$(OBJ) $(C_) $(GLSRC)gxi12bit.c
+
+$(GLOBJ)gxi16bit.$(OBJ) : $(GLSRC)gxi16bit.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gpcheck_h) $(gsccolor_h) $(gspaint_h)\
+ $(gxarith_h) $(gxcmap_h) $(gxcpath_h) $(gxdcolor_h) $(gxdevice_h)\
+ $(gxdevmem_h) $(gxfixed_h) $(gxfrac_h) $(gximage_h) $(gxgstate_h)\
+ $(gxmatrix_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxi16bit.$(OBJ) $(C_) $(GLSRC)gxi16bit.c
+
+# gxmclip is used for Patterns and ImageType 3 images:
+# it isn't included in the base library.
+$(GLOBJ)gxmclip.$(OBJ) : $(GLSRC)gxmclip.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gxmclip_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxmclip.$(OBJ) $(C_) $(GLSRC)gxmclip.c
+
+$(GLOBJ)gxpaint.$(OBJ) : $(GLSRC)gxpaint.c $(AK) $(gx_h)\
+ $(gxdevice_h) $(gxhttile_h) $(gxpaint_h) $(gxpath_h) $(gzstate_h) $(gxfont_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxpaint.$(OBJ) $(C_) $(GLSRC)gxpaint.c
+
+$(GLOBJ)gxpath.$(OBJ) : $(GLSRC)gxpath.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gsstruct_h) $(gxfixed_h) $(gzpath_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxpath.$(OBJ) $(C_) $(GLSRC)gxpath.c
+
+$(GLOBJ)gxpath2.$(OBJ) : $(GLSRC)gxpath2.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(gspath_h) $(gsstruct_h) $(gxfixed_h) $(gxarith_h) $(gzpath_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxpath2.$(OBJ) $(C_) $(GLSRC)gxpath2.c
+
+$(GLOBJ)gxpcopy.$(OBJ) : $(GLSRC)gxpcopy.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(gxfarith_h) $(gxfixed_h) $(gxgstate_h) $(gzpath_h) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxpcopy.$(OBJ) $(C_) $(GLSRC)gxpcopy.c
+
+$(GLOBJ)gxpdash.$(OBJ) : $(GLSRC)gxpdash.c $(AK) $(gx_h) $(math__h)\
+ $(gscoord_h) $(gsline_h) $(gsmatrix_h) $(gxarith_h) $(gxgstate_h)\
+ $(gxfixed_h) $(gzline_h) $(gzpath_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxpdash.$(OBJ) $(C_) $(GLSRC)gxpdash.c
+
+$(GLOBJ)gxpflat.$(OBJ) : $(GLSRC)gxpflat.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gxarith_h) $(gxfixed_h) $(gzpath_h) $(memory__h) $(string__h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxpflat.$(OBJ) $(C_) $(GLSRC)gxpflat.c
+
+$(GLOBJ)gxsample.$(OBJ) : $(GLSRC)gxsample.c $(AK) $(gx_h)\
+ $(gxsample_h) $(gxfixed_h) $(gximage_h) $(gxsamplp_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxsample.$(OBJ) $(C_) $(GLSRC)gxsample.c
+
+$(GLOBJ)gxscanc.$(OBJ) : $(GLSRC)gxscanc.c $(GX) $(gxscanc_h) $(gx_h)\
+ $(assert__h) $(gpcheck_h) $(gscoord_h) $(gsdcolor_h) $(gsdevice_h)\
+ $(gserrors_h) $(gsptype1_h) $(gxdcolor_h) $(gxdevice_h) $(gserrors_h)\
+ $(gsptype1_h) $(gxdcolor_h) $(gxdevice_h) $(gxfarith_h) $(gxfill_h)\
+ $(gxfixed_h) $(gxgstate_h) $(gxhttile_h) $(gxmatrix_h) $(gxpaint_h)\
+ $(gzcpath_h) $(gzline_h) $(gzpath_h) $(math__h) $(memory__h) $(string__h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxscanc.$(OBJ) $(C_) $(GLSRC)gxscanc.c
+
+$(GLOBJ)gxstroke.$(OBJ) : $(GLSRC)gxstroke.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h) $(gpcheck_h) $(gsstate_h)\
+ $(gscoord_h) $(gsdcolor_h) $(gsdevice_h) $(gsptype1_h) $(gsptype2_h)\
+ $(gxdevice_h) $(gxfarith_h) $(gxfixed_h)\
+ $(gxhttile_h) $(gxgstate_h) $(gxmatrix_h) $(gxpaint_h)\
+ $(gzcpath_h) $(gzline_h) $(gzpath_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxstroke.$(OBJ) $(C_) $(GLSRC)gxstroke.c
+
+###### Higher-level facilities
+
+# gscedata.[ch] are generated automatically by lib/encs2c.ps.
+$(GLOBJ)gscedata.$(OBJ) : $(GLSRC)gscedata.c\
+ $(stdpre_h) $(gstypes_h) $(gscedata_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscedata.$(OBJ) $(C_) $(GLSRC)gscedata.c
+
+$(GLOBJ)gscencs.$(OBJ) : $(GLSRC)gscencs.c\
+ $(memory__h) $(gscedata_h) $(gscencs_h) $(gserrors_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscencs.$(OBJ) $(C_) $(GLSRC)gscencs.c
+
+$(GLOBJ)gschar.$(OBJ) : $(GLSRC)gschar.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gscoord_h) $(gsmatrix_h) $(gsstruct_h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gxchar_h) $(gxfont_h) $(gzstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gschar.$(OBJ) $(C_) $(GLSRC)gschar.c
+
+$(GLOBJ)gscolor.$(OBJ) : $(GLSRC)gscolor.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gsccolor_h) $(gsstruct_h) $(gsutil_h) $(gscolor2_h)\
+ $(gxcmap_h) $(gxcspace_h) $(gxdcconv_h) $(gxdevice_h) $(gzstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscolor.$(OBJ) $(C_) $(GLSRC)gscolor.c
+
+$(GLOBJ)gscoord.$(OBJ) : $(GLSRC)gscoord.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(gsccode_h) $(gxcoord_h) $(gxdevice_h) $(gxfarith_h) $(gxfixed_h)\
+ $(gxfont_h) $(gxmatrix_h) $(gxpath_h) $(gzstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscoord.$(OBJ) $(C_) $(GLSRC)gscoord.c
+
+$(GLOBJ)gscparam.$(OBJ) : $(GLSRC)gscparam.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(string__h) $(gsparam_h) $(gsstruct_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscparam.$(OBJ) $(C_) $(GLSRC)gscparam.c
+
+$(GLOBJ)gscspace.$(OBJ) : $(GLSRC)gscspace.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gsstruct_h) $(gsccolor_h) $(gsutil_h)\
+ $(gxcmap_h) $(gxcspace_h) $(gxgstate_h) $(gsovrc_h) $(gsstate_h)\
+ $(gsdevice_h) $(gxdevcli_h) $(gzstate_h) $(gsnamecl_h) $(stream_h)\
+ $(gsicc_h) $(gsicc_manage_h) $(string__h) $(strmio_h) $(gsicc_cache_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscspace.$(OBJ) $(C_) $(GLSRC)gscspace.c
+
+$(GLOBJ)gscicach.$(OBJ) : $(GLSRC)gscicach.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gsccolor_h) $(gxcspace_h) $(gxdcolor_h) $(gscicach_h)\
+ $(memory__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscicach.$(OBJ) $(C_) $(GLSRC)gscicach.c
+
+$(GLOBJ)gsovrc.$(OBJ) : $(GLSRC)gsovrc.c $(AK) $(gx_h) $(gserrors_h)\
+ $(assert__h) $(memory__h) $(gsutil_h) $(gxcomp_h) $(gxdevice_h) $(gsdevice_h)\
+ $(gxgetbit_h) $(gsovrc_h) $(gxdcolor_h) $(gxoprect_h) $(gsbitops_h) $(gxgstate_h)\
+ $(gxdevsop_h) $(gxcldev_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsovrc.$(OBJ) $(C_) $(GLSRC)gsovrc.c
+
+$(GLOBJ)gxoprect.$(OBJ) : $(GLSRC)gxoprect.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gsutil_h) $(gxdevice_h) $(gsdevice_h)\
+ $(gxgetbit_h) $(gxoprect_h) $(gsbitops_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxoprect.$(OBJ) $(C_) $(GLSRC)gxoprect.c
+
+$(GLOBJ)gsdevice.$(OBJ) : $(GLSRC)gsdevice.c $(AK) $(gx_h)\
+ $(gserrors_h) $(ctype__h) $(memory__h) $(string__h) $(gp_h)\
+ $(gscdefs_h) $(gsfname_h) $(gsstruct_h) $(gspath_h)\
+ $(gspaint_h) $(gsmatrix_h) $(gscoord_h) $(gzstate_h)\
+ $(gxcmap_h) $(gxdevice_h) $(gxdevmem_h) $(gxiodev_h) $(gxcspace_h)\
+ $(gsicc_manage_h) $(gscms_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsdevice.$(OBJ) $(C_) $(GLSRC)gsdevice.c
+
+$(GLOBJ)gsdevmem.$(OBJ) : $(GLSRC)gsdevmem.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h) $(memory__h) $(gsdevice_h) $(gxarith_h)\
+ $(gxdevice_h) $(gxdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsdevmem.$(OBJ) $(C_) $(GLSRC)gsdevmem.c
+
+$(GLOBJ)gsdparam.$(OBJ) : $(GLSRC)gsdparam.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(string__h)\
+ $(gsdevice_h) $(gsparam_h) $(gsparamx_h) $(gxdevice_h) $(gxfixed_h)\
+ $(gsicc_manage_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsdparam.$(OBJ) $(C_) $(GLSRC)gsdparam.c
+
+$(GLOBJ)gsfname.$(OBJ) : $(GLSRC)gsfname.c $(AK) $(memory__h)\
+ $(gserrors_h) $(gsfname_h) $(gsmemory_h) $(gstypes_h)\
+ $(gxiodev_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsfname.$(OBJ) $(C_) $(GLSRC)gsfname.c
+
+$(GLOBJ)gsfont.$(OBJ) : $(GLSRC)gsfont.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsstruct_h) $(gsutil_h)\
+ $(gxdevice_h) $(gxfixed_h) $(gxmatrix_h) $(gxfont_h) $(gxfcache_h)\
+ $(gzpath_h) $(gzstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsfont.$(OBJ) $(C_) $(GLSRC)gsfont.c
+
+$(GLOBJ)gsgdata.$(OBJ) : $(GLSRC)gsgdata.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsgdata_h) $(gsmatrix_h) $(gsstruct_h) $(gxfont_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsgdata.$(OBJ) $(C_) $(GLSRC)gsgdata.c
+
+$(GLOBJ)gsgcache.$(OBJ) : $(GLSRC)gsgcache.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gsstruct_h) $(gsgdata_h) $(gsgcache_h)\
+ $(gxfont_h) $(gxfont42_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsgcache.$(OBJ) $(C_) $(GLSRC)gsgcache.c
+
+$(GLOBJ)gsht.$(OBJ) : $(GLSRC)gsht.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(string__h) $(gsstruct_h) $(gsutil_h) $(gxarith_h)\
+ $(gxdevice_h) $(gzht_h) $(gzstate_h) $(gxfmap_h) $(gp_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsht.$(OBJ) $(C_) $(GLSRC)gsht.c
+
+$(GLOBJ)gshtscr.$(OBJ) : $(GLSRC)gshtscr.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(gsstruct_h) $(gxarith_h) $(gxdevice_h) $(gzht_h) $(gzstate_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gshtscr.$(OBJ) $(C_) $(GLSRC)gshtscr.c
+
+$(GLOBJ)gsimage.$(OBJ) : $(GLSRC)gsimage.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(math__h) $(gscspace_h) $(gsimage_h) $(gsmatrix_h) $(gximage_h)\
+ $(gsstruct_h) $(gxarith_h) $(gxdevice_h) $(gxiparam_h) $(gxpath_h)\
+ $(gximask_h) $(gzstate_h) $(gxdevsop_h) $(gsutil_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsimage.$(OBJ) $(C_) $(GLSRC)gsimage.c
+
+$(GLOBJ)gsimpath.$(OBJ) : $(GLSRC)gsimpath.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gsmatrix_h) $(gspaint_h) $(gspath_h) $(gsstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsimpath.$(OBJ) $(C_) $(GLSRC)gsimpath.c
+
+$(GLOBJ)gsinit.$(OBJ) : $(GLSRC)gsinit.c $(AK) $(memory__h) $(stdio__h)\
+ $(gdebug_h) $(gp_h) $(gscdefs_h) $(gslib_h) $(gsmalloc_h) $(gsmemory_h)\
+ $(gxfapi_h) $(valgrind_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsinit.$(OBJ) $(C_) $(GLSRC)gsinit.c
+
+$(GLOBJ)gsiodev.$(OBJ) : $(GLSRC)gsiodev.c $(AK) $(gx_h) $(gserrors_h)\
+ $(errno__h) $(string__h) $(unistd__h) $(gsfname_h)\
+ $(gp_h) $(gscdefs_h) $(gsparam_h) $(gsstruct_h) $(gxiodev_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsiodev.$(OBJ) $(C_) $(GLSRC)gsiodev.c
+
+$(GLOBJ)gsgstate.$(OBJ) : $(GLSRC)gsgstate.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gscie_h) $(gscspace_h) $(gsstruct_h) $(gsutil_h) $(gxfmap_h)\
+ $(gxbitmap_h) $(gxcmap_h) $(gxdht_h) $(gxgstate_h) $(gzht_h) $(gzline_h)\
+ $(gsicc_cache_h) $(gsicc_manage_h) $(gsicc_profilecache_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsgstate.$(OBJ) $(C_) $(GLSRC)gsgstate.c
+
+$(GLOBJ)gsline.$(OBJ) : $(GLSRC)gsline.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h)\
+ $(gscoord_h) $(gsline_h) $(gxfixed_h) $(gxmatrix_h) $(gzstate_h) $(gzline_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsline.$(OBJ) $(C_) $(GLSRC)gsline.c
+
+$(GLOBJ)gsmatrix.$(OBJ) : $(GLSRC)gsmatrix.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h) $(memory__h)\
+ $(gxfarith_h) $(gxfixed_h) $(gxmatrix_h) $(stream_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsmatrix.$(OBJ) $(C_) $(GLSRC)gsmatrix.c
+
+$(GLOBJ)gspaint.$(OBJ) : $(GLSRC)gspaint.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(gpcheck_h) $(gsropt_h) $(gxfixed_h) $(gxmatrix_h) $(gspaint_h)\
+ $(gspath_h) $(gzpath_h) $(gxpaint_h) $(gzstate_h) $(gxdevice_h) $(gxdevmem_h)\
+ $(gzcpath_h) $(gxhldevc_h) $(gsutil_h) $(gxdevsop_h) $(gsicc_cms_h)\
+ $(gdevepo_h) $(gxscanc_h) $(gxpcolor_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gspaint.$(OBJ) $(C_) $(GLSRC)gspaint.c
+
+$(GLOBJ)gsparam.$(OBJ) : $(GLSRC)gsparam.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(string__h) $(gsparam_h) $(gsstruct_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsparam.$(OBJ) $(C_) $(GLSRC)gsparam.c
+
+$(GLOBJ)gsparamx.$(OBJ) : $(AK) $(GLSRC)gsparamx.c $(string__h)\
+ $(gserrors_h) $(gsmemory_h) $(gsparam_h) $(gsparamx_h)\
+ $(gstypes_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsparamx.$(OBJ) $(C_) $(GLSRC)gsparamx.c
+
+# Future replacement for gsparams.c
+$(GLOBJ)gsparam2.$(OBJ) : $(GLSRC)gsparam2.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gsparams_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsparam2.$(OBJ) $(C_) $(GLSRC)gsparam2.c
+
+$(GLOBJ)gsparams.$(OBJ) : $(GLSRC)gsparams.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gsparams_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsparams.$(OBJ) $(C_) $(GLSRC)gsparams.c
+
+$(GLOBJ)gsparaml.$(OBJ) : $(GLSRC)gsparaml.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gsparam_h) $(string__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsparaml.$(OBJ) $(C_) $(GLSRC)gsparaml.c
+
+$(GLOBJ)gspath.$(OBJ) : $(GLSRC)gspath.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(gscoord_h) $(gspath_h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gxfixed_h) $(gxmatrix_h)\
+ $(gzcpath_h) $(gzpath_h) $(gzstate_h) $(gxpaint_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gspath.$(OBJ) $(C_) $(GLSRC)gspath.c
+
+$(GLOBJ)gsstate.$(OBJ) : $(GLSRC)gsstate.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsstruct_h) $(gsutil_h) $(gzstate_h) $(gxcspace_h)\
+ $(gscolor2_h) $(gscoord_h) $(gscie_h)\
+ $(gxclipsr_h) $(gxcmap_h) $(gxdevice_h) $(gxpcache_h)\
+ $(gzht_h) $(gzline_h) $(gspath_h) $(gzpath_h) $(gzcpath_h)\
+ $(gsovrc_h) $(gxcolor2_h) $(gscolor3_h) $(gxpcolor_h) $(gsicc_manage_h)\
+ $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsstate.$(OBJ) $(C_) $(GLSRC)gsstate.c
+
+$(GLOBJ)gstext.$(OBJ) : $(GLSRC)gstext.c $(AK) $(memory__h) $(gdebug_h)\
+ $(gserrors_h) $(gsmemory_h) $(gsstruct_h) $(gstypes_h)\
+ $(gxfcache_h) $(gxdevcli_h) $(gxdcolor_h) $(gxfont_h) $(gxpath_h)\
+ $(gxtext_h) $(gzstate_h) $(gsutil_h) $(gxdevsop_h)\
+ $(gscspace_h) $(gsicc_blacktext_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gstext.$(OBJ) $(C_) $(GLSRC)gstext.c
+
+# We make gsiodevs a separate module so the PS interpreter can replace it.
+
+$(GLD)gsiodevs.dev : $(ECHOGS_XE) $(LIB_MAK) $(GLOBJ)gsiodevs.$(OBJ)\
+ $(GLD)sfile.dev $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)gsiodevs $(GLOBJ)gsiodevs.$(OBJ)
+	$(ADDMOD) $(GLD)gsiodevs -include $(GLD)sfile
+	$(ADDMOD) $(GLD)gsiodevs -iodev stdin stdout stderr
+
+$(GLOBJ)gsiodevs.$(OBJ) : $(GLSRC)gsiodevs.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gxiodev_h) $(stream_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsiodevs.$(OBJ) $(C_) $(GLSRC)gsiodevs.c
+
+###### Internal devices
+
+### Device support
+# PC display color mapping
+$(GLOBJ)gdevpccm.$(OBJ) : $(GLSRC)gdevpccm.c $(AK)\
+ $(gx_h) $(gsmatrix_h) $(gxdevice_h) $(gdevpccm_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevpccm.$(OBJ) $(C_) $(GLSRC)gdevpccm.c
+
+### Memory devices
+
+$(GLOBJ)gdevmem.$(OBJ) : $(GLSRC)gdevmem.c $(AK) $(gx_h) $(gserrors_h) \
+ $(memory__h)\
+ $(gsdevice_h) $(gsrect_h) $(gsstruct_h) $(gstrans_h)\
+ $(gxarith_h) $(gxgetbit_h) $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevmem.$(OBJ) $(C_) $(GLSRC)gdevmem.c
+
+$(GLOBJ)gdevm1.$(OBJ) : $(GLSRC)gdevm1.c $(AK) $(gx_h) $(memory__h)\
+ $(gsrop_h) $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)\
+ $(gserrors_h)
+	$(GLCC) $(GLO_)gdevm1.$(OBJ) $(C_) $(GLSRC)gdevm1.c
+
+$(GLOBJ)gdevm2.$(OBJ) : $(GLSRC)gdevm2.c $(AK) $(gx_h) $(memory__h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevm2.$(OBJ) $(C_) $(GLSRC)gdevm2.c
+
+$(GLOBJ)gdevm4.$(OBJ) : $(GLSRC)gdevm4.c $(AK) $(gx_h) $(memory__h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevm4.$(OBJ) $(C_) $(GLSRC)gdevm4.c
+
+$(GLOBJ)gdevm8.$(OBJ) : $(GLSRC)gdevm8.c $(AK) $(gx_h) $(memory__h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevm8.$(OBJ) $(C_) $(GLSRC)gdevm8.c
+
+$(GLOBJ)gdevm16.$(OBJ) : $(GLSRC)gdevm16.c $(AK) $(gx_h) $(memory__h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevm16.$(OBJ) $(C_) $(GLSRC)gdevm16.c
+
+$(GLOBJ)gdevm24.$(OBJ) : $(GLSRC)gdevm24.c $(AK) $(gx_h) $(memory__h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevm24.$(OBJ) $(C_) $(GLSRC)gdevm24.c
+
+$(GLOBJ)gdevm32.$(OBJ) : $(GLSRC)gdevm32.c $(AK) $(gx_h) $(memory__h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevm32.$(OBJ) $(C_) $(GLSRC)gdevm32.c
+
+$(GLOBJ)gdevm40.$(OBJ) : $(GLSRC)gdevm40.c $(AK) $(gx_h) $(memory__h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevm40.$(OBJ) $(C_) $(GLSRC)gdevm40.c
+
+$(GLOBJ)gdevm48.$(OBJ) : $(GLSRC)gdevm48.c $(AK) $(gx_h) $(memory__h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevm48.$(OBJ) $(C_) $(GLSRC)gdevm48.c
+
+$(GLOBJ)gdevm56.$(OBJ) : $(GLSRC)gdevm56.c $(AK) $(gx_h) $(memory__h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevm56.$(OBJ) $(C_) $(GLSRC)gdevm56.c
+
+$(GLOBJ)gdevm64.$(OBJ) : $(GLSRC)gdevm64.c $(AK) $(gx_h) $(memory__h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevm64.$(OBJ) $(C_) $(GLSRC)gdevm64.c
+
+$(GLOBJ)gdevmx.$(OBJ) : $(GLSRC)gdevmx.c $(AK) $(gx_h) $(memory__h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevmx.$(OBJ) $(C_) $(GLSRC)gdevmx.c
+
+$(GLOBJ)gdevmpla.$(OBJ) : $(GLSRC)gdevmpla.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gsbitops_h) $(gxdcolor_h) $(gxpcolor_h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gxgetbit_h) $(gdevmem_h) $(gdevmpla_h)\
+ $(gxdevsop_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevmpla.$(OBJ) $(C_) $(GLSRC)gdevmpla.c
+
+### Alpha-channel devices
+
+$(GLOBJ)gdevabuf.$(OBJ) : $(GLSRC)gdevabuf.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gdevmem_h) $(gzstate_h) $(gxdevcli_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevabuf.$(OBJ) $(C_) $(GLSRC)gdevabuf.c
+
+### Other built-in devices
+
+# The bbox device can either be used as forwarding device to support
+# graphics functions, or it can be a real target device. We create
+# the bboxutil.dev pseudo device to allow inclusion without putting
+# the bbox device on the list of devices.
+
+$(GLD)bboxutil.dev : $(ECHOGS_XE) $(LIB_MAK) $(GLOBJ)gdevbbox.$(OBJ) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)bboxutil $(GLOBJ)gdevbbox.$(OBJ)
+
+$(GLD)bbox.dev : $(ECHOGS_XE) $(LIB_MAK) $(GLOBJ)gdevbbox.$(OBJ) $(LIB_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(GLD)bbox $(GLOBJ)gdevbbox.$(OBJ)
+
+$(GLOBJ)gdevbbox.$(OBJ) : $(GLSRC)gdevbbox.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h) $(memory__h) $(gdevbbox_h) $(gsdevice_h) $(gsparam_h)\
+ $(gxcpath_h) $(gxdcolor_h) $(gxdevice_h) $(gxiparam_h) $(gxgstate_h)\
+ $(gxpaint_h) $(gxpath_h) $(gdevkrnlsclass_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevbbox.$(OBJ) $(C_) $(GLSRC)gdevbbox.c
+
+$(GLOBJ)gdevhit.$(OBJ) : $(GLSRC)gdevhit.c $(AK) $(std_h)\
+  $(gserrors_h) $(gsmemory_h) $(gstypes_h) $(gxdevice_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevhit.$(OBJ) $(C_) $(GLSRC)gdevhit.c
+
+# A device that stores its data using run-length encoding.
+
+$(GLOBJ)gdevmrun.$(OBJ) : $(GLSRC)gdevmrun.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gxdevice_h) $(gdevmrun_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevmrun.$(OBJ) $(C_) $(GLSRC)gdevmrun.c
+
+# A device that extracts a single plane from multi-plane color.
+
+$(GLOBJ)gdevplnx.$(OBJ) : $(GLSRC)gdevplnx.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gsbitops_h) $(gsrop_h) $(gsstruct_h) $(gsutil_h)\
+ $(gdevplnx_h)\
+ $(gxcmap_h) $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h) $(gxdither_h)\
+ $(gxgetbit_h) $(gxiparam_h) $(gxgstate_h) $(gsstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevplnx.$(OBJ) $(C_) $(GLSRC)gdevplnx.c
+
+### Default driver procedure implementations
+
+$(GLOBJ)gdevdbit.$(OBJ) : $(GLSRC)gdevdbit.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gpcheck_h) $(gdevmem_h) $(gsbittab_h) $(gsrect_h) $(gsropt_h) $(gxcpath_h)\
+ $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h) $(gxgetbit_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevdbit.$(OBJ) $(C_) $(GLSRC)gdevdbit.c
+
+$(GLOBJ)gdevddrw.$(OBJ) : $(GLSRC)gdevddrw.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h) $(memory__h) $(stdint__h) $(gpcheck_h) $(gsrect_h)\
+ $(gxdcolor_h) $(gxdevice_h) $(gxfixed_h) $(gxiparam_h) $(gxgstate_h)\
+ $(gxmatrix_h) $(gxhldevc_h) $(gdevddrw_h) $(gxdtfill_h) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevddrw.$(OBJ) $(C_) $(GLSRC)gdevddrw.c
+
+$(GLOBJ)gdevdsha.$(OBJ) : $(GLSRC)gdevdsha.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gxdevice_h) $(gxcindex_h) \
+ $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevdsha.$(OBJ) $(C_) $(GLSRC)gdevdsha.c
+
+$(GLOBJ)gdevdflt.$(OBJ) : $(GLSRC)gdevdflt.c $(AK) $(gx_h) $(gserrors_h) \
+ $(gsropt_h) $(gxcomp_h) $(gxdevice_h) $(gxdevsop_h) $(math__h) $(gsstruct_h) \
+ $(gxobj_h) $(gdevp14_h) $(gstrans_h) $(gxgstate_h) $(memory__h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevdflt.$(OBJ) $(C_) $(GLSRC)gdevdflt.c
+
+$(GLOBJ)gdevdgbr.$(OBJ) : $(GLSRC)gdevdgbr.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gxdevsop_h)\
+ $(gdevmem_h) $(gxdevice_h) $(gxdevmem_h) $(gxgetbit_h) $(gxlum_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevdgbr.$(OBJ) $(C_) $(GLSRC)gdevdgbr.c
+
+$(GLOBJ)gdevnfwd.$(OBJ) : $(GLSRC)gdevnfwd.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gxdevice_h) $(gxcmap_h) $(memory__h) $(gxdevsop_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevnfwd.$(OBJ) $(C_) $(GLSRC)gdevnfwd.c
+
+# ---------------- Font API ---------------- #
+
+gxfapi_h=$(GLSRC)gxfapi.h
+
+# stub for UFST bridge support  :
+
+$(GLD)gxfapiu.dev : $(LIB_MAK) $(ECHOGS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)gxfapiu
+
+wrfont_h=$(GLSRC)wrfont.h
+write_t1_h=$(GLSRC)write_t1.h
+write_t2_h=$(GLSRC)write_t2.h
+
+$(GLOBJ)write_t1.$(OBJ) : $(GLSRC)write_t1.c $(AK)\
+ $(wrfont_h) $(write_t1_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(FT_CFLAGS) $(GLO_)write_t1.$(OBJ) $(C_) $(GLSRC)write_t1.c
+
+$(GLOBJ)write_t2.$(OBJ) : $(GLSRC)write_t2.c $(AK)\
+ $(wrfont_h) $(write_t2_h) $(gxfont_h) $(gxfont1_h) $(gzstate_h) $(stdpre_h) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(FT_CFLAGS) $(GLO_)write_t2.$(OBJ) $(C_) $(GLSRC)write_t2.c
+
+$(GLOBJ)wrfont.$(OBJ) : $(GLSRC)wrfont.c $(AK)\
+ $(wrfont_h) $(stdio__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(FT_CFLAGS) $(GLO_)wrfont.$(OBJ) $(C_) $(GLSRC)wrfont.c
+
+# stub for UFST bridge :
+
+$(GLD)fapiu.dev : $(INT_MAK) $(ECHOGS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)fapiu
+
+# stub for Bitstream bridge (see fapi_bs.mak):
+
+$(GLD)fapib.dev : $(INT_MAK) $(ECHOGS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)fapib
+
+# FreeType bridge :
+
+# the top-level makefile should define
+# FT_CFLAGS for the include directive and other switches
+
+$(GLD)fapif1.dev : $(INT_MAK) $(ECHOGS_XE) $(GLOBJ)fapi_ft.$(OBJ) \
+ $(GLOBJ)write_t1.$(OBJ) $(GLOBJ)write_t2.$(OBJ) $(GLOBJ)wrfont.$(OBJ) \
+ $(GLD)freetype.dev $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)fapif1 $(GLOBJ)fapi_ft.$(OBJ) $(GLOBJ)write_t1.$(OBJ)
+	$(ADDMOD) $(GLD)fapif1 $(GLOBJ)write_t2.$(OBJ) $(GLOBJ)wrfont.$(OBJ)
+	$(ADDMOD) $(GLD)fapif1 -include $(GLD)freetype
+	$(ADDMOD) $(GLD)fapif1 -fapi fapi_ft
+
+$(GLOBJ)fapi_ft_0.$(OBJ) : $(GLSRC)fapi_ft.c $(AK)\
+ $(stdio__h) $(malloc__h) $(write_t1_h) $(write_t2_h) $(math__h) $(gserrors_h)\
+ $(gsmemory_h) $(gsmalloc_h) $(gxfixed_h) $(gdebug_h) $(gxbitmap_h)\
+ $(gsmchunk_h) $(stream_h) $(gxiodev_h) $(gsfname_h) $(gxfapi_h) $(gxfont1_h)\
+ $(gxfont_h) $(BASEFTCONFH) $(LIB_MAK) $(MAKEDIRS)
+	$(GLFTCC) $(FT_CFLAGS) $(D_)FT_CONFIG_OPTIONS_H=\"$(FTCONFH)\"$(_D) $(GLO_)fapi_ft_0.$(OBJ) $(C_) $(GLSRC)fapi_ft.c
+
+$(GLOBJ)fapi_ft_1.$(OBJ) : $(GLSRC)fapi_ft.c $(AK)\
+ $(stdio__h) $(malloc__h) $(write_t1_h) $(write_t2_h) $(math__h) $(gserrors_h)\
+ $(gsmemory_h) $(gsmalloc_h) $(gxfixed_h) $(gdebug_h) $(gxbitmap_h)\
+ $(gsmchunk_h) $(stream_h) $(gxiodev_h) $(gsfname_h) $(gxfapi_h) $(gxfont1_h)\
+ $(gxfont_h) $(BASEFTCONFH) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(FT_CFLAGS) $(GLO_)fapi_ft_1.$(OBJ) $(C_) $(GLSRC)fapi_ft.c
+
+$(GLOBJ)fapi_ft.$(OBJ) : $(GLOBJ)fapi_ft_$(SHARE_FT).$(OBJ)
+	$(CP_) $(GLOBJ)fapi_ft_$(SHARE_FT).$(OBJ) $(GLOBJ)fapi_ft.$(OBJ)
+
+# stub for FreeType bridge :
+
+$(GLD)fapif0.dev : $(INT_MAK) $(ECHOGS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)fapif0
+
+
+$(GLOBJ)gxfapi.$(OBJ) : $(GLSRC)gxfapi.c $(memory__h) $(gsmemory_h) $(gserrors_h) $(gxdevice_h) \
+                 $(gxfont_h) $(gxfont1_h) $(gxpath_h) $(gxfcache_h) $(gxchrout_h) $(gximask_h) \
+                 $(gscoord_h) $(gspaint_h) $(gspath_h) $(gzstate_h) $(gxfcid_h) $(gxchar_h) \
+                 $(gdebug_h) $(gsimage_h) $(gxfapi_h) $(gsbittab_h) $(gzpath_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxfapi.$(OBJ) $(C_) $(GLSRC)gxfapi.c
+
+$(GLD)gxfapi.dev : $(LIB_MAK) $(ECHOGS_XE) $(GLOBJ)gxfapi.$(OBJ) $(GLD)fapiu$(UFST_BRIDGE).dev \
+                 $(GLD)fapif$(FT_BRIDGE).dev $(GLD)fapib$(BITSTREAM_BRIDGE).dev $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)gxfapi $(GLOBJ)gxfapi.$(OBJ)
+	$(ADDMOD) $(GLD)gxfapi -include $(GLD)fapiu$(UFST_BRIDGE)
+	$(ADDMOD) $(GLD)gxfapi -include $(GLD)fapif$(FT_BRIDGE)
+	$(ADDMOD) $(GLD)gxfapi -include $(GLD)fapib$(BITSTREAM_BRIDGE)
+
+### Other device support
+
+# Provide a mapping between StandardEncoding and ISOLatin1Encoding.
+$(GLOBJ)gdevemap.$(OBJ) : $(GLSRC)gdevemap.c $(AK) $(std_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevemap.$(OBJ) $(C_) $(GLSRC)gdevemap.c
+
+# ----------- Trapping routines ------------ #
+claptrap_h=$(GLSRC)claptrap.h
+claptrap_impl_h=$(GLSRC)claptrap-impl.h
+claptrap=$(GLOBJ)claptrap.$(OBJ) $(GLOBJ)claptrap-init.$(OBJ) \
+ $(GLOBJ)claptrap-planar.$(OBJ)
+
+$(GLOBJ)claptrap.$(OBJ) : $(GLSRC)claptrap.c $(AK) \
+ $(claptrap_h) $(claptrap_impl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)claptrap.$(OBJ) $(C_) $(GLSRC)claptrap.c
+
+$(GLOBJ)claptrap-init.$(OBJ) : $(GLSRC)claptrap-init.c $(AK) \
+ $(claptrap_h) $(claptrap_impl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)claptrap-init.$(OBJ) $(C_) $(GLSRC)claptrap-init.c
+
+$(GLOBJ)claptrap-planar.$(OBJ) : $(GLSRC)claptrap-planar.c $(AK) \
+ $(claptrap_h) $(claptrap_impl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)claptrap-planar.$(OBJ) $(C_) $(GLSRC)claptrap-planar.c
+
+# ----------- ETS routines ------------ #
+ets_h=$(GLSRC)ets.h
+ets_tm_h=$(GLSRC)ets_tm.h
+ets=$(GLOBJ)ets.$(OBJ)
+
+$(GLOBJ)ets_0.$(OBJ) : $(GLSRC)ets.c $(AK) \
+ $(ets_h) $(ets_tm_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)ets_0.$(OBJ) $(C_) $(GLSRC)ets.c
+
+$(GLOBJ)ets.$(OBJ) : $(GLOBJ)ets_$(WITH_CAL).$(OBJ)  $(AK) $(gp_h)
+	$(CP_) $(GLOBJ)ets_$(WITH_CAL).$(OBJ) $(GLOBJ)ets.$(OBJ)
+
+# ----------- Downsampling routines ------------ #
+gxdownscale_h=$(GLSRC)gxdownscale.h
+downscale_=$(GLOBJ)gxdownscale.$(OBJ) $(claptrap) $(ets)
+
+$(GLOBJ)gxdownscale_0.$(OBJ) : $(GLSRC)gxdownscale.c $(AK) $(string__h)\
+ $(gxdownscale_h) $(gserrors_h) $(gdevprn_h) $(assert__h) $(ets_h)\
+ $(gsicc_cache_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxdownscale_0.$(OBJ) $(C_) $(GLSRC)gxdownscale.c
+
+$(GLOBJ)gxdownscale_1.$(OBJ) : $(GLSRC)gxdownscale.c $(AK) $(string__h)\
+ $(gxdownscale_h) $(gserrors_h) $(gdevprn_h) $(assert__h) $(ets_h)\
+ $(gsicc_cache_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(GLO_)gxdownscale_1.$(OBJ) $(C_) $(GLSRC)gxdownscale.c
+
+$(GLOBJ)gxdownscale.$(OBJ) : $(GLOBJ)gxdownscale_$(WITH_CAL).$(OBJ) $(AK) $(gp_h)
+	$(CP_) $(GLOBJ)gxdownscale_$(WITH_CAL).$(OBJ) $(GLOBJ)gxdownscale.$(OBJ)
+
+# ---- Various subclass devices ----
+subclass_=$(GLOBJ)gdevflp.$(OBJ) $(GLOBJ)gdevkrnlsclass.$(OBJ) $(GLOBJ)gdevepo.$(OBJ) \
+ $(GLOBJ)gdevoflt.$(OBJ) $(GLOBJ)gdevnup.$(OBJ) $(GLOBJ)gdevsclass.$(OBJ)
+
+###### Create a pseudo-"feature" for the entire graphics library.
+
+LIB0s=$(GLOBJ)gpmisc.$(OBJ) $(GLOBJ)stream.$(OBJ) $(GLOBJ)strmio.$(OBJ) $(GLOBJ)pagelist.$(OBJ)
+LIB1s=$(GLOBJ)gsalloc.$(OBJ) $(GLOBJ)gxdownscale.$(OBJ) $(downscale_) $(GLOBJ)gdevprn.$(OBJ) $(subclass_)
+LIB2s=$(GLOBJ)gdevmplt.$(OBJ) $(GLOBJ)gsbitcom.$(OBJ) $(GLOBJ)gsbitops.$(OBJ) $(GLOBJ)gsbittab.$(OBJ)
+# Note: gschar.c is no longer required for a standard build;
+# we include it only for backward compatibility for library clients.
+LIB3s=$(GLOBJ)gscedata.$(OBJ) $(GLOBJ)gscencs.$(OBJ) $(GLOBJ)gschar.$(OBJ) $(GLOBJ)gscolor.$(OBJ)
+LIB4s=$(GLOBJ)gscoord.$(OBJ) $(GLOBJ)gscparam.$(OBJ) $(GLOBJ)gscspace.$(OBJ)  $(GLOBJ)gscicach.$(OBJ) $(GLOBJ)gsovrc.$(OBJ) $(GLOBJ)gxoprect.$(OBJ)
+LIB5s=$(GLOBJ)gsdevice.$(OBJ) $(GLOBJ)gsdevmem.$(OBJ) $(GLOBJ)gsdparam.$(OBJ)
+LIB6s=$(GLOBJ)gsfname.$(OBJ) $(GLOBJ)gsfont.$(OBJ) $(GLOBJ)gsgdata.$(OBJ) $(GLOBJ)gsgcache.$(OBJ)
+LIB7s=$(GLOBJ)gsht.$(OBJ) $(GLOBJ)gshtscr.$(OBJ) $(GLOBJ)gen_ordered.$(OBJ)
+LIB8s=$(GLOBJ)gsimage.$(OBJ) $(GLOBJ)gsimpath.$(OBJ) $(GLOBJ)gsinit.$(OBJ)
+LIB9s=$(GLOBJ)gsiodev.$(OBJ) $(GLOBJ)gsgstate.$(OBJ) $(GLOBJ)gsline.$(OBJ)
+LIB10s=$(GLOBJ)gsmalloc.$(OBJ) $(GLOBJ)memento.$(OBJ) $(GLOBJ)bobbin.$(OBJ) $(GLOBJ)gsmatrix.$(OBJ)
+LIB11s=$(GLOBJ)gsmemory.$(OBJ) $(GLOBJ)gsmemret.$(OBJ) $(GLOBJ)gsmisc.$(OBJ) $(GLOBJ)gsnotify.$(OBJ) $(GLOBJ)gslibctx.$(OBJ)
+LIB12s=$(GLOBJ)gspaint.$(OBJ) $(GLOBJ)gsparam.$(OBJ) $(GLOBJ)gspath.$(OBJ)
+LIB13s=$(GLOBJ)gsserial.$(OBJ) $(GLOBJ)gsstate.$(OBJ) $(GLOBJ)gstext.$(OBJ)\
+  $(GLOBJ)gsutil.$(OBJ) $(GLOBJ)gssprintf.$(OBJ) $(GLOBJ)gsstrtok.$(OBJ) $(GLOBJ)gsstrl.$(OBJ)
+LIB1x=$(GLOBJ)gxacpath.$(OBJ) $(GLOBJ)gxbcache.$(OBJ) $(GLOBJ)gxccache.$(OBJ)
+LIB2x=$(GLOBJ)gxccman.$(OBJ) $(GLOBJ)gxchar.$(OBJ) $(GLOBJ)gxcht.$(OBJ)
+LIB3x=$(GLOBJ)gxclip.$(OBJ) $(GLOBJ)gxcmap.$(OBJ) $(GLOBJ)gxcpath.$(OBJ)
+LIB4x=$(GLOBJ)gxdcconv.$(OBJ) $(GLOBJ)gxdcolor.$(OBJ) $(GLOBJ)gxhldevc.$(OBJ)
+LIB5x=$(GLOBJ)gxfill.$(OBJ) $(GLOBJ)gxht.$(OBJ) $(GLOBJ)gxhtbit.$(OBJ)\
+  $(GLOBJ)gxht_thresh.$(OBJ)
+LIB6x=$(GLOBJ)gxidata.$(OBJ) $(GLOBJ)gxifast.$(OBJ) $(GLOBJ)gximage.$(OBJ) $(GLOBJ)gximdecode.$(OBJ)
+LIB7x=$(GLOBJ)gximage1.$(OBJ) $(GLOBJ)gximono.$(OBJ) $(GLOBJ)gxipixel.$(OBJ) $(GLOBJ)gximask.$(OBJ)
+LIB8x=$(GLOBJ)gxi12bit.$(OBJ) $(GLOBJ)gxi16bit.$(OBJ) $(GLOBJ)gxiscale.$(OBJ) $(GLOBJ)gxpaint.$(OBJ) $(GLOBJ)gxpath.$(OBJ) $(GLOBJ)gxpath2.$(OBJ)
+LIB9x=$(GLOBJ)gxpcopy.$(OBJ) $(GLOBJ)gxpdash.$(OBJ) $(GLOBJ)gxpflat.$(OBJ)
+LIB10x=$(GLOBJ)gxsample.$(OBJ) $(GLOBJ)gxstroke.$(OBJ) $(GLOBJ)gxsync.$(OBJ)
+LIB1d=$(GLOBJ)gdevabuf.$(OBJ) $(GLOBJ)gdevdbit.$(OBJ) $(GLOBJ)gdevddrw.$(OBJ) $(GLOBJ)gdevdflt.$(OBJ)
+LIB2d=$(GLOBJ)gdevdgbr.$(OBJ) $(GLOBJ)gdevnfwd.$(OBJ) $(GLOBJ)gdevmem.$(OBJ) $(GLOBJ)gdevplnx.$(OBJ)
+LIB3d=$(GLOBJ)gdevm1.$(OBJ) $(GLOBJ)gdevm2.$(OBJ) $(GLOBJ)gdevm4.$(OBJ) $(GLOBJ)gdevm8.$(OBJ)
+LIB4d=$(GLOBJ)gdevm16.$(OBJ) $(GLOBJ)gdevm24.$(OBJ) $(GLOBJ)gdevm32.$(OBJ) $(GLOBJ)gdevmpla.$(OBJ)
+LIB5d=$(GLOBJ)gdevm40.$(OBJ) $(GLOBJ)gdevm48.$(OBJ) $(GLOBJ)gdevm56.$(OBJ) $(GLOBJ)gdevm64.$(OBJ) $(GLOBJ)gdevmx.$(OBJ)
+LIB6d=$(GLOBJ)gdevdsha.$(OBJ) $(GLOBJ)gxscanc.$(OBJ)
+LIBs=$(LIB0s) $(LIB1s) $(LIB2s) $(LIB3s) $(LIB4s) $(LIB5s) $(LIB6s) $(LIB7s)\
+ $(LIB8s) $(LIB9s) $(LIB10s) $(LIB11s) $(LIB12s) $(LIB13s)
+LIBx=$(LIB1x) $(LIB2x) $(LIB3x) $(LIB4x) $(LIB5x) $(LIB6x) $(LIB7x) $(LIB8x) $(LIB9x) $(LIB10x)
+LIBd=$(LIB1d) $(LIB2d) $(LIB3d) $(LIB4d) $(LIB5d) $(LIB6d)
+LIB_ALL=$(LIBs) $(LIBx) $(LIBd)
+# We include some optional library modules in the dependency list,
+# but not in the link, to catch compilation problems.
+LIB_O=$(GLOBJ)gdevmpla.$(OBJ) $(GLOBJ)gdevmrun.$(OBJ) $(GLOBJ)gshtx.$(OBJ) $(GLOBJ)gsnogc.$(OBJ)
+$(GLD)libs.dev : $(LIB_MAK) $(ECHOGS_XE) $(LIBs) $(LIB_O) $(GLD)gsiodevs.dev $(GLD)translib.dev \
+                 $(GLD)clist.dev $(GLD)gxfapi.dev $(GLD)romfs1.dev $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)libs $(LIB0s)
+	$(ADDMOD) $(GLD)libs $(LIB1s)
+	$(ADDMOD) $(GLD)libs $(LIB2s)
+	$(ADDMOD) $(GLD)libs $(LIB3s)
+	$(ADDMOD) $(GLD)libs $(LIB4s)
+	$(ADDMOD) $(GLD)libs $(LIB5s)
+	$(ADDMOD) $(GLD)libs $(LIB6s)
+	$(ADDMOD) $(GLD)libs $(LIB7s)
+	$(ADDMOD) $(GLD)libs $(LIB8s)
+	$(ADDMOD) $(GLD)libs $(LIB9s)
+	$(ADDMOD) $(GLD)libs $(LIB10s)
+	$(ADDMOD) $(GLD)libs $(LIB11s)
+	$(ADDMOD) $(GLD)libs $(LIB12s)
+	$(ADDMOD) $(GLD)libs $(LIB13s)
+	$(ADDCOMP) $(GLD)libs overprint
+	$(ADDCOMP) $(GLD)libs pdf14trans
+	$(ADDMOD) $(GLD)libs -init gshtscr
+	$(ADDMOD) $(GLD)libs -include $(GLD)gsiodevs
+	$(ADDMOD) $(GLD)libs -include $(GLD)translib
+	$(ADDMOD) $(GLD)libs -include $(GLD)clist
+	$(ADDMOD) $(GLD)libs -include $(GLD)romfs1
+	$(ADDMOD) $(GLD)libs $(GLD)gxfapi
+	$(ADDMOD) $(GLD)libs -init fapi
+$(GLD)libx.dev : $(LIB_MAK) $(ECHOGS_XE) $(LIBx) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)libx $(LIB1x)
+	$(ADDMOD) $(GLD)libx $(LIB2x)
+	$(ADDMOD) $(GLD)libx $(LIB3x)
+	$(ADDMOD) $(GLD)libx $(LIB4x)
+	$(ADDMOD) $(GLD)libx $(LIB5x)
+	$(ADDMOD) $(GLD)libx $(LIB6x)
+	$(ADDMOD) $(GLD)libx $(LIB7x)
+	$(ADDMOD) $(GLD)libx $(LIB8x)
+	$(ADDMOD) $(GLD)libx $(LIB9x)
+	$(ADDMOD) $(GLD)libx $(LIB10x)
+	$(ADDMOD) $(GLD)libx -imageclass 0_interpolate
+	$(ADDMOD) $(GLD)libx -imageclass 1_simple 3_mono
+	$(ADDMOD) $(GLD)libx -imagetype 1 mask1
+
+$(GLD)libd.dev : $(LIB_MAK) $(ECHOGS_XE) $(LIBd) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)libd $(LIB1d)
+	$(ADDMOD) $(GLD)libd $(LIB2d)
+	$(ADDMOD) $(GLD)libd $(LIB3d)
+	$(ADDMOD) $(GLD)libd $(LIB4d)
+	$(ADDMOD) $(GLD)libd $(LIB5d)
+	$(ADDMOD) $(GLD)libd $(LIB6d)
+
+$(GLD)libcore.dev : $(LIB_MAK) $(ECHOGS_XE)\
+ $(GLD)libs.dev $(GLD)libx.dev $(GLD)libd.dev\
+ $(GLD)iscale.dev $(GLD)roplib.dev $(GLD)strdline.dev $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)libcore
+	$(ADDMOD) $(GLD)libcore -dev2 nullpage
+	$(ADDMOD) $(GLD)libcore -include $(GLD)libs $(GLD)libx $(GLD)libd
+	$(ADDMOD) $(GLD)libcore -include $(GLD)iscale $(GLD)roplib
+	$(ADDMOD) $(GLD)libcore -include $(GLD)strdline
+
+# ---------------- Stream support ---------------- #
+# Currently the only things in the library that use this are clists
+# and file streams.
+
+$(GLOBJ)stream.$(OBJ) : $(GLSRC)stream.c $(AK) $(stdio__h) $(memory__h)\
+ $(gdebug_h) $(gpcheck_h) $(stream_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)stream.$(OBJ) $(C_) $(GLSRC)stream.c
+
+# Default, stream-based readline.
+strdline_=$(GLOBJ)gp_strdl.$(OBJ)
+$(GLD)strdline.dev : $(LIB_MAK) $(ECHOGS_XE) $(strdline_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)strdline $(strdline_)
+
+$(GLOBJ)gp_strdl.$(OBJ) : $(GLSRC)gp_strdl.c $(AK) $(std_h) $(gp_h)\
+ $(gsmemory_h) $(gstypes_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gp_strdl.$(OBJ) $(C_) $(GLSRC)gp_strdl.c
+
+# ---------------- File streams ---------------- #
+# Currently only the high-level drivers use these, but more drivers will
+# probably use them eventually.
+
+sfile_=$(GLOBJ)sfx$(FILE_IMPLEMENTATION).$(OBJ) $(GLOBJ)sfxcommon.$(OBJ)\
+ $(GLOBJ)stream.$(OBJ)
+
+$(GLD)sfile.dev : $(LIB_MAK) $(ECHOGS_XE) $(sfile_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)sfile $(sfile_)
+
+$(GLOBJ)sfxcommon.$(OBJ) : $(GLSRC)sfxcommon.c $(AK) $(stdio__h)\
+ $(memory__h) $(unistd__h) $(gsmemory_h) $(gp_h) $(stream_h)\
+ $(gserrors_h) $(assert__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sfxcommon.$(OBJ) $(C_) $(GLSRC)sfxcommon.c
+
+$(GLOBJ)sfxstdio.$(OBJ) : $(GLSRC)sfxstdio.c $(AK) $(stdio__h)\
+ $(memory__h) $(unistd__h) $(gdebug_h) $(gpcheck_h) $(stream_h) $(strimpl_h)\
+ $(gp_h) $(gserrors_h) $(gsmemory_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sfxstdio.$(OBJ) $(C_) $(GLSRC)sfxstdio.c
+
+$(GLOBJ)sfxfd.$(OBJ) : $(GLSRC)sfxfd.c $(AK)\
+ $(stdio__h) $(errno__h) $(memory__h) $(unistd__h)\
+ $(gdebug_h) $(gpcheck_h) $(stream_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sfxfd.$(OBJ) $(C_) $(GLSRC)sfxfd.c
+
+$(GLOBJ)sfxboth.$(OBJ) : $(GLSRC)sfxboth.c $(GLSRC)sfxstdio.c $(GLSRC)sfxfd.c\
+ $(AK) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sfxboth.$(OBJ) $(C_) $(GLSRC)sfxboth.c
+
+strmio_h=$(GLSRC)strmio.h
+
+$(GLOBJ)strmio.$(OBJ) : $(GLSRC)strmio.c $(AK) $(malloc__h)\
+  $(memory__h) $(gdebug_h) $(gsfname_h) $(gslibctx_h) $(gsstype_h)\
+  $(gsmalloc_h) $(gsmemret_h) $(strmio_h) $(stream_h) $(gxiodev_h)\
+ $(gserrors_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)strmio.$(OBJ) $(C_) $(GLSRC)strmio.c
+
+# ---------------- BCP filters ---------------- #
+
+$(GLOBJ)sbcp.$(OBJ) : $(GLSRC)sbcp.c $(AK) $(stdio__h)\
+ $(sbcp_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sbcp.$(OBJ) $(C_) $(GLSRC)sbcp.c
+
+# ---------------- CCITTFax filters ---------------- #
+# These are used by clists, some drivers, and Level 2 in general.
+
+cfe_=$(GLOBJ)scfe.$(OBJ) $(GLOBJ)scfetab.$(OBJ) $(GLOBJ)shc.$(OBJ)
+$(GLD)cfe.dev : $(LIB_MAK) $(ECHOGS_XE) $(cfe_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)cfe $(cfe_)
+
+$(GLOBJ)scfe.$(OBJ) : $(GLSRC)scfe.c $(AK) $(memory__h) $(stdio__h)\
+ $(gdebug_h) $(scf_h) $(strimpl_h) $(scfx_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)scfe.$(OBJ) $(C_) $(GLSRC)scfe.c
+
+$(GLOBJ)scfetab.$(OBJ) : $(GLSRC)scfetab.c $(AK) $(std_h) $(scommon_h)\
+ $(scf_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)scfetab.$(OBJ) $(C_) $(GLSRC)scfetab.c
+
+$(GLOBJ)shc.$(OBJ) : $(GLSRC)shc.c $(AK) $(std_h) $(scommon_h) $(shc_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)shc.$(OBJ) $(C_) $(GLSRC)shc.c
+
+cfd_=$(GLOBJ)scfd.$(OBJ) $(GLOBJ)scfdtab.$(OBJ)
+$(GLD)cfd.dev : $(LIB_MAK) $(ECHOGS_XE) $(cfd_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)cfd $(cfd_)
+
+$(GLOBJ)scfd.$(OBJ) : $(GLSRC)scfd.c $(AK) $(memory__h) $(stdio__h)\
+ $(gdebug_h) $(scf_h) $(strimpl_h) $(scfx_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)scfd.$(OBJ) $(C_) $(GLSRC)scfd.c
+
+$(GLOBJ)scfdtab.$(OBJ) : $(GLSRC)scfdtab.c $(AK) $(std_h) $(scommon_h)\
+ $(scf_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)scfdtab.$(OBJ) $(C_) $(GLSRC)scfdtab.c
+
+# scfparam is used by the filter operator and the PS/PDF writer.
+# It is not included automatically in cfe or cfd.
+$(GLOBJ)scfparam.$(OBJ) : $(GLSRC)scfparam.c $(AK) $(std_h)\
+ $(gserrors_h) $(gsmemory_h) $(gsparam_h) $(gstypes_h)\
+ $(scommon_h) $(scf_h) $(scfx_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)scfparam.$(OBJ) $(C_) $(GLSRC)scfparam.c
+
+# ---------------- DCT (JPEG) filters ---------------- #
+# These are used by Level 2, and by the JPEG-writing driver.
+
+# Common code
+
+sdcparam_h=$(GLSRC)sdcparam.h
+
+sdctc_=$(GLOBJ)sdctc.$(OBJ) $(GLOBJ)sjpegc.$(OBJ)
+
+$(GLOBJ)sdctc.$(OBJ) : $(GLSRC)sdctc.c $(AK) $(stdio__h) $(jpeglib__h)\
+ $(strimpl_h) $(sdct_h) $(sjpeg_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sdctc.$(OBJ) $(C_) $(GLSRC)sdctc.c
+
+$(GLOBJ)sjpegc_1.$(OBJ) : $(GLSRC)sjpegc.c $(AK) $(stdio__h) $(string__h)\
+ $(gx_h) $(jpeglib__h) $(gconfig__h) \
+ $(gserrors_h) $(sjpeg_h) $(sdct_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJCC) $(GLO_)sjpegc_1.$(OBJ) $(C_) $(GLSRC)sjpegc.c
+
+$(GLOBJ)sjpegc_0.$(OBJ) : $(GLSRC)sjpegc.c $(AK) $(stdio__h) $(string__h)\
+ $(gx_h) $(jerror__h) $(jpeglib__h) $(gconfig__h) $(JSRCDIR)$(D)jmemsys.h\
+ $(gserrors_h) $(sjpeg_h) $(sdct_h) $(strimpl_h) $(gsmchunk_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJCC) $(GLO_)sjpegc_0.$(OBJ) $(C_) $(GLSRC)sjpegc.c
+
+$(GLOBJ)sjpegc.$(OBJ) : $(GLOBJ)sjpegc_$(SHARE_JPEG).$(OBJ) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)sjpegc_$(SHARE_JPEG).$(OBJ) $(GLOBJ)sjpegc.$(OBJ)
+
+# sdcparam is used by the filter operator and the PS/PDF writer.
+# It is not included automatically in sdcte/d.
+$(GLOBJ)sdcparam.$(OBJ) : $(GLSRC)sdcparam.c $(AK) $(memory__h)\
+ $(jpeglib__h)\
+ $(gserrors_h) $(gsmemory_h) $(gsparam_h) $(gstypes_h)\
+ $(sdcparam_h) $(sdct_h) $(sjpeg_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sdcparam.$(OBJ) $(C_) $(GLSRC)sdcparam.c
+
+# Encoding (compression)
+
+sdcte_=$(sdctc_) $(GLOBJ)sdcte.$(OBJ) $(GLOBJ)sjpege.$(OBJ)
+$(GLD)sdcte.dev : $(LIB_MAK) $(ECHOGS_XE) $(sdcte_) $(JGENDIR)$(D)jpege.dev \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)sdcte $(sdcte_)
+	$(ADDMOD) $(GLD)sdcte -include $(JGENDIR)$(D)jpege.dev
+
+$(GLOBJ)sdcte_1.$(OBJ) : $(GLSRC)sdcte.c $(AK)\
+ $(memory__h) $(stdio__h) $(jpeglib__h)\
+ $(gdebug_h) $(gsmemory_h) $(strimpl_h) $(sdct_h) $(sjpeg_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJCC) $(GLO_)sdcte_1.$(OBJ) $(C_) $(GLSRC)sdcte.c
+
+$(GLOBJ)sdcte_0.$(OBJ) : $(GLSRC)sdcte.c $(AK)\
+ $(memory__h) $(stdio__h) $(jerror__h) $(jpeglib__h)\
+ $(gdebug_h) $(gsmemory_h) $(strimpl_h) $(sdct_h) $(sjpeg_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJCC) $(GLO_)sdcte_0.$(OBJ) $(C_) $(GLSRC)sdcte.c
+
+$(GLOBJ)sdcte.$(OBJ) : $(GLOBJ)sdcte_$(SHARE_JPEG).$(OBJ) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)sdcte_$(SHARE_JPEG).$(OBJ) $(GLOBJ)sdcte.$(OBJ)
+
+
+$(GLOBJ)sjpege_1.$(OBJ) : $(GLSRC)sjpege.c $(AK)\
+ $(stdio__h) $(string__h) $(gx_h)\
+ $(jpeglib__h)\
+ $(sjpeg_h) $(sdct_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJCC) $(GLO_)sjpege_1.$(OBJ) $(C_) $(GLSRC)sjpege.c
+
+$(GLOBJ)sjpege_0.$(OBJ) : $(GLSRC)sjpege.c $(AK)\
+ $(stdio__h) $(string__h) $(gx_h)\
+ $(jerror__h) $(jpeglib__h)\
+ $(sjpeg_h) $(sdct_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJCC) $(GLO_)sjpege_0.$(OBJ) $(C_) $(GLSRC)sjpege.c
+
+$(GLOBJ)sjpege.$(OBJ) : $(GLOBJ)sjpege_$(SHARE_JPEG).$(OBJ) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)sjpege_$(SHARE_JPEG).$(OBJ) $(GLOBJ)sjpege.$(OBJ)
+
+# sdeparam is used by the filter operator and the PS/PDF writer.
+# It is not included automatically in sdcte.
+sdeparam_=$(GLOBJ)sdeparam.$(OBJ) $(GLOBJ)sdcparam.$(OBJ)
+$(GLD)sdeparam.dev : $(LIB_MAK) $(ECHOGS_XE) $(sdeparam_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)sdeparam $(sdeparam_)
+
+$(GLOBJ)sdeparam.$(OBJ) : $(GLSRC)sdeparam.c $(AK) $(memory__h)\
+ $(jpeglib__h)\
+ $(gserrors_h) $(gsmemory_h) $(gsparam_h) $(gstypes_h)\
+ $(sdcparam_h) $(sdct_h) $(sjpeg_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sdeparam.$(OBJ) $(C_) $(GLSRC)sdeparam.c
+
+# Decoding (decompression)
+
+sdctd_=$(sdctc_) $(GLOBJ)sdctd.$(OBJ) $(GLOBJ)sjpegd.$(OBJ)
+$(GLD)sdctd.dev : $(LIB_MAK) $(ECHOGS_XE) $(sdctd_) $(JGENDIR)$(D)jpegd.dev \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)sdctd $(sdctd_)
+	$(ADDMOD) $(GLD)sdctd -include $(JGENDIR)$(D)jpegd.dev
+
+$(GLOBJ)sdctd_1.$(OBJ) : $(GLSRC)sdctd.c $(AK)\
+ $(memory__h) $(stdio__h) $(jpeglib__h)\
+ $(gdebug_h) $(gsmemory_h) $(strimpl_h) $(sdct_h) $(sjpeg_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJCC) $(GLO_)sdctd_1.$(OBJ) $(C_) $(GLSRC)sdctd.c
+
+$(GLOBJ)sdctd_0.$(OBJ) : $(GLSRC)sdctd.c $(AK)\
+ $(memory__h) $(stdio__h) $(jerror__h) $(jpeglib__h)\
+ $(gdebug_h) $(gsmemory_h) $(strimpl_h) $(sdct_h) $(sjpeg_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJCC) $(GLO_)sdctd_0.$(OBJ) $(C_) $(GLSRC)sdctd.c
+
+$(GLOBJ)sdctd.$(OBJ) : $(GLOBJ)sdctd_$(SHARE_JPEG).$(OBJ) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)sdctd_$(SHARE_JPEG).$(OBJ) $(GLOBJ)sdctd.$(OBJ)
+
+
+$(GLOBJ)sjpegd_1.$(OBJ) : $(GLSRC)sjpegd.c $(AK)\
+ $(stdio__h) $(string__h) $(gx_h)\
+ $(jpeglib__h) $(gserrors_h)\
+ $(sjpeg_h) $(sdct_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJCC) $(GLO_)sjpegd_1.$(OBJ) $(C_) $(GLSRC)sjpegd.c
+
+$(GLOBJ)sjpegd_0.$(OBJ) : $(GLSRC)sjpegd.c $(AK)\
+ $(stdio__h) $(string__h) $(gx_h)\
+ $(jerror__h) $(jpeglib__h)\
+ $(sjpeg_h) $(sdct_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJCC) $(GLO_)sjpegd_0.$(OBJ) $(C_) $(GLSRC)sjpegd.c
+
+
+$(GLOBJ)sjpegd.$(OBJ) : $(GLOBJ)sjpegd_$(SHARE_JPEG).$(OBJ) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)sjpegd_$(SHARE_JPEG).$(OBJ) $(GLOBJ)sjpegd.$(OBJ)
+
+# One .dev for both encoding and decoding
+$(GLD)sdct.dev: $(GLD)sdctd.dev $(GLD)sdcte.dev $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)sdct -include $(GLD)sdctd.dev $(GLD)sdcte.dev
+
+# sddparam is used by the filter operator.
+# It is not included automatically in sdctd.
+sddparam_=$(GLOBJ)sddparam.$(OBJ) $(GLOBJ)sdcparam.$(OBJ)
+$(GLD)sddparam.dev : $(LIB_MAK) $(ECHOGS_XE) $(sddparam_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)sddparam $(sddparam_)
+
+$(GLOBJ)sddparam.$(OBJ) : $(GLSRC)sddparam.c $(AK) $(std_h)\
+ $(jpeglib__h)\
+ $(gserrors_h) $(gsmemory_h) $(gsparam_h) $(gstypes_h)\
+ $(sdcparam_h) $(sdct_h) $(sjpeg_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sddparam.$(OBJ) $(C_) $(GLSRC)sddparam.c
+
+# ---------------- LZW filters ---------------- #
+# These are used by Level 2 in general.
+
+lzwe_=$(GLOBJ)slzwe.$(OBJ) $(GLOBJ)slzwc.$(OBJ)
+$(GLD)lzwe.dev : $(LIB_MAK) $(ECHOGS_XE) $(lzwe_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)lzwe $(lzwe_)
+
+# We need slzwe.dev as a synonym for lzwe.dev for BAND_LIST_STORAGE = memory.
+$(GLD)slzwe.dev : $(GLD)lzwe.dev $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLD)lzwe.dev $(GLD)slzwe.dev
+
+$(GLOBJ)slzwe.$(OBJ) : $(GLSRC)slzwe.c $(AK) $(stdio__h) $(gdebug_h)\
+ $(slzwx_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)slzwe.$(OBJ) $(C_) $(GLSRC)slzwe.c
+
+$(GLOBJ)slzwc.$(OBJ) : $(GLSRC)slzwc.c $(AK) $(std_h)\
+ $(slzwx_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)slzwc.$(OBJ) $(C_) $(GLSRC)slzwc.c
+
+lzwd_=$(GLOBJ)slzwd.$(OBJ) $(GLOBJ)slzwc.$(OBJ)
+$(GLD)lzwd.dev : $(LIB_MAK) $(ECHOGS_XE) $(lzwd_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)lzwd $(lzwd_)
+
+# We need slzwd.dev as a synonym for lzwd.dev for BAND_LIST_STORAGE = memory.
+$(GLD)slzwd.dev : $(GLD)lzwd.dev $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLD)lzwd.dev $(GLD)slzwd.dev
+
+$(GLOBJ)slzwd.$(OBJ) : $(GLSRC)slzwd.c $(AK) $(stdio__h) $(gdebug_h)\
+ $(slzwx_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)slzwd.$(OBJ) $(C_) $(GLSRC)slzwd.c
+
+# ---------------- MD5 digest filter ---------------- #
+
+smd5_=$(GLOBJ)smd5.$(OBJ)
+$(GLD)smd5.dev : $(LIB_MAK) $(ECHOGS_XE) $(smd5_) $(md5_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)smd5 $(smd5_) $(md5_)
+
+$(GLOBJ)smd5.$(OBJ) : $(GLSRC)smd5.c $(AK) $(memory__h)\
+ $(smd5_h) $(strimpl_h) $(stream_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)smd5.$(OBJ) $(C_) $(GLSRC)smd5.c
+
+# -------------- SHA-256 digest filter -------------- #
+
+ssha2_h=$(GLSRC)ssha2.h
+ssha2_=$(GLOBJ)ssha2.$(OBJ)
+$(GLD)ssha2.dev : $(LIB_MAK) $(ECHOGS_XE) $(ssha2_) $(sha2_) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)ssha2 $(ssha2_) $(sha2_)
+
+$(GLOBJ)ssha2.$(OBJ) : $(GLSRC)ssha2.c $(AK) $(memory__h)\
+ $(strimpl_h) $(stream_h) $(ssha2_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)ssha2.$(OBJ) $(C_) $(GLSRC)ssha2.c
+
+# -------------- Arcfour cipher filter --------------- #
+
+sarc4_=$(GLOBJ)sarc4.$(OBJ)
+$(GLD)sarc4.dev : $(LIB_MAK) $(ECHOGS_XE) $(sarc4_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)sarc4 $(sarc4_)
+
+$(GLOBJ)sarc4.$(OBJ) : $(GLSRC)sarc4.c $(AK) $(memory__h)\
+ $(gserrors_h) $(sarc4_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sarc4.$(OBJ) $(C_) $(GLSRC)sarc4.c
+
+# -------------- AES cipher filter --------------- #
+
+saes_=$(GLOBJ)saes.$(OBJ)
+$(GLD)saes.dev : $(LIB_MAK) $(ECHOGS_XE) $(saes_) $(aes_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)saes $(saes_) $(aes_)
+
+$(GLOBJ)saes.$(OBJ) : $(GLSRC)saes.c $(AK) $(memory__h)\
+ $(gserrors_h) $(strimpl_h) $(saes_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)saes.$(OBJ) $(C_) $(GLSRC)saes.c
+
+# ---------------- JBIG2 compression filter ---------------- #
+
+$(GLD)sjbig2.dev : $(LIB_MAK) $(ECHOGS_XE) $(GLD)sjbig2_$(JBIG2_LIB).dev \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLD)sjbig2_$(JBIG2_LIB).dev $(GLD)sjbig2.dev
+
+# jbig2dec version
+sjbig2_jbig2dec=$(GLOBJ)sjbig2.$(OBJ)
+
+$(GLD)sjbig2_jbig2dec.dev : $(LIB_MAK) $(ECHOGS_XE) \
+ $(GLD)jbig2dec.dev $(sjbig2_jbig2dec) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)sjbig2_jbig2dec $(sjbig2_jbig2dec)
+	$(ADDMOD) $(GLD)sjbig2_jbig2dec -include $(GLD)jbig2dec.dev
+
+$(GLD)sjbig2_.dev : $(LIB_MAK) $(ECHOGS_XE) \
+  $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)sjbig2_
+
+# jbig2dec.dev is defined in jbig2.mak
+
+$(GLOBJ)sjbig2.$(OBJ) : $(GLSRC)sjbig2.c $(AK) \
+ $(stdint__h) $(memory__h) $(stdio__h) $(gserrors_h) $(gdebug_h) \
+ $(sjbig2_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJBIG2CC) $(GLO_)sjbig2.$(OBJ) $(C_) $(GLSRC)sjbig2.c
+
+$(GLOBJ)snojbig2.$(OBJ) : $(GLSRC)snojbig2.c $(AK) \
+ $(stdint__h) $(memory__h) $(stdio__h) $(gserrors_h) $(gdebug_h) \
+ $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJBIG2CC) $(GLO_)snojbig2.$(OBJ) $(C_) $(GLSRC)snojbig2.c
+
+# ---------------- JPEG 2000 compression filter ---------------- #
+
+$(GLD)sjpx.dev : $(LIB_MAK) $(ECHOGS_XE) $(GLD)sjpx_$(JPX_LIB).dev $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLD)sjpx_$(JPX_LIB).dev $(GLD)sjpx.dev
+
+$(GLOBJ)sjpx.$(OBJ) : $(GLSRC)sjpx.c $(AK) \
+ $(memory__h) $(gsmalloc_h) \
+ $(gdebug_h) $(strimpl_h) $(sjpx_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJASCC) $(GLO_)sjpx.$(OBJ) $(C_) $(GLSRC)sjpx.c
+
+# openjpeg version
+sjpx_openjpeg=$(GLOBJ)sjpx_openjpeg.$(OBJ)
+$(GLD)sjpx_openjpeg.dev : $(LIB_MAK) $(ECHOGS_XE) \
+ $(GLD)openjpeg.dev $(sjpx_openjpeg) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)sjpx_openjpeg $(sjpx_openjpeg)
+	$(ADDMOD) $(GLD)sjpx_openjpeg -include $(GLD)openjpeg.dev
+
+$(GLOBJ)sjpx_openjpeg.$(OBJ) : $(GLSRC)sjpx_openjpeg.c $(AK) \
+ $(memory__h) $(gserror_h) $(gserrors_h) \
+ $(gdebug_h) $(strimpl_h) $(sjpx_openjpeg_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJPXOPJCC) $(GLO_)sjpx_openjpeg.$(OBJ) \
+		$(C_) $(GLSRC)sjpx_openjpeg.c
+
+# no jpx version
+sjpx_none=$(GLOBJ)sjpx_none.$(OBJ)
+$(GLD)sjpx_.dev : $(LIB_MAK) $(ECHOGS_XE) \
+ $(sjpx_none) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)sjpx_ $(sjpx_none)
+
+$(GLOBJ)sjpx_none.$(OBJ) : $(GLSRC)sjpx_none.c $(AK) \
+ $(memory__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLJPXOPJCC) $(GLO_)sjpx_none.$(OBJ) $(C_) $(GLSRC)sjpx_none.c
+
+# ---------------- Pixel-difference filters ---------------- #
+# The Predictor facility of the LZW and Flate filters uses these.
+
+pdiff_=$(GLOBJ)spdiff.$(OBJ)
+$(GLD)pdiff.dev : $(LIB_MAK) $(ECHOGS_XE) $(pdiff_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)pdiff $(pdiff_)
+
+$(GLOBJ)spdiff.$(OBJ) : $(GLSRC)spdiff.c $(AK) $(memory__h) $(stdio__h)\
+ $(spdiffx_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)spdiff.$(OBJ) $(C_) $(GLSRC)spdiff.c
+
+# ---------------- PNG pixel prediction filters ---------------- #
+# The Predictor facility of the LZW and Flate filters uses these.
+
+pngp_=$(GLOBJ)spngp.$(OBJ)
+$(GLD)pngp.dev : $(LIB_MAK) $(ECHOGS_XE) $(pngp_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)pngp $(pngp_)
+
+$(GLOBJ)spngp.$(OBJ) : $(GLSRC)spngp.c $(AK) $(memory__h)\
+ $(spngpx_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)spngp.$(OBJ) $(C_) $(GLSRC)spngp.c
+
+# ---------------- RunLength filters ---------------- #
+# These are used by clists and also by Level 2 in general.
+
+rle_=$(GLOBJ)srle.$(OBJ)
+$(GLD)rle.dev : $(LIB_MAK) $(ECHOGS_XE) $(rle_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)rle $(rle_)
+
+$(GLOBJ)srle.$(OBJ) : $(GLSRC)srle.c $(AK) $(stdio__h) $(memory__h)\
+ $(srlx_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)srle.$(OBJ) $(C_) $(GLSRC)srle.c
+
+rld_=$(GLOBJ)srld.$(OBJ)
+$(GLD)rld.dev : $(LIB_MAK) $(ECHOGS_XE) $(rld_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)rld $(rld_)
+
+$(GLOBJ)srld.$(OBJ) : $(GLSRC)srld.c $(AK) $(stdio__h) $(memory__h)\
+ $(srlx_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)srld.$(OBJ) $(C_) $(GLSRC)srld.c
+
+# ---------------- PWG RunLength decode filter ---------------- #
+
+pwgd_=$(GLOBJ)spwgd.$(OBJ)
+$(GLD)pwgd.dev : $(LIB_MAK) $(ECHOGS_XE) $(pwgd_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)pwgd $(pwgd_)
+
+$(GLOBJ)spwgd.$(OBJ) : $(GLSRC)spwgd.c $(AK) $(stdio__h) $(memory__h)\
+ $(spwgx_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)spwgd.$(OBJ) $(C_) $(GLSRC)spwgd.c
+
+# ---------------- URF RunLength decode filter ---------------- #
+
+urfd_=$(GLOBJ)surfd.$(OBJ)
+$(GLD)urfd.dev : $(LIB_MAK) $(ECHOGS_XE) $(urfd_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)urfd $(urfd_)
+
+$(GLOBJ)surfd.$(OBJ) : $(URFSRCDIR)$(D)surfd.c $(AK) $(stdio__h) $(memory__h)\
+ $(surfx_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)surfd.$(OBJ) $(C_) $(URFSRCDIR)$(D)surfd.c
+
+# ---------------- String encoding/decoding filters ---------------- #
+# These are used by the PostScript and PDF writers, and also by the
+# PostScript interpreter.
+
+$(GLOBJ)sa85d.$(OBJ) : $(GLSRC)sa85d.c $(AK) $(std_h)\
+ $(sa85d_h) $(scanchar_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sa85d.$(OBJ) $(C_) $(GLSRC)sa85d.c
+
+$(GLOBJ)scantab.$(OBJ) : $(GLSRC)scantab.c $(AK) $(stdpre_h)\
+ $(scanchar_h) $(scommon_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)scantab.$(OBJ) $(C_) $(GLSRC)scantab.c
+
+$(GLOBJ)sfilter2.$(OBJ) : $(GLSRC)sfilter2.c $(AK) $(memory__h)\
+ $(stdio__h) $(gdebug_h) $(sa85x_h) $(scanchar_h) $(sbtx_h) $(strimpl_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sfilter2.$(OBJ) $(C_) $(GLSRC)sfilter2.c
+
+$(GLOBJ)sfilter1.$(OBJ) : $(GLSRC)sfilter1.c $(AK) $(stdio__h) $(memory__h)\
+ $(sfilter_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sfilter1.$(OBJ) $(C_) $(GLSRC)sfilter1.c
+
+$(GLD)psfilters.dev : $(ECHOGS_XE) $(LIB_MAK) $(GLOBJ)sfilter2.$(OBJ)\
+  $(GLOBJ)sfilter1.$(OBJ) $(GLOBJ)sa85d.$(OBJ) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)psfilters $(GLOBJ)sfilter1.$(OBJ) $(GLOBJ)sfilter2.$(OBJ) $(GLOBJ)sa85d.$(OBJ)
+	$(ADDMOD) $(GLD)psfilters $(GLOBJ)sa85d.$(OBJ)
+
+$(GLOBJ)sstring.$(OBJ) : $(GLSRC)sstring.c $(AK)\
+ $(stdio__h) $(memory__h) $(string__h)\
+ $(scanchar_h) $(sstring_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sstring.$(OBJ) $(C_) $(GLSRC)sstring.c
+
+$(GLOBJ)spprint.$(OBJ) : $(GLSRC)spprint.c $(AK)\
+ $(math__h) $(stdio__h) $(string__h)\
+ $(spprint_h) $(stream_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)spprint.$(OBJ) $(C_) $(GLSRC)spprint.c
+
+$(GLOBJ)spsdf.$(OBJ) : $(GLSRC)spsdf.c $(AK) $(stdio__h) $(string__h)\
+ $(gserrors_h) $(gsmemory_h) $(gstypes_h)\
+ $(sa85x_h) $(scanchar_h) $(spprint_h) $(spsdf_h)\
+ $(sstring_h) $(stream_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)spsdf.$(OBJ) $(C_) $(GLSRC)spsdf.c
+
+# ---------------- zlib filters ---------------- #
+# These are used by clists and are also available as filters.
+
+szlibc_=$(GLOBJ)szlibc.$(OBJ)
+
+zconf_h=$(ZSRCDIR)$(D)zconf.h
+$(GLOBJ)szlibc_1.$(OBJ) : $(GLSRC)szlibc.c $(AK) $(std_h)\
+ $(gserrors_h) $(gsmemory_h) \
+ $(gsstruct_h) $(gstypes_h)\
+ $(strimpl_h) $(szlibxx_h_1) $(LIB_MAK) $(MAKEDIRS)
+	$(GLZCC) $(GLO_)szlibc_1.$(OBJ) $(C_) $(GLSRC)szlibc.c
+
+$(GLOBJ)szlibc_0.$(OBJ) : $(GLSRC)szlibc.c $(AK) $(std_h)\
+ $(gserrors_h) $(gsmemory_h) $(zconf_h)\
+ $(gsstruct_h) $(gstypes_h) $(zlib_h)\
+ $(strimpl_h) $(szlibxx_h_0) $(LIB_MAK) $(MAKEDIRS)
+	$(GLZCC) $(GLO_)szlibc_0.$(OBJ) $(C_) $(GLSRC)szlibc.c
+
+$(GLOBJ)szlibc.$(OBJ) : $(GLOBJ)szlibc_$(SHARE_ZLIB).$(OBJ) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)szlibc_$(SHARE_ZLIB).$(OBJ) $(GLOBJ)szlibc.$(OBJ)
+
+szlibe_=$(szlibc_) $(GLOBJ)szlibe.$(OBJ)
+$(GLD)szlibe.dev : $(LIB_MAK) $(ECHOGS_XE) $(ZGENDIR)$(D)zlibe.dev $(szlibe_) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)szlibe $(szlibe_)
+	$(ADDMOD) $(GLD)szlibe -include $(ZGENDIR)$(D)zlibe.dev
+
+$(GLOBJ)szlibe_1.$(OBJ) : $(GLSRC)szlibe.c $(AK) $(std_h)\
+ $(strimpl_h) $(szlibxx_h_1) $(LIB_MAK) $(MAKEDIRS)
+	$(GLZCC) $(GLO_)szlibe_1.$(OBJ) $(C_) $(GLSRC)szlibe.c
+
+$(GLOBJ)szlibe_0.$(OBJ) : $(GLSRC)szlibe.c $(AK) $(std_h)\
+ $(strimpl_h) $(szlibxx_h_0) $(zlib_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLZCC) $(GLO_)szlibe_0.$(OBJ) $(C_) $(GLSRC)szlibe.c
+
+$(GLOBJ)szlibe.$(OBJ) : $(GLOBJ)szlibe_$(SHARE_ZLIB).$(OBJ)  $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)szlibe_$(SHARE_ZLIB).$(OBJ) $(GLOBJ)szlibe.$(OBJ)
+
+szlibd_=$(szlibc_) $(GLOBJ)szlibd.$(OBJ)
+$(GLD)szlibd.dev : $(LIB_MAK) $(ECHOGS_XE) $(ZGENDIR)$(D)zlibd.dev $(szlibd_) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)szlibd $(szlibd_)
+	$(ADDMOD) $(GLD)szlibd -include $(ZGENDIR)$(D)zlibd.dev
+
+$(GLOBJ)szlibd_1.$(OBJ) : $(GLSRC)szlibd.c $(AK) $(std_h) $(memory__h)\
+ $(strimpl_h) $(szlibxx_h_1) $(LIB_MAK) $(MAKEDIRS)
+	$(GLZCC) $(GLO_)szlibd_1.$(OBJ) $(C_) $(GLSRC)szlibd.c
+
+$(GLOBJ)szlibd_0.$(OBJ) : $(GLSRC)szlibd.c $(AK) $(std_h) $(memory__h)\
+ $(strimpl_h) $(szlibxx_h_0) $(zlib_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLZCC) $(GLO_)szlibd_0.$(OBJ) $(C_) $(GLSRC)szlibd.c
+
+$(GLOBJ)szlibd.$(OBJ) : $(GLOBJ)szlibd_$(SHARE_ZLIB).$(OBJ) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)szlibd_$(SHARE_ZLIB).$(OBJ) $(GLOBJ)szlibd.$(OBJ)
+
+# ---------------- Page devices ---------------- #
+# We include this here, rather than in devs.mak, because it is more like
+# a feature than a simple device.
+
+gdevprn_h=$(GLSRC)gdevprn.h
+gdevmplt_h=$(GLSRC)gdevmplt.h
+
+page_=$(GLOBJ)gdevprn.$(OBJ) $(GLOBJ)gdevppla.$(OBJ) $(GLOBJ)gdevmplt.$(OBJ) $(GLOBJ)gdevflp.$(OBJ)\
+ $(downscale_) $(GLOBJ)gdevoflt.$(OBJ) $(GLOBJ)gdevnup.$(OBJ) $(GLOBJ)gdevsclass.$(OBJ) $(GLOBJ)gdevepo.$(OBJ)
+
+$(GLD)page.dev : $(LIB_MAK) $(ECHOGS_XE) $(page_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)page $(page_)
+	$(ADDMOD) $(GLD)page -include $(GLD)clist
+
+$(GLOBJ)gdevprn.$(OBJ) : $(GLSRC)gdevprn.c $(ctype__h) $(gdevprn_h) $(gp_h)\
+ $(gsdevice_h) $(gsfname_h) $(gsparam_h) $(gxclio_h) $(gxgetbit_h)\
+ $(gdevplnx_h) $(gstrans_h) $(gdevkrnlsclass_h) $(gxdownscale_h) $(gdevdevn_h)\
+ $(gxdevsop_h) $(gsbitops_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevprn.$(OBJ) $(C_) $(GLSRC)gdevprn.c
+
+$(GLOBJ)gdevmplt.$(OBJ) : $(GLSRC)gdevmplt.c $(gdevmplt_h) $(gdevp14_h)\
+ $(gdevprn_h) $(gdevsclass_h) $(gsdevice_h) $(gserrors_h) $(gsparam_h)\
+ $(gsstype_h) $(gx_h) $(gxcmap_h) $(gxcpath_h) $(gxdcconv_h) $(gxdcolor_h)\
+ $(gxdevice_h) $(gxgstate_h) $(gxiparam_h) $(gxpaint_h) $(gxpath_h) $(math__h)\
+ $(memory__h)
+	$(GLCC) $(GLO_)gdevmplt.$(OBJ) $(C_) $(GLSRC)gdevmplt.c
+
+$(GLOBJ)pagelist.$(OBJ) : $(GLSRC)pagelist.c $(pagelist_h) $(gserrors_h) $(memory__h)
+	$(GLCC) $(GLO_)pagelist.$(OBJ) $(C_) $(GLSRC)pagelist.c
+
+$(GLOBJ)gdevflp.$(OBJ) : $(GLSRC)gdevflp.c $(gdevflp_h) $(gdevp14_h) \
+ $(gdevprn_h) $(gdevsclass_h) $(gsdevice_h) $(gserrors_h) $(gsparam_h)\
+ $(gsstype_h) $(gx_h) $(gxcmap_h) $(gxcpath_h) $(gxdcolor_h) $(gxdevice_h) \
+ $(gxgstate_h) $(gximage_h) $(gxiparam_h) $(gxpaint_h) $(gxpath_h) $(math__h)\
+ $(string__h) $(memory__h)
+	$(GLCC) $(GLO_)gdevflp.$(OBJ) $(C_) $(GLSRC)gdevflp.c
+
+$(GLOBJ)gdevepo.$(OBJ) : $(GLSRC)gdevepo.c $(gdevepo_h) $(gdevp14_h) \
+ $(gdevprn_h) $(gdevsclass_h) $(gsdevice_h) $(gserrors_h) $(gsparam_h)\
+ $(gsstate_h) $(gsstype_h) $(gx_h) $(gxcmap_h) $(gxcpath_h) $(gxdcolor_h)\
+ $(gxdevice_h) $(gxdevsop_h) $(gxgstate_h) $(gximage_h) $(gxiparam_h)\
+ $(gxpaint_h) $(gxpath_h) $(math__h) $(memory__h)
+	$(GLCC) $(GLO_)gdevepo.$(OBJ) $(C_) $(GLSRC)gdevepo.c
+
+$(GLOBJ)gdevoflt.$(OBJ) : $(GLSRC)gdevoflt.c $(gdevoflt_h) $(gdevp14_h)\
+ $(gdevprn_h) $(gdevsclass_h) $(gsdevice_h) $(gserrors_h) $(gsparam_h)\
+ $(gsstype_h) $(gx_h) $(gxcmap_h) $(gxcpath_h) $(gxdcolor_h) $(gxdevice_h)\
+ $(gximage_h) $(gxiparam_h) $(gxpaint_h) $(gxpath_h) $(math__h) $(memory__h)
+	$(GLCC) $(GLO_)gdevoflt.$(OBJ) $(C_) $(GLSRC)gdevoflt.c
+
+$(GLOBJ)gdevnup.$(OBJ) : $(GLSRC)gdevnup.c $(gdevnup_h) $(gdevp14_h)\
+ $(gdevprn_h) $(gdevsclass_h) $(gsdevice_h) $(gserrors_h) $(gsparam_h)\
+ $(gsstype_h) $(gx_h) $(gxdevice_h)\
+ $(math__h) $(memory__h)
+	$(GLCC) $(GLO_)gdevnup.$(OBJ) $(C_) $(GLSRC)gdevnup.c
+
+$(GLOBJ)gdevsclass.$(OBJ) : $(GLSRC)gdevsclass.c $(gdevsclass_h) $(gdevp14_h)\
+ $(gdevprn_h) $(gsdevice_h) $(gserrors_h) $(gsparam_h) $(gsstype_h) $(gx_h)\
+ $(gxcmap_h) $(gxcpath_h) $(gxdcolor_h) $(gxdevice_h) $(gxgstate_h)\
+ $(gxiparam_h) $(gxpaint_h) $(gxpath_h) $(math__h) $(memory__h)
+	$(GLCC) $(GLO_)gdevsclass.$(OBJ) $(C_) $(GLSRC)gdevsclass.c
+
+$(GLOBJ)gdevkrnlsclass.$(OBJ) : $(GLSRC)gdevkrnlsclass.c $(gdevkrnlsclass_h)\
+ $(gx_h) $(gxdcolor_h)
+	$(GLCC) $(GLO_)gdevkrnlsclass.$(OBJ) $(C_) $(GLSRC)gdevkrnlsclass.c
+
+# Planar page devices
+gdevppla_h=$(GLSRC)gdevppla.h
+
+$(GLOBJ)gdevppla.$(OBJ) : $(GLSRC)gdevppla.c\
+ $(gdevmpla_h) $(gdevppla_h) $(gdevprn_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevppla.$(OBJ) $(C_) $(GLSRC)gdevppla.c
+
+# ---------------- Masked images ---------------- #
+# This feature is out of level order because Patterns require it
+# (which they shouldn't) and because band lists treat ImageType 4
+# images as a special case (which they shouldn't).
+
+gsiparm3_h=$(GLSRC)gsiparm3.h
+gsiparm4_h=$(GLSRC)gsiparm4.h
+gximage3_h=$(GLSRC)gximage3.h
+
+$(GLOBJ)gxclipm.$(OBJ) : $(GLSRC)gxclipm.c $(AK) $(gx_h) $(memory__h)\
+ $(gsbittab_h) $(gxclipm_h) $(gxdevice_h) $(gxdevmem_h) $(gxdcolor_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclipm.$(OBJ) $(C_) $(GLSRC)gxclipm.c
+
+$(GLOBJ)gximage3.$(OBJ) : $(GLSRC)gximage3.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h) $(memory__h)\
+ $(gsbitops_h) $(gscspace_h) $(gsstruct_h)\
+ $(gxclipm_h) $(gxdevice_h) $(gxdevmem_h) $(gximage3_h) $(gxgstate_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gximage3.$(OBJ) $(C_) $(GLSRC)gximage3.c
+
+$(GLOBJ)gximage4.$(OBJ) : $(GLSRC)gximage4.c $(memory__h) $(AK)\
+ $(gx_h) $(gserrors_h)\
+ $(gscspace_h) $(gsiparm4_h) $(gxiparam_h) $(gximage_h)\
+ $(stream_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gximage4.$(OBJ) $(C_) $(GLSRC)gximage4.c
+
+imasklib_=$(GLOBJ)gxclipm.$(OBJ) $(GLOBJ)gximage3.$(OBJ) $(GLOBJ)gximage4.$(OBJ) $(GLOBJ)gxmclip.$(OBJ)
+$(GLD)imasklib.dev : $(LIB_MAK) $(ECHOGS_XE) $(imasklib_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)imasklib $(imasklib_)
+	$(ADDMOD) $(GLD)imasklib -imagetype 3 4
+
+# ---------------- Banded ("command list") devices ---------------- #
+
+gxcldev_h=$(GLSRC)gxcldev.h
+gxclpage_h=$(GLSRC)gxclpage.h
+gxclpath_h=$(GLSRC)gxclpath.h
+
+clbase1_=$(GLOBJ)gxclist.$(OBJ) $(GLOBJ)gxclbits.$(OBJ) $(GLOBJ)gxclpage.$(OBJ)
+clbase2_=$(GLOBJ)gxclrast.$(OBJ) $(GLOBJ)gxclread.$(OBJ) $(GLOBJ)gxclrect.$(OBJ)
+clbase3_=$(GLOBJ)gxclutil.$(OBJ) $(GLOBJ)gsparams.$(OBJ) $(GLOBJ)gsparaml.$(OBJ) $(GLOBJ)gsparamx.$(OBJ) $(GLOBJ)gxshade6.$(OBJ)
+# gxclrect.c requires rop_proc_table, so we need gsroptab here.
+clbase4_=$(GLOBJ)gsroptab.$(OBJ) $(GLOBJ)gsroprun.$(OBJ) $(GLOBJ)stream.$(OBJ)
+clpath_=$(GLOBJ)gxclimag.$(OBJ) $(GLOBJ)gxclpath.$(OBJ) $(GLOBJ)gxdhtserial.$(OBJ)
+clthread_=$(GLOBJ)gxclthrd.$(OBJ) $(GLOBJ)gsmchunk.$(OBJ)
+clist_=$(clbase1_) $(clbase2_) $(clbase3_) $(clbase4_) $(clpath_) $(clthread_)
+
+# The old code selected one of clmemory, clfile depending on BAND_LIST_STORAGE.
+# Now we meed clmemory to be included permanently for large patterns,
+# and clfile to be included on demand.
+# clfile works for page clist iff it is included.
+
+$(GLD)clist.dev : $(LIB_MAK) $(ECHOGS_XE) $(clist_)\
+ $(GLD)cl$(BAND_LIST_STORAGE).dev $(GLD)clmemory.dev $(GLD)$(SYNC).dev\
+ $(GLD)cfe.dev $(GLD)cfd.dev $(GLD)rle.dev $(GLD)rld.dev $(GLD)psl2cs.dev \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)clist $(clbase1_)
+	$(ADDMOD) $(GLD)clist -obj $(clbase2_)
+	$(ADDMOD) $(GLD)clist -obj $(clbase3_)
+	$(ADDMOD) $(GLD)clist -obj $(clbase4_)
+	$(ADDMOD) $(GLD)clist -obj $(clpath_)
+	$(ADDMOD) $(GLD)clist -obj $(clthread_)
+	$(ADDMOD) $(GLD)clist -include $(GLD)cl$(BAND_LIST_STORAGE)
+	$(ADDMOD) $(GLD)clist -include $(GLD)clmemory $(GLD)$(SYNC).dev
+	$(ADDMOD) $(GLD)clist -include $(GLD)cfe $(GLD)cfd $(GLD)rle $(GLD)rld $(GLD)psl2cs
+
+$(GLOBJ)gxclist.$(OBJ) : $(GLSRC)gxclist.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(string__h) $(gp_h) $(gpcheck_h) $(gsparams_h) $(valgrind_h)\
+ $(gxcldev_h) $(gxclpath_h) $(gxdevice_h) $(gxdevmem_h) $(gxdcolor_h)\
+ $(gscms_h) $(gsicc_manage_h) $(gsicc_cache_h) $(gxdevsop_h) $(gxobj_h) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclist.$(OBJ) $(C_) $(GLSRC)gxclist.c
+
+$(GLOBJ)gxclbits.$(OBJ) : $(GLSRC)gxclbits.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gpcheck_h) $(gdevprn_h) $(gxpcolor_h)\
+ $(gsbitops_h) $(gxcldev_h) $(gxdevice_h) $(gxdevmem_h) $(gxfmap_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclbits.$(OBJ) $(C_) $(GLSRC)gxclbits.c
+
+$(GLOBJ)gxclpage.$(OBJ) : $(GLSRC)gxclpage.c $(AK)\
+ $(gdevprn_h) $(gdevdevn_h) $(gxcldev_h) $(gxclpage_h) $(gsicc_cache_h) $(string__h)\
+ $(gsparams_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclpage.$(OBJ) $(C_) $(GLSRC)gxclpage.c
+
+$(GLOBJ)gxclrast.$(OBJ) : $(GLSRC)gxclrast.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gp_h) $(gpcheck_h) $(gscoord_h)\
+ $(gscdefs_h) $(gsbitops_h) $(gsparams_h) $(gsstate_h)\
+ $(gstrans_h) $(gxdcolor_h) $(gxpcolor_h) $(gxdevice_h)\
+ $(gsdevice_h) $(gsiparm4_h)\
+ $(gxdevmem_h) $(gxcldev_h) $(gxclpath_h) $(gxcmap_h)\
+ $(gxcolor2_h) $(gxcspace_h) $(gxdhtres_h) $(gxgetbit_h)\
+ $(gxpaint_h) $(gxhttile_h) $(gxiparam_h) $(gximask_h)\
+ $(gzpath_h) $(gzcpath_h) $(gzacpath_h)\
+ $(stream_h) $(strimpl_h) $(gxcomp_h)\
+ $(gsserial_h) $(gxdhtserial_h) $(gzht_h)\
+ $(gxshade_h) $(gxshade4_h) $(gsicc_manage_h)\
+ $(gsicc_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclrast.$(OBJ) $(C_) $(GLSRC)gxclrast.c
+
+$(GLOBJ)gxclread.$(OBJ) : $(GLSRC)gxclread.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gp_h) $(gpcheck_h) $(gdevplnx_h) $(gdevprn_h) $(gscoord_h)\
+ $(gsdevice_h) $(gxcldev_h) $(gxdevice_h) $(gxdevmem_h) $(gxgetbit_h)\
+ $(gxhttile_h) $(gsmemory_h) $(stream_h) $(strimpl_h) $(gsicc_cache_h)\
+ $(gdevp14_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclread.$(OBJ) $(C_) $(GLSRC)gxclread.c
+
+$(GLOBJ)gxclrect.$(OBJ) : $(GLSRC)gxclrect.c $(AK) $(gx_h)\
+ $(gserrors_h)\
+ $(gsutil_h) $(gxcldev_h) $(gxdevice_h) $(gxdevmem_h) $(gxclpath_h)\
+ $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclrect.$(OBJ) $(C_) $(GLSRC)gxclrect.c
+
+$(GLOBJ)gxclimag.$(OBJ) : $(GLSRC)gxclimag.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h) $(memory__h) $(string__h) $(gscdefs_h) $(gscspace_h)\
+ $(gxarith_h) $(gxcldev_h) $(gxclpath_h) $(gxcspace_h) $(gxpcolor_h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gxfmap_h) $(gxiparam_h) $(gxpath_h)\
+ $(sisparam_h) $(stream_h) $(strimpl_h) $(gxcomp_h) $(gsserial_h)\
+ $(gxdhtserial_h) $(gsptype1_h) $(gsicc_manage_h) $(gsicc_cache_h)\
+ $(gxdevsop_h) $(gscindex_h) $(gsicc_cms_h) $(gximdecode_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclimag.$(OBJ) $(C_) $(GLSRC)gxclimag.c
+
+$(GLOBJ)gxclpath.$(OBJ) : $(GLSRC)gxclpath.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(gpcheck_h) $(gsptype2_h) $(gsptype1_h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gxcldev_h) $(gxclpath_h) $(gxcolor2_h)\
+ $(gxdcolor_h) $(gxpaint_h) $(gxdevsop_h) $(gzpath_h) $(gzcpath_h)\
+ $(stream_h) $(gsserial_h) $(gxpcolor_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclpath.$(OBJ) $(C_) $(GLSRC)gxclpath.c
+
+$(GLOBJ)gxdhtserial.$(OBJ) : $(GLSRC)gxdhtserial.c $(memory__h) $(AK)\
+ $(gx_h) $(gserrors_h)\
+ $(gscdefs_h) $(gsstruct_h) $(gsutil_h) $(gzstate_h) $(gxdevice_h) $(gzht_h)\
+ $(gxdhtres_h) $(gsserial_h) $(gxdhtserial_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxdhtserial.$(OBJ) $(C_) $(GLSRC)gxdhtserial.c
+
+$(GLOBJ)gxclutil.$(OBJ) : $(GLSRC)gxclutil.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(string__h) $(gp_h) $(gpcheck_h) $(gsparams_h)\
+ $(gxcldev_h) $(gxclpath_h) $(gxdevice_h) $(gxdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclutil.$(OBJ) $(C_) $(GLSRC)gxclutil.c
+
+# Implement band lists on files.
+
+clfile_=$(GLOBJ)gxclfile.$(OBJ)
+$(GLD)clfile.dev : $(LIB_MAK) $(ECHOGS_XE) $(clfile_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)clfile $(clfile_)
+	$(ADDMOD) $(GLD)clfile -init gxclfile
+
+$(GLOBJ)gxclfile.$(OBJ) : $(GLSRC)gxclfile.c $(stdio__h) $(string__h)\
+ $(gp_h) $(gsmemory_h) $(gserrors_h) $(gxclio_h) $(unistd__h) $(valgrind_h) \
+ $(assert__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclfile.$(OBJ) $(C_) $(GLSRC)gxclfile.c
+
+# Implement band lists in memory (RAM).
+
+clmemory_=$(GLOBJ)gxclmem.$(OBJ) $(GLOBJ)gxcl$(BAND_LIST_COMPRESSOR).$(OBJ)
+$(GLD)clmemory.dev : $(LIB_MAK) $(ECHOGS_XE) $(clmemory_) $(GLD)s$(BAND_LIST_COMPRESSOR)e.dev \
+  $(GLD)s$(BAND_LIST_COMPRESSOR)d.dev $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)clmemory $(clmemory_)
+	$(ADDMOD) $(GLD)clmemory -include $(GLD)s$(BAND_LIST_COMPRESSOR)e
+	$(ADDMOD) $(GLD)clmemory -include $(GLD)s$(BAND_LIST_COMPRESSOR)d
+	$(ADDMOD) $(GLD)clmemory -init gxclmem
+
+gxclmem_h=$(GLSRC)gxclmem.h
+
+$(GLOBJ)gxclmem.$(OBJ) : $(GLSRC)gxclmem.c $(AK) $(gx_h) $(gserrors_h)\
+ $(LIB_MAK) $(memory__h) $(gxclmem_h) $(gssprintf_h) $(valgrind_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclmem.$(OBJ) $(C_) $(GLSRC)gxclmem.c
+
+# Implement the compression method for RAM-based band lists.
+
+$(GLOBJ)gxcllzw.$(OBJ) : $(GLSRC)gxcllzw.c $(std_h) $(AK)\
+ $(gsmemory_h) $(gstypes_h) $(gxclmem_h) $(slzwx_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxcllzw.$(OBJ) $(C_) $(GLSRC)gxcllzw.c
+
+$(GLOBJ)gxclzlib.$(OBJ) : $(GLSRC)gxclzlib.c $(std_h) $(AK)\
+ $(gsmemory_h) $(gstypes_h) $(gxclmem_h) $(szlibx_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclzlib.$(OBJ) $(C_) $(GLSRC)gxclzlib.c
+
+# Support for multi-threaded rendering from the clist. The chunk memory wrapper
+# is used to prevent mutex (locking) contention among threads. The underlying
+# memory allocator must implement the mutex (non-gc memory is usually gsmalloc)
+$(GLOBJ)gxclthrd.$(OBJ) :  $(GLSRC)gxclthrd.c $(gxsync_h) $(AK) $(gxclthrd_h)\
+ $(gdevplnx_h) $(gdevprn_h) $(gp_h) $(gpcheck_h) $(gsdevice_h) $(gserrors_h)\
+ $(gsmchunk_h) $(gsmemory_h) $(gx_h) $(gxcldev_h) $(gdevdevn_h)\
+ $(gsicc_cache_h) $(gxdevice_h) $(gxdevmem_h) $(gxgetbit_h) $(memory__h)\
+ $(gsicc_manage_h) $(gdevppla_h) $(gstrans_h) $(gzht_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclthrd.$(OBJ) $(C_) $(GLSRC)gxclthrd.c
+
+$(GLOBJ)gsmchunk.$(OBJ) :  $(GLSRC)gsmchunk.c $(AK) $(gx_h) $(gsstype_h)\
+ $(gserrors_h) $(gsmchunk_h) $(memory__h) $(gxsync_h) $(malloc__h)\
+ $(gsstruct_h) $(gxobj_h) $(assert__h) $(gsmdebug_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsmchunk.$(OBJ) $(C_) $(GLSRC)gsmchunk.c
+
+# ---------------- Vector devices ---------------- #
+# We include this here for the same reasons as page.dev.
+
+gdevvec_h=$(GLSRC)gdevvec.h
+
+vector_=$(GLOBJ)gdevvec.$(OBJ)
+$(GLD)vector.dev : $(LIB_MAK) $(ECHOGS_XE) $(vector_)\
+ $(GLD)bboxutil.dev $(GLD)sfile.dev $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)vector $(vector_)
+	$(ADDMOD) $(GLD)vector -include $(GLD)bboxutil $(GLD)sfile
+
+$(GLOBJ)gdevvec.$(OBJ) : $(GLSRC)gdevvec.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(string__h) $(gdevkrnlsclass_h)\
+ $(gdevvec_h) $(gp_h) $(gscspace_h) $(gxiparam_h) $(gsparam_h) $(gsutil_h)\
+ $(gxdcolor_h) $(gxfixed_h) $(gxpaint_h)\
+ $(gzcpath_h) $(gzpath_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevvec.$(OBJ) $(C_) $(GLSRC)gdevvec.c
+
+# ---------------- Image scaling filters ---------------- #
+
+iscale_=$(GLOBJ)siinterp.$(OBJ) $(GLOBJ)siscale.$(OBJ) $(GLOBJ)sidscale.$(OBJ)
+$(GLD)iscale.dev : $(LIB_MAK) $(ECHOGS_XE) $(iscale_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)iscale $(iscale_)
+
+$(GLOBJ)siinterp.$(OBJ) : $(GLSRC)siinterp.c $(AK)\
+ $(memory__h) $(gxdda_h) $(gxfixed_h) $(gxfrac_h)\
+ $(siinterp_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)siinterp.$(OBJ) $(C_) $(GLSRC)siinterp.c
+
+$(GLOBJ)siscale_0.$(OBJ) : $(GLSRC)siscale.c $(AK)\
+ $(math__h) $(memory__h) $(stdio__h) $(stdint__h) $(gdebug_h) $(gxfrac_h)\
+ $(siscale_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)siscale_0.$(OBJ) $(C_) $(GLSRC)siscale.c
+
+$(GLOBJ)siscale_1.$(OBJ) : $(GLSRC)siscale_cal.c $(AK) $(cal_h)\
+ $(math__h) $(memory__h) $(stdio__h) $(stdint__h) $(gdebug_h) $(gxfrac_h)\
+ $(siscale_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)siscale_1.$(OBJ) $(I_)$(CALSRCDIR)$(_I) $(C_) $(GLSRC)siscale_cal.c
+
+$(GLOBJ)siscale.$(OBJ) : $(GLOBJ)siscale_$(WITH_CAL).$(OBJ) $(AK)\
+ $(math__h) $(memory__h) $(stdio__h) $(stdint__h) $(gdebug_h) $(gxfrac_h)\
+ $(siscale_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)siscale_$(WITH_CAL).$(OBJ) $(GLOBJ)siscale.$(OBJ)
+
+# Dev file contains library files (or nothing)
+$(GLOBJ)siscale.dev : $(GLOBJ)siscale_$(WITH_CAL).dev\
+ $(CAL_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)siscale_$(WITH_CAL).dev $(GLOBJ)siscale.dev
+
+$(GLOBJ)siscale_0.dev: $(ECHOGS_XE) $(MAKEDIRS)
+	$(SETMOD) $(GLOBJ)siscale_0
+
+$(GLOBJ)siscale_1.dev: $(GLOBJ)cal.dev $(ECHOGS_XE) $(CAL_OBJS) $(MAKEDIRS)
+	$(SETMOD) $(GLOBJ)siscale_1 -include $(GLOBJ)cal.dev
+
+$(GLOBJ)sidscale.$(OBJ) : $(GLSRC)sidscale.c $(AK)\
+ $(math__h) $(memory__h) $(stdio__h) $(gdebug_h) $(gxdda_h) $(gxfixed_h)\
+ $(sidscale_h) $(strimpl_h) $(gxfrac_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)sidscale.$(OBJ) $(C_) $(GLSRC)sidscale.c
+
+# -------------- imagemask scaling filter --------------- #
+
+simscale_=$(GLOBJ)simscale.$(OBJ) $(GLOBJ)simscale_foo.$(OBJ)
+$(GLD)simscale.dev : $(LIB_MAK) $(ECHOGS_XE) $(simscale_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)simscale $(simscale_)
+
+$(GLOBJ)simscale.$(OBJ) : $(GLSRC)simscale.c $(AK) $(memory__h)\
+ $(gserrors_h) $(simscale_h) $(strimpl_h) $(sisparam_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)simscale.$(OBJ) $(C_) $(GLSRC)simscale.c
+
+$(GLOBJ)simscale_foo.$(OBJ) : $(GLSRC)simscale_foo.c $(AK) $(simscale_foo_h)\
+  $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)simscale_foo.$(OBJ) $(C_) $(GLSRC)simscale_foo.c
+
+# ---------------- Extended halftone support ---------------- #
+# This is only used by one non-PostScript-based project.
+
+gshtx_h=$(GLSRC)gshtx.h
+
+htxlib_=$(GLOBJ)gshtx.$(OBJ)
+$(GLD)htxlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(htxlib_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)htxlib $(htxlib_)
+
+$(GLOBJ)gshtx.$(OBJ) : $(GLSRC)gshtx.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsstruct_h) $(gsutil_h)\
+ $(gxfmap_h) $(gshtx_h) $(gzht_h) $(gzstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gshtx.$(OBJ) $(C_) $(GLSRC)gshtx.c
+
+# ----- Ternary raster operations and device level transparency ------#
+
+roplib1_=$(GLOBJ)gdevdrop.$(OBJ) $(GLOBJ)gsroprun.$(OBJ)
+roplib2_=$(GLOBJ)gdevmr1.$(OBJ) $(GLOBJ)gdevmr2n.$(OBJ) $(GLOBJ)gdevmr8n.$(OBJ)
+roplib3_=$(GLOBJ)gdevrops.$(OBJ) $(GLOBJ)gsrop.$(OBJ) $(GLOBJ)gsroptab.$(OBJ)
+roplib_=$(roplib1_) $(roplib2_) $(roplib3_)
+$(GLD)roplib.dev : $(LIB_MAK) $(ECHOGS_XE) $(roplib_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)roplib $(roplib1_)
+	$(ADDMOD) $(GLD)roplib $(roplib2_)
+	$(ADDMOD) $(GLD)roplib $(roplib3_)
+
+$(GLOBJ)gdevdrop_1.$(OBJ) : $(GLSRC)gdevdrop.c $(AK) $(gx_h) $(gserrors_h) \
+ $(memory__h) $(gxdevsop_h) $(gsbittab_h) $(gsropt_h) $(gxcindex_h) \
+ $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h) $(gxgetbit_h) \
+ $(gdevmem_h) $(gdevmrop_h) $(gdevmpla_h) $(stdint__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(GLO_)gdevdrop_1.$(OBJ) $(C_) $(GLSRC)gdevdrop.c
+
+$(GLOBJ)gdevdrop_0.$(OBJ) : $(GLSRC)gdevdrop.c $(AK) $(gx_h) $(gserrors_h) \
+ $(memory__h) $(gxdevsop_h) $(gsbittab_h) $(gsropt_h) $(gxcindex_h) \
+ $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h) $(gxgetbit_h) \
+ $(gdevmem_h) $(gdevmrop_h) $(gdevmpla_h) $(stdint__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevdrop_0.$(OBJ) $(C_) $(GLSRC)gdevdrop.c
+
+$(GLOBJ)gdevdrop.$(OBJ) : $(GLOBJ)gdevdrop_$(WITH_CAL).$(OBJ)
+	$(CP_) $(GLOBJ)gdevdrop_$(WITH_CAL).$(OBJ) $(GLOBJ)gdevdrop.$(OBJ)
+
+$(GLOBJ)gdevmr1.$(OBJ) : $(GLSRC)gdevmr1.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsbittab_h) $(gsropt_h)\
+ $(gxcindex_h) $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h) $(gxdevrop_h)\
+ $(gdevmem_h) $(gdevmrop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevmr1.$(OBJ) $(C_) $(GLSRC)gdevmr1.c
+
+$(GLOBJ)gdevmr2n.$(OBJ) : $(GLSRC)gdevmr2n.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gsbittab_h) $(gsropt_h)\
+ $(gxcindex_h) $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h) $(gxdevrop_h)\
+ $(gdevmem_h) $(gdevmrop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevmr2n.$(OBJ) $(C_) $(GLSRC)gdevmr2n.c
+
+$(GLOBJ)gdevmr8n.$(OBJ) : $(GLSRC)gdevmr8n.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gsbittab_h) $(gsropt_h)\
+ $(gxcindex_h) $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h) $(gxdevrop_h)\
+ $(gdevmem_h) $(gdevmrop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevmr8n.$(OBJ) $(C_) $(GLSRC)gdevmr8n.c
+
+$(GLOBJ)gdevrops.$(OBJ) : $(GLSRC)gdevrops.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gxdcolor_h) $(gxdevice_h) $(gdevmrop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevrops.$(OBJ) $(C_) $(GLSRC)gdevrops.c
+
+$(GLOBJ)gsrop.$(OBJ) : $(GLSRC)gsrop.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gsrop_h) $(gzstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsrop.$(OBJ) $(C_) $(GLSRC)gsrop.c
+
+$(GLOBJ)gsroptab.$(OBJ) : $(GLSRC)gsroptab.c $(AK) $(stdpre_h)\
+ $(gsropt_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsroptab.$(OBJ) $(C_) $(GLSRC)gsroptab.c
+
+gsroprun1_h=$(GLSRC)gsroprun1.h
+gsroprun8_h=$(GLSRC)gsroprun8.h
+gsroprun24_h=$(GLSRC)gsroprun24.h
+$(GLOBJ)gsroprun.$(OBJ) : $(GLSRC)gsroprun.c $(std_h) $(stdpre_h) $(gsropt_h)\
+ $(gsroprun1_h) $(gsroprun8_h) $(gsroprun24_h) $(gp_h) $(gxcindex_h) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsroprun.$(OBJ) $(C_) $(GLSRC)gsroprun.c
+
+# ---------------- TrueType and PostScript Type 42 fonts ---------------- #
+
+ttflib_=$(GLOBJ)gstype42.$(OBJ) $(GLOBJ)gxchrout.$(OBJ) \
+ $(GLOBJ)ttcalc.$(OBJ) $(GLOBJ)ttfinp.$(OBJ) $(GLOBJ)ttfmain.$(OBJ) $(GLOBJ)ttfmemd.$(OBJ) \
+ $(GLOBJ)ttinterp.$(OBJ) $(GLOBJ)ttload.$(OBJ) $(GLOBJ)ttobjs.$(OBJ) \
+ $(GLOBJ)gxttfb.$(OBJ) $(GLOBJ)gzspotan.$(OBJ)
+
+$(GLD)ttflib.dev : $(LIB_MAK) $(ECHOGS_XE) $(ttflib_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)ttflib $(ttflib_)
+
+# "gxfont42_h=$(GLSRC)gxfont42.h" already defined above
+gxttf_h=$(GLSRC)gxttf.h
+
+$(GLOBJ)gstype42.$(OBJ) : $(GLSRC)gstype42.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsccode_h) $(gsline_h) $(gsmatrix_h) $(gsstruct_h) $(gsutil_h)\
+ $(gxchrout_h) $(gxfixed_h) $(gxfont_h) $(gxfont42_h) $(gxpath_h) $(gxttf_h)\
+ $(gxttfb_h) $(gxtext_h) $(gxchar_h) $(gxfcache_h) $(gxgstate_h) $(gzstate_h)\
+ $(stdint__h) $(strimpl_h) $(stream_h) $(strmio_h) $(szlibx_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gstype42.$(OBJ) $(C_) $(GLSRC)gstype42.c
+
+ttfsfnt_h=$(GLSRC)ttfsfnt.h
+ttcommon_h=$(GLSRC)ttcommon.h
+ttconf_h=$(GLSRC)ttconf.h
+ttfinp_h=$(GLSRC)ttfinp.h
+ttfmemd_h=$(GLSRC)ttfmemd.h
+tttype_h=$(GLSRC)tttype.h
+ttconfig_h=$(GLSRC)ttconfig.h
+tttypes_h=$(GLSRC)tttypes.h
+ttmisc_h=$(GLSRC)ttmisc.h
+tttables_h=$(GLSRC)tttables.h
+ttobjs_h=$(GLSRC)ttobjs.h
+ttcalc_h=$(GLSRC)ttcalc.h
+ttinterp_h=$(GLSRC)ttinterp.h
+ttload_h=$(GLSRC)ttload.h
+gxhintn_h=$(GLSRC)gxhintn.h
+
+$(GLOBJ)ttcalc.$(OBJ) : $(GLSRC)ttcalc.c $(AK) $(ttmisc_h) $(ttcalc_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)ttcalc.$(OBJ) $(C_) $(GLSRC)ttcalc.c
+
+$(GLOBJ)ttfinp.$(OBJ) : $(GLSRC)ttfinp.c $(AK) $(ttmisc_h)\
+ $(ttfoutl_h) $(ttfsfnt_h) $(ttfinp_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)ttfinp.$(OBJ) $(C_) $(GLSRC)ttfinp.c
+
+$(GLOBJ)ttfmain.$(OBJ) : $(GLSRC)ttfmain.c $(AK) $(ttmisc_h) $(ttfinp_h)\
+ $(ttfoutl_h) $(ttfmemd_h) $(ttfsfnt_h) $(ttobjs_h) $(ttinterp_h) $(ttcalc_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)ttfmain.$(OBJ) $(C_) $(GLSRC)ttfmain.c
+
+$(GLOBJ)ttfmemd.$(OBJ) : $(GLSRC)ttfmemd.c $(AK) $(ttmisc_h)\
+ $(ttfmemd_h) $(ttfoutl_h) $(ttobjs_h) $(gsstruct_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)ttfmemd.$(OBJ) $(C_) $(GLSRC)ttfmemd.c
+
+$(GLOBJ)ttinterp.$(OBJ) : $(GLSRC)ttinterp.c $(AK) $(ttmisc_h)\
+ $(ttfoutl_h) $(tttypes_h) $(ttcalc_h) $(ttinterp_h) $(ttfinp_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)ttinterp.$(OBJ) $(C_) $(GLSRC)ttinterp.c
+
+$(GLOBJ)ttload.$(OBJ) : $(GLSRC)ttload.c $(AK) $(ttmisc_h)\
+ $(ttfoutl_h) $(tttypes_h) $(ttcalc_h) $(ttobjs_h) $(ttload_h) $(ttfinp_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)ttload.$(OBJ) $(C_) $(GLSRC)ttload.c
+
+$(GLOBJ)ttobjs.$(OBJ) : $(GLSRC)ttobjs.c $(AK) $(ttmisc_h)\
+ $(ttfoutl_h) $(ttobjs_h) $(ttcalc_h) $(ttload_h) $(ttinterp_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)ttobjs.$(OBJ) $(C_) $(GLSRC)ttobjs.c
+
+$(GLOBJ)gxttfb.$(OBJ) : $(GLSRC)gxttfb.c $(AK) $(gx_h) $(gserrors_h) \
+ $(gxfixed_h) $(gxpath_h) $(gxfont_h) $(gxfont42_h) $(gxttfb_h) $(gxfcache_h)\
+ $(gxmatrix_h) $(gxhintn_h) $(gzpath_h) $(ttfmemd_h)\
+ $(gsstruct_h) $(gsfont_h) $(gdebug_h) $(memory__h) $(math__h)\
+ $(gxgstate_h) $(gxpaint_h) $(gzspotan_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxttfb.$(OBJ) $(C_) $(GLSRC)gxttfb.c
+
+$(GLOBJ)gzspotan.$(OBJ) : $(GLSRC)gzspotan.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gsdevice_h) $(gzspotan_h) $(gxfixed_h) $(gxdevice_h)\
+ $(gzpath_h) $(memory__h) $(math__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gzspotan.$(OBJ) $(C_) $(GLSRC)gzspotan.c
+
+
+# -------- Composite (PostScript Type 0) font support -------- #
+
+gxcid_h=$(GLSRC)gxcid.h
+gxfcid_h=$(GLSRC)gxfcid.h
+gxfcmap_h=$(GLSRC)gxfcmap.h
+gxfcmap1_h=$(GLSRC)gxfcmap1.h
+gxfont0c_h=$(GLSRC)gxfont0c.h
+
+cidlib_=$(GLOBJ)gsfcid.$(OBJ) $(GLOBJ)gsfcid2.$(OBJ)
+# cidlib requires ttflib for CIDFontType 2 fonts.
+$(GLD)cidlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cidlib_) $(GLD)ttflib.dev \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)cidlib $(cidlib_)
+	$(ADDMOD) $(GLD)cidlib -include $(GLD)ttflib
+
+$(GLOBJ)gsfcid.$(OBJ) : $(GLSRC)gsfcid.c $(AK) $(gx_h) $(memory__h)\
+ $(gsmatrix_h) $(gsstruct_h) $(gxfcid_h) $(gserrors_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsfcid.$(OBJ) $(C_) $(GLSRC)gsfcid.c
+
+$(GLOBJ)gsfcid2.$(OBJ) : $(GLSRC)gsfcid2.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsstruct_h) $(gsutil_h) $(gxfcid_h) $(gxfcmap_h) $(gxfont_h)\
+ $(gxfont0c_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsfcid2.$(OBJ) $(C_) $(GLSRC)gsfcid2.c
+
+cmaplib_=$(GLOBJ)gsfcmap.$(OBJ) $(GLOBJ)gsfcmap1.$(OBJ)
+$(GLD)cmaplib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cmaplib_) $(GLD)cidlib.dev \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)cmaplib $(cmaplib_)
+	$(ADDMOD) $(GLD)cmaplib -include $(GLD)cidlib
+
+$(GLOBJ)gsfcmap.$(OBJ) : $(GLSRC)gsfcmap.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(string__h) $(gsstruct_h) $(gsutil_h) $(gxfcmap_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsfcmap.$(OBJ) $(C_) $(GLSRC)gsfcmap.c
+
+$(GLOBJ)gsfcmap1.$(OBJ) : $(GLSRC)gsfcmap1.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(string__h)\
+ $(gsstruct_h) $(gsutil_h) $(gxfcmap1_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsfcmap1.$(OBJ) $(C_) $(GLSRC)gsfcmap1.c
+
+psf0lib_=$(GLOBJ)gschar0.$(OBJ) $(GLOBJ)gsfont0.$(OBJ)
+$(GLD)psf0lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(GLD)cmaplib.dev $(psf0lib_) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)psf0lib $(psf0lib_)
+	$(ADDMOD) $(GLD)psf0lib -include $(GLD)cmaplib
+
+$(GLOBJ)gschar0.$(OBJ) : $(GLSRC)gschar0.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsfcmap_h) $(gsstruct_h)\
+ $(gxdevice_h) $(gxfcmap_h) $(gxfixed_h) $(gxfont_h) $(gxfont0_h)\
+ $(gxfcid_h) $(gxtext_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gschar0.$(OBJ) $(C_) $(GLSRC)gschar0.c
+
+$(GLOBJ)gsfont0.$(OBJ) : $(GLSRC)gsfont0.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsmatrix_h) $(gsstruct_h) $(gxfixed_h) $(gxdevmem_h)\
+ $(gxfcache_h) $(gxfont_h) $(gxfont0_h) $(gxdevice_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsfont0.$(OBJ) $(C_) $(GLSRC)gsfont0.c
+
+# gsfont0c is not needed for the PS interpreter, other than for testing,
+# but it is used by pdfwrite and by the PCL interpreter.
+$(GLOBJ)gsfont0c.$(OBJ) : $(GLSRC)gsfont0c.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gxfont_h) $(gxfont0_h) $(gxfont0c_h)\
+ $(gxfcid_h) $(gxfcmap_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsfont0c.$(OBJ) $(C_) $(GLSRC)gsfont0c.c
+
+# ---------------- Pattern color ---------------- #
+
+patlib_1=$(GLOBJ)gspcolor.$(OBJ) $(GLOBJ)gsptype1.$(OBJ) $(GLOBJ)gxclip2.$(OBJ)
+patlib_2=$(GLOBJ)gxmclip.$(OBJ) $(GLOBJ)gxp1fill.$(OBJ) $(GLOBJ)gxpcmap.$(OBJ)
+patlib_=$(patlib_1) $(patlib_2)
+# Currently this feature requires masked images, but it shouldn't.
+$(GLD)patlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(GLD)cmyklib.dev $(GLD)imasklib.dev $(GLD)psl2cs.dev $(patlib_)
+	$(SETMOD) $(GLD)patlib -include $(GLD)cmyklib $(GLD)imasklib $(GLD)psl2cs
+	$(ADDMOD) $(GLD)patlib -obj $(patlib_1)
+	$(ADDMOD) $(GLD)patlib -obj $(patlib_2)
+
+$(GLOBJ)gspcolor.$(OBJ) : $(GLSRC)gspcolor.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h)\
+ $(gsimage_h) $(gsiparm4_h) $(gspath_h) $(gsrop_h) $(gsstruct_h) $(gsutil_h)\
+ $(gxarith_h) $(gxcolor2_h) $(gxcoord_h) $(gxclip2_h) $(gxcspace_h)\
+ $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h) $(gxfixed_h) $(gxmatrix_h)\
+ $(gxpath_h) $(gxpcolor_h) $(gzstate_h) $(stream_h) $(gsovrc_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gspcolor.$(OBJ) $(C_) $(GLSRC)gspcolor.c
+
+$(GLOBJ)gsptype1.$(OBJ) : $(GLSRC)gsptype1.c $(AK)\
+ $(math__h) $(memory__h) $(gx_h) $(gserrors_h) $(gxdevsop_h)\
+ $(gsrop_h) $(gsstruct_h) $(gsutil_h)\
+ $(gxarith_h)  $(gxfixed_h) $(gxmatrix_h) $(gxcoord_h) $(gxcspace_h)\
+ $(gxcolor2_h) $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h) $(gxclip2_h)\
+ $(gspath_h) $(gxpath_h) $(gxpcolor_h) $(gxp1impl_h) $(gxclist_h) $(gzstate_h)\
+ $(gsimage_h) $(gsiparm4_h) $(gsovrc_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsptype1.$(OBJ) $(C_) $(GLSRC)gsptype1.c
+
+$(GLOBJ)gxclip2.$(OBJ) : $(GLSRC)gxclip2.c $(AK) $(gx_h) $(gpcheck_h)\
+ $(gserrors_h) $(memory__h) $(gsstruct_h) $(gxclip2_h) $(gxdevice_h) $(gxdevmem_h)\
+ $(gxdcolor_h) $(gdevmpla_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxclip2.$(OBJ) $(C_) $(GLSRC)gxclip2.c
+
+$(GLOBJ)gxp1fill.$(OBJ) : $(GLSRC)gxp1fill.c $(AK) $(gx_h)\
+ $(gserrors_h) $(string__h) $(math__h) $(gsrop_h) $(gsmatrix_h)\
+ $(gxcolor2_h) $(gxclip2_h) $(gxcspace_h) $(gxdcolor_h) $(gxdevcli_h)\
+ $(gxdevmem_h) $(gxpcolor_h) $(gxp1impl_h) $(gxcldev_h) $(gxblend_h)\
+ $(gsicc_cache_h) $(gxdevsop_h) $(gdevp14_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxp1fill.$(OBJ) $(C_) $(GLSRC)gxp1fill.c
+
+$(GLOBJ)gxpcmap.$(OBJ) : $(GLSRC)gxpcmap.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(gspath2_h) $(gxdevsop_h) $(gxp1impl_h)\
+ $(gsstruct_h) $(gsutil_h) $(gp_h) $(gxcoord_h) $(gxgetbit_h)\
+ $(gxcolor2_h) $(gxcspace_h) $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h)\
+ $(gxfixed_h) $(gxmatrix_h) $(gxpcolor_h) $(gxclist_h) $(gxcldev_h)\
+ $(gzstate_h) $(gdevp14_h) $(gdevmpla_h) $(gsicc_blacktext_h)\
+ $(gscspace_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxpcmap.$(OBJ) $(C_) $(GLSRC)gxpcmap.c
+
+# ---------------- PostScript Type 1 (and Type 4) fonts ---------------- #
+
+type1lib_=$(GLOBJ)gxtype1.$(OBJ)\
+ $(GLOBJ)gxhintn.$(OBJ) $(GLOBJ)gxhintn1.$(OBJ) $(GLOBJ)gscrypt1.$(OBJ) $(GLOBJ)gxchrout.$(OBJ)
+
+gscrypt1_h=$(GLSRC)gscrypt1.h
+gstype1_h=$(GLSRC)gstype1.h
+gxfont1_h=$(GLSRC)gxfont1.h
+gxtype1_h=$(GLSRC)gxtype1.h
+
+$(GLOBJ)gxtype1.$(OBJ) : $(GLSRC)gxtype1.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(gsccode_h) $(gsline_h) $(gsstruct_h) $(memory__h)\
+ $(gxarith_h) $(gxchrout_h) $(gxcoord_h) $(gxfixed_h) $(gxmatrix_h)\
+ $(gxfont_h) $(gxfont1_h) $(gxgstate_h) $(gxtype1_h)\
+ $(gzpath_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxtype1.$(OBJ) $(C_) $(GLSRC)gxtype1.c
+
+$(GLOBJ)gxhintn.$(OBJ) : $(GLSRC)gxhintn.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(math__h)\
+ $(gxfixed_h) $(gxarith_h) $(gstypes_h) $(gxmatrix_h)\
+ $(gxpath_h) $(gzpath_h) $(gxhintn_h) $(gxfont_h) $(gxfont1_h) $(gxtype1_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxhintn.$(OBJ) $(C_) $(GLSRC)gxhintn.c
+
+$(GLOBJ)gxhintn1.$(OBJ) : $(GLSRC)gxhintn1.c $(AK) $(gx_h)\
+ $(memory__h) $(math__h)\
+ $(gxfixed_h) $(gxarith_h) $(gstypes_h) $(gxmatrix_h)\
+ $(gzpath_h) $(gxhintn_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxhintn1.$(OBJ) $(C_) $(GLSRC)gxhintn1.c
+
+# CharString and eexec encryption
+
+# Note that seexec is not needed for rasterizing Type 1/2/4 fonts,
+# only for reading or writing them.
+seexec_=$(GLOBJ)seexec.$(OBJ) $(GLOBJ)gscrypt1.$(OBJ)
+$(GLD)seexec.dev : $(LIB_MAK) $(ECHOGS_XE) $(seexec_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)seexec $(seexec_)
+
+$(GLOBJ)seexec.$(OBJ) : $(GLSRC)seexec.c $(AK) $(stdio__h)\
+ $(gscrypt1_h) $(scanchar_h) $(sfilter_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)seexec.$(OBJ) $(C_) $(GLSRC)seexec.c
+
+$(GLOBJ)gscrypt1.$(OBJ) : $(GLSRC)gscrypt1.c $(AK) $(stdpre_h)\
+ $(gscrypt1_h) $(gstypes_h) $(std_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscrypt1.$(OBJ) $(C_) $(GLSRC)gscrypt1.c
+
+# Type 1 charstrings
+
+psf1lib_=$(GLOBJ)gstype1.$(OBJ)
+$(GLD)psf1lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(psf1lib_) $(type1lib_) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)psf1lib $(psf1lib_)
+	$(ADDMOD) $(GLD)psf1lib $(type1lib_)
+
+$(GLOBJ)gstype1.$(OBJ) : $(GLSRC)gstype1.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(gsstruct_h) $(gxhintn_h)\
+ $(gxarith_h) $(gxcoord_h) $(gxfixed_h) $(gxmatrix_h)\
+ $(gxfont_h) $(gxfont1_h) $(gxgstate_h) $(gxtype1_h)\
+ $(gxpath_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gstype1.$(OBJ) $(C_) $(GLSRC)gstype1.c
+
+# Type 2 charstrings
+
+psf2lib_=$(GLOBJ)gstype2.$(OBJ)
+$(GLD)psf2lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(psf2lib_) $(type1lib_) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)psf2lib $(psf2lib_)
+	$(ADDMOD) $(GLD)psf2lib $(type1lib_)
+
+$(GLOBJ)gstype2.$(OBJ) : $(GLSRC)gstype2.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(gsstruct_h)\
+ $(gxarith_h) $(gxcoord_h) $(gxfixed_h) $(gxmatrix_h)\
+ $(gxfont_h) $(gxfont1_h) $(gxgstate_h) $(gxtype1_h)\
+ $(gxpath_h) $(gxhintn_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gstype2.$(OBJ) $(C_) $(GLSRC)gstype2.c
+
+# -------- Level 1 color extensions (CMYK color and colorimage) -------- #
+
+cmyklib_=$(GLOBJ)gscolor1.$(OBJ) $(GLOBJ)gsht1.$(OBJ)
+$(GLD)cmyklib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cmyklib_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)cmyklib $(cmyklib_)
+
+$(GLOBJ)gscolor1.$(OBJ) : $(GLSRC)gscolor1.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gsccolor_h) $(gscolor1_h) $(gsstruct_h) $(gsutil_h)\
+ $(gscolor2_h) $(gxcmap_h) $(gxcspace_h) $(gxdcconv_h) $(gxdevice_h) $(gzht_h)\
+ $(gzstate_h) $(gxhttype_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscolor1.$(OBJ) $(C_) $(GLSRC)gscolor1.c
+
+$(GLOBJ)gsht1.$(OBJ) : $(GLSRC)gsht1.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(string__h) $(gsstruct_h) $(gsutil_h) $(gxdevice_h) $(gzht_h)\
+ $(gzstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsht1.$(OBJ) $(C_) $(GLSRC)gsht1.c
+
+colimlib_=$(GLOBJ)gxicolor.$(OBJ)
+$(GLD)colimlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(colimlib_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)colimlib $(colimlib_)
+	$(ADDMOD) $(GLD)colimlib -imageclass 4_color
+
+$(GLOBJ)gxicolor_0.$(OBJ) : $(GLSRC)gxicolor.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gpcheck_h) $(gxarith_h)\
+ $(gxfixed_h) $(gxfrac_h) $(gxmatrix_h)\
+ $(gsccolor_h) $(gspaint_h) $(gzstate_h)\
+ $(gxdevice_h) $(gxcmap_h) $(gxdcconv_h) $(gxdcolor_h)\
+ $(gxgstate_h) $(gxdevmem_h) $(gxcpath_h) $(gximage_h)\
+ $(gsicc_h) $(gsicc_cache_h) $(gsicc_cms_h) $(gxcie_h)\
+ $(gscie_h) $(gzht_h) $(gxht_thresh_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxicolor_0.$(OBJ) $(C_) $(GLSRC)gxicolor.c
+
+$(GLOBJ)gxicolor_1.$(OBJ) : $(GLSRC)gxicolor.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gpcheck_h) $(gxarith_h)\
+ $(gxfixed_h) $(gxfrac_h) $(gxmatrix_h)\
+ $(gsccolor_h) $(gspaint_h) $(gzstate_h)\
+ $(gxdevice_h) $(gxcmap_h) $(gxdcconv_h) $(gxdcolor_h)\
+ $(gxgstate_h) $(gxdevmem_h) $(gxcpath_h) $(gximage_h)\
+ $(gsicc_h) $(gsicc_cache_h) $(gsicc_cms_h) $(gxcie_h)\
+ $(gscie_h) $(gzht_h) $(gxht_thresh_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(GLO_)gxicolor_1.$(OBJ) $(C_) $(GLSRC)gxicolor.c
+
+$(GLOBJ)gxicolor.$(OBJ) : $(GLOBJ)gxicolor_$(WITH_CAL).$(OBJ)
+	$(CP_) $(GLOBJ)gxicolor_$(WITH_CAL).$(OBJ) $(GLOBJ)gxicolor.$(OBJ)
+
+# ---- Level 1 path miscellany (arcs, pathbbox, path enumeration) ---- #
+
+path1lib_=$(GLOBJ)gspath1.$(OBJ)
+$(GLD)path1lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(path1lib_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)path1lib $(path1lib_)
+
+$(GLOBJ)gspath1.$(OBJ) : $(GLSRC)gspath1.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(gscoord_h) $(gspath_h) $(gsstruct_h)\
+ $(gxfarith_h) $(gxfixed_h) $(gxmatrix_h) $(gzstate_h) $(gzpath_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gspath1.$(OBJ) $(C_) $(GLSRC)gspath1.c
+
+# --------------- Level 2 color space and color image support --------------- #
+
+psl2cs_=$(GLOBJ)gscolor2.$(OBJ)
+$(GLD)psl2cs.dev : $(LIB_MAK) $(ECHOGS_XE) $(psl2cs_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)psl2cs $(psl2cs_)
+
+$(GLOBJ)gscolor2.$(OBJ) : $(GLSRC)gscolor2.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h)\
+ $(gxarith_h) $(gxfixed_h) $(gxmatrix_h) $(gxcspace_h)\
+ $(gxcolor2_h) $(gzstate_h) $(gxpcolor_h) $(stream_h) $(gxcie_h)\
+ $(gxfrac_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscolor2.$(OBJ) $(C_) $(GLSRC)gscolor2.c
+
+$(GLD)psl2lib.dev : $(LIB_MAK) $(ECHOGS_XE) \
+ $(GLD)colimlib.dev $(GLD)psl2cs.dev $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)psl2lib -include $(GLD)colimlib $(GLD)psl2cs
+	$(ADDMOD) $(GLD)psl2lib -imageclass 2_fracs
+
+$(GLOBJ)gxiscale.$(OBJ) : $(GLSRC)gxiscale.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(stdint__h) $(gpcheck_h) $(gsccolor_h) $(gspaint_h)\
+ $(sidscale_h) $(gxdevsop_h) $(gxarith_h) $(gxcmap_h) $(gxcpath_h)\
+ $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h) $(gxfixed_h) $(gxfrac_h)\
+ $(gximage_h) $(gxgstate_h) $(gxmatrix_h) $(siinterp_h) $(siscale_h)\
+ $(stream_h) $(gscindex_h) $(gxcolor2_h) $(gscspace_h) $(gsicc_cache_h)\
+ $(gsicc_manage_h) $(gsicc_h) $(gsbitops_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxiscale.$(OBJ) $(C_) $(GLSRC)gxiscale.c
+
+# ---------------- Display Postscript / Level 2 support ---------------- #
+
+dps2lib_=$(GLOBJ)gsdps1.$(OBJ)
+$(GLD)dps2lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(dps2lib_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)dps2lib $(dps2lib_)
+
+$(GLOBJ)gsdps1.$(OBJ) : $(GLSRC)gsdps1.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gsmatrix_h) $(gscoord_h) $(gspaint_h) $(gxdevice_h) $(gsutil_h)\
+ $(math__h) $(gxfixed_h) $(gspath_h) $(gspath2_h) $(gxhldevc_h)\
+ $(gzpath_h) $(gzcpath_h) $(gzstate_h) $(gxmatrix_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsdps1.$(OBJ) $(C_) $(GLSRC)gsdps1.c
+
+# ---------------- Functions ---------------- #
+# These are used by PDF and by LanguageLevel 3.  They are here because
+# the implementation of Separation colors also uses them.
+
+gsdsrc_h=$(GLSRC)gsdsrc.h
+gsfunc_h=$(GLSRC)gsfunc.h
+gsfunc0_h=$(GLSRC)gsfunc0.h
+gxfunc_h=$(GLSRC)gxfunc.h
+
+# Generic support, and FunctionType 0.
+funclib_=$(GLOBJ)gsdsrc.$(OBJ) $(GLOBJ)gsfunc.$(OBJ) $(GLOBJ)gsfunc0.$(OBJ)
+$(GLD)funclib.dev : $(LIB_MAK) $(ECHOGS_XE) $(funclib_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)funclib $(funclib_)
+
+$(GLOBJ)gsdsrc.$(OBJ) : $(GLSRC)gsdsrc.c $(AK) $(gx_h) $(memory__h)\
+ $(gsdsrc_h) $(gserrors_h) $(stream_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsdsrc.$(OBJ) $(C_) $(GLSRC)gsdsrc.c
+
+$(GLOBJ)gsfunc.$(OBJ) : $(GLSRC)gsfunc.c $(AK) $(gx_h) $(memory__h)\
+ $(gserrors_h) $(gsparam_h) $(gxfunc_h) $(stream_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsfunc.$(OBJ) $(C_) $(GLSRC)gsfunc.c
+
+$(GLOBJ)gsfunc0.$(OBJ) : $(GLSRC)gsfunc0.c $(AK) $(gx_h) $(math__h)\
+ $(gserrors_h) $(gsfunc0_h) $(gsparam_h) $(gxfarith_h) $(gxfunc_h) $(stream_h)\
+ $(gscolor_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsfunc0.$(OBJ) $(C_) $(GLSRC)gsfunc0.c
+
+# FunctionType 4 may be is used for tintTransform and similar functions,
+# in LanguageLevel 2 and above.
+
+gsfunc4_h=$(GLSRC)gsfunc4.h
+
+func4lib_=$(GLOBJ)gsfunc4.$(OBJ) $(GLOBJ)spprint.$(OBJ)
+$(GLD)func4lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(func4lib_) $(GLD)funclib.dev \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)func4lib $(func4lib_)
+	$(ADDMOD) $(GLD)func4lib -include $(GLD)funclib
+
+$(GLOBJ)gsfunc4.$(OBJ) : $(GLSRC)gsfunc4.c $(AK) $(gx_h) $(math__h)\
+ $(memory__h) $(gsdsrc_h) $(gserrors_h) $(gsfunc4_h)\
+ $(gxfarith_h) $(gxfunc_h) $(stream_h)\
+ $(sfilter_h) $(spprint_h) $(strimpl_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsfunc4.$(OBJ) $(C_) $(GLSRC)gsfunc4.c
+
+# ---------------- DevicePixel color space ---------------- #
+
+gscpixel_h=$(GLSRC)gscpixel.h
+
+cspixlib_=$(GLOBJ)gscpixel.$(OBJ)
+$(GLD)cspixlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cspixlib_) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)cspixlib $(cspixlib_)
+
+$(GLOBJ)gscpixel.$(OBJ) : $(GLSRC)gscpixel.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gsrefct_h) $(gxcspace_h) $(gscpixel_h) $(gxdevice_h)\
+ $(gxgstate_h) $(gsovrc_h) $(gsstate_h) $(gzstate_h) $(stream_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscpixel.$(OBJ) $(C_) $(GLSRC)gscpixel.c
+
+# ---------------- CIE color ---------------- #
+
+cielib1_=$(GLOBJ)gscie.$(OBJ) $(GLOBJ)gsciemap.$(OBJ) $(GLOBJ)gscscie.$(OBJ)
+cielib2_=$(GLOBJ)gscrd.$(OBJ) $(GLOBJ)gscrdp.$(OBJ) $(GLOBJ)gxctable.$(OBJ)
+cielib_=$(cielib1_) $(cielib2_)
+$(GLD)cielib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cielib_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)cielib $(cielib1_)
+	$(ADDMOD) $(GLD)cielib $(cielib2_)
+
+$(GLOBJ)gscie.$(OBJ) : $(GLSRC)gscie.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(gscolor2_h) $(gsmatrix_h) $(gsstruct_h)\
+ $(gxarith_h) $(gxcie_h) $(gxcmap_h) $(gxcspace_h) $(gxdevice_h) $(gzstate_h)\
+ $(gsicc_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscie.$(OBJ) $(C_) $(GLSRC)gscie.c
+
+$(GLOBJ)gsciemap.$(OBJ) : $(GLSRC)gsciemap.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h)\
+ $(gxarith_h) $(gxcie_h) $(gxcmap_h) $(gxcspace_h) $(gxdevice_h) \
+ $(gxgstate_h) $(gscolor2_h) $(gsicc_create_h) $(gsicc_manage_h)\
+ $(gsicc_h) $(gscspace_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsciemap.$(OBJ) $(C_) $(GLSRC)gsciemap.c
+
+$(GLOBJ)gscrd.$(OBJ) : $(GLSRC)gscrd.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(string__h)\
+ $(gscdefs_h) $(gscolor2_h) $(gscrd_h) $(gsdevice_h)\
+ $(gsmatrix_h) $(gsparam_h) $(gsstruct_h) $(gsutil_h) $(gxcspace_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscrd.$(OBJ) $(C_) $(GLSRC)gscrd.c
+
+$(GLOBJ)gscrdp.$(OBJ) : $(GLSRC)gscrdp.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(string__h)\
+ $(gscolor2_h) $(gscrdp_h) $(gsdevice_h) $(gsmatrix_h) $(gsstruct_h)\
+ $(gxarith_h) $(gxcspace_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscrdp.$(OBJ) $(C_) $(GLSRC)gscrdp.c
+
+$(GLOBJ)gscscie.$(OBJ) : $(GLSRC)gscscie.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(gscolor2_h) $(gsmatrix_h) $(gsstruct_h) $(gsicc_manage_h)\
+ $(gxarith_h) $(gxcie_h) $(gxcmap_h) $(gxcspace_h) $(gxdevice_h) $(gzstate_h)\
+ $(stream_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscscie.$(OBJ) $(C_) $(GLSRC)gscscie.c
+
+$(GLOBJ)gxctable.$(OBJ) : $(GLSRC)gxctable.c $(AK) $(gx_h)\
+ $(gxfixed_h) $(gxfrac_h) $(gxctable_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxctable.$(OBJ) $(C_) $(GLSRC)gxctable.c
+
+# ---------------- ICCBased color ---------------- #
+
+gsicc_=$(GLOBJ)gsicc_manage.$(OBJ) $(GLOBJ)gsicc_cache.$(OBJ)\
+ $(GLOBJ)gsicc_$(WHICH_CMS).$(OBJ) $(GLOBJ)gsicc_profilecache.$(OBJ)\
+ $(GLOBJ)gsicc_create.$(OBJ)  $(GLOBJ)gsicc_nocm.$(OBJ)\
+ $(GLOBJ)gsicc_replacecm.$(OBJ) $(GLOBJ)gsicc_monitorcm.$(OBJ)\
+ $(GLOBJ)gsicc_blacktext.$(OBJ)
+
+sicclib_=$(GLOBJ)gsicc.$(OBJ)
+$(GLD)sicclib.dev : $(LIB_MAK) $(ECHOGS_XE) $(sicclib_) $(gsicc_) $(md5_)\
+ $(GLD)cielib.dev $(LCMSGENDIR)$(D)$(WHICH_CMS).dev $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)sicclib $(sicclib_)
+	$(ADDMOD) $(GLD)sicclib $(gsicc_)
+	$(ADDMOD) $(GLD)sicclib $(md5_)
+	$(ADDMOD) $(GLD)sicclib -include $(LCMSGENDIR)$(D)$(WHICH_CMS).dev
+
+$(GLOBJ)gsicc.$(OBJ) : $(GLSRC)gsicc.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(gsstruct_h) $(stream_h) $(gxcspace_h) $(gxarith_h)\
+ $(gxcie_h) $(gzstate_h) $(gsicc_h) $(gsicc_cache_h) $(gsicc_cms_h)\
+ $(gsicc_manage_h) $(gxdevice_h) $(gsccolor_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsicc.$(OBJ) $(C_) $(GLSRC)gsicc.c
+
+gscms_h=$(GLSRC)gscms.h
+gsicc_cms_h=$(GLSRC)gsicc_cms.h
+gsicc_manage_h=$(GLSRC)gsicc_manage.h
+gsicc_cache_h=$(GLSRC)gsicc_cache.h
+gsicc_profilecache_h=$(GLSRC)gsicc_profilecache.h
+gsicc_blacktext_h=$(GLSRC)gsicc_blacktext.h
+
+$(GLOBJ)gsicc_monitorcm.$(OBJ) : $(GLSRC)gsicc_monitorcm.c $(AK) $(std_h)\
+ $(stdpre_h) $(gstypes_h) $(gsmemory_h) $(gxdevcli_h)\
+ $(gxcspace_h) $(gsicc_cms_h) $(gxcvalue_h)\
+ $(gsicc_cache_h) $(gxdevsop_h) $(gdevp14_h) $(string__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsicc_monitorcm.$(OBJ) $(C_) $(GLSRC)gsicc_monitorcm.c
+
+$(GLOBJ)gsicc_nocm.$(OBJ) : $(GLSRC)gsicc_nocm.c $(AK) $(std_h) $(gx_h)\
+ $(stdpre_h) $(gstypes_h) $(gsmemory_h) $(gsstruct_h) $(scommon_h) $(strmio_h)\
+ $(string__h) $(gxgstate_h) $(gxcspace_h) $(gsicc_cms_h)\
+ $(gsicc_cache_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsicc_nocm.$(OBJ) $(C_) $(GLSRC)gsicc_nocm.c
+
+$(GLOBJ)gsicc_replacecm.$(OBJ) : $(GLSRC)gsicc_replacecm.c $(AK) $(std_h) $(gx_h)\
+ $(stdpre_h) $(gstypes_h) $(gsmemory_h) $(gsstruct_h) $(scommon_h) $(strmio_h)\
+ $(string__h) $(gxgstate_h) $(gxcspace_h) $(gsicc_cms_h)\
+ $(gsicc_cache_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsicc_replacecm.$(OBJ) $(C_) $(GLSRC)gsicc_replacecm.c
+
+$(GLOBJ)gsicc_manage.$(OBJ) : $(GLSRC)gsicc_manage.c $(AK) $(gx_h)\
+ $(stdpre_h) $(gstypes_h) $(gsmemory_h) $(gsstruct_h) $(scommon_h) $(strmio_h)\
+ $(gxgstate_h) $(gxcspace_h) $(gscms_h) $(gsicc_manage_h) $(gsicc_cache_h)\
+ $(gsicc_profilecache_h) $(gserrors_h) $(string__h) $(gxclist_h) $(gxcldev_h)\
+ $(gzstate_h) $(gsicc_create_h) $(gpmisc_h) $(gxdevice_h) $(std_h)\
+ $(gsicc_cms_h) $(gp_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsicc_manage.$(OBJ) $(C_) $(GLSRC)gsicc_manage.c
+
+$(GLOBJ)gsicc_cache.$(OBJ) : $(GLSRC)gsicc_cache.c $(AK) $(gx_h)\
+ $(stdpre_h) $(gstypes_h) $(gsmemory_h) $(gsstruct_h) $(scommon_h) $(smd5_h)\
+ $(gxgstate_h) $(gscms_h) $(gsicc_manage_h) $(gsicc_cache_h) $(gzstate_h)\
+ $(gserrors_h) $(gsmalloc_h) $(string__h) $(gxsync_h) $(std_h) $(gsicc_cms_h)\
+ $(gpsync_h) $(stdint__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsicc_cache.$(OBJ) $(C_) $(GLSRC)gsicc_cache.c
+
+$(GLOBJ)gsicc_profilecache.$(OBJ) : $(GLSRC)gsicc_profilecache.c $(AK)\
+ $(std_h) $(stdpre_h) $(gstypes_h) $(gsmemory_h) $(gsstruct_h) $(scommon_h)\
+ $(gscms_h) $(gsicc_profilecache_h) $(gzstate_h) $(gserrors_h) $(gx_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsicc_profilecache.$(OBJ) $(C_) $(GLSRC)gsicc_profilecache.c
+
+$(GLOBJ)gsicc_blacktext.$(OBJ) : $(GLSRC)gsicc_blacktext.c $(AK)\
+ $(gsmemory_h) $(gsstruct_h) $(gzstate_h) $(gsicc_blacktext_h)\
+ $(gsicc_cache_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsicc_blacktext.$(OBJ) $(C_) $(GLSRC)gsicc_blacktext.c
+
+$(GLOBJ)gsicc_lcms2mt_1_0.$(OBJ) : $(GLSRC)gsicc_lcms2mt.c\
+ $(memory__h) $(gsicc_cms_h) $(gslibctx_h) $(gserrors_h) $(gxdevice_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLLCMS2MTCC) $(GLO_)gsicc_lcms2mt_1_0.$(OBJ) $(C_) $(GLSRC)gsicc_lcms2mt.c
+
+$(GLOBJ)gsicc_lcms2mt_0_0.$(OBJ) : $(GLSRC)gsicc_lcms2mt.c\
+ $(memory__h) $(gsicc_cms_h) $(lcms2mt_h) $(gslibctx_h) $(lcms2mt_plugin_h) $(gserrors_h) \
+ $(gxdevice_h) $(lcms2mt_cobalt_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLLCMS2MTCC) $(GLO_)gsicc_lcms2mt_0_0.$(OBJ) $(C_) $(GLSRC)gsicc_lcms2mt.c
+
+$(GLOBJ)gsicc_lcms2mt_1_1.$(OBJ) : $(GLSRC)gsicc_lcms2mt.c\
+ $(memory__h) $(gsicc_cms_h) $(gslibctx_h) $(gserrors_h)\
+ $(gxdevice_h) $(LIB_MAK) $(MAKEDIRS) $(cal_h)
+	$(GLLCMS2MTCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(GLO_)gsicc_lcms2mt_1_1.$(OBJ) $(C_) $(GLSRC)gsicc_lcms2mt.c
+
+$(GLOBJ)gsicc_lcms2mt_0_1.$(OBJ) : $(GLSRC)gsicc_lcms2mt.c\
+ $(memory__h) $(gsicc_cms_h) $(lcms2mt_h) $(gslibctx_h) $(lcms2mt_plugin_h) $(gserrors_h) \
+ $(gxdevice_h) $(lcms2mt_cobalt_h) $(LIB_MAK) $(MAKEDIRS) $(cal_h)
+	$(GLLCMS2MTCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(GLO_)gsicc_lcms2mt_0_1.$(OBJ) $(C_) $(GLSRC)gsicc_lcms2mt.c
+
+$(GLOBJ)gsicc_lcms2mt.$(OBJ) : $(GLOBJ)gsicc_lcms2mt_$(SHARE_LCMS)_$(WITH_CAL).$(OBJ) $(gp_h) \
+ $(gxsync_h) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)gsicc_lcms2mt_$(SHARE_LCMS)_$(WITH_CAL).$(OBJ) $(GLOBJ)gsicc_lcms2mt.$(OBJ)
+
+$(GLOBJ)gsicc_lcms2_1.$(OBJ) : $(GLSRC)gsicc_lcms2.c\
+ $(memory__h) $(gsicc_cms_h) $(gslibctx_h) $(gserrors_h) $(gxdevice_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLLCMS2CC) $(GLO_)gsicc_lcms2_1.$(OBJ) $(C_) $(GLSRC)gsicc_lcms2.c
+
+$(GLOBJ)gsicc_lcms2_0.$(OBJ) : $(GLSRC)gsicc_lcms2.c\
+ $(memory__h) $(gsicc_cms_h) $(lcms2_h) $(gslibctx_h) $(lcms2_plugin_h) $(gserrors_h) \
+ $(gxdevice_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLLCMS2CC) $(GLO_)gsicc_lcms2_0.$(OBJ) $(C_) $(GLSRC)gsicc_lcms2.c
+
+$(GLOBJ)gsicc_lcms2.$(OBJ) : $(GLOBJ)gsicc_lcms2_$(SHARE_LCMS).$(OBJ) $(gp_h) \
+ $(gxsync_h) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)gsicc_lcms2_$(SHARE_LCMS).$(OBJ) $(GLOBJ)gsicc_lcms2.$(OBJ)
+
+# Note that gsicc_create requires compile with lcms to obtain icc34.h
+# header file that is used for creating ICC structures from PS objects.
+# This is needed even if PDF/PS interpreter is built with a different CMS.
+# This object is here instead of in psi since it is used lazily by the
+# remap operations.
+$(GLOBJ)gsicc_create_1.$(OBJ) : $(GLSRC)gsicc_create.c $(AK) $(string__h)\
+ $(gsmemory_h) $(gx_h) $(gxgstate_h) $(gstypes_h) $(gscspace_h)\
+ $(gscie_h) $(gsicc_create_h) $(gxarith_h) $(gsicc_manage_h) $(gsicc_cache_h)\
+ $(math__h) $(gscolor2_h) $(gxcie_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLLCMS2MTCC) $(GLO_)gsicc_create_1.$(OBJ) $(C_) $(GLSRC)gsicc_create.c
+
+$(GLOBJ)gsicc_create_0.$(OBJ) : $(GLSRC)gsicc_create.c $(AK) $(string__h)\
+ $(gsmemory_h) $(gx_h) $(gxgstate_h) $(gstypes_h) $(gscspace_h)\
+ $(gscie_h) $(gsicc_create_h) $(gxarith_h) $(gsicc_manage_h) $(gsicc_cache_h)\
+ $(math__h) $(gscolor2_h) $(gxcie_h) $(icc34_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLLCMS2MTCC) $(GLO_)gsicc_create_0.$(OBJ) $(C_) $(GLSRC)gsicc_create.c
+
+$(GLOBJ)gsicc_create.$(OBJ) : $(GLOBJ)gsicc_create_$(SHARE_LCMS).$(OBJ) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)gsicc_create_$(SHARE_LCMS).$(OBJ) $(GLOBJ)gsicc_create.$(OBJ)
+
+
+#include "icc34.h"   /* Note this header is needed even if lcms is not compiled as default CMS */
+
+# ---------------- Separation colors ---------------- #
+
+seprlib_=$(GLOBJ)gscsepr.$(OBJ) $(GLOBJ)gsnamecl.$(OBJ) $(GLOBJ)gsncdummy.$(OBJ)
+$(GLD)seprlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(seprlib_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)seprlib $(seprlib_)
+
+$(GLOBJ)gscsepr.$(OBJ) : $(GLSRC)gscsepr.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(gsfunc_h) $(gsrefct_h) $(gsmatrix_h) $(gscsepr_h) $(gxcspace_h)\
+ $(gxfixed_h) $(gxcolor2_h) $(gzstate_h) $(gscdevn_h) $(gxcdevn_h)\
+ $(gxcmap_h) $(gxdevcli_h) $(gsovrc_h) $(stream_h) $(gsicc_cache_h) $(gxdevice_h)\
+ $(gxcie_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscsepr.$(OBJ) $(C_) $(GLSRC)gscsepr.c
+
+$(GLOBJ)gsnamecl.$(OBJ) : $(GLSRC)gsnamecl.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gscspace_h) $(math__h) $(stdpre_h) $(gsutil_h)\
+ $(gscdefs_h) $(gxdevice_h) $(gsnamecl_h) $(gzstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsnamecl.$(OBJ) $(C_) $(GLSRC)gsnamecl.c
+
+$(GLOBJ)gsncdummy.$(OBJ) : $(GLSRC)gsncdummy.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h) $(gxcspace_h) $(stdpre_h)\
+ $(memory__h) $(gscdefs_h) $(gscspace_h) $(gscie_h) $(gsicc_h)\
+ $(gxdevice_h) $(gzstate_h) $(gsutil_h) $(gxcie_h) $(gsncdummy_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsncdummy.$(OBJ) $(C_) $(GLSRC)gsncdummy.c
+
+# ------------- Image Color Decode.  Used in color mon and xpswrite --------- #
+
+$(GLOBJ)gximdecode.$(OBJ) : $(GLSRC)gximdecode.c $(gximdecode_h) $(string__h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gximdecode.$(OBJ) $(C_) $(GLSRC)gximdecode.c
+
+# ================ PostScript LanguageLevel 3 support ================ #
+
+$(GLOBJ)gscdevn.$(OBJ) : $(GLSRC)gscdevn.c $(AK) $(gx_h) $(gserrors_h)\
+ $(memory__h) $(string__h) $(gsicc_h)\
+ $(gscdevn_h) $(gsfunc_h) $(gsmatrix_h) $(gsrefct_h) $(gsstruct_h)\
+ $(gxcspace_h) $(gxcdevn_h) $(gxfarith_h) $(gxfrac_h) $(gsnamecl_h) $(gxcmap_h)\
+ $(gxgstate_h) $(gscoord_h) $(gzstate_h) $(gxdevcli_h) $(gsovrc_h) $(stream_h)\
+ $(gsicc_manage_h) $(gsicc_cache_h) $(gxdevice_h) $(gxcie_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscdevn.$(OBJ) $(C_) $(GLSRC)gscdevn.c
+
+$(GLOBJ)gxdevndi.$(OBJ) : $(GLSRC)gxdevndi.c $(AK) $(gx_h)\
+ $(gsstruct_h) $(gsdcolor_h) $(gxfrac_h)\
+ $(gxcmap_h) $(gxdevice_h) $(gxdither_h) $(gxlum_h) $(gzht_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxdevndi.$(OBJ) $(C_) $(GLSRC)gxdevndi.c
+
+$(GLOBJ)gsclipsr.$(OBJ) : $(GLSRC)gsclipsr.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gsclipsr_h) $(gsstruct_h) $(gxclipsr_h) $(gxfixed_h)\
+ $(gxpath_h) $(gzstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsclipsr.$(OBJ) $(C_) $(GLSRC)gsclipsr.c
+
+psl3lib_=$(GLOBJ)gsclipsr.$(OBJ) $(GLOBJ)gscdevn.$(OBJ) $(GLOBJ)gxdevndi.$(OBJ)
+
+$(GLD)psl3lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(psl3lib_)\
+ $(GLD)imasklib.dev $(GLD)shadelib.dev $(GLD)gxfapiu$(UFST_BRIDGE).dev \
+  $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)psl3lib $(psl3lib_)
+	$(ADDMOD) $(GLD)psl3lib -include $(GLD)imasklib $(GLD)shadelib
+	$(ADDMOD) $(GLD)psl3lib -include $(GLD)gxfapiu$(UFST_BRIDGE)
+
+# ---------------- Trapping ---------------- #
+
+gstrap_h=$(GLSRC)gstrap.h
+
+$(GLOBJ)gstrap.$(OBJ) : $(GLSRC)gstrap.c $(AK) $(gx_h) $(gserrors_h)\
+ $(string__h) $(gsparamx_h) $(gstrap_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gstrap.$(OBJ) $(C_) $(GLSRC)gstrap.c
+
+traplib_=$(GLOBJ)gsparamx.$(OBJ) $(GLOBJ)gstrap.$(OBJ)
+$(GLD)traplib.dev : $(LIB_MAK) $(ECHOGS_XE) $(traplib_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)traplib $(traplib_)
+
+### ------------------------ The DeviceN device ------------------------ ###
+# Required by transparency
+
+devn_=$(GLOBJ)gdevdevn.$(OBJ)
+
+$(DD)spotcmyk.dev : $(LIB_MAK) $(devn_) $(GLD)page.dev $(GDEV) $(LIB_MAK) $(MAKEDIRS)
+	$(SETDEV) $(DD)spotcmyk $(devn_)
+
+$(DD)devicen.dev : $(LIB_MAK) $(devn_) $(GLD)page.dev $(GDEV) $(LIB_MAK) $(MAKEDIRS)
+	$(SETDEV) $(DD)devicen $(devn_)
+
+$(GLOBJ)gdevdevn.$(OBJ) : $(GLSRC)gdevdevn.c $(gx_h) $(math__h) $(string__h)\
+ $(gdevprn_h) $(gsparam_h) $(gscrd_h) $(gscrdp_h) $(gxlum_h) $(gdevdcrd_h)\
+ $(gstypes_h) $(gxdcconv_h) $(gdevdevn_h) $(gsequivc_h) $(gdevp14_h)\
+ $(gxblend_h) $(gdevdevnprn_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevdevn.$(OBJ) $(C_) $(GLSRC)gdevdevn.c
+
+
+# Provide a sample device CRD.
+# Required by transparency
+$(GLOBJ)gdevdcrd.$(OBJ) : $(GLSRC)gdevdcrd.c $(AK)\
+ $(math__h) $(memory__h) $(string__h)\
+ $(gscrd_h) $(gscrdp_h) $(gserrors_h) $(gsparam_h) $(gscspace_h)\
+ $(gx_h) $(gxdevcli_h) $(gdevdcrd_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevdcrd.$(OBJ) $(C_) $(GLSRC)gdevdcrd.c
+
+$(GLOBJ)gsequivc.$(OBJ) : $(GLSRC)gsequivc.c $(math__h) $(PDEVH) $(gsparam_h)\
+ $(gstypes_h) $(gxdcconv_h) $(gdevdevn_h) $(gsequivc_h) $(gzstate_h)\
+ $(gsstate_h) $(gscspace_h) $(gxcspace_h) $(gsicc_manage_h) $(gxdevsop_h)\
+ $(gdevprn_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsequivc.$(OBJ) $(C_) $(GLSRC)gsequivc.c
+
+
+# ---------------- Transparency ---------------- #
+
+gsipar3x_h=$(GLSRC)gsipar3x.h
+gximag3x_h=$(GLSRC)gximag3x.h
+gxblend_h=$(GLSRC)gxblend.h
+gdevp14_h=$(GLSRC)gdevp14.h
+
+$(GLOBJ)gstrans.$(OBJ) : $(GLSRC)gstrans.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(gdevp14_h) $(gstrans_h) $(gsicc_cache_h)\
+ $(gsutil_h) $(gxdevcli_h) $(gzstate_h) $(gscspace_h)\
+ $(gxclist_h) $(gsicc_manage_h) $(gdevdevn_h) $(gxarith_h) $(gxblend_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gstrans.$(OBJ) $(C_) $(GLSRC)gstrans.c
+
+$(GLOBJ)gximag3x.$(OBJ) : $(GLSRC)gximag3x.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h) $(memory__h) $(gdevbbox_h)\
+ $(gsbitops_h) $(gscpixel_h) $(gscspace_h) $(gsstruct_h)\
+ $(gxdevice_h) $(gxdevmem_h) $(gximag3x_h) $(gxgstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gximag3x.$(OBJ) $(C_) $(GLSRC)gximag3x.c
+
+$(GLOBJ)gxblend_0.$(OBJ) : $(GLSRC)gxblend.c $(AK) $(gx_h) $(memory__h)\
+ $(gstparam_h) $(gxblend_h) $(gxcolor2_h) $(gsicc_cache_h) $(gsrect_h)\
+ $(gsicc_manage_h) $(gdevp14_h) $(gp_h) $(math__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxblend_0.$(OBJ) $(C_) $(GLSRC)gxblend.c
+
+$(GLOBJ)gxblend_1.$(OBJ) : $(GLSRC)gxblend.c $(AK) $(gx_h) $(memory__h)\
+ $(gstparam_h) $(gxblend_h) $(gxcolor2_h) $(gsicc_cache_h) $(gsrect_h)\
+ $(gsicc_manage_h) $(gdevp14_h) $(gp_h) $(math__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(GLO_)gxblend_1.$(OBJ) $(C_) $(GLSRC)gxblend.c
+
+$(GLOBJ)gxblend.$(OBJ) : $(GLOBJ)gxblend_$(WITH_CAL).$(OBJ) $(AK) $(gx_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)gxblend_$(WITH_CAL).$(OBJ) $(GLOBJ)gxblend.$(OBJ)
+
+$(GLOBJ)gxblend1.$(OBJ) : $(GLSRC)gxblend1.c $(AK) $(gx_h) $(memory__h)\
+ $(gstparam_h) $(gsrect_h) $(gxdcconv_h) $(gxblend_h) $(gxdevcli_h)\
+ $(gxgstate_h) $(gdevdevn_h) $(gdevp14_h) $(png__h) $(gp_h)\
+ $(gsicc_cache_h) $(gxdevsop_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxblend1.$(OBJ) $(C_) $(GLSRC)gxblend1.c
+
+$(GLOBJ)gdevp14_0.$(OBJ) : $(GLSRC)gdevp14.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(gscdefs_h) $(gxdevice_h) $(gsdevice_h)\
+ $(gsstruct_h) $(gscoord_h) $(gxgstate_h) $(gxdcolor_h) $(gxiparam_h)\
+ $(gstparam_h) $(gxblend_h) $(gxtext_h) $(gsimage_h)\
+ $(gsrect_h) $(gzstate_h) $(gdevdevn_h) $(gdevp14_h) $(gdevprn_h) $(gdevppla_h) $(gdevdevnprn_h)\
+ $(gsovrc_h) $(gxcmap_h) $(gscolor1_h) $(gstrans_h) $(gsutil_h) $(gxcldev_h) $(gxclpath_h)\
+ $(gxdcconv_h) $(gsptype2_h) $(gxpcolor_h) $(gscdevn_h)\
+ $(gsptype1_h) $(gzcpath_h) $(gxpaint_h) $(gsicc_manage_h) $(gxclist_h)\
+ $(gxiclass_h) $(gximage_h) $(gsmatrix_h) $(gsicc_cache_h) $(gxdevsop_h)\
+ $(gsicc_h) $(gscms_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevp14_0.$(OBJ) $(C_) $(GLSRC)gdevp14.c
+
+$(GLOBJ)gdevp14_1.$(OBJ) : $(GLSRC)gdevp14.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(memory__h) $(gscdefs_h) $(gxdevice_h) $(gsdevice_h)\
+ $(gsstruct_h) $(gscoord_h) $(gxgstate_h) $(gxdcolor_h) $(gxiparam_h)\
+ $(gstparam_h) $(gxblend_h) $(gxtext_h) $(gsimage_h)\
+ $(gsrect_h) $(gzstate_h) $(gdevdevn_h) $(gdevp14_h) $(gdevprn_h) $(gdevppla_h) $(gdevdevnprn_h)\
+ $(gsovrc_h) $(gxcmap_h) $(gscolor1_h) $(gstrans_h) $(gsutil_h) $(gxcldev_h) $(gxclpath_h)\
+ $(gxdcconv_h) $(gsptype2_h) $(gxpcolor_h) $(gscdevn_h)\
+ $(gsptype1_h) $(gzcpath_h) $(gxpaint_h) $(gsicc_manage_h) $(gxclist_h)\
+ $(gxiclass_h) $(gximage_h) $(gsmatrix_h) $(gsicc_cache_h) $(gxdevsop_h)\
+ $(gsicc_h) $(gscms_h) $(gdevmem_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(GLO_)gdevp14_1.$(OBJ) $(C_) $(GLSRC)gdevp14.c
+
+$(GLOBJ)gdevp14.$(OBJ) : $(GLOBJ)gdevp14_$(WITH_CAL).$(OBJ) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)gdevp14_$(WITH_CAL).$(OBJ) $(GLOBJ)gdevp14.$(OBJ)
+
+translib_=$(GLOBJ)gstrans.$(OBJ) $(GLOBJ)gximag3x.$(OBJ)\
+ $(GLOBJ)gxblend.$(OBJ) $(GLOBJ)gxblend1.$(OBJ) $(GLOBJ)gdevp14.$(OBJ) $(GLOBJ)gdevdevn.$(OBJ)\
+ $(GLOBJ)gsequivc.$(OBJ)  $(GLOBJ)gdevdcrd.$(OBJ)
+
+$(GLD)translib.dev : $(LIB_MAK) $(ECHOGS_XE) $(translib_)\
+ $(GLD)cspixlib.dev $(GLD)bboxutil.dev $(GLD)cielib.dev $(GLD)page.dev $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)translib $(translib_)
+	$(ADDMOD) $(GLD)translib -imagetype 3x
+	$(ADDMOD) $(GLD)translib -include $(GLD)cspixlib $(GLD)bboxutil $(GLD)page
+	$(ADDMOD) $(GLD)translib -include $(GLD)cielib.dev
+
+# ---------------- Smooth shading ---------------- #
+
+gscolor3_h=$(GLSRC)gscolor3.h
+gsfunc3_h=$(GLSRC)gsfunc3.h
+gsshade_h=$(GLSRC)gsshade.h
+gxshade_h=$(GLSRC)gxshade.h
+gxshade4_h=$(GLSRC)gxshade4.h
+
+$(GLOBJ)gscolor3.$(OBJ) : $(GLSRC)gscolor3.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gscolor3_h) $(gsmatrix_h) $(gsptype2_h) $(gscie_h)\
+ $(gxdevsop_h) $(gxcolor2_h) $(gxcspace_h) $(gxpaint_h) $(gxdcolor_h)\
+ $(gxpcolor_h) $(gxshade_h) $(gzpath_h) $(gzstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gscolor3.$(OBJ) $(C_) $(GLSRC)gscolor3.c
+
+$(GLOBJ)gsfunc3.$(OBJ) : $(GLSRC)gsfunc3.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gsfunc3_h) $(gsparam_h) $(gxfunc_h) $(stream_h) $(gxarith_h) $(math__h)\
+ $(memory__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsfunc3.$(OBJ) $(C_) $(GLSRC)gsfunc3.c
+
+$(GLOBJ)gsptype2.$(OBJ) : $(GLSRC)gsptype2.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gscspace_h) $(gsshade_h) $(gsmatrix_h) $(gsstate_h)\
+ $(gxdevsop_h) $(gxcolor2_h) $(gxdcolor_h) $(gsptype2_h) $(gxpcolor_h)\
+ $(gxstate_h) $(gzpath_h) $(gzcpath_h) $(gzstate_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsptype2.$(OBJ) $(C_) $(GLSRC)gsptype2.c
+
+$(GLOBJ)gsshade.$(OBJ) : $(GLSRC)gsshade.c $(AK) $(gx_h) $(gserrors_h)\
+ $(gscspace_h) $(gsstruct_h) $(gsptype2_h)\
+ $(gxcspace_h) $(gxcpath_h) $(gxdcolor_h) $(gxdevcli_h) $(gxgstate_h)\
+ $(gxpaint_h) $(gxpath_h) $(gxshade_h) $(gxshade4_h)\
+ $(gzcpath_h) $(gzpath_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsshade.$(OBJ) $(C_) $(GLSRC)gsshade.c
+
+$(GLOBJ)gxshade.$(OBJ) : $(GLSRC)gxshade.c $(AK) $(gx_h) $(gserrors_h)\
+ $(math__h) $(gsrect_h) $(gxcspace_h) $(gscindex_h) $(gscie_h) \
+ $(gxdevcli_h) $(gxgstate_h) $(gxdht_h) $(gxpaint_h) $(gxshade_h) $(gxshade4_h)\
+ $(gsicc_h) $(gsicc_cache_h) $(gxcdevn_h) $(gximage_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxshade.$(OBJ) $(C_) $(GLSRC)gxshade.c
+
+$(GLOBJ)gxshade1.$(OBJ) : $(GLSRC)gxshade1.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h) $(memory__h) \
+ $(gscoord_h) $(gsmatrix_h) $(gspath_h) $(gsptype2_h)\
+ $(gxcspace_h) $(gxdcolor_h) $(gxfarith_h) $(gxfixed_h) $(gxgstate_h)\
+ $(gxpath_h) $(gxshade_h) $(gxshade4_h) $(gxdevcli_h) $(gsicc_cache_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxshade1.$(OBJ) $(C_) $(GLSRC)gxshade1.c
+
+$(GLOBJ)gxshade4.$(OBJ) : $(GLSRC)gxshade4.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h) $(memory__h)\
+ $(gscoord_h) $(gsmatrix_h) $(gsptype2_h)\
+ $(gxcspace_h) $(gxdcolor_h) $(gxdevcli_h) $(gxgstate_h) $(gxpath_h)\
+ $(gxshade_h) $(gxshade4_h) $(gsicc_cache_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxshade4.$(OBJ) $(C_) $(GLSRC)gxshade4.c
+
+$(GLOBJ)gxshade6.$(OBJ) : $(GLSRC)gxshade6.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gxdevsop_h) $(stdint__h) $(gscoord_h)\
+ $(gscicach_h) $(gsmatrix_h) $(gxcspace_h) $(gxdcolor_h) $(gxgstate_h)\
+ $(gxshade_h) $(gxshade4_h) $(gxdevcli_h) $(gxarith_h) $(gzpath_h) $(math__h)\
+ $(gsicc_cache_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gxshade6.$(OBJ) $(C_) $(GLSRC)gxshade6.c
+
+shadelib_1=$(GLOBJ)gscolor3.$(OBJ) $(GLOBJ)gsfunc3.$(OBJ) $(GLOBJ)gsptype2.$(OBJ) $(GLOBJ)gsshade.$(OBJ)
+shadelib_2=$(GLOBJ)gxshade.$(OBJ) $(GLOBJ)gxshade1.$(OBJ) $(GLOBJ)gxshade4.$(OBJ) $(GLOBJ)gxshade6.$(OBJ)
+shadelib_=$(shadelib_1) $(shadelib_2)
+$(GLD)shadelib.dev : $(LIB_MAK) $(ECHOGS_XE) $(shadelib_)\
+ $(GLD)funclib.dev $(GLD)patlib.dev $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)shadelib $(shadelib_1)
+	$(ADDMOD) $(GLD)shadelib -obj $(shadelib_2)
+	$(ADDMOD) $(GLD)shadelib -include $(GLD)funclib $(GLD)patlib
+
+$(GLOBJ)gen_ordered.$(OBJ) : $(GLSRC)gen_ordered.c $(GLSRC)gen_ordered.h\
+ $(std_h) $(gsmemory_h) $(math__h) $(string__h) $(gp_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gen_ordered.$(OBJ) $(C_)  $(D_)GS_LIB_BUILD$(_D) \
+        $(GLSRC)gen_ordered.c
+
+# ---------------- Support for %rom% IODevice ----------------- #
+# This is used to access compressed, compiled-in support files
+gsiorom_h=$(GLSRC)gsiorom.h
+romfs_=$(GLOBJ)gsiorom.$(OBJ)
+$(GLD)romfs1.dev : $(LIB_MAK) $(ECHOGS_XE) $(romfs_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)romfs1 $(romfs_)
+	$(ADDMOD) $(GLD)romfs1 -iodev rom
+
+# A dummy romfs when we aren't using COMPILE_INITS
+$(GLD)romfs0.dev :  $(LIB_MAK) $(ECHOGS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)romfs0
+# psi
+$(GLGEN)gsromfs1_.c : $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)gsromfs1_.c \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(TESS_ROMFS_ARGS) $(PS_ROMFS_ARGS) $(PS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+
+$(GLGEN)gsromfs1_1.c : $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)gsromfs1_1.c \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(UFST_ROMFS_ARGS) $(PS_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
+
+$(GLGEN)gsromfs1.c : $(GLGEN)gsromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)gsromfs1_$(UFST_BRIDGE).c $(GLGEN)gsromfs1.c
+
+# pcl
+$(GLGEN)pclromfs1_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs1_.c \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(PCLXL_FONT_ROMFS_ARGS) $(PCLXL_ROMFS_ARGS) $(PJL_ROMFS_ARGS) \
+	$(PJL_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
+
+$(GLGEN)pclromfs1_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs1_1.c \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(UFST_ROMFS_ARGS) $(PCLXL_ROMFS_ARGS) $(PJL_ROMFS_ARGS) \
+	$(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
+
+$(GLGEN)pclromfs1.c : $(GLGEN)pclromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)pclromfs1_$(UFST_BRIDGE).c $(GLGEN)pclromfs1.c
+
+$(GLGEN)pclromfs0_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs0_.c \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(GL_ROMFS_ARGS)
+
+$(GLGEN)pclromfs0_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs0_1.c \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
+
+$(GLGEN)pclromfs0.c : $(GLGEN)pclromfs0_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)pclromfs0_$(UFST_BRIDGE).c $(GLGEN)pclromfs0.c
+
+# xps
+$(GLGEN)xpsromfs1_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs1_.c \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(XPS_ROMFS_ARGS) $(XPS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
+
+$(GLGEN)xpsromfs1_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs1_1.c \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(XPS_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
+
+$(GLGEN)xpsromfs1.c : $(GLGEN)xpsromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)xpsromfs1_$(UFST_BRIDGE).c $(GLGEN)xpsromfs1.c
+
+$(GLGEN)xpsromfs0_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs0_.c \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
+
+$(GLGEN)xpsromfs0_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs0_1.c \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
+
+$(GLGEN)xpsromfs0.c : $(GLGEN)xpsromfs0_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)xpsromfs0_$(UFST_BRIDGE).c $(GLGEN)xpsromfs0.c
+
+# pdf
+$(GLGEN)pdfromfs1_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdfromfs1_.c \
+	-X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(PDF_ROMFS_ARGS) $(PDF_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+
+$(GLGEN)pdfromfs1_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdfromfs1_1.c \
+	-X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(PDF_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+
+$(GLGEN)pdfromfs1.c : $(GLGEN)pdfromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)pdfromfs1_$(UFST_BRIDGE).c $(GLGEN)pdfromfs1.c
+
+$(GLGEN)pdfromfs0_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdfromfs0_.c \
+	-X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(GL_ROMFS_ARGS)
+
+$(GLGEN)pdfromfs0_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdfromfs0_1.c \
+	-X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(GL_ROMFS_ARGS)
+
+$(GLGEN)pdfromfs0.c : $(GLGEN)pdfromfs0_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)pdfromfs0_$(UFST_BRIDGE).c $(GLGEN)pdfromfs0.c
+
+# pdl
+# We generate the pdl romfs in index + 4 lumps because of size
+
+# COMPILE_INITS + Non UFST variant
+$(GLGEN)pdlromfs1_c0.c : $(GLGEN)pdlromfs1_.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs1_c1.c : $(GLGEN)pdlromfs1_.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs1_c2.c : $(GLGEN)pdlromfs1_.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs1_c3.c : $(GLGEN)pdlromfs1_.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs1_.c: $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdlromfs1_.c -s 4 \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(PCLXL_ROMFS_ARGS) $(PCLXL_FONT_ROMFS_ARGS) $(PJL_ROMFS_ARGS) \
+        $(XPS_ROMFS_ARGS) $(XPS_FONT_ROMFS_ARGS) \
+	$(PS_ROMFS_ARGS) $(PS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
+
+# COMPILE_INITS + UFST variant
+$(GLGEN)pdlromfs1_1c0.c : $(GLGEN)pdlromfs1_1.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs1_1c1.c : $(GLGEN)pdlromfs1_1.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs1_1c2.c : $(GLGEN)pdlromfs1_1.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs1_1c3.c : $(GLGEN)pdlromfs1_1.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs1_1.c: $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdlromfs1_1.c -s 4 \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(UFST_ROMFS_ARGS) $(PCLXL_ROMFS_ARGS) $(PJL_ROMFS_ARGS) $(XPS_ROMFS_ARGS) \
+	$(PS_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
+
+# Rules to fold COMPILE_INITS +/- UFST into 1 set of targets
+$(GLGEN)pdlromfs1c0.c : $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c0.c
+	$(CP_) $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c0.c $(GLGEN)pdlromfs1c0.c
+
+$(GLGEN)pdlromfs1c1.c : $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c1.c
+	$(CP_) $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c1.c $(GLGEN)pdlromfs1c1.c
+
+$(GLGEN)pdlromfs1c2.c : $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c2.c
+	$(CP_) $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c2.c $(GLGEN)pdlromfs1c2.c
+
+$(GLGEN)pdlromfs1c3.c : $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c3.c
+	$(CP_) $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c3.c $(GLGEN)pdlromfs1c3.c
+
+$(GLGEN)pdlromfs1.c : $(GLGEN)pdlromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)pdlromfs1_$(UFST_BRIDGE).c $(GLGEN)pdlromfs1.c
+
+# Non COMPILE_INITS + Non UFST variant
+$(GLGEN)pdlromfs0_c0.c : $(GLGEN)pdlromfs0_.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs0_c1.c : $(GLGEN)pdlromfs0_.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs0_c2.c : $(GLGEN)pdlromfs0_.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs0_c3.c : $(GLGEN)pdlromfs0_.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs0_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdlromfs0_.c -s 4 \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(GL_ROMFS_ARGS)
+
+# Non COMPILE_INITS + UFST variant
+$(GLGEN)pdlromfs0_1c0.c : $(GLGEN)pdlromfs0_1.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs0_1c1.c : $(GLGEN)pdlromfs0_1.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs0_1c2.c : $(GLGEN)pdlromfs0_1.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs0_1c3.c : $(GLGEN)pdlromfs0_1.c
+	$(NO_OP)
+
+$(GLGEN)pdlromfs0_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
+	$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdlromfs0_1.c -s 4 \
+	$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
+	$(GL_ROMFS_ARGS)
+
+# Rules to fold Non COMPILE_INITS +/- UFST into 1 set of targets
+$(GLGEN)pdlromfs0c0.c : $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c0.c
+	$(CP_) $(GLGEN)pdlromfs0_$(UFST_BRIDGE)c0.c $(GLGEN)pdlromfs0c0.c
+
+$(GLGEN)pdlromfs0c1.c : $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c1.c
+	$(CP_) $(GLGEN)pdlromfs0_$(UFST_BRIDGE)c1.c $(GLGEN)pdlromfs0c1.c
+
+$(GLGEN)pdlromfs0c2.c : $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c2.c
+	$(CP_) $(GLGEN)pdlromfs0_$(UFST_BRIDGE)c2.c $(GLGEN)pdlromfs0c2.c
+
+$(GLGEN)pdlromfs0c3.c : $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c3.c
+	$(CP_) $(GLGEN)pdlromfs0_$(UFST_BRIDGE)c3.c $(GLGEN)pdlromfs0c3.c
+
+$(GLGEN)pdlromfs0.c : $(GLGEN)pdlromfs0_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLGEN)pdlromfs0_$(UFST_BRIDGE).c $(GLGEN)pdlromfs0.c
+
+
+# the following module is only included if the romfs.dev FEATURE is enabled
+$(GLOBJ)gsiorom_1.$(OBJ) : $(GLSRC)gsiorom.c $(gsiorom_h) \
+ $(std_h) $(gx_h) $(gserrors_h) $(gsstruct_h) $(gxiodev_h) $(stat__h)\
+ $(gpcheck_h) $(gsutil_h) $(stdint__h) $(stream_h) $(string__h) \
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsiorom_1.$(OBJ) $(I_)$(ZI_)$(_I) $(C_) $(GLSRC)gsiorom.c
+
+$(GLOBJ)gsiorom_0.$(OBJ) : $(GLSRC)gsiorom.c $(gsiorom_h) \
+ $(std_h) $(gx_h) $(gserrors_h) $(gsstruct_h) $(gxiodev_h) $(stat__h)\
+ $(gpcheck_h) $(gsutil_h) $(stdint__h) $(stream_h) $(string__h) $(zlib_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsiorom_0.$(OBJ) $(I_)$(ZI_)$(_I) $(C_) $(GLSRC)gsiorom.c
+
+$(GLOBJ)gsiorom.$(OBJ) : $(GLOBJ)gsiorom_$(SHARE_ZLIB).$(OBJ) $(LIB_MAK) $(MAKEDIRS)
+	$(CP_) $(GLOBJ)gsiorom_$(SHARE_ZLIB).$(OBJ) $(GLOBJ)gsiorom.$(OBJ)
+
+# A dummy gsromfs module for COMPILE_INITS=0
+$(GLOBJ)gsromfs0.$(OBJ) : $(GLSRC)gsromfs0.c $(stdint__h) $(time__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsromfs0.$(OBJ) $(C_) $(GLSRC)gsromfs0.c
+
+$(GLOBJ)gsromfs1.$(OBJ) : $(GLOBJ)gsromfs1.c $(time__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsromfs1.$(OBJ) $(C_) $(GLOBJ)gsromfs1.c
+
+# A pclromfs module with only ICC profiles for COMPILE_INITS=0
+$(GLOBJ)pclromfs0.$(OBJ) : $(GLGEN)pclromfs0.c $(stdint__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pclromfs0.$(OBJ) $(C_) $(GLGEN)pclromfs0.c
+
+$(GLOBJ)pclromfs1.$(OBJ) : $(GLOBJ)pclromfs1.c $(time__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pclromfs1.$(OBJ) $(C_) $(GLOBJ)pclromfs1.c
+
+# A xpsromfs module with only ICC profiles for COMPILE_INITS=0
+$(GLOBJ)xpsromfs0.$(OBJ) : $(GLGEN)xpsromfs0.c $(stdint__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)xpsromfs0.$(OBJ) $(C_) $(GLGEN)xpsromfs0.c
+
+$(GLOBJ)xpsromfs1.$(OBJ) : $(GLOBJ)xpsromfs1.c $(time__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)xpsromfs1.$(OBJ) $(C_) $(GLOBJ)xpsromfs1.c
+
+# A pdfromfs module with only ICC profiles  for COMPILE_INITS=0
+$(GLOBJ)pdfromfs0.$(OBJ) : $(GLGEN)pdfromfs0.c $(stdint__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pdfromfs0.$(OBJ) $(C_) $(GLGEN)pdfromfs0.c
+
+$(GLOBJ)pdfromfs1.$(OBJ) : $(GLOBJ)pdfromfs1.c $(time__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pdfromfs1.$(OBJ) $(C_) $(GLOBJ)pdfromfs1.c
+
+# A pdlromfs module with only ICC profiles for COMPILE_INITS=0
+$(GLOBJ)pdlromfs0.$(OBJ) : $(GLGEN)pdlromfs0.c $(stdint__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pdlromfs0.$(OBJ) $(C_) $(GLGEN)pdlromfs0.c
+
+$(GLOBJ)pdlromfs0c0.$(OBJ) : $(GLGEN)pdlromfs0c0.c $(stdint__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pdlromfs0c0.$(OBJ) $(C_) $(GLGEN)pdlromfs0c0.c
+
+$(GLOBJ)pdlromfs0c1.$(OBJ) : $(GLGEN)pdlromfs0c1.c $(stdint__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pdlromfs0c1.$(OBJ) $(C_) $(GLGEN)pdlromfs0c1.c
+
+$(GLOBJ)pdlromfs0c2.$(OBJ) : $(GLGEN)pdlromfs0c2.c $(stdint__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pdlromfs0c2.$(OBJ) $(C_) $(GLGEN)pdlromfs0c2.c
+
+$(GLOBJ)pdlromfs0c3.$(OBJ) : $(GLGEN)pdlromfs0c3.c $(stdint__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pdlromfs0c3.$(OBJ) $(C_) $(GLGEN)pdlromfs0c3.c
+
+$(GLOBJ)pdlromfs1.$(OBJ) : $(GLOBJ)pdlromfs1.c $(time__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pdlromfs1.$(OBJ) $(C_) $(GLOBJ)pdlromfs1.c
+
+$(GLOBJ)pdlromfs1c0.$(OBJ) : $(GLOBJ)pdlromfs1c0.c $(time__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pdlromfs1c0.$(OBJ) $(C_) $(GLOBJ)pdlromfs1c0.c
+
+$(GLOBJ)pdlromfs1c1.$(OBJ) : $(GLOBJ)pdlromfs1c1.c $(time__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pdlromfs1c1.$(OBJ) $(C_) $(GLOBJ)pdlromfs1c1.c
+
+$(GLOBJ)pdlromfs1c2.$(OBJ) : $(GLOBJ)pdlromfs1c2.c $(time__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pdlromfs1c2.$(OBJ) $(C_) $(GLOBJ)pdlromfs1c2.c
+
+$(GLOBJ)pdlromfs1c3.$(OBJ) : $(GLOBJ)pdlromfs1c3.c $(time__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)pdlromfs1c3.$(OBJ) $(C_) $(GLOBJ)pdlromfs1c3.c
+
+# Define the ZLIB modules needed by mnkromfs here to factor it out of top makefiles
+# Also put the .h dependencies here for the same reason
+MKROMFS_ZLIB_OBJS=$(AUX)compress.$(OBJ) $(AUX)deflate.$(OBJ) \
+	$(AUX)zutil.$(OBJ) $(AUX)adler32.$(OBJ) $(AUX)crc32.$(OBJ) \
+	$(AUX)trees.$(OBJ)
+
+MKROMFS_COMMON_DEPS=$(stdpre_h) $(stdint__h) $(gsiorom_h) $(arch_h)\
+	$(gsmemret_h) $(gsmalloc_h) $(gsstype_h) $(gp_h) $(time__h)
+
+# ---------------- Support for %ram% IODevice ----------------- #
+gsioram_h=$(GLSRC)gsioram.h
+ramfs_=$(GLOBJ)gsioram.$(OBJ) $(GLOBJ)ramfs.$(OBJ)
+$(GLD)ramfs.dev : $(LIB_MAK) $(ECHOGS_XE) $(ramfs_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)ramfs $(ramfs_)
+	$(ADDMOD) $(GLD)ramfs -iodev ram
+	$(ADDMOD) $(GLD)ramfs -obj $(GLOBJ)ramfs.$(OBJ)
+
+$(GLOBJ)ramfs.$(OBJ) : $(GLSRC)ramfs.c $(gp_h) $(gscdefs_h) $(gserrors_h)\
+  $(gsparam_h) $(gsstruct_h) $(gx_h) $(ramfs_h) $(string__h) $(unistd__h)\
+   $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)ramfs.$(OBJ) $(C_) $(GLSRC)ramfs.c
+
+$(GLOBJ)gsioram.$(OBJ) : $(GLSRC)gsioram.c $(gp_h) $(gscdefs_h) $(gserrors_h)\
+  $(gsparam_h) $(gsstruct_h) $(gsutil_h) $(gx_h) $(gxiodev_h) $(ramfs_h)\
+  $(stream_h) $(string__h) $(unistd__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsioram.$(OBJ) $(C_) $(GLSRC)gsioram.c
+
+
+# ---------------- Support for %disk IODevices ---------------- #
+# The following module is included only if the diskn.dev FEATURE is included
+$(GLOBJ)gsiodisk.$(OBJ) : $(GLSRC)gsiodisk.c $(AK) $(gx_h)\
+ $(gserrors_h) $(errno__h) $(string__h) $(unistd__h)\
+ $(gp_h) $(gscdefs_h) $(gsparam_h) $(gsstruct_h) $(gxiodev_h) $(gsutil_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsiodisk.$(OBJ) $(C_) $(GLSRC)gsiodisk.c
+
+# ================ Platform-specific modules ================ #
+# Platform-specific code doesn't really belong here: this is code that is
+# shared among multiple platforms.
+
+# Standard implementation of gp_getenv.
+$(GLOBJ)gp_getnv.$(OBJ) : $(GLSRC)gp_getnv.c $(AK) $(stdio__h)\
+ $(string__h) $(gp_h) $(gsmemory_h) $(gstypes_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gp_getnv.$(OBJ) $(C_) $(GLSRC)gp_getnv.c
+
+$(AUX)gp_getnv.$(OBJ) : $(GLSRC)gp_getnv.c $(AK) $(stdio__h)\
+ $(string__h) $(gp_h) $(gsmemory_h) $(gstypes_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCCAUX) $(AUXO_)gp_getnv.$(OBJ) $(C_) $(GLSRC)gp_getnv.c
+
+# Standard implementation of gp_defaultpapersize.
+$(GLOBJ)gp_paper.$(OBJ) : $(GLSRC)gp_paper.c $(AK) $(gp_h) $(gx_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gp_paper.$(OBJ) $(C_) $(GLSRC)gp_paper.c
+
+# Unix implementation of gp_defaultpapersize.
+$(GLOBJ)gp_upapr.$(OBJ) : $(GLSRC)gp_upapr.c $(malloc__h) $(AK) $(gp_h)\
+ $(gx_h) $(string__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gp_upapr.$(OBJ) $(C_) $(GLSRC)gp_upapr.c
+
+# File system implementation.
+
+# MS-DOS file system, also used by Desqview/X.
+$(GLOBJ)gp_dosfs.$(OBJ) : $(GLSRC)gp_dosfs.c $(AK) $(dos__h) $(gp_h)\
+ $(gpmisc_h) $(gx_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gp_dosfs.$(OBJ) $(C_) $(GLSRC)gp_dosfs.c
+
+# MS-DOS file enumeration, *not* used by Desqview/X.
+$(GLOBJ)gp_dosfe.$(OBJ) : $(GLSRC)gp_dosfe.c $(AK)\
+ $(dos__h) $(memory__h) $(stdio__h) $(string__h)\
+ $(gstypes_h) $(gsmemory_h) $(gsstruct_h) $(gp_h) $(gsutil_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gp_dosfe.$(OBJ) $(C_) $(GLSRC)gp_dosfe.c
+
+# Unix(-like) file system, also used by Desqview/X.
+$(GLOBJ)gp_unifs.$(OBJ) : $(GLSRC)gp_unifs.c $(AK)\
+ $(memory__h) $(string__h) $(stdio__h) $(unistd__h) \
+ $(gx_h) $(gp_h) $(gpmisc_h) $(gsstruct_h) $(gsutil_h) \
+ $(stat__h) $(dirent__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gp_unifs.$(OBJ) $(C_) $(GLSRC)gp_unifs.c
+
+$(AUX)gp_unifs.$(OBJ) : $(GLSRC)gp_unifs.c $(AK)\
+ $(memory__h) $(string__h) $(stdio__h) $(unistd__h) \
+ $(gx_h) $(gp_h) $(gpmisc_h) $(gsstruct_h) $(gsutil_h) \
+ $(stat__h) $(dirent__h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCCAUX) $(AUXO_)gp_unifs.$(OBJ) $(C_) $(GLSRC)gp_unifs.c
+
+# Unix(-like) file name syntax, *not* used by Desqview/X.
+$(GLOBJ)gp_unifn.$(OBJ) : $(GLSRC)gp_unifn.c $(AK) $(gx_h) $(gp_h)\
+ $(gpmisc_h) $(gsutil_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gp_unifn.$(OBJ) $(C_) $(GLSRC)gp_unifn.c
+
+$(AUX)gp_unifn.$(OBJ) : $(GLSRC)gp_unifn.c $(AK) $(gx_h) $(gp_h)\
+ $(gpmisc_h) $(gsutil_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCCAUX) $(AUXO_)gp_unifn.$(OBJ) $(C_) $(GLSRC)gp_unifn.c
+
+# Pipes.  These are actually the same on all platforms that have them.
+
+pipe_=$(GLOBJ)gdevpipe.$(OBJ)
+$(GLD)pipe.dev : $(LIB_MAK) $(ECHOGS_XE) $(pipe_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)pipe $(pipe_)
+	$(ADDMOD) $(GLD)pipe -iodev pipe
+
+$(GLOBJ)gdevpipe.$(OBJ) : $(GLSRC)gdevpipe.c $(AK)\
+ $(errno__h) $(pipe__h) $(stdio__h) $(string__h) \
+ $(gserrors_h) $(gsmemory_h) $(gstypes_h) $(gxiodev_h)\
+ $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gdevpipe.$(OBJ) $(C_) $(GLSRC)gdevpipe.c
+
+# Thread / semaphore / monitor implementation.
+
+# Dummy implementation.
+nosync_=$(GLOBJ)gp_nsync.$(OBJ)
+$(GLD)nosync.dev : $(LIB_MAK) $(ECHOGS_XE) $(nosync_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)nosync $(nosync_)
+
+$(GLOBJ)gp_nsync.$(OBJ) : $(GLSRC)gp_nsync.c $(AK) $(std_h)\
+ $(gpsync_h) $(gp_h) $(globals_h) $(gserrors_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gp_nsync.$(OBJ) $(C_) $(GLSRC)gp_nsync.c
+
+# POSIX pthreads-based implementation.
+pthreads_=$(GLOBJ)gp_psync.$(OBJ)
+$(GLD)posync.dev : $(LIB_MAK) $(ECHOGS_XE) $(pthreads_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)posync $(pthreads_)
+	$(ADDMOD) $(GLD)posync -replace $(GLD)nosync
+
+$(GLOBJ)gp_psync.$(OBJ) : $(GLSRC)gp_psync.c $(AK) $(malloc__h) $(string__h) \
+ $(std_h) $(gpsync_h) $(gserrors_h) $(assert__h) $(unistd__h) $(globals_h) \
+ $(gp_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gp_psync.$(OBJ) $(C_) $(GLSRC)gp_psync.c
+
+# Other stuff.
+
+# Other MS-DOS facilities.
+$(GLOBJ)gp_msdos.$(OBJ) : $(GLSRC)gp_msdos.c $(AK)\
+ $(dos__h) $(stdio__h) $(string__h)\
+ $(gsmemory_h) $(gstypes_h) $(gp_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gp_msdos.$(OBJ) $(C_) $(GLSRC)gp_msdos.c
+
+# Dummy XPS printing function - the only real one is in the Windows
+# platform code
+$(GLOBJ)gp_nxpsprn.$(OBJ) : $(GLSRC)gp_nxpsprn.c $(gp_h) $(std_h) $(LIB_MAK) \
+ $(AK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gp_nxpsprn.$(OBJ) $(C_) $(GLSRC)gp_nxpsprn.c
+
+# ================ Adobe Glyph List ================ #
+
+gsagl_=$(GLOBJ)gsagl.$(OBJ)
+$(GLD)gsagl.dev : $(LIB_MAK) $(ECHOGS_XE) $(gsagl_) $(LIB_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)gsagl $(gsagl_)
+
+$(GLOBJ)gsagl.$(OBJ) : $(GLSRC)gsagl.c $(GDEV)\
+ $(gsagl_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gsagl.$(OBJ) $(C_) $(GLSRC)gsagl.c
+
+# ================ Dependencies for auxiliary programs ================ #
+
+GENARCH_DEPS=$(stdpre_h)
+GENCONF_DEPS=$(stdpre_h)
+GENDEV_DEPS=$(stdpre_h)
+# For the included .c files, we need to include both the .c and the
+# compiled file in the dependencies, to express the implicit dependency
+# on all .h files included by those .c files.
+GENHT_DEPS=$(malloc__h) $(stdio__h) $(string__h)\
+ $(gscdefs_h) $(gsmemory_h)\
+ $(gxbitmap_h) $(gxdht_h) $(gxhttile_h) $(gxtmap_h)\
+ $(sstring_h) $(strimpl_h)\
+ $(GLSRC)gxhtbit.c $(GLOBJ)gxhtbit.$(OBJ)\
+ $(GLSRC)scantab.c $(GLOBJ)scantab.$(OBJ)\
+ $(GLSRC)sstring.c $(GLOBJ)sstring.$(OBJ)
+GENHT_CFLAGS=$(I_)$(GLI_)$(_I) $(GLF_)
+
+# ============================= Main program ============================== #
+
+# Main program for library testing
+
+$(GLOBJ)gslib.$(OBJ) : $(GLSRC)gslib.c $(AK)\
+ $(math__h) $(stdio__h) $(string__h) $(gx_h) $(gp_h) $(gsalloc_h)\
+ $(gserrors_h) $(gsmatrix_h) $(gsrop_h) $(gsstate_h) $(gscspace_h)\
+ $(gscdefs_h) $(gscie_h) $(gscolor2_h) $(gscoord_h) $(gscrd_h)\
+ $(gshtx_h) $(gsiparm3_h) $(gsiparm4_h) $(gslib_h) $(gsparam_h)\
+ $(gspaint_h) $(gspath_h) $(gspath2_h) $(gsstruct_h) $(gsutil_h)\
+ $(gxalloc_h) $(gxdcolor_h) $(gxdevice_h) $(gxht_h) $(gdevbbox_h)\
+ $(gxiodev_h) $(LIB_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gslib.$(OBJ) $(C_) $(GLSRC)gslib.c
+
+# Dependencies:
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gstext.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gscms.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gp.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)memento.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)memory_.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)srdline.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)scommon.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)stat_.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)std.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevdcrd.h:$(GLGEN)arch.h
+$(GLSRC)gdevdcrd.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gstext.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gscms.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gp.h
+$(GLSRC)gdevpccm.h:$(GLSRC)memento.h
+$(GLSRC)gdevpccm.h:$(GLSRC)memory_.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevpccm.h:$(GLSRC)srdline.h
+$(GLSRC)gdevpccm.h:$(GLSRC)scommon.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevpccm.h:$(GLSRC)stat_.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevpccm.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevpccm.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevpccm.h:$(GLSRC)std.h
+$(GLSRC)gdevpccm.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevpccm.h:$(GLGEN)arch.h
+$(GLSRC)gdevpccm.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)stdint_.h:$(GLSRC)std.h
+$(GLSRC)stdint_.h:$(GLSRC)stdpre.h
+$(GLSRC)stdint_.h:$(GLGEN)arch.h
+$(GLSRC)gstypes.h:$(GLSRC)stdpre.h
+$(GLSRC)srdline.h:$(GLSRC)scommon.h
+$(GLSRC)srdline.h:$(GLSRC)gsstype.h
+$(GLSRC)srdline.h:$(GLSRC)gsmemory.h
+$(GLSRC)srdline.h:$(GLSRC)gslibctx.h
+$(GLSRC)srdline.h:$(GLSRC)stdio_.h
+$(GLSRC)srdline.h:$(GLSRC)stdint_.h
+$(GLSRC)srdline.h:$(GLSRC)gssprintf.h
+$(GLSRC)srdline.h:$(GLSRC)gstypes.h
+$(GLSRC)srdline.h:$(GLSRC)std.h
+$(GLSRC)srdline.h:$(GLSRC)stdpre.h
+$(GLSRC)srdline.h:$(GLGEN)arch.h
+$(GLSRC)srdline.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gpmisc.h:$(GLSRC)gp.h
+$(GLSRC)gpmisc.h:$(GLSRC)memory_.h
+$(GLSRC)gpmisc.h:$(GLSRC)srdline.h
+$(GLSRC)gpmisc.h:$(GLSRC)scommon.h
+$(GLSRC)gpmisc.h:$(GLSRC)stat_.h
+$(GLSRC)gpmisc.h:$(GLSRC)gsstype.h
+$(GLSRC)gpmisc.h:$(GLSRC)gsmemory.h
+$(GLSRC)gpmisc.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gpmisc.h:$(GLSRC)gscdefs.h
+$(GLSRC)gpmisc.h:$(GLSRC)gslibctx.h
+$(GLSRC)gpmisc.h:$(GLSRC)stdio_.h
+$(GLSRC)gpmisc.h:$(GLSRC)stdint_.h
+$(GLSRC)gpmisc.h:$(GLSRC)gssprintf.h
+$(GLSRC)gpmisc.h:$(GLSRC)gstypes.h
+$(GLSRC)gpmisc.h:$(GLSRC)std.h
+$(GLSRC)gpmisc.h:$(GLSRC)stdpre.h
+$(GLSRC)gpmisc.h:$(GLGEN)arch.h
+$(GLSRC)gpmisc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gp.h:$(GLSRC)memory_.h
+$(GLSRC)gp.h:$(GLSRC)srdline.h
+$(GLSRC)gp.h:$(GLSRC)scommon.h
+$(GLSRC)gp.h:$(GLSRC)stat_.h
+$(GLSRC)gp.h:$(GLSRC)gsstype.h
+$(GLSRC)gp.h:$(GLSRC)gsmemory.h
+$(GLSRC)gp.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gp.h:$(GLSRC)globals.h
+$(GLSRC)gp.h:$(GLSRC)gscdefs.h
+$(GLSRC)gp.h:$(GLSRC)gslibctx.h
+$(GLSRC)gp.h:$(GLSRC)stdio_.h
+$(GLSRC)gp.h:$(GLSRC)stdint_.h
+$(GLSRC)gp.h:$(GLSRC)gssprintf.h
+$(GLSRC)gp.h:$(GLSRC)gstypes.h
+$(GLSRC)gp.h:$(GLSRC)std.h
+$(GLSRC)gp.h:$(GLSRC)stdpre.h
+$(GLSRC)gp.h:$(GLGEN)arch.h
+$(GLSRC)gp.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gpcheck.h:$(GLSRC)std.h
+$(GLSRC)gpcheck.h:$(GLSRC)stdpre.h
+$(GLSRC)gpcheck.h:$(GLGEN)arch.h
+$(GLSRC)gpsync.h:$(GLSRC)stdint_.h
+$(GLSRC)gpsync.h:$(GLSRC)std.h
+$(GLSRC)gpsync.h:$(GLSRC)stdpre.h
+$(GLSRC)gpsync.h:$(GLGEN)arch.h
+$(GLSRC)gconf.h:$(GLGEN)gconfig.h
+$(GLSRC)std.h:$(GLSRC)stdpre.h
+$(GLSRC)std.h:$(GLGEN)arch.h
+$(GLSRC)gsstrl.h:$(GLSRC)stdpre.h
+$(GLSRC)ctype_.h:$(GLSRC)std.h
+$(GLSRC)ctype_.h:$(GLSRC)stdpre.h
+$(GLSRC)ctype_.h:$(GLGEN)arch.h
+$(GLSRC)dirent_.h:$(GLGEN)gconfig_.h
+$(GLSRC)dirent_.h:$(GLSRC)std.h
+$(GLSRC)dirent_.h:$(GLSRC)stdpre.h
+$(GLSRC)dirent_.h:$(GLGEN)arch.h
+$(GLSRC)errno_.h:$(GLSRC)std.h
+$(GLSRC)errno_.h:$(GLSRC)stdpre.h
+$(GLSRC)errno_.h:$(GLGEN)arch.h
+$(GLSRC)fcntl_.h:$(GLSRC)std.h
+$(GLSRC)fcntl_.h:$(GLSRC)stdpre.h
+$(GLSRC)fcntl_.h:$(GLGEN)arch.h
+$(GLSRC)locale_.h:$(GLSRC)std.h
+$(GLSRC)locale_.h:$(GLSRC)stdpre.h
+$(GLSRC)locale_.h:$(GLGEN)arch.h
+$(GLSRC)malloc_.h:$(GLSRC)bobbin.h
+$(GLSRC)malloc_.h:$(GLSRC)memento.h
+$(GLSRC)malloc_.h:$(GLSRC)std.h
+$(GLSRC)malloc_.h:$(GLSRC)stdpre.h
+$(GLSRC)malloc_.h:$(GLGEN)arch.h
+$(GLSRC)math_.h:$(GLSRC)vmsmath.h
+$(GLSRC)math_.h:$(GLSRC)std.h
+$(GLSRC)math_.h:$(GLSRC)stdpre.h
+$(GLSRC)math_.h:$(GLGEN)arch.h
+$(GLSRC)memory_.h:$(GLSRC)std.h
+$(GLSRC)memory_.h:$(GLSRC)stdpre.h
+$(GLSRC)memory_.h:$(GLGEN)arch.h
+$(GLSRC)stat_.h:$(GLSRC)std.h
+$(GLSRC)stat_.h:$(GLSRC)stdpre.h
+$(GLSRC)stat_.h:$(GLGEN)arch.h
+$(GLSRC)stdio_.h:$(GLSRC)gssprintf.h
+$(GLSRC)stdio_.h:$(GLSRC)std.h
+$(GLSRC)stdio_.h:$(GLSRC)stdpre.h
+$(GLSRC)stdio_.h:$(GLGEN)arch.h
+$(GLSRC)string_.h:$(GLSRC)gsstrtok.h
+$(GLSRC)string_.h:$(GLSRC)gsstrl.h
+$(GLSRC)string_.h:$(GLSRC)std.h
+$(GLSRC)string_.h:$(GLSRC)stdpre.h
+$(GLSRC)string_.h:$(GLGEN)arch.h
+$(GLSRC)time_.h:$(GLGEN)gconfig_.h
+$(GLSRC)time_.h:$(GLSRC)std.h
+$(GLSRC)time_.h:$(GLSRC)stdpre.h
+$(GLSRC)time_.h:$(GLGEN)arch.h
+$(GLSRC)unistd_.h:$(GLSRC)std.h
+$(GLSRC)unistd_.h:$(GLSRC)stdpre.h
+$(GLSRC)unistd_.h:$(GLGEN)arch.h
+$(GLSRC)pipe_.h:$(GLSRC)stdio_.h
+$(GLSRC)pipe_.h:$(GLSRC)gssprintf.h
+$(GLSRC)pipe_.h:$(GLSRC)std.h
+$(GLSRC)pipe_.h:$(GLSRC)stdpre.h
+$(GLSRC)pipe_.h:$(GLGEN)arch.h
+$(GLSRC)jerror_.h:$(JSRCDIR)$(D)jerror.h
+$(GLSRC)gxstdio.h:$(GLSRC)gsio.h
+$(GLSRC)gslibctx.h:$(GLSRC)stdio_.h
+$(GLSRC)gslibctx.h:$(GLSRC)gssprintf.h
+$(GLSRC)gslibctx.h:$(GLSRC)std.h
+$(GLSRC)gslibctx.h:$(GLSRC)stdpre.h
+$(GLSRC)gslibctx.h:$(GLGEN)arch.h
+$(GLSRC)gslibctx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdebug.h:$(GLSRC)gdbflags.h
+$(GLSRC)gdebug.h:$(GLSRC)std.h
+$(GLSRC)gdebug.h:$(GLSRC)stdpre.h
+$(GLSRC)gdebug.h:$(GLGEN)arch.h
+$(GLSRC)gsalloc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsalloc.h:$(GLSRC)std.h
+$(GLSRC)gsalloc.h:$(GLSRC)stdpre.h
+$(GLSRC)gsalloc.h:$(GLGEN)arch.h
+$(GLSRC)gsargs.h:$(GLSRC)std.h
+$(GLSRC)gsargs.h:$(GLSRC)stdpre.h
+$(GLSRC)gsargs.h:$(GLGEN)arch.h
+$(GLSRC)gsexit.h:$(GLSRC)std.h
+$(GLSRC)gsexit.h:$(GLSRC)stdpre.h
+$(GLSRC)gsexit.h:$(GLGEN)arch.h
+$(GLSRC)gsgc.h:$(GLSRC)gsalloc.h
+$(GLSRC)gsgc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsgc.h:$(GLSRC)std.h
+$(GLSRC)gsgc.h:$(GLSRC)stdpre.h
+$(GLSRC)gsgc.h:$(GLGEN)arch.h
+$(GLSRC)globals.h:$(GLSRC)std.h
+$(GLSRC)globals.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsmalloc.h:$(GLSRC)gxsync.h
+$(GLSRC)gsmalloc.h:$(GLSRC)gpsync.h
+$(GLSRC)gsmalloc.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsmalloc.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsmalloc.h:$(GLSRC)stdio_.h
+$(GLSRC)gsmalloc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsmalloc.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsmalloc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsmalloc.h:$(GLSRC)std.h
+$(GLSRC)gsmalloc.h:$(GLSRC)stdpre.h
+$(GLSRC)gsmalloc.h:$(GLGEN)arch.h
+$(GLSRC)gsmalloc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsmchunk.h:$(GLSRC)std.h
+$(GLSRC)gsmchunk.h:$(GLSRC)stdpre.h
+$(GLSRC)gsmchunk.h:$(GLGEN)arch.h
+$(GLSRC)valgrind.h:$(GLSRC)stdpre.h
+$(GLSRC)gsmdebug.h:$(GLSRC)valgrind.h
+$(GLSRC)gsmdebug.h:$(GLSRC)stdpre.h
+$(GLSRC)gsmemory.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsmemory.h:$(GLSRC)stdio_.h
+$(GLSRC)gsmemory.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsmemory.h:$(GLSRC)gstypes.h
+$(GLSRC)gsmemory.h:$(GLSRC)std.h
+$(GLSRC)gsmemory.h:$(GLSRC)stdpre.h
+$(GLSRC)gsmemory.h:$(GLGEN)arch.h
+$(GLSRC)gsmemory.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsmemret.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsmemret.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsmemret.h:$(GLSRC)stdio_.h
+$(GLSRC)gsmemret.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsmemret.h:$(GLSRC)gstypes.h
+$(GLSRC)gsmemret.h:$(GLSRC)std.h
+$(GLSRC)gsmemret.h:$(GLSRC)stdpre.h
+$(GLSRC)gsmemret.h:$(GLGEN)arch.h
+$(GLSRC)gsmemret.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsnogc.h:$(GLSRC)gsgc.h
+$(GLSRC)gsnogc.h:$(GLSRC)gsalloc.h
+$(GLSRC)gsnogc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsnogc.h:$(GLSRC)std.h
+$(GLSRC)gsnogc.h:$(GLSRC)stdpre.h
+$(GLSRC)gsnogc.h:$(GLGEN)arch.h
+$(GLSRC)gsrefct.h:$(GLSRC)memento.h
+$(GLSRC)gsrefct.h:$(GLSRC)std.h
+$(GLSRC)gsrefct.h:$(GLSRC)stdpre.h
+$(GLSRC)gsrefct.h:$(GLGEN)arch.h
+$(GLSRC)gsserial.h:$(GLSRC)stdpre.h
+$(GLSRC)gsstype.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsstype.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsstype.h:$(GLSRC)stdio_.h
+$(GLSRC)gsstype.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsstype.h:$(GLSRC)gstypes.h
+$(GLSRC)gsstype.h:$(GLSRC)std.h
+$(GLSRC)gsstype.h:$(GLSRC)stdpre.h
+$(GLSRC)gsstype.h:$(GLGEN)arch.h
+$(GLSRC)gsstype.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gx.h:$(GLSRC)gdebug.h
+$(GLSRC)gx.h:$(GLSRC)gsgstate.h
+$(GLSRC)gx.h:$(GLSRC)gsio.h
+$(GLSRC)gx.h:$(GLSRC)gdbflags.h
+$(GLSRC)gx.h:$(GLSRC)gserrors.h
+$(GLSRC)gx.h:$(GLSRC)gsmemory.h
+$(GLSRC)gx.h:$(GLSRC)gslibctx.h
+$(GLSRC)gx.h:$(GLSRC)stdio_.h
+$(GLSRC)gx.h:$(GLSRC)gssprintf.h
+$(GLSRC)gx.h:$(GLSRC)gstypes.h
+$(GLSRC)gx.h:$(GLSRC)std.h
+$(GLSRC)gx.h:$(GLSRC)stdpre.h
+$(GLSRC)gx.h:$(GLGEN)arch.h
+$(GLSRC)gx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxsync.h:$(GLSRC)gpsync.h
+$(GLSRC)gxsync.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxsync.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxsync.h:$(GLSRC)stdio_.h
+$(GLSRC)gxsync.h:$(GLSRC)stdint_.h
+$(GLSRC)gxsync.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxsync.h:$(GLSRC)gstypes.h
+$(GLSRC)gxsync.h:$(GLSRC)std.h
+$(GLSRC)gxsync.h:$(GLSRC)stdpre.h
+$(GLSRC)gxsync.h:$(GLGEN)arch.h
+$(GLSRC)gxsync.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxclist.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxgstate.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gstrans.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gdevp14.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxline.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsht1.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxclthrd.h:$(GLSRC)math_.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcolor2.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxband.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxblend.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscolor2.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxdevice.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcpath.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsht.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsequivc.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscindex.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsptype1.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscie.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxtext.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gstext.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxstate.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gstparam.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxctable.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsfont.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxftype.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscms.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsio.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxclio.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gp.h
+$(GLSRC)gxclthrd.h:$(GLSRC)memento.h
+$(GLSRC)gxclthrd.h:$(GLSRC)memory_.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclthrd.h:$(GLSRC)vmsmath.h
+$(GLSRC)gxclthrd.h:$(GLSRC)srdline.h
+$(GLSRC)gxclthrd.h:$(GLSRC)scommon.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsfname.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxarith.h
+$(GLSRC)gxclthrd.h:$(GLSRC)stat_.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gpsync.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxclthrd.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gsccode.h
+$(GLSRC)gxclthrd.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclthrd.h:$(GLSRC)std.h
+$(GLSRC)gxclthrd.h:$(GLSRC)stdpre.h
+$(GLSRC)gxclthrd.h:$(GLGEN)arch.h
+$(GLSRC)gxclthrd.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxtext.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gstext.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gstparam.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsfont.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxpath.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxftype.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gscms.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsrect.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gslparam.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gp.h
+$(GLSRC)gxdevsop.h:$(GLSRC)memento.h
+$(GLSRC)gxdevsop.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdevsop.h:$(GLSRC)srdline.h
+$(GLSRC)gxdevsop.h:$(GLSRC)scommon.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdevsop.h:$(GLSRC)stat_.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gpsync.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdevsop.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gsccode.h
+$(GLSRC)gxdevsop.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdevsop.h:$(GLSRC)std.h
+$(GLSRC)gxdevsop.h:$(GLSRC)stdpre.h
+$(GLSRC)gxdevsop.h:$(GLGEN)arch.h
+$(GLSRC)gxdevsop.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxdevice.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevflp.h:$(GLSRC)gstext.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevflp.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevflp.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevflp.h:$(GLSRC)gscms.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevflp.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevflp.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevflp.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsio.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevflp.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevflp.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevflp.h:$(GLSRC)gp.h
+$(GLSRC)gdevflp.h:$(GLSRC)memento.h
+$(GLSRC)gdevflp.h:$(GLSRC)memory_.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevflp.h:$(GLSRC)srdline.h
+$(GLSRC)gdevflp.h:$(GLSRC)scommon.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsfname.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevflp.h:$(GLSRC)stat_.h
+$(GLSRC)gdevflp.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevflp.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevflp.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevflp.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevflp.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevflp.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevflp.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevflp.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevflp.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevflp.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevflp.h:$(GLSRC)std.h
+$(GLSRC)gdevflp.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevflp.h:$(GLGEN)arch.h
+$(GLSRC)gdevflp.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gdevflp.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gdevoflt.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gdevnup.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxdevice.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gstext.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscms.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsio.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gp.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)memento.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)memory_.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)srdline.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)scommon.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsfname.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stat_.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)std.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevkrnlsclass.h:$(GLGEN)arch.h
+$(GLSRC)gdevkrnlsclass.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxdevice.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gstext.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gscms.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsio.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gp.h
+$(GLSRC)gdevsclass.h:$(GLSRC)memento.h
+$(GLSRC)gdevsclass.h:$(GLSRC)memory_.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevsclass.h:$(GLSRC)srdline.h
+$(GLSRC)gdevsclass.h:$(GLSRC)scommon.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsfname.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevsclass.h:$(GLSRC)stat_.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevsclass.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevsclass.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevsclass.h:$(GLSRC)std.h
+$(GLSRC)gdevsclass.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevsclass.h:$(GLGEN)arch.h
+$(GLSRC)gdevsclass.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsnotify.h:$(GLSRC)gsstype.h
+$(GLSRC)gsnotify.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsnotify.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsnotify.h:$(GLSRC)stdio_.h
+$(GLSRC)gsnotify.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsnotify.h:$(GLSRC)gstypes.h
+$(GLSRC)gsnotify.h:$(GLSRC)std.h
+$(GLSRC)gsnotify.h:$(GLSRC)stdpre.h
+$(GLSRC)gsnotify.h:$(GLGEN)arch.h
+$(GLSRC)gsnotify.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsstruct.h:$(GLSRC)gsstype.h
+$(GLSRC)gsstruct.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsstruct.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsstruct.h:$(GLSRC)stdio_.h
+$(GLSRC)gsstruct.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsstruct.h:$(GLSRC)gstypes.h
+$(GLSRC)gsstruct.h:$(GLSRC)std.h
+$(GLSRC)gsstruct.h:$(GLSRC)stdpre.h
+$(GLSRC)gsstruct.h:$(GLGEN)arch.h
+$(GLSRC)gsstruct.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsbitmap.h:$(GLSRC)gsstype.h
+$(GLSRC)gsbitmap.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsbitmap.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsbitmap.h:$(GLSRC)stdio_.h
+$(GLSRC)gsbitmap.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsbitmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gsbitmap.h:$(GLSRC)std.h
+$(GLSRC)gsbitmap.h:$(GLSRC)stdpre.h
+$(GLSRC)gsbitmap.h:$(GLGEN)arch.h
+$(GLSRC)gsbitmap.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsbitops.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsbitops.h:$(GLSRC)stdint_.h
+$(GLSRC)gsbitops.h:$(GLSRC)gstypes.h
+$(GLSRC)gsbitops.h:$(GLSRC)std.h
+$(GLSRC)gsbitops.h:$(GLSRC)stdpre.h
+$(GLSRC)gsbitops.h:$(GLGEN)arch.h
+$(GLSRC)gsbittab.h:$(GLSRC)gstypes.h
+$(GLSRC)gsbittab.h:$(GLSRC)stdpre.h
+$(GLSRC)gsflip.h:$(GLSRC)stdpre.h
+$(GLSRC)gsuid.h:$(GLSRC)std.h
+$(GLSRC)gsuid.h:$(GLSRC)stdpre.h
+$(GLSRC)gsuid.h:$(GLGEN)arch.h
+$(GLSRC)gsutil.h:$(GLSRC)gstypes.h
+$(GLSRC)gsutil.h:$(GLSRC)std.h
+$(GLSRC)gsutil.h:$(GLSRC)stdpre.h
+$(GLSRC)gsutil.h:$(GLGEN)arch.h
+$(GLSRC)gxbitmap.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxbitmap.h:$(GLSRC)gsstype.h
+$(GLSRC)gxbitmap.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxbitmap.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxbitmap.h:$(GLSRC)stdio_.h
+$(GLSRC)gxbitmap.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxbitmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gxbitmap.h:$(GLSRC)std.h
+$(GLSRC)gxbitmap.h:$(GLSRC)stdpre.h
+$(GLSRC)gxbitmap.h:$(GLGEN)arch.h
+$(GLSRC)gxbitmap.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfarith.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfarith.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfixed.h:$(GLSRC)std.h
+$(GLSRC)gxfixed.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfixed.h:$(GLGEN)arch.h
+$(GLSRC)gxobj.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxobj.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxobj.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxobj.h:$(GLSRC)gsstype.h
+$(GLSRC)gxobj.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxobj.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxobj.h:$(GLSRC)stdio_.h
+$(GLSRC)gxobj.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxobj.h:$(GLSRC)gstypes.h
+$(GLSRC)gxobj.h:$(GLSRC)std.h
+$(GLSRC)gxobj.h:$(GLSRC)stdpre.h
+$(GLSRC)gxobj.h:$(GLGEN)arch.h
+$(GLSRC)gxobj.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxrplane.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxrplane.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxrplane.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxrplane.h:$(GLSRC)gsparam.h
+$(GLSRC)gxrplane.h:$(GLSRC)scommon.h
+$(GLSRC)gxrplane.h:$(GLSRC)gsstype.h
+$(GLSRC)gxrplane.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxrplane.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxrplane.h:$(GLSRC)stdio_.h
+$(GLSRC)gxrplane.h:$(GLSRC)stdint_.h
+$(GLSRC)gxrplane.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxrplane.h:$(GLSRC)gstypes.h
+$(GLSRC)gxrplane.h:$(GLSRC)std.h
+$(GLSRC)gxrplane.h:$(GLSRC)stdpre.h
+$(GLSRC)gxrplane.h:$(GLGEN)arch.h
+$(GLSRC)gxrplane.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsrect.h:$(GLSRC)gxfixed.h
+$(GLSRC)gsrect.h:$(GLSRC)gstypes.h
+$(GLSRC)gsrect.h:$(GLSRC)std.h
+$(GLSRC)gsrect.h:$(GLSRC)stdpre.h
+$(GLSRC)gsrect.h:$(GLGEN)arch.h
+$(GLSRC)gxalloc.h:$(GLSRC)gxobj.h
+$(GLSRC)gxalloc.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxalloc.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxalloc.h:$(GLSRC)scommon.h
+$(GLSRC)gxalloc.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxalloc.h:$(GLSRC)gsstype.h
+$(GLSRC)gxalloc.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxalloc.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxalloc.h:$(GLSRC)gsalloc.h
+$(GLSRC)gxalloc.h:$(GLSRC)stdio_.h
+$(GLSRC)gxalloc.h:$(GLSRC)stdint_.h
+$(GLSRC)gxalloc.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxalloc.h:$(GLSRC)gstypes.h
+$(GLSRC)gxalloc.h:$(GLSRC)std.h
+$(GLSRC)gxalloc.h:$(GLSRC)stdpre.h
+$(GLSRC)gxalloc.h:$(GLGEN)arch.h
+$(GLSRC)gxalloc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxbitops.h:$(GLSRC)gsbitops.h
+$(GLSRC)gxbitops.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxbitops.h:$(GLSRC)stdint_.h
+$(GLSRC)gxbitops.h:$(GLSRC)gstypes.h
+$(GLSRC)gxbitops.h:$(GLSRC)std.h
+$(GLSRC)gxbitops.h:$(GLSRC)stdpre.h
+$(GLSRC)gxbitops.h:$(GLGEN)arch.h
+$(GLSRC)gxcindex.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcindex.h:$(GLSRC)std.h
+$(GLSRC)gxcindex.h:$(GLSRC)stdpre.h
+$(GLSRC)gxcindex.h:$(GLGEN)arch.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxfont.h
+$(GLSRC)gxfont42.h:$(GLSRC)gspath.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsgdata.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxfapi.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsfcmap.h
+$(GLSRC)gxfont42.h:$(GLSRC)gstext.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxpath.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxftype.h
+$(GLSRC)gxfont42.h:$(GLSRC)gscms.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfont42.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfont42.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont42.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsnotify.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont42.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsparam.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont42.h:$(GLSRC)memento.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont42.h:$(GLSRC)scommon.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont42.h:$(GLSRC)gpsync.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxfont42.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfont42.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxfont42.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfont42.h:$(GLSRC)gsccode.h
+$(GLSRC)gxfont42.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfont42.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfont42.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfont42.h:$(GLSRC)std.h
+$(GLSRC)gxfont42.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfont42.h:$(GLGEN)arch.h
+$(GLSRC)gxfont42.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gstrans.h:$(GLSRC)gdevp14.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcomp.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcolor2.h
+$(GLSRC)gstrans.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gstrans.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gstrans.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gstrans.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gstrans.h:$(GLSRC)gxblend.h
+$(GLSRC)gstrans.h:$(GLSRC)gscolor2.h
+$(GLSRC)gstrans.h:$(GLSRC)gxdevice.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcpath.h
+$(GLSRC)gstrans.h:$(GLSRC)gsequivc.h
+$(GLSRC)gstrans.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gstrans.h:$(GLSRC)gxpcache.h
+$(GLSRC)gstrans.h:$(GLSRC)gscindex.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcmap.h
+$(GLSRC)gstrans.h:$(GLSRC)gsptype1.h
+$(GLSRC)gstrans.h:$(GLSRC)gscie.h
+$(GLSRC)gstrans.h:$(GLSRC)gxtext.h
+$(GLSRC)gstrans.h:$(GLSRC)gstext.h
+$(GLSRC)gstrans.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gstrans.h:$(GLSRC)gstparam.h
+$(GLSRC)gstrans.h:$(GLSRC)gspcolor.h
+$(GLSRC)gstrans.h:$(GLSRC)gxfmap.h
+$(GLSRC)gstrans.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gstrans.h:$(GLSRC)gsfunc.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcspace.h
+$(GLSRC)gstrans.h:$(GLSRC)gxctable.h
+$(GLSRC)gstrans.h:$(GLSRC)gxrplane.h
+$(GLSRC)gstrans.h:$(GLSRC)gscsel.h
+$(GLSRC)gstrans.h:$(GLSRC)gxfcache.h
+$(GLSRC)gstrans.h:$(GLSRC)gsfont.h
+$(GLSRC)gstrans.h:$(GLSRC)gsimage.h
+$(GLSRC)gstrans.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gstrans.h:$(GLSRC)gxbcache.h
+$(GLSRC)gstrans.h:$(GLSRC)gsropt.h
+$(GLSRC)gstrans.h:$(GLSRC)gxdda.h
+$(GLSRC)gstrans.h:$(GLSRC)gxpath.h
+$(GLSRC)gstrans.h:$(GLSRC)gxiclass.h
+$(GLSRC)gstrans.h:$(GLSRC)gxfrac.h
+$(GLSRC)gstrans.h:$(GLSRC)gxtmap.h
+$(GLSRC)gstrans.h:$(GLSRC)gxftype.h
+$(GLSRC)gstrans.h:$(GLSRC)gscms.h
+$(GLSRC)gstrans.h:$(GLSRC)gsrect.h
+$(GLSRC)gstrans.h:$(GLSRC)gslparam.h
+$(GLSRC)gstrans.h:$(GLSRC)gsdevice.h
+$(GLSRC)gstrans.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gstrans.h:$(GLSRC)gscpm.h
+$(GLSRC)gstrans.h:$(GLSRC)gscspace.h
+$(GLSRC)gstrans.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstrans.h:$(GLSRC)gxstdio.h
+$(GLSRC)gstrans.h:$(GLSRC)gsxfont.h
+$(GLSRC)gstrans.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gstrans.h:$(GLSRC)gsio.h
+$(GLSRC)gstrans.h:$(GLSRC)gsiparam.h
+$(GLSRC)gstrans.h:$(GLSRC)gxfixed.h
+$(GLSRC)gstrans.h:$(GLSRC)gscompt.h
+$(GLSRC)gstrans.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstrans.h:$(GLSRC)gspenum.h
+$(GLSRC)gstrans.h:$(GLSRC)gxhttile.h
+$(GLSRC)gstrans.h:$(GLSRC)gsparam.h
+$(GLSRC)gstrans.h:$(GLSRC)gsrefct.h
+$(GLSRC)gstrans.h:$(GLSRC)gp.h
+$(GLSRC)gstrans.h:$(GLSRC)memento.h
+$(GLSRC)gstrans.h:$(GLSRC)memory_.h
+$(GLSRC)gstrans.h:$(GLSRC)gsuid.h
+$(GLSRC)gstrans.h:$(GLSRC)gsstruct.h
+$(GLSRC)gstrans.h:$(GLSRC)gxsync.h
+$(GLSRC)gstrans.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gstrans.h:$(GLSRC)srdline.h
+$(GLSRC)gstrans.h:$(GLSRC)scommon.h
+$(GLSRC)gstrans.h:$(GLSRC)gsfname.h
+$(GLSRC)gstrans.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gstrans.h:$(GLSRC)gsccolor.h
+$(GLSRC)gstrans.h:$(GLSRC)gxarith.h
+$(GLSRC)gstrans.h:$(GLSRC)stat_.h
+$(GLSRC)gstrans.h:$(GLSRC)gpsync.h
+$(GLSRC)gstrans.h:$(GLSRC)gsstype.h
+$(GLSRC)gstrans.h:$(GLSRC)gsmemory.h
+$(GLSRC)gstrans.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gstrans.h:$(GLSRC)gscdefs.h
+$(GLSRC)gstrans.h:$(GLSRC)gslibctx.h
+$(GLSRC)gstrans.h:$(GLSRC)gxcindex.h
+$(GLSRC)gstrans.h:$(GLSRC)stdio_.h
+$(GLSRC)gstrans.h:$(GLSRC)gsccode.h
+$(GLSRC)gstrans.h:$(GLSRC)stdint_.h
+$(GLSRC)gstrans.h:$(GLSRC)gssprintf.h
+$(GLSRC)gstrans.h:$(GLSRC)gstypes.h
+$(GLSRC)gstrans.h:$(GLSRC)std.h
+$(GLSRC)gstrans.h:$(GLSRC)stdpre.h
+$(GLSRC)gstrans.h:$(GLGEN)arch.h
+$(GLSRC)gstrans.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)scommon.h:$(GLSRC)gsstype.h
+$(GLSRC)scommon.h:$(GLSRC)gsmemory.h
+$(GLSRC)scommon.h:$(GLSRC)gslibctx.h
+$(GLSRC)scommon.h:$(GLSRC)stdio_.h
+$(GLSRC)scommon.h:$(GLSRC)stdint_.h
+$(GLSRC)scommon.h:$(GLSRC)gssprintf.h
+$(GLSRC)scommon.h:$(GLSRC)gstypes.h
+$(GLSRC)scommon.h:$(GLSRC)std.h
+$(GLSRC)scommon.h:$(GLSRC)stdpre.h
+$(GLSRC)scommon.h:$(GLGEN)arch.h
+$(GLSRC)scommon.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)stream.h:$(GLSRC)gxiodev.h
+$(GLSRC)stream.h:$(GLSRC)gsparam.h
+$(GLSRC)stream.h:$(GLSRC)gp.h
+$(GLSRC)stream.h:$(GLSRC)memory_.h
+$(GLSRC)stream.h:$(GLSRC)srdline.h
+$(GLSRC)stream.h:$(GLSRC)scommon.h
+$(GLSRC)stream.h:$(GLSRC)gsfname.h
+$(GLSRC)stream.h:$(GLSRC)stat_.h
+$(GLSRC)stream.h:$(GLSRC)gsstype.h
+$(GLSRC)stream.h:$(GLSRC)gsmemory.h
+$(GLSRC)stream.h:$(GLSRC)gpgetenv.h
+$(GLSRC)stream.h:$(GLSRC)gscdefs.h
+$(GLSRC)stream.h:$(GLSRC)gslibctx.h
+$(GLSRC)stream.h:$(GLSRC)stdio_.h
+$(GLSRC)stream.h:$(GLSRC)stdint_.h
+$(GLSRC)stream.h:$(GLSRC)gssprintf.h
+$(GLSRC)stream.h:$(GLSRC)gstypes.h
+$(GLSRC)stream.h:$(GLSRC)std.h
+$(GLSRC)stream.h:$(GLSRC)stdpre.h
+$(GLSRC)stream.h:$(GLGEN)arch.h
+$(GLSRC)stream.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)ramfs.h:$(GLSRC)stream.h
+$(GLSRC)ramfs.h:$(GLSRC)gxiodev.h
+$(GLSRC)ramfs.h:$(GLSRC)gsparam.h
+$(GLSRC)ramfs.h:$(GLSRC)gp.h
+$(GLSRC)ramfs.h:$(GLSRC)memory_.h
+$(GLSRC)ramfs.h:$(GLSRC)srdline.h
+$(GLSRC)ramfs.h:$(GLSRC)scommon.h
+$(GLSRC)ramfs.h:$(GLSRC)gsfname.h
+$(GLSRC)ramfs.h:$(GLSRC)stat_.h
+$(GLSRC)ramfs.h:$(GLSRC)gsstype.h
+$(GLSRC)ramfs.h:$(GLSRC)gsmemory.h
+$(GLSRC)ramfs.h:$(GLSRC)gpgetenv.h
+$(GLSRC)ramfs.h:$(GLSRC)gscdefs.h
+$(GLSRC)ramfs.h:$(GLSRC)gslibctx.h
+$(GLSRC)ramfs.h:$(GLSRC)stdio_.h
+$(GLSRC)ramfs.h:$(GLSRC)stdint_.h
+$(GLSRC)ramfs.h:$(GLSRC)gssprintf.h
+$(GLSRC)ramfs.h:$(GLSRC)gstypes.h
+$(GLSRC)ramfs.h:$(GLSRC)std.h
+$(GLSRC)ramfs.h:$(GLSRC)stdpre.h
+$(GLSRC)ramfs.h:$(GLGEN)arch.h
+$(GLSRC)ramfs.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsmd5.h:$(GLSRC)memory_.h
+$(GLSRC)gsmd5.h:$(GLSRC)std.h
+$(GLSRC)gsmd5.h:$(GLSRC)stdpre.h
+$(GLSRC)gsmd5.h:$(GLGEN)arch.h
+$(GLSRC)sha2.h:$(GLSRC)stdint_.h
+$(GLSRC)sha2.h:$(GLSRC)std.h
+$(GLSRC)sha2.h:$(GLSRC)stdpre.h
+$(GLSRC)sha2.h:$(GLGEN)arch.h
+$(GLSRC)gsccode.h:$(GLSRC)stdint_.h
+$(GLSRC)gsccode.h:$(GLSRC)gstypes.h
+$(GLSRC)gsccode.h:$(GLSRC)std.h
+$(GLSRC)gsccode.h:$(GLSRC)stdpre.h
+$(GLSRC)gsccode.h:$(GLGEN)arch.h
+$(GLSRC)gsccolor.h:$(GLSRC)gsstype.h
+$(GLSRC)gsccolor.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsccolor.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsccolor.h:$(GLSRC)stdio_.h
+$(GLSRC)gsccolor.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsccolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gsccolor.h:$(GLSRC)std.h
+$(GLSRC)gsccolor.h:$(GLSRC)stdpre.h
+$(GLSRC)gsccolor.h:$(GLGEN)arch.h
+$(GLSRC)gsccolor.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscedata.h:$(GLSRC)stdpre.h
+$(GLSRC)gscencs.h:$(GLSRC)gsccode.h
+$(GLSRC)gscencs.h:$(GLSRC)stdint_.h
+$(GLSRC)gscencs.h:$(GLSRC)gstypes.h
+$(GLSRC)gscencs.h:$(GLSRC)std.h
+$(GLSRC)gscencs.h:$(GLSRC)stdpre.h
+$(GLSRC)gscencs.h:$(GLGEN)arch.h
+$(GLSRC)gsclipsr.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscolor1.h:$(GLSRC)gxtmap.h
+$(GLSRC)gscolor1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscolor1.h:$(GLSRC)stdpre.h
+$(GLSRC)gscompt.h:$(GLSRC)gstypes.h
+$(GLSRC)gscompt.h:$(GLSRC)stdpre.h
+$(GLSRC)gscoord.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscoord.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscoord.h:$(GLSRC)scommon.h
+$(GLSRC)gscoord.h:$(GLSRC)gsstype.h
+$(GLSRC)gscoord.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscoord.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscoord.h:$(GLSRC)stdio_.h
+$(GLSRC)gscoord.h:$(GLSRC)stdint_.h
+$(GLSRC)gscoord.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscoord.h:$(GLSRC)gstypes.h
+$(GLSRC)gscoord.h:$(GLSRC)std.h
+$(GLSRC)gscoord.h:$(GLSRC)stdpre.h
+$(GLSRC)gscoord.h:$(GLGEN)arch.h
+$(GLSRC)gscoord.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsdevice.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsdevice.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsdevice.h:$(GLSRC)gsparam.h
+$(GLSRC)gsdevice.h:$(GLSRC)scommon.h
+$(GLSRC)gsdevice.h:$(GLSRC)gsstype.h
+$(GLSRC)gsdevice.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsdevice.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsdevice.h:$(GLSRC)stdio_.h
+$(GLSRC)gsdevice.h:$(GLSRC)stdint_.h
+$(GLSRC)gsdevice.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsdevice.h:$(GLSRC)gstypes.h
+$(GLSRC)gsdevice.h:$(GLSRC)std.h
+$(GLSRC)gsdevice.h:$(GLSRC)stdpre.h
+$(GLSRC)gsdevice.h:$(GLGEN)arch.h
+$(GLSRC)gsdevice.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsfcmap.h:$(GLSRC)gsccode.h
+$(GLSRC)gsfcmap.h:$(GLSRC)stdint_.h
+$(GLSRC)gsfcmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfcmap.h:$(GLSRC)std.h
+$(GLSRC)gsfcmap.h:$(GLSRC)stdpre.h
+$(GLSRC)gsfcmap.h:$(GLGEN)arch.h
+$(GLSRC)gsfname.h:$(GLSRC)std.h
+$(GLSRC)gsfname.h:$(GLSRC)stdpre.h
+$(GLSRC)gsfname.h:$(GLGEN)arch.h
+$(GLSRC)gsfont.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsfont.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsfont.h:$(GLSRC)scommon.h
+$(GLSRC)gsfont.h:$(GLSRC)gsstype.h
+$(GLSRC)gsfont.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsfont.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsfont.h:$(GLSRC)stdio_.h
+$(GLSRC)gsfont.h:$(GLSRC)stdint_.h
+$(GLSRC)gsfont.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsfont.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfont.h:$(GLSRC)std.h
+$(GLSRC)gsfont.h:$(GLSRC)stdpre.h
+$(GLSRC)gsfont.h:$(GLGEN)arch.h
+$(GLSRC)gsfont.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsgdata.h:$(GLSRC)gsfont.h
+$(GLSRC)gsgdata.h:$(GLSRC)gsgcache.h
+$(GLSRC)gsgdata.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsgdata.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsgdata.h:$(GLSRC)scommon.h
+$(GLSRC)gsgdata.h:$(GLSRC)gsstype.h
+$(GLSRC)gsgdata.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsgdata.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsgdata.h:$(GLSRC)stdio_.h
+$(GLSRC)gsgdata.h:$(GLSRC)stdint_.h
+$(GLSRC)gsgdata.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsgdata.h:$(GLSRC)gstypes.h
+$(GLSRC)gsgdata.h:$(GLSRC)std.h
+$(GLSRC)gsgdata.h:$(GLSRC)stdpre.h
+$(GLSRC)gsgdata.h:$(GLGEN)arch.h
+$(GLSRC)gsgdata.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsgcache.h:$(GLSRC)scommon.h
+$(GLSRC)gsgcache.h:$(GLSRC)gsstype.h
+$(GLSRC)gsgcache.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsgcache.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsgcache.h:$(GLSRC)stdio_.h
+$(GLSRC)gsgcache.h:$(GLSRC)stdint_.h
+$(GLSRC)gsgcache.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsgcache.h:$(GLSRC)gstypes.h
+$(GLSRC)gsgcache.h:$(GLSRC)std.h
+$(GLSRC)gsgcache.h:$(GLSRC)stdpre.h
+$(GLSRC)gsgcache.h:$(GLGEN)arch.h
+$(GLSRC)gsgcache.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gshsb.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsht.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsht.h:$(GLSRC)gstypes.h
+$(GLSRC)gsht.h:$(GLSRC)std.h
+$(GLSRC)gsht.h:$(GLSRC)stdpre.h
+$(GLSRC)gsht.h:$(GLGEN)arch.h
+$(GLSRC)gsht1.h:$(GLSRC)gsht.h
+$(GLSRC)gsht1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsht1.h:$(GLSRC)gstypes.h
+$(GLSRC)gsht1.h:$(GLSRC)std.h
+$(GLSRC)gsht1.h:$(GLSRC)stdpre.h
+$(GLSRC)gsht1.h:$(GLGEN)arch.h
+$(GLSRC)gsjconf.h:$(GLSRC)stdpre.h
+$(GLSRC)gsjconf.h:$(GLGEN)arch.h
+$(GLSRC)gslib.h:$(GLSRC)std.h
+$(GLSRC)gslib.h:$(GLSRC)stdpre.h
+$(GLSRC)gslib.h:$(GLGEN)arch.h
+$(GLSRC)gsmatrix.h:$(GLSRC)scommon.h
+$(GLSRC)gsmatrix.h:$(GLSRC)gsstype.h
+$(GLSRC)gsmatrix.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsmatrix.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsmatrix.h:$(GLSRC)stdio_.h
+$(GLSRC)gsmatrix.h:$(GLSRC)stdint_.h
+$(GLSRC)gsmatrix.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsmatrix.h:$(GLSRC)gstypes.h
+$(GLSRC)gsmatrix.h:$(GLSRC)std.h
+$(GLSRC)gsmatrix.h:$(GLSRC)stdpre.h
+$(GLSRC)gsmatrix.h:$(GLGEN)arch.h
+$(GLSRC)gsmatrix.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxbitfmt.h:$(GLSRC)stdpre.h
+$(GLSRC)gxcomp.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxcomp.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxcomp.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcomp.h:$(GLSRC)gscompt.h
+$(GLSRC)gxcomp.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcomp.h:$(GLSRC)gsparam.h
+$(GLSRC)gxcomp.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcomp.h:$(GLSRC)memento.h
+$(GLSRC)gxcomp.h:$(GLSRC)scommon.h
+$(GLSRC)gxcomp.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcomp.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxcomp.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxcomp.h:$(GLSRC)stdio_.h
+$(GLSRC)gxcomp.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcomp.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxcomp.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcomp.h:$(GLSRC)std.h
+$(GLSRC)gxcomp.h:$(GLSRC)stdpre.h
+$(GLSRC)gxcomp.h:$(GLGEN)arch.h
+$(GLSRC)gxcomp.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsovrc.h:$(GLSRC)gxcomp.h
+$(GLSRC)gsovrc.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsovrc.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gsovrc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsovrc.h:$(GLSRC)gscompt.h
+$(GLSRC)gsovrc.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsovrc.h:$(GLSRC)gsparam.h
+$(GLSRC)gsovrc.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsovrc.h:$(GLSRC)memento.h
+$(GLSRC)gsovrc.h:$(GLSRC)scommon.h
+$(GLSRC)gsovrc.h:$(GLSRC)gsstype.h
+$(GLSRC)gsovrc.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsovrc.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsovrc.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsovrc.h:$(GLSRC)stdio_.h
+$(GLSRC)gsovrc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsovrc.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsovrc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsovrc.h:$(GLSRC)std.h
+$(GLSRC)gsovrc.h:$(GLSRC)stdpre.h
+$(GLSRC)gsovrc.h:$(GLGEN)arch.h
+$(GLSRC)gsovrc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gspaint.h:$(GLSRC)gsgstate.h
+$(GLSRC)gspaint.h:$(GLSRC)stdpre.h
+$(GLSRC)gsparam.h:$(GLSRC)gsstype.h
+$(GLSRC)gsparam.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsparam.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsparam.h:$(GLSRC)stdio_.h
+$(GLSRC)gsparam.h:$(GLSRC)stdint_.h
+$(GLSRC)gsparam.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsparam.h:$(GLSRC)gstypes.h
+$(GLSRC)gsparam.h:$(GLSRC)std.h
+$(GLSRC)gsparam.h:$(GLSRC)stdpre.h
+$(GLSRC)gsparam.h:$(GLGEN)arch.h
+$(GLSRC)gsparam.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsparams.h:$(GLSRC)stream.h
+$(GLSRC)gsparams.h:$(GLSRC)gxiodev.h
+$(GLSRC)gsparams.h:$(GLSRC)gsparam.h
+$(GLSRC)gsparams.h:$(GLSRC)gp.h
+$(GLSRC)gsparams.h:$(GLSRC)memory_.h
+$(GLSRC)gsparams.h:$(GLSRC)srdline.h
+$(GLSRC)gsparams.h:$(GLSRC)scommon.h
+$(GLSRC)gsparams.h:$(GLSRC)gsfname.h
+$(GLSRC)gsparams.h:$(GLSRC)stat_.h
+$(GLSRC)gsparams.h:$(GLSRC)gsstype.h
+$(GLSRC)gsparams.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsparams.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gsparams.h:$(GLSRC)gscdefs.h
+$(GLSRC)gsparams.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsparams.h:$(GLSRC)stdio_.h
+$(GLSRC)gsparams.h:$(GLSRC)stdint_.h
+$(GLSRC)gsparams.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsparams.h:$(GLSRC)gstypes.h
+$(GLSRC)gsparams.h:$(GLSRC)std.h
+$(GLSRC)gsparams.h:$(GLSRC)stdpre.h
+$(GLSRC)gsparams.h:$(GLGEN)arch.h
+$(GLSRC)gsparams.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsparamx.h:$(GLSRC)gsparam.h
+$(GLSRC)gsparamx.h:$(GLSRC)gsstype.h
+$(GLSRC)gsparamx.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsparamx.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsparamx.h:$(GLSRC)stdio_.h
+$(GLSRC)gsparamx.h:$(GLSRC)stdint_.h
+$(GLSRC)gsparamx.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsparamx.h:$(GLSRC)gstypes.h
+$(GLSRC)gsparamx.h:$(GLSRC)std.h
+$(GLSRC)gsparamx.h:$(GLSRC)stdpre.h
+$(GLSRC)gsparamx.h:$(GLGEN)arch.h
+$(GLSRC)gsparamx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gspath2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gspath2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gspath2.h:$(GLSRC)scommon.h
+$(GLSRC)gspath2.h:$(GLSRC)gsstype.h
+$(GLSRC)gspath2.h:$(GLSRC)gsmemory.h
+$(GLSRC)gspath2.h:$(GLSRC)gslibctx.h
+$(GLSRC)gspath2.h:$(GLSRC)stdio_.h
+$(GLSRC)gspath2.h:$(GLSRC)stdint_.h
+$(GLSRC)gspath2.h:$(GLSRC)gssprintf.h
+$(GLSRC)gspath2.h:$(GLSRC)gstypes.h
+$(GLSRC)gspath2.h:$(GLSRC)std.h
+$(GLSRC)gspath2.h:$(GLSRC)stdpre.h
+$(GLSRC)gspath2.h:$(GLGEN)arch.h
+$(GLSRC)gspath2.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gspcolor.h:$(GLSRC)gsgstate.h
+$(GLSRC)gspcolor.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gspcolor.h:$(GLSRC)gsrefct.h
+$(GLSRC)gspcolor.h:$(GLSRC)memento.h
+$(GLSRC)gspcolor.h:$(GLSRC)gsuid.h
+$(GLSRC)gspcolor.h:$(GLSRC)scommon.h
+$(GLSRC)gspcolor.h:$(GLSRC)gsccolor.h
+$(GLSRC)gspcolor.h:$(GLSRC)gsstype.h
+$(GLSRC)gspcolor.h:$(GLSRC)gsmemory.h
+$(GLSRC)gspcolor.h:$(GLSRC)gslibctx.h
+$(GLSRC)gspcolor.h:$(GLSRC)stdio_.h
+$(GLSRC)gspcolor.h:$(GLSRC)stdint_.h
+$(GLSRC)gspcolor.h:$(GLSRC)gssprintf.h
+$(GLSRC)gspcolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gspcolor.h:$(GLSRC)std.h
+$(GLSRC)gspcolor.h:$(GLSRC)stdpre.h
+$(GLSRC)gspcolor.h:$(GLGEN)arch.h
+$(GLSRC)gspcolor.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsptype1.h:$(GLSRC)gspcolor.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gsptype1.h:$(GLSRC)gscms.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsptype1.h:$(GLSRC)gscspace.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsptype1.h:$(GLSRC)gxhttile.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsparam.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsptype1.h:$(GLSRC)memento.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsuid.h
+$(GLSRC)gsptype1.h:$(GLSRC)gxsync.h
+$(GLSRC)gsptype1.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsptype1.h:$(GLSRC)scommon.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsptype1.h:$(GLSRC)gxarith.h
+$(GLSRC)gsptype1.h:$(GLSRC)gpsync.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsstype.h
+$(GLSRC)gsptype1.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsptype1.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsptype1.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsptype1.h:$(GLSRC)stdio_.h
+$(GLSRC)gsptype1.h:$(GLSRC)stdint_.h
+$(GLSRC)gsptype1.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsptype1.h:$(GLSRC)gstypes.h
+$(GLSRC)gsptype1.h:$(GLSRC)std.h
+$(GLSRC)gsptype1.h:$(GLSRC)stdpre.h
+$(GLSRC)gsptype1.h:$(GLGEN)arch.h
+$(GLSRC)gsptype1.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsropt.h:$(GLSRC)stdpre.h
+$(GLSRC)gstext.h:$(GLSRC)gsfont.h
+$(GLSRC)gstext.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gstext.h:$(GLSRC)gxpath.h
+$(GLSRC)gstext.h:$(GLSRC)gscms.h
+$(GLSRC)gstext.h:$(GLSRC)gsrect.h
+$(GLSRC)gstext.h:$(GLSRC)gslparam.h
+$(GLSRC)gstext.h:$(GLSRC)gsdevice.h
+$(GLSRC)gstext.h:$(GLSRC)gscpm.h
+$(GLSRC)gstext.h:$(GLSRC)gscspace.h
+$(GLSRC)gstext.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstext.h:$(GLSRC)gsiparam.h
+$(GLSRC)gstext.h:$(GLSRC)gxfixed.h
+$(GLSRC)gstext.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstext.h:$(GLSRC)gspenum.h
+$(GLSRC)gstext.h:$(GLSRC)gxhttile.h
+$(GLSRC)gstext.h:$(GLSRC)gsparam.h
+$(GLSRC)gstext.h:$(GLSRC)gsrefct.h
+$(GLSRC)gstext.h:$(GLSRC)memento.h
+$(GLSRC)gstext.h:$(GLSRC)gxsync.h
+$(GLSRC)gstext.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gstext.h:$(GLSRC)scommon.h
+$(GLSRC)gstext.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gstext.h:$(GLSRC)gsccolor.h
+$(GLSRC)gstext.h:$(GLSRC)gxarith.h
+$(GLSRC)gstext.h:$(GLSRC)gpsync.h
+$(GLSRC)gstext.h:$(GLSRC)gsstype.h
+$(GLSRC)gstext.h:$(GLSRC)gsmemory.h
+$(GLSRC)gstext.h:$(GLSRC)gslibctx.h
+$(GLSRC)gstext.h:$(GLSRC)gxcindex.h
+$(GLSRC)gstext.h:$(GLSRC)stdio_.h
+$(GLSRC)gstext.h:$(GLSRC)gsccode.h
+$(GLSRC)gstext.h:$(GLSRC)stdint_.h
+$(GLSRC)gstext.h:$(GLSRC)gssprintf.h
+$(GLSRC)gstext.h:$(GLSRC)gstypes.h
+$(GLSRC)gstext.h:$(GLSRC)std.h
+$(GLSRC)gstext.h:$(GLSRC)stdpre.h
+$(GLSRC)gstext.h:$(GLGEN)arch.h
+$(GLSRC)gstext.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsxfont.h:$(GLSRC)stdpre.h
+$(GLSRC)gschar.h:$(GLSRC)gsstate.h
+$(GLSRC)gschar.h:$(GLSRC)gsovrc.h
+$(GLSRC)gschar.h:$(GLSRC)gscolor.h
+$(GLSRC)gschar.h:$(GLSRC)gsline.h
+$(GLSRC)gschar.h:$(GLSRC)gxcomp.h
+$(GLSRC)gschar.h:$(GLSRC)gsht.h
+$(GLSRC)gschar.h:$(GLSRC)gxtext.h
+$(GLSRC)gschar.h:$(GLSRC)gstext.h
+$(GLSRC)gschar.h:$(GLSRC)gscsel.h
+$(GLSRC)gschar.h:$(GLSRC)gxfcache.h
+$(GLSRC)gschar.h:$(GLSRC)gsfont.h
+$(GLSRC)gschar.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gschar.h:$(GLSRC)gxbcache.h
+$(GLSRC)gschar.h:$(GLSRC)gxpath.h
+$(GLSRC)gschar.h:$(GLSRC)gxtmap.h
+$(GLSRC)gschar.h:$(GLSRC)gxftype.h
+$(GLSRC)gschar.h:$(GLSRC)gscms.h
+$(GLSRC)gschar.h:$(GLSRC)gsrect.h
+$(GLSRC)gschar.h:$(GLSRC)gslparam.h
+$(GLSRC)gschar.h:$(GLSRC)gsdevice.h
+$(GLSRC)gschar.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gschar.h:$(GLSRC)gscpm.h
+$(GLSRC)gschar.h:$(GLSRC)gscspace.h
+$(GLSRC)gschar.h:$(GLSRC)gsgstate.h
+$(GLSRC)gschar.h:$(GLSRC)gsxfont.h
+$(GLSRC)gschar.h:$(GLSRC)gsiparam.h
+$(GLSRC)gschar.h:$(GLSRC)gxfixed.h
+$(GLSRC)gschar.h:$(GLSRC)gscompt.h
+$(GLSRC)gschar.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gschar.h:$(GLSRC)gspenum.h
+$(GLSRC)gschar.h:$(GLSRC)gxhttile.h
+$(GLSRC)gschar.h:$(GLSRC)gsparam.h
+$(GLSRC)gschar.h:$(GLSRC)gsrefct.h
+$(GLSRC)gschar.h:$(GLSRC)memento.h
+$(GLSRC)gschar.h:$(GLSRC)gsuid.h
+$(GLSRC)gschar.h:$(GLSRC)gxsync.h
+$(GLSRC)gschar.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gschar.h:$(GLSRC)scommon.h
+$(GLSRC)gschar.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gschar.h:$(GLSRC)gsccolor.h
+$(GLSRC)gschar.h:$(GLSRC)gxarith.h
+$(GLSRC)gschar.h:$(GLSRC)gpsync.h
+$(GLSRC)gschar.h:$(GLSRC)gsstype.h
+$(GLSRC)gschar.h:$(GLSRC)gsmemory.h
+$(GLSRC)gschar.h:$(GLSRC)gslibctx.h
+$(GLSRC)gschar.h:$(GLSRC)gxcindex.h
+$(GLSRC)gschar.h:$(GLSRC)stdio_.h
+$(GLSRC)gschar.h:$(GLSRC)gsccode.h
+$(GLSRC)gschar.h:$(GLSRC)stdint_.h
+$(GLSRC)gschar.h:$(GLSRC)gssprintf.h
+$(GLSRC)gschar.h:$(GLSRC)gstypes.h
+$(GLSRC)gschar.h:$(GLSRC)std.h
+$(GLSRC)gschar.h:$(GLSRC)stdpre.h
+$(GLSRC)gschar.h:$(GLGEN)arch.h
+$(GLSRC)gschar.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsiparam.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsiparam.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsiparam.h:$(GLSRC)scommon.h
+$(GLSRC)gsiparam.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsiparam.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsiparam.h:$(GLSRC)gsstype.h
+$(GLSRC)gsiparam.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsiparam.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsiparam.h:$(GLSRC)stdio_.h
+$(GLSRC)gsiparam.h:$(GLSRC)stdint_.h
+$(GLSRC)gsiparam.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsiparam.h:$(GLSRC)gstypes.h
+$(GLSRC)gsiparam.h:$(GLSRC)std.h
+$(GLSRC)gsiparam.h:$(GLSRC)stdpre.h
+$(GLSRC)gsiparam.h:$(GLGEN)arch.h
+$(GLSRC)gsiparam.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsimage.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsimage.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsimage.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsimage.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsimage.h:$(GLSRC)gsparam.h
+$(GLSRC)gsimage.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsimage.h:$(GLSRC)scommon.h
+$(GLSRC)gsimage.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsimage.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsimage.h:$(GLSRC)gsstype.h
+$(GLSRC)gsimage.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsimage.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsimage.h:$(GLSRC)stdio_.h
+$(GLSRC)gsimage.h:$(GLSRC)stdint_.h
+$(GLSRC)gsimage.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsimage.h:$(GLSRC)gstypes.h
+$(GLSRC)gsimage.h:$(GLSRC)std.h
+$(GLSRC)gsimage.h:$(GLSRC)stdpre.h
+$(GLSRC)gsimage.h:$(GLGEN)arch.h
+$(GLSRC)gsimage.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsline.h:$(GLSRC)gslparam.h
+$(GLSRC)gsline.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsline.h:$(GLSRC)stdpre.h
+$(GLSRC)gspath.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gspath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gspath.h:$(GLSRC)gxfixed.h
+$(GLSRC)gspath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gspath.h:$(GLSRC)gspenum.h
+$(GLSRC)gspath.h:$(GLSRC)scommon.h
+$(GLSRC)gspath.h:$(GLSRC)gsstype.h
+$(GLSRC)gspath.h:$(GLSRC)gsmemory.h
+$(GLSRC)gspath.h:$(GLSRC)gslibctx.h
+$(GLSRC)gspath.h:$(GLSRC)stdio_.h
+$(GLSRC)gspath.h:$(GLSRC)stdint_.h
+$(GLSRC)gspath.h:$(GLSRC)gssprintf.h
+$(GLSRC)gspath.h:$(GLSRC)gstypes.h
+$(GLSRC)gspath.h:$(GLSRC)std.h
+$(GLSRC)gspath.h:$(GLSRC)stdpre.h
+$(GLSRC)gspath.h:$(GLGEN)arch.h
+$(GLSRC)gspath.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsrop.h:$(GLSRC)gsropt.h
+$(GLSRC)gsrop.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsrop.h:$(GLSRC)stdpre.h
+$(GLSRC)gstparam.h:$(GLSRC)gsfunc.h
+$(GLSRC)gstparam.h:$(GLSRC)gscspace.h
+$(GLSRC)gstparam.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstparam.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gstparam.h:$(GLSRC)gsiparam.h
+$(GLSRC)gstparam.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstparam.h:$(GLSRC)gsparam.h
+$(GLSRC)gstparam.h:$(GLSRC)gsrefct.h
+$(GLSRC)gstparam.h:$(GLSRC)memento.h
+$(GLSRC)gstparam.h:$(GLSRC)gsstruct.h
+$(GLSRC)gstparam.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gstparam.h:$(GLSRC)scommon.h
+$(GLSRC)gstparam.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gstparam.h:$(GLSRC)gsccolor.h
+$(GLSRC)gstparam.h:$(GLSRC)gsstype.h
+$(GLSRC)gstparam.h:$(GLSRC)gsmemory.h
+$(GLSRC)gstparam.h:$(GLSRC)gslibctx.h
+$(GLSRC)gstparam.h:$(GLSRC)stdio_.h
+$(GLSRC)gstparam.h:$(GLSRC)stdint_.h
+$(GLSRC)gstparam.h:$(GLSRC)gssprintf.h
+$(GLSRC)gstparam.h:$(GLSRC)gstypes.h
+$(GLSRC)gstparam.h:$(GLSRC)std.h
+$(GLSRC)gstparam.h:$(GLSRC)stdpre.h
+$(GLSRC)gstparam.h:$(GLGEN)arch.h
+$(GLSRC)gstparam.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxbcache.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxbcache.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxbcache.h:$(GLSRC)gsstype.h
+$(GLSRC)gxbcache.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxbcache.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxbcache.h:$(GLSRC)stdio_.h
+$(GLSRC)gxbcache.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxbcache.h:$(GLSRC)gstypes.h
+$(GLSRC)gxbcache.h:$(GLSRC)std.h
+$(GLSRC)gxbcache.h:$(GLSRC)stdpre.h
+$(GLSRC)gxbcache.h:$(GLGEN)arch.h
+$(GLSRC)gxbcache.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclio.h:$(GLSRC)gp.h
+$(GLSRC)gxclio.h:$(GLSRC)memory_.h
+$(GLSRC)gxclio.h:$(GLSRC)srdline.h
+$(GLSRC)gxclio.h:$(GLSRC)scommon.h
+$(GLSRC)gxclio.h:$(GLSRC)stat_.h
+$(GLSRC)gxclio.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclio.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxclio.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxclio.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclio.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxclio.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclio.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclio.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxclio.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclio.h:$(GLSRC)std.h
+$(GLSRC)gxclio.h:$(GLSRC)stdpre.h
+$(GLSRC)gxclio.h:$(GLGEN)arch.h
+$(GLSRC)gxclio.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclip.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxclip.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclip.h:$(GLSRC)gxtext.h
+$(GLSRC)gxclip.h:$(GLSRC)gstext.h
+$(GLSRC)gxclip.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxclip.h:$(GLSRC)gstparam.h
+$(GLSRC)gxclip.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxclip.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclip.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxclip.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclip.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclip.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclip.h:$(GLSRC)gsfont.h
+$(GLSRC)gxclip.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclip.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclip.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxclip.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclip.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclip.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclip.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclip.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclip.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclip.h:$(GLSRC)gxftype.h
+$(GLSRC)gxclip.h:$(GLSRC)gscms.h
+$(GLSRC)gxclip.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclip.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclip.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclip.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclip.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclip.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclip.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxclip.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxclip.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxclip.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxclip.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclip.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclip.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclip.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclip.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclip.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclip.h:$(GLSRC)gp.h
+$(GLSRC)gxclip.h:$(GLSRC)memento.h
+$(GLSRC)gxclip.h:$(GLSRC)memory_.h
+$(GLSRC)gxclip.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclip.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxclip.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclip.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclip.h:$(GLSRC)srdline.h
+$(GLSRC)gxclip.h:$(GLSRC)scommon.h
+$(GLSRC)gxclip.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxclip.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclip.h:$(GLSRC)gxarith.h
+$(GLSRC)gxclip.h:$(GLSRC)stat_.h
+$(GLSRC)gxclip.h:$(GLSRC)gpsync.h
+$(GLSRC)gxclip.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclip.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxclip.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxclip.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclip.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxclip.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxclip.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclip.h:$(GLSRC)gsccode.h
+$(GLSRC)gxclip.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclip.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxclip.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclip.h:$(GLSRC)std.h
+$(GLSRC)gxclip.h:$(GLSRC)stdpre.h
+$(GLSRC)gxclip.h:$(GLGEN)arch.h
+$(GLSRC)gxclip.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclipsr.h:$(GLSRC)memento.h
+$(GLSRC)gxclipsr.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclipsr.h:$(GLSRC)std.h
+$(GLSRC)gxclipsr.h:$(GLSRC)stdpre.h
+$(GLSRC)gxclipsr.h:$(GLGEN)arch.h
+$(GLSRC)gxcoord.h:$(GLSRC)gscoord.h
+$(GLSRC)gxcoord.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxcoord.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcoord.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxcoord.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcoord.h:$(GLSRC)scommon.h
+$(GLSRC)gxcoord.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcoord.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxcoord.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxcoord.h:$(GLSRC)stdio_.h
+$(GLSRC)gxcoord.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcoord.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxcoord.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcoord.h:$(GLSRC)std.h
+$(GLSRC)gxcoord.h:$(GLSRC)stdpre.h
+$(GLSRC)gxcoord.h:$(GLGEN)arch.h
+$(GLSRC)gxcoord.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxtext.h
+$(GLSRC)gxcpath.h:$(GLSRC)gstext.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxcpath.h:$(GLSRC)gstparam.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxcpath.h:$(GLSRC)gscsel.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsfont.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsimage.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsropt.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxdda.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxpath.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxftype.h
+$(GLSRC)gxcpath.h:$(GLSRC)gscms.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsrect.h
+$(GLSRC)gxcpath.h:$(GLSRC)gslparam.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxcpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gxcpath.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxcpath.h:$(GLSRC)gscompt.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsparam.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcpath.h:$(GLSRC)gp.h
+$(GLSRC)gxcpath.h:$(GLSRC)memento.h
+$(GLSRC)gxcpath.h:$(GLSRC)memory_.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsuid.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxsync.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcpath.h:$(GLSRC)srdline.h
+$(GLSRC)gxcpath.h:$(GLSRC)scommon.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxarith.h
+$(GLSRC)gxcpath.h:$(GLSRC)stat_.h
+$(GLSRC)gxcpath.h:$(GLSRC)gpsync.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxcpath.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxcpath.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxcpath.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxcpath.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxcpath.h:$(GLSRC)stdio_.h
+$(GLSRC)gxcpath.h:$(GLSRC)gsccode.h
+$(GLSRC)gxcpath.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcpath.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxcpath.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcpath.h:$(GLSRC)std.h
+$(GLSRC)gxcpath.h:$(GLSRC)stdpre.h
+$(GLSRC)gxcpath.h:$(GLGEN)arch.h
+$(GLSRC)gxcpath.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdda.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxdda.h:$(GLSRC)std.h
+$(GLSRC)gxdda.h:$(GLSRC)stdpre.h
+$(GLSRC)gxdda.h:$(GLGEN)arch.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxband.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxtext.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gstext.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gstparam.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsfont.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxpath.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxftype.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gscms.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsrect.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gslparam.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxclio.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gp.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)memento.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)srdline.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)scommon.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)stat_.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gpsync.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gsccode.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)std.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)stdpre.h
+$(GLSRC)gxdevbuf.h:$(GLGEN)arch.h
+$(GLSRC)gxdevbuf.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxtext.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gstext.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gstparam.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsfont.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxpath.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxftype.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gscms.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsrect.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gslparam.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gp.h
+$(GLSRC)gxdevmem.h:$(GLSRC)memento.h
+$(GLSRC)gxdevmem.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdevmem.h:$(GLSRC)srdline.h
+$(GLSRC)gxdevmem.h:$(GLSRC)scommon.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdevmem.h:$(GLSRC)stat_.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gpsync.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdevmem.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gsccode.h
+$(GLSRC)gxdevmem.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdevmem.h:$(GLSRC)std.h
+$(GLSRC)gxdevmem.h:$(GLSRC)stdpre.h
+$(GLSRC)gxdevmem.h:$(GLGEN)arch.h
+$(GLSRC)gxdevmem.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdhtres.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxfont.h
+$(GLSRC)gxfont0.h:$(GLSRC)gspath.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsgdata.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxfapi.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsfcmap.h
+$(GLSRC)gxfont0.h:$(GLSRC)gstext.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxpath.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxftype.h
+$(GLSRC)gxfont0.h:$(GLSRC)gscms.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfont0.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfont0.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont0.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsnotify.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont0.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsparam.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont0.h:$(GLSRC)memento.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont0.h:$(GLSRC)scommon.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont0.h:$(GLSRC)gpsync.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxfont0.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfont0.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxfont0.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfont0.h:$(GLSRC)gsccode.h
+$(GLSRC)gxfont0.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfont0.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfont0.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfont0.h:$(GLSRC)std.h
+$(GLSRC)gxfont0.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfont0.h:$(GLGEN)arch.h
+$(GLSRC)gxfont0.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxtext.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gstext.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gstparam.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gscsel.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsfont.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsimage.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsropt.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxdda.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxpath.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxftype.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gscms.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsrect.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gslparam.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gscpm.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gscspace.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gscompt.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gspenum.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsparam.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gp.h
+$(GLSRC)gxgetbit.h:$(GLSRC)memento.h
+$(GLSRC)gxgetbit.h:$(GLSRC)memory_.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsuid.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxsync.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxgetbit.h:$(GLSRC)srdline.h
+$(GLSRC)gxgetbit.h:$(GLSRC)scommon.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxarith.h
+$(GLSRC)gxgetbit.h:$(GLSRC)stat_.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gpsync.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsstype.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxgetbit.h:$(GLSRC)stdio_.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gsccode.h
+$(GLSRC)gxgetbit.h:$(GLSRC)stdint_.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gstypes.h
+$(GLSRC)gxgetbit.h:$(GLSRC)std.h
+$(GLSRC)gxgetbit.h:$(GLSRC)stdpre.h
+$(GLSRC)gxgetbit.h:$(GLGEN)arch.h
+$(GLSRC)gxgetbit.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxhttile.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxhttile.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxhttile.h:$(GLSRC)gsstype.h
+$(GLSRC)gxhttile.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxhttile.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxhttile.h:$(GLSRC)stdio_.h
+$(GLSRC)gxhttile.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxhttile.h:$(GLSRC)gstypes.h
+$(GLSRC)gxhttile.h:$(GLSRC)std.h
+$(GLSRC)gxhttile.h:$(GLSRC)stdpre.h
+$(GLSRC)gxhttile.h:$(GLGEN)arch.h
+$(GLSRC)gxhttile.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxiclass.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxiclass.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxiclass.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxiclass.h:$(GLSRC)gsparam.h
+$(GLSRC)gxiclass.h:$(GLSRC)scommon.h
+$(GLSRC)gxiclass.h:$(GLSRC)gsstype.h
+$(GLSRC)gxiclass.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxiclass.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxiclass.h:$(GLSRC)stdio_.h
+$(GLSRC)gxiclass.h:$(GLSRC)stdint_.h
+$(GLSRC)gxiclass.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxiclass.h:$(GLSRC)gstypes.h
+$(GLSRC)gxiclass.h:$(GLSRC)std.h
+$(GLSRC)gxiclass.h:$(GLSRC)stdpre.h
+$(GLSRC)gxiclass.h:$(GLGEN)arch.h
+$(GLSRC)gxiclass.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxiodev.h:$(GLSRC)gsparam.h
+$(GLSRC)gxiodev.h:$(GLSRC)gp.h
+$(GLSRC)gxiodev.h:$(GLSRC)memory_.h
+$(GLSRC)gxiodev.h:$(GLSRC)srdline.h
+$(GLSRC)gxiodev.h:$(GLSRC)scommon.h
+$(GLSRC)gxiodev.h:$(GLSRC)gsfname.h
+$(GLSRC)gxiodev.h:$(GLSRC)stat_.h
+$(GLSRC)gxiodev.h:$(GLSRC)gsstype.h
+$(GLSRC)gxiodev.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxiodev.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxiodev.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxiodev.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxiodev.h:$(GLSRC)stdio_.h
+$(GLSRC)gxiodev.h:$(GLSRC)stdint_.h
+$(GLSRC)gxiodev.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxiodev.h:$(GLSRC)gstypes.h
+$(GLSRC)gxiodev.h:$(GLSRC)std.h
+$(GLSRC)gxiodev.h:$(GLSRC)stdpre.h
+$(GLSRC)gxiodev.h:$(GLGEN)arch.h
+$(GLSRC)gxiodev.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxline.h:$(GLSRC)math_.h
+$(GLSRC)gxline.h:$(GLSRC)gslparam.h
+$(GLSRC)gxline.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxline.h:$(GLSRC)vmsmath.h
+$(GLSRC)gxline.h:$(GLSRC)scommon.h
+$(GLSRC)gxline.h:$(GLSRC)gsstype.h
+$(GLSRC)gxline.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxline.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxline.h:$(GLSRC)stdio_.h
+$(GLSRC)gxline.h:$(GLSRC)stdint_.h
+$(GLSRC)gxline.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxline.h:$(GLSRC)gstypes.h
+$(GLSRC)gxline.h:$(GLSRC)std.h
+$(GLSRC)gxline.h:$(GLSRC)stdpre.h
+$(GLSRC)gxline.h:$(GLGEN)arch.h
+$(GLSRC)gxline.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxmatrix.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxmatrix.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxmatrix.h:$(GLSRC)scommon.h
+$(GLSRC)gxmatrix.h:$(GLSRC)gsstype.h
+$(GLSRC)gxmatrix.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxmatrix.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxmatrix.h:$(GLSRC)stdio_.h
+$(GLSRC)gxmatrix.h:$(GLSRC)stdint_.h
+$(GLSRC)gxmatrix.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxmatrix.h:$(GLSRC)gstypes.h
+$(GLSRC)gxmatrix.h:$(GLSRC)std.h
+$(GLSRC)gxmatrix.h:$(GLSRC)stdpre.h
+$(GLSRC)gxmatrix.h:$(GLGEN)arch.h
+$(GLSRC)gxmatrix.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxclip.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxtext.h
+$(GLSRC)gxmclip.h:$(GLSRC)gstext.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxmclip.h:$(GLSRC)gstparam.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxmclip.h:$(GLSRC)gscsel.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsfont.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsimage.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsropt.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxdda.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxpath.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxftype.h
+$(GLSRC)gxmclip.h:$(GLSRC)gscms.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsrect.h
+$(GLSRC)gxmclip.h:$(GLSRC)gslparam.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxmclip.h:$(GLSRC)gscpm.h
+$(GLSRC)gxmclip.h:$(GLSRC)gscspace.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxmclip.h:$(GLSRC)gscompt.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxmclip.h:$(GLSRC)gspenum.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsparam.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxmclip.h:$(GLSRC)gp.h
+$(GLSRC)gxmclip.h:$(GLSRC)memento.h
+$(GLSRC)gxmclip.h:$(GLSRC)memory_.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsuid.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxsync.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxmclip.h:$(GLSRC)srdline.h
+$(GLSRC)gxmclip.h:$(GLSRC)scommon.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxarith.h
+$(GLSRC)gxmclip.h:$(GLSRC)stat_.h
+$(GLSRC)gxmclip.h:$(GLSRC)gpsync.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsstype.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxmclip.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxmclip.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxmclip.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxmclip.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxmclip.h:$(GLSRC)stdio_.h
+$(GLSRC)gxmclip.h:$(GLSRC)gsccode.h
+$(GLSRC)gxmclip.h:$(GLSRC)stdint_.h
+$(GLSRC)gxmclip.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxmclip.h:$(GLSRC)gstypes.h
+$(GLSRC)gxmclip.h:$(GLSRC)std.h
+$(GLSRC)gxmclip.h:$(GLSRC)stdpre.h
+$(GLSRC)gxmclip.h:$(GLGEN)arch.h
+$(GLSRC)gxmclip.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxtext.h
+$(GLSRC)gxoprect.h:$(GLSRC)gstext.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxoprect.h:$(GLSRC)gstparam.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxoprect.h:$(GLSRC)gscsel.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsfont.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsimage.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsropt.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxdda.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxpath.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxftype.h
+$(GLSRC)gxoprect.h:$(GLSRC)gscms.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsrect.h
+$(GLSRC)gxoprect.h:$(GLSRC)gslparam.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxoprect.h:$(GLSRC)gscpm.h
+$(GLSRC)gxoprect.h:$(GLSRC)gscspace.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxoprect.h:$(GLSRC)gscompt.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxoprect.h:$(GLSRC)gspenum.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsparam.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxoprect.h:$(GLSRC)gp.h
+$(GLSRC)gxoprect.h:$(GLSRC)memento.h
+$(GLSRC)gxoprect.h:$(GLSRC)memory_.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsuid.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxsync.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxoprect.h:$(GLSRC)srdline.h
+$(GLSRC)gxoprect.h:$(GLSRC)scommon.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxarith.h
+$(GLSRC)gxoprect.h:$(GLSRC)stat_.h
+$(GLSRC)gxoprect.h:$(GLSRC)gpsync.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsstype.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxoprect.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxoprect.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxoprect.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxoprect.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxoprect.h:$(GLSRC)stdio_.h
+$(GLSRC)gxoprect.h:$(GLSRC)gsccode.h
+$(GLSRC)gxoprect.h:$(GLSRC)stdint_.h
+$(GLSRC)gxoprect.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxoprect.h:$(GLSRC)gstypes.h
+$(GLSRC)gxoprect.h:$(GLSRC)std.h
+$(GLSRC)gxoprect.h:$(GLSRC)stdpre.h
+$(GLSRC)gxoprect.h:$(GLGEN)arch.h
+$(GLSRC)gxoprect.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxblend.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxdevice.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxcpath.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxtext.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gstext.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gstparam.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gscsel.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsfont.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsimage.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsropt.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxdda.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxpath.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxftype.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gscms.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsrect.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gslparam.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gscpm.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gscspace.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsio.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gscompt.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gspenum.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsparam.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gp.h
+$(GLSRC)gxp1impl.h:$(GLSRC)memento.h
+$(GLSRC)gxp1impl.h:$(GLSRC)memory_.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsuid.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxsync.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxp1impl.h:$(GLSRC)srdline.h
+$(GLSRC)gxp1impl.h:$(GLSRC)scommon.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsfname.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxarith.h
+$(GLSRC)gxp1impl.h:$(GLSRC)stat_.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gpsync.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsstype.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxp1impl.h:$(GLSRC)stdio_.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gsccode.h
+$(GLSRC)gxp1impl.h:$(GLSRC)stdint_.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gstypes.h
+$(GLSRC)gxp1impl.h:$(GLSRC)std.h
+$(GLSRC)gxp1impl.h:$(GLSRC)stdpre.h
+$(GLSRC)gxp1impl.h:$(GLGEN)arch.h
+$(GLSRC)gxp1impl.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxpath.h
+$(GLSRC)gxpaint.h:$(GLSRC)gscms.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsrect.h
+$(GLSRC)gxpaint.h:$(GLSRC)gslparam.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxpaint.h:$(GLSRC)gscpm.h
+$(GLSRC)gxpaint.h:$(GLSRC)gscspace.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxpaint.h:$(GLSRC)gspenum.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsparam.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxpaint.h:$(GLSRC)memento.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxsync.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxpaint.h:$(GLSRC)scommon.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxarith.h
+$(GLSRC)gxpaint.h:$(GLSRC)gpsync.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsstype.h
+$(GLSRC)gxpaint.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxpaint.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxpaint.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxpaint.h:$(GLSRC)stdio_.h
+$(GLSRC)gxpaint.h:$(GLSRC)stdint_.h
+$(GLSRC)gxpaint.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxpaint.h:$(GLSRC)gstypes.h
+$(GLSRC)gxpaint.h:$(GLSRC)std.h
+$(GLSRC)gxpaint.h:$(GLSRC)stdpre.h
+$(GLSRC)gxpaint.h:$(GLGEN)arch.h
+$(GLSRC)gxpaint.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxpath.h:$(GLSRC)gsrect.h
+$(GLSRC)gxpath.h:$(GLSRC)gslparam.h
+$(GLSRC)gxpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gxpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxpath.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gxpath.h:$(GLSRC)gstypes.h
+$(GLSRC)gxpath.h:$(GLSRC)std.h
+$(GLSRC)gxpath.h:$(GLSRC)stdpre.h
+$(GLSRC)gxpath.h:$(GLGEN)arch.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxpcache.h:$(GLSRC)gscms.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxpcache.h:$(GLSRC)gscspace.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxpcache.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsparam.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxpcache.h:$(GLSRC)memento.h
+$(GLSRC)gxpcache.h:$(GLSRC)gxsync.h
+$(GLSRC)gxpcache.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxpcache.h:$(GLSRC)scommon.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxpcache.h:$(GLSRC)gxarith.h
+$(GLSRC)gxpcache.h:$(GLSRC)gpsync.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsstype.h
+$(GLSRC)gxpcache.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxpcache.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxpcache.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxpcache.h:$(GLSRC)stdio_.h
+$(GLSRC)gxpcache.h:$(GLSRC)stdint_.h
+$(GLSRC)gxpcache.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxpcache.h:$(GLSRC)gstypes.h
+$(GLSRC)gxpcache.h:$(GLSRC)std.h
+$(GLSRC)gxpcache.h:$(GLSRC)stdpre.h
+$(GLSRC)gxpcache.h:$(GLGEN)arch.h
+$(GLSRC)gxpcache.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxsample.h:$(GLSRC)std.h
+$(GLSRC)gxsample.h:$(GLSRC)stdpre.h
+$(GLSRC)gxsample.h:$(GLGEN)arch.h
+$(GLSRC)gxsamplp.h:$(GLSRC)valgrind.h
+$(GLSRC)gxsamplp.h:$(GLSRC)stdpre.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxdevice.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxtext.h
+$(GLSRC)gxscanc.h:$(GLSRC)gstext.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxscanc.h:$(GLSRC)gstparam.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxscanc.h:$(GLSRC)gscsel.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsfont.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsimage.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsropt.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxdda.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxpath.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxftype.h
+$(GLSRC)gxscanc.h:$(GLSRC)gscms.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsrect.h
+$(GLSRC)gxscanc.h:$(GLSRC)gslparam.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxscanc.h:$(GLSRC)gscpm.h
+$(GLSRC)gxscanc.h:$(GLSRC)gscspace.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsio.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxscanc.h:$(GLSRC)gscompt.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxscanc.h:$(GLSRC)gspenum.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsparam.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxscanc.h:$(GLSRC)gp.h
+$(GLSRC)gxscanc.h:$(GLSRC)memento.h
+$(GLSRC)gxscanc.h:$(GLSRC)memory_.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsuid.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxsync.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxscanc.h:$(GLSRC)srdline.h
+$(GLSRC)gxscanc.h:$(GLSRC)scommon.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsfname.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxarith.h
+$(GLSRC)gxscanc.h:$(GLSRC)stat_.h
+$(GLSRC)gxscanc.h:$(GLSRC)gpsync.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsstype.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxscanc.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxscanc.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxscanc.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxscanc.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxscanc.h:$(GLSRC)stdio_.h
+$(GLSRC)gxscanc.h:$(GLSRC)gsccode.h
+$(GLSRC)gxscanc.h:$(GLSRC)stdint_.h
+$(GLSRC)gxscanc.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxscanc.h:$(GLSRC)gstypes.h
+$(GLSRC)gxscanc.h:$(GLSRC)std.h
+$(GLSRC)gxscanc.h:$(GLSRC)stdpre.h
+$(GLSRC)gxscanc.h:$(GLGEN)arch.h
+$(GLSRC)gxscanc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxstate.h:$(GLSRC)gscspace.h
+$(GLSRC)gxstate.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxstate.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxstate.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxstate.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxstate.h:$(GLSRC)memento.h
+$(GLSRC)gxstate.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxstate.h:$(GLSRC)scommon.h
+$(GLSRC)gxstate.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxstate.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxstate.h:$(GLSRC)gsstype.h
+$(GLSRC)gxstate.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxstate.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxstate.h:$(GLSRC)stdio_.h
+$(GLSRC)gxstate.h:$(GLSRC)stdint_.h
+$(GLSRC)gxstate.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxstate.h:$(GLSRC)gstypes.h
+$(GLSRC)gxstate.h:$(GLSRC)std.h
+$(GLSRC)gxstate.h:$(GLSRC)stdpre.h
+$(GLSRC)gxstate.h:$(GLGEN)arch.h
+$(GLSRC)gxstate.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxtext.h:$(GLSRC)gstext.h
+$(GLSRC)gxtext.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxtext.h:$(GLSRC)gsfont.h
+$(GLSRC)gxtext.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxtext.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxtext.h:$(GLSRC)gxpath.h
+$(GLSRC)gxtext.h:$(GLSRC)gxftype.h
+$(GLSRC)gxtext.h:$(GLSRC)gscms.h
+$(GLSRC)gxtext.h:$(GLSRC)gsrect.h
+$(GLSRC)gxtext.h:$(GLSRC)gslparam.h
+$(GLSRC)gxtext.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxtext.h:$(GLSRC)gscpm.h
+$(GLSRC)gxtext.h:$(GLSRC)gscspace.h
+$(GLSRC)gxtext.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxtext.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxtext.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxtext.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxtext.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxtext.h:$(GLSRC)gspenum.h
+$(GLSRC)gxtext.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxtext.h:$(GLSRC)gsparam.h
+$(GLSRC)gxtext.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxtext.h:$(GLSRC)memento.h
+$(GLSRC)gxtext.h:$(GLSRC)gsuid.h
+$(GLSRC)gxtext.h:$(GLSRC)gxsync.h
+$(GLSRC)gxtext.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxtext.h:$(GLSRC)scommon.h
+$(GLSRC)gxtext.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxtext.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxtext.h:$(GLSRC)gxarith.h
+$(GLSRC)gxtext.h:$(GLSRC)gpsync.h
+$(GLSRC)gxtext.h:$(GLSRC)gsstype.h
+$(GLSRC)gxtext.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxtext.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxtext.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxtext.h:$(GLSRC)stdio_.h
+$(GLSRC)gxtext.h:$(GLSRC)gsccode.h
+$(GLSRC)gxtext.h:$(GLSRC)stdint_.h
+$(GLSRC)gxtext.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxtext.h:$(GLSRC)gstypes.h
+$(GLSRC)gxtext.h:$(GLSRC)std.h
+$(GLSRC)gxtext.h:$(GLSRC)stdpre.h
+$(GLSRC)gxtext.h:$(GLGEN)arch.h
+$(GLSRC)gxtext.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxtext.h
+$(GLSRC)gxxfont.h:$(GLSRC)gstext.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxxfont.h:$(GLSRC)gstparam.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxxfont.h:$(GLSRC)gscsel.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsfont.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsimage.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsropt.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxdda.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxpath.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxftype.h
+$(GLSRC)gxxfont.h:$(GLSRC)gscms.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsrect.h
+$(GLSRC)gxxfont.h:$(GLSRC)gslparam.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxxfont.h:$(GLSRC)gscpm.h
+$(GLSRC)gxxfont.h:$(GLSRC)gscspace.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxxfont.h:$(GLSRC)gscompt.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxxfont.h:$(GLSRC)gspenum.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsparam.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxxfont.h:$(GLSRC)gp.h
+$(GLSRC)gxxfont.h:$(GLSRC)memento.h
+$(GLSRC)gxxfont.h:$(GLSRC)memory_.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsuid.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxsync.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxxfont.h:$(GLSRC)srdline.h
+$(GLSRC)gxxfont.h:$(GLSRC)scommon.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxarith.h
+$(GLSRC)gxxfont.h:$(GLSRC)stat_.h
+$(GLSRC)gxxfont.h:$(GLSRC)gpsync.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsstype.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxxfont.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxxfont.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxxfont.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxxfont.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxxfont.h:$(GLSRC)stdio_.h
+$(GLSRC)gxxfont.h:$(GLSRC)gsccode.h
+$(GLSRC)gxxfont.h:$(GLSRC)stdint_.h
+$(GLSRC)gxxfont.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxxfont.h:$(GLSRC)gstypes.h
+$(GLSRC)gxxfont.h:$(GLSRC)std.h
+$(GLSRC)gxxfont.h:$(GLSRC)stdpre.h
+$(GLSRC)gxxfont.h:$(GLGEN)arch.h
+$(GLSRC)gxxfont.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxband.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxband.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxband.h:$(GLSRC)gxtext.h
+$(GLSRC)gxband.h:$(GLSRC)gstext.h
+$(GLSRC)gxband.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxband.h:$(GLSRC)gstparam.h
+$(GLSRC)gxband.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxband.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxband.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxband.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxband.h:$(GLSRC)gscsel.h
+$(GLSRC)gxband.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxband.h:$(GLSRC)gsfont.h
+$(GLSRC)gxband.h:$(GLSRC)gsimage.h
+$(GLSRC)gxband.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxband.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxband.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxband.h:$(GLSRC)gsropt.h
+$(GLSRC)gxband.h:$(GLSRC)gxdda.h
+$(GLSRC)gxband.h:$(GLSRC)gxpath.h
+$(GLSRC)gxband.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxband.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxband.h:$(GLSRC)gxftype.h
+$(GLSRC)gxband.h:$(GLSRC)gscms.h
+$(GLSRC)gxband.h:$(GLSRC)gsrect.h
+$(GLSRC)gxband.h:$(GLSRC)gslparam.h
+$(GLSRC)gxband.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxband.h:$(GLSRC)gscpm.h
+$(GLSRC)gxband.h:$(GLSRC)gscspace.h
+$(GLSRC)gxband.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxband.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxband.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxband.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxband.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxband.h:$(GLSRC)gxclio.h
+$(GLSRC)gxband.h:$(GLSRC)gscompt.h
+$(GLSRC)gxband.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxband.h:$(GLSRC)gspenum.h
+$(GLSRC)gxband.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxband.h:$(GLSRC)gsparam.h
+$(GLSRC)gxband.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxband.h:$(GLSRC)gp.h
+$(GLSRC)gxband.h:$(GLSRC)memento.h
+$(GLSRC)gxband.h:$(GLSRC)memory_.h
+$(GLSRC)gxband.h:$(GLSRC)gsuid.h
+$(GLSRC)gxband.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxband.h:$(GLSRC)gxsync.h
+$(GLSRC)gxband.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxband.h:$(GLSRC)srdline.h
+$(GLSRC)gxband.h:$(GLSRC)scommon.h
+$(GLSRC)gxband.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxband.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxband.h:$(GLSRC)gxarith.h
+$(GLSRC)gxband.h:$(GLSRC)stat_.h
+$(GLSRC)gxband.h:$(GLSRC)gpsync.h
+$(GLSRC)gxband.h:$(GLSRC)gsstype.h
+$(GLSRC)gxband.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxband.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxband.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxband.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxband.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxband.h:$(GLSRC)stdio_.h
+$(GLSRC)gxband.h:$(GLSRC)gsccode.h
+$(GLSRC)gxband.h:$(GLSRC)stdint_.h
+$(GLSRC)gxband.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxband.h:$(GLSRC)gstypes.h
+$(GLSRC)gxband.h:$(GLSRC)std.h
+$(GLSRC)gxband.h:$(GLSRC)stdpre.h
+$(GLSRC)gxband.h:$(GLGEN)arch.h
+$(GLSRC)gxband.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcdevn.h:$(GLSRC)memento.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcdevn.h:$(GLSRC)scommon.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxcdevn.h:$(GLSRC)stdio_.h
+$(GLSRC)gxcdevn.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcdevn.h:$(GLSRC)std.h
+$(GLSRC)gxcdevn.h:$(GLSRC)stdpre.h
+$(GLSRC)gxcdevn.h:$(GLGEN)arch.h
+$(GLSRC)gxcdevn.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxchar.h:$(GLSRC)gschar.h
+$(GLSRC)gxchar.h:$(GLSRC)gsstate.h
+$(GLSRC)gxchar.h:$(GLSRC)gsovrc.h
+$(GLSRC)gxchar.h:$(GLSRC)gscolor.h
+$(GLSRC)gxchar.h:$(GLSRC)gsline.h
+$(GLSRC)gxchar.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxchar.h:$(GLSRC)gsht.h
+$(GLSRC)gxchar.h:$(GLSRC)gxtext.h
+$(GLSRC)gxchar.h:$(GLSRC)gstext.h
+$(GLSRC)gxchar.h:$(GLSRC)gscsel.h
+$(GLSRC)gxchar.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxchar.h:$(GLSRC)gsfont.h
+$(GLSRC)gxchar.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxchar.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxchar.h:$(GLSRC)gxpath.h
+$(GLSRC)gxchar.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxchar.h:$(GLSRC)gxftype.h
+$(GLSRC)gxchar.h:$(GLSRC)gscms.h
+$(GLSRC)gxchar.h:$(GLSRC)gsrect.h
+$(GLSRC)gxchar.h:$(GLSRC)gslparam.h
+$(GLSRC)gxchar.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxchar.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxchar.h:$(GLSRC)gscpm.h
+$(GLSRC)gxchar.h:$(GLSRC)gscspace.h
+$(GLSRC)gxchar.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxchar.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxchar.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxchar.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxchar.h:$(GLSRC)gscompt.h
+$(GLSRC)gxchar.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxchar.h:$(GLSRC)gspenum.h
+$(GLSRC)gxchar.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxchar.h:$(GLSRC)gsparam.h
+$(GLSRC)gxchar.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxchar.h:$(GLSRC)memento.h
+$(GLSRC)gxchar.h:$(GLSRC)gsuid.h
+$(GLSRC)gxchar.h:$(GLSRC)gxsync.h
+$(GLSRC)gxchar.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxchar.h:$(GLSRC)scommon.h
+$(GLSRC)gxchar.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxchar.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxchar.h:$(GLSRC)gxarith.h
+$(GLSRC)gxchar.h:$(GLSRC)gpsync.h
+$(GLSRC)gxchar.h:$(GLSRC)gsstype.h
+$(GLSRC)gxchar.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxchar.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxchar.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxchar.h:$(GLSRC)stdio_.h
+$(GLSRC)gxchar.h:$(GLSRC)gsccode.h
+$(GLSRC)gxchar.h:$(GLSRC)stdint_.h
+$(GLSRC)gxchar.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxchar.h:$(GLSRC)gstypes.h
+$(GLSRC)gxchar.h:$(GLSRC)std.h
+$(GLSRC)gxchar.h:$(GLSRC)stdpre.h
+$(GLSRC)gxchar.h:$(GLGEN)arch.h
+$(GLSRC)gxchar.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxchrout.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gscms.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gscspace.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gxhttile.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsparam.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsdcolor.h:$(GLSRC)memento.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gxsync.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsdcolor.h:$(GLSRC)scommon.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gxarith.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gpsync.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsstype.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsdcolor.h:$(GLSRC)stdio_.h
+$(GLSRC)gsdcolor.h:$(GLSRC)stdint_.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gsdcolor.h:$(GLSRC)std.h
+$(GLSRC)gsdcolor.h:$(GLSRC)stdpre.h
+$(GLSRC)gsdcolor.h:$(GLGEN)arch.h
+$(GLSRC)gsdcolor.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gscms.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdcolor.h:$(GLSRC)memento.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdcolor.h:$(GLSRC)scommon.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gpsync.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdcolor.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdcolor.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdcolor.h:$(GLSRC)std.h
+$(GLSRC)gxdcolor.h:$(GLSRC)stdpre.h
+$(GLSRC)gxdcolor.h:$(GLGEN)arch.h
+$(GLSRC)gxdcolor.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gxcspace.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gscsel.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gxfrac.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gscms.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gscspace.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gxhttile.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsparam.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsnamecl.h:$(GLSRC)memento.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gxsync.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsnamecl.h:$(GLSRC)scommon.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gxarith.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gpsync.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsstype.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsnamecl.h:$(GLSRC)stdio_.h
+$(GLSRC)gsnamecl.h:$(GLSRC)stdint_.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gstypes.h
+$(GLSRC)gsnamecl.h:$(GLSRC)std.h
+$(GLSRC)gsnamecl.h:$(GLSRC)stdpre.h
+$(GLSRC)gsnamecl.h:$(GLGEN)arch.h
+$(GLSRC)gsnamecl.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscspace.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscspace.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscspace.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscspace.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscspace.h:$(GLSRC)memento.h
+$(GLSRC)gscspace.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscspace.h:$(GLSRC)scommon.h
+$(GLSRC)gscspace.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscspace.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscspace.h:$(GLSRC)gsstype.h
+$(GLSRC)gscspace.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscspace.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscspace.h:$(GLSRC)stdio_.h
+$(GLSRC)gscspace.h:$(GLSRC)stdint_.h
+$(GLSRC)gscspace.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscspace.h:$(GLSRC)gstypes.h
+$(GLSRC)gscspace.h:$(GLSRC)std.h
+$(GLSRC)gscspace.h:$(GLSRC)stdpre.h
+$(GLSRC)gscspace.h:$(GLGEN)arch.h
+$(GLSRC)gscspace.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscssub.h:$(GLSRC)gscspace.h
+$(GLSRC)gscssub.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscssub.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscssub.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscssub.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscssub.h:$(GLSRC)memento.h
+$(GLSRC)gscssub.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscssub.h:$(GLSRC)scommon.h
+$(GLSRC)gscssub.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscssub.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscssub.h:$(GLSRC)gsstype.h
+$(GLSRC)gscssub.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscssub.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscssub.h:$(GLSRC)stdio_.h
+$(GLSRC)gscssub.h:$(GLSRC)stdint_.h
+$(GLSRC)gscssub.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscssub.h:$(GLSRC)gstypes.h
+$(GLSRC)gscssub.h:$(GLSRC)std.h
+$(GLSRC)gscssub.h:$(GLSRC)stdpre.h
+$(GLSRC)gscssub.h:$(GLGEN)arch.h
+$(GLSRC)gscssub.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxtext.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gstext.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gstparam.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsfont.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxpath.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxftype.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gscms.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsrect.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gslparam.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gp.h
+$(GLSRC)gxdevcli.h:$(GLSRC)memento.h
+$(GLSRC)gxdevcli.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdevcli.h:$(GLSRC)srdline.h
+$(GLSRC)gxdevcli.h:$(GLSRC)scommon.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdevcli.h:$(GLSRC)stat_.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gpsync.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdevcli.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gsccode.h
+$(GLSRC)gxdevcli.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdevcli.h:$(GLSRC)std.h
+$(GLSRC)gxdevcli.h:$(GLSRC)stdpre.h
+$(GLSRC)gxdevcli.h:$(GLGEN)arch.h
+$(GLSRC)gxdevcli.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscicach.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gscicach.h:$(GLSRC)gxcmap.h
+$(GLSRC)gscicach.h:$(GLSRC)gxtext.h
+$(GLSRC)gscicach.h:$(GLSRC)gstext.h
+$(GLSRC)gscicach.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gscicach.h:$(GLSRC)gstparam.h
+$(GLSRC)gscicach.h:$(GLSRC)gxfmap.h
+$(GLSRC)gscicach.h:$(GLSRC)gsfunc.h
+$(GLSRC)gscicach.h:$(GLSRC)gxcspace.h
+$(GLSRC)gscicach.h:$(GLSRC)gxrplane.h
+$(GLSRC)gscicach.h:$(GLSRC)gscsel.h
+$(GLSRC)gscicach.h:$(GLSRC)gxfcache.h
+$(GLSRC)gscicach.h:$(GLSRC)gsfont.h
+$(GLSRC)gscicach.h:$(GLSRC)gsimage.h
+$(GLSRC)gscicach.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gscicach.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gscicach.h:$(GLSRC)gxbcache.h
+$(GLSRC)gscicach.h:$(GLSRC)gsropt.h
+$(GLSRC)gscicach.h:$(GLSRC)gxdda.h
+$(GLSRC)gscicach.h:$(GLSRC)gxpath.h
+$(GLSRC)gscicach.h:$(GLSRC)gxfrac.h
+$(GLSRC)gscicach.h:$(GLSRC)gxtmap.h
+$(GLSRC)gscicach.h:$(GLSRC)gxftype.h
+$(GLSRC)gscicach.h:$(GLSRC)gscms.h
+$(GLSRC)gscicach.h:$(GLSRC)gsrect.h
+$(GLSRC)gscicach.h:$(GLSRC)gslparam.h
+$(GLSRC)gscicach.h:$(GLSRC)gsdevice.h
+$(GLSRC)gscicach.h:$(GLSRC)gscpm.h
+$(GLSRC)gscicach.h:$(GLSRC)gscspace.h
+$(GLSRC)gscicach.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscicach.h:$(GLSRC)gsxfont.h
+$(GLSRC)gscicach.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gscicach.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscicach.h:$(GLSRC)gxfixed.h
+$(GLSRC)gscicach.h:$(GLSRC)gscompt.h
+$(GLSRC)gscicach.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscicach.h:$(GLSRC)gspenum.h
+$(GLSRC)gscicach.h:$(GLSRC)gxhttile.h
+$(GLSRC)gscicach.h:$(GLSRC)gsparam.h
+$(GLSRC)gscicach.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscicach.h:$(GLSRC)gp.h
+$(GLSRC)gscicach.h:$(GLSRC)memento.h
+$(GLSRC)gscicach.h:$(GLSRC)memory_.h
+$(GLSRC)gscicach.h:$(GLSRC)gsuid.h
+$(GLSRC)gscicach.h:$(GLSRC)gsstruct.h
+$(GLSRC)gscicach.h:$(GLSRC)gxsync.h
+$(GLSRC)gscicach.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscicach.h:$(GLSRC)srdline.h
+$(GLSRC)gscicach.h:$(GLSRC)scommon.h
+$(GLSRC)gscicach.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscicach.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscicach.h:$(GLSRC)gxarith.h
+$(GLSRC)gscicach.h:$(GLSRC)stat_.h
+$(GLSRC)gscicach.h:$(GLSRC)gpsync.h
+$(GLSRC)gscicach.h:$(GLSRC)gsstype.h
+$(GLSRC)gscicach.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscicach.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gscicach.h:$(GLSRC)gscdefs.h
+$(GLSRC)gscicach.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscicach.h:$(GLSRC)gxcindex.h
+$(GLSRC)gscicach.h:$(GLSRC)stdio_.h
+$(GLSRC)gscicach.h:$(GLSRC)gsccode.h
+$(GLSRC)gscicach.h:$(GLSRC)stdint_.h
+$(GLSRC)gscicach.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscicach.h:$(GLSRC)gstypes.h
+$(GLSRC)gscicach.h:$(GLSRC)std.h
+$(GLSRC)gscicach.h:$(GLSRC)stdpre.h
+$(GLSRC)gscicach.h:$(GLGEN)arch.h
+$(GLSRC)gscicach.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxtext.h
+$(GLSRC)gxdevice.h:$(GLSRC)gstext.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxdevice.h:$(GLSRC)gstparam.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxdevice.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsfont.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxpath.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxftype.h
+$(GLSRC)gxdevice.h:$(GLSRC)gscms.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsrect.h
+$(GLSRC)gxdevice.h:$(GLSRC)gslparam.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdevice.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdevice.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsio.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxdevice.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdevice.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdevice.h:$(GLSRC)gp.h
+$(GLSRC)gxdevice.h:$(GLSRC)memento.h
+$(GLSRC)gxdevice.h:$(GLSRC)memory_.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdevice.h:$(GLSRC)srdline.h
+$(GLSRC)gxdevice.h:$(GLSRC)scommon.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsfname.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdevice.h:$(GLSRC)stat_.h
+$(GLSRC)gxdevice.h:$(GLSRC)gpsync.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxdevice.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxdevice.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxdevice.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxdevice.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdevice.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdevice.h:$(GLSRC)gsccode.h
+$(GLSRC)gxdevice.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdevice.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxdevice.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdevice.h:$(GLSRC)std.h
+$(GLSRC)gxdevice.h:$(GLSRC)stdpre.h
+$(GLSRC)gxdevice.h:$(GLGEN)arch.h
+$(GLSRC)gxdevice.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdht.h:$(GLSRC)gxht.h
+$(GLSRC)gxdht.h:$(GLSRC)gxhttype.h
+$(GLSRC)gxdht.h:$(GLSRC)gsht1.h
+$(GLSRC)gxdht.h:$(GLSRC)gsht.h
+$(GLSRC)gxdht.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdht.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdht.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdht.h:$(GLSRC)gscms.h
+$(GLSRC)gxdht.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdht.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdht.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdht.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdht.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdht.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdht.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdht.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdht.h:$(GLSRC)memento.h
+$(GLSRC)gxdht.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdht.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdht.h:$(GLSRC)scommon.h
+$(GLSRC)gxdht.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdht.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdht.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdht.h:$(GLSRC)gpsync.h
+$(GLSRC)gxdht.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdht.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxdht.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxdht.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdht.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdht.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdht.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxdht.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdht.h:$(GLSRC)std.h
+$(GLSRC)gxdht.h:$(GLSRC)stdpre.h
+$(GLSRC)gxdht.h:$(GLGEN)arch.h
+$(GLSRC)gxdht.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gscms.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)memento.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)scommon.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gpsync.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)std.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)stdpre.h
+$(GLSRC)gxdhtserial.h:$(GLGEN)arch.h
+$(GLSRC)gxdhtserial.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdither.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdither.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdither.h:$(GLSRC)gscms.h
+$(GLSRC)gxdither.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdither.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdither.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdither.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdither.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdither.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdither.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdither.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdither.h:$(GLSRC)memento.h
+$(GLSRC)gxdither.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdither.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdither.h:$(GLSRC)scommon.h
+$(GLSRC)gxdither.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdither.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdither.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdither.h:$(GLSRC)gpsync.h
+$(GLSRC)gxdither.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdither.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxdither.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxdither.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdither.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdither.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdither.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxdither.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdither.h:$(GLSRC)std.h
+$(GLSRC)gxdither.h:$(GLSRC)stdpre.h
+$(GLSRC)gxdither.h:$(GLGEN)arch.h
+$(GLSRC)gxdither.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxmclip.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxclip.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxtext.h
+$(GLSRC)gxclip2.h:$(GLSRC)gstext.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxclip2.h:$(GLSRC)gstparam.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclip2.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsfont.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxftype.h
+$(GLSRC)gxclip2.h:$(GLSRC)gscms.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclip2.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclip2.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclip2.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxclip2.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclip2.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclip2.h:$(GLSRC)gp.h
+$(GLSRC)gxclip2.h:$(GLSRC)memento.h
+$(GLSRC)gxclip2.h:$(GLSRC)memory_.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclip2.h:$(GLSRC)srdline.h
+$(GLSRC)gxclip2.h:$(GLSRC)scommon.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxarith.h
+$(GLSRC)gxclip2.h:$(GLSRC)stat_.h
+$(GLSRC)gxclip2.h:$(GLSRC)gpsync.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxclip2.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxclip2.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclip2.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxclip2.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxclip2.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclip2.h:$(GLSRC)gsccode.h
+$(GLSRC)gxclip2.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclip2.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxclip2.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclip2.h:$(GLSRC)std.h
+$(GLSRC)gxclip2.h:$(GLSRC)stdpre.h
+$(GLSRC)gxclip2.h:$(GLGEN)arch.h
+$(GLSRC)gxclip2.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxmclip.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxclip.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxtext.h
+$(GLSRC)gxclipm.h:$(GLSRC)gstext.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxclipm.h:$(GLSRC)gstparam.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclipm.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsfont.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxftype.h
+$(GLSRC)gxclipm.h:$(GLSRC)gscms.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclipm.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclipm.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclipm.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxclipm.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclipm.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclipm.h:$(GLSRC)gp.h
+$(GLSRC)gxclipm.h:$(GLSRC)memento.h
+$(GLSRC)gxclipm.h:$(GLSRC)memory_.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclipm.h:$(GLSRC)srdline.h
+$(GLSRC)gxclipm.h:$(GLSRC)scommon.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxarith.h
+$(GLSRC)gxclipm.h:$(GLSRC)stat_.h
+$(GLSRC)gxclipm.h:$(GLSRC)gpsync.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxclipm.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxclipm.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclipm.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxclipm.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxclipm.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclipm.h:$(GLSRC)gsccode.h
+$(GLSRC)gxclipm.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclipm.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxclipm.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclipm.h:$(GLSRC)std.h
+$(GLSRC)gxclipm.h:$(GLSRC)stdpre.h
+$(GLSRC)gxclipm.h:$(GLGEN)arch.h
+$(GLSRC)gxclipm.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxctable.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxctable.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxctable.h:$(GLSRC)gstypes.h
+$(GLSRC)gxctable.h:$(GLSRC)std.h
+$(GLSRC)gxctable.h:$(GLSRC)stdpre.h
+$(GLSRC)gxctable.h:$(GLGEN)arch.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfcache.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxfcache.h:$(GLSRC)gxftype.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxfcache.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfcache.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfcache.h:$(GLSRC)scommon.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxfcache.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfcache.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfcache.h:$(GLSRC)gsccode.h
+$(GLSRC)gxfcache.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfcache.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfcache.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfcache.h:$(GLSRC)std.h
+$(GLSRC)gxfcache.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfcache.h:$(GLGEN)arch.h
+$(GLSRC)gxfcache.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfont.h:$(GLSRC)gspath.h
+$(GLSRC)gxfont.h:$(GLSRC)gsgdata.h
+$(GLSRC)gxfont.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxfont.h:$(GLSRC)gxfapi.h
+$(GLSRC)gxfont.h:$(GLSRC)gsfcmap.h
+$(GLSRC)gxfont.h:$(GLSRC)gstext.h
+$(GLSRC)gxfont.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfont.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfont.h:$(GLSRC)gxpath.h
+$(GLSRC)gxfont.h:$(GLSRC)gxftype.h
+$(GLSRC)gxfont.h:$(GLSRC)gscms.h
+$(GLSRC)gxfont.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfont.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfont.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfont.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfont.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfont.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont.h:$(GLSRC)gsnotify.h
+$(GLSRC)gxfont.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfont.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxfont.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfont.h:$(GLSRC)gsparam.h
+$(GLSRC)gxfont.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont.h:$(GLSRC)memento.h
+$(GLSRC)gxfont.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfont.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfont.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont.h:$(GLSRC)scommon.h
+$(GLSRC)gxfont.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfont.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont.h:$(GLSRC)gpsync.h
+$(GLSRC)gxfont.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfont.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxfont.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfont.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxfont.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfont.h:$(GLSRC)gsccode.h
+$(GLSRC)gxfont.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfont.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfont.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfont.h:$(GLSRC)std.h
+$(GLSRC)gxfont.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfont.h:$(GLGEN)arch.h
+$(GLSRC)gxfont.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxtext.h
+$(GLSRC)gxiparam.h:$(GLSRC)gstext.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxiparam.h:$(GLSRC)gstparam.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxiparam.h:$(GLSRC)gscsel.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsfont.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsimage.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsropt.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxdda.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxpath.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxftype.h
+$(GLSRC)gxiparam.h:$(GLSRC)gscms.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsrect.h
+$(GLSRC)gxiparam.h:$(GLSRC)gslparam.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxiparam.h:$(GLSRC)gscpm.h
+$(GLSRC)gxiparam.h:$(GLSRC)gscspace.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxiparam.h:$(GLSRC)gscompt.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxiparam.h:$(GLSRC)gspenum.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsparam.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxiparam.h:$(GLSRC)gp.h
+$(GLSRC)gxiparam.h:$(GLSRC)memento.h
+$(GLSRC)gxiparam.h:$(GLSRC)memory_.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsuid.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxsync.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxiparam.h:$(GLSRC)srdline.h
+$(GLSRC)gxiparam.h:$(GLSRC)scommon.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxarith.h
+$(GLSRC)gxiparam.h:$(GLSRC)stat_.h
+$(GLSRC)gxiparam.h:$(GLSRC)gpsync.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsstype.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxiparam.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxiparam.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxiparam.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxiparam.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxiparam.h:$(GLSRC)stdio_.h
+$(GLSRC)gxiparam.h:$(GLSRC)gsccode.h
+$(GLSRC)gxiparam.h:$(GLSRC)stdint_.h
+$(GLSRC)gxiparam.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxiparam.h:$(GLSRC)gstypes.h
+$(GLSRC)gxiparam.h:$(GLSRC)std.h
+$(GLSRC)gxiparam.h:$(GLSRC)stdpre.h
+$(GLSRC)gxiparam.h:$(GLGEN)arch.h
+$(GLSRC)gxiparam.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gximask.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gximask.h:$(GLSRC)gsropt.h
+$(GLSRC)gximask.h:$(GLSRC)gxpath.h
+$(GLSRC)gximask.h:$(GLSRC)gscms.h
+$(GLSRC)gximask.h:$(GLSRC)gsrect.h
+$(GLSRC)gximask.h:$(GLSRC)gslparam.h
+$(GLSRC)gximask.h:$(GLSRC)gsdevice.h
+$(GLSRC)gximask.h:$(GLSRC)gscpm.h
+$(GLSRC)gximask.h:$(GLSRC)gscspace.h
+$(GLSRC)gximask.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximask.h:$(GLSRC)gsiparam.h
+$(GLSRC)gximask.h:$(GLSRC)gxfixed.h
+$(GLSRC)gximask.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximask.h:$(GLSRC)gspenum.h
+$(GLSRC)gximask.h:$(GLSRC)gxhttile.h
+$(GLSRC)gximask.h:$(GLSRC)gsparam.h
+$(GLSRC)gximask.h:$(GLSRC)gsrefct.h
+$(GLSRC)gximask.h:$(GLSRC)memento.h
+$(GLSRC)gximask.h:$(GLSRC)gxsync.h
+$(GLSRC)gximask.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gximask.h:$(GLSRC)scommon.h
+$(GLSRC)gximask.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gximask.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximask.h:$(GLSRC)gxarith.h
+$(GLSRC)gximask.h:$(GLSRC)gpsync.h
+$(GLSRC)gximask.h:$(GLSRC)gsstype.h
+$(GLSRC)gximask.h:$(GLSRC)gsmemory.h
+$(GLSRC)gximask.h:$(GLSRC)gslibctx.h
+$(GLSRC)gximask.h:$(GLSRC)gxcindex.h
+$(GLSRC)gximask.h:$(GLSRC)stdio_.h
+$(GLSRC)gximask.h:$(GLSRC)stdint_.h
+$(GLSRC)gximask.h:$(GLSRC)gssprintf.h
+$(GLSRC)gximask.h:$(GLSRC)gstypes.h
+$(GLSRC)gximask.h:$(GLSRC)std.h
+$(GLSRC)gximask.h:$(GLSRC)stdpre.h
+$(GLSRC)gximask.h:$(GLGEN)arch.h
+$(GLSRC)gximask.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscie.h:$(GLSRC)gxctable.h
+$(GLSRC)gscie.h:$(GLSRC)gxfrac.h
+$(GLSRC)gscie.h:$(GLSRC)gscspace.h
+$(GLSRC)gscie.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscie.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscie.h:$(GLSRC)gxfixed.h
+$(GLSRC)gscie.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscie.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscie.h:$(GLSRC)memento.h
+$(GLSRC)gscie.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscie.h:$(GLSRC)scommon.h
+$(GLSRC)gscie.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscie.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscie.h:$(GLSRC)gsstype.h
+$(GLSRC)gscie.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscie.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscie.h:$(GLSRC)stdio_.h
+$(GLSRC)gscie.h:$(GLSRC)stdint_.h
+$(GLSRC)gscie.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscie.h:$(GLSRC)gstypes.h
+$(GLSRC)gscie.h:$(GLSRC)std.h
+$(GLSRC)gscie.h:$(GLSRC)stdpre.h
+$(GLSRC)gscie.h:$(GLGEN)arch.h
+$(GLSRC)gscie.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsicc.h:$(GLSRC)gscie.h
+$(GLSRC)gsicc.h:$(GLSRC)gxcspace.h
+$(GLSRC)gsicc.h:$(GLSRC)gxctable.h
+$(GLSRC)gsicc.h:$(GLSRC)gscsel.h
+$(GLSRC)gsicc.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gsicc.h:$(GLSRC)gxfrac.h
+$(GLSRC)gsicc.h:$(GLSRC)gscms.h
+$(GLSRC)gsicc.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsicc.h:$(GLSRC)gscspace.h
+$(GLSRC)gsicc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsicc.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsicc.h:$(GLSRC)gxfixed.h
+$(GLSRC)gsicc.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsicc.h:$(GLSRC)gxhttile.h
+$(GLSRC)gsicc.h:$(GLSRC)gsparam.h
+$(GLSRC)gsicc.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc.h:$(GLSRC)memento.h
+$(GLSRC)gsicc.h:$(GLSRC)gxsync.h
+$(GLSRC)gsicc.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc.h:$(GLSRC)scommon.h
+$(GLSRC)gsicc.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsicc.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc.h:$(GLSRC)gxarith.h
+$(GLSRC)gsicc.h:$(GLSRC)gpsync.h
+$(GLSRC)gsicc.h:$(GLSRC)gsstype.h
+$(GLSRC)gsicc.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsicc.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsicc.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsicc.h:$(GLSRC)stdio_.h
+$(GLSRC)gsicc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsicc.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsicc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc.h:$(GLSRC)std.h
+$(GLSRC)gsicc.h:$(GLSRC)stdpre.h
+$(GLSRC)gsicc.h:$(GLGEN)arch.h
+$(GLSRC)gsicc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscrd.h:$(GLSRC)gscie.h
+$(GLSRC)gscrd.h:$(GLSRC)gxctable.h
+$(GLSRC)gscrd.h:$(GLSRC)gxfrac.h
+$(GLSRC)gscrd.h:$(GLSRC)gscspace.h
+$(GLSRC)gscrd.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscrd.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscrd.h:$(GLSRC)gxfixed.h
+$(GLSRC)gscrd.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscrd.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscrd.h:$(GLSRC)memento.h
+$(GLSRC)gscrd.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscrd.h:$(GLSRC)scommon.h
+$(GLSRC)gscrd.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscrd.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscrd.h:$(GLSRC)gsstype.h
+$(GLSRC)gscrd.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscrd.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscrd.h:$(GLSRC)stdio_.h
+$(GLSRC)gscrd.h:$(GLSRC)stdint_.h
+$(GLSRC)gscrd.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscrd.h:$(GLSRC)gstypes.h
+$(GLSRC)gscrd.h:$(GLSRC)std.h
+$(GLSRC)gscrd.h:$(GLSRC)stdpre.h
+$(GLSRC)gscrd.h:$(GLGEN)arch.h
+$(GLSRC)gscrd.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscrdp.h:$(GLSRC)gscie.h
+$(GLSRC)gscrdp.h:$(GLSRC)gxctable.h
+$(GLSRC)gscrdp.h:$(GLSRC)gxfrac.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsdevice.h
+$(GLSRC)gscrdp.h:$(GLSRC)gscspace.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscrdp.h:$(GLSRC)gxfixed.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsparam.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscrdp.h:$(GLSRC)memento.h
+$(GLSRC)gscrdp.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscrdp.h:$(GLSRC)scommon.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsstype.h
+$(GLSRC)gscrdp.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscrdp.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscrdp.h:$(GLSRC)stdio_.h
+$(GLSRC)gscrdp.h:$(GLSRC)stdint_.h
+$(GLSRC)gscrdp.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscrdp.h:$(GLSRC)gstypes.h
+$(GLSRC)gscrdp.h:$(GLSRC)std.h
+$(GLSRC)gscrdp.h:$(GLSRC)stdpre.h
+$(GLSRC)gscrdp.h:$(GLGEN)arch.h
+$(GLSRC)gscrdp.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsfunc.h
+$(GLSRC)gscdevn.h:$(GLSRC)gscspace.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsparam.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscdevn.h:$(GLSRC)memento.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsstruct.h
+$(GLSRC)gscdevn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscdevn.h:$(GLSRC)scommon.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsstype.h
+$(GLSRC)gscdevn.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscdevn.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscdevn.h:$(GLSRC)stdio_.h
+$(GLSRC)gscdevn.h:$(GLSRC)stdint_.h
+$(GLSRC)gscdevn.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscdevn.h:$(GLSRC)gstypes.h
+$(GLSRC)gscdevn.h:$(GLSRC)std.h
+$(GLSRC)gscdevn.h:$(GLSRC)stdpre.h
+$(GLSRC)gscdevn.h:$(GLGEN)arch.h
+$(GLSRC)gscdevn.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscindex.h:$(GLSRC)gxfrac.h
+$(GLSRC)gscindex.h:$(GLSRC)gscspace.h
+$(GLSRC)gscindex.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscindex.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscindex.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscindex.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscindex.h:$(GLSRC)memento.h
+$(GLSRC)gscindex.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscindex.h:$(GLSRC)scommon.h
+$(GLSRC)gscindex.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscindex.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscindex.h:$(GLSRC)gsstype.h
+$(GLSRC)gscindex.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscindex.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscindex.h:$(GLSRC)stdio_.h
+$(GLSRC)gscindex.h:$(GLSRC)stdint_.h
+$(GLSRC)gscindex.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscindex.h:$(GLSRC)gstypes.h
+$(GLSRC)gscindex.h:$(GLSRC)std.h
+$(GLSRC)gscindex.h:$(GLSRC)stdpre.h
+$(GLSRC)gscindex.h:$(GLGEN)arch.h
+$(GLSRC)gscindex.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscolor2.h:$(GLSRC)gscindex.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsptype1.h
+$(GLSRC)gscolor2.h:$(GLSRC)gscie.h
+$(GLSRC)gscolor2.h:$(GLSRC)gspcolor.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxctable.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxfrac.h
+$(GLSRC)gscolor2.h:$(GLSRC)gscms.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsdevice.h
+$(GLSRC)gscolor2.h:$(GLSRC)gscspace.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxfixed.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxhttile.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsparam.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscolor2.h:$(GLSRC)memento.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsuid.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxsync.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscolor2.h:$(GLSRC)scommon.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxarith.h
+$(GLSRC)gscolor2.h:$(GLSRC)gpsync.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsstype.h
+$(GLSRC)gscolor2.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscolor2.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscolor2.h:$(GLSRC)gxcindex.h
+$(GLSRC)gscolor2.h:$(GLSRC)stdio_.h
+$(GLSRC)gscolor2.h:$(GLSRC)stdint_.h
+$(GLSRC)gscolor2.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscolor2.h:$(GLSRC)gstypes.h
+$(GLSRC)gscolor2.h:$(GLSRC)std.h
+$(GLSRC)gscolor2.h:$(GLSRC)stdpre.h
+$(GLSRC)gscolor2.h:$(GLGEN)arch.h
+$(GLSRC)gscolor2.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsfunc.h
+$(GLSRC)gscsepr.h:$(GLSRC)gscspace.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsparam.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscsepr.h:$(GLSRC)memento.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsstruct.h
+$(GLSRC)gscsepr.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscsepr.h:$(GLSRC)scommon.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsstype.h
+$(GLSRC)gscsepr.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscsepr.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscsepr.h:$(GLSRC)stdio_.h
+$(GLSRC)gscsepr.h:$(GLSRC)stdint_.h
+$(GLSRC)gscsepr.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscsepr.h:$(GLSRC)gstypes.h
+$(GLSRC)gscsepr.h:$(GLSRC)std.h
+$(GLSRC)gscsepr.h:$(GLSRC)stdpre.h
+$(GLSRC)gscsepr.h:$(GLGEN)arch.h
+$(GLSRC)gscsepr.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxdcconv.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdcconv.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdcconv.h:$(GLSRC)std.h
+$(GLSRC)gxdcconv.h:$(GLSRC)stdpre.h
+$(GLSRC)gxdcconv.h:$(GLGEN)arch.h
+$(GLSRC)gxfmap.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxfmap.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxfmap.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfmap.h:$(GLSRC)memento.h
+$(GLSRC)gxfmap.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfmap.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxfmap.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfmap.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfmap.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfmap.h:$(GLSRC)std.h
+$(GLSRC)gxfmap.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfmap.h:$(GLGEN)arch.h
+$(GLSRC)gxfmap.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxcmap.h:$(GLSRC)gscsel.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxcmap.h:$(GLSRC)gscms.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxcmap.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsparam.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcmap.h:$(GLSRC)memento.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxsync.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcmap.h:$(GLSRC)scommon.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxarith.h
+$(GLSRC)gxcmap.h:$(GLSRC)gpsync.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcmap.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxcmap.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxcmap.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxcmap.h:$(GLSRC)stdio_.h
+$(GLSRC)gxcmap.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcmap.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxcmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcmap.h:$(GLSRC)std.h
+$(GLSRC)gxcmap.h:$(GLSRC)stdpre.h
+$(GLSRC)gxcmap.h:$(GLGEN)arch.h
+$(GLSRC)gxcmap.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxgstate.h:$(GLSRC)gstrans.h
+$(GLSRC)gxgstate.h:$(GLSRC)gdevp14.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxline.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsht1.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxgstate.h:$(GLSRC)math_.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcolor2.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxgstate.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxblend.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscolor2.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxdevice.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcpath.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsht.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsequivc.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscindex.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsptype1.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscie.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxtext.h
+$(GLSRC)gxgstate.h:$(GLSRC)gstext.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxstate.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxgstate.h:$(GLSRC)gstparam.h
+$(GLSRC)gxgstate.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxctable.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscsel.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsfont.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsimage.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsropt.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxdda.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxpath.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxftype.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscms.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsrect.h
+$(GLSRC)gxgstate.h:$(GLSRC)gslparam.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscpm.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscspace.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsio.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscompt.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxgstate.h:$(GLSRC)gspenum.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsparam.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxgstate.h:$(GLSRC)gp.h
+$(GLSRC)gxgstate.h:$(GLSRC)memento.h
+$(GLSRC)gxgstate.h:$(GLSRC)memory_.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsuid.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxsync.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxgstate.h:$(GLSRC)vmsmath.h
+$(GLSRC)gxgstate.h:$(GLSRC)srdline.h
+$(GLSRC)gxgstate.h:$(GLSRC)scommon.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsfname.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxarith.h
+$(GLSRC)gxgstate.h:$(GLSRC)stat_.h
+$(GLSRC)gxgstate.h:$(GLSRC)gpsync.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsstype.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxgstate.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxgstate.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxgstate.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxgstate.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxgstate.h:$(GLSRC)stdio_.h
+$(GLSRC)gxgstate.h:$(GLSRC)gsccode.h
+$(GLSRC)gxgstate.h:$(GLSRC)stdint_.h
+$(GLSRC)gxgstate.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxgstate.h:$(GLSRC)gstypes.h
+$(GLSRC)gxgstate.h:$(GLSRC)std.h
+$(GLSRC)gxgstate.h:$(GLSRC)stdpre.h
+$(GLSRC)gxgstate.h:$(GLGEN)arch.h
+$(GLSRC)gxgstate.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscolor2.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscindex.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsptype1.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscie.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxtext.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gstext.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gstparam.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxctable.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscsel.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsfont.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsimage.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsropt.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxdda.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxpath.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxftype.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscms.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsrect.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gslparam.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscpm.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscompt.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gspenum.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsparam.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gp.h
+$(GLSRC)gxcolor2.h:$(GLSRC)memento.h
+$(GLSRC)gxcolor2.h:$(GLSRC)memory_.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsuid.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxsync.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcolor2.h:$(GLSRC)srdline.h
+$(GLSRC)gxcolor2.h:$(GLSRC)scommon.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxarith.h
+$(GLSRC)gxcolor2.h:$(GLSRC)stat_.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gpsync.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxcolor2.h:$(GLSRC)stdio_.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gsccode.h
+$(GLSRC)gxcolor2.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcolor2.h:$(GLSRC)std.h
+$(GLSRC)gxcolor2.h:$(GLSRC)stdpre.h
+$(GLSRC)gxcolor2.h:$(GLGEN)arch.h
+$(GLSRC)gxcolor2.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclist.h:$(GLSRC)gxgstate.h
+$(GLSRC)gxclist.h:$(GLSRC)gstrans.h
+$(GLSRC)gxclist.h:$(GLSRC)gdevp14.h
+$(GLSRC)gxclist.h:$(GLSRC)gxline.h
+$(GLSRC)gxclist.h:$(GLSRC)gsht1.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxclist.h:$(GLSRC)math_.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcolor2.h
+$(GLSRC)gxclist.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gxclist.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclist.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gxclist.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gxclist.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gxclist.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxclist.h:$(GLSRC)gxband.h
+$(GLSRC)gxclist.h:$(GLSRC)gxblend.h
+$(GLSRC)gxclist.h:$(GLSRC)gscolor2.h
+$(GLSRC)gxclist.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxclist.h:$(GLSRC)gxdevice.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcpath.h
+$(GLSRC)gxclist.h:$(GLSRC)gsht.h
+$(GLSRC)gxclist.h:$(GLSRC)gsequivc.h
+$(GLSRC)gxclist.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxclist.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxclist.h:$(GLSRC)gscindex.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclist.h:$(GLSRC)gsptype1.h
+$(GLSRC)gxclist.h:$(GLSRC)gscie.h
+$(GLSRC)gxclist.h:$(GLSRC)gxtext.h
+$(GLSRC)gxclist.h:$(GLSRC)gstext.h
+$(GLSRC)gxclist.h:$(GLSRC)gxstate.h
+$(GLSRC)gxclist.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxclist.h:$(GLSRC)gstparam.h
+$(GLSRC)gxclist.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxclist.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxclist.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxclist.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxclist.h:$(GLSRC)gxctable.h
+$(GLSRC)gxclist.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclist.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclist.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclist.h:$(GLSRC)gsfont.h
+$(GLSRC)gxclist.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclist.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxclist.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclist.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclist.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclist.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclist.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxclist.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclist.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclist.h:$(GLSRC)gxftype.h
+$(GLSRC)gxclist.h:$(GLSRC)gscms.h
+$(GLSRC)gxclist.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclist.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclist.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclist.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxclist.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclist.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclist.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclist.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxclist.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxclist.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxclist.h:$(GLSRC)gsio.h
+$(GLSRC)gxclist.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxclist.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxclist.h:$(GLSRC)gxclio.h
+$(GLSRC)gxclist.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclist.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclist.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclist.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclist.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclist.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclist.h:$(GLSRC)gp.h
+$(GLSRC)gxclist.h:$(GLSRC)memento.h
+$(GLSRC)gxclist.h:$(GLSRC)memory_.h
+$(GLSRC)gxclist.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclist.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxclist.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclist.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclist.h:$(GLSRC)vmsmath.h
+$(GLSRC)gxclist.h:$(GLSRC)srdline.h
+$(GLSRC)gxclist.h:$(GLSRC)scommon.h
+$(GLSRC)gxclist.h:$(GLSRC)gsfname.h
+$(GLSRC)gxclist.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxclist.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclist.h:$(GLSRC)gxarith.h
+$(GLSRC)gxclist.h:$(GLSRC)stat_.h
+$(GLSRC)gxclist.h:$(GLSRC)gpsync.h
+$(GLSRC)gxclist.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclist.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxclist.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxclist.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclist.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxclist.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxclist.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclist.h:$(GLSRC)gsccode.h
+$(GLSRC)gxclist.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclist.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxclist.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclist.h:$(GLSRC)std.h
+$(GLSRC)gxclist.h:$(GLSRC)stdpre.h
+$(GLSRC)gxclist.h:$(GLGEN)arch.h
+$(GLSRC)gxclist.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxcspace.h:$(GLSRC)gscsel.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxcspace.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxcspace.h:$(GLSRC)gscms.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxcspace.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcspace.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsparam.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcspace.h:$(GLSRC)memento.h
+$(GLSRC)gxcspace.h:$(GLSRC)gxsync.h
+$(GLSRC)gxcspace.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcspace.h:$(GLSRC)scommon.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcspace.h:$(GLSRC)gxarith.h
+$(GLSRC)gxcspace.h:$(GLSRC)gpsync.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcspace.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxcspace.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxcspace.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxcspace.h:$(GLSRC)stdio_.h
+$(GLSRC)gxcspace.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcspace.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxcspace.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcspace.h:$(GLSRC)std.h
+$(GLSRC)gxcspace.h:$(GLSRC)stdpre.h
+$(GLSRC)gxcspace.h:$(GLGEN)arch.h
+$(GLSRC)gxcspace.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxht.h:$(GLSRC)gxhttype.h
+$(GLSRC)gxht.h:$(GLSRC)gsht1.h
+$(GLSRC)gxht.h:$(GLSRC)gsht.h
+$(GLSRC)gxht.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxht.h:$(GLSRC)gscspace.h
+$(GLSRC)gxht.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxht.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxht.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxht.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxht.h:$(GLSRC)memento.h
+$(GLSRC)gxht.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxht.h:$(GLSRC)scommon.h
+$(GLSRC)gxht.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxht.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxht.h:$(GLSRC)gsstype.h
+$(GLSRC)gxht.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxht.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxht.h:$(GLSRC)stdio_.h
+$(GLSRC)gxht.h:$(GLSRC)stdint_.h
+$(GLSRC)gxht.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxht.h:$(GLSRC)gstypes.h
+$(GLSRC)gxht.h:$(GLSRC)std.h
+$(GLSRC)gxht.h:$(GLSRC)stdpre.h
+$(GLSRC)gxht.h:$(GLGEN)arch.h
+$(GLSRC)gxht.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxcie.h:$(GLSRC)gscie.h
+$(GLSRC)gxcie.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxcie.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxcie.h:$(GLSRC)gxctable.h
+$(GLSRC)gxcie.h:$(GLSRC)gscsel.h
+$(GLSRC)gxcie.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxcie.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxcie.h:$(GLSRC)gscms.h
+$(GLSRC)gxcie.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxcie.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcie.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcie.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxcie.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxcie.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcie.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcie.h:$(GLSRC)gsparam.h
+$(GLSRC)gxcie.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcie.h:$(GLSRC)memento.h
+$(GLSRC)gxcie.h:$(GLSRC)gxsync.h
+$(GLSRC)gxcie.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcie.h:$(GLSRC)scommon.h
+$(GLSRC)gxcie.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxcie.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcie.h:$(GLSRC)gxarith.h
+$(GLSRC)gxcie.h:$(GLSRC)gpsync.h
+$(GLSRC)gxcie.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcie.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxcie.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxcie.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxcie.h:$(GLSRC)stdio_.h
+$(GLSRC)gxcie.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcie.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxcie.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcie.h:$(GLSRC)std.h
+$(GLSRC)gxcie.h:$(GLSRC)stdpre.h
+$(GLSRC)gxcie.h:$(GLGEN)arch.h
+$(GLSRC)gxcie.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gxdda.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsparam.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)scommon.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsstype.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)stdio_.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)stdint_.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gstypes.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)std.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)stdpre.h
+$(GLSRC)gxht_thresh.h:$(GLGEN)arch.h
+$(GLSRC)gxht_thresh.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxblend.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxdevice.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxcpath.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxtext.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gstext.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gstparam.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gscsel.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsfont.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsimage.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsropt.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxdda.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxpath.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxftype.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gscms.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsrect.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gslparam.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gscpm.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gscspace.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsio.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gscompt.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gspenum.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsparam.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gp.h
+$(GLSRC)gxpcolor.h:$(GLSRC)memento.h
+$(GLSRC)gxpcolor.h:$(GLSRC)memory_.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsuid.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxsync.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxpcolor.h:$(GLSRC)srdline.h
+$(GLSRC)gxpcolor.h:$(GLSRC)scommon.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsfname.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxarith.h
+$(GLSRC)gxpcolor.h:$(GLSRC)stat_.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gpsync.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsstype.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxpcolor.h:$(GLSRC)stdio_.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gsccode.h
+$(GLSRC)gxpcolor.h:$(GLSRC)stdint_.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gstypes.h
+$(GLSRC)gxpcolor.h:$(GLSRC)std.h
+$(GLSRC)gxpcolor.h:$(GLSRC)stdpre.h
+$(GLSRC)gxpcolor.h:$(GLGEN)arch.h
+$(GLSRC)gxpcolor.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscolor.h:$(GLSRC)gxtmap.h
+$(GLSRC)gscolor.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscolor.h:$(GLSRC)stdpre.h
+$(GLSRC)gsstate.h:$(GLSRC)gsovrc.h
+$(GLSRC)gsstate.h:$(GLSRC)gscolor.h
+$(GLSRC)gsstate.h:$(GLSRC)gsline.h
+$(GLSRC)gsstate.h:$(GLSRC)gxcomp.h
+$(GLSRC)gsstate.h:$(GLSRC)gsht.h
+$(GLSRC)gsstate.h:$(GLSRC)gscsel.h
+$(GLSRC)gsstate.h:$(GLSRC)gxtmap.h
+$(GLSRC)gsstate.h:$(GLSRC)gslparam.h
+$(GLSRC)gsstate.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsstate.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gsstate.h:$(GLSRC)gscpm.h
+$(GLSRC)gsstate.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsstate.h:$(GLSRC)gscompt.h
+$(GLSRC)gsstate.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsstate.h:$(GLSRC)gsparam.h
+$(GLSRC)gsstate.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsstate.h:$(GLSRC)memento.h
+$(GLSRC)gsstate.h:$(GLSRC)scommon.h
+$(GLSRC)gsstate.h:$(GLSRC)gsstype.h
+$(GLSRC)gsstate.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsstate.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsstate.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsstate.h:$(GLSRC)stdio_.h
+$(GLSRC)gsstate.h:$(GLSRC)stdint_.h
+$(GLSRC)gsstate.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsstate.h:$(GLSRC)gstypes.h
+$(GLSRC)gsstate.h:$(GLSRC)std.h
+$(GLSRC)gsstate.h:$(GLSRC)stdpre.h
+$(GLSRC)gsstate.h:$(GLGEN)arch.h
+$(GLSRC)gsstate.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gscie.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gxctable.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gxfrac.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gscspace.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gxfixed.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_create.h:$(GLSRC)memento.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc_create.h:$(GLSRC)scommon.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsstype.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsicc_create.h:$(GLSRC)stdio_.h
+$(GLSRC)gsicc_create.h:$(GLSRC)stdint_.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_create.h:$(GLSRC)std.h
+$(GLSRC)gsicc_create.h:$(GLSRC)stdpre.h
+$(GLSRC)gsicc_create.h:$(GLGEN)arch.h
+$(GLSRC)gsicc_create.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gximdecode.h:$(GLSRC)gximage.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxsample.h
+$(GLSRC)gximdecode.h:$(GLSRC)sisparam.h
+$(GLSRC)gximdecode.h:$(GLSRC)gx.h
+$(GLSRC)gximdecode.h:$(GLSRC)gdebug.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxcpath.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxiparam.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxtext.h
+$(GLSRC)gximdecode.h:$(GLSRC)gstext.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gximdecode.h:$(GLSRC)gstparam.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxfmap.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsfunc.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxcspace.h
+$(GLSRC)gximdecode.h:$(GLSRC)strimpl.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxrplane.h
+$(GLSRC)gximdecode.h:$(GLSRC)gscsel.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsfont.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsimage.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxbcache.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsropt.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxdda.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxpath.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxiclass.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxfrac.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxtmap.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxftype.h
+$(GLSRC)gximdecode.h:$(GLSRC)gscms.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsrect.h
+$(GLSRC)gximdecode.h:$(GLSRC)gslparam.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsdevice.h
+$(GLSRC)gximdecode.h:$(GLSRC)gscpm.h
+$(GLSRC)gximdecode.h:$(GLSRC)gscspace.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsxfont.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsio.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsiparam.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxfixed.h
+$(GLSRC)gximdecode.h:$(GLSRC)gscompt.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximdecode.h:$(GLSRC)gspenum.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxhttile.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsparam.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsrefct.h
+$(GLSRC)gximdecode.h:$(GLSRC)gp.h
+$(GLSRC)gximdecode.h:$(GLSRC)memento.h
+$(GLSRC)gximdecode.h:$(GLSRC)memory_.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsuid.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsstruct.h
+$(GLSRC)gximdecode.h:$(GLSRC)gdbflags.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxsync.h
+$(GLSRC)gximdecode.h:$(GLSRC)gserrors.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gximdecode.h:$(GLSRC)srdline.h
+$(GLSRC)gximdecode.h:$(GLSRC)scommon.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxarith.h
+$(GLSRC)gximdecode.h:$(GLSRC)stat_.h
+$(GLSRC)gximdecode.h:$(GLSRC)gpsync.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsstype.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsmemory.h
+$(GLSRC)gximdecode.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gximdecode.h:$(GLSRC)gscdefs.h
+$(GLSRC)gximdecode.h:$(GLSRC)gslibctx.h
+$(GLSRC)gximdecode.h:$(GLSRC)gxcindex.h
+$(GLSRC)gximdecode.h:$(GLSRC)stdio_.h
+$(GLSRC)gximdecode.h:$(GLSRC)gsccode.h
+$(GLSRC)gximdecode.h:$(GLSRC)stdint_.h
+$(GLSRC)gximdecode.h:$(GLSRC)gssprintf.h
+$(GLSRC)gximdecode.h:$(GLSRC)gstypes.h
+$(GLSRC)gximdecode.h:$(GLSRC)std.h
+$(GLSRC)gximdecode.h:$(GLSRC)stdpre.h
+$(GLSRC)gximdecode.h:$(GLGEN)arch.h
+$(GLSRC)gximdecode.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxcpath.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxtext.h
+$(GLSRC)gzacpath.h:$(GLSRC)gstext.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gzacpath.h:$(GLSRC)gstparam.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxfmap.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsfunc.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxcspace.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxrplane.h
+$(GLSRC)gzacpath.h:$(GLSRC)gscsel.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsfont.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsimage.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsropt.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxdda.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxpath.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxfrac.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxtmap.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxftype.h
+$(GLSRC)gzacpath.h:$(GLSRC)gscms.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsrect.h
+$(GLSRC)gzacpath.h:$(GLSRC)gslparam.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsdevice.h
+$(GLSRC)gzacpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gzacpath.h:$(GLSRC)gscspace.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsxfont.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsiparam.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxfixed.h
+$(GLSRC)gzacpath.h:$(GLSRC)gscompt.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzacpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxhttile.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsparam.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsrefct.h
+$(GLSRC)gzacpath.h:$(GLSRC)gp.h
+$(GLSRC)gzacpath.h:$(GLSRC)memento.h
+$(GLSRC)gzacpath.h:$(GLSRC)memory_.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsuid.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsstruct.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxsync.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gzacpath.h:$(GLSRC)srdline.h
+$(GLSRC)gzacpath.h:$(GLSRC)scommon.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxarith.h
+$(GLSRC)gzacpath.h:$(GLSRC)stat_.h
+$(GLSRC)gzacpath.h:$(GLSRC)gpsync.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsmemory.h
+$(GLSRC)gzacpath.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gzacpath.h:$(GLSRC)gscdefs.h
+$(GLSRC)gzacpath.h:$(GLSRC)gslibctx.h
+$(GLSRC)gzacpath.h:$(GLSRC)gxcindex.h
+$(GLSRC)gzacpath.h:$(GLSRC)stdio_.h
+$(GLSRC)gzacpath.h:$(GLSRC)gsccode.h
+$(GLSRC)gzacpath.h:$(GLSRC)stdint_.h
+$(GLSRC)gzacpath.h:$(GLSRC)gssprintf.h
+$(GLSRC)gzacpath.h:$(GLSRC)gstypes.h
+$(GLSRC)gzacpath.h:$(GLSRC)std.h
+$(GLSRC)gzacpath.h:$(GLSRC)stdpre.h
+$(GLSRC)gzacpath.h:$(GLGEN)arch.h
+$(GLSRC)gzacpath.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gzcpath.h:$(GLSRC)gzpath.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxcpath.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxtext.h
+$(GLSRC)gzcpath.h:$(GLSRC)gstext.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gzcpath.h:$(GLSRC)gstparam.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxfmap.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsfunc.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxcspace.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxrplane.h
+$(GLSRC)gzcpath.h:$(GLSRC)gscsel.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsfont.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsimage.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsropt.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxdda.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxpath.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxfrac.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxtmap.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxftype.h
+$(GLSRC)gzcpath.h:$(GLSRC)gscms.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsrect.h
+$(GLSRC)gzcpath.h:$(GLSRC)gslparam.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsdevice.h
+$(GLSRC)gzcpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gzcpath.h:$(GLSRC)gscspace.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsxfont.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsiparam.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxfixed.h
+$(GLSRC)gzcpath.h:$(GLSRC)gscompt.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzcpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxhttile.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsparam.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsrefct.h
+$(GLSRC)gzcpath.h:$(GLSRC)gp.h
+$(GLSRC)gzcpath.h:$(GLSRC)memento.h
+$(GLSRC)gzcpath.h:$(GLSRC)memory_.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsuid.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsstruct.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxsync.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gzcpath.h:$(GLSRC)srdline.h
+$(GLSRC)gzcpath.h:$(GLSRC)scommon.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxarith.h
+$(GLSRC)gzcpath.h:$(GLSRC)stat_.h
+$(GLSRC)gzcpath.h:$(GLSRC)gpsync.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsmemory.h
+$(GLSRC)gzcpath.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gzcpath.h:$(GLSRC)gscdefs.h
+$(GLSRC)gzcpath.h:$(GLSRC)gslibctx.h
+$(GLSRC)gzcpath.h:$(GLSRC)gxcindex.h
+$(GLSRC)gzcpath.h:$(GLSRC)stdio_.h
+$(GLSRC)gzcpath.h:$(GLSRC)gsccode.h
+$(GLSRC)gzcpath.h:$(GLSRC)stdint_.h
+$(GLSRC)gzcpath.h:$(GLSRC)gssprintf.h
+$(GLSRC)gzcpath.h:$(GLSRC)gstypes.h
+$(GLSRC)gzcpath.h:$(GLSRC)std.h
+$(GLSRC)gzcpath.h:$(GLSRC)stdpre.h
+$(GLSRC)gzcpath.h:$(GLGEN)arch.h
+$(GLSRC)gzcpath.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gzht.h:$(GLSRC)gxdht.h
+$(GLSRC)gzht.h:$(GLSRC)gxht.h
+$(GLSRC)gzht.h:$(GLSRC)gxhttype.h
+$(GLSRC)gzht.h:$(GLSRC)gsht1.h
+$(GLSRC)gzht.h:$(GLSRC)gsht.h
+$(GLSRC)gzht.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gzht.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzht.h:$(GLSRC)gxtext.h
+$(GLSRC)gzht.h:$(GLSRC)gstext.h
+$(GLSRC)gzht.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gzht.h:$(GLSRC)gstparam.h
+$(GLSRC)gzht.h:$(GLSRC)gxfmap.h
+$(GLSRC)gzht.h:$(GLSRC)gsfunc.h
+$(GLSRC)gzht.h:$(GLSRC)gxcspace.h
+$(GLSRC)gzht.h:$(GLSRC)gxrplane.h
+$(GLSRC)gzht.h:$(GLSRC)gscsel.h
+$(GLSRC)gzht.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzht.h:$(GLSRC)gsfont.h
+$(GLSRC)gzht.h:$(GLSRC)gsimage.h
+$(GLSRC)gzht.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gzht.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gzht.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzht.h:$(GLSRC)gsropt.h
+$(GLSRC)gzht.h:$(GLSRC)gxdda.h
+$(GLSRC)gzht.h:$(GLSRC)gxpath.h
+$(GLSRC)gzht.h:$(GLSRC)gxfrac.h
+$(GLSRC)gzht.h:$(GLSRC)gxtmap.h
+$(GLSRC)gzht.h:$(GLSRC)gxftype.h
+$(GLSRC)gzht.h:$(GLSRC)gscms.h
+$(GLSRC)gzht.h:$(GLSRC)gsrect.h
+$(GLSRC)gzht.h:$(GLSRC)gslparam.h
+$(GLSRC)gzht.h:$(GLSRC)gsdevice.h
+$(GLSRC)gzht.h:$(GLSRC)gscpm.h
+$(GLSRC)gzht.h:$(GLSRC)gscspace.h
+$(GLSRC)gzht.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzht.h:$(GLSRC)gsxfont.h
+$(GLSRC)gzht.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gzht.h:$(GLSRC)gsiparam.h
+$(GLSRC)gzht.h:$(GLSRC)gxfixed.h
+$(GLSRC)gzht.h:$(GLSRC)gscompt.h
+$(GLSRC)gzht.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzht.h:$(GLSRC)gspenum.h
+$(GLSRC)gzht.h:$(GLSRC)gxhttile.h
+$(GLSRC)gzht.h:$(GLSRC)gsparam.h
+$(GLSRC)gzht.h:$(GLSRC)gsrefct.h
+$(GLSRC)gzht.h:$(GLSRC)gp.h
+$(GLSRC)gzht.h:$(GLSRC)memento.h
+$(GLSRC)gzht.h:$(GLSRC)memory_.h
+$(GLSRC)gzht.h:$(GLSRC)gsuid.h
+$(GLSRC)gzht.h:$(GLSRC)gsstruct.h
+$(GLSRC)gzht.h:$(GLSRC)gxsync.h
+$(GLSRC)gzht.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gzht.h:$(GLSRC)srdline.h
+$(GLSRC)gzht.h:$(GLSRC)scommon.h
+$(GLSRC)gzht.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gzht.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzht.h:$(GLSRC)gxarith.h
+$(GLSRC)gzht.h:$(GLSRC)stat_.h
+$(GLSRC)gzht.h:$(GLSRC)gpsync.h
+$(GLSRC)gzht.h:$(GLSRC)gsstype.h
+$(GLSRC)gzht.h:$(GLSRC)gsmemory.h
+$(GLSRC)gzht.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gzht.h:$(GLSRC)gscdefs.h
+$(GLSRC)gzht.h:$(GLSRC)gslibctx.h
+$(GLSRC)gzht.h:$(GLSRC)gxcindex.h
+$(GLSRC)gzht.h:$(GLSRC)stdio_.h
+$(GLSRC)gzht.h:$(GLSRC)gsccode.h
+$(GLSRC)gzht.h:$(GLSRC)stdint_.h
+$(GLSRC)gzht.h:$(GLSRC)gssprintf.h
+$(GLSRC)gzht.h:$(GLSRC)gstypes.h
+$(GLSRC)gzht.h:$(GLSRC)std.h
+$(GLSRC)gzht.h:$(GLSRC)stdpre.h
+$(GLSRC)gzht.h:$(GLGEN)arch.h
+$(GLSRC)gzht.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gzline.h:$(GLSRC)gxline.h
+$(GLSRC)gzline.h:$(GLSRC)math_.h
+$(GLSRC)gzline.h:$(GLSRC)gslparam.h
+$(GLSRC)gzline.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzline.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzline.h:$(GLSRC)vmsmath.h
+$(GLSRC)gzline.h:$(GLSRC)scommon.h
+$(GLSRC)gzline.h:$(GLSRC)gsstype.h
+$(GLSRC)gzline.h:$(GLSRC)gsmemory.h
+$(GLSRC)gzline.h:$(GLSRC)gslibctx.h
+$(GLSRC)gzline.h:$(GLSRC)stdio_.h
+$(GLSRC)gzline.h:$(GLSRC)stdint_.h
+$(GLSRC)gzline.h:$(GLSRC)gssprintf.h
+$(GLSRC)gzline.h:$(GLSRC)gstypes.h
+$(GLSRC)gzline.h:$(GLSRC)std.h
+$(GLSRC)gzline.h:$(GLSRC)stdpre.h
+$(GLSRC)gzline.h:$(GLGEN)arch.h
+$(GLSRC)gzline.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gzpath.h:$(GLSRC)gxpath.h
+$(GLSRC)gzpath.h:$(GLSRC)gsrect.h
+$(GLSRC)gzpath.h:$(GLSRC)gslparam.h
+$(GLSRC)gzpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gzpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzpath.h:$(GLSRC)gxfixed.h
+$(GLSRC)gzpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gzpath.h:$(GLSRC)gsrefct.h
+$(GLSRC)gzpath.h:$(GLSRC)memento.h
+$(GLSRC)gzpath.h:$(GLSRC)scommon.h
+$(GLSRC)gzpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gzpath.h:$(GLSRC)gsmemory.h
+$(GLSRC)gzpath.h:$(GLSRC)gslibctx.h
+$(GLSRC)gzpath.h:$(GLSRC)stdio_.h
+$(GLSRC)gzpath.h:$(GLSRC)stdint_.h
+$(GLSRC)gzpath.h:$(GLSRC)gssprintf.h
+$(GLSRC)gzpath.h:$(GLSRC)gstypes.h
+$(GLSRC)gzpath.h:$(GLSRC)std.h
+$(GLSRC)gzpath.h:$(GLSRC)stdpre.h
+$(GLSRC)gzpath.h:$(GLGEN)arch.h
+$(GLSRC)gzpath.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gzstate.h:$(GLSRC)gsstate.h
+$(GLSRC)gzstate.h:$(GLSRC)gsovrc.h
+$(GLSRC)gzstate.h:$(GLSRC)gxgstate.h
+$(GLSRC)gzstate.h:$(GLSRC)gstrans.h
+$(GLSRC)gzstate.h:$(GLSRC)gdevp14.h
+$(GLSRC)gzstate.h:$(GLSRC)gxline.h
+$(GLSRC)gzstate.h:$(GLSRC)gscolor.h
+$(GLSRC)gzstate.h:$(GLSRC)gsht1.h
+$(GLSRC)gzstate.h:$(GLSRC)gsline.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcomp.h
+$(GLSRC)gzstate.h:$(GLSRC)math_.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcolor2.h
+$(GLSRC)gzstate.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gzstate.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gzstate.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gzstate.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gzstate.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gzstate.h:$(GLSRC)gxblend.h
+$(GLSRC)gzstate.h:$(GLSRC)gscolor2.h
+$(GLSRC)gzstate.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gzstate.h:$(GLSRC)gxdevice.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcpath.h
+$(GLSRC)gzstate.h:$(GLSRC)gsht.h
+$(GLSRC)gzstate.h:$(GLSRC)gsequivc.h
+$(GLSRC)gzstate.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gzstate.h:$(GLSRC)gxpcache.h
+$(GLSRC)gzstate.h:$(GLSRC)gscindex.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzstate.h:$(GLSRC)gsptype1.h
+$(GLSRC)gzstate.h:$(GLSRC)gscie.h
+$(GLSRC)gzstate.h:$(GLSRC)gxtext.h
+$(GLSRC)gzstate.h:$(GLSRC)gstext.h
+$(GLSRC)gzstate.h:$(GLSRC)gxstate.h
+$(GLSRC)gzstate.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gzstate.h:$(GLSRC)gstparam.h
+$(GLSRC)gzstate.h:$(GLSRC)gspcolor.h
+$(GLSRC)gzstate.h:$(GLSRC)gxfmap.h
+$(GLSRC)gzstate.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gzstate.h:$(GLSRC)gsfunc.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcspace.h
+$(GLSRC)gzstate.h:$(GLSRC)gxctable.h
+$(GLSRC)gzstate.h:$(GLSRC)gxrplane.h
+$(GLSRC)gzstate.h:$(GLSRC)gscsel.h
+$(GLSRC)gzstate.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzstate.h:$(GLSRC)gsfont.h
+$(GLSRC)gzstate.h:$(GLSRC)gsimage.h
+$(GLSRC)gzstate.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gzstate.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzstate.h:$(GLSRC)gsropt.h
+$(GLSRC)gzstate.h:$(GLSRC)gxdda.h
+$(GLSRC)gzstate.h:$(GLSRC)gxpath.h
+$(GLSRC)gzstate.h:$(GLSRC)gxiclass.h
+$(GLSRC)gzstate.h:$(GLSRC)gxfrac.h
+$(GLSRC)gzstate.h:$(GLSRC)gxtmap.h
+$(GLSRC)gzstate.h:$(GLSRC)gxftype.h
+$(GLSRC)gzstate.h:$(GLSRC)gscms.h
+$(GLSRC)gzstate.h:$(GLSRC)gsrect.h
+$(GLSRC)gzstate.h:$(GLSRC)gslparam.h
+$(GLSRC)gzstate.h:$(GLSRC)gsdevice.h
+$(GLSRC)gzstate.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gzstate.h:$(GLSRC)gscpm.h
+$(GLSRC)gzstate.h:$(GLSRC)gscspace.h
+$(GLSRC)gzstate.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzstate.h:$(GLSRC)gxstdio.h
+$(GLSRC)gzstate.h:$(GLSRC)gsxfont.h
+$(GLSRC)gzstate.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gzstate.h:$(GLSRC)gsio.h
+$(GLSRC)gzstate.h:$(GLSRC)gsiparam.h
+$(GLSRC)gzstate.h:$(GLSRC)gxfixed.h
+$(GLSRC)gzstate.h:$(GLSRC)gscompt.h
+$(GLSRC)gzstate.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzstate.h:$(GLSRC)gspenum.h
+$(GLSRC)gzstate.h:$(GLSRC)gxhttile.h
+$(GLSRC)gzstate.h:$(GLSRC)gsparam.h
+$(GLSRC)gzstate.h:$(GLSRC)gsrefct.h
+$(GLSRC)gzstate.h:$(GLSRC)gp.h
+$(GLSRC)gzstate.h:$(GLSRC)memento.h
+$(GLSRC)gzstate.h:$(GLSRC)memory_.h
+$(GLSRC)gzstate.h:$(GLSRC)gsuid.h
+$(GLSRC)gzstate.h:$(GLSRC)gsstruct.h
+$(GLSRC)gzstate.h:$(GLSRC)gxsync.h
+$(GLSRC)gzstate.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gzstate.h:$(GLSRC)vmsmath.h
+$(GLSRC)gzstate.h:$(GLSRC)srdline.h
+$(GLSRC)gzstate.h:$(GLSRC)scommon.h
+$(GLSRC)gzstate.h:$(GLSRC)gsfname.h
+$(GLSRC)gzstate.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gzstate.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzstate.h:$(GLSRC)gxarith.h
+$(GLSRC)gzstate.h:$(GLSRC)stat_.h
+$(GLSRC)gzstate.h:$(GLSRC)gpsync.h
+$(GLSRC)gzstate.h:$(GLSRC)gsstype.h
+$(GLSRC)gzstate.h:$(GLSRC)gsmemory.h
+$(GLSRC)gzstate.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gzstate.h:$(GLSRC)gscdefs.h
+$(GLSRC)gzstate.h:$(GLSRC)gslibctx.h
+$(GLSRC)gzstate.h:$(GLSRC)gxcindex.h
+$(GLSRC)gzstate.h:$(GLSRC)stdio_.h
+$(GLSRC)gzstate.h:$(GLSRC)gsccode.h
+$(GLSRC)gzstate.h:$(GLSRC)stdint_.h
+$(GLSRC)gzstate.h:$(GLSRC)gssprintf.h
+$(GLSRC)gzstate.h:$(GLSRC)gstypes.h
+$(GLSRC)gzstate.h:$(GLSRC)std.h
+$(GLSRC)gzstate.h:$(GLSRC)stdpre.h
+$(GLSRC)gzstate.h:$(GLGEN)arch.h
+$(GLSRC)gzstate.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gstext.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gscms.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gp.h
+$(GLSRC)gdevbbox.h:$(GLSRC)memento.h
+$(GLSRC)gdevbbox.h:$(GLSRC)memory_.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevbbox.h:$(GLSRC)srdline.h
+$(GLSRC)gdevbbox.h:$(GLSRC)scommon.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevbbox.h:$(GLSRC)stat_.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevbbox.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevbbox.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevbbox.h:$(GLSRC)std.h
+$(GLSRC)gdevbbox.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevbbox.h:$(GLGEN)arch.h
+$(GLSRC)gdevbbox.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxbitops.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevmem.h:$(GLSRC)gstext.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevmem.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevmem.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevmem.h:$(GLSRC)gscms.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevmem.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevmem.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevmem.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevmem.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmem.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevmem.h:$(GLSRC)gp.h
+$(GLSRC)gdevmem.h:$(GLSRC)memento.h
+$(GLSRC)gdevmem.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevmem.h:$(GLSRC)srdline.h
+$(GLSRC)gdevmem.h:$(GLSRC)scommon.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevmem.h:$(GLSRC)stat_.h
+$(GLSRC)gdevmem.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevmem.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsbitops.h
+$(GLSRC)gdevmem.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevmem.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevmem.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevmem.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevmem.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevmem.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevmem.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevmem.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevmem.h:$(GLSRC)std.h
+$(GLSRC)gdevmem.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevmem.h:$(GLGEN)arch.h
+$(GLSRC)gdevmem.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevmpla.h:$(GLSRC)scommon.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevmpla.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevmpla.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevmpla.h:$(GLSRC)std.h
+$(GLSRC)gdevmpla.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevmpla.h:$(GLGEN)arch.h
+$(GLSRC)gdevmpla.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gximage.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxsample.h
+$(GLSRC)gdevmrop.h:$(GLSRC)sisparam.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxcpath.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxiparam.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gstext.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevmrop.h:$(GLSRC)strimpl.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxiclass.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gscms.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gp.h
+$(GLSRC)gdevmrop.h:$(GLSRC)memento.h
+$(GLSRC)gdevmrop.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevmrop.h:$(GLSRC)srdline.h
+$(GLSRC)gdevmrop.h:$(GLSRC)scommon.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevmrop.h:$(GLSRC)stat_.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevmrop.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevmrop.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevmrop.h:$(GLSRC)std.h
+$(GLSRC)gdevmrop.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevmrop.h:$(GLGEN)arch.h
+$(GLSRC)gdevmrop.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gstext.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gscms.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gp.h
+$(GLSRC)gdevmrun.h:$(GLSRC)memento.h
+$(GLSRC)gdevmrun.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevmrun.h:$(GLSRC)srdline.h
+$(GLSRC)gdevmrun.h:$(GLSRC)scommon.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevmrun.h:$(GLSRC)stat_.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevmrun.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevmrun.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevmrun.h:$(GLSRC)std.h
+$(GLSRC)gdevmrun.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevmrun.h:$(GLGEN)arch.h
+$(GLSRC)gdevmrun.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gstext.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gscms.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gp.h
+$(GLSRC)gdevplnx.h:$(GLSRC)memento.h
+$(GLSRC)gdevplnx.h:$(GLSRC)memory_.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevplnx.h:$(GLSRC)srdline.h
+$(GLSRC)gdevplnx.h:$(GLSRC)scommon.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevplnx.h:$(GLSRC)stat_.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevplnx.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevplnx.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevplnx.h:$(GLSRC)std.h
+$(GLSRC)gdevplnx.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevplnx.h:$(GLGEN)arch.h
+$(GLSRC)gdevplnx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxdevice.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevepo.h:$(GLSRC)gstext.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevepo.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevepo.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevepo.h:$(GLSRC)gscms.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevepo.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevepo.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevepo.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsio.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevepo.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevepo.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevepo.h:$(GLSRC)gp.h
+$(GLSRC)gdevepo.h:$(GLSRC)memento.h
+$(GLSRC)gdevepo.h:$(GLSRC)memory_.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevepo.h:$(GLSRC)srdline.h
+$(GLSRC)gdevepo.h:$(GLSRC)scommon.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsfname.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevepo.h:$(GLSRC)stat_.h
+$(GLSRC)gdevepo.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevepo.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevepo.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevepo.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevepo.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevepo.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevepo.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevepo.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevepo.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevepo.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevepo.h:$(GLSRC)std.h
+$(GLSRC)gdevepo.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevepo.h:$(GLGEN)arch.h
+$(GLSRC)gdevepo.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)sa85d.h:$(GLSRC)scommon.h
+$(GLSRC)sa85d.h:$(GLSRC)gsstype.h
+$(GLSRC)sa85d.h:$(GLSRC)gsmemory.h
+$(GLSRC)sa85d.h:$(GLSRC)gslibctx.h
+$(GLSRC)sa85d.h:$(GLSRC)stdio_.h
+$(GLSRC)sa85d.h:$(GLSRC)stdint_.h
+$(GLSRC)sa85d.h:$(GLSRC)gssprintf.h
+$(GLSRC)sa85d.h:$(GLSRC)gstypes.h
+$(GLSRC)sa85d.h:$(GLSRC)std.h
+$(GLSRC)sa85d.h:$(GLSRC)stdpre.h
+$(GLSRC)sa85d.h:$(GLGEN)arch.h
+$(GLSRC)sa85d.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)sa85x.h:$(GLSRC)sa85d.h
+$(GLSRC)sa85x.h:$(GLSRC)scommon.h
+$(GLSRC)sa85x.h:$(GLSRC)gsstype.h
+$(GLSRC)sa85x.h:$(GLSRC)gsmemory.h
+$(GLSRC)sa85x.h:$(GLSRC)gslibctx.h
+$(GLSRC)sa85x.h:$(GLSRC)stdio_.h
+$(GLSRC)sa85x.h:$(GLSRC)stdint_.h
+$(GLSRC)sa85x.h:$(GLSRC)gssprintf.h
+$(GLSRC)sa85x.h:$(GLSRC)gstypes.h
+$(GLSRC)sa85x.h:$(GLSRC)std.h
+$(GLSRC)sa85x.h:$(GLSRC)stdpre.h
+$(GLSRC)sa85x.h:$(GLGEN)arch.h
+$(GLSRC)sa85x.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)sbcp.h:$(GLSRC)scommon.h
+$(GLSRC)sbcp.h:$(GLSRC)gsstype.h
+$(GLSRC)sbcp.h:$(GLSRC)gsmemory.h
+$(GLSRC)sbcp.h:$(GLSRC)gslibctx.h
+$(GLSRC)sbcp.h:$(GLSRC)stdio_.h
+$(GLSRC)sbcp.h:$(GLSRC)stdint_.h
+$(GLSRC)sbcp.h:$(GLSRC)gssprintf.h
+$(GLSRC)sbcp.h:$(GLSRC)gstypes.h
+$(GLSRC)sbcp.h:$(GLSRC)std.h
+$(GLSRC)sbcp.h:$(GLSRC)stdpre.h
+$(GLSRC)sbcp.h:$(GLGEN)arch.h
+$(GLSRC)sbcp.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)sbtx.h:$(GLSRC)scommon.h
+$(GLSRC)sbtx.h:$(GLSRC)gsstype.h
+$(GLSRC)sbtx.h:$(GLSRC)gsmemory.h
+$(GLSRC)sbtx.h:$(GLSRC)gslibctx.h
+$(GLSRC)sbtx.h:$(GLSRC)stdio_.h
+$(GLSRC)sbtx.h:$(GLSRC)stdint_.h
+$(GLSRC)sbtx.h:$(GLSRC)gssprintf.h
+$(GLSRC)sbtx.h:$(GLSRC)gstypes.h
+$(GLSRC)sbtx.h:$(GLSRC)std.h
+$(GLSRC)sbtx.h:$(GLSRC)stdpre.h
+$(GLSRC)sbtx.h:$(GLGEN)arch.h
+$(GLSRC)sbtx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)scanchar.h:$(GLSRC)scommon.h
+$(GLSRC)scanchar.h:$(GLSRC)gsstype.h
+$(GLSRC)scanchar.h:$(GLSRC)gsmemory.h
+$(GLSRC)scanchar.h:$(GLSRC)gslibctx.h
+$(GLSRC)scanchar.h:$(GLSRC)stdio_.h
+$(GLSRC)scanchar.h:$(GLSRC)stdint_.h
+$(GLSRC)scanchar.h:$(GLSRC)gssprintf.h
+$(GLSRC)scanchar.h:$(GLSRC)gstypes.h
+$(GLSRC)scanchar.h:$(GLSRC)std.h
+$(GLSRC)scanchar.h:$(GLSRC)stdpre.h
+$(GLSRC)scanchar.h:$(GLGEN)arch.h
+$(GLSRC)scanchar.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)sfilter.h:$(GLSRC)scommon.h
+$(GLSRC)sfilter.h:$(GLSRC)gsstype.h
+$(GLSRC)sfilter.h:$(GLSRC)gsmemory.h
+$(GLSRC)sfilter.h:$(GLSRC)gslibctx.h
+$(GLSRC)sfilter.h:$(GLSRC)stdio_.h
+$(GLSRC)sfilter.h:$(GLSRC)stdint_.h
+$(GLSRC)sfilter.h:$(GLSRC)gssprintf.h
+$(GLSRC)sfilter.h:$(GLSRC)gstypes.h
+$(GLSRC)sfilter.h:$(GLSRC)std.h
+$(GLSRC)sfilter.h:$(GLSRC)stdpre.h
+$(GLSRC)sfilter.h:$(GLGEN)arch.h
+$(GLSRC)sfilter.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)sdct.h:$(GLSRC)setjmp_.h
+$(GLSRC)sdct.h:$(GLSRC)strimpl.h
+$(GLSRC)sdct.h:$(GLSRC)gscms.h
+$(GLSRC)sdct.h:$(GLSRC)gsdevice.h
+$(GLSRC)sdct.h:$(GLSRC)gscspace.h
+$(GLSRC)sdct.h:$(GLSRC)gsgstate.h
+$(GLSRC)sdct.h:$(GLSRC)gsiparam.h
+$(GLSRC)sdct.h:$(GLSRC)gsmatrix.h
+$(GLSRC)sdct.h:$(GLSRC)gsparam.h
+$(GLSRC)sdct.h:$(GLSRC)gsrefct.h
+$(GLSRC)sdct.h:$(GLSRC)memento.h
+$(GLSRC)sdct.h:$(GLSRC)gsstruct.h
+$(GLSRC)sdct.h:$(GLSRC)gxsync.h
+$(GLSRC)sdct.h:$(GLSRC)gxbitmap.h
+$(GLSRC)sdct.h:$(GLSRC)scommon.h
+$(GLSRC)sdct.h:$(GLSRC)gsbitmap.h
+$(GLSRC)sdct.h:$(GLSRC)gsccolor.h
+$(GLSRC)sdct.h:$(GLSRC)gpsync.h
+$(GLSRC)sdct.h:$(GLSRC)gsstype.h
+$(GLSRC)sdct.h:$(GLSRC)gsmemory.h
+$(GLSRC)sdct.h:$(GLSRC)gslibctx.h
+$(GLSRC)sdct.h:$(GLSRC)stdio_.h
+$(GLSRC)sdct.h:$(GLSRC)stdint_.h
+$(GLSRC)sdct.h:$(GLSRC)gssprintf.h
+$(GLSRC)sdct.h:$(GLSRC)gstypes.h
+$(GLSRC)sdct.h:$(GLSRC)std.h
+$(GLSRC)sdct.h:$(GLSRC)stdpre.h
+$(GLSRC)sdct.h:$(GLGEN)arch.h
+$(GLSRC)sdct.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)shc.h:$(GLSRC)scommon.h
+$(GLSRC)shc.h:$(GLSRC)gsstype.h
+$(GLSRC)shc.h:$(GLSRC)gsmemory.h
+$(GLSRC)shc.h:$(GLSRC)gslibctx.h
+$(GLSRC)shc.h:$(GLSRC)stdio_.h
+$(GLSRC)shc.h:$(GLSRC)stdint_.h
+$(GLSRC)shc.h:$(GLSRC)gssprintf.h
+$(GLSRC)shc.h:$(GLSRC)gsbittab.h
+$(GLSRC)shc.h:$(GLSRC)gstypes.h
+$(GLSRC)shc.h:$(GLSRC)std.h
+$(GLSRC)shc.h:$(GLSRC)stdpre.h
+$(GLSRC)shc.h:$(GLGEN)arch.h
+$(GLSRC)shc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)sisparam.h:$(GLSRC)gxdda.h
+$(GLSRC)sisparam.h:$(GLSRC)gxfixed.h
+$(GLSRC)sisparam.h:$(GLSRC)scommon.h
+$(GLSRC)sisparam.h:$(GLSRC)gsstype.h
+$(GLSRC)sisparam.h:$(GLSRC)gsmemory.h
+$(GLSRC)sisparam.h:$(GLSRC)gslibctx.h
+$(GLSRC)sisparam.h:$(GLSRC)stdio_.h
+$(GLSRC)sisparam.h:$(GLSRC)stdint_.h
+$(GLSRC)sisparam.h:$(GLSRC)gssprintf.h
+$(GLSRC)sisparam.h:$(GLSRC)gstypes.h
+$(GLSRC)sisparam.h:$(GLSRC)std.h
+$(GLSRC)sisparam.h:$(GLSRC)stdpre.h
+$(GLSRC)sisparam.h:$(GLGEN)arch.h
+$(GLSRC)sisparam.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)sjpeg.h:$(GLSRC)sdct.h
+$(GLSRC)sjpeg.h:$(GLSRC)setjmp_.h
+$(GLSRC)sjpeg.h:$(GLSRC)strimpl.h
+$(GLSRC)sjpeg.h:$(GLSRC)gscms.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsdevice.h
+$(GLSRC)sjpeg.h:$(GLSRC)gscspace.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsgstate.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsiparam.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsmatrix.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsparam.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsrefct.h
+$(GLSRC)sjpeg.h:$(GLSRC)memento.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsstruct.h
+$(GLSRC)sjpeg.h:$(GLSRC)gxsync.h
+$(GLSRC)sjpeg.h:$(GLSRC)gxbitmap.h
+$(GLSRC)sjpeg.h:$(GLSRC)scommon.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsbitmap.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsccolor.h
+$(GLSRC)sjpeg.h:$(GLSRC)gpsync.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsstype.h
+$(GLSRC)sjpeg.h:$(GLSRC)gsmemory.h
+$(GLSRC)sjpeg.h:$(GLSRC)gslibctx.h
+$(GLSRC)sjpeg.h:$(GLSRC)stdio_.h
+$(GLSRC)sjpeg.h:$(GLSRC)stdint_.h
+$(GLSRC)sjpeg.h:$(GLSRC)gssprintf.h
+$(GLSRC)sjpeg.h:$(GLSRC)gstypes.h
+$(GLSRC)sjpeg.h:$(GLSRC)std.h
+$(GLSRC)sjpeg.h:$(GLSRC)stdpre.h
+$(GLSRC)sjpeg.h:$(GLGEN)arch.h
+$(GLSRC)sjpeg.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)slzwx.h:$(GLSRC)scommon.h
+$(GLSRC)slzwx.h:$(GLSRC)gsstype.h
+$(GLSRC)slzwx.h:$(GLSRC)gsmemory.h
+$(GLSRC)slzwx.h:$(GLSRC)gslibctx.h
+$(GLSRC)slzwx.h:$(GLSRC)stdio_.h
+$(GLSRC)slzwx.h:$(GLSRC)stdint_.h
+$(GLSRC)slzwx.h:$(GLSRC)gssprintf.h
+$(GLSRC)slzwx.h:$(GLSRC)gstypes.h
+$(GLSRC)slzwx.h:$(GLSRC)std.h
+$(GLSRC)slzwx.h:$(GLSRC)stdpre.h
+$(GLSRC)slzwx.h:$(GLGEN)arch.h
+$(GLSRC)slzwx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)smd5.h:$(GLSRC)gsmd5.h
+$(GLSRC)smd5.h:$(GLSRC)memory_.h
+$(GLSRC)smd5.h:$(GLSRC)scommon.h
+$(GLSRC)smd5.h:$(GLSRC)gsstype.h
+$(GLSRC)smd5.h:$(GLSRC)gsmemory.h
+$(GLSRC)smd5.h:$(GLSRC)gslibctx.h
+$(GLSRC)smd5.h:$(GLSRC)stdio_.h
+$(GLSRC)smd5.h:$(GLSRC)stdint_.h
+$(GLSRC)smd5.h:$(GLSRC)gssprintf.h
+$(GLSRC)smd5.h:$(GLSRC)gstypes.h
+$(GLSRC)smd5.h:$(GLSRC)std.h
+$(GLSRC)smd5.h:$(GLSRC)stdpre.h
+$(GLSRC)smd5.h:$(GLGEN)arch.h
+$(GLSRC)smd5.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)sarc4.h:$(GLSRC)scommon.h
+$(GLSRC)sarc4.h:$(GLSRC)gsstype.h
+$(GLSRC)sarc4.h:$(GLSRC)gsmemory.h
+$(GLSRC)sarc4.h:$(GLSRC)gslibctx.h
+$(GLSRC)sarc4.h:$(GLSRC)stdio_.h
+$(GLSRC)sarc4.h:$(GLSRC)stdint_.h
+$(GLSRC)sarc4.h:$(GLSRC)gssprintf.h
+$(GLSRC)sarc4.h:$(GLSRC)gstypes.h
+$(GLSRC)sarc4.h:$(GLSRC)std.h
+$(GLSRC)sarc4.h:$(GLSRC)stdpre.h
+$(GLSRC)sarc4.h:$(GLGEN)arch.h
+$(GLSRC)sarc4.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)saes.h:$(GLSRC)aes.h
+$(GLSRC)saes.h:$(GLSRC)scommon.h
+$(GLSRC)saes.h:$(GLSRC)gsstype.h
+$(GLSRC)saes.h:$(GLSRC)gsmemory.h
+$(GLSRC)saes.h:$(GLSRC)gslibctx.h
+$(GLSRC)saes.h:$(GLSRC)stdio_.h
+$(GLSRC)saes.h:$(GLSRC)stdint_.h
+$(GLSRC)saes.h:$(GLSRC)gssprintf.h
+$(GLSRC)saes.h:$(GLSRC)gstypes.h
+$(GLSRC)saes.h:$(GLSRC)std.h
+$(GLSRC)saes.h:$(GLSRC)stdpre.h
+$(GLSRC)saes.h:$(GLGEN)arch.h
+$(GLSRC)saes.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)sjbig2.h:$(GLSRC)scommon.h
+$(GLSRC)sjbig2.h:$(GLSRC)gsstype.h
+$(GLSRC)sjbig2.h:$(GLSRC)gsmemory.h
+$(GLSRC)sjbig2.h:$(GLSRC)gslibctx.h
+$(GLSRC)sjbig2.h:$(GLSRC)stdio_.h
+$(GLSRC)sjbig2.h:$(GLSRC)stdint_.h
+$(GLSRC)sjbig2.h:$(GLSRC)gssprintf.h
+$(GLSRC)sjbig2.h:$(GLSRC)gstypes.h
+$(GLSRC)sjbig2.h:$(GLSRC)std.h
+$(GLSRC)sjbig2.h:$(GLSRC)stdpre.h
+$(GLSRC)sjbig2.h:$(GLGEN)arch.h
+$(GLSRC)sjbig2.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)spdiffx.h:$(GLSRC)scommon.h
+$(GLSRC)spdiffx.h:$(GLSRC)gsstype.h
+$(GLSRC)spdiffx.h:$(GLSRC)gsmemory.h
+$(GLSRC)spdiffx.h:$(GLSRC)gslibctx.h
+$(GLSRC)spdiffx.h:$(GLSRC)stdio_.h
+$(GLSRC)spdiffx.h:$(GLSRC)stdint_.h
+$(GLSRC)spdiffx.h:$(GLSRC)gssprintf.h
+$(GLSRC)spdiffx.h:$(GLSRC)gstypes.h
+$(GLSRC)spdiffx.h:$(GLSRC)std.h
+$(GLSRC)spdiffx.h:$(GLSRC)stdpre.h
+$(GLSRC)spdiffx.h:$(GLGEN)arch.h
+$(GLSRC)spdiffx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)spngpx.h:$(GLSRC)scommon.h
+$(GLSRC)spngpx.h:$(GLSRC)gsstype.h
+$(GLSRC)spngpx.h:$(GLSRC)gsmemory.h
+$(GLSRC)spngpx.h:$(GLSRC)gslibctx.h
+$(GLSRC)spngpx.h:$(GLSRC)stdio_.h
+$(GLSRC)spngpx.h:$(GLSRC)stdint_.h
+$(GLSRC)spngpx.h:$(GLSRC)gssprintf.h
+$(GLSRC)spngpx.h:$(GLSRC)gstypes.h
+$(GLSRC)spngpx.h:$(GLSRC)std.h
+$(GLSRC)spngpx.h:$(GLSRC)stdpre.h
+$(GLSRC)spngpx.h:$(GLGEN)arch.h
+$(GLSRC)spngpx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)spprint.h:$(GLSRC)scommon.h
+$(GLSRC)spprint.h:$(GLSRC)gsstype.h
+$(GLSRC)spprint.h:$(GLSRC)gsmemory.h
+$(GLSRC)spprint.h:$(GLSRC)gslibctx.h
+$(GLSRC)spprint.h:$(GLSRC)stdio_.h
+$(GLSRC)spprint.h:$(GLSRC)stdint_.h
+$(GLSRC)spprint.h:$(GLSRC)gssprintf.h
+$(GLSRC)spprint.h:$(GLSRC)gstypes.h
+$(GLSRC)spprint.h:$(GLSRC)std.h
+$(GLSRC)spprint.h:$(GLSRC)stdpre.h
+$(GLSRC)spprint.h:$(GLGEN)arch.h
+$(GLSRC)spprint.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)spsdf.h:$(GLSRC)gsparam.h
+$(GLSRC)spsdf.h:$(GLSRC)scommon.h
+$(GLSRC)spsdf.h:$(GLSRC)gsstype.h
+$(GLSRC)spsdf.h:$(GLSRC)gsmemory.h
+$(GLSRC)spsdf.h:$(GLSRC)gslibctx.h
+$(GLSRC)spsdf.h:$(GLSRC)stdio_.h
+$(GLSRC)spsdf.h:$(GLSRC)stdint_.h
+$(GLSRC)spsdf.h:$(GLSRC)gssprintf.h
+$(GLSRC)spsdf.h:$(GLSRC)gstypes.h
+$(GLSRC)spsdf.h:$(GLSRC)std.h
+$(GLSRC)spsdf.h:$(GLSRC)stdpre.h
+$(GLSRC)spsdf.h:$(GLGEN)arch.h
+$(GLSRC)spsdf.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)srlx.h:$(GLSRC)scommon.h
+$(GLSRC)srlx.h:$(GLSRC)gsstype.h
+$(GLSRC)srlx.h:$(GLSRC)gsmemory.h
+$(GLSRC)srlx.h:$(GLSRC)gslibctx.h
+$(GLSRC)srlx.h:$(GLSRC)stdio_.h
+$(GLSRC)srlx.h:$(GLSRC)stdint_.h
+$(GLSRC)srlx.h:$(GLSRC)gssprintf.h
+$(GLSRC)srlx.h:$(GLSRC)gstypes.h
+$(GLSRC)srlx.h:$(GLSRC)std.h
+$(GLSRC)srlx.h:$(GLSRC)stdpre.h
+$(GLSRC)srlx.h:$(GLGEN)arch.h
+$(GLSRC)srlx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)spwgx.h:$(GLSRC)scommon.h
+$(GLSRC)spwgx.h:$(GLSRC)gsstype.h
+$(GLSRC)spwgx.h:$(GLSRC)gsmemory.h
+$(GLSRC)spwgx.h:$(GLSRC)gslibctx.h
+$(GLSRC)spwgx.h:$(GLSRC)stdio_.h
+$(GLSRC)spwgx.h:$(GLSRC)stdint_.h
+$(GLSRC)spwgx.h:$(GLSRC)gssprintf.h
+$(GLSRC)spwgx.h:$(GLSRC)gstypes.h
+$(GLSRC)spwgx.h:$(GLSRC)std.h
+$(GLSRC)spwgx.h:$(GLSRC)stdpre.h
+$(GLSRC)spwgx.h:$(GLGEN)arch.h
+$(GLSRC)spwgx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)sstring.h:$(GLSRC)scommon.h
+$(GLSRC)sstring.h:$(GLSRC)gsstype.h
+$(GLSRC)sstring.h:$(GLSRC)gsmemory.h
+$(GLSRC)sstring.h:$(GLSRC)gslibctx.h
+$(GLSRC)sstring.h:$(GLSRC)stdio_.h
+$(GLSRC)sstring.h:$(GLSRC)stdint_.h
+$(GLSRC)sstring.h:$(GLSRC)gssprintf.h
+$(GLSRC)sstring.h:$(GLSRC)gstypes.h
+$(GLSRC)sstring.h:$(GLSRC)std.h
+$(GLSRC)sstring.h:$(GLSRC)stdpre.h
+$(GLSRC)sstring.h:$(GLGEN)arch.h
+$(GLSRC)sstring.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)strimpl.h:$(GLSRC)gsstruct.h
+$(GLSRC)strimpl.h:$(GLSRC)scommon.h
+$(GLSRC)strimpl.h:$(GLSRC)gsstype.h
+$(GLSRC)strimpl.h:$(GLSRC)gsmemory.h
+$(GLSRC)strimpl.h:$(GLSRC)gslibctx.h
+$(GLSRC)strimpl.h:$(GLSRC)stdio_.h
+$(GLSRC)strimpl.h:$(GLSRC)stdint_.h
+$(GLSRC)strimpl.h:$(GLSRC)gssprintf.h
+$(GLSRC)strimpl.h:$(GLSRC)gstypes.h
+$(GLSRC)strimpl.h:$(GLSRC)std.h
+$(GLSRC)strimpl.h:$(GLSRC)stdpre.h
+$(GLSRC)strimpl.h:$(GLGEN)arch.h
+$(GLSRC)strimpl.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)szlibx.h:$(GLSRC)scommon.h
+$(GLSRC)szlibx.h:$(GLSRC)gsstype.h
+$(GLSRC)szlibx.h:$(GLSRC)gsmemory.h
+$(GLSRC)szlibx.h:$(GLSRC)gslibctx.h
+$(GLSRC)szlibx.h:$(GLSRC)stdio_.h
+$(GLSRC)szlibx.h:$(GLSRC)stdint_.h
+$(GLSRC)szlibx.h:$(GLSRC)gssprintf.h
+$(GLSRC)szlibx.h:$(GLSRC)gstypes.h
+$(GLSRC)szlibx.h:$(GLSRC)std.h
+$(GLSRC)szlibx.h:$(GLSRC)stdpre.h
+$(GLSRC)szlibx.h:$(GLGEN)arch.h
+$(GLSRC)szlibx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)scf.h:$(GLSRC)shc.h
+$(GLSRC)scf.h:$(GLSRC)scommon.h
+$(GLSRC)scf.h:$(GLSRC)gsstype.h
+$(GLSRC)scf.h:$(GLSRC)gsmemory.h
+$(GLSRC)scf.h:$(GLSRC)gslibctx.h
+$(GLSRC)scf.h:$(GLSRC)stdio_.h
+$(GLSRC)scf.h:$(GLSRC)stdint_.h
+$(GLSRC)scf.h:$(GLSRC)gssprintf.h
+$(GLSRC)scf.h:$(GLSRC)gsbittab.h
+$(GLSRC)scf.h:$(GLSRC)gstypes.h
+$(GLSRC)scf.h:$(GLSRC)std.h
+$(GLSRC)scf.h:$(GLSRC)stdpre.h
+$(GLSRC)scf.h:$(GLGEN)arch.h
+$(GLSRC)scf.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)scfx.h:$(GLSRC)shc.h
+$(GLSRC)scfx.h:$(GLSRC)scommon.h
+$(GLSRC)scfx.h:$(GLSRC)gsstype.h
+$(GLSRC)scfx.h:$(GLSRC)gsmemory.h
+$(GLSRC)scfx.h:$(GLSRC)gslibctx.h
+$(GLSRC)scfx.h:$(GLSRC)stdio_.h
+$(GLSRC)scfx.h:$(GLSRC)stdint_.h
+$(GLSRC)scfx.h:$(GLSRC)gssprintf.h
+$(GLSRC)scfx.h:$(GLSRC)gsbittab.h
+$(GLSRC)scfx.h:$(GLSRC)gstypes.h
+$(GLSRC)scfx.h:$(GLSRC)std.h
+$(GLSRC)scfx.h:$(GLSRC)stdpre.h
+$(GLSRC)scfx.h:$(GLGEN)arch.h
+$(GLSRC)scfx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)siinterp.h:$(GLSRC)sisparam.h
+$(GLSRC)siinterp.h:$(GLSRC)gxdda.h
+$(GLSRC)siinterp.h:$(GLSRC)gxfixed.h
+$(GLSRC)siinterp.h:$(GLSRC)scommon.h
+$(GLSRC)siinterp.h:$(GLSRC)gsstype.h
+$(GLSRC)siinterp.h:$(GLSRC)gsmemory.h
+$(GLSRC)siinterp.h:$(GLSRC)gslibctx.h
+$(GLSRC)siinterp.h:$(GLSRC)stdio_.h
+$(GLSRC)siinterp.h:$(GLSRC)stdint_.h
+$(GLSRC)siinterp.h:$(GLSRC)gssprintf.h
+$(GLSRC)siinterp.h:$(GLSRC)gstypes.h
+$(GLSRC)siinterp.h:$(GLSRC)std.h
+$(GLSRC)siinterp.h:$(GLSRC)stdpre.h
+$(GLSRC)siinterp.h:$(GLGEN)arch.h
+$(GLSRC)siinterp.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)siscale.h:$(GLSRC)sisparam.h
+$(GLSRC)siscale.h:$(GLSRC)gxdda.h
+$(GLSRC)siscale.h:$(GLSRC)gxfixed.h
+$(GLSRC)siscale.h:$(GLSRC)scommon.h
+$(GLSRC)siscale.h:$(GLSRC)gsstype.h
+$(GLSRC)siscale.h:$(GLSRC)gsmemory.h
+$(GLSRC)siscale.h:$(GLSRC)gslibctx.h
+$(GLSRC)siscale.h:$(GLSRC)stdio_.h
+$(GLSRC)siscale.h:$(GLSRC)stdint_.h
+$(GLSRC)siscale.h:$(GLSRC)gssprintf.h
+$(GLSRC)siscale.h:$(GLSRC)gstypes.h
+$(GLSRC)siscale.h:$(GLSRC)std.h
+$(GLSRC)siscale.h:$(GLSRC)stdpre.h
+$(GLSRC)siscale.h:$(GLGEN)arch.h
+$(GLSRC)siscale.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)sidscale.h:$(GLSRC)sisparam.h
+$(GLSRC)sidscale.h:$(GLSRC)gxdda.h
+$(GLSRC)sidscale.h:$(GLSRC)gxfixed.h
+$(GLSRC)sidscale.h:$(GLSRC)scommon.h
+$(GLSRC)sidscale.h:$(GLSRC)gsstype.h
+$(GLSRC)sidscale.h:$(GLSRC)gsmemory.h
+$(GLSRC)sidscale.h:$(GLSRC)gslibctx.h
+$(GLSRC)sidscale.h:$(GLSRC)stdio_.h
+$(GLSRC)sidscale.h:$(GLSRC)stdint_.h
+$(GLSRC)sidscale.h:$(GLSRC)gssprintf.h
+$(GLSRC)sidscale.h:$(GLSRC)gstypes.h
+$(GLSRC)sidscale.h:$(GLSRC)std.h
+$(GLSRC)sidscale.h:$(GLSRC)stdpre.h
+$(GLSRC)sidscale.h:$(GLGEN)arch.h
+$(GLSRC)sidscale.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)simscale.h:$(GLSRC)sisparam.h
+$(GLSRC)simscale.h:$(GLSRC)gxdda.h
+$(GLSRC)simscale.h:$(GLSRC)gxfixed.h
+$(GLSRC)simscale.h:$(GLSRC)scommon.h
+$(GLSRC)simscale.h:$(GLSRC)gsstype.h
+$(GLSRC)simscale.h:$(GLSRC)gsmemory.h
+$(GLSRC)simscale.h:$(GLSRC)gslibctx.h
+$(GLSRC)simscale.h:$(GLSRC)stdio_.h
+$(GLSRC)simscale.h:$(GLSRC)stdint_.h
+$(GLSRC)simscale.h:$(GLSRC)gssprintf.h
+$(GLSRC)simscale.h:$(GLSRC)gstypes.h
+$(GLSRC)simscale.h:$(GLSRC)std.h
+$(GLSRC)simscale.h:$(GLSRC)stdpre.h
+$(GLSRC)simscale.h:$(GLGEN)arch.h
+$(GLSRC)simscale.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gximage.h:$(GLSRC)gxsample.h
+$(GLSRC)gximage.h:$(GLSRC)sisparam.h
+$(GLSRC)gximage.h:$(GLSRC)gxcpath.h
+$(GLSRC)gximage.h:$(GLSRC)gxiparam.h
+$(GLSRC)gximage.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gximage.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximage.h:$(GLSRC)gxtext.h
+$(GLSRC)gximage.h:$(GLSRC)gstext.h
+$(GLSRC)gximage.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gximage.h:$(GLSRC)gstparam.h
+$(GLSRC)gximage.h:$(GLSRC)gxfmap.h
+$(GLSRC)gximage.h:$(GLSRC)gsfunc.h
+$(GLSRC)gximage.h:$(GLSRC)gxcspace.h
+$(GLSRC)gximage.h:$(GLSRC)strimpl.h
+$(GLSRC)gximage.h:$(GLSRC)gxrplane.h
+$(GLSRC)gximage.h:$(GLSRC)gscsel.h
+$(GLSRC)gximage.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximage.h:$(GLSRC)gsfont.h
+$(GLSRC)gximage.h:$(GLSRC)gsimage.h
+$(GLSRC)gximage.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gximage.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gximage.h:$(GLSRC)gxbcache.h
+$(GLSRC)gximage.h:$(GLSRC)gsropt.h
+$(GLSRC)gximage.h:$(GLSRC)gxdda.h
+$(GLSRC)gximage.h:$(GLSRC)gxpath.h
+$(GLSRC)gximage.h:$(GLSRC)gxiclass.h
+$(GLSRC)gximage.h:$(GLSRC)gxfrac.h
+$(GLSRC)gximage.h:$(GLSRC)gxtmap.h
+$(GLSRC)gximage.h:$(GLSRC)gxftype.h
+$(GLSRC)gximage.h:$(GLSRC)gscms.h
+$(GLSRC)gximage.h:$(GLSRC)gsrect.h
+$(GLSRC)gximage.h:$(GLSRC)gslparam.h
+$(GLSRC)gximage.h:$(GLSRC)gsdevice.h
+$(GLSRC)gximage.h:$(GLSRC)gscpm.h
+$(GLSRC)gximage.h:$(GLSRC)gscspace.h
+$(GLSRC)gximage.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximage.h:$(GLSRC)gsxfont.h
+$(GLSRC)gximage.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gximage.h:$(GLSRC)gsiparam.h
+$(GLSRC)gximage.h:$(GLSRC)gxfixed.h
+$(GLSRC)gximage.h:$(GLSRC)gscompt.h
+$(GLSRC)gximage.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximage.h:$(GLSRC)gspenum.h
+$(GLSRC)gximage.h:$(GLSRC)gxhttile.h
+$(GLSRC)gximage.h:$(GLSRC)gsparam.h
+$(GLSRC)gximage.h:$(GLSRC)gsrefct.h
+$(GLSRC)gximage.h:$(GLSRC)gp.h
+$(GLSRC)gximage.h:$(GLSRC)memento.h
+$(GLSRC)gximage.h:$(GLSRC)memory_.h
+$(GLSRC)gximage.h:$(GLSRC)gsuid.h
+$(GLSRC)gximage.h:$(GLSRC)gsstruct.h
+$(GLSRC)gximage.h:$(GLSRC)gxsync.h
+$(GLSRC)gximage.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gximage.h:$(GLSRC)srdline.h
+$(GLSRC)gximage.h:$(GLSRC)scommon.h
+$(GLSRC)gximage.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gximage.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximage.h:$(GLSRC)gxarith.h
+$(GLSRC)gximage.h:$(GLSRC)stat_.h
+$(GLSRC)gximage.h:$(GLSRC)gpsync.h
+$(GLSRC)gximage.h:$(GLSRC)gsstype.h
+$(GLSRC)gximage.h:$(GLSRC)gsmemory.h
+$(GLSRC)gximage.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gximage.h:$(GLSRC)gscdefs.h
+$(GLSRC)gximage.h:$(GLSRC)gslibctx.h
+$(GLSRC)gximage.h:$(GLSRC)gxcindex.h
+$(GLSRC)gximage.h:$(GLSRC)stdio_.h
+$(GLSRC)gximage.h:$(GLSRC)gsccode.h
+$(GLSRC)gximage.h:$(GLSRC)stdint_.h
+$(GLSRC)gximage.h:$(GLSRC)gssprintf.h
+$(GLSRC)gximage.h:$(GLSRC)gstypes.h
+$(GLSRC)gximage.h:$(GLSRC)std.h
+$(GLSRC)gximage.h:$(GLSRC)stdpre.h
+$(GLSRC)gximage.h:$(GLGEN)arch.h
+$(GLSRC)gximage.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gscms.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gscspace.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsparam.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxhldevc.h:$(GLSRC)memento.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gxsync.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxhldevc.h:$(GLSRC)scommon.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gxarith.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gpsync.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsstype.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxhldevc.h:$(GLSRC)stdio_.h
+$(GLSRC)gxhldevc.h:$(GLSRC)stdint_.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gstypes.h
+$(GLSRC)gxhldevc.h:$(GLSRC)std.h
+$(GLSRC)gxhldevc.h:$(GLSRC)stdpre.h
+$(GLSRC)gxhldevc.h:$(GLGEN)arch.h
+$(GLSRC)gxhldevc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsshade.h
+$(GLSRC)gsptype2.h:$(GLSRC)gspath.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gsptype2.h:$(GLSRC)gscie.h
+$(GLSRC)gsptype2.h:$(GLSRC)gspcolor.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsfunc.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxctable.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxpath.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxfrac.h
+$(GLSRC)gsptype2.h:$(GLSRC)gscms.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsrect.h
+$(GLSRC)gsptype2.h:$(GLSRC)gslparam.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsptype2.h:$(GLSRC)gscpm.h
+$(GLSRC)gsptype2.h:$(GLSRC)gscspace.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxfixed.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsptype2.h:$(GLSRC)gspenum.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxhttile.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsparam.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsptype2.h:$(GLSRC)memento.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsuid.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsstruct.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxsync.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsptype2.h:$(GLSRC)scommon.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxarith.h
+$(GLSRC)gsptype2.h:$(GLSRC)gpsync.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsstype.h
+$(GLSRC)gsptype2.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsptype2.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsptype2.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsptype2.h:$(GLSRC)stdio_.h
+$(GLSRC)gsptype2.h:$(GLSRC)stdint_.h
+$(GLSRC)gsptype2.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsptype2.h:$(GLSRC)gstypes.h
+$(GLSRC)gsptype2.h:$(GLSRC)std.h
+$(GLSRC)gsptype2.h:$(GLSRC)stdpre.h
+$(GLSRC)gsptype2.h:$(GLGEN)arch.h
+$(GLSRC)gsptype2.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gstext.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gscms.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gp.h
+$(GLSRC)gdevddrw.h:$(GLSRC)memento.h
+$(GLSRC)gdevddrw.h:$(GLSRC)memory_.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevddrw.h:$(GLSRC)srdline.h
+$(GLSRC)gdevddrw.h:$(GLSRC)scommon.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevddrw.h:$(GLSRC)stat_.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevddrw.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevddrw.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevddrw.h:$(GLSRC)std.h
+$(GLSRC)gdevddrw.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevddrw.h:$(GLGEN)arch.h
+$(GLSRC)gdevddrw.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfill.h:$(GLSRC)gzpath.h
+$(GLSRC)gxfill.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxfill.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxfill.h:$(GLSRC)gxtext.h
+$(GLSRC)gxfill.h:$(GLSRC)gstext.h
+$(GLSRC)gxfill.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxfill.h:$(GLSRC)gstparam.h
+$(GLSRC)gxfill.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxfill.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxfill.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxfill.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxfill.h:$(GLSRC)gscsel.h
+$(GLSRC)gxfill.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxfill.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfill.h:$(GLSRC)gsimage.h
+$(GLSRC)gxfill.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfill.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxfill.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxfill.h:$(GLSRC)gsropt.h
+$(GLSRC)gxfill.h:$(GLSRC)gxdda.h
+$(GLSRC)gxfill.h:$(GLSRC)gxpath.h
+$(GLSRC)gxfill.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxfill.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxfill.h:$(GLSRC)gxftype.h
+$(GLSRC)gxfill.h:$(GLSRC)gscms.h
+$(GLSRC)gxfill.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfill.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfill.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfill.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfill.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfill.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfill.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxfill.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxfill.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfill.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxfill.h:$(GLSRC)gscompt.h
+$(GLSRC)gxfill.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfill.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfill.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfill.h:$(GLSRC)gsparam.h
+$(GLSRC)gxfill.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfill.h:$(GLSRC)gp.h
+$(GLSRC)gxfill.h:$(GLSRC)memento.h
+$(GLSRC)gxfill.h:$(GLSRC)memory_.h
+$(GLSRC)gxfill.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfill.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxfill.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfill.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfill.h:$(GLSRC)srdline.h
+$(GLSRC)gxfill.h:$(GLSRC)scommon.h
+$(GLSRC)gxfill.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfill.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfill.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfill.h:$(GLSRC)stat_.h
+$(GLSRC)gxfill.h:$(GLSRC)gpsync.h
+$(GLSRC)gxfill.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfill.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxfill.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxfill.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxfill.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfill.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxfill.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfill.h:$(GLSRC)gsccode.h
+$(GLSRC)gxfill.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfill.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfill.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfill.h:$(GLSRC)std.h
+$(GLSRC)gxfill.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfill.h:$(GLGEN)arch.h
+$(GLSRC)gxfill.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)ttfoutl.h:$(GLSRC)malloc_.h
+$(GLSRC)ttfoutl.h:$(GLSRC)bobbin.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gxfcache.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsfont.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gxbcache.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gxftype.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsxfont.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gxfixed.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsmatrix.h
+$(GLSRC)ttfoutl.h:$(GLSRC)memento.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsuid.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttfoutl.h:$(GLSRC)scommon.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsbitmap.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsstype.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsmemory.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gslibctx.h
+$(GLSRC)ttfoutl.h:$(GLSRC)stdio_.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gsccode.h
+$(GLSRC)ttfoutl.h:$(GLSRC)stdint_.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gssprintf.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gstypes.h
+$(GLSRC)ttfoutl.h:$(GLSRC)std.h
+$(GLSRC)ttfoutl.h:$(GLSRC)stdpre.h
+$(GLSRC)ttfoutl.h:$(GLGEN)arch.h
+$(GLSRC)ttfoutl.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxttfb.h:$(GLSRC)ttfoutl.h
+$(GLSRC)gxttfb.h:$(GLSRC)malloc_.h
+$(GLSRC)gxttfb.h:$(GLSRC)bobbin.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxfont.h
+$(GLSRC)gxttfb.h:$(GLSRC)gspath.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsgdata.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxfapi.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsfcmap.h
+$(GLSRC)gxttfb.h:$(GLSRC)gstext.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsfont.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxpath.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxftype.h
+$(GLSRC)gxttfb.h:$(GLSRC)gscms.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsrect.h
+$(GLSRC)gxttfb.h:$(GLSRC)gslparam.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxttfb.h:$(GLSRC)gscpm.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxttfb.h:$(GLSRC)gscspace.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsnotify.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxttfb.h:$(GLSRC)gspenum.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsparam.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxttfb.h:$(GLSRC)memento.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsuid.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxsync.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxttfb.h:$(GLSRC)scommon.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxarith.h
+$(GLSRC)gxttfb.h:$(GLSRC)gpsync.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsstype.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxttfb.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxttfb.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxttfb.h:$(GLSRC)stdio_.h
+$(GLSRC)gxttfb.h:$(GLSRC)gsccode.h
+$(GLSRC)gxttfb.h:$(GLSRC)stdint_.h
+$(GLSRC)gxttfb.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxttfb.h:$(GLSRC)gstypes.h
+$(GLSRC)gxttfb.h:$(GLSRC)std.h
+$(GLSRC)gxttfb.h:$(GLSRC)stdpre.h
+$(GLSRC)gxttfb.h:$(GLGEN)arch.h
+$(GLSRC)gxttfb.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gzspotan.h:$(GLSRC)gzpath.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxcmap.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxtext.h
+$(GLSRC)gzspotan.h:$(GLSRC)gstext.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gzspotan.h:$(GLSRC)gstparam.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxfmap.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsfunc.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxcspace.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxrplane.h
+$(GLSRC)gzspotan.h:$(GLSRC)gscsel.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxfcache.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsfont.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsimage.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxbcache.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsropt.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxdda.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxpath.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxfrac.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxtmap.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxftype.h
+$(GLSRC)gzspotan.h:$(GLSRC)gscms.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsrect.h
+$(GLSRC)gzspotan.h:$(GLSRC)gslparam.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsdevice.h
+$(GLSRC)gzspotan.h:$(GLSRC)gscpm.h
+$(GLSRC)gzspotan.h:$(GLSRC)gscspace.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsgstate.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsxfont.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsiparam.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxfixed.h
+$(GLSRC)gzspotan.h:$(GLSRC)gscompt.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gzspotan.h:$(GLSRC)gspenum.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxhttile.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsparam.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsrefct.h
+$(GLSRC)gzspotan.h:$(GLSRC)gp.h
+$(GLSRC)gzspotan.h:$(GLSRC)memento.h
+$(GLSRC)gzspotan.h:$(GLSRC)memory_.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsuid.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsstruct.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxsync.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gzspotan.h:$(GLSRC)srdline.h
+$(GLSRC)gzspotan.h:$(GLSRC)scommon.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsccolor.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxarith.h
+$(GLSRC)gzspotan.h:$(GLSRC)stat_.h
+$(GLSRC)gzspotan.h:$(GLSRC)gpsync.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsstype.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsmemory.h
+$(GLSRC)gzspotan.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gzspotan.h:$(GLSRC)gscdefs.h
+$(GLSRC)gzspotan.h:$(GLSRC)gslibctx.h
+$(GLSRC)gzspotan.h:$(GLSRC)gxcindex.h
+$(GLSRC)gzspotan.h:$(GLSRC)stdio_.h
+$(GLSRC)gzspotan.h:$(GLSRC)gsccode.h
+$(GLSRC)gzspotan.h:$(GLSRC)stdint_.h
+$(GLSRC)gzspotan.h:$(GLSRC)gssprintf.h
+$(GLSRC)gzspotan.h:$(GLSRC)gstypes.h
+$(GLSRC)gzspotan.h:$(GLSRC)std.h
+$(GLSRC)gzspotan.h:$(GLSRC)stdpre.h
+$(GLSRC)gzspotan.h:$(GLGEN)arch.h
+$(GLSRC)gzspotan.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxcmap.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxtext.h
+$(GLSRC)gsequivc.h:$(GLSRC)gstext.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gsequivc.h:$(GLSRC)gstparam.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxfmap.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsfunc.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxcspace.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxrplane.h
+$(GLSRC)gsequivc.h:$(GLSRC)gscsel.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxfcache.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsfont.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsimage.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxbcache.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsropt.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxdda.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxpath.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxfrac.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxtmap.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxftype.h
+$(GLSRC)gsequivc.h:$(GLSRC)gscms.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsrect.h
+$(GLSRC)gsequivc.h:$(GLSRC)gslparam.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsequivc.h:$(GLSRC)gscpm.h
+$(GLSRC)gsequivc.h:$(GLSRC)gscspace.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsxfont.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxfixed.h
+$(GLSRC)gsequivc.h:$(GLSRC)gscompt.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsequivc.h:$(GLSRC)gspenum.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxhttile.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsparam.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsequivc.h:$(GLSRC)gp.h
+$(GLSRC)gsequivc.h:$(GLSRC)memento.h
+$(GLSRC)gsequivc.h:$(GLSRC)memory_.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsuid.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsstruct.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxsync.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsequivc.h:$(GLSRC)srdline.h
+$(GLSRC)gsequivc.h:$(GLSRC)scommon.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxarith.h
+$(GLSRC)gsequivc.h:$(GLSRC)stat_.h
+$(GLSRC)gsequivc.h:$(GLSRC)gpsync.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsstype.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsequivc.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gsequivc.h:$(GLSRC)gscdefs.h
+$(GLSRC)gsequivc.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsequivc.h:$(GLSRC)gxcindex.h
+$(GLSRC)gsequivc.h:$(GLSRC)stdio_.h
+$(GLSRC)gsequivc.h:$(GLSRC)gsccode.h
+$(GLSRC)gsequivc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsequivc.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsequivc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsequivc.h:$(GLSRC)std.h
+$(GLSRC)gsequivc.h:$(GLSRC)stdpre.h
+$(GLSRC)gsequivc.h:$(GLGEN)arch.h
+$(GLSRC)gsequivc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxblend.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsequivc.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gstext.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gscms.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gp.h
+$(GLSRC)gdevdevn.h:$(GLSRC)memento.h
+$(GLSRC)gdevdevn.h:$(GLSRC)memory_.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevdevn.h:$(GLSRC)srdline.h
+$(GLSRC)gdevdevn.h:$(GLSRC)scommon.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevdevn.h:$(GLSRC)stat_.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevdevn.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevdevn.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevdevn.h:$(GLSRC)std.h
+$(GLSRC)gdevdevn.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevdevn.h:$(GLGEN)arch.h
+$(GLSRC)gdevdevn.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gdevprn.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)string_.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstrtok.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclthrd.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclpage.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclist.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxgstate.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gstrans.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gdevp14.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxline.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsht1.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcomp.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)math_.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcolor2.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gx.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gdebug.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxband.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxblend.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscolor2.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevice.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcpath.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsht.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsequivc.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxpcache.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscindex.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsptype1.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscie.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gstext.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxstate.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gspcolor.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxctable.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxiclass.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscms.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsio.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxclio.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gp.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)memento.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)memory_.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsutil.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstrl.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gdbflags.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gserrors.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)vmsmath.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)srdline.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)scommon.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsfname.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)stat_.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)std.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevdevnprn.h:$(GLGEN)arch.h
+$(GLSRC)gdevdevnprn.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxdevice.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gstext.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gscms.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsio.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gp.h
+$(GLSRC)gdevoflt.h:$(GLSRC)memento.h
+$(GLSRC)gdevoflt.h:$(GLSRC)memory_.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevoflt.h:$(GLSRC)srdline.h
+$(GLSRC)gdevoflt.h:$(GLSRC)scommon.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsfname.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevoflt.h:$(GLSRC)stat_.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevoflt.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevoflt.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevoflt.h:$(GLSRC)std.h
+$(GLSRC)gdevoflt.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevoflt.h:$(GLGEN)arch.h
+$(GLSRC)gdevoflt.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxdevice.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevnup.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevnup.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevnup.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevnup.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsio.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevnup.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevnup.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevnup.h:$(GLSRC)gp.h
+$(GLSRC)gdevnup.h:$(GLSRC)memento.h
+$(GLSRC)gdevnup.h:$(GLSRC)memory_.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevnup.h:$(GLSRC)srdline.h
+$(GLSRC)gdevnup.h:$(GLSRC)scommon.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsfname.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevnup.h:$(GLSRC)stat_.h
+$(GLSRC)gdevnup.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevnup.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevnup.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevnup.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevnup.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevnup.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevnup.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevnup.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevnup.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevnup.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevnup.h:$(GLSRC)std.h
+$(GLSRC)gdevnup.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevnup.h:$(GLGEN)arch.h
+$(GLSRC)gdevnup.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfapi.h:$(GLSRC)gstext.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfapi.h:$(GLSRC)gxpath.h
+$(GLSRC)gxfapi.h:$(GLSRC)gscms.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfapi.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfapi.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfapi.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfapi.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfapi.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfapi.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsparam.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfapi.h:$(GLSRC)memento.h
+$(GLSRC)gxfapi.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfapi.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfapi.h:$(GLSRC)scommon.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfapi.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfapi.h:$(GLSRC)gpsync.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxfapi.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfapi.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxfapi.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfapi.h:$(GLSRC)gsccode.h
+$(GLSRC)gxfapi.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfapi.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfapi.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfapi.h:$(GLSRC)std.h
+$(GLSRC)gxfapi.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfapi.h:$(GLGEN)arch.h
+$(GLSRC)gxfapi.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)wrfont.h:$(GLSRC)std.h
+$(GLSRC)wrfont.h:$(GLSRC)stdpre.h
+$(GLSRC)wrfont.h:$(GLGEN)arch.h
+$(GLSRC)write_t1.h:$(GLSRC)gxfapi.h
+$(GLSRC)write_t1.h:$(GLSRC)gstext.h
+$(GLSRC)write_t1.h:$(GLSRC)gsfont.h
+$(GLSRC)write_t1.h:$(GLSRC)gsdcolor.h
+$(GLSRC)write_t1.h:$(GLSRC)gxpath.h
+$(GLSRC)write_t1.h:$(GLSRC)gscms.h
+$(GLSRC)write_t1.h:$(GLSRC)gsrect.h
+$(GLSRC)write_t1.h:$(GLSRC)gslparam.h
+$(GLSRC)write_t1.h:$(GLSRC)gsdevice.h
+$(GLSRC)write_t1.h:$(GLSRC)gscpm.h
+$(GLSRC)write_t1.h:$(GLSRC)gscspace.h
+$(GLSRC)write_t1.h:$(GLSRC)gsgstate.h
+$(GLSRC)write_t1.h:$(GLSRC)gsiparam.h
+$(GLSRC)write_t1.h:$(GLSRC)gxfixed.h
+$(GLSRC)write_t1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)write_t1.h:$(GLSRC)gspenum.h
+$(GLSRC)write_t1.h:$(GLSRC)gxhttile.h
+$(GLSRC)write_t1.h:$(GLSRC)gsparam.h
+$(GLSRC)write_t1.h:$(GLSRC)gsrefct.h
+$(GLSRC)write_t1.h:$(GLSRC)memento.h
+$(GLSRC)write_t1.h:$(GLSRC)gxsync.h
+$(GLSRC)write_t1.h:$(GLSRC)gxbitmap.h
+$(GLSRC)write_t1.h:$(GLSRC)scommon.h
+$(GLSRC)write_t1.h:$(GLSRC)gsbitmap.h
+$(GLSRC)write_t1.h:$(GLSRC)gsccolor.h
+$(GLSRC)write_t1.h:$(GLSRC)gxarith.h
+$(GLSRC)write_t1.h:$(GLSRC)gpsync.h
+$(GLSRC)write_t1.h:$(GLSRC)gsstype.h
+$(GLSRC)write_t1.h:$(GLSRC)gsmemory.h
+$(GLSRC)write_t1.h:$(GLSRC)gslibctx.h
+$(GLSRC)write_t1.h:$(GLSRC)gxcindex.h
+$(GLSRC)write_t1.h:$(GLSRC)stdio_.h
+$(GLSRC)write_t1.h:$(GLSRC)gsccode.h
+$(GLSRC)write_t1.h:$(GLSRC)stdint_.h
+$(GLSRC)write_t1.h:$(GLSRC)gssprintf.h
+$(GLSRC)write_t1.h:$(GLSRC)gstypes.h
+$(GLSRC)write_t1.h:$(GLSRC)std.h
+$(GLSRC)write_t1.h:$(GLSRC)stdpre.h
+$(GLSRC)write_t1.h:$(GLGEN)arch.h
+$(GLSRC)write_t1.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)write_t2.h:$(GLSRC)gxfapi.h
+$(GLSRC)write_t2.h:$(GLSRC)gstext.h
+$(GLSRC)write_t2.h:$(GLSRC)gsfont.h
+$(GLSRC)write_t2.h:$(GLSRC)gsdcolor.h
+$(GLSRC)write_t2.h:$(GLSRC)gxpath.h
+$(GLSRC)write_t2.h:$(GLSRC)gscms.h
+$(GLSRC)write_t2.h:$(GLSRC)gsrect.h
+$(GLSRC)write_t2.h:$(GLSRC)gslparam.h
+$(GLSRC)write_t2.h:$(GLSRC)gsdevice.h
+$(GLSRC)write_t2.h:$(GLSRC)gscpm.h
+$(GLSRC)write_t2.h:$(GLSRC)gscspace.h
+$(GLSRC)write_t2.h:$(GLSRC)gsgstate.h
+$(GLSRC)write_t2.h:$(GLSRC)gsiparam.h
+$(GLSRC)write_t2.h:$(GLSRC)gxfixed.h
+$(GLSRC)write_t2.h:$(GLSRC)gsmatrix.h
+$(GLSRC)write_t2.h:$(GLSRC)gspenum.h
+$(GLSRC)write_t2.h:$(GLSRC)gxhttile.h
+$(GLSRC)write_t2.h:$(GLSRC)gsparam.h
+$(GLSRC)write_t2.h:$(GLSRC)gsrefct.h
+$(GLSRC)write_t2.h:$(GLSRC)memento.h
+$(GLSRC)write_t2.h:$(GLSRC)gxsync.h
+$(GLSRC)write_t2.h:$(GLSRC)gxbitmap.h
+$(GLSRC)write_t2.h:$(GLSRC)scommon.h
+$(GLSRC)write_t2.h:$(GLSRC)gsbitmap.h
+$(GLSRC)write_t2.h:$(GLSRC)gsccolor.h
+$(GLSRC)write_t2.h:$(GLSRC)gxarith.h
+$(GLSRC)write_t2.h:$(GLSRC)gpsync.h
+$(GLSRC)write_t2.h:$(GLSRC)gsstype.h
+$(GLSRC)write_t2.h:$(GLSRC)gsmemory.h
+$(GLSRC)write_t2.h:$(GLSRC)gslibctx.h
+$(GLSRC)write_t2.h:$(GLSRC)gxcindex.h
+$(GLSRC)write_t2.h:$(GLSRC)stdio_.h
+$(GLSRC)write_t2.h:$(GLSRC)gsccode.h
+$(GLSRC)write_t2.h:$(GLSRC)stdint_.h
+$(GLSRC)write_t2.h:$(GLSRC)gssprintf.h
+$(GLSRC)write_t2.h:$(GLSRC)gstypes.h
+$(GLSRC)write_t2.h:$(GLSRC)std.h
+$(GLSRC)write_t2.h:$(GLSRC)stdpre.h
+$(GLSRC)write_t2.h:$(GLGEN)arch.h
+$(GLSRC)write_t2.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)claptrap.h:$(GLSRC)gsmemory.h
+$(GLSRC)claptrap.h:$(GLSRC)gslibctx.h
+$(GLSRC)claptrap.h:$(GLSRC)stdio_.h
+$(GLSRC)claptrap.h:$(GLSRC)gssprintf.h
+$(GLSRC)claptrap.h:$(GLSRC)gstypes.h
+$(GLSRC)claptrap.h:$(GLSRC)std.h
+$(GLSRC)claptrap.h:$(GLSRC)stdpre.h
+$(GLSRC)claptrap.h:$(GLGEN)arch.h
+$(GLSRC)claptrap.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)ets.h:$(GLSRC)stdpre.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxgetbit.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxtext.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gstext.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gstparam.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gscsel.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsfont.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsimage.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsropt.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxdda.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxpath.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxftype.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gscms.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsrect.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gslparam.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gscpm.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gscspace.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gscompt.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gspenum.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsparam.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gp.h
+$(GLSRC)gxdownscale.h:$(GLSRC)memento.h
+$(GLSRC)gxdownscale.h:$(GLSRC)memory_.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsuid.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxsync.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxdownscale.h:$(GLSRC)claptrap.h
+$(GLSRC)gxdownscale.h:$(GLSRC)srdline.h
+$(GLSRC)gxdownscale.h:$(GLSRC)scommon.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxarith.h
+$(GLSRC)gxdownscale.h:$(GLSRC)stat_.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gpsync.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsstype.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxdownscale.h:$(GLSRC)ctype_.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxdownscale.h:$(GLSRC)stdio_.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gsccode.h
+$(GLSRC)gxdownscale.h:$(GLSRC)stdint_.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gstypes.h
+$(GLSRC)gxdownscale.h:$(GLSRC)std.h
+$(GLSRC)gxdownscale.h:$(GLSRC)stdpre.h
+$(GLSRC)gxdownscale.h:$(GLGEN)arch.h
+$(GLSRC)gxdownscale.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)strmio.h:$(GLSRC)scommon.h
+$(GLSRC)strmio.h:$(GLSRC)gsstype.h
+$(GLSRC)strmio.h:$(GLSRC)gsmemory.h
+$(GLSRC)strmio.h:$(GLSRC)gslibctx.h
+$(GLSRC)strmio.h:$(GLSRC)stdio_.h
+$(GLSRC)strmio.h:$(GLSRC)stdint_.h
+$(GLSRC)strmio.h:$(GLSRC)gssprintf.h
+$(GLSRC)strmio.h:$(GLSRC)gstypes.h
+$(GLSRC)strmio.h:$(GLSRC)std.h
+$(GLSRC)strmio.h:$(GLSRC)stdpre.h
+$(GLSRC)strmio.h:$(GLGEN)arch.h
+$(GLSRC)strmio.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)sdcparam.h:$(GLSRC)sdct.h
+$(GLSRC)sdcparam.h:$(GLSRC)setjmp_.h
+$(GLSRC)sdcparam.h:$(GLSRC)strimpl.h
+$(GLSRC)sdcparam.h:$(GLSRC)gscms.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsdevice.h
+$(GLSRC)sdcparam.h:$(GLSRC)gscspace.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsgstate.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsiparam.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsmatrix.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsparam.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsrefct.h
+$(GLSRC)sdcparam.h:$(GLSRC)memento.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsstruct.h
+$(GLSRC)sdcparam.h:$(GLSRC)gxsync.h
+$(GLSRC)sdcparam.h:$(GLSRC)gxbitmap.h
+$(GLSRC)sdcparam.h:$(GLSRC)scommon.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsbitmap.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsccolor.h
+$(GLSRC)sdcparam.h:$(GLSRC)gpsync.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsstype.h
+$(GLSRC)sdcparam.h:$(GLSRC)gsmemory.h
+$(GLSRC)sdcparam.h:$(GLSRC)gslibctx.h
+$(GLSRC)sdcparam.h:$(GLSRC)stdio_.h
+$(GLSRC)sdcparam.h:$(GLSRC)stdint_.h
+$(GLSRC)sdcparam.h:$(GLSRC)gssprintf.h
+$(GLSRC)sdcparam.h:$(GLSRC)gstypes.h
+$(GLSRC)sdcparam.h:$(GLSRC)std.h
+$(GLSRC)sdcparam.h:$(GLSRC)stdpre.h
+$(GLSRC)sdcparam.h:$(GLGEN)arch.h
+$(GLSRC)sdcparam.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)ssha2.h:$(GLSRC)sha2.h
+$(GLSRC)ssha2.h:$(GLSRC)scommon.h
+$(GLSRC)ssha2.h:$(GLSRC)gsstype.h
+$(GLSRC)ssha2.h:$(GLSRC)gsmemory.h
+$(GLSRC)ssha2.h:$(GLSRC)gslibctx.h
+$(GLSRC)ssha2.h:$(GLSRC)stdio_.h
+$(GLSRC)ssha2.h:$(GLSRC)stdint_.h
+$(GLSRC)ssha2.h:$(GLSRC)gssprintf.h
+$(GLSRC)ssha2.h:$(GLSRC)gstypes.h
+$(GLSRC)ssha2.h:$(GLSRC)std.h
+$(GLSRC)ssha2.h:$(GLSRC)stdpre.h
+$(GLSRC)ssha2.h:$(GLGEN)arch.h
+$(GLSRC)ssha2.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevprn.h:$(GLSRC)string_.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsstrtok.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxclthrd.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxclpage.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxclist.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxgstate.h
+$(GLSRC)gdevprn.h:$(GLSRC)gstrans.h
+$(GLSRC)gdevprn.h:$(GLSRC)gdevp14.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxline.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsht1.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcomp.h
+$(GLSRC)gdevprn.h:$(GLSRC)math_.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcolor2.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gdevprn.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gdevprn.h:$(GLSRC)gx.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gdevprn.h:$(GLSRC)gdebug.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxband.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxblend.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscolor2.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxdevice.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcpath.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsht.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsequivc.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxpcache.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscindex.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsptype1.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscie.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevprn.h:$(GLSRC)gstext.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxstate.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevprn.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevprn.h:$(GLSRC)gspcolor.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxctable.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxiclass.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscms.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevprn.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsio.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxclio.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevprn.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevprn.h:$(GLSRC)gp.h
+$(GLSRC)gdevprn.h:$(GLSRC)memento.h
+$(GLSRC)gdevprn.h:$(GLSRC)memory_.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsutil.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsstrl.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevprn.h:$(GLSRC)gdbflags.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevprn.h:$(GLSRC)gserrors.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevprn.h:$(GLSRC)vmsmath.h
+$(GLSRC)gdevprn.h:$(GLSRC)srdline.h
+$(GLSRC)gdevprn.h:$(GLSRC)scommon.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsfname.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevprn.h:$(GLSRC)stat_.h
+$(GLSRC)gdevprn.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevprn.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevprn.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevprn.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevprn.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevprn.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevprn.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevprn.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevprn.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevprn.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevprn.h:$(GLSRC)std.h
+$(GLSRC)gdevprn.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevprn.h:$(GLGEN)arch.h
+$(GLSRC)gdevprn.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxdevice.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gstext.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gscms.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsio.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gp.h
+$(GLSRC)gdevmplt.h:$(GLSRC)memento.h
+$(GLSRC)gdevmplt.h:$(GLSRC)memory_.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevmplt.h:$(GLSRC)srdline.h
+$(GLSRC)gdevmplt.h:$(GLSRC)scommon.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsfname.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevmplt.h:$(GLSRC)stat_.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevmplt.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevmplt.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevmplt.h:$(GLSRC)std.h
+$(GLSRC)gdevmplt.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevmplt.h:$(GLGEN)arch.h
+$(GLSRC)gdevmplt.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxband.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevppla.h:$(GLSRC)gstext.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevppla.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevppla.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevppla.h:$(GLSRC)gscms.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevppla.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevppla.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevppla.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxclio.h
+$(GLSRC)gdevppla.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevppla.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevppla.h:$(GLSRC)gp.h
+$(GLSRC)gdevppla.h:$(GLSRC)memento.h
+$(GLSRC)gdevppla.h:$(GLSRC)memory_.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevppla.h:$(GLSRC)srdline.h
+$(GLSRC)gdevppla.h:$(GLSRC)scommon.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevppla.h:$(GLSRC)stat_.h
+$(GLSRC)gdevppla.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevppla.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevppla.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevppla.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevppla.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevppla.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevppla.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevppla.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevppla.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevppla.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevppla.h:$(GLSRC)std.h
+$(GLSRC)gdevppla.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevppla.h:$(GLGEN)arch.h
+$(GLSRC)gdevppla.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsiparm3.h:$(GLSRC)scommon.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gsstype.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsiparm3.h:$(GLSRC)stdio_.h
+$(GLSRC)gsiparm3.h:$(GLSRC)stdint_.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gstypes.h
+$(GLSRC)gsiparm3.h:$(GLSRC)std.h
+$(GLSRC)gsiparm3.h:$(GLSRC)stdpre.h
+$(GLSRC)gsiparm3.h:$(GLGEN)arch.h
+$(GLSRC)gsiparm3.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsiparm4.h:$(GLSRC)scommon.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gsstype.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsiparm4.h:$(GLSRC)stdio_.h
+$(GLSRC)gsiparm4.h:$(GLSRC)stdint_.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gstypes.h
+$(GLSRC)gsiparm4.h:$(GLSRC)std.h
+$(GLSRC)gsiparm4.h:$(GLSRC)stdpre.h
+$(GLSRC)gsiparm4.h:$(GLGEN)arch.h
+$(GLSRC)gsiparm4.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gximage3.h:$(GLSRC)gsiparm3.h
+$(GLSRC)gximage3.h:$(GLSRC)gxiparam.h
+$(GLSRC)gximage3.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gximage3.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximage3.h:$(GLSRC)gxtext.h
+$(GLSRC)gximage3.h:$(GLSRC)gstext.h
+$(GLSRC)gximage3.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gximage3.h:$(GLSRC)gstparam.h
+$(GLSRC)gximage3.h:$(GLSRC)gxfmap.h
+$(GLSRC)gximage3.h:$(GLSRC)gsfunc.h
+$(GLSRC)gximage3.h:$(GLSRC)gxcspace.h
+$(GLSRC)gximage3.h:$(GLSRC)gxrplane.h
+$(GLSRC)gximage3.h:$(GLSRC)gscsel.h
+$(GLSRC)gximage3.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximage3.h:$(GLSRC)gsfont.h
+$(GLSRC)gximage3.h:$(GLSRC)gsimage.h
+$(GLSRC)gximage3.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gximage3.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gximage3.h:$(GLSRC)gxbcache.h
+$(GLSRC)gximage3.h:$(GLSRC)gsropt.h
+$(GLSRC)gximage3.h:$(GLSRC)gxdda.h
+$(GLSRC)gximage3.h:$(GLSRC)gxpath.h
+$(GLSRC)gximage3.h:$(GLSRC)gxfrac.h
+$(GLSRC)gximage3.h:$(GLSRC)gxtmap.h
+$(GLSRC)gximage3.h:$(GLSRC)gxftype.h
+$(GLSRC)gximage3.h:$(GLSRC)gscms.h
+$(GLSRC)gximage3.h:$(GLSRC)gsrect.h
+$(GLSRC)gximage3.h:$(GLSRC)gslparam.h
+$(GLSRC)gximage3.h:$(GLSRC)gsdevice.h
+$(GLSRC)gximage3.h:$(GLSRC)gscpm.h
+$(GLSRC)gximage3.h:$(GLSRC)gscspace.h
+$(GLSRC)gximage3.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximage3.h:$(GLSRC)gsxfont.h
+$(GLSRC)gximage3.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gximage3.h:$(GLSRC)gsiparam.h
+$(GLSRC)gximage3.h:$(GLSRC)gxfixed.h
+$(GLSRC)gximage3.h:$(GLSRC)gscompt.h
+$(GLSRC)gximage3.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximage3.h:$(GLSRC)gspenum.h
+$(GLSRC)gximage3.h:$(GLSRC)gxhttile.h
+$(GLSRC)gximage3.h:$(GLSRC)gsparam.h
+$(GLSRC)gximage3.h:$(GLSRC)gsrefct.h
+$(GLSRC)gximage3.h:$(GLSRC)gp.h
+$(GLSRC)gximage3.h:$(GLSRC)memento.h
+$(GLSRC)gximage3.h:$(GLSRC)memory_.h
+$(GLSRC)gximage3.h:$(GLSRC)gsuid.h
+$(GLSRC)gximage3.h:$(GLSRC)gsstruct.h
+$(GLSRC)gximage3.h:$(GLSRC)gxsync.h
+$(GLSRC)gximage3.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gximage3.h:$(GLSRC)srdline.h
+$(GLSRC)gximage3.h:$(GLSRC)scommon.h
+$(GLSRC)gximage3.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gximage3.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximage3.h:$(GLSRC)gxarith.h
+$(GLSRC)gximage3.h:$(GLSRC)stat_.h
+$(GLSRC)gximage3.h:$(GLSRC)gpsync.h
+$(GLSRC)gximage3.h:$(GLSRC)gsstype.h
+$(GLSRC)gximage3.h:$(GLSRC)gsmemory.h
+$(GLSRC)gximage3.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gximage3.h:$(GLSRC)gscdefs.h
+$(GLSRC)gximage3.h:$(GLSRC)gslibctx.h
+$(GLSRC)gximage3.h:$(GLSRC)gxcindex.h
+$(GLSRC)gximage3.h:$(GLSRC)stdio_.h
+$(GLSRC)gximage3.h:$(GLSRC)gsccode.h
+$(GLSRC)gximage3.h:$(GLSRC)stdint_.h
+$(GLSRC)gximage3.h:$(GLSRC)gssprintf.h
+$(GLSRC)gximage3.h:$(GLSRC)gstypes.h
+$(GLSRC)gximage3.h:$(GLSRC)std.h
+$(GLSRC)gximage3.h:$(GLSRC)stdpre.h
+$(GLSRC)gximage3.h:$(GLGEN)arch.h
+$(GLSRC)gximage3.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxdht.h
+$(GLSRC)gxcldev.h:$(GLSRC)srlx.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxht.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxhttype.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxclist.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxgstate.h
+$(GLSRC)gxcldev.h:$(GLSRC)gstrans.h
+$(GLSRC)gxcldev.h:$(GLSRC)gdevp14.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxline.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsht1.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxcldev.h:$(GLSRC)math_.h
+$(GLSRC)gxcldev.h:$(GLSRC)scfx.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcolor2.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxcldev.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxband.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxblend.h
+$(GLSRC)gxcldev.h:$(GLSRC)shc.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscolor2.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxdevice.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcpath.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsht.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsequivc.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscindex.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsptype1.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscie.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxtext.h
+$(GLSRC)gxcldev.h:$(GLSRC)gstext.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxstate.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxcldev.h:$(GLSRC)gstparam.h
+$(GLSRC)gxcldev.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxctable.h
+$(GLSRC)gxcldev.h:$(GLSRC)strimpl.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscsel.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsfont.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsimage.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsropt.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxdda.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxpath.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxftype.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscms.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsrect.h
+$(GLSRC)gxcldev.h:$(GLSRC)gslparam.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscpm.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscspace.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsio.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxclio.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscompt.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxcldev.h:$(GLSRC)gspenum.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsparam.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxcldev.h:$(GLSRC)gp.h
+$(GLSRC)gxcldev.h:$(GLSRC)memento.h
+$(GLSRC)gxcldev.h:$(GLSRC)memory_.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsuid.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxsync.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxcldev.h:$(GLSRC)vmsmath.h
+$(GLSRC)gxcldev.h:$(GLSRC)srdline.h
+$(GLSRC)gxcldev.h:$(GLSRC)scommon.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsfname.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxarith.h
+$(GLSRC)gxcldev.h:$(GLSRC)stat_.h
+$(GLSRC)gxcldev.h:$(GLSRC)gpsync.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxcldev.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxcldev.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxcldev.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxcldev.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxcldev.h:$(GLSRC)stdio_.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsccode.h
+$(GLSRC)gxcldev.h:$(GLSRC)stdint_.h
+$(GLSRC)gxcldev.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxcldev.h:$(GLSRC)gsbittab.h
+$(GLSRC)gxcldev.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcldev.h:$(GLSRC)std.h
+$(GLSRC)gxcldev.h:$(GLSRC)stdpre.h
+$(GLSRC)gxcldev.h:$(GLGEN)arch.h
+$(GLSRC)gxcldev.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxclist.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxgstate.h
+$(GLSRC)gxclpage.h:$(GLSRC)gstrans.h
+$(GLSRC)gxclpage.h:$(GLSRC)gdevp14.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxline.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsht1.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxclpage.h:$(GLSRC)math_.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcolor2.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclpage.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxband.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxblend.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscolor2.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxdevice.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcpath.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsht.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsequivc.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscindex.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsptype1.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscie.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxtext.h
+$(GLSRC)gxclpage.h:$(GLSRC)gstext.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxstate.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxclpage.h:$(GLSRC)gstparam.h
+$(GLSRC)gxclpage.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxctable.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsfont.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxftype.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscms.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclpage.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsio.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxclio.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclpage.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclpage.h:$(GLSRC)gp.h
+$(GLSRC)gxclpage.h:$(GLSRC)memento.h
+$(GLSRC)gxclpage.h:$(GLSRC)memory_.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclpage.h:$(GLSRC)vmsmath.h
+$(GLSRC)gxclpage.h:$(GLSRC)srdline.h
+$(GLSRC)gxclpage.h:$(GLSRC)scommon.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsfname.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxarith.h
+$(GLSRC)gxclpage.h:$(GLSRC)stat_.h
+$(GLSRC)gxclpage.h:$(GLSRC)gpsync.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxclpage.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxclpage.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclpage.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxclpage.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxclpage.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclpage.h:$(GLSRC)gsccode.h
+$(GLSRC)gxclpage.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclpage.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxclpage.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclpage.h:$(GLSRC)std.h
+$(GLSRC)gxclpage.h:$(GLSRC)stdpre.h
+$(GLSRC)gxclpage.h:$(GLGEN)arch.h
+$(GLSRC)gxclpage.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcldev.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxdht.h
+$(GLSRC)gxclpath.h:$(GLSRC)srlx.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxht.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxhttype.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxclist.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxgstate.h
+$(GLSRC)gxclpath.h:$(GLSRC)gstrans.h
+$(GLSRC)gxclpath.h:$(GLSRC)gdevp14.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxline.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsht1.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcomp.h
+$(GLSRC)gxclpath.h:$(GLSRC)math_.h
+$(GLSRC)gxclpath.h:$(GLSRC)scfx.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcolor2.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gxclpath.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxdevbuf.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxband.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxblend.h
+$(GLSRC)gxclpath.h:$(GLSRC)shc.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscolor2.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxdevice.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcpath.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsht.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsequivc.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxpcache.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscindex.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsptype1.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscie.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxtext.h
+$(GLSRC)gxclpath.h:$(GLSRC)gstext.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxstate.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxclpath.h:$(GLSRC)gstparam.h
+$(GLSRC)gxclpath.h:$(GLSRC)gspcolor.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxctable.h
+$(GLSRC)gxclpath.h:$(GLSRC)strimpl.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscsel.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsfont.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsimage.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsropt.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxdda.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxpath.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxiclass.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxftype.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscms.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsrect.h
+$(GLSRC)gxclpath.h:$(GLSRC)gslparam.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscpm.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscspace.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxstdio.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsio.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxclio.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscompt.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxclpath.h:$(GLSRC)gspenum.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsparam.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxclpath.h:$(GLSRC)gp.h
+$(GLSRC)gxclpath.h:$(GLSRC)memento.h
+$(GLSRC)gxclpath.h:$(GLSRC)memory_.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsuid.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxsync.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxclpath.h:$(GLSRC)vmsmath.h
+$(GLSRC)gxclpath.h:$(GLSRC)srdline.h
+$(GLSRC)gxclpath.h:$(GLSRC)scommon.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsfname.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxarith.h
+$(GLSRC)gxclpath.h:$(GLSRC)stat_.h
+$(GLSRC)gxclpath.h:$(GLSRC)gpsync.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxclpath.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxclpath.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclpath.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxclpath.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxclpath.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsccode.h
+$(GLSRC)gxclpath.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclpath.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxclpath.h:$(GLSRC)gsbittab.h
+$(GLSRC)gxclpath.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclpath.h:$(GLSRC)std.h
+$(GLSRC)gxclpath.h:$(GLSRC)stdpre.h
+$(GLSRC)gxclpath.h:$(GLGEN)arch.h
+$(GLSRC)gxclpath.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxclmem.h:$(GLSRC)strimpl.h
+$(GLSRC)gxclmem.h:$(GLSRC)gxclio.h
+$(GLSRC)gxclmem.h:$(GLSRC)gp.h
+$(GLSRC)gxclmem.h:$(GLSRC)memory_.h
+$(GLSRC)gxclmem.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxclmem.h:$(GLSRC)srdline.h
+$(GLSRC)gxclmem.h:$(GLSRC)scommon.h
+$(GLSRC)gxclmem.h:$(GLSRC)stat_.h
+$(GLSRC)gxclmem.h:$(GLSRC)gsstype.h
+$(GLSRC)gxclmem.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxclmem.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxclmem.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxclmem.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxclmem.h:$(GLSRC)stdio_.h
+$(GLSRC)gxclmem.h:$(GLSRC)stdint_.h
+$(GLSRC)gxclmem.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxclmem.h:$(GLSRC)gstypes.h
+$(GLSRC)gxclmem.h:$(GLSRC)std.h
+$(GLSRC)gxclmem.h:$(GLSRC)stdpre.h
+$(GLSRC)gxclmem.h:$(GLGEN)arch.h
+$(GLSRC)gxclmem.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxgstate.h
+$(GLSRC)gdevvec.h:$(GLSRC)gstrans.h
+$(GLSRC)gdevvec.h:$(GLSRC)gdevp14.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxline.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsht1.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcomp.h
+$(GLSRC)gdevvec.h:$(GLSRC)math_.h
+$(GLSRC)gdevvec.h:$(GLSRC)gdevbbox.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcolor2.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gdevvec.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxclipsr.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxblend.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscolor2.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxdevice.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcpath.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsht.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxiparam.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsequivc.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxpcache.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscindex.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsptype1.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscie.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevvec.h:$(GLSRC)gstext.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxstate.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevvec.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevvec.h:$(GLSRC)gspcolor.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevvec.h:$(GLSRC)stream.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxhldevc.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxctable.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxiodev.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxiclass.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscms.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevvec.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxbitfmt.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsio.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevvec.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevvec.h:$(GLSRC)gp.h
+$(GLSRC)gdevvec.h:$(GLSRC)memento.h
+$(GLSRC)gdevvec.h:$(GLSRC)memory_.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevvec.h:$(GLSRC)vmsmath.h
+$(GLSRC)gdevvec.h:$(GLSRC)srdline.h
+$(GLSRC)gdevvec.h:$(GLSRC)scommon.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsfname.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevvec.h:$(GLSRC)stat_.h
+$(GLSRC)gdevvec.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevvec.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevvec.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevvec.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevvec.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevvec.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevvec.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevvec.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevvec.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevvec.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevvec.h:$(GLSRC)std.h
+$(GLSRC)gdevvec.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevvec.h:$(GLGEN)arch.h
+$(GLSRC)gdevvec.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gshtx.h:$(GLSRC)gsht1.h
+$(GLSRC)gshtx.h:$(GLSRC)gsht.h
+$(GLSRC)gshtx.h:$(GLSRC)gxtmap.h
+$(GLSRC)gshtx.h:$(GLSRC)gscspace.h
+$(GLSRC)gshtx.h:$(GLSRC)gsgstate.h
+$(GLSRC)gshtx.h:$(GLSRC)gsiparam.h
+$(GLSRC)gshtx.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gshtx.h:$(GLSRC)gsrefct.h
+$(GLSRC)gshtx.h:$(GLSRC)memento.h
+$(GLSRC)gshtx.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gshtx.h:$(GLSRC)scommon.h
+$(GLSRC)gshtx.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gshtx.h:$(GLSRC)gsccolor.h
+$(GLSRC)gshtx.h:$(GLSRC)gsstype.h
+$(GLSRC)gshtx.h:$(GLSRC)gsmemory.h
+$(GLSRC)gshtx.h:$(GLSRC)gslibctx.h
+$(GLSRC)gshtx.h:$(GLSRC)stdio_.h
+$(GLSRC)gshtx.h:$(GLSRC)stdint_.h
+$(GLSRC)gshtx.h:$(GLSRC)gssprintf.h
+$(GLSRC)gshtx.h:$(GLSRC)gstypes.h
+$(GLSRC)gshtx.h:$(GLSRC)std.h
+$(GLSRC)gshtx.h:$(GLSRC)stdpre.h
+$(GLSRC)gshtx.h:$(GLGEN)arch.h
+$(GLSRC)gshtx.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxttf.h:$(GLSRC)stdpre.h
+$(GLSRC)ttfsfnt.h:$(GLSRC)tttypes.h
+$(GLSRC)ttfsfnt.h:$(GLSRC)ttconfig.h
+$(GLSRC)ttfsfnt.h:$(GLSRC)tttype.h
+$(GLSRC)ttfsfnt.h:$(GLSRC)ttconf.h
+$(GLSRC)ttfsfnt.h:$(GLSRC)stdint_.h
+$(GLSRC)ttfsfnt.h:$(GLSRC)std.h
+$(GLSRC)ttfsfnt.h:$(GLSRC)stdpre.h
+$(GLSRC)ttfsfnt.h:$(GLGEN)arch.h
+$(GLSRC)ttfinp.h:$(GLSRC)ttfoutl.h
+$(GLSRC)ttfinp.h:$(GLSRC)malloc_.h
+$(GLSRC)ttfinp.h:$(GLSRC)bobbin.h
+$(GLSRC)ttfinp.h:$(GLSRC)gxfcache.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsfont.h
+$(GLSRC)ttfinp.h:$(GLSRC)gxbcache.h
+$(GLSRC)ttfinp.h:$(GLSRC)gxftype.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsxfont.h
+$(GLSRC)ttfinp.h:$(GLSRC)gxfixed.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsmatrix.h
+$(GLSRC)ttfinp.h:$(GLSRC)memento.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsuid.h
+$(GLSRC)ttfinp.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttfinp.h:$(GLSRC)scommon.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsbitmap.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsstype.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsmemory.h
+$(GLSRC)ttfinp.h:$(GLSRC)gslibctx.h
+$(GLSRC)ttfinp.h:$(GLSRC)stdio_.h
+$(GLSRC)ttfinp.h:$(GLSRC)gsccode.h
+$(GLSRC)ttfinp.h:$(GLSRC)stdint_.h
+$(GLSRC)ttfinp.h:$(GLSRC)gssprintf.h
+$(GLSRC)ttfinp.h:$(GLSRC)gstypes.h
+$(GLSRC)ttfinp.h:$(GLSRC)std.h
+$(GLSRC)ttfinp.h:$(GLSRC)stdpre.h
+$(GLSRC)ttfinp.h:$(GLGEN)arch.h
+$(GLSRC)ttfinp.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)ttfmemd.h:$(GLSRC)gsstype.h
+$(GLSRC)ttfmemd.h:$(GLSRC)gsmemory.h
+$(GLSRC)ttfmemd.h:$(GLSRC)gslibctx.h
+$(GLSRC)ttfmemd.h:$(GLSRC)stdio_.h
+$(GLSRC)ttfmemd.h:$(GLSRC)gssprintf.h
+$(GLSRC)ttfmemd.h:$(GLSRC)gstypes.h
+$(GLSRC)ttfmemd.h:$(GLSRC)std.h
+$(GLSRC)ttfmemd.h:$(GLSRC)stdpre.h
+$(GLSRC)ttfmemd.h:$(GLGEN)arch.h
+$(GLSRC)ttfmemd.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)tttype.h:$(GLSRC)std.h
+$(GLSRC)tttype.h:$(GLSRC)stdpre.h
+$(GLSRC)tttype.h:$(GLGEN)arch.h
+$(GLSRC)ttconfig.h:$(GLSRC)ttconf.h
+$(GLSRC)tttypes.h:$(GLSRC)ttconfig.h
+$(GLSRC)tttypes.h:$(GLSRC)tttype.h
+$(GLSRC)tttypes.h:$(GLSRC)ttconf.h
+$(GLSRC)tttypes.h:$(GLSRC)std.h
+$(GLSRC)tttypes.h:$(GLSRC)stdpre.h
+$(GLSRC)tttypes.h:$(GLGEN)arch.h
+$(GLSRC)ttmisc.h:$(GLSRC)string_.h
+$(GLSRC)ttmisc.h:$(GLSRC)gsstrtok.h
+$(GLSRC)ttmisc.h:$(GLSRC)math_.h
+$(GLSRC)ttmisc.h:$(GLSRC)tttypes.h
+$(GLSRC)ttmisc.h:$(GLSRC)ttconfig.h
+$(GLSRC)ttmisc.h:$(GLSRC)tttype.h
+$(GLSRC)ttmisc.h:$(GLSRC)gx.h
+$(GLSRC)ttmisc.h:$(GLSRC)ttconf.h
+$(GLSRC)ttmisc.h:$(GLSRC)gdebug.h
+$(GLSRC)ttmisc.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttmisc.h:$(GLSRC)gsio.h
+$(GLSRC)ttmisc.h:$(GLSRC)gsstrl.h
+$(GLSRC)ttmisc.h:$(GLSRC)gdbflags.h
+$(GLSRC)ttmisc.h:$(GLSRC)gserrors.h
+$(GLSRC)ttmisc.h:$(GLSRC)vmsmath.h
+$(GLSRC)ttmisc.h:$(GLSRC)gsmemory.h
+$(GLSRC)ttmisc.h:$(GLSRC)gslibctx.h
+$(GLSRC)ttmisc.h:$(GLSRC)stdio_.h
+$(GLSRC)ttmisc.h:$(GLSRC)gssprintf.h
+$(GLSRC)ttmisc.h:$(GLSRC)gstypes.h
+$(GLSRC)ttmisc.h:$(GLSRC)std.h
+$(GLSRC)ttmisc.h:$(GLSRC)stdpre.h
+$(GLSRC)ttmisc.h:$(GLGEN)arch.h
+$(GLSRC)ttmisc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)tttables.h:$(GLSRC)tttypes.h
+$(GLSRC)tttables.h:$(GLSRC)ttconfig.h
+$(GLSRC)tttables.h:$(GLSRC)tttype.h
+$(GLSRC)tttables.h:$(GLSRC)ttconf.h
+$(GLSRC)tttables.h:$(GLSRC)std.h
+$(GLSRC)tttables.h:$(GLSRC)stdpre.h
+$(GLSRC)tttables.h:$(GLGEN)arch.h
+$(GLSRC)ttobjs.h:$(GLSRC)ttfoutl.h
+$(GLSRC)ttobjs.h:$(GLSRC)malloc_.h
+$(GLSRC)ttobjs.h:$(GLSRC)bobbin.h
+$(GLSRC)ttobjs.h:$(GLSRC)setjmp_.h
+$(GLSRC)ttobjs.h:$(GLSRC)ttcommon.h
+$(GLSRC)ttobjs.h:$(GLSRC)tttables.h
+$(GLSRC)ttobjs.h:$(GLSRC)tttypes.h
+$(GLSRC)ttobjs.h:$(GLSRC)ttconfig.h
+$(GLSRC)ttobjs.h:$(GLSRC)tttype.h
+$(GLSRC)ttobjs.h:$(GLSRC)ttconf.h
+$(GLSRC)ttobjs.h:$(GLSRC)gxfcache.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsfont.h
+$(GLSRC)ttobjs.h:$(GLSRC)gxbcache.h
+$(GLSRC)ttobjs.h:$(GLSRC)gxftype.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsxfont.h
+$(GLSRC)ttobjs.h:$(GLSRC)gxfixed.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsmatrix.h
+$(GLSRC)ttobjs.h:$(GLSRC)memento.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsuid.h
+$(GLSRC)ttobjs.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttobjs.h:$(GLSRC)scommon.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsbitmap.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsstype.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsmemory.h
+$(GLSRC)ttobjs.h:$(GLSRC)gslibctx.h
+$(GLSRC)ttobjs.h:$(GLSRC)stdio_.h
+$(GLSRC)ttobjs.h:$(GLSRC)gsccode.h
+$(GLSRC)ttobjs.h:$(GLSRC)stdint_.h
+$(GLSRC)ttobjs.h:$(GLSRC)gssprintf.h
+$(GLSRC)ttobjs.h:$(GLSRC)gstypes.h
+$(GLSRC)ttobjs.h:$(GLSRC)std.h
+$(GLSRC)ttobjs.h:$(GLSRC)stdpre.h
+$(GLSRC)ttobjs.h:$(GLGEN)arch.h
+$(GLSRC)ttobjs.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)ttcalc.h:$(GLSRC)ttcommon.h
+$(GLSRC)ttcalc.h:$(GLSRC)tttypes.h
+$(GLSRC)ttcalc.h:$(GLSRC)ttconfig.h
+$(GLSRC)ttcalc.h:$(GLSRC)tttype.h
+$(GLSRC)ttcalc.h:$(GLSRC)ttconf.h
+$(GLSRC)ttcalc.h:$(GLSRC)std.h
+$(GLSRC)ttcalc.h:$(GLSRC)stdpre.h
+$(GLSRC)ttcalc.h:$(GLGEN)arch.h
+$(GLSRC)ttinterp.h:$(GLSRC)ttobjs.h
+$(GLSRC)ttinterp.h:$(GLSRC)ttfoutl.h
+$(GLSRC)ttinterp.h:$(GLSRC)malloc_.h
+$(GLSRC)ttinterp.h:$(GLSRC)bobbin.h
+$(GLSRC)ttinterp.h:$(GLSRC)setjmp_.h
+$(GLSRC)ttinterp.h:$(GLSRC)ttcommon.h
+$(GLSRC)ttinterp.h:$(GLSRC)tttables.h
+$(GLSRC)ttinterp.h:$(GLSRC)tttypes.h
+$(GLSRC)ttinterp.h:$(GLSRC)ttconfig.h
+$(GLSRC)ttinterp.h:$(GLSRC)tttype.h
+$(GLSRC)ttinterp.h:$(GLSRC)ttconf.h
+$(GLSRC)ttinterp.h:$(GLSRC)gxfcache.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsfont.h
+$(GLSRC)ttinterp.h:$(GLSRC)gxbcache.h
+$(GLSRC)ttinterp.h:$(GLSRC)gxftype.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsxfont.h
+$(GLSRC)ttinterp.h:$(GLSRC)gxfixed.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsmatrix.h
+$(GLSRC)ttinterp.h:$(GLSRC)memento.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsuid.h
+$(GLSRC)ttinterp.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttinterp.h:$(GLSRC)scommon.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsbitmap.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsstype.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsmemory.h
+$(GLSRC)ttinterp.h:$(GLSRC)gslibctx.h
+$(GLSRC)ttinterp.h:$(GLSRC)stdio_.h
+$(GLSRC)ttinterp.h:$(GLSRC)gsccode.h
+$(GLSRC)ttinterp.h:$(GLSRC)stdint_.h
+$(GLSRC)ttinterp.h:$(GLSRC)gssprintf.h
+$(GLSRC)ttinterp.h:$(GLSRC)gstypes.h
+$(GLSRC)ttinterp.h:$(GLSRC)std.h
+$(GLSRC)ttinterp.h:$(GLSRC)stdpre.h
+$(GLSRC)ttinterp.h:$(GLGEN)arch.h
+$(GLSRC)ttinterp.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)ttload.h:$(GLSRC)ttobjs.h
+$(GLSRC)ttload.h:$(GLSRC)ttfoutl.h
+$(GLSRC)ttload.h:$(GLSRC)malloc_.h
+$(GLSRC)ttload.h:$(GLSRC)bobbin.h
+$(GLSRC)ttload.h:$(GLSRC)setjmp_.h
+$(GLSRC)ttload.h:$(GLSRC)ttcommon.h
+$(GLSRC)ttload.h:$(GLSRC)tttables.h
+$(GLSRC)ttload.h:$(GLSRC)tttypes.h
+$(GLSRC)ttload.h:$(GLSRC)ttconfig.h
+$(GLSRC)ttload.h:$(GLSRC)tttype.h
+$(GLSRC)ttload.h:$(GLSRC)ttconf.h
+$(GLSRC)ttload.h:$(GLSRC)gxfcache.h
+$(GLSRC)ttload.h:$(GLSRC)gsfont.h
+$(GLSRC)ttload.h:$(GLSRC)gxbcache.h
+$(GLSRC)ttload.h:$(GLSRC)gxftype.h
+$(GLSRC)ttload.h:$(GLSRC)gsgstate.h
+$(GLSRC)ttload.h:$(GLSRC)gsxfont.h
+$(GLSRC)ttload.h:$(GLSRC)gxfixed.h
+$(GLSRC)ttload.h:$(GLSRC)gsmatrix.h
+$(GLSRC)ttload.h:$(GLSRC)memento.h
+$(GLSRC)ttload.h:$(GLSRC)gsuid.h
+$(GLSRC)ttload.h:$(GLSRC)gxbitmap.h
+$(GLSRC)ttload.h:$(GLSRC)scommon.h
+$(GLSRC)ttload.h:$(GLSRC)gsbitmap.h
+$(GLSRC)ttload.h:$(GLSRC)gsstype.h
+$(GLSRC)ttload.h:$(GLSRC)gsmemory.h
+$(GLSRC)ttload.h:$(GLSRC)gslibctx.h
+$(GLSRC)ttload.h:$(GLSRC)stdio_.h
+$(GLSRC)ttload.h:$(GLSRC)gsccode.h
+$(GLSRC)ttload.h:$(GLSRC)stdint_.h
+$(GLSRC)ttload.h:$(GLSRC)gssprintf.h
+$(GLSRC)ttload.h:$(GLSRC)gstypes.h
+$(GLSRC)ttload.h:$(GLSRC)std.h
+$(GLSRC)ttload.h:$(GLSRC)stdpre.h
+$(GLSRC)ttload.h:$(GLGEN)arch.h
+$(GLSRC)ttload.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxfont1.h
+$(GLSRC)gxhintn.h:$(GLSRC)gstype1.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxfont42.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxfont.h
+$(GLSRC)gxhintn.h:$(GLSRC)gspath.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsgdata.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxfapi.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsfcmap.h
+$(GLSRC)gxhintn.h:$(GLSRC)gstext.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsfont.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxpath.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxftype.h
+$(GLSRC)gxhintn.h:$(GLSRC)gscms.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsrect.h
+$(GLSRC)gxhintn.h:$(GLSRC)gslparam.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxhintn.h:$(GLSRC)gscpm.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxhintn.h:$(GLSRC)gscspace.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsnotify.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxhintn.h:$(GLSRC)gspenum.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsparam.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxhintn.h:$(GLSRC)memento.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsuid.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxsync.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxhintn.h:$(GLSRC)scommon.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxarith.h
+$(GLSRC)gxhintn.h:$(GLSRC)gpsync.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsstype.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxhintn.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxhintn.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxhintn.h:$(GLSRC)stdio_.h
+$(GLSRC)gxhintn.h:$(GLSRC)gsccode.h
+$(GLSRC)gxhintn.h:$(GLSRC)stdint_.h
+$(GLSRC)gxhintn.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxhintn.h:$(GLSRC)gstypes.h
+$(GLSRC)gxhintn.h:$(GLSRC)std.h
+$(GLSRC)gxhintn.h:$(GLSRC)stdpre.h
+$(GLSRC)gxhintn.h:$(GLGEN)arch.h
+$(GLSRC)gxhintn.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxcid.h:$(GLSRC)gsstype.h
+$(GLSRC)gxcid.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxcid.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxcid.h:$(GLSRC)stdio_.h
+$(GLSRC)gxcid.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxcid.h:$(GLSRC)gstypes.h
+$(GLSRC)gxcid.h:$(GLSRC)std.h
+$(GLSRC)gxcid.h:$(GLSRC)stdpre.h
+$(GLSRC)gxcid.h:$(GLGEN)arch.h
+$(GLSRC)gxcid.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfcid.h:$(GLSRC)gstype1.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxfont42.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxfont.h
+$(GLSRC)gxfcid.h:$(GLSRC)gspath.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsgdata.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxfapi.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsfcmap.h
+$(GLSRC)gxfcid.h:$(GLSRC)gstext.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxpath.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxftype.h
+$(GLSRC)gxfcid.h:$(GLSRC)gscms.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfcid.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfcid.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfcid.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsnotify.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxcid.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfcid.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsparam.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfcid.h:$(GLSRC)memento.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfcid.h:$(GLSRC)scommon.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfcid.h:$(GLSRC)gpsync.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxfcid.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfcid.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxfcid.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfcid.h:$(GLSRC)gsccode.h
+$(GLSRC)gxfcid.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfcid.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfcid.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfcid.h:$(GLSRC)std.h
+$(GLSRC)gxfcid.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfcid.h:$(GLGEN)arch.h
+$(GLSRC)gxfcid.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gsfcmap.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gxcid.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfcmap.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gsccode.h
+$(GLSRC)gxfcmap.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfcmap.h:$(GLSRC)std.h
+$(GLSRC)gxfcmap.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfcmap.h:$(GLGEN)arch.h
+$(GLSRC)gxfcmap.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gxfcmap.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gsfcmap.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gxcid.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gsccode.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)std.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfcmap1.h:$(GLGEN)arch.h
+$(GLSRC)gxfcmap1.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxfont0.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxfcid.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gstype1.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxfont42.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxfont.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gspath.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsgdata.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxfapi.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsfcmap.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gstext.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxpath.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxftype.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gscms.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsnotify.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxcid.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsparam.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont0c.h:$(GLSRC)memento.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont0c.h:$(GLSRC)scommon.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gpsync.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxfont0c.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gsccode.h
+$(GLSRC)gxfont0c.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfont0c.h:$(GLSRC)std.h
+$(GLSRC)gxfont0c.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfont0c.h:$(GLGEN)arch.h
+$(GLSRC)gxfont0c.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscrypt1.h:$(GLSRC)stdpre.h
+$(GLSRC)gstype1.h:$(GLSRC)gspath.h
+$(GLSRC)gstype1.h:$(GLSRC)gsgdata.h
+$(GLSRC)gstype1.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gstype1.h:$(GLSRC)gsfont.h
+$(GLSRC)gstype1.h:$(GLSRC)gsgcache.h
+$(GLSRC)gstype1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstype1.h:$(GLSRC)gxfixed.h
+$(GLSRC)gstype1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstype1.h:$(GLSRC)gspenum.h
+$(GLSRC)gstype1.h:$(GLSRC)scommon.h
+$(GLSRC)gstype1.h:$(GLSRC)gsstype.h
+$(GLSRC)gstype1.h:$(GLSRC)gsmemory.h
+$(GLSRC)gstype1.h:$(GLSRC)gslibctx.h
+$(GLSRC)gstype1.h:$(GLSRC)stdio_.h
+$(GLSRC)gstype1.h:$(GLSRC)stdint_.h
+$(GLSRC)gstype1.h:$(GLSRC)gssprintf.h
+$(GLSRC)gstype1.h:$(GLSRC)gstypes.h
+$(GLSRC)gstype1.h:$(GLSRC)std.h
+$(GLSRC)gstype1.h:$(GLSRC)stdpre.h
+$(GLSRC)gstype1.h:$(GLGEN)arch.h
+$(GLSRC)gstype1.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfont1.h:$(GLSRC)gstype1.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxfont.h
+$(GLSRC)gxfont1.h:$(GLSRC)gspath.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsgdata.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxfapi.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsfcmap.h
+$(GLSRC)gxfont1.h:$(GLSRC)gstext.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsfont.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxpath.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxftype.h
+$(GLSRC)gxfont1.h:$(GLSRC)gscms.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsrect.h
+$(GLSRC)gxfont1.h:$(GLSRC)gslparam.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxfont1.h:$(GLSRC)gscpm.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxfont1.h:$(GLSRC)gscspace.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsnotify.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxfont1.h:$(GLSRC)gspenum.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsparam.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxfont1.h:$(GLSRC)memento.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsuid.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxsync.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxfont1.h:$(GLSRC)scommon.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxarith.h
+$(GLSRC)gxfont1.h:$(GLSRC)gpsync.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxfont1.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfont1.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxfont1.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfont1.h:$(GLSRC)gsccode.h
+$(GLSRC)gxfont1.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfont1.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfont1.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfont1.h:$(GLSRC)std.h
+$(GLSRC)gxfont1.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfont1.h:$(GLGEN)arch.h
+$(GLSRC)gxfont1.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxhintn.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxfont1.h
+$(GLSRC)gxtype1.h:$(GLSRC)gzpath.h
+$(GLSRC)gxtype1.h:$(GLSRC)gstype1.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxfont42.h
+$(GLSRC)gxtype1.h:$(GLSRC)gscrypt1.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxfont.h
+$(GLSRC)gxtype1.h:$(GLSRC)gspath.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsgdata.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxfapi.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsfcmap.h
+$(GLSRC)gxtype1.h:$(GLSRC)gstext.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsfont.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxpath.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxftype.h
+$(GLSRC)gxtype1.h:$(GLSRC)gscms.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsrect.h
+$(GLSRC)gxtype1.h:$(GLSRC)gslparam.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxtype1.h:$(GLSRC)gscpm.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsgcache.h
+$(GLSRC)gxtype1.h:$(GLSRC)gscspace.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsnotify.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxtype1.h:$(GLSRC)gspenum.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsparam.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxtype1.h:$(GLSRC)memento.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsuid.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxsync.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxtype1.h:$(GLSRC)scommon.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxarith.h
+$(GLSRC)gxtype1.h:$(GLSRC)gpsync.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsstype.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxtype1.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxtype1.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxtype1.h:$(GLSRC)stdio_.h
+$(GLSRC)gxtype1.h:$(GLSRC)gsccode.h
+$(GLSRC)gxtype1.h:$(GLSRC)stdint_.h
+$(GLSRC)gxtype1.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxtype1.h:$(GLSRC)gstypes.h
+$(GLSRC)gxtype1.h:$(GLSRC)std.h
+$(GLSRC)gxtype1.h:$(GLSRC)stdpre.h
+$(GLSRC)gxtype1.h:$(GLGEN)arch.h
+$(GLSRC)gxtype1.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsdsrc.h:$(GLSRC)gsstruct.h
+$(GLSRC)gsdsrc.h:$(GLSRC)scommon.h
+$(GLSRC)gsdsrc.h:$(GLSRC)gsstype.h
+$(GLSRC)gsdsrc.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsdsrc.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsdsrc.h:$(GLSRC)stdio_.h
+$(GLSRC)gsdsrc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsdsrc.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsdsrc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsdsrc.h:$(GLSRC)std.h
+$(GLSRC)gsdsrc.h:$(GLSRC)stdpre.h
+$(GLSRC)gsdsrc.h:$(GLGEN)arch.h
+$(GLSRC)gsdsrc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsfunc.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gsfunc.h:$(GLSRC)gsparam.h
+$(GLSRC)gsfunc.h:$(GLSRC)memento.h
+$(GLSRC)gsfunc.h:$(GLSRC)gsstruct.h
+$(GLSRC)gsfunc.h:$(GLSRC)scommon.h
+$(GLSRC)gsfunc.h:$(GLSRC)gsstype.h
+$(GLSRC)gsfunc.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsfunc.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsfunc.h:$(GLSRC)stdio_.h
+$(GLSRC)gsfunc.h:$(GLSRC)stdint_.h
+$(GLSRC)gsfunc.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsfunc.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfunc.h:$(GLSRC)std.h
+$(GLSRC)gsfunc.h:$(GLSRC)stdpre.h
+$(GLSRC)gsfunc.h:$(GLGEN)arch.h
+$(GLSRC)gsfunc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsfunc0.h:$(GLSRC)gsfunc.h
+$(GLSRC)gsfunc0.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gsfunc0.h:$(GLSRC)gsparam.h
+$(GLSRC)gsfunc0.h:$(GLSRC)memento.h
+$(GLSRC)gsfunc0.h:$(GLSRC)gsstruct.h
+$(GLSRC)gsfunc0.h:$(GLSRC)scommon.h
+$(GLSRC)gsfunc0.h:$(GLSRC)gsstype.h
+$(GLSRC)gsfunc0.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsfunc0.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsfunc0.h:$(GLSRC)stdio_.h
+$(GLSRC)gsfunc0.h:$(GLSRC)stdint_.h
+$(GLSRC)gsfunc0.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsfunc0.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfunc0.h:$(GLSRC)std.h
+$(GLSRC)gsfunc0.h:$(GLSRC)stdpre.h
+$(GLSRC)gsfunc0.h:$(GLGEN)arch.h
+$(GLSRC)gsfunc0.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxfunc.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxfunc.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxfunc.h:$(GLSRC)gsparam.h
+$(GLSRC)gxfunc.h:$(GLSRC)memento.h
+$(GLSRC)gxfunc.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxfunc.h:$(GLSRC)scommon.h
+$(GLSRC)gxfunc.h:$(GLSRC)gsstype.h
+$(GLSRC)gxfunc.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxfunc.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxfunc.h:$(GLSRC)stdio_.h
+$(GLSRC)gxfunc.h:$(GLSRC)stdint_.h
+$(GLSRC)gxfunc.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxfunc.h:$(GLSRC)gstypes.h
+$(GLSRC)gxfunc.h:$(GLSRC)std.h
+$(GLSRC)gxfunc.h:$(GLSRC)stdpre.h
+$(GLSRC)gxfunc.h:$(GLGEN)arch.h
+$(GLSRC)gxfunc.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsfunc4.h:$(GLSRC)gsfunc.h
+$(GLSRC)gsfunc4.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gsfunc4.h:$(GLSRC)gsparam.h
+$(GLSRC)gsfunc4.h:$(GLSRC)memento.h
+$(GLSRC)gsfunc4.h:$(GLSRC)gsstruct.h
+$(GLSRC)gsfunc4.h:$(GLSRC)scommon.h
+$(GLSRC)gsfunc4.h:$(GLSRC)gsstype.h
+$(GLSRC)gsfunc4.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsfunc4.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsfunc4.h:$(GLSRC)stdio_.h
+$(GLSRC)gsfunc4.h:$(GLSRC)stdint_.h
+$(GLSRC)gsfunc4.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsfunc4.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfunc4.h:$(GLSRC)std.h
+$(GLSRC)gsfunc4.h:$(GLSRC)stdpre.h
+$(GLSRC)gsfunc4.h:$(GLGEN)arch.h
+$(GLSRC)gsfunc4.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscpixel.h:$(GLSRC)gscspace.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscpixel.h:$(GLSRC)memento.h
+$(GLSRC)gscpixel.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscpixel.h:$(GLSRC)scommon.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsstype.h
+$(GLSRC)gscpixel.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscpixel.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscpixel.h:$(GLSRC)stdio_.h
+$(GLSRC)gscpixel.h:$(GLSRC)stdint_.h
+$(GLSRC)gscpixel.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscpixel.h:$(GLSRC)gstypes.h
+$(GLSRC)gscpixel.h:$(GLSRC)std.h
+$(GLSRC)gscpixel.h:$(GLSRC)stdpre.h
+$(GLSRC)gscpixel.h:$(GLGEN)arch.h
+$(GLSRC)gscpixel.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscms.h:$(GLSRC)gsdevice.h
+$(GLSRC)gscms.h:$(GLSRC)gscspace.h
+$(GLSRC)gscms.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscms.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscms.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscms.h:$(GLSRC)gsparam.h
+$(GLSRC)gscms.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscms.h:$(GLSRC)memento.h
+$(GLSRC)gscms.h:$(GLSRC)gxsync.h
+$(GLSRC)gscms.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscms.h:$(GLSRC)scommon.h
+$(GLSRC)gscms.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscms.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscms.h:$(GLSRC)gpsync.h
+$(GLSRC)gscms.h:$(GLSRC)gsstype.h
+$(GLSRC)gscms.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscms.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscms.h:$(GLSRC)stdio_.h
+$(GLSRC)gscms.h:$(GLSRC)stdint_.h
+$(GLSRC)gscms.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscms.h:$(GLSRC)gstypes.h
+$(GLSRC)gscms.h:$(GLSRC)std.h
+$(GLSRC)gscms.h:$(GLSRC)stdpre.h
+$(GLSRC)gscms.h:$(GLGEN)arch.h
+$(GLSRC)gscms.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gscms.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gscspace.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsparam.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)memento.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gxsync.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)scommon.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gpsync.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsstype.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)stdio_.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)stdint_.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)std.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)stdpre.h
+$(GLSRC)gsicc_cms.h:$(GLGEN)arch.h
+$(GLSRC)gsicc_cms.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsicc_cms.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gscms.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gscspace.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsparam.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)memento.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gxsync.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)scommon.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gpsync.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsstype.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)stdio_.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)stdint_.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)std.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)stdpre.h
+$(GLSRC)gsicc_manage.h:$(GLGEN)arch.h
+$(GLSRC)gsicc_manage.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gscms.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gscspace.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsparam.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)memento.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gxsync.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)scommon.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gpsync.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsstype.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)stdio_.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)stdint_.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)std.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)stdpre.h
+$(GLSRC)gsicc_cache.h:$(GLGEN)arch.h
+$(GLSRC)gsicc_cache.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gscms.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gscspace.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsparam.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)memento.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gxsync.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)scommon.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gpsync.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsstype.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)stdio_.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)stdint_.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gstypes.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)std.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)stdpre.h
+$(GLSRC)gsicc_profilecache.h:$(GLGEN)arch.h
+$(GLSRC)gsicc_profilecache.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gstrap.h:$(GLSRC)gspath.h
+$(GLSRC)gstrap.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gstrap.h:$(GLSRC)gsgstate.h
+$(GLSRC)gstrap.h:$(GLSRC)gxfixed.h
+$(GLSRC)gstrap.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gstrap.h:$(GLSRC)gspenum.h
+$(GLSRC)gstrap.h:$(GLSRC)gsparam.h
+$(GLSRC)gstrap.h:$(GLSRC)scommon.h
+$(GLSRC)gstrap.h:$(GLSRC)gsstype.h
+$(GLSRC)gstrap.h:$(GLSRC)gsmemory.h
+$(GLSRC)gstrap.h:$(GLSRC)gslibctx.h
+$(GLSRC)gstrap.h:$(GLSRC)stdio_.h
+$(GLSRC)gstrap.h:$(GLSRC)stdint_.h
+$(GLSRC)gstrap.h:$(GLSRC)gssprintf.h
+$(GLSRC)gstrap.h:$(GLSRC)gstypes.h
+$(GLSRC)gstrap.h:$(GLSRC)std.h
+$(GLSRC)gstrap.h:$(GLSRC)stdpre.h
+$(GLSRC)gstrap.h:$(GLGEN)arch.h
+$(GLSRC)gstrap.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gsiparm3.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsipar3x.h:$(GLSRC)scommon.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gsstype.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsipar3x.h:$(GLSRC)stdio_.h
+$(GLSRC)gsipar3x.h:$(GLSRC)stdint_.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gstypes.h
+$(GLSRC)gsipar3x.h:$(GLSRC)std.h
+$(GLSRC)gsipar3x.h:$(GLSRC)stdpre.h
+$(GLSRC)gsipar3x.h:$(GLGEN)arch.h
+$(GLSRC)gsipar3x.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsipar3x.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsiparm3.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxiparam.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxcmap.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxtext.h
+$(GLSRC)gximag3x.h:$(GLSRC)gstext.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gximag3x.h:$(GLSRC)gstparam.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxfmap.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsfunc.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxcspace.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxrplane.h
+$(GLSRC)gximag3x.h:$(GLSRC)gscsel.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxfcache.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsfont.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsimage.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxbcache.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsropt.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxdda.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxpath.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxfrac.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxtmap.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxftype.h
+$(GLSRC)gximag3x.h:$(GLSRC)gscms.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsrect.h
+$(GLSRC)gximag3x.h:$(GLSRC)gslparam.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsdevice.h
+$(GLSRC)gximag3x.h:$(GLSRC)gscpm.h
+$(GLSRC)gximag3x.h:$(GLSRC)gscspace.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsgstate.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsxfont.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsiparam.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxfixed.h
+$(GLSRC)gximag3x.h:$(GLSRC)gscompt.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gximag3x.h:$(GLSRC)gspenum.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxhttile.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsparam.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsrefct.h
+$(GLSRC)gximag3x.h:$(GLSRC)gp.h
+$(GLSRC)gximag3x.h:$(GLSRC)memento.h
+$(GLSRC)gximag3x.h:$(GLSRC)memory_.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsuid.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsstruct.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxsync.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gximag3x.h:$(GLSRC)srdline.h
+$(GLSRC)gximag3x.h:$(GLSRC)scommon.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsccolor.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxarith.h
+$(GLSRC)gximag3x.h:$(GLSRC)stat_.h
+$(GLSRC)gximag3x.h:$(GLSRC)gpsync.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsstype.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsmemory.h
+$(GLSRC)gximag3x.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gximag3x.h:$(GLSRC)gscdefs.h
+$(GLSRC)gximag3x.h:$(GLSRC)gslibctx.h
+$(GLSRC)gximag3x.h:$(GLSRC)gxcindex.h
+$(GLSRC)gximag3x.h:$(GLSRC)stdio_.h
+$(GLSRC)gximag3x.h:$(GLSRC)gsccode.h
+$(GLSRC)gximag3x.h:$(GLSRC)stdint_.h
+$(GLSRC)gximag3x.h:$(GLSRC)gssprintf.h
+$(GLSRC)gximag3x.h:$(GLSRC)gstypes.h
+$(GLSRC)gximag3x.h:$(GLSRC)std.h
+$(GLSRC)gximag3x.h:$(GLSRC)stdpre.h
+$(GLSRC)gximag3x.h:$(GLGEN)arch.h
+$(GLSRC)gximag3x.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxblend.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxblend.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxblend.h:$(GLSRC)gxtext.h
+$(GLSRC)gxblend.h:$(GLSRC)gstext.h
+$(GLSRC)gxblend.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxblend.h:$(GLSRC)gstparam.h
+$(GLSRC)gxblend.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxblend.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxblend.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxblend.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxblend.h:$(GLSRC)gscsel.h
+$(GLSRC)gxblend.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxblend.h:$(GLSRC)gsfont.h
+$(GLSRC)gxblend.h:$(GLSRC)gsimage.h
+$(GLSRC)gxblend.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxblend.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxblend.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxblend.h:$(GLSRC)gsropt.h
+$(GLSRC)gxblend.h:$(GLSRC)gxdda.h
+$(GLSRC)gxblend.h:$(GLSRC)gxpath.h
+$(GLSRC)gxblend.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxblend.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxblend.h:$(GLSRC)gxftype.h
+$(GLSRC)gxblend.h:$(GLSRC)gscms.h
+$(GLSRC)gxblend.h:$(GLSRC)gsrect.h
+$(GLSRC)gxblend.h:$(GLSRC)gslparam.h
+$(GLSRC)gxblend.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxblend.h:$(GLSRC)gscpm.h
+$(GLSRC)gxblend.h:$(GLSRC)gscspace.h
+$(GLSRC)gxblend.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxblend.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxblend.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxblend.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxblend.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxblend.h:$(GLSRC)gscompt.h
+$(GLSRC)gxblend.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxblend.h:$(GLSRC)gspenum.h
+$(GLSRC)gxblend.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxblend.h:$(GLSRC)gsparam.h
+$(GLSRC)gxblend.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxblend.h:$(GLSRC)gp.h
+$(GLSRC)gxblend.h:$(GLSRC)memento.h
+$(GLSRC)gxblend.h:$(GLSRC)memory_.h
+$(GLSRC)gxblend.h:$(GLSRC)gsuid.h
+$(GLSRC)gxblend.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxblend.h:$(GLSRC)gxsync.h
+$(GLSRC)gxblend.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxblend.h:$(GLSRC)srdline.h
+$(GLSRC)gxblend.h:$(GLSRC)scommon.h
+$(GLSRC)gxblend.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxblend.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxblend.h:$(GLSRC)gxarith.h
+$(GLSRC)gxblend.h:$(GLSRC)stat_.h
+$(GLSRC)gxblend.h:$(GLSRC)gpsync.h
+$(GLSRC)gxblend.h:$(GLSRC)gsstype.h
+$(GLSRC)gxblend.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxblend.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxblend.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxblend.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxblend.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxblend.h:$(GLSRC)stdio_.h
+$(GLSRC)gxblend.h:$(GLSRC)gsccode.h
+$(GLSRC)gxblend.h:$(GLSRC)stdint_.h
+$(GLSRC)gxblend.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxblend.h:$(GLSRC)gstypes.h
+$(GLSRC)gxblend.h:$(GLSRC)std.h
+$(GLSRC)gxblend.h:$(GLSRC)stdpre.h
+$(GLSRC)gxblend.h:$(GLGEN)arch.h
+$(GLSRC)gxblend.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxcolor2.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxpcolor.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxdevmem.h
+$(GLSRC)gdevp14.h:$(GLSRC)gdevdevn.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxdcolor.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxblend.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscolor2.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxdevice.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxcpath.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsequivc.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxpcache.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscindex.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxcmap.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsptype1.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscie.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxtext.h
+$(GLSRC)gdevp14.h:$(GLSRC)gstext.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gdevp14.h:$(GLSRC)gstparam.h
+$(GLSRC)gdevp14.h:$(GLSRC)gspcolor.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxfmap.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsmalloc.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsfunc.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxcspace.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxctable.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxrplane.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscsel.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxfcache.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsfont.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsimage.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxbcache.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsropt.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxdda.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxpath.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxiclass.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxfrac.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxtmap.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxftype.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscms.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsrect.h
+$(GLSRC)gdevp14.h:$(GLSRC)gslparam.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsdevice.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscpm.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscspace.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsgstate.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxstdio.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsxfont.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsio.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsiparam.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxfixed.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscompt.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gdevp14.h:$(GLSRC)gspenum.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxhttile.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsparam.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsrefct.h
+$(GLSRC)gdevp14.h:$(GLSRC)gp.h
+$(GLSRC)gdevp14.h:$(GLSRC)memento.h
+$(GLSRC)gdevp14.h:$(GLSRC)memory_.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsuid.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsstruct.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxsync.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gdevp14.h:$(GLSRC)srdline.h
+$(GLSRC)gdevp14.h:$(GLSRC)scommon.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsfname.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsccolor.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxarith.h
+$(GLSRC)gdevp14.h:$(GLSRC)stat_.h
+$(GLSRC)gdevp14.h:$(GLSRC)gpsync.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsstype.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsmemory.h
+$(GLSRC)gdevp14.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gdevp14.h:$(GLSRC)gscdefs.h
+$(GLSRC)gdevp14.h:$(GLSRC)gslibctx.h
+$(GLSRC)gdevp14.h:$(GLSRC)gxcindex.h
+$(GLSRC)gdevp14.h:$(GLSRC)stdio_.h
+$(GLSRC)gdevp14.h:$(GLSRC)gsccode.h
+$(GLSRC)gdevp14.h:$(GLSRC)stdint_.h
+$(GLSRC)gdevp14.h:$(GLSRC)gssprintf.h
+$(GLSRC)gdevp14.h:$(GLSRC)gstypes.h
+$(GLSRC)gdevp14.h:$(GLSRC)std.h
+$(GLSRC)gdevp14.h:$(GLSRC)stdpre.h
+$(GLSRC)gdevp14.h:$(GLGEN)arch.h
+$(GLSRC)gdevp14.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsshade.h
+$(GLSRC)gscolor3.h:$(GLSRC)gspath.h
+$(GLSRC)gscolor3.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gscolor3.h:$(GLSRC)gscie.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsfunc.h
+$(GLSRC)gscolor3.h:$(GLSRC)gxctable.h
+$(GLSRC)gscolor3.h:$(GLSRC)gxfrac.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsdevice.h
+$(GLSRC)gscolor3.h:$(GLSRC)gscspace.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsgstate.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsiparam.h
+$(GLSRC)gscolor3.h:$(GLSRC)gxfixed.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gscolor3.h:$(GLSRC)gspenum.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsparam.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsrefct.h
+$(GLSRC)gscolor3.h:$(GLSRC)memento.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsstruct.h
+$(GLSRC)gscolor3.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gscolor3.h:$(GLSRC)scommon.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsccolor.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsstype.h
+$(GLSRC)gscolor3.h:$(GLSRC)gsmemory.h
+$(GLSRC)gscolor3.h:$(GLSRC)gslibctx.h
+$(GLSRC)gscolor3.h:$(GLSRC)stdio_.h
+$(GLSRC)gscolor3.h:$(GLSRC)stdint_.h
+$(GLSRC)gscolor3.h:$(GLSRC)gssprintf.h
+$(GLSRC)gscolor3.h:$(GLSRC)gstypes.h
+$(GLSRC)gscolor3.h:$(GLSRC)std.h
+$(GLSRC)gscolor3.h:$(GLSRC)stdpre.h
+$(GLSRC)gscolor3.h:$(GLGEN)arch.h
+$(GLSRC)gscolor3.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsfunc3.h:$(GLSRC)gsfunc.h
+$(GLSRC)gsfunc3.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gsfunc3.h:$(GLSRC)gsparam.h
+$(GLSRC)gsfunc3.h:$(GLSRC)memento.h
+$(GLSRC)gsfunc3.h:$(GLSRC)gsstruct.h
+$(GLSRC)gsfunc3.h:$(GLSRC)scommon.h
+$(GLSRC)gsfunc3.h:$(GLSRC)gsstype.h
+$(GLSRC)gsfunc3.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsfunc3.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsfunc3.h:$(GLSRC)stdio_.h
+$(GLSRC)gsfunc3.h:$(GLSRC)stdint_.h
+$(GLSRC)gsfunc3.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsfunc3.h:$(GLSRC)gstypes.h
+$(GLSRC)gsfunc3.h:$(GLSRC)std.h
+$(GLSRC)gsfunc3.h:$(GLSRC)stdpre.h
+$(GLSRC)gsfunc3.h:$(GLGEN)arch.h
+$(GLSRC)gsfunc3.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gsshade.h:$(GLSRC)gspath.h
+$(GLSRC)gsshade.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gsshade.h:$(GLSRC)gscie.h
+$(GLSRC)gsshade.h:$(GLSRC)gsfunc.h
+$(GLSRC)gsshade.h:$(GLSRC)gxctable.h
+$(GLSRC)gsshade.h:$(GLSRC)gxfrac.h
+$(GLSRC)gsshade.h:$(GLSRC)gsdevice.h
+$(GLSRC)gsshade.h:$(GLSRC)gscspace.h
+$(GLSRC)gsshade.h:$(GLSRC)gsgstate.h
+$(GLSRC)gsshade.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gsshade.h:$(GLSRC)gsiparam.h
+$(GLSRC)gsshade.h:$(GLSRC)gxfixed.h
+$(GLSRC)gsshade.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gsshade.h:$(GLSRC)gspenum.h
+$(GLSRC)gsshade.h:$(GLSRC)gsparam.h
+$(GLSRC)gsshade.h:$(GLSRC)gsrefct.h
+$(GLSRC)gsshade.h:$(GLSRC)memento.h
+$(GLSRC)gsshade.h:$(GLSRC)gsstruct.h
+$(GLSRC)gsshade.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gsshade.h:$(GLSRC)scommon.h
+$(GLSRC)gsshade.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gsshade.h:$(GLSRC)gsccolor.h
+$(GLSRC)gsshade.h:$(GLSRC)gsstype.h
+$(GLSRC)gsshade.h:$(GLSRC)gsmemory.h
+$(GLSRC)gsshade.h:$(GLSRC)gslibctx.h
+$(GLSRC)gsshade.h:$(GLSRC)stdio_.h
+$(GLSRC)gsshade.h:$(GLSRC)stdint_.h
+$(GLSRC)gsshade.h:$(GLSRC)gssprintf.h
+$(GLSRC)gsshade.h:$(GLSRC)gstypes.h
+$(GLSRC)gsshade.h:$(GLSRC)std.h
+$(GLSRC)gsshade.h:$(GLSRC)stdpre.h
+$(GLSRC)gsshade.h:$(GLGEN)arch.h
+$(GLSRC)gsshade.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxshade.h:$(GLSRC)gsshade.h
+$(GLSRC)gxshade.h:$(GLSRC)gspath.h
+$(GLSRC)gxshade.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxshade.h:$(GLSRC)gscie.h
+$(GLSRC)gxshade.h:$(GLSRC)stream.h
+$(GLSRC)gxshade.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxshade.h:$(GLSRC)gxctable.h
+$(GLSRC)gxshade.h:$(GLSRC)gxiodev.h
+$(GLSRC)gxshade.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxshade.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxshade.h:$(GLSRC)gscms.h
+$(GLSRC)gxshade.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxshade.h:$(GLSRC)gscspace.h
+$(GLSRC)gxshade.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxshade.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxshade.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxshade.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxshade.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxshade.h:$(GLSRC)gspenum.h
+$(GLSRC)gxshade.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxshade.h:$(GLSRC)gsparam.h
+$(GLSRC)gxshade.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxshade.h:$(GLSRC)gp.h
+$(GLSRC)gxshade.h:$(GLSRC)memento.h
+$(GLSRC)gxshade.h:$(GLSRC)memory_.h
+$(GLSRC)gxshade.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxshade.h:$(GLSRC)gxsync.h
+$(GLSRC)gxshade.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxshade.h:$(GLSRC)srdline.h
+$(GLSRC)gxshade.h:$(GLSRC)scommon.h
+$(GLSRC)gxshade.h:$(GLSRC)gsfname.h
+$(GLSRC)gxshade.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxshade.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxshade.h:$(GLSRC)gxarith.h
+$(GLSRC)gxshade.h:$(GLSRC)stat_.h
+$(GLSRC)gxshade.h:$(GLSRC)gpsync.h
+$(GLSRC)gxshade.h:$(GLSRC)gsstype.h
+$(GLSRC)gxshade.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxshade.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxshade.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxshade.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxshade.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxshade.h:$(GLSRC)stdio_.h
+$(GLSRC)gxshade.h:$(GLSRC)stdint_.h
+$(GLSRC)gxshade.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxshade.h:$(GLSRC)gstypes.h
+$(GLSRC)gxshade.h:$(GLSRC)std.h
+$(GLSRC)gxshade.h:$(GLSRC)stdpre.h
+$(GLSRC)gxshade.h:$(GLGEN)arch.h
+$(GLSRC)gxshade.h:$(GLSRC)gs_dll_call.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxshade.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsshade.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscicach.h
+$(GLSRC)gxshade4.h:$(GLSRC)gspath.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxmatrix.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxdevcli.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxcmap.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscie.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxtext.h
+$(GLSRC)gxshade4.h:$(GLSRC)gstext.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsnamecl.h
+$(GLSRC)gxshade4.h:$(GLSRC)gstparam.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxfmap.h
+$(GLSRC)gxshade4.h:$(GLSRC)stream.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsfunc.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxcspace.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxctable.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxiodev.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxrplane.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscsel.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxfcache.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsfont.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsimage.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsdcolor.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxcvalue.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxbcache.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsropt.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxdda.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxpath.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxfrac.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxtmap.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxftype.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscms.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsrect.h
+$(GLSRC)gxshade4.h:$(GLSRC)gslparam.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsdevice.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscpm.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscspace.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsgstate.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsxfont.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsdsrc.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsiparam.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxfixed.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscompt.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsmatrix.h
+$(GLSRC)gxshade4.h:$(GLSRC)gspenum.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxhttile.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsparam.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsrefct.h
+$(GLSRC)gxshade4.h:$(GLSRC)gp.h
+$(GLSRC)gxshade4.h:$(GLSRC)memento.h
+$(GLSRC)gxshade4.h:$(GLSRC)memory_.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsuid.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsstruct.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxsync.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxbitmap.h
+$(GLSRC)gxshade4.h:$(GLSRC)srdline.h
+$(GLSRC)gxshade4.h:$(GLSRC)scommon.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsfname.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsbitmap.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsccolor.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxarith.h
+$(GLSRC)gxshade4.h:$(GLSRC)stat_.h
+$(GLSRC)gxshade4.h:$(GLSRC)gpsync.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsstype.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsmemory.h
+$(GLSRC)gxshade4.h:$(GLSRC)gpgetenv.h
+$(GLSRC)gxshade4.h:$(GLSRC)gscdefs.h
+$(GLSRC)gxshade4.h:$(GLSRC)gslibctx.h
+$(GLSRC)gxshade4.h:$(GLSRC)gxcindex.h
+$(GLSRC)gxshade4.h:$(GLSRC)stdio_.h
+$(GLSRC)gxshade4.h:$(GLSRC)gsccode.h
+$(GLSRC)gxshade4.h:$(GLSRC)stdint_.h
+$(GLSRC)gxshade4.h:$(GLSRC)gssprintf.h
+$(GLSRC)gxshade4.h:$(GLSRC)gstypes.h
+$(GLSRC)gxshade4.h:$(GLSRC)std.h
+$(GLSRC)gxshade4.h:$(GLSRC)stdpre.h
+$(GLSRC)gxshade4.h:$(GLGEN)arch.h
+$(GLSRC)gxshade4.h:$(GLSRC)gs_dll_call.h
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/openvms.mak
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/openvms.mak	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/openvms.mak	(revision 5)
@@ -0,0 +1,533 @@
+# Copyright (C) 2001-2022 Artifex Software, Inc.
+# All Rights Reserved.
+#
+# This software is provided AS-IS with no warranty, either express or
+# implied.
+#
+# This software is distributed under license and may not be copied,
+# modified or distributed except as expressly authorized under the terms
+# of the license contained in the file LICENSE in this distribution.
+#
+# Refer to licensing information at http://www.artifex.com or contact
+# Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
+# CA 94945, U.S.A., +1(415)492-9861, for further information.
+#
+# makefile for OpenVMS VAX and Alpha
+#
+# Please contact Jim Dunham (dunham@omtool.com) if you have questions.
+# Support for VAX C on OpenVMS was removed in release 6.01 by Aladdin:
+# DEC C is now used on both VAX and Alpha platforms.
+#
+# ------------------------------- Options ------------------------------- #
+
+###### This section is the only part of the file you should need to edit.
+
+# on the make command line specify:
+#	make -fopenvms.mak "OPENVMS={VAX,ALPHA}" "DECWINDOWS={1.2,<blank>}"
+
+# Define the directory for the final executable, and the
+# source, generated intermediate file, and object directories
+# for the graphics library (GL) and the PostScript/PDF interpreter (PS).
+# NOTE: If you use GNU make, GLGENDIR and PSGENDIR must not be the
+# current directory ([]).
+
+BINDIR=[.bin]
+GLSRCDIR=[.base]
+DEVSRCDIR=[.devices]
+GLGENDIR=[.obj]
+GLOBJDIR=[.obj]
+DEVGENDIR=[.obj]
+DEVOBJDIR=[.obj]
+PSSRCDIR=[.psi]
+PSLIBDIR=[.lib]
+PSGENDIR=[.obj]
+PSOBJDIR=[.obj]
+# Because of OpenVMS syntactic problems, the following redundant definitions
+# are necessary.  If you are using more than one GENDIR and/or OBJDIR,
+# you will have to edit the code below that creates these directories.
+BIN_DIR=BIN.DIR
+OBJ_DIR=OBJ.DIR
+
+# Do not edit the next group of lines.
+
+#include $(COMMONDIR)/vmscdefs.mak
+#include $(COMMONDIR)/vmsdefs.mak
+#include $(COMMONDIR)/generic.mak
+include $(GLSRCDIR)version.mak
+DD=$(GLGENDIR)
+GLD=$(GLGENDIR)
+PSD=$(PSGENDIR)
+
+# ------ Generic options ------ #
+
+# Define the directory that will hold documentation at runtime.
+
+GS_DOCDIR=GS_DOC
+#GS_DOCDIR=SYS$COMMON:[GS]
+
+# Define the default directory/ies for the runtime
+# initialization and font files.  Separate multiple directories with ,.
+
+GS_LIB_DEFAULT=GS_ROOT:[RESOURCE.INIT],GS_ROOT:[LIB],GS_ROOT:[RESOURCE.FONT],GS_ROOT:[FONT]
+
+# Define whether or not searching for initialization files should always
+# look in the current directory first.  This leads to well-known security
+# and confusion problems,  but may be convenient sometimes.
+
+SEARCH_HERE_FIRST=0
+
+# Define the name of the interpreter initialization file.
+# (There is no reason to change this.)
+
+GS_INIT=GS_INIT.PS
+
+# Choose generic configuration options.
+
+# Setting DEBUG=1 includes debugging features in the code
+
+DEBUG=
+
+# Setting TDEBUG=1 includes symbol table information for the debugger,
+# and also enables stack tracing on failure.
+
+TDEBUG=
+
+# Setting CDEBUG=1 enables 'C' compiler debugging and turns off optimization
+# Code is substantially slower and larger.
+
+CDEBUG=
+
+# Define the name of the executable file.
+
+GS=GS
+
+# Define the directory where the IJG JPEG library sources are stored,
+# and the major version of the library that is stored there.
+# You may need to change this if the IJG library version changes.
+# See jpeg.mak for more information.
+
+JSRCDIR=[.jpeg]
+
+# Define the directory where the PNG library sources are stored,
+# and the version of the library that is stored there.
+# You may need to change this if the libpng version changes.
+# See png.mak for more information.
+
+PNGSRCDIR=[.libpng]
+
+# Define the directory where the zlib sources are stored.
+# See zlib.mak for more information.
+
+ZSRCDIR=[.zlib]
+
+# Define the jbig2 library and source location.
+# See jbig2.mak for more information.
+
+JBIG2_LIB=jbig2dec
+JBIG2SRCDIR=[.jbig2dec]
+
+# Define the jpeg2k library and source location.
+
+# Define the directory where the lcms2mt source is stored.
+# See lcms2mt.mak for more information
+
+LCMS2MTSRCDIR=[.lcms2mt]
+
+
+# Define the directory where the lcms2 source is stored.
+# See lcms2.mak for more information
+
+LCMS2SRCDIR=[.lcms2]
+
+# Which CMS are we using?
+# Options are currently lcms2mt or lcms2
+
+WHICH_CMS=lcms2mt
+
+# IJS has not been ported to OpenVMS. If you do the port,
+# you'll need to set these values. You'll also need to
+# include the ijs.mak makefile
+#
+# Define the directory where the ijs source is stored,
+# and the process forking method to use for the server.
+# See ijs.mak for more information.
+
+#IJSSRCDIR=[.ijs]
+#IJSEXECTYPE=unix
+
+# Note that built-in third-party libraries aren't available.
+
+SHARE_JPEG=0
+SHARE_LIBPNG=0
+SHARE_ZLIB=0
+SHARE_JBIG2=0
+SHARE_JPX=0
+
+# Define the path to X11 include files
+
+X_INCLUDE=DECW$$INCLUDE
+
+# ------ Platform-specific options ------ #
+
+# Define the drive, directory, and compiler name for the 'C' compiler.
+# COMP is the full compiler path name.
+
+COMP=CC
+
+ifdef DEBUG
+COMP:=$(COMP)/DEBUG/NOOPTIMIZE
+else
+# This should include /OPTIMIZE, but some OpenVMS compilers have an
+# optimizer bug that causes them to generate incorrect code for gdevpsfx.c,
+# so we must disable optimization.  (Eventually we will check for the bug
+# in genarch and enable optimization if it is safe.)
+#COMP:=$(COMP)/NODEBUG/OPTIMIZE
+COMP:=$(COMP)/NODEBUG/NOOPTIMIZE
+endif
+
+COMP:=$(COMP)/DECC/PREFIX=ALL/NESTED_INCLUDE=PRIMARY/NAMES=SHORTENED
+
+# Define any other compilation flags.
+# Including defines for A4 paper size
+
+ifdef A4_PAPER
+COMP:=$(COMP)/DEFINE=("A4")
+endif
+
+# LINK is the full linker path name
+
+ifdef TDEBUG
+LINKER=LINK/DEBUG/TRACEBACK
+else
+LINKER=LINK/NODEBUG/NOTRACEBACK
+endif
+
+# INCDIR contains the include files
+INCDIR=
+
+# LIBDIR contains the library files
+LIBDIR=
+
+# Define the .dev module that implements thread and synchronization
+# primitives for this platform.  Don't change this unless you really know
+# what you're doing.
+
+SYNC=posync
+
+# ------ Devices and features ------ #
+
+# Choose the device(s) to include.  See devs.mak for details,
+# devs.mak and contrib.mak for the list of available devices.
+
+DEVICE_DEVS=$(DD)x11.dev $(DD)x11alpha.dev $(DD)x11cmyk.dev $(DD)x11gray2.dev $(DD)x11gray4.dev $(DD)x11mono.dev
+DEVICE_DEVS1=
+DEVICE_DEVS2=
+DEVICE_DEVS3=$(DD)deskjet.dev $(DD)djet500.dev $(DD)laserjet.dev $(DD)ljetplus.dev $(DD)ljet2p.dev $(DD)ljet3.dev $(DD)ljet3d.dev $(DD)ljet4.dev $(DD)ljet4d.dev
+DEVICE_DEVS4=$(DD)cdeskjet.dev $(DD)cdjcolor.dev $(DD)cdjmono.dev $(DD)cdj550.dev $(DD)pj.dev $(DD)pjxl.dev $(DD)pjxl300.dev
+DEVICE_DEVS5=$(DD)uniprint.dev
+DEVICE_DEVS6=$(DD)bj10e.dev $(DD)bj200.dev $(DD)bjc600.dev $(DD)bjc800.dev
+DEVICE_DEVS7=$(DD)faxg3.dev $(DD)faxg32d.dev $(DD)faxg4.dev
+DEVICE_DEVS8=$(DD)pcxmono.dev $(DD)pcxgray.dev $(DD)pcx16.dev $(DD)pcx256.dev $(DD)pcx24b.dev $(DD)pcxcmyk.dev
+DEVICE_DEVS9=$(DD)pbm.dev $(DD)pbmraw.dev $(DD)pgm.dev $(DD)pgmraw.dev $(DD)pgnm.dev $(DD)pgnmraw.dev
+DEVICE_DEVS10=$(DD)tiffcrle.dev $(DD)tiffg3.dev $(DD)tiffg32d.dev $(DD)tiffg4.dev $(DD)tifflzw.dev $(DD)tiffpack.dev
+DEVICE_DEVS11=$(DD)tiff12nc.dev $(DD)tiff24nc.dev $(DD)tiffgray.dev $(DD)tiff32nc.dev $(DD)tiffsep.dev $(DD)tiffsep1.dev $(DD)tiffscaled.dev $(DD)tiffscaled8.dev $(DD)tiffscaled24.dev $(DD)tiffscaled32.dev
+DEVICE_DEVS12=$(DD)bit.dev $(DD)bitrgb.dev $(DD)bitcmyk.dev
+DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pngmonod.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev $(DD)png16malpha.dev
+DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev $(DD)jpegcmyk.dev
+DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)ps2write.dev $(DD)eps2write.dev $(DD)txtwrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev
+DEVICE_DEVS16=$(DD)bbox.dev $(DD)inkcov.dev $(DD)ink_cov.dev
+# Overflow from DEVS9
+DEVICE_DEVS17=$(DD)pnm.dev $(DD)pnmraw.dev $(DD)ppm.dev $(DD)ppmraw.dev $(DD)pkm.dev $(DD)pkmraw.dev $(DD)pksm.dev $(DD)pksmraw.dev $(DD)pamcmyk32.dev
+DEVICE_DEVS18=
+DEVICE_DEVS19=
+DEVICE_DEVS20=
+DEVICE_DEVS21=
+
+# Choose the language feature(s) to include.  See gs.mak for details.
+
+FEATURE_DEVS=$(PSD)psl3.dev $(PSD)pdf.dev $(PSD)ttfont.dev $(PSD)epsf.dev $(PSD)fapi.dev
+
+# Choose whether to compile the .ps initialization files into the executable.
+# See gs.mak for details.
+
+COMPILE_INITS=0
+
+# Choose whether to store band lists on files or in memory.
+# The choices are 'file' or 'memory'.
+
+BAND_LIST_STORAGE=file
+
+# Choose which compression method to use when storing band lists in memory.
+# The choices are 'lzw' or 'zlib'.
+
+BAND_LIST_COMPRESSOR=zlib
+
+# Choose the implementation of file I/O: 'stdio', 'fd', or 'both'.
+# See gs.mak and sfxfd.c for more details.
+
+FILE_IMPLEMENTATION=stdio
+
+# Define the platform name.
+
+GSPLATFORM=openvms_
+
+# Define the name of the makefile -- used in dependencies.
+
+MAKEFILE=$(GLSRCDIR)openvms.mak
+TOP_MAKEFILES=$(MAKEFILE)
+
+# Define the platform options
+
+PLATOPT=
+
+# It is very unlikely that anyone would want to edit the remaining
+#   symbols, but we describe them here for completeness:
+
+# Define the suffix for command files (e.g., null or .bat).
+
+CMD=
+
+# Define the directory separator character (\ for MS-DOS, / for Unix,
+# nothing for OpenVMS).
+
+D=
+
+# Define the brackets for passing preprocessor definitions to the C compiler.
+
+NULL=
+
+D_=/DEFINE="
+_D_=$(NULL)=
+_D="
+
+# Define the syntax of search paths for the C compiler.
+# The OpenVMS compilers uses /INCLUDE=(dir1, dir2, ...dirn),
+# and only a single /INCLUDE switch is allowed in the command line.
+
+I_=/INCLUDE=(
+II=,
+_I=)
+
+# Define the string for specifying the output file from the C compiler.
+
+O_=/OBJECT=
+
+# Define the quoting string for mixed-case arguments.
+# (OpenVMS is the only platform where this isn't an empty string.)
+
+Q="
+
+# Define the extension for executable files (e.g., null or .exe).
+
+XE=.exe
+
+# Define the extension for executable files for the auxiliary programs
+# (e.g., null or .exe).
+
+XEAUX=.exe
+
+# Define the list of files that `make clean' removes.
+
+BEGINFILES=$(GLGENDIR)OPENVMS.OPT $(GLGENDIR)OPENVMS.COM
+
+# Define the C invocation for auxiliary programs (echogs, genarch).
+
+CCAUX=CC/DECC
+
+# Define the C invocation for normal compilation.
+
+CC=$(COMP)
+
+# Define the Link invocation.
+
+LINK=$(LINKER)/EXE=$@ $^,$(GLGENDIR)OPENVMS.OPT/OPTION
+
+# Define the auxiliary program dependency. We don't need this.
+
+AK=
+
+# Define the syntax for command, object, and executable files.
+
+OBJ=obj
+
+# Define the prefix for image invocations.
+
+EXP=MCR $(NULL)
+
+# Define the prefix for shell invocations.
+
+SH=
+
+# Define generic commands.
+
+CP_=$$ @$(GLSRCDIR)COPY_ONE
+
+# Define the command for deleting (a) file(s) (including wild cards)
+
+RM_=$$ @$(GLSRCDIR)RM_ONE
+
+# Define the command for deleting multiple files / patterns.
+
+RMN_=$$ @$(GLSRCDIR)RM_ALL
+
+# Define the arguments for genconf.
+
+CONFILES=-p %s
+CONFLDTR=-o
+
+# Define the generic compilation rules.
+
+..suffixes: .c .obj .exe
+
+..obj.exe:
+	$(LINK)
+
+# ---------------------------- End of options ---------------------------- #
+
+# Define the default build rule, so the object directories get created
+# automatically.
+
+# I wasn't able to find a "do nothing" command in the DCL manual!
+std: directories default
+	WRITE SYS$$OUTPUT "Done."
+
+directories:
+	$$ If F$$Search("$(BIN_DIR)") .EQS. "" Then Create/Directory/Log $(BINDIR)
+	$$ If F$$Search("$(OBJ_DIR)") .EQS. "" Then Create/Directory/Log $(GLOBJDIR)
+
+# MAKEDIRS = the dependency on ALL object files (must be the last one on
+# the line. Requires GNU make to make it an 'order only' dependency
+# MAKEDIRSTOP = the topmost dependency - set this if you can't set MAKEDIRS
+
+MAKEDIRS=
+MAKEDIRSTOP=directories
+
+# ------------------- Include the generic makefiles ---------------------- #
+
+#include $(COMMONDIR)/ansidefs.mak
+#include $(COMMONDIR)/vmsdefs.mak
+#include $(COMMONDIR)/generic.mak
+include $(GLSRCDIR)gs.mak
+
+# ***********************************************************************************
+#
+#    The following should be kept up to date with src/psromfs.mak -- we can't
+#    use the shared one because of VMS directory syntax strangeness.
+#
+#    This enumeration of the Resource/* directories probably won't work without
+#    code changes to src/mkromfs.c to change the VMS style of directory references
+#    to PostScript style, but we will need this when (if) mkromfs is changed for VMS
+#
+# ***********************************************************************************
+# The list of resources to be included in the %rom% file system.
+# This is in the top makefile since the file descriptors are platform specific
+RESOURCE_LIST=[Resource.CMap] [Resource.ColorSpace] [Resource.Decoding] [Resource.Fonts] [Resource.ProcSet] [Resource.IdiomSet] [Resource.CIDFont]
+
+PS_ROMFS_ARGS=-c -d Resource/ $(RESOURCE_LIST) -d lib/ -P $(PSLIBDIR) $(EXTRA_INIT_FILES)
+
+include $(GLSRCDIR)lib.mak
+include $(PSSRCDIR)int.mak
+include $(GLSRCDIR)jpeg.mak
+# zlib.mak must precede png.mak
+include $(GLSRCDIR)zlib.mak
+include $(GLSRCDIR)png.mak
+include $(GLSRCDIR)jbig2.mak
+include $(GLSRCDIR)devs.mak
+include $(GLSRCDIR)contrib.mak
+
+# Define various incantations of the 'c' compiler.
+
+CC_=$(COMP)
+CC_NO_WARN=$(CC_)
+CC_SHARED=$(CC_)
+
+# ----------------------------- Main program ------------------------------ #
+
+$(GS_XE) : openvms $(GLOBJDIR)gs.$(OBJ) $(INT_ALL) $(LIB_ALL)
+	$(LINKER)/EXE=$@ $(GLOBJ)gs.$(OBJ),$(ld_tr)/OPTIONS,$(GLGENDIR)OPENVMS.OPT/OPTION
+
+# OpenVMS.dev
+
+openvms__=$(GLOBJ)gp_getnv.$(OBJ) $(GLOBJ)gp_paper.$(OBJ) $(GLOBJ)gp_vms.$(OBJ) $(GLOBJ)gp_stdia.$(OBJ) $(GLOBJ)gp_nxpsprn.$(OBJ)
+$(GLGEN)openvms_.dev : $(openvms__) $(GLGEN)nosync.dev
+	$(SETMOD) $(GLGEN)openvms_ $(openvms__) -include $(GLGEN)nosync
+
+$(GLOBJ)gp_vms.$(OBJ) : $(GLSRC)gp_vms.c $(string__h) $(memory__h) $(gx_h) $(gp_h) $(gpmisc_h) $(gsstruct_h)
+	$(CC_)/include=($(GLGENDIR),$(GLSRCDIR))/obj=$(GLOBJ)gp_vms.$(OBJ) $(GLSRC)gp_vms.c
+
+$(GLOBJ)gp_stdia.$(OBJ): $(GLSRC)gp_stdia.c $(AK) $(stdio__h) $(time__h) $(unistd__h) $(gx_h) $(gp_h)
+	$(CC_)/obj=$(GLOBJ)gp_stdia.$(OBJ) $(GLSRC)gp_stdia.c
+
+# Interpreter AUX programs
+
+$(ECHOGS_XE) :  $(GLOBJ)echogs.$(OBJ)
+	LINK/EXE=$@ $(GLOBJ)echogs.$(OBJ)
+
+$(GLOBJ)echogs.$(OBJ) :  $(GLSRC)echogs.c
+	$(CCAUX)/obj=$(GLOBJ)echogs.$(OBJ)  $(GLSRC)echogs.c
+
+$(GENARCH_XE) : $(GLOBJ)genarch.$(OBJ)
+	LINK/EXE=$@ $(GLOBJ)genarch.$(OBJ)
+
+$(GLOBJ)genarch.$(OBJ) :  $(GLSRC)genarch.c $(GENARCH_DEPS)
+	$(CCAUX)/obj=$(GLOBJ)genarch.$(OBJ)  $(GLSRC)genarch.c
+
+$(GENCONF_XE) : $(GLOBJDIR)genconf.$(OBJ)
+	LINK/EXE=$@ $(GLOBJ)genconf.$(OBJ)
+
+$(GLOBJ)genconf.$(OBJ) :  $(GLSRC)genconf.c $(GENCONF_DEPS)
+	$(CCAUX)/obj=$(GLOBJ)genconf.$(OBJ)  $(GLSRC)genconf.c
+
+$(GENDEV_XE) : $(GLOBJDIR)gendev.$(OBJ)
+	LINK/EXE=$@ $(GLOBJ)gendev.$(OBJ)
+
+$(GLOBJ)gendev.$(OBJ) :  $(GLSRC)gendev.c $(GENDEV_DEPS)
+	$(CCAUX)/obj=$(GLOBJ)gendev.$(OBJ)  $(GLSRC)gendev.c
+
+$(GENHT_XE) : $(GLOBJDIR)genht.$(OBJ)
+	LINK/EXE=$@ $(GLOBJ)genht.$(OBJ)
+
+$(GLOBJ)genht.$(OBJ) :  $(GLSRC)genht.c $(GENHT_DEPS)
+	$(CCAUX)/obj=$(GLOBJ)genht.$(OBJ) $(GENHT_CFLAGS) $(GLSRC)genht.c
+
+$(GLOBJ)mkromfs.$(OBJ) :  $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS)
+	$(CCAUX)/obj=$(GLOBJ)mkromfs.$(OBJ) $(I_)$(GLI_) $(II)$(ZI_)$(_I) $(GLSRC)mkromfs.c
+
+MKROMFS_OBJS=$(MKROMFS_ZLIB_OBJS) $(GLOBJ)gp_vms.$(OBJ)
+$(MKROMFS_XE): $(GLSRC)mkromfs.c $(MKROMFS_OBJS)
+	LINK/EXE=$@ $(GLOBJ)mkromfs.$(OBJ) $(MKROMFS_OBJS)
+
+# Preliminary definitions
+
+openvms : $(GLGENDIR)openvms.com $(GLGENDIR)openvms.opt
+	$$ @$(GLGENDIR)OPENVMS
+
+$(GLGENDIR)openvms.com : $(GLSRCDIR)append_l.com $(GLOBJDIR)gsromfs$(COMPILE_INITS).$(OBJ)
+	$$ @$(GLSRCDIR)APPEND_L $@ "$$ DEFINE/JOB X11 $(X_INCLUDE)"
+	$$ @$(GLSRCDIR)APPEND_L $@ "$$ DEFINE/JOB GS_LIB ''F$$ENVIRONMENT(""DEFAULT"")'"
+	$$ @$(GLSRCDIR)APPEND_L $@ "$$ DEFINE/JOB GS_DOC ''F$$ENVIRONMENT(""DEFAULT"")'"
+	$$ @$(GLSRCDIR)APPEND_L $@ "$$ DEFINE/JOB DECC$$USER_INCLUDE ''F$$ENVIRONMENT(""DEFAULT"")', DECW$$INCLUDE, DECC$$LIBRARY_INCLUDE, SYS$$LIBRARY"
+	$$ @$(GLSRCDIR)APPEND_L $@ "$$ DEFINE/JOB DECC$$SYSTEM_INCLUDE ''F$$ENVIRONMENT(""DEFAULT"")', DECW$$INCLUDE, DECC$$LIBRARY_INCLUDE, SYS$$LIBRARY"
+	$$ @$(GLSRCDIR)APPEND_L $@ "$$ DEFINE/JOB SYS "DECC$$LIBRARY_INCLUDE,SYS$$LIBRARY"
+
+$(GLGENDIR)openvms.opt:
+ifeq "$(DECWINDOWS)" "1.2"
+	$$ @$(GLSRCDIR)APPEND_L $@ "SYS$$SHARE:DECW$$XMLIBSHR12.EXE/SHARE"
+	$$ @$(GLSRCDIR)APPEND_L $@ "SYS$$SHARE:DECW$$XTLIBSHRR5.EXE/SHARE"
+	$$ @$(GLSRCDIR)APPEND_L $@ "SYS$$SHARE:DECW$$XLIBSHR.EXE/SHARE"
+else
+	$$ @$(GLSRCDIR)APPEND_L $@ "SYS$$SHARE:DECW$$XMLIBSHR.EXE/SHARE"
+	$$ @$(GLSRCDIR)APPEND_L $@ "SYS$$SHARE:DECW$$XTSHR.EXE/SHARE"
+	$$ @$(GLSRCDIR)APPEND_L $@ "SYS$$SHARE:DECW$$XLIBSHR.EXE/SHARE"
+endif
+	$$ @$(GLSRCDIR)APPEND_L $@ ""Ident="""""GS $(GS_DOT_VERSION)"""""
+
+# The platform-specific makefiles must also include rules for creating
+# certain dynamically generated files:
+#	gconfig_.h - this indicates the presence or absence of
+#	    certain system header files that are located in different
+#	    places on different systems.  (It could be generated by
+#	    the GNU `configure' program.)
+
+$(gconfig__h) : $(TOP_MAKEFILES) $(ECHOGS_XE)
+	$(EXP)$(ECHOGS_XE_BUILD) -w $(gconfig__h) -x 23 define "HAVE_SYS_TIME_H" 1
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/tesseract.mak
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/tesseract.mak	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/tesseract.mak	(revision 5)
@@ -0,0 +1,1158 @@
+TESSINCLUDES=\
+	$(I_)$(TESSERACTDIR)/include$(_I)\
+	$(I_)$(TESSERACTDIR)/src/api$(_I)\
+	$(I_)$(TESSERACTDIR)/src/arch$(_I)\
+	$(I_)$(TESSERACTDIR)/src/ccmain$(_I)\
+	$(I_)$(TESSERACTDIR)/src/ccstruct$(_I)\
+	$(I_)$(TESSERACTDIR)/src/ccutil$(_I)\
+	$(I_)$(TESSERACTDIR)/src/classify$(_I)\
+	$(I_)$(TESSERACTDIR)/src/cutil$(_I)\
+	$(I_)$(TESSERACTDIR)/src/dict$(_I)\
+	$(I_)$(TESSERACTDIR)/src/lstm$(_I)\
+	$(I_)$(TESSERACTDIR)/src/opencl$(_I)\
+	$(I_)$(TESSERACTDIR)/src/textord$(_I)\
+	$(I_)$(TESSERACTDIR)/src/training$(_I)\
+	$(I_)$(TESSERACTDIR)/src/viewer$(_I)\
+	$(I_)$(TESSERACTDIR)/src/wordrec$(_I)\
+	$(I_)$(LEPTONICADIR)/src$(_I)\
+	$(I_)$(GLSRCDIR)$(_I)\
+	$(I_)$(GLGENDIR)$(_I)
+
+# If we wanted to disable the legacy mode in tesseract, which is supposedly
+# unused, we'd:
+#   add  -DDISABLED_LEGACY_ENGINE to TESSCXX
+#   empty TESSERACT_LEGACY
+
+# We set -DCLUSTER when doing builds for our testing cluster. Unfortunately,
+# this conflicts with Tesseract's use of a CLUSTER type. We work around this
+# here by undefining CLUSTER for the tesseract portion of the build.
+
+TESSCXX = $(CXX) $(TESSINCLUDES) $(TESSCXXFLAGS) $(CCFLAGS) -DTESSERACT_IMAGEDATA_AS_PIX -DTESSERACT_DISABLE_DEBUG_FONTS -DGRAPHICS_DISABLED -UCLUSTER
+#-DDISABLED_LEGACY_ENGINE
+TESSOBJ = $(GLOBJDIR)$(D)tesseract_
+TESSO_ = $(O_)$(TESSOBJ)
+
+TESSDEPS=\
+	$(arch_h)\
+	$(GLSRCDIR)/tesseract.mak\
+	$(GLGENDIR)/tesseract/version.h\
+	$(TESSERACTDIR)/include/tesseract/baseapi.h\
+	$(TESSERACTDIR)/include/tesseract/capi.h\
+	$(TESSERACTDIR)/include/tesseract/ltrresultiterator.h\
+	$(TESSERACTDIR)/include/tesseract/ocrclass.h\
+	$(TESSERACTDIR)/include/tesseract/osdetect.h\
+	$(TESSERACTDIR)/include/tesseract/pageiterator.h\
+	$(TESSERACTDIR)/include/tesseract/publictypes.h\
+	$(TESSERACTDIR)/include/tesseract/renderer.h\
+	$(TESSERACTDIR)/include/tesseract/resultiterator.h\
+	$(TESSERACTDIR)/include/tesseract/thresholder.h\
+	$(TESSERACTDIR)/include/tesseract/unichar.h\
+	$(TESSERACTDIR)/src/arch/dotproduct.h\
+	$(TESSERACTDIR)/src/arch/intsimdmatrix.h\
+	$(TESSERACTDIR)/src/arch/simddetect.h\
+	$(TESSERACTDIR)/src/ccmain/control.h\
+	$(TESSERACTDIR)/src/ccmain/docqual.h\
+	$(TESSERACTDIR)/src/ccmain/equationdetect.h\
+	$(TESSERACTDIR)/src/ccmain/fixspace.h\
+	$(TESSERACTDIR)/src/ccmain/mutableiterator.h\
+	$(TESSERACTDIR)/src/ccmain/output.h\
+	$(TESSERACTDIR)/src/ccmain/paragraphs.h\
+	$(TESSERACTDIR)/src/ccmain/paragraphs_internal.h\
+	$(TESSERACTDIR)/src/ccmain/paramsd.h\
+	$(TESSERACTDIR)/src/ccmain/pgedit.h\
+	$(TESSERACTDIR)/src/ccmain/reject.h\
+	$(TESSERACTDIR)/src/ccmain/tesseractclass.h\
+	$(TESSERACTDIR)/src/ccmain/tessvars.h\
+	$(TESSERACTDIR)/src/ccmain/werdit.h\
+	$(TESSERACTDIR)/src/ccstruct/blamer.h\
+	$(TESSERACTDIR)/src/ccstruct/blobbox.h\
+	$(TESSERACTDIR)/src/ccstruct/blobs.h\
+	$(TESSERACTDIR)/src/ccstruct/blread.h\
+	$(TESSERACTDIR)/src/ccstruct/boxread.h\
+	$(TESSERACTDIR)/src/ccstruct/boxword.h\
+	$(TESSERACTDIR)/src/ccstruct/ccstruct.h\
+	$(TESSERACTDIR)/src/ccstruct/coutln.h\
+	$(TESSERACTDIR)/src/ccstruct/detlinefit.h\
+	$(TESSERACTDIR)/src/ccstruct/dppoint.h\
+	$(TESSERACTDIR)/src/ccstruct/fontinfo.h\
+	$(TESSERACTDIR)/src/ccstruct/imagedata.h\
+	$(TESSERACTDIR)/src/ccstruct/linlsq.h\
+	$(TESSERACTDIR)/src/ccstruct/matrix.h\
+	$(TESSERACTDIR)/src/ccstruct/mod128.h\
+	$(TESSERACTDIR)/src/ccstruct/normalis.h\
+	$(TESSERACTDIR)/src/ccstruct/ocrblock.h\
+	$(TESSERACTDIR)/src/ccstruct/ocrpara.h\
+	$(TESSERACTDIR)/src/ccstruct/ocrrow.h\
+	$(TESSERACTDIR)/src/ccstruct/otsuthr.h\
+	$(TESSERACTDIR)/src/ccstruct/pageres.h\
+	$(TESSERACTDIR)/src/ccstruct/params_training_featdef.h\
+	$(TESSERACTDIR)/src/ccstruct/pdblock.h\
+	$(TESSERACTDIR)/src/ccstruct/points.h\
+	$(TESSERACTDIR)/src/ccstruct/polyaprx.h\
+	$(TESSERACTDIR)/src/ccstruct/polyblk.h\
+	$(TESSERACTDIR)/src/ccstruct/quadlsq.h\
+	$(TESSERACTDIR)/src/ccstruct/quadratc.h\
+	$(TESSERACTDIR)/src/ccstruct/quspline.h\
+	$(TESSERACTDIR)/src/ccstruct/ratngs.h\
+	$(TESSERACTDIR)/src/ccstruct/rect.h\
+	$(TESSERACTDIR)/src/ccstruct/rejctmap.h\
+	$(TESSERACTDIR)/src/ccstruct/seam.h\
+	$(TESSERACTDIR)/src/ccstruct/split.h\
+	$(TESSERACTDIR)/src/ccstruct/statistc.h\
+	$(TESSERACTDIR)/src/ccstruct/stepblob.h\
+	$(TESSERACTDIR)/src/ccstruct/werd.h\
+	$(TESSERACTDIR)/src/ccutil/ambigs.h\
+	$(TESSERACTDIR)/src/ccutil/bits16.h\
+	$(TESSERACTDIR)/src/ccutil/bitvector.h\
+	$(TESSERACTDIR)/src/ccutil/ccutil.h\
+	$(TESSERACTDIR)/src/ccutil/clst.h\
+	$(TESSERACTDIR)/src/ccutil/elst.h\
+	$(TESSERACTDIR)/src/ccutil/elst2.h\
+	$(TESSERACTDIR)/src/ccutil/errcode.h\
+	$(TESSERACTDIR)/src/ccutil/fileerr.h\
+	$(TESSERACTDIR)/src/ccutil/genericheap.h\
+	$(TESSERACTDIR)/src/ccutil/host.h\
+	$(TESSERACTDIR)/src/ccutil/indexmapbidi.h\
+	$(TESSERACTDIR)/src/ccutil/kdpair.h\
+	$(TESSERACTDIR)/src/ccutil/lsterr.h\
+	$(TESSERACTDIR)/src/ccutil/object_cache.h\
+	$(TESSERACTDIR)/src/ccutil/params.h\
+	$(TESSERACTDIR)/src/ccutil/qrsequence.h\
+	$(TESSERACTDIR)/src/ccutil/scanutils.h\
+	$(TESSERACTDIR)/src/ccutil/sorthelper.h\
+	$(TESSERACTDIR)/src/ccutil/tessdatamanager.h\
+	$(TESSERACTDIR)/src/ccutil/tprintf.h\
+	$(TESSERACTDIR)/src/ccutil/unicharcompress.h\
+	$(TESSERACTDIR)/src/ccutil/unicharmap.h\
+	$(TESSERACTDIR)/src/ccutil/unicharset.h\
+	$(TESSERACTDIR)/src/ccutil/unicity_table.h\
+	$(TESSERACTDIR)/src/ccutil/universalambigs.h\
+	$(TESSERACTDIR)/src/classify/adaptive.h\
+	$(TESSERACTDIR)/src/classify/blobclass.h\
+	$(TESSERACTDIR)/src/classify/classify.h\
+	$(TESSERACTDIR)/src/classify/cluster.h\
+	$(TESSERACTDIR)/src/classify/clusttool.h\
+	$(TESSERACTDIR)/src/classify/featdefs.h\
+	$(TESSERACTDIR)/src/classify/float2int.h\
+	$(TESSERACTDIR)/src/classify/fpoint.h\
+	$(TESSERACTDIR)/src/classify/intfeaturespace.h\
+	$(TESSERACTDIR)/src/classify/intfx.h\
+	$(TESSERACTDIR)/src/classify/intmatcher.h\
+	$(TESSERACTDIR)/src/classify/intproto.h\
+	$(TESSERACTDIR)/src/classify/kdtree.h\
+	$(TESSERACTDIR)/src/classify/mf.h\
+	$(TESSERACTDIR)/src/classify/mfdefs.h\
+	$(TESSERACTDIR)/src/classify/mfoutline.h\
+	$(TESSERACTDIR)/src/classify/mfx.h\
+	$(TESSERACTDIR)/src/classify/normfeat.h\
+	$(TESSERACTDIR)/src/classify/normmatch.h\
+	$(TESSERACTDIR)/src/classify/ocrfeatures.h\
+	$(TESSERACTDIR)/src/classify/outfeat.h\
+	$(TESSERACTDIR)/src/classify/picofeat.h\
+	$(TESSERACTDIR)/src/classify/protos.h\
+	$(TESSERACTDIR)/src/classify/shapeclassifier.h\
+	$(TESSERACTDIR)/src/classify/shapetable.h\
+	$(TESSERACTDIR)/src/classify/tessclassifier.h\
+	$(TESSERACTDIR)/src/classify/trainingsample.h\
+	$(TESSERACTDIR)/src/cutil/bitvec.h\
+	$(TESSERACTDIR)/src/cutil/oldlist.h\
+	$(TESSERACTDIR)/src/dict/dawg.h\
+	$(TESSERACTDIR)/src/dict/dawg_cache.h\
+	$(TESSERACTDIR)/src/dict/dict.h\
+	$(TESSERACTDIR)/src/dict/matchdefs.h\
+	$(TESSERACTDIR)/src/dict/stopper.h\
+	$(TESSERACTDIR)/src/dict/trie.h\
+	$(TESSERACTDIR)/src/lstm/convolve.h\
+	$(TESSERACTDIR)/src/lstm/fullyconnected.h\
+	$(TESSERACTDIR)/src/lstm/functions.h\
+	$(TESSERACTDIR)/src/lstm/input.h\
+	$(TESSERACTDIR)/src/lstm/lstm.h\
+	$(TESSERACTDIR)/src/lstm/lstmrecognizer.h\
+	$(TESSERACTDIR)/src/lstm/maxpool.h\
+	$(TESSERACTDIR)/src/lstm/network.h\
+	$(TESSERACTDIR)/src/lstm/networkio.h\
+	$(TESSERACTDIR)/src/lstm/networkscratch.h\
+	$(TESSERACTDIR)/src/lstm/parallel.h\
+	$(TESSERACTDIR)/src/lstm/plumbing.h\
+	$(TESSERACTDIR)/src/lstm/recodebeam.h\
+	$(TESSERACTDIR)/src/lstm/reconfig.h\
+	$(TESSERACTDIR)/src/lstm/reversed.h\
+	$(TESSERACTDIR)/src/lstm/series.h\
+	$(TESSERACTDIR)/src/lstm/static_shape.h\
+	$(TESSERACTDIR)/src/lstm/stridemap.h\
+	$(TESSERACTDIR)/src/lstm/tfnetwork.h\
+	$(TESSERACTDIR)/src/lstm/weightmatrix.h\
+	$(TESSERACTDIR)/src/opencl/oclkernels.h\
+	$(TESSERACTDIR)/src/opencl/openclwrapper.h\
+	$(TESSERACTDIR)/src/textord/alignedblob.h\
+	$(TESSERACTDIR)/src/textord/baselinedetect.h\
+	$(TESSERACTDIR)/src/textord/bbgrid.h\
+	$(TESSERACTDIR)/src/textord/blkocc.h\
+	$(TESSERACTDIR)/src/textord/blobgrid.h\
+	$(TESSERACTDIR)/src/textord/ccnontextdetect.h\
+	$(TESSERACTDIR)/src/textord/cjkpitch.h\
+	$(TESSERACTDIR)/src/textord/colfind.h\
+	$(TESSERACTDIR)/src/textord/colpartition.h\
+	$(TESSERACTDIR)/src/textord/colpartitiongrid.h\
+	$(TESSERACTDIR)/src/textord/colpartitionset.h\
+	$(TESSERACTDIR)/src/textord/devanagari_processing.h\
+	$(TESSERACTDIR)/src/textord/drawtord.h\
+	$(TESSERACTDIR)/src/textord/edgblob.h\
+	$(TESSERACTDIR)/src/textord/edgloop.h\
+	$(TESSERACTDIR)/src/textord/equationdetectbase.h\
+	$(TESSERACTDIR)/src/textord/fpchop.h\
+	$(TESSERACTDIR)/src/textord/gap_map.h\
+	$(TESSERACTDIR)/src/textord/imagefind.h\
+	$(TESSERACTDIR)/src/textord/linefind.h\
+	$(TESSERACTDIR)/src/textord/makerow.h\
+	$(TESSERACTDIR)/src/textord/oldbasel.h\
+	$(TESSERACTDIR)/src/textord/pithsync.h\
+	$(TESSERACTDIR)/src/textord/pitsync1.h\
+	$(TESSERACTDIR)/src/textord/scanedg.h\
+	$(TESSERACTDIR)/src/textord/sortflts.h\
+	$(TESSERACTDIR)/src/textord/strokewidth.h\
+	$(TESSERACTDIR)/src/textord/tabfind.h\
+	$(TESSERACTDIR)/src/textord/tablefind.h\
+	$(TESSERACTDIR)/src/textord/tablerecog.h\
+	$(TESSERACTDIR)/src/textord/tabvector.h\
+	$(TESSERACTDIR)/src/textord/textlineprojection.h\
+	$(TESSERACTDIR)/src/textord/textord.h\
+	$(TESSERACTDIR)/src/textord/topitch.h\
+	$(TESSERACTDIR)/src/textord/tordmain.h\
+	$(TESSERACTDIR)/src/textord/tovars.h\
+	$(TESSERACTDIR)/src/textord/underlin.h\
+	$(TESSERACTDIR)/src/textord/wordseg.h\
+	$(TESSERACTDIR)/src/textord/workingpartset.h\
+	$(TESSERACTDIR)/src/viewer/scrollview.h\
+	$(TESSERACTDIR)/src/viewer/svmnode.h\
+	$(TESSERACTDIR)/src/viewer/svutil.h\
+	$(TESSERACTDIR)/src/wordrec/associate.h\
+	$(TESSERACTDIR)/src/wordrec/chop.h\
+	$(TESSERACTDIR)/src/wordrec/drawfx.h\
+	$(TESSERACTDIR)/src/wordrec/findseam.h\
+	$(TESSERACTDIR)/src/wordrec/language_model.h\
+	$(TESSERACTDIR)/src/wordrec/lm_consistency.h\
+	$(TESSERACTDIR)/src/wordrec/lm_pain_points.h\
+	$(TESSERACTDIR)/src/wordrec/lm_state.h\
+	$(TESSERACTDIR)/src/wordrec/measure.h\
+	$(TESSERACTDIR)/src/wordrec/outlines.h\
+	$(TESSERACTDIR)/src/wordrec/params_model.h\
+	$(TESSERACTDIR)/src/wordrec/plotedges.h\
+	$(TESSERACTDIR)/src/wordrec/render.h\
+	$(TESSERACTDIR)/src/wordrec/wordrec.h\
+	$(MAKEDIRS)
+
+$(GLGENDIR)/tesseract/version.h : $(ECHOGS_XE) $(GLSRCDIR)/tesseract.mak
+	-mkdir $(GLGENDIR)$(D)tesseract
+	$(ECHOGS_XE_BUILD) -w $(GLGENDIR)/tesseract/version.h -x 23 define TESSERACT_VERSION_STR -x 2022 5.0.0-beta-gs -x 22
+
+
+$(TESSOBJ)api_baseapi.$(OBJ) : $(TESSERACTDIR)/src/api/baseapi.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)api_baseapi.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/baseapi.cpp
+
+$(TESSOBJ)api_altorenderer.$(OBJ) : $(TESSERACTDIR)/src/api/altorenderer.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)api_altorenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/altorenderer.cpp
+
+$(TESSOBJ)api_capi.$(OBJ) : $(TESSERACTDIR)/src/api/capi.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)api_capi.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/capi.cpp
+
+$(TESSOBJ)api_hocrrenderer.$(OBJ) : $(TESSERACTDIR)/src/api/hocrrenderer.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)api_hocrrenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/hocrrenderer.cpp
+
+$(TESSOBJ)api_lstmboxrenderer.$(OBJ) : $(TESSERACTDIR)/src/api/lstmboxrenderer.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)api_lstmboxrenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/lstmboxrenderer.cpp
+
+$(TESSOBJ)api_pdfrenderer.$(OBJ) : $(TESSERACTDIR)/src/api/pdfrenderer.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)api_pdfrenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/pdfrenderer.cpp
+
+$(TESSOBJ)api_renderer.$(OBJ) : $(TESSERACTDIR)/src/api/renderer.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)api_renderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/renderer.cpp
+
+$(TESSOBJ)api_wordstrboxrenderer.$(OBJ) : $(TESSERACTDIR)/src/api/wordstrboxrenderer.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)api_wordstrboxrenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/wordstrboxrenderer.cpp
+
+$(TESSOBJ)arch_intsimdmatrix.$(OBJ) : $(TESSERACTDIR)/src/arch/intsimdmatrix.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)arch_intsimdmatrix.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/intsimdmatrix.cpp
+
+$(TESSOBJ)arch_simddetect.$(OBJ) : $(TESSERACTDIR)/src/arch/simddetect.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)arch_simddetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/simddetect.cpp
+
+$(TESSOBJ)ccmain_applybox.$(OBJ) : $(TESSERACTDIR)/src/ccmain/applybox.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_applybox.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/applybox.cpp
+
+$(TESSOBJ)ccmain_control.$(OBJ) : $(TESSERACTDIR)/src/ccmain/control.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_control.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/control.cpp
+
+$(TESSOBJ)ccmain_docqual.$(OBJ) : $(TESSERACTDIR)/src/ccmain/docqual.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_docqual.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/docqual.cpp
+
+$(TESSOBJ)ccmain_equationdetect.$(OBJ) : $(TESSERACTDIR)/src/ccmain/equationdetect.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_equationdetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/equationdetect.cpp
+
+$(TESSOBJ)ccmain_linerec.$(OBJ) : $(TESSERACTDIR)/src/ccmain/linerec.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_linerec.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/linerec.cpp
+
+$(TESSOBJ)ccmain_ltrresultiterator.$(OBJ) : $(TESSERACTDIR)/src/ccmain/ltrresultiterator.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_ltrresultiterator.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/ltrresultiterator.cpp
+
+$(TESSOBJ)ccmain_mutableiterator.$(OBJ) : $(TESSERACTDIR)/src/ccmain/mutableiterator.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_mutableiterator.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/mutableiterator.cpp
+
+$(TESSOBJ)ccmain_output.$(OBJ) : $(TESSERACTDIR)/src/ccmain/output.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_output.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/output.cpp
+
+$(TESSOBJ)ccmain_osdetect.$(OBJ) : $(TESSERACTDIR)/src/ccmain/osdetect.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_osdetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/osdetect.cpp
+
+$(TESSOBJ)ccmain_pageiterator.$(OBJ) : $(TESSERACTDIR)/src/ccmain/pageiterator.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_pageiterator.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/pageiterator.cpp
+
+$(TESSOBJ)ccmain_pagesegmain.$(OBJ) : $(TESSERACTDIR)/src/ccmain/pagesegmain.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_pagesegmain.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/pagesegmain.cpp
+
+$(TESSOBJ)ccmain_pagewalk.$(OBJ) : $(TESSERACTDIR)/src/ccmain/pagewalk.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_pagewalk.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/pagewalk.cpp
+
+$(TESSOBJ)ccmain_paragraphs.$(OBJ) : $(TESSERACTDIR)/src/ccmain/paragraphs.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_paragraphs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/paragraphs.cpp
+
+$(TESSOBJ)ccmain_paramsd.$(OBJ) : $(TESSERACTDIR)/src/ccmain/paramsd.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_paramsd.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/paramsd.cpp
+
+$(TESSOBJ)ccmain_par_control.$(OBJ) : $(TESSERACTDIR)/src/ccmain/par_control.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_par_control.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/par_control.cpp
+
+$(TESSOBJ)ccmain_pgedit.$(OBJ) : $(TESSERACTDIR)/src/ccmain/pgedit.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_pgedit.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/pgedit.cpp
+
+$(TESSOBJ)ccmain_reject.$(OBJ) : $(TESSERACTDIR)/src/ccmain/reject.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_reject.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/reject.cpp
+
+$(TESSOBJ)ccmain_resultiterator.$(OBJ) : $(TESSERACTDIR)/src/ccmain/resultiterator.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_resultiterator.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/resultiterator.cpp
+
+$(TESSOBJ)ccmain_superscript.$(OBJ) : $(TESSERACTDIR)/src/ccmain/superscript.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_superscript.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/superscript.cpp
+
+$(TESSOBJ)ccmain_tessbox.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tessbox.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_tessbox.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tessbox.cpp
+
+$(TESSOBJ)ccmain_tessedit.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tessedit.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_tessedit.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tessedit.cpp
+
+$(TESSOBJ)ccmain_tesseractclass.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tesseractclass.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_tesseractclass.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tesseractclass.cpp
+
+$(TESSOBJ)ccmain_tessvars.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tessvars.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_tessvars.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tessvars.cpp
+
+$(TESSOBJ)ccmain_tfacepp.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tfacepp.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_tfacepp.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tfacepp.cpp
+
+$(TESSOBJ)ccmain_thresholder.$(OBJ) : $(TESSERACTDIR)/src/ccmain/thresholder.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_thresholder.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/thresholder.cpp
+
+$(TESSOBJ)ccmain_werdit.$(OBJ) : $(TESSERACTDIR)/src/ccmain/werdit.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_werdit.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/werdit.cpp
+
+$(TESSOBJ)ccmain_adaptions.$(OBJ) : $(TESSERACTDIR)/src/ccmain/adaptions.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_adaptions.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/adaptions.cpp
+
+$(TESSOBJ)ccmain_fixspace.$(OBJ) : $(TESSERACTDIR)/src/ccmain/fixspace.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_fixspace.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/fixspace.cpp
+
+$(TESSOBJ)ccmain_fixxht.$(OBJ) : $(TESSERACTDIR)/src/ccmain/fixxht.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_fixxht.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/fixxht.cpp
+
+$(TESSOBJ)ccmain_recogtraining.$(OBJ) : $(TESSERACTDIR)/src/ccmain/recogtraining.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccmain_recogtraining.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/recogtraining.cpp
+
+$(TESSOBJ)ccstruct_blamer.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/blamer.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_blamer.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/blamer.cpp
+
+$(TESSOBJ)ccstruct_blobbox.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/blobbox.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_blobbox.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/blobbox.cpp
+
+$(TESSOBJ)ccstruct_blobs.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/blobs.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_blobs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/blobs.cpp
+
+$(TESSOBJ)ccstruct_blread.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/blread.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_blread.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/blread.cpp
+
+$(TESSOBJ)ccstruct_boxread.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/boxread.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_boxread.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/boxread.cpp
+
+$(TESSOBJ)ccstruct_boxword.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/boxword.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_boxword.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/boxword.cpp
+
+$(TESSOBJ)ccstruct_ccstruct.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ccstruct.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_ccstruct.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ccstruct.cpp
+
+$(TESSOBJ)ccstruct_coutln.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/coutln.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_coutln.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/coutln.cpp
+
+$(TESSOBJ)ccstruct_detlinefit.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/detlinefit.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_detlinefit.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/detlinefit.cpp
+
+$(TESSOBJ)ccstruct_dppoint.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/dppoint.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_dppoint.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/dppoint.cpp
+
+$(TESSOBJ)ccstruct_imagedata.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/imagedata.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_imagedata.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/imagedata.cpp
+
+$(TESSOBJ)ccstruct_linlsq.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/linlsq.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_linlsq.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/linlsq.cpp
+
+$(TESSOBJ)ccstruct_matrix.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/matrix.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_matrix.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/matrix.cpp
+
+$(TESSOBJ)ccstruct_mod128.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/mod128.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_mod128.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/mod128.cpp
+
+$(TESSOBJ)ccstruct_normalis.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/normalis.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_normalis.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/normalis.cpp
+
+$(TESSOBJ)ccstruct_ocrblock.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ocrblock.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_ocrblock.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ocrblock.cpp
+
+$(TESSOBJ)ccstruct_ocrpara.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ocrpara.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_ocrpara.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ocrpara.cpp
+
+$(TESSOBJ)ccstruct_ocrrow.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ocrrow.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_ocrrow.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ocrrow.cpp
+
+$(TESSOBJ)ccstruct_otsuthr.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/otsuthr.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_otsuthr.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/otsuthr.cpp
+
+$(TESSOBJ)ccstruct_pageres.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/pageres.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_pageres.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/pageres.cpp
+
+$(TESSOBJ)ccstruct_pdblock.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/pdblock.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_pdblock.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/pdblock.cpp
+
+$(TESSOBJ)ccstruct_points.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/points.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_points.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/points.cpp
+
+$(TESSOBJ)ccstruct_polyaprx.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/polyaprx.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_polyaprx.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/polyaprx.cpp
+
+$(TESSOBJ)ccstruct_polyblk.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/polyblk.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_polyblk.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/polyblk.cpp
+
+$(TESSOBJ)ccstruct_quadlsq.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/quadlsq.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_quadlsq.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/quadlsq.cpp
+
+$(TESSOBJ)ccstruct_quspline.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/quspline.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_quspline.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/quspline.cpp
+
+$(TESSOBJ)ccstruct_ratngs.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ratngs.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_ratngs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ratngs.cpp
+
+$(TESSOBJ)ccstruct_rect.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/rect.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_rect.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/rect.cpp
+
+$(TESSOBJ)ccstruct_rejctmap.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/rejctmap.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_rejctmap.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/rejctmap.cpp
+
+$(TESSOBJ)ccstruct_seam.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/seam.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_seam.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/seam.cpp
+
+$(TESSOBJ)ccstruct_split.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/split.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_split.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/split.cpp
+
+$(TESSOBJ)ccstruct_statistc.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/statistc.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_statistc.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/statistc.cpp
+
+$(TESSOBJ)ccstruct_stepblob.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/stepblob.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_stepblob.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/stepblob.cpp
+
+$(TESSOBJ)ccstruct_werd.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/werd.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_werd.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/werd.cpp
+
+$(TESSOBJ)ccstruct_fontinfo.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/fontinfo.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_fontinfo.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/fontinfo.cpp
+
+$(TESSOBJ)ccstruct_params_training_featdef.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/params_training_featdef.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccstruct_params_training_featdef.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/params_training_featdef.cpp
+
+$(TESSOBJ)classify_adaptive.$(OBJ) : $(TESSERACTDIR)/src/classify/adaptive.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_adaptive.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/adaptive.cpp
+
+$(TESSOBJ)classify_adaptmatch.$(OBJ) : $(TESSERACTDIR)/src/classify/adaptmatch.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_adaptmatch.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/adaptmatch.cpp
+
+$(TESSOBJ)classify_blobclass.$(OBJ) : $(TESSERACTDIR)/src/classify/blobclass.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_blobclass.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/blobclass.cpp
+
+$(TESSOBJ)classify_classify.$(OBJ) : $(TESSERACTDIR)/src/classify/classify.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_classify.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/classify.cpp
+
+$(TESSOBJ)classify_cluster.$(OBJ) : $(TESSERACTDIR)/src/classify/cluster.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_cluster.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/cluster.cpp
+
+$(TESSOBJ)classify_clusttool.$(OBJ) : $(TESSERACTDIR)/src/classify/clusttool.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_clusttool.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/clusttool.cpp
+
+$(TESSOBJ)classify_cutoffs.$(OBJ) : $(TESSERACTDIR)/src/classify/cutoffs.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_cutoffs.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/cutoffs.cpp
+
+$(TESSOBJ)classify_float2int.$(OBJ) : $(TESSERACTDIR)/src/classify/float2int.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_float2int.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/float2int.cpp
+
+$(TESSOBJ)classify_featdefs.$(OBJ) : $(TESSERACTDIR)/src/classify/featdefs.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_featdefs.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/featdefs.cpp
+
+$(TESSOBJ)classify_fpoint.$(OBJ) : $(TESSERACTDIR)/src/classify/fpoint.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_fpoint.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/fpoint.cpp
+
+$(TESSOBJ)classify_intfeaturespace.$(OBJ) : $(TESSERACTDIR)/src/classify/intfeaturespace.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_intfeaturespace.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/intfeaturespace.cpp
+
+$(TESSOBJ)classify_intfx.$(OBJ) : $(TESSERACTDIR)/src/classify/intfx.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_intfx.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/intfx.cpp
+
+$(TESSOBJ)classify_intmatcher.$(OBJ) : $(TESSERACTDIR)/src/classify/intmatcher.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_intmatcher.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/intmatcher.cpp
+
+$(TESSOBJ)classify_intproto.$(OBJ) : $(TESSERACTDIR)/src/classify/intproto.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_intproto.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/intproto.cpp
+
+$(TESSOBJ)classify_kdtree.$(OBJ) : $(TESSERACTDIR)/src/classify/kdtree.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_kdtree.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/kdtree.cpp
+
+$(TESSOBJ)classify_mf.$(OBJ) : $(TESSERACTDIR)/src/classify/mf.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_mf.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/mf.cpp
+
+$(TESSOBJ)classify_mfdefs.$(OBJ) : $(TESSERACTDIR)/src/classify/mfdefs.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_mfdefs.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/mfdefs.cpp
+
+$(TESSOBJ)classify_mfoutline.$(OBJ) : $(TESSERACTDIR)/src/classify/mfoutline.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_mfoutline.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/mfoutline.cpp
+
+$(TESSOBJ)classify_mfx.$(OBJ) : $(TESSERACTDIR)/src/classify/mfx.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_mfx.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/mfx.cpp
+
+$(TESSOBJ)classify_normfeat.$(OBJ) : $(TESSERACTDIR)/src/classify/normfeat.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_normfeat.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/normfeat.cpp
+
+$(TESSOBJ)classify_normmatch.$(OBJ) : $(TESSERACTDIR)/src/classify/normmatch.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_normmatch.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/normmatch.cpp
+
+$(TESSOBJ)classify_ocrfeatures.$(OBJ) : $(TESSERACTDIR)/src/classify/ocrfeatures.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_ocrfeatures.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/ocrfeatures.cpp
+
+$(TESSOBJ)classify_outfeat.$(OBJ) : $(TESSERACTDIR)/src/classify/outfeat.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_outfeat.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/outfeat.cpp
+
+$(TESSOBJ)classify_picofeat.$(OBJ) : $(TESSERACTDIR)/src/classify/picofeat.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_picofeat.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/picofeat.cpp
+
+$(TESSOBJ)classify_protos.$(OBJ) : $(TESSERACTDIR)/src/classify/protos.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_protos.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/protos.cpp
+
+$(TESSOBJ)classify_shapeclassifier.$(OBJ) : $(TESSERACTDIR)/src/classify/shapeclassifier.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_shapeclassifier.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/shapeclassifier.cpp
+
+$(TESSOBJ)classify_shapetable.$(OBJ) : $(TESSERACTDIR)/src/classify/shapetable.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_shapetable.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/shapetable.cpp
+
+$(TESSOBJ)classify_tessclassifier.$(OBJ) : $(TESSERACTDIR)/src/classify/tessclassifier.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_tessclassifier.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/tessclassifier.cpp
+
+$(TESSOBJ)classify_trainingsample.$(OBJ) : $(TESSERACTDIR)/src/classify/trainingsample.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)classify_trainingsample.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/trainingsample.cpp
+
+$(TESSOBJ)cutil_cutil_class.$(OBJ) : $(TESSERACTDIR)/src/cutil/cutil_class.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)cutil_cutil_class.$(OBJ) $(C_) $(TESSERACTDIR)/src/cutil/cutil_class.cpp
+
+$(TESSOBJ)cutil_emalloc.$(OBJ) : $(TESSERACTDIR)/src/cutil/emalloc.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)cutil_emalloc.$(OBJ) $(C_) $(TESSERACTDIR)/src/cutil/emalloc.cpp
+
+$(TESSOBJ)cutil_oldlist.$(OBJ) : $(TESSERACTDIR)/src/cutil/oldlist.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)cutil_oldlist.$(OBJ) $(C_) $(TESSERACTDIR)/src/cutil/oldlist.cpp
+
+$(TESSOBJ)dict_context.$(OBJ) : $(TESSERACTDIR)/src/dict/context.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)dict_context.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/context.cpp
+
+$(TESSOBJ)dict_dawg.$(OBJ) : $(TESSERACTDIR)/src/dict/dawg.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)dict_dawg.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/dawg.cpp
+
+$(TESSOBJ)dict_dawg_cache.$(OBJ) : $(TESSERACTDIR)/src/dict/dawg_cache.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)dict_dawg_cache.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/dawg_cache.cpp
+
+$(TESSOBJ)dict_dict.$(OBJ) : $(TESSERACTDIR)/src/dict/dict.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)dict_dict.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/dict.cpp
+
+$(TESSOBJ)dict_permdawg.$(OBJ) : $(TESSERACTDIR)/src/dict/permdawg.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)dict_permdawg.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/permdawg.cpp
+
+$(TESSOBJ)dict_stopper.$(OBJ) : $(TESSERACTDIR)/src/dict/stopper.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)dict_stopper.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/stopper.cpp
+
+$(TESSOBJ)dict_trie.$(OBJ) : $(TESSERACTDIR)/src/dict/trie.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)dict_trie.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/trie.cpp
+
+$(TESSOBJ)dict_hyphen.$(OBJ) : $(TESSERACTDIR)/src/dict/hyphen.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)dict_hyphen.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/hyphen.cpp
+
+$(TESSOBJ)textord_alignedblob.$(OBJ) : $(TESSERACTDIR)/src/textord/alignedblob.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_alignedblob.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/alignedblob.cpp
+
+$(TESSOBJ)textord_baselinedetect.$(OBJ) : $(TESSERACTDIR)/src/textord/baselinedetect.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_baselinedetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/baselinedetect.cpp
+
+$(TESSOBJ)textord_bbgrid.$(OBJ) : $(TESSERACTDIR)/src/textord/bbgrid.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_bbgrid.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/bbgrid.cpp
+
+$(TESSOBJ)textord_blkocc.$(OBJ) : $(TESSERACTDIR)/src/textord/blkocc.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_blkocc.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/blkocc.cpp
+
+$(TESSOBJ)textord_blobgrid.$(OBJ) : $(TESSERACTDIR)/src/textord/blobgrid.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_blobgrid.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/blobgrid.cpp
+
+$(TESSOBJ)textord_ccnontextdetect.$(OBJ) : $(TESSERACTDIR)/src/textord/ccnontextdetect.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_ccnontextdetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/ccnontextdetect.cpp
+
+$(TESSOBJ)textord_cjkpitch.$(OBJ) : $(TESSERACTDIR)/src/textord/cjkpitch.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_cjkpitch.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/cjkpitch.cpp
+
+$(TESSOBJ)textord_colfind.$(OBJ) : $(TESSERACTDIR)/src/textord/colfind.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_colfind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/colfind.cpp
+
+$(TESSOBJ)textord_colpartition.$(OBJ) : $(TESSERACTDIR)/src/textord/colpartition.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_colpartition.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/colpartition.cpp
+
+$(TESSOBJ)textord_colpartitionset.$(OBJ) : $(TESSERACTDIR)/src/textord/colpartitionset.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_colpartitionset.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/colpartitionset.cpp
+
+$(TESSOBJ)textord_colpartitiongrid.$(OBJ) : $(TESSERACTDIR)/src/textord/colpartitiongrid.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_colpartitiongrid.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/colpartitiongrid.cpp
+
+$(TESSOBJ)textord_devanagari_processing.$(OBJ) : $(TESSERACTDIR)/src/textord/devanagari_processing.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_devanagari_processing.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/devanagari_processing.cpp
+
+$(TESSOBJ)textord_drawtord.$(OBJ) : $(TESSERACTDIR)/src/textord/drawtord.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_drawtord.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/drawtord.cpp
+
+$(TESSOBJ)textord_edgblob.$(OBJ) : $(TESSERACTDIR)/src/textord/edgblob.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_edgblob.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/edgblob.cpp
+
+$(TESSOBJ)textord_edgloop.$(OBJ) : $(TESSERACTDIR)/src/textord/edgloop.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_edgloop.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/edgloop.cpp
+
+$(TESSOBJ)textord_fpchop.$(OBJ) : $(TESSERACTDIR)/src/textord/fpchop.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_fpchop.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/fpchop.cpp
+
+$(TESSOBJ)textord_gap_map.$(OBJ) : $(TESSERACTDIR)/src/textord/gap_map.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_gap_map.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/gap_map.cpp
+
+$(TESSOBJ)textord_imagefind.$(OBJ) : $(TESSERACTDIR)/src/textord/imagefind.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_imagefind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/imagefind.cpp
+
+$(TESSOBJ)textord_linefind.$(OBJ) : $(TESSERACTDIR)/src/textord/linefind.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_linefind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/linefind.cpp
+
+$(TESSOBJ)textord_makerow.$(OBJ) : $(TESSERACTDIR)/src/textord/makerow.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_makerow.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/makerow.cpp
+
+$(TESSOBJ)textord_oldbasel.$(OBJ) : $(TESSERACTDIR)/src/textord/oldbasel.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_oldbasel.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/oldbasel.cpp
+
+$(TESSOBJ)textord_pithsync.$(OBJ) : $(TESSERACTDIR)/src/textord/pithsync.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_pithsync.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/pithsync.cpp
+
+$(TESSOBJ)textord_pitsync1.$(OBJ) : $(TESSERACTDIR)/src/textord/pitsync1.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_pitsync1.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/pitsync1.cpp
+
+$(TESSOBJ)textord_scanedg.$(OBJ) : $(TESSERACTDIR)/src/textord/scanedg.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_scanedg.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/scanedg.cpp
+
+$(TESSOBJ)textord_sortflts.$(OBJ) : $(TESSERACTDIR)/src/textord/sortflts.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_sortflts.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/sortflts.cpp
+
+$(TESSOBJ)textord_strokewidth.$(OBJ) : $(TESSERACTDIR)/src/textord/strokewidth.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_strokewidth.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/strokewidth.cpp
+
+$(TESSOBJ)textord_tabfind.$(OBJ) : $(TESSERACTDIR)/src/textord/tabfind.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_tabfind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tabfind.cpp
+
+$(TESSOBJ)textord_tablefind.$(OBJ) : $(TESSERACTDIR)/src/textord/tablefind.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_tablefind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tablefind.cpp
+
+$(TESSOBJ)textord_tabvector.$(OBJ) : $(TESSERACTDIR)/src/textord/tabvector.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_tabvector.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tabvector.cpp
+
+$(TESSOBJ)textord_tablerecog.$(OBJ) : $(TESSERACTDIR)/src/textord/tablerecog.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_tablerecog.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tablerecog.cpp
+
+$(TESSOBJ)textord_textlineprojection.$(OBJ) : $(TESSERACTDIR)/src/textord/textlineprojection.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_textlineprojection.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/textlineprojection.cpp
+
+$(TESSOBJ)textord_textord.$(OBJ) : $(TESSERACTDIR)/src/textord/textord.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_textord.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/textord.cpp
+
+$(TESSOBJ)textord_topitch.$(OBJ) : $(TESSERACTDIR)/src/textord/topitch.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_topitch.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/topitch.cpp
+
+$(TESSOBJ)textord_tordmain.$(OBJ) : $(TESSERACTDIR)/src/textord/tordmain.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_tordmain.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tordmain.cpp
+
+$(TESSOBJ)textord_tospace.$(OBJ) : $(TESSERACTDIR)/src/textord/tospace.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_tospace.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tospace.cpp
+
+$(TESSOBJ)textord_tovars.$(OBJ) : $(TESSERACTDIR)/src/textord/tovars.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_tovars.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tovars.cpp
+
+$(TESSOBJ)textord_underlin.$(OBJ) : $(TESSERACTDIR)/src/textord/underlin.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_underlin.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/underlin.cpp
+
+$(TESSOBJ)textord_wordseg.$(OBJ) : $(TESSERACTDIR)/src/textord/wordseg.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_wordseg.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/wordseg.cpp
+
+$(TESSOBJ)textord_workingpartset.$(OBJ) : $(TESSERACTDIR)/src/textord/workingpartset.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_workingpartset.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/workingpartset.cpp
+
+$(TESSOBJ)textord_equationdetectbase.$(OBJ) : $(TESSERACTDIR)/src/textord/equationdetectbase.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)textord_equationdetectbase.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/equationdetectbase.cpp
+
+$(TESSOBJ)viewer_scrollview.$(OBJ) : $(TESSERACTDIR)/src/viewer/scrollview.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)viewer_scrollview.$(OBJ) $(C_) $(TESSERACTDIR)/src/viewer/scrollview.cpp
+
+$(TESSOBJ)viewer_svmnode.$(OBJ) : $(TESSERACTDIR)/src/viewer/svmnode.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)viewer_svmnode.$(OBJ) $(C_) $(TESSERACTDIR)/src/viewer/svmnode.cpp
+
+$(TESSOBJ)viewer_svutil.$(OBJ) : $(TESSERACTDIR)/src/viewer/svutil.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)viewer_svutil.$(OBJ) $(C_) $(TESSERACTDIR)/src/viewer/svutil.cpp
+
+$(TESSOBJ)wordrec_chop.$(OBJ) : $(TESSERACTDIR)/src/wordrec/chop.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_chop.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/chop.cpp
+
+$(TESSOBJ)wordrec_chopper.$(OBJ) : $(TESSERACTDIR)/src/wordrec/chopper.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_chopper.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/chopper.cpp
+
+$(TESSOBJ)wordrec_findseam.$(OBJ) : $(TESSERACTDIR)/src/wordrec/findseam.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_findseam.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/findseam.cpp
+
+$(TESSOBJ)wordrec_gradechop.$(OBJ) : $(TESSERACTDIR)/src/wordrec/gradechop.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_gradechop.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/gradechop.cpp
+
+$(TESSOBJ)wordrec_tface.$(OBJ) : $(TESSERACTDIR)/src/wordrec/tface.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_tface.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/tface.cpp
+
+$(TESSOBJ)wordrec_wordrec.$(OBJ) : $(TESSERACTDIR)/src/wordrec/wordrec.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_wordrec.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/wordrec.cpp
+
+$(TESSOBJ)wordrec_associate.$(OBJ) : $(TESSERACTDIR)/src/wordrec/associate.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_associate.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/associate.cpp
+
+$(TESSOBJ)wordrec_drawfx.$(OBJ) : $(TESSERACTDIR)/src/wordrec/drawfx.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_drawfx.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/drawfx.cpp
+
+$(TESSOBJ)wordrec_language_model.$(OBJ) : $(TESSERACTDIR)/src/wordrec/language_model.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_language_model.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/language_model.cpp
+
+$(TESSOBJ)wordrec_lm_consistency.$(OBJ) : $(TESSERACTDIR)/src/wordrec/lm_consistency.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_lm_consistency.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/lm_consistency.cpp
+
+$(TESSOBJ)wordrec_lm_pain_points.$(OBJ) : $(TESSERACTDIR)/src/wordrec/lm_pain_points.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_lm_pain_points.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/lm_pain_points.cpp
+
+$(TESSOBJ)wordrec_lm_state.$(OBJ) : $(TESSERACTDIR)/src/wordrec/lm_state.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_lm_state.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/lm_state.cpp
+
+$(TESSOBJ)wordrec_outlines.$(OBJ) : $(TESSERACTDIR)/src/wordrec/outlines.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_outlines.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/outlines.cpp
+
+$(TESSOBJ)wordrec_pieces.$(OBJ) : $(TESSERACTDIR)/src/wordrec/pieces.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_pieces.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/pieces.cpp
+
+$(TESSOBJ)wordrec_params_model.$(OBJ) : $(TESSERACTDIR)/src/wordrec/params_model.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_params_model.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/params_model.cpp
+
+$(TESSOBJ)wordrec_plotedges.$(OBJ) : $(TESSERACTDIR)/src/wordrec/plotedges.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_plotedges.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/plotedges.cpp
+
+$(TESSOBJ)wordrec_render.$(OBJ) : $(TESSERACTDIR)/src/wordrec/render.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_render.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/render.cpp
+
+$(TESSOBJ)wordrec_segsearch.$(OBJ) : $(TESSERACTDIR)/src/wordrec/segsearch.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_segsearch.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/segsearch.cpp
+
+$(TESSOBJ)wordrec_wordclass.$(OBJ) : $(TESSERACTDIR)/src/wordrec/wordclass.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)wordrec_wordclass.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/wordclass.cpp
+
+$(TESSOBJ)ccutil_ambigs.$(OBJ) : $(TESSERACTDIR)/src/ccutil/ambigs.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_ambigs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/ambigs.cpp
+
+$(TESSOBJ)ccutil_ccutil.$(OBJ) : $(TESSERACTDIR)/src/ccutil/ccutil.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_ccutil.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/ccutil.cpp
+
+$(TESSOBJ)ccutil_clst.$(OBJ) : $(TESSERACTDIR)/src/ccutil/clst.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_clst.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/clst.cpp
+
+$(TESSOBJ)ccutil_elst2.$(OBJ) : $(TESSERACTDIR)/src/ccutil/elst2.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_elst2.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/elst2.cpp
+
+$(TESSOBJ)ccutil_elst.$(OBJ) : $(TESSERACTDIR)/src/ccutil/elst.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_elst.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/elst.cpp
+
+$(TESSOBJ)ccutil_errcode.$(OBJ) : $(TESSERACTDIR)/src/ccutil/errcode.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_errcode.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/errcode.cpp
+
+$(TESSOBJ)ccutil_mainblk.$(OBJ) : $(TESSERACTDIR)/src/ccutil/mainblk.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_mainblk.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/mainblk.cpp
+
+$(TESSOBJ)ccutil_serialis.$(OBJ) : $(TESSERACTDIR)/src/ccutil/serialis.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_serialis.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/serialis.cpp
+
+$(TESSOBJ)ccutil_strngs.$(OBJ) : $(TESSERACTDIR)/src/ccutil/strngs.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_strngs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/strngs.cpp
+
+$(TESSOBJ)ccutil_scanutils.$(OBJ) : $(TESSERACTDIR)/src/ccutil/scanutils.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_scanutils.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/scanutils.cpp
+
+$(TESSOBJ)ccutil_tessdatamanager.$(OBJ) : $(TESSERACTDIR)/src/ccutil/tessdatamanager.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_tessdatamanager.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/tessdatamanager.cpp
+
+$(TESSOBJ)ccutil_tprintf.$(OBJ) : $(TESSERACTDIR)/src/ccutil/tprintf.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_tprintf.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/tprintf.cpp
+
+$(TESSOBJ)ccutil_unichar.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unichar.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_unichar.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unichar.cpp
+
+$(TESSOBJ)ccutil_unicharcompress.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unicharcompress.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_unicharcompress.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unicharcompress.cpp
+
+$(TESSOBJ)ccutil_unicharmap.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unicharmap.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_unicharmap.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unicharmap.cpp
+
+$(TESSOBJ)ccutil_unicharset.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unicharset.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_unicharset.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unicharset.cpp
+
+$(TESSOBJ)ccutil_params.$(OBJ) : $(TESSERACTDIR)/src/ccutil/params.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_params.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/params.cpp
+
+$(TESSOBJ)ccutil_bitvector.$(OBJ) : $(TESSERACTDIR)/src/ccutil/bitvector.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_bitvector.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/bitvector.cpp
+
+$(TESSOBJ)ccutil_indexmapbidi.$(OBJ) : $(TESSERACTDIR)/src/ccutil/indexmapbidi.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_indexmapbidi.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/indexmapbidi.cpp
+
+$(TESSOBJ)ccutil_universalambigs.$(OBJ) : $(TESSERACTDIR)/src/ccutil/universalambigs.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)ccutil_universalambigs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/universalambigs.cpp
+
+$(TESSOBJ)lstm_convolve.$(OBJ) : $(TESSERACTDIR)/src/lstm/convolve.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_convolve.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/convolve.cpp
+
+$(TESSOBJ)lstm_fullyconnected.$(OBJ) : $(TESSERACTDIR)/src/lstm/fullyconnected.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_fullyconnected.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/fullyconnected.cpp
+
+$(TESSOBJ)lstm_functions.$(OBJ) : $(TESSERACTDIR)/src/lstm/functions.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_functions.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/functions.cpp
+
+$(TESSOBJ)lstm_input.$(OBJ) : $(TESSERACTDIR)/src/lstm/input.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_input.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/input.cpp
+
+$(TESSOBJ)lstm_lstm.$(OBJ) : $(TESSERACTDIR)/src/lstm/lstm.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_lstm.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/lstm.cpp
+
+$(TESSOBJ)lstm_lstmrecognizer.$(OBJ) : $(TESSERACTDIR)/src/lstm/lstmrecognizer.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_lstmrecognizer.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/lstmrecognizer.cpp
+
+$(TESSOBJ)lstm_maxpool.$(OBJ) : $(TESSERACTDIR)/src/lstm/maxpool.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_maxpool.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/maxpool.cpp
+
+$(TESSOBJ)lstm_network.$(OBJ) : $(TESSERACTDIR)/src/lstm/network.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_network.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/network.cpp
+
+$(TESSOBJ)lstm_networkio.$(OBJ) : $(TESSERACTDIR)/src/lstm/networkio.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_networkio.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/networkio.cpp
+
+$(TESSOBJ)lstm_parallel.$(OBJ) : $(TESSERACTDIR)/src/lstm/parallel.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_parallel.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/parallel.cpp
+
+$(TESSOBJ)lstm_plumbing.$(OBJ) : $(TESSERACTDIR)/src/lstm/plumbing.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_plumbing.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/plumbing.cpp
+
+$(TESSOBJ)lstm_recodebeam.$(OBJ) : $(TESSERACTDIR)/src/lstm/recodebeam.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_recodebeam.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/recodebeam.cpp
+
+$(TESSOBJ)lstm_reconfig.$(OBJ) : $(TESSERACTDIR)/src/lstm/reconfig.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_reconfig.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/reconfig.cpp
+
+$(TESSOBJ)lstm_reversed.$(OBJ) : $(TESSERACTDIR)/src/lstm/reversed.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_reversed.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/reversed.cpp
+
+$(TESSOBJ)lstm_series.$(OBJ) : $(TESSERACTDIR)/src/lstm/series.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_series.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/series.cpp
+
+$(TESSOBJ)lstm_stridemap.$(OBJ) : $(TESSERACTDIR)/src/lstm/stridemap.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_stridemap.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/stridemap.cpp
+
+$(TESSOBJ)lstm_tfnetwork.$(OBJ) : $(TESSERACTDIR)/src/lstm/tfnetwork.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_tfnetwork.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/tfnetwork.cpp
+
+$(TESSOBJ)lstm_weightmatrix.$(OBJ) : $(TESSERACTDIR)/src/lstm/weightmatrix.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)lstm_weightmatrix.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/weightmatrix.cpp
+
+$(TESSOBJ)arch_dotproduct.$(OBJ) : $(TESSERACTDIR)/src/arch/dotproduct.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSO_)arch_dotproduct.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/dotproduct.cpp
+
+$(TESSOBJ)arch_dotproductavx.$(OBJ): $(TESSERACTDIR)/src/arch/dotproductavx.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSAVX) $(TESSO_)arch_dotproductavx.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/dotproductavx.cpp
+
+$(TESSOBJ)arch_dotproductfma.$(OBJ): $(TESSERACTDIR)/src/arch/dotproductfma.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSFMA) $(TESSO_)arch_dotproductfma.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/dotproductfma.cpp
+
+$(TESSOBJ)arch_dotproductsse.$(OBJ): $(TESSERACTDIR)/src/arch/dotproductsse.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSSSE41) $(TESSO_)arch_dotproductsse.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/dotproductsse.cpp
+
+$(TESSOBJ)arch_intsimdmatrixavx2.$(OBJ): $(TESSERACTDIR)/src/arch/intsimdmatrixavx2.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSAVX2) $(TESSO_)arch_intsimdmatrixavx2.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/intsimdmatrixavx2.cpp
+
+$(TESSOBJ)arch_intsimdmatrixsse.$(OBJ): $(TESSERACTDIR)/src/arch/intsimdmatrixsse.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSSSE41) $(TESSO_)arch_intsimdmatrixsse.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/intsimdmatrixsse.cpp
+
+$(TESSOBJ)arch_intsimdmatrixneon.$(OBJ): $(TESSERACTDIR)/src/arch/intsimdmatrixneon.cpp $(TESSDEPS)
+	$(TESSCXX) $(TESSNEON) $(TESSO_)arch_intsimdmatrixneon.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/intsimdmatrixneon.cpp
+
+# Targets needed for lstm engine
+TESSERACT_OBJS_1=\
+	$(TESSOBJ)api_altorenderer.$(OBJ)\
+	$(TESSOBJ)api_baseapi.$(OBJ)\
+	$(TESSOBJ)api_capi.$(OBJ)\
+	$(TESSOBJ)api_hocrrenderer.$(OBJ)\
+	$(TESSOBJ)api_lstmboxrenderer.$(OBJ)\
+	$(TESSOBJ)api_pdfrenderer.$(OBJ)\
+	$(TESSOBJ)api_renderer.$(OBJ)\
+	$(TESSOBJ)api_wordstrboxrenderer.$(OBJ)\
+	$(TESSOBJ)arch_intsimdmatrix.$(OBJ)\
+	$(TESSOBJ)arch_simddetect.$(OBJ)\
+	$(TESSOBJ)ccmain_applybox.$(OBJ)\
+	$(TESSOBJ)ccmain_control.$(OBJ)\
+	$(TESSOBJ)ccmain_linerec.$(OBJ)\
+	$(TESSOBJ)ccmain_ltrresultiterator.$(OBJ)\
+	$(TESSOBJ)ccmain_mutableiterator.$(OBJ)\
+	$(TESSOBJ)ccmain_output.$(OBJ)\
+	$(TESSOBJ)ccmain_pageiterator.$(OBJ)\
+	$(TESSOBJ)ccmain_pagesegmain.$(OBJ)\
+	$(TESSOBJ)ccmain_pagewalk.$(OBJ)\
+	$(TESSOBJ)ccmain_paragraphs.$(OBJ)\
+	$(TESSOBJ)ccmain_paramsd.$(OBJ)\
+	$(TESSOBJ)ccmain_pgedit.$(OBJ)\
+	$(TESSOBJ)ccmain_reject.$(OBJ)\
+	$(TESSOBJ)ccmain_resultiterator.$(OBJ)\
+	$(TESSOBJ)ccmain_tessedit.$(OBJ)\
+	$(TESSOBJ)ccmain_tesseractclass.$(OBJ)\
+	$(TESSOBJ)ccmain_tessvars.$(OBJ)\
+	$(TESSOBJ)ccmain_thresholder.$(OBJ)\
+	$(TESSOBJ)ccmain_werdit.$(OBJ)\
+
+
+TESSERACT_OBJS_2 = \
+	$(TESSOBJ)ccstruct_blamer.$(OBJ)\
+	$(TESSOBJ)ccstruct_blobbox.$(OBJ)\
+	$(TESSOBJ)ccstruct_blobs.$(OBJ)\
+	$(TESSOBJ)ccstruct_blread.$(OBJ)\
+	$(TESSOBJ)ccstruct_boxread.$(OBJ)\
+	$(TESSOBJ)ccstruct_boxword.$(OBJ)\
+	$(TESSOBJ)ccstruct_ccstruct.$(OBJ)\
+	$(TESSOBJ)ccstruct_coutln.$(OBJ)\
+	$(TESSOBJ)ccstruct_detlinefit.$(OBJ)\
+	$(TESSOBJ)ccstruct_dppoint.$(OBJ)\
+	$(TESSOBJ)ccstruct_imagedata.$(OBJ)\
+	$(TESSOBJ)ccstruct_linlsq.$(OBJ)\
+	$(TESSOBJ)ccstruct_matrix.$(OBJ)\
+	$(TESSOBJ)ccstruct_mod128.$(OBJ)\
+	$(TESSOBJ)ccstruct_normalis.$(OBJ)\
+	$(TESSOBJ)ccstruct_ocrblock.$(OBJ)\
+	$(TESSOBJ)ccstruct_ocrpara.$(OBJ)\
+	$(TESSOBJ)ccstruct_ocrrow.$(OBJ)\
+	$(TESSOBJ)ccstruct_otsuthr.$(OBJ)\
+	$(TESSOBJ)ccstruct_pageres.$(OBJ)\
+	$(TESSOBJ)ccstruct_pdblock.$(OBJ)\
+	$(TESSOBJ)ccstruct_points.$(OBJ)\
+	$(TESSOBJ)ccstruct_polyaprx.$(OBJ)\
+	$(TESSOBJ)ccstruct_polyblk.$(OBJ)\
+	$(TESSOBJ)ccstruct_quadlsq.$(OBJ)\
+	$(TESSOBJ)ccstruct_quspline.$(OBJ)\
+	$(TESSOBJ)ccstruct_ratngs.$(OBJ)\
+	$(TESSOBJ)ccstruct_rect.$(OBJ)\
+	$(TESSOBJ)ccstruct_rejctmap.$(OBJ)\
+	$(TESSOBJ)ccstruct_seam.$(OBJ)\
+	$(TESSOBJ)ccstruct_split.$(OBJ)\
+	$(TESSOBJ)ccstruct_statistc.$(OBJ)\
+	$(TESSOBJ)ccstruct_stepblob.$(OBJ)\
+	$(TESSOBJ)ccstruct_werd.$(OBJ)
+
+TESSERACT_OBJS_3=\
+	$(TESSOBJ)classify_classify.$(OBJ)\
+	$(TESSOBJ)dict_context.$(OBJ)\
+	$(TESSOBJ)dict_dawg.$(OBJ)\
+	$(TESSOBJ)dict_dawg_cache.$(OBJ)\
+	$(TESSOBJ)dict_dict.$(OBJ)\
+	$(TESSOBJ)dict_permdawg.$(OBJ)\
+	$(TESSOBJ)dict_stopper.$(OBJ)\
+	$(TESSOBJ)dict_trie.$(OBJ)\
+	$(TESSOBJ)textord_alignedblob.$(OBJ)\
+	$(TESSOBJ)textord_baselinedetect.$(OBJ)\
+	$(TESSOBJ)textord_bbgrid.$(OBJ)\
+	$(TESSOBJ)textord_blkocc.$(OBJ)\
+	$(TESSOBJ)textord_blobgrid.$(OBJ)\
+	$(TESSOBJ)textord_ccnontextdetect.$(OBJ)\
+	$(TESSOBJ)textord_cjkpitch.$(OBJ)\
+	$(TESSOBJ)textord_colfind.$(OBJ)\
+	$(TESSOBJ)textord_colpartition.$(OBJ)\
+	$(TESSOBJ)textord_colpartitionset.$(OBJ)\
+	$(TESSOBJ)textord_colpartitiongrid.$(OBJ)\
+	$(TESSOBJ)textord_devanagari_processing.$(OBJ)\
+	$(TESSOBJ)textord_drawtord.$(OBJ)\
+	$(TESSOBJ)textord_edgblob.$(OBJ)\
+	$(TESSOBJ)textord_edgloop.$(OBJ)\
+	$(TESSOBJ)textord_fpchop.$(OBJ)\
+	$(TESSOBJ)textord_gap_map.$(OBJ)\
+	$(TESSOBJ)textord_imagefind.$(OBJ)\
+	$(TESSOBJ)textord_linefind.$(OBJ)\
+	$(TESSOBJ)textord_makerow.$(OBJ)\
+	$(TESSOBJ)textord_oldbasel.$(OBJ)\
+	$(TESSOBJ)textord_pithsync.$(OBJ)\
+	$(TESSOBJ)textord_pitsync1.$(OBJ)\
+	$(TESSOBJ)textord_scanedg.$(OBJ)\
+	$(TESSOBJ)textord_sortflts.$(OBJ)\
+	$(TESSOBJ)textord_strokewidth.$(OBJ)\
+	$(TESSOBJ)textord_tabfind.$(OBJ)\
+	$(TESSOBJ)textord_tablefind.$(OBJ)\
+	$(TESSOBJ)textord_tabvector.$(OBJ)\
+	$(TESSOBJ)textord_tablerecog.$(OBJ)\
+	$(TESSOBJ)textord_textlineprojection.$(OBJ)\
+	$(TESSOBJ)textord_textord.$(OBJ)\
+	$(TESSOBJ)textord_topitch.$(OBJ)\
+	$(TESSOBJ)textord_tordmain.$(OBJ)\
+	$(TESSOBJ)textord_tospace.$(OBJ)\
+	$(TESSOBJ)textord_tovars.$(OBJ)\
+	$(TESSOBJ)textord_underlin.$(OBJ)\
+	$(TESSOBJ)textord_wordseg.$(OBJ)\
+	$(TESSOBJ)textord_workingpartset.$(OBJ)\
+
+TESSERACT_OBJS_4=\
+	$(TESSOBJ)viewer_scrollview.$(OBJ)\
+	$(TESSOBJ)viewer_svmnode.$(OBJ)\
+	$(TESSOBJ)viewer_svutil.$(OBJ)\
+	$(TESSOBJ)wordrec_tface.$(OBJ)\
+	$(TESSOBJ)wordrec_wordrec.$(OBJ)\
+	$(TESSOBJ)ccutil_ccutil.$(OBJ)\
+	$(TESSOBJ)ccutil_clst.$(OBJ)\
+	$(TESSOBJ)ccutil_elst2.$(OBJ)\
+	$(TESSOBJ)ccutil_elst.$(OBJ)\
+	$(TESSOBJ)ccutil_errcode.$(OBJ)\
+	$(TESSOBJ)ccutil_mainblk.$(OBJ)\
+	$(TESSOBJ)ccutil_serialis.$(OBJ)\
+	$(TESSOBJ)ccutil_strngs.$(OBJ)\
+	$(TESSOBJ)ccutil_scanutils.$(OBJ)\
+	$(TESSOBJ)ccutil_tessdatamanager.$(OBJ)\
+	$(TESSOBJ)ccutil_tprintf.$(OBJ)\
+	$(TESSOBJ)ccutil_unichar.$(OBJ)\
+	$(TESSOBJ)ccutil_unicharcompress.$(OBJ)\
+	$(TESSOBJ)ccutil_unicharmap.$(OBJ)\
+	$(TESSOBJ)ccutil_unicharset.$(OBJ)\
+	$(TESSOBJ)ccutil_params.$(OBJ)\
+	$(TESSOBJ)lstm_convolve.$(OBJ)\
+	$(TESSOBJ)lstm_fullyconnected.$(OBJ)\
+	$(TESSOBJ)lstm_functions.$(OBJ)\
+	$(TESSOBJ)lstm_input.$(OBJ)\
+	$(TESSOBJ)lstm_lstm.$(OBJ)\
+	$(TESSOBJ)lstm_lstmrecognizer.$(OBJ)\
+	$(TESSOBJ)lstm_maxpool.$(OBJ)\
+	$(TESSOBJ)lstm_network.$(OBJ)\
+	$(TESSOBJ)lstm_networkio.$(OBJ)\
+	$(TESSOBJ)lstm_parallel.$(OBJ)\
+	$(TESSOBJ)lstm_plumbing.$(OBJ)\
+	$(TESSOBJ)lstm_recodebeam.$(OBJ)\
+	$(TESSOBJ)lstm_reconfig.$(OBJ)\
+	$(TESSOBJ)lstm_reversed.$(OBJ)\
+	$(TESSOBJ)lstm_series.$(OBJ)\
+	$(TESSOBJ)lstm_stridemap.$(OBJ)\
+	$(TESSOBJ)lstm_tfnetwork.$(OBJ)\
+	$(TESSOBJ)lstm_weightmatrix.$(OBJ)\
+	$(TESSOBJ)arch_dotproduct.$(OBJ)\
+	$(TESSOBJ)arch_dotproductavx.$(OBJ)\
+	$(TESSOBJ)arch_intsimdmatrixavx2.$(OBJ)\
+	$(TESSOBJ)arch_dotproductfma.$(OBJ)\
+	$(TESSOBJ)arch_dotproductsse.$(OBJ)\
+	$(TESSOBJ)arch_intsimdmatrixsse.$(OBJ)\
+	$(TESSOBJ)arch_intsimdmatrixneon.$(OBJ)
+
+# Targets needed for TESSERACT_LEGACY
+TESSERACT_LEGACY_OBJS=\
+	$(TESSOBJ)ccmain_adaptions.$(OBJ)\
+	$(TESSOBJ)ccmain_docqual.$(OBJ)\
+	$(TESSOBJ)ccmain_equationdetect.$(OBJ)\
+	$(TESSOBJ)ccmain_fixspace.$(OBJ)\
+	$(TESSOBJ)ccmain_fixxht.$(OBJ)\
+	$(TESSOBJ)ccmain_osdetect.$(OBJ)\
+	$(TESSOBJ)ccmain_par_control.$(OBJ)\
+	$(TESSOBJ)ccmain_recogtraining.$(OBJ)\
+	$(TESSOBJ)ccmain_superscript.$(OBJ)\
+	$(TESSOBJ)ccmain_tessbox.$(OBJ)\
+	$(TESSOBJ)ccmain_tfacepp.$(OBJ)\
+	$(TESSOBJ)ccstruct_fontinfo.$(OBJ)\
+	$(TESSOBJ)ccstruct_params_training_featdef.$(OBJ)\
+	$(TESSOBJ)ccutil_ambigs.$(OBJ)\
+	$(TESSOBJ)ccutil_bitvector.$(OBJ)\
+	$(TESSOBJ)ccutil_indexmapbidi.$(OBJ)\
+	$(TESSOBJ)ccutil_universalambigs.$(OBJ)\
+	$(TESSOBJ)classify_adaptive.$(OBJ)\
+	$(TESSOBJ)classify_adaptmatch.$(OBJ)\
+	$(TESSOBJ)classify_blobclass.$(OBJ)\
+	$(TESSOBJ)classify_cluster.$(OBJ)\
+	$(TESSOBJ)classify_clusttool.$(OBJ)\
+	$(TESSOBJ)classify_cutoffs.$(OBJ)\
+	$(TESSOBJ)classify_featdefs.$(OBJ)\
+	$(TESSOBJ)classify_float2int.$(OBJ)\
+	$(TESSOBJ)classify_fpoint.$(OBJ)\
+	$(TESSOBJ)classify_intfeaturespace.$(OBJ)\
+	$(TESSOBJ)classify_intfx.$(OBJ)\
+	$(TESSOBJ)classify_intmatcher.$(OBJ)\
+	$(TESSOBJ)classify_intproto.$(OBJ)\
+	$(TESSOBJ)classify_kdtree.$(OBJ)\
+	$(TESSOBJ)classify_mf.$(OBJ)\
+	$(TESSOBJ)classify_mfdefs.$(OBJ)\
+	$(TESSOBJ)classify_mfoutline.$(OBJ)\
+	$(TESSOBJ)classify_mfx.$(OBJ)\
+	$(TESSOBJ)classify_normfeat.$(OBJ)\
+	$(TESSOBJ)classify_normmatch.$(OBJ)\
+	$(TESSOBJ)classify_ocrfeatures.$(OBJ)\
+	$(TESSOBJ)classify_outfeat.$(OBJ)\
+	$(TESSOBJ)classify_picofeat.$(OBJ)\
+	$(TESSOBJ)classify_protos.$(OBJ)\
+	$(TESSOBJ)classify_shapeclassifier.$(OBJ)\
+	$(TESSOBJ)classify_shapetable.$(OBJ)\
+	$(TESSOBJ)classify_tessclassifier.$(OBJ)\
+	$(TESSOBJ)classify_trainingsample.$(OBJ)\
+	$(TESSOBJ)cutil_oldlist.$(OBJ)\
+	$(TESSOBJ)dict_hyphen.$(OBJ)\
+	$(TESSOBJ)textord_equationdetectbase.$(OBJ)\
+	$(TESSOBJ)wordrec_associate.$(OBJ)\
+	$(TESSOBJ)wordrec_chop.$(OBJ)\
+	$(TESSOBJ)wordrec_chopper.$(OBJ)\
+	$(TESSOBJ)wordrec_drawfx.$(OBJ)\
+	$(TESSOBJ)wordrec_findseam.$(OBJ)\
+	$(TESSOBJ)wordrec_gradechop.$(OBJ)\
+	$(TESSOBJ)wordrec_language_model.$(OBJ)\
+	$(TESSOBJ)wordrec_lm_consistency.$(OBJ)\
+	$(TESSOBJ)wordrec_lm_pain_points.$(OBJ)\
+	$(TESSOBJ)wordrec_lm_state.$(OBJ)\
+	$(TESSOBJ)wordrec_outlines.$(OBJ)\
+	$(TESSOBJ)wordrec_params_model.$(OBJ)\
+	$(TESSOBJ)wordrec_pieces.$(OBJ)\
+	$(TESSOBJ)wordrec_plotedges.$(OBJ)\
+	$(TESSOBJ)wordrec_render.$(OBJ)\
+	$(TESSOBJ)wordrec_segsearch.$(OBJ)\
+	$(TESSOBJ)wordrec_wordclass.$(OBJ)
+
+
+TESSERACT_LEGACY=$(TESSERACT_LEGACY_OBJS)
+#TESSERACT_LEGACY=
+
+TESS_ROMFS_ARGS=\
+	-c -P $(GLSRCDIR)$(D)..$(D) tessdata$(D)*
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/ugcclib.mak
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/ugcclib.mak	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/ugcclib.mak	(revision 5)
@@ -0,0 +1,191 @@
+# Copyright (C) 2001-2021 Artifex Software, Inc.
+# All Rights Reserved.
+#
+# This software is provided AS-IS with no warranty, either express or
+# implied.
+#
+# This software is distributed under license and may not be copied,
+# modified or distributed except as expressly authorized under the terms
+# of the license contained in the file LICENSE in this distribution.
+#
+# Refer to licensing information at http://www.artifex.com or contact
+# Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
+# CA 94945, U.S.A., +1(415)492-9861, for further information.
+#
+# makefile for Unix / gcc library testing.
+
+BINDIR=./libobj
+GLSRCDIR=./base
+DEVSRCDIR=./devices
+GLGENDIR=./libobj
+GLOBJDIR=./libobj
+DEVGENDIR=./libobj
+DEVOBJDIR=./libobj
+PSRESDIR=./Resource
+DD=$(GLGENDIR)/
+GLD=$(GLGENDIR)/
+
+#include $(COMMONDIR)/gccdefs.mak
+#include $(COMMONDIR)/unixdefs.mak
+#include $(COMMONDIR)/generic.mak
+include $(GLSRCDIR)/version.mak
+
+gsdir = /usr/local/share/ghostscript
+gsdatadir = $(gsdir)/$(GS_DOT_VERSION)
+GS_DOCDIR=$(gsdatadir)/doc
+GS_LIB_DEFAULT=$(gsdatadir)/Resource/Init:$(gsdatadir)/lib:$(gsdatadir)/Resource/Font
+SEARCH_HERE_FIRST=0
+GS_INIT=gs_init.ps
+
+#GENOPT=-DDEBUG
+GENOPT=
+GS=gslib
+
+# We don't expect to build debug or profiling configurations....
+DEBUGDIRPREFIX=
+MEMENTODIRPREFIX=
+PGDIRPREFIX=
+
+JSRCDIR=jpeg
+SHARE_JPEG=0
+JPEG_NAME=jpeg
+
+PNGSRCDIR=libpng
+SHARE_LIBPNG=1
+LIBPNG_NAME=png
+
+ZSRCDIR=zlib
+SHARE_ZLIB=1
+ZLIB_NAME=z
+
+SHARE_JBIG2=0
+JBIG2_LIB=jbig2dec
+JBIG2SRCDIR=jbig2dec
+
+# Define the directory where the lcms2mt source is stored.
+# See lcms2mt.mak for more information
+
+SHARE_LCMS=0
+LCMS2MTSRCDIR=lcms2mt
+
+# Define the directory where the lcms2 source is stored.
+# See lcms2.mak for more information
+
+LCMS2SRCDIR=lcms2
+
+# Define the directory where the ijs source is stored,
+# and the process forking method to use for the server.
+# See ijs.mak for more information.
+
+SHARE_IJS=0
+IJS_NAME=
+IJSSRCDIR=ijs
+IJSEXECTYPE=unix
+
+# Define how to build the library archives.  (These are not used in any
+# standard configuration.)
+
+AR=ar
+ARFLAGS=qc
+RANLIB=ranlib
+
+CC=gcc
+CCLD=$(CC)
+
+GCFLAGS_NO_WARN=-fno-builtin -fno-common
+GCFLAGS_WARNINGS=-Wall -Wcast-qual -Wpointer-arith -Wstrict-prototypes -Wwrite-strings
+GCFLAGS=$(GCFLAGS_NO_WARN) $(GCFLAGS_WARNINGS)
+XCFLAGS=
+CFLAGS_STANDARD=-O2
+CFLAGS_DEBUG=-g -O
+CFLAGS_PROFILE=-pg -O2
+CFLAGS=$(CFLAGS_DEBUG) $(GCFLAGS) $(XCFLAGS)
+LDFLAGS=$(XLDFLAGS)
+STDLIBS=-lpthread -lm
+EXTRALIBS=
+XINCLUDE=-I/usr/X11R6/include
+XLIBDIRS=-L/usr/X11R6/lib
+XLIBDIR=
+XLIBS=Xt Xext X11
+
+SYNC=posync
+
+FEATURE_DEVS=$(GLD)dps2lib.dev $(GLD)psl2cs.dev $(GLD)cielib.dev\
+ $(GLD)psl3lib.dev $(GLD)path1lib.dev $(GLD)patlib.dev $(GLD)htxlib.dev\
+ $(GLD)cidlib.dev $(GLD)psf0lib.dev $(GLD)psf1lib.dev
+
+COMPILE_INITS?=0
+BAND_LIST_STORAGE=file
+BAND_LIST_COMPRESSOR=zlib
+FILE_IMPLEMENTATION=stdio
+DEVICE_DEVS=$(DD)x11cmyk.dev $(DD)x11mono.dev $(DD)x11.dev $(DD)x11alpha.dev\
+ $(DD)djet500.dev $(DD)pbmraw.dev $(DD)pgmraw.dev $(DD)ppmraw.dev $(DD)pamcmyk32.dev\
+ $(DD)bitcmyk.dev $(GLD)bbox.dev
+DEVICE_DEVS1=
+DEVICE_DEVS2=
+DEVICE_DEVS3=
+DEVICE_DEVS4=
+DEVICE_DEVS5=
+DEVICE_DEVS6=
+DEVICE_DEVS7=
+DEVICE_DEVS8=
+DEVICE_DEVS9=
+DEVICE_DEVS10=
+DEVICE_DEVS11=
+DEVICE_DEVS12=
+DEVICE_DEVS13=
+DEVICE_DEVS14=
+DEVICE_DEVS15=
+DEVICE_DEVS16=
+DEVICE_DEVS17=
+DEVICE_DEVS18=
+DEVICE_DEVS19=
+DEVICE_DEVS20=
+
+MAKEFILE=$(GLSRCDIR)/ugcclib.mak
+TOP_MAKEFILES=$(MAKEFILE)
+
+AK=
+CCFLAGS=$(GENOPT) $(CFLAGS)
+CC_=$(CC) $(CCFLAGS)
+CCAUX=$(CC)
+CC_NO_WARN=$(CC_) -Wno-cast-qual -Wno-traditional
+CC_SHARED=$(CC_)
+
+include $(GLSRCDIR)/unixhead.mak
+include $(GLSRCDIR)/gs.mak
+include $(GLSRCDIR)/lib.mak
+include $(GLSRCDIR)/jpeg.mak
+# zlib.mak must precede png.mak
+include $(GLSRCDIR)/zlib.mak
+include $(GLSRCDIR)/png.mak
+include $(GLSRCDIR)/jbig2.mak
+include $(GLSRCDIR)/ijs.mak
+include $(GLSRCDIR)/devs.mak
+include $(GLSRCDIR)/contrib.mak
+include $(GLSRCDIR)/unix-aux.mak
+
+# The following replaces unixlink.mak
+
+LIB_ONLY=$(GLOBJ)gsnogc.$(OBJ) $(GLOBJ)gconfig.$(OBJ) $(GLOBJ)gscdefs.$(OBJ) $(GLOBJ)gsromfs$(COMPILE_INITS).$(OBJ)
+ldt_tr=$(GLOBJ)ldt.tr
+$(GS_XE): $(ld_tr) $(ECHOGS_XE) $(LIB_ALL) $(DEVS_ALL) $(GLOBJ)gslib.$(OBJ) $(LIB_ONLY)
+	$(ECHOGS_XE_BUILD) -w $(ldt_tr) -n - $(CCLD) $(LDFLAGS) -o $(GS_XE)
+	$(ECHOGS_XE_BUILD) -a $(ldt_tr) -n -s $(GLOBJ)gslib.$(OBJ) -s
+	$(ECHOGS_XE_BUILD) -a $(ldt_tr) -n -s $(LIB_ONLY) -s
+	cat $(ld_tr) >>$(ldt_tr)
+	$(ECHOGS_XE_BUILD) -a $(ldt_tr) -s - $(EXTRALIBS) $(STDLIBS)
+	if [ x$(XLIBDIR) != x ]; then LD_RUN_PATH=$(XLIBDIR); export LD_RUN_PATH; fi; $(SH) <$(ldt_tr)
+
+GSLIB_A=libgsgraph.a
+lar_tr=$(GLOBJ)lar.tr
+$(GSLIB_A):  $(obj_tr) $(ECHOGS_XE) $(LIB_ALL) $(DEVS_ALL) $(LIB_ONLY)
+	rm -f $(GSLIB_A)
+	$(ECHOGS_XE_BUILD) -w $(lar_tr) -n - $(AR) $(ARFLAGS) $(GSLIB_A)
+	$(ECHOGS_XE_BUILD) -a $(lar_tr) -n -s $(LIB_ONLY) -s
+	cat $(obj_tr) >>$(lar_tr)
+	$(ECHOGS_XE_BUILD) -a $(lar_tr) -s -
+	$(SH) <$(lar_tr)
+	$(RANLIB) $(GSLIB_A)
+
+include $(GLSRCDIR)/unix-end.mak
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/unix-aux.mak
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/unix-aux.mak	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/unix-aux.mak	(revision 5)
@@ -0,0 +1,147 @@
+# Copyright (C) 2001-2021 Artifex Software, Inc.
+# All Rights Reserved.
+#
+# This software is provided AS-IS with no warranty, either express or
+# implied.
+#
+# This software is distributed under license and may not be copied,
+# modified or distributed except as expressly authorized under the terms
+# of the license contained in the file LICENSE in this distribution.
+#
+# Refer to licensing information at http://www.artifex.com or contact
+# Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
+# CA 94945, U.S.A., +1(415)492-9861, for further information.
+#
+# Partial makefile common to all Unix configurations.
+# This makefile contains the build rules for the auxiliary programs such as
+# echogs, and the 'platform' modules.
+
+# Define the name of this makefile.
+UNIX_AUX_MAK=$(GLSRC)unix-aux.mak $(TOP_MAKEFILES)
+
+# -------------------------------- Library -------------------------------- #
+
+## The Unix platforms
+
+# We have to include a test for the existence of sys/time.h,
+# because some System V platforms don't have it.
+
+# Unix platforms other than System V, and also System V Release 4
+# (SVR4) platforms.
+unix__=$(GLOBJ)gp_getnv.$(OBJ) $(GLOBJ)gp_upapr.$(OBJ) $(GLOBJ)gp_unix.$(OBJ)\
+       $(GLOBJ)gp_unifs.$(OBJ) $(GLOBJ)gp_unifn.$(OBJ) $(GLOBJ)gp_stdia.$(OBJ)\
+       $(GLOBJ)gp_nxpsprn.$(OBJ)
+
+$(GLGEN)unix_.dev: $(unix__) $(GLD)nosync.dev $(GLD)smd5.dev $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLGEN)unix_ $(unix__) -include $(GLD)nosync
+	$(ADDMOD) $(GLGEN)unix_ -include $(GLD)smd5
+
+$(GLOBJ)gp_unix.$(OBJ): $(GLSRC)gp_unix.c $(AK)\
+ $(pipe__h) $(string__h) $(time__h) $(gx_h) $(gsexit_h) $(gp_h) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(GLCC) $(FONTCONFIG_CFLAGS) $(GLO_)gp_unix.$(OBJ) $(C_) $(GLSRC)gp_unix.c
+
+$(AUX)gp_unix.$(OBJ): $(GLSRC)gp_unix.c $(AK)\
+ $(pipe__h) $(string__h) $(time__h)\
+ $(gx_h) $(gsexit_h) $(gp_h) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(GLCCAUX) $(AUXO_)gp_unix.$(OBJ) $(C_) $(GLSRC)gp_unix.c
+
+# assume all Unix platforms support unbuffered read
+$(GLOBJ)gp_stdia.$(OBJ): $(GLSRC)gp_stdia.c $(AK)\
+  $(stdio__h) $(time__h) $(unistd__h) $(gx_h) $(gp_h) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(GLCC) $(GLO_)gp_stdia.$(OBJ) $(C_) $(GLSRC)gp_stdia.c
+
+$(AUX)gp_stdia.$(OBJ): $(GLSRC)gp_stdia.c $(AK)\
+  $(stdio__h) $(time__h) $(unistd__h) $(gx_h) $(gp_h) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(GLCCAUX) $(AUXO_)gp_stdia.$(OBJ) $(C_) $(GLSRC)gp_stdia.c
+
+# -------------------------- Auxiliary programs --------------------------- #
+
+$(ECHOGS_XE): $(GLSRC)echogs.c $(AK) $(stdpre_h) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(ECHOGS_XE) $(GLSRC)echogs.c $(AUXEXTRALIBS)
+
+$(PACKPS_XE): $(GLSRC)pack_ps.c $(stdpre_h) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(PACKPS_XE) $(GLSRC)pack_ps.c $(AUXEXTRALIBS)
+
+# On the RS/6000 (at least), compiling genarch.c with gcc with -O
+# produces a buggy executable.
+$(GENARCH_XE): $(GLSRC)genarch.c $(AK) $(GENARCH_DEPS) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(GENARCH_XE) $(GLSRC)genarch.c $(AUXEXTRALIBS)
+
+$(GENCONF_XE): $(GLSRC)genconf.c $(AK) $(GENCONF_DEPS) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(GENCONF_XE) $(GLSRC)genconf.c $(AUXEXTRALIBS)
+
+$(GENDEV_XE): $(GLSRC)gendev.c $(AK) $(GENDEV_DEPS) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(GENDEV_XE) $(GLSRC)gendev.c $(AUXEXTRALIBS)
+
+$(GENHT_XE): $(GLSRC)genht.c $(AK) $(GENHT_DEPS) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(CCAUX_) $(GENHT_CFLAGS) $(O_)$(GENHT_XE) $(GLSRC)genht.c $(AUXEXTRALIBS)
+
+# To get GS to use the system zlib, you remove/hide the gs/zlib directory
+# which means that the mkromfs build can't find the zlib source it needs.
+# So it's split into two targets, one using the zlib source directly.....
+MKROMFS_OBJS_0=$(MKROMFS_ZLIB_OBJS) $(AUX)gpmisc.$(OBJ) $(AUX)gp_getnv.$(OBJ) \
+ $(AUX)gscdefs.$(OBJ) $(AUX)gp_unix.$(OBJ) $(AUX)gp_unifs.$(OBJ) $(AUX)gp_unifn.$(OBJ) \
+ $(AUX)gp_stdia.$(OBJ) $(AUX)gsutil.$(OBJ) $(AUX)memento.$(OBJ)
+
+$(MKROMFS_XE)_0: $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS) $(MKROMFS_OBJS_0) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(CCAUX_) $(GENOPTAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJ)$(_I) $(I_)$(ZSRCDIR)$(_I) $(GLSRC)mkromfs.c $(O_)$(MKROMFS_XE)_0 $(MKROMFS_OBJS_0) $(AUXEXTRALIBS)
+
+# .... and one using the zlib library linked via the command line
+MKROMFS_OBJS_1=$(AUX)gscdefs.$(OBJ) \
+ $(AUX)gpmisc.$(OBJ) $(AUX)gp_getnv.$(OBJ) \
+ $(AUX)gp_unix.$(OBJ) $(AUX)gp_unifs.$(OBJ) $(AUX)gp_unifn.$(OBJ) \
+ $(AUX)gp_stdia.$(OBJ) $(AUX)gsutil.$(OBJ)
+
+$(MKROMFS_XE)_1: $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS) $(MKROMFS_OBJS_1) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(CCAUX_) $(GENOPTAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJ)$(_I) $(I_)$(ZSRCDIR)$(_I) $(GLSRC)mkromfs.c $(O_)$(MKROMFS_XE)_1 $(MKROMFS_OBJS_1) $(AUXEXTRALIBS)
+
+$(MKROMFS_XE): $(MKROMFS_XE)_$(SHARE_ZLIB) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(CP_) $(MKROMFS_XE)_$(SHARE_ZLIB) $(MKROMFS_XE)
+
+# Query the environment to construct gconfig_.h.
+# These are all defined conditionally (except the JasPER one), so that
+# they can be overridden by settings from the configure script.
+# The "empty" $(ECHOGS_XE) lines just append a white space line to the
+# header file.
+INCLUDE=/usr/include
+$(gconfig__h): $(UNIX_AUX_MAK) $(ECHOGS_XE) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	$(ECHOGS_XE_BUILD) -w $(gconfig__h) -x 2f2a -s This file was generated automatically by unix-aux.mak. -s -x 2a2f
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h)
+
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 ifndef HAVE_DIRENT_H
+	if ( test -f $(INCLUDE)/dirent.h ); then $(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 define HAVE_DIRENT_H 1; \
+              else $(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 define HAVE_DIRENT_H 0; fi
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 endif
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h)
+
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 ifndef HAVE_NDIR_H
+	if ( test -f $(INCLUDE)/ndir.h ); then $(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 define HAVE_NDIR_H 1; \
+              else $(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 define HAVE_NDIR_H 0; fi
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 endif
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h)
+
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 ifndef HAVE_SYS_DIR_H
+	if ( test -f $(INCLUDE)/sys/dir.h ); then $(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 define HAVE_SYS_DIR_H 1; \
+              else $(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 define HAVE_SYS_DIR_H 0; fi
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 endif
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h)
+
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 ifndef HAVE_SYS_NDIR_H
+	if ( test -f $(INCLUDE)/sys/ndir.h ); then $(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 define HAVE_SYS_NDIR_H 1; \
+              else $(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 define HAVE_SYS_NDIR_H 0; fi
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 endif
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h)
+
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 ifndef HAVE_SYS_TIME_H
+	if ( test -f $(INCLUDE)/sys/time.h ); then $(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 define HAVE_SYS_TIME_H 1; \
+              else $(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 define HAVE_SYS_TIME_H 0; fi
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 endif
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h)
+
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 ifndef HAVE_SYS_TIMES_H
+	if ( test -f $(INCLUDE)/sys/times.h ); then $(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 define HAVE_SYS_TIMES_H 1; \
+              else $(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 define HAVE_SYS_TIMES_H 0; fi
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 endif
+	$(ECHOGS_XE_BUILD) -a $(gconfig__h)
+
+	if ( test -f $(JSRCDIR)/jmemsys.h); then true; else $(ECHOGS_XE_BUILD) -a $(gconfig__h) -x 23 define DONT_HAVE_JMEMSYS_H; fi
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/unixlink.mak
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/unixlink.mak	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/unixlink.mak	(revision 5)
@@ -0,0 +1,301 @@
+# Copyright (C) 2001-2021 Artifex Software, Inc.
+# All Rights Reserved.
+#
+# This software is provided AS-IS with no warranty, either express or
+# implied.
+#
+# This software is distributed under license and may not be copied,
+# modified or distributed except as expressly authorized under the terms
+# of the license contained in the file LICENSE in this distribution.
+#
+# Refer to licensing information at http://www.artifex.com or contact
+# Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
+# CA 94945, U.S.A., +1(415)492-9861, for further information.
+#
+# Partial makefile common to all Unix configurations.
+# This part of the makefile contains the linking steps.
+
+# Define the name of this makefile.
+UNIXLINK_MAK=$(GLSRC)unixlink.mak $(TOP_MAKEFILES)
+
+# The following prevents GNU make from constructing argument lists that
+# include all environment variables, which can easily be longer than
+# brain-damaged system V allows.
+
+.NOEXPORT:
+
+# ----------------------------- Main program ------------------------------ #
+
+### Interpreter main program
+
+INT_ARCHIVE_SOME=$(GLOBJ)gconfig.$(OBJ) $(GLOBJ)gscdefs.$(OBJ)
+
+PSINT_ARCHIVE_ALL=$(PSOBJ)imainarg.$(OBJ) $(PSOBJ)imain.$(OBJ) $(GLOBJ)iconfig.$(OBJ)
+
+INT_ARCHIVE_ALL=$(PSINT_ARCHIVE_ALL) $(INT_ARCHIVE_SOME)
+
+XE_ALL=$(PSOBJ)gs.$(OBJ) $(INT_ARCHIVE_ALL) $(INT_ALL) $(DEVS_ALL)
+
+GS_DOT_O=$(PSOBJ)gs.$(OBJ)
+
+# Build a library archive for the entire interpreter.
+# This is not used in a standard build.
+
+# options for genconf, to *just* output the libs to link
+# and search paths for them
+CONFLIBSTR=-pl "&-l%s&s&&" -pL "&-L%s&s&&" -l
+
+libgs_a_tr=$(GLOBJ)libgs_a.tr
+GS_A=$(BINDIR)$(D)$(GS).a
+$(GS_A): $(PSOBJ)gsromfs$(COMPILE_INITS).$(OBJ) \
+         $(obj_tr) $(ECHOGS_XE) $(INT_ARCHIVE_ALL) $(INT_ALL) $(DEVS_ALL) \
+         $(UNIXLINK_MAK)
+	rm -f $(GS_A)
+	$(ECHOGS_XE_BUILD) -w $(libgs_a_tr) -n - $(AR) $(ARFLAGS) $(GS_A)
+	$(ECHOGS_XE_BUILD) -a $(libgs_a_tr) -n -s $(INT_ARCHIVE_ALL) -s
+	$(ECHOGS_XE_BUILD) -a $(libgs_a_tr) -n -s $(PSOBJ)gsromfs$(COMPILE_INITS).$(OBJ) -s
+	cat $(obj_tr) >>$(libgs_a_tr)
+	$(ECHOGS_XE_BUILD) -a $(libgs_a_tr) -s -
+	$(SH) <$(libgs_a_tr)
+	$(RANLIB) $(GS_A)
+
+GS_A_XE=$(BINDIR)$(D)$(GS)_aexe$(XE)
+gs_a_xeld_tr=$(GLOBJ)$(D)$(GS)_aexeld.tr
+gs_a_xeldt_tr=$(GLOBJ)$(D)$(GS)_aexeldt.tr
+$(GS_A_XE): $(GS_A) $(GS_DOT_O)
+	$(EXP)$(GENCONF_XE) $(gs_tr) -h $(GLGENDIR)$(D)unused.h $(CONFLIBSTR) $(gs_a_xeld_tr)
+	$(ECHOGS_XE_BUILD) -w $(gs_a_xeldt_tr) -n - $(CCLD) $(GS_LDFLAGS) -o $(GS_A_XE)
+	$(ECHOGS_XE_BUILD) -a $(gs_a_xeldt_tr) -n -s $(GS_DOT_O) -s
+	$(ECHOGS_XE_BUILD) -a $(gs_a_xeldt_tr) -n -s - $(GS_A) $(EXTRALIBS) $(STDLIBS) -s
+	$(ECHOGS_XE_BUILD) -a $(gs_a_xeldt_tr) -n -s -R $(gs_a_xeld_tr)
+	$(SH) < $(gs_a_xeldt_tr)
+
+libgpcl6_a_tr=$(GLOBJ)libgpcl6_a.tr
+GPCL_A=$(BINDIR)$(D)$(PCL).a
+$(GPCL_A): $(MAIN_OBJ) $(TOP_OBJ) $(XOBJS) \
+           $(GLOBJDIR)/pclromfs$(COMPILE_INITS).$(OBJ) $(PCL_DEVS_ALL) \
+           $(INT_ARCHIVE_SOME) $(pclobj_tr) $(ECHOGS_XE) $(DEVS_ALL) $(UNIXLINK_MAK)
+	rm -f $(GPCL_A)
+	$(ECHOGS_XE_BUILD) -w $(libgpcl6_a_tr) -n - $(AR) $(ARFLAGS) $(GPCL_A)
+	$(ECHOGS_XE_BUILD) -a $(libgpcl6_a_tr) -n -s $(TOP_OBJ) $(INT_ARCHIVE_SOME) $(XOBJS)  -s
+	$(ECHOGS_XE_BUILD) -a $(libgpcl6_a_tr) -n -s $(PSOBJ)pclromfs$(COMPILE_INITS).$(OBJ) $(MAIN_OBJ) -s
+	cat $(pclobj_tr) >>$(libgpcl6_a_tr)
+	$(ECHOGS_XE_BUILD) -a $(libgpcl6_a_tr) -s -
+	$(SH) <$(libgpcl6_a_tr)
+	$(RANLIB) $(GPCL_A)
+
+GPCL_A_XE=$(BINDIR)$(D)$(PCL)_aexe$(XE)
+gpcl_a_xeld_tr=$(GLOBJ)$(D)$(PCL)_aexeld.tr
+gpcl_a_xeldt_tr=$(GLOBJ)$(D)$(PCL)_aexeldt.tr
+$(GPCL_A_XE): $(GPCL_A) $(REALMAIN_OBJ)
+	$(EXP)$(GENCONF_XE) $(pcl_tr) -h $(GLGENDIR)$(D)unused.h $(CONFLIBSTR) $(gpcl_a_xeld_tr)
+	$(ECHOGS_XE_BUILD) -w $(gpcl_a_xeldt_tr) -n - $(CCLD) $(GS_LDFLAGS) -o $(GPCL_A_XE)
+	$(ECHOGS_XE_BUILD) -a $(gpcl_a_xeldt_tr) -n -s $(REALMAIN_OBJ) -s
+	$(ECHOGS_XE_BUILD) -a $(gpcl_a_xeldt_tr) -n -s - $(GPCL_A) $(EXTRALIBS) $(STDLIBS) -s
+	$(ECHOGS_XE_BUILD) -a $(gpcl_a_xeldt_tr) -n -s -R $(gpcl_a_xeld_tr)
+	$(SH) < $(gpcl_a_xeldt_tr)
+
+libgxps_a_tr=$(GLOBJ)libgxps_a.tr
+GXPS_A=$(BINDIR)$(D)$(XPS).a
+$(GXPS_A): $(MAIN_OBJ) $(XPS_TOP_OBJS) $(XOBJS) \
+           $(GLOBJDIR)/xpsromfs$(COMPILE_INITS).$(OBJ)  $(XPS_DEVS_ALL) \
+           $(INT_ARCHIVE_SOME) $(xpsobj_tr) $(ECHOGS_XE) $(DEVS_ALL) $(UNIXLINK_MAK)
+	rm -f $(GXPS_A)
+	$(ECHOGS_XE_BUILD) -w $(libgxps_a_tr) -n - $(AR) $(ARFLAGS) $(GXPS_A)
+	$(ECHOGS_XE_BUILD) -a $(libgxps_a_tr) -n -s $(XPS_TOP_OBJS) $(INT_ARCHIVE_SOME) $(XOBJS) -s
+	$(ECHOGS_XE_BUILD) -a $(libgxps_a_tr) -n -s $(PSOBJ)xpsromfs$(COMPILE_INITS).$(OBJ) $(MAIN_OBJ) -s
+	cat $(xpsobj_tr) >> $(libgxps_a_tr)
+	$(ECHOGS_XE_BUILD) -a $(libgxps_a_tr) -s -
+	$(SH) <$(libgxps_a_tr)
+	$(RANLIB) $(GXPS_A)
+
+GXPS_A_XE=$(BINDIR)$(D)$(XPS)_aexe$(XE)
+gxps_a_xeld_tr=$(GLOBJ)$(D)$(XPS)_aexeld.tr
+gxps_a_xeldt_tr=$(GLOBJ)$(D)$(XPS)_aexeldt.tr
+$(GXPS_A_XE): $(GXPS_A) $(REALMAIN_OBJ)
+	$(EXP)$(GENCONF_XE_BUILD) $(xps_tr) -h $(GLGENDIR)$(D)unused.h $(CONFLIBSTR) $(gxps_a_xeld_tr)
+	$(ECHOGS_XE_BUILD) -w $(gxps_a_xeldt_tr) -n - $(CCLD) $(GS_LDFLAGS) -o $(GXPS_A_XE)
+	$(ECHOGS_XE_BUILD) -a $(gxps_a_xeldt_tr) -n -s $(REALMAIN_OBJ) -s
+	$(ECHOGS_XE_BUILD) -a $(gxps_a_xeldt_tr) -n -s - $(GXPS_A) $(EXTRALIBS) $(STDLIBS) -s
+	$(ECHOGS_XE_BUILD) -a $(gxps_a_xeldt_tr) -n -s -R $(gxps_a_xeld_tr)
+	$(SH) < $(gxps_a_xeldt_tr)
+
+libgpdl_tr=$(GLOBJ)libgpdl.tr
+GPDL_A=$(BINDIR)$(D)$(GPDL).a
+$(GPDL_A): $(GPDL_PSI_TOP_OBJS) $(PCL_PXL_TOP_OBJS) $(PSI_TOP_OBJ) $(XPS_TOP_OBJ) $(PDF_TOP_OBJ) $(MAIN_OBJ) \
+         $(XOBJS) $(GLOBJDIR)/pdlromfs$(COMPILE_INITS).$(OBJ) \
+         $(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c0.$(OBJ) \
+         $(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c1.$(OBJ) \
+         $(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c2.$(OBJ) \
+         $(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c3.$(OBJ) \
+         $(PSINT_ARCHIVE_ALL) \
+         $(pdlobj_tr) $(ECHOGS_XE) $(INT_ARCHIVE_ALL) $(INT_ALL) $(DEVS_ALL) \
+         $(UNIXLINK_MAK)
+	rm -f $(GPDL_A)
+	$(ECHOGS_XE_BUILD) -w $(libgpdl_tr) -n - $(AR) $(ARFLAGS) $(GPDL_A)
+	$(ECHOGS_XE_BUILD) -a $(libgpdl_tr) -n -s $(GPDL_PSI_TOP_OBJS) $(PCL_PXL_TOP_OBJS) $(PSI_TOP_OBJ) $(XPS_TOP_OBJ) $(PDF_TOP_OBJ) $(XOBJS) -s
+	$(ECHOGS_XE_BUILD) -a $(libgpdl_tr) -n -s $(GLOBJDIR)/pdlromfs$(COMPILE_INITS).$(OBJ) -s
+	$(ECHOGS_XE_BUILD) -a $(libgpdl_tr) -n -s $(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c0.$(OBJ) -s
+	$(ECHOGS_XE_BUILD) -a $(libgpdl_tr) -n -s $(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c1.$(OBJ) -s
+	$(ECHOGS_XE_BUILD) -a $(libgpdl_tr) -n -s $(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c2.$(OBJ) -s
+	$(ECHOGS_XE_BUILD) -a $(libgpdl_tr) -n -s $(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c3.$(OBJ) -s
+	$(ECHOGS_XE_BUILD) -a $(libgpdl_tr) -n -s $(MAIN_OBJ) -s
+	cat $(pdlobj_tr) >>$(libgpdl_tr)
+	$(ECHOGS_XE_BUILD) -a $(libgpdl_tr) -s -
+	$(SH) <$(libgpdl_tr)
+	$(RANLIB) $(GPDL_A)
+
+GPDL_A_XE=$(BINDIR)$(D)$(GPDL)_aexe$(XE)
+gpdl_a_xeld_tr=$(GLOBJ)$(D)$(GPDL)_aexeld.tr
+gpdl_a_xeldt_tr=$(GLOBJ)$(D)$(GPDL)_aexeldt.tr
+$(GPDL_A_XE): $(GPDL_A) $(REALMAIN_OBJ)
+	$(EXP)$(GENCONF_XE_BUILD) $(gpdl_tr) -h $(GLGENDIR)$(D)unused.h $(CONFLIBSTR) $(gpdl_a_xeld_tr)
+	$(ECHOGS_XE_BUILD) -w $(gpdl_a_xeldt_tr) -n - $(CCLD) $(GS_LDFLAGS) -o $(GPDL_A_XE)
+	$(ECHOGS_XE_BUILD) -a $(gpdl_a_xeldt_tr) -n -s $(REALMAIN_OBJ) -s
+	$(ECHOGS_XE_BUILD) -a $(gpdl_a_xeldt_tr) -n -s - $(GPDL_A) $(EXTRALIBS) $(STDLIBS) -s
+	$(ECHOGS_XE_BUILD) -a $(gpdl_a_xeldt_tr) -n -s -R $(gpdl_a_xeld_tr)
+	$(SH) < $(gpdl_a_xeldt_tr)
+
+
+# Here is the final link step.  The stuff with LD_RUN_PATH is for SVR4
+# systems with dynamic library loading; I believe it's harmless elsewhere.
+# The resetting of the environment variables to empty strings is for SCO Unix,
+# which has limited environment space.
+ldt_tr=$(PSOBJ)ldt.tr
+
+$(GS_XE): $(ld_tr) $(gs_tr) $(ECHOGS_XE) $(XE_ALL) $(PSOBJ)gsromfs$(COMPILE_INITS).$(OBJ) \
+          $(UNIXLINK_MAK)
+	$(ECHOGS_XE_BUILD) -w $(ldt_tr) -n - $(CCLD) $(GS_LDFLAGS) -o $(GS_XE)
+	$(ECHOGS_XE_BUILD) -a $(ldt_tr) -n -s $(PSOBJ)gsromfs$(COMPILE_INITS).$(OBJ) $(GS_DOT_O) -s
+	cat $(gsld_tr) >> $(ldt_tr)
+	$(ECHOGS_XE_BUILD) -a $(ldt_tr) -s - $(EXTRALIBS) $(STDLIBS)
+	if [ x$(XLIBDIR) != x ]; then LD_RUN_PATH=$(XLIBDIR); export LD_RUN_PATH; fi; \
+	XCFLAGS= XINCLUDE= XLDFLAGS= XLIBDIRS= XLIBS= \
+	PSI_FEATURE_DEVS= FEATURE_DEVS= DEVICE_DEVS= DEVICE_DEVS1= DEVICE_DEVS2= DEVICE_DEVS3= \
+	DEVICE_DEVS4= DEVICE_DEVS5= DEVICE_DEVS6= DEVICE_DEVS7= DEVICE_DEVS8= \
+	DEVICE_DEVS9= DEVICE_DEVS10= DEVICE_DEVS11= DEVICE_DEVS12= \
+	DEVICE_DEVS13= DEVICE_DEVS14= DEVICE_DEVS15= DEVICE_DEVS16= \
+	DEVICE_DEVS17= DEVICE_DEVS18= DEVICE_DEVS19= DEVICE_DEVS20= \
+	DEVICE_DEVS_EXTRA= \
+	$(SH) <$(ldt_tr)
+
+.gssubtarget: $(GS_XE)
+	$(NO_OP)
+
+
+pclldt_tr=$(PSOBJ)pclldt.tr
+$(GPCL_XE): $(ld_tr) $(pcl_tr) $(REALMAIN_OBJ) $(MAIN_OBJ) $(TOP_OBJ) $(XOBJS) \
+            $(GLOBJDIR)/pclromfs$(COMPILE_INITS).$(OBJ) \
+            $(INT_ARCHIVE_SOME) $(UNIXLINK_MAK)
+	$(ECHOGS_XE_BUILD) -w $(pclldt_tr) -n - $(CCLD) $(PCL_LDFLAGS) $(XLIBDIRS) -o $(GPCL_XE)
+	$(ECHOGS_XE_BUILD) -a $(pclldt_tr) -n -x 20
+	$(ECHOGS_XE_BUILD) -a $(pclldt_tr) -n -s $(TOP_OBJ) $(INT_ARCHIVE_SOME) $(XOBJS) -s
+	cat $(pclld_tr) >> $(pclldt_tr)
+	$(ECHOGS_XE_BUILD) -a $(pclldt_tr) -n -s - $(GLOBJDIR)/pclromfs$(COMPILE_INITS).$(OBJ) $(REALMAIN_OBJ) $(MAIN_OBJ)
+	$(ECHOGS_XE_BUILD) -a $(pclldt_tr) -s - $(EXTRALIBS) $(STDLIBS)
+	if [ x$(XLIBDIR) != x ]; then LD_RUN_PATH=$(XLIBDIR); export LD_RUN_PATH; fi; \
+	XCFLAGS= XINCLUDE= XLDFLAGS= XLIBDIRS= XLIBS= \
+	PCL_FEATURE_DEVS= DEVICE_DEVS= DEVICE_DEVS1= DEVICE_DEVS2= DEVICE_DEVS3= \
+	DEVICE_DEVS4= DEVICE_DEVS5= DEVICE_DEVS6= DEVICE_DEVS7= DEVICE_DEVS8= \
+	DEVICE_DEVS9= DEVICE_DEVS10= DEVICE_DEVS11= DEVICE_DEVS12= \
+	DEVICE_DEVS13= DEVICE_DEVS14= DEVICE_DEVS15= DEVICE_DEVS16= \
+	DEVICE_DEVS17= DEVICE_DEVS18= DEVICE_DEVS19= DEVICE_DEVS20= \
+	DEVICE_DEVS_XETRA= \
+	sh <$(pclldt_tr)
+
+.pcl6subtarget: $(GPCL_XE)
+	$(NO_OP)
+
+xpsldt_tr=$(PSOBJ)xpsldt.tr
+$(GXPS_XE): $(ld_tr) $(xps_tr) $(REALMAIN_OBJ) $(MAIN_OBJ) $(XPS_TOP_OBJS) \
+             $(XOBJS) $(GLOBJDIR)/xpsromfs$(COMPILE_INITS).$(OBJ) \
+             $(INT_ARCHIVE_SOME) $(UNIXLINK_MAK)
+	$(ECHOGS_XE_BUILD) -w $(xpsldt_tr) -n - $(CCLD) $(XPS_LDFLAGS) $(XLIBDIRS) -o $(GXPS_XE)
+	$(ECHOGS_XE_BUILD) -a $(xpsldt_tr) -n -s $(XPS_TOP_OBJS) $(INT_ARCHIVE_SOME) $(XOBJS) -s
+	cat $(xpsld_tr) >> $(xpsldt_tr)
+	$(ECHOGS_XE_BUILD) -a $(xpsldt_tr) -s - $(GLOBJDIR)/xpsromfs$(COMPILE_INITS).$(OBJ) $(REALMAIN_OBJ) $(MAIN_OBJ) $(EXTRALIBS) $(STDLIBS)
+	if [ x$(XLIBDIR) != x ]; then LD_RUN_PATH=$(XLIBDIR); export LD_RUN_PATH; fi; \
+	XCFLAGS= XINCLUDE= XLDFLAGS= XLIBDIRS= XLIBS= \
+	PCL_FEATURE_DEVS= DEVICE_DEVS= DEVICE_DEVS1= DEVICE_DEVS2= DEVICE_DEVS3= \
+	DEVICE_DEVS4= DEVICE_DEVS5= DEVICE_DEVS6= DEVICE_DEVS7= DEVICE_DEVS8= \
+	DEVICE_DEVS9= DEVICE_DEVS10= DEVICE_DEVS11= DEVICE_DEVS12= \
+	DEVICE_DEVS13= DEVICE_DEVS14= DEVICE_DEVS15= DEVICE_DEVS16= \
+	DEVICE_DEVS17= DEVICE_DEVS18= DEVICE_DEVS19= DEVICE_DEVS20= \
+	DEVICE_DEVS_EXTRA= \
+	sh <$(xpsldt_tr)
+
+.xpssubtarget: $(GXPS_XE)
+	$(NO_OP)
+
+pdfldt_tr=$(PSOBJ)pdfldt.tr
+$(GPDF_XE): $(ld_tr) $(pdf_tr) $(REALMAIN_OBJ) $(MAIN_OBJ) $(PDF_TOP_OBJS) \
+             $(XOBJS) $(GLOBJDIR)/pdfromfs$(COMPILE_INITS).$(OBJ) \
+             $(INT_ARCHIVE_SOME) $(UNIXLINK_MAK)
+	$(ECHOGS_XE_BUILD) -w $(pdfldt_tr) -n - $(CCLD) $(PDF_LDFLAGS) $(XLIBDIRS) -o $(GPDF_XE)
+	$(ECHOGS_XE_BUILD) -a $(pdfldt_tr) -n -s $(PDF_TOP_OBJS) $(INT_ARCHIVE_SOME) $(XOBJS) -s
+	cat $(pdfld_tr) >> $(pdfldt_tr)
+	$(ECHOGS_XE) -a $(pdfldt_tr) -s - $(GLOBJDIR)/pdfromfs$(COMPILE_INITS).$(OBJ) $(REALMAIN_OBJ) $(MAIN_OBJ) $(EXTRALIBS) $(STDLIBS)
+	if [ x$(XLIBDIR) != x ]; then LD_RUN_PATH=$(XLIBDIR); export LD_RUN_PATH; fi; \
+	XCFLAGS= XINCLUDE= XLDFLAGS= XLIBDIRS= XLIBS= \
+	PCL_FEATURE_DEVS= DEVICE_DEVS= DEVICE_DEVS1= DEVICE_DEVS2= DEVICE_DEVS3= \
+	DEVICE_DEVS4= DEVICE_DEVS5= DEVICE_DEVS6= DEVICE_DEVS7= DEVICE_DEVS8= \
+	DEVICE_DEVS9= DEVICE_DEVS10= DEVICE_DEVS11= DEVICE_DEVS12= \
+	DEVICE_DEVS13= DEVICE_DEVS14= DEVICE_DEVS15= DEVICE_DEVS16= \
+	DEVICE_DEVS17= DEVICE_DEVS18= DEVICE_DEVS19= DEVICE_DEVS20= \
+	DEVICE_DEVS_EXTRA= \
+	sh <$(pdfldt_tr)
+
+.pdfsubtarget: $(GPDF_XE)
+	$(NO_OP)
+
+gpdlldt_tr=$(PSOBJ)gpdlldt.tr
+$(GPDL_XE): $(ld_tr) $(gpdl_tr) $(INT_ARCHIVE_ALL) $(REALMAIN_OBJ) $(MAIN_OBJ) \
+		$(GPDL_PSI_TOP_OBJS) $(PCL_PXL_TOP_OBJS) $(PSI_TOP_OBJ) $(XPS_TOP_OBJ) $(PDF_TOP_OBJ) \
+		$(XOBJS) $(GLOBJDIR)/pdlromfs$(COMPILE_INITS).$(OBJ) \
+		$(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c0.$(OBJ) \
+		$(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c1.$(OBJ) \
+		$(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c2.$(OBJ) \
+		$(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c3.$(OBJ) \
+		$(PSINT_ARCHIVE_ALL) $(UNIXLINK_MAK)
+	$(ECHOGS_XE_BUILD) -w $(gpdlldt_tr) -n - $(CCLD) $(PDL_LDFLAGS) $(XLIBDIRS) -o $(GPDL_XE)
+	$(ECHOGS_XE_BUILD) -a $(gpdlldt_tr) -n -s $(GPDL_PSI_TOP_OBJS) $(PCL_PXL_TOP_OBJS) $(PDF_TOP_OBJ) $(PSI_TOP_OBJ) $(XPS_TOP_OBJ) $(XOBJS) -s
+	cat $(gpdlld_tr) >> $(gpdlldt_tr)
+	$(ECHOGS_XE_BUILD) -a $(gpdlldt_tr) -n -s - $(GLOBJDIR)/pdlromfs$(COMPILE_INITS).$(OBJ)
+	$(ECHOGS_XE_BUILD) -a $(gpdlldt_tr) -n -s - $(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c0.$(OBJ)
+	$(ECHOGS_XE_BUILD) -a $(gpdlldt_tr) -n -s - $(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c1.$(OBJ)
+	$(ECHOGS_XE_BUILD) -a $(gpdlldt_tr) -n -s - $(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c2.$(OBJ)
+	$(ECHOGS_XE_BUILD) -a $(gpdlldt_tr) -n -s - $(GLOBJDIR)/pdlromfs$(COMPILE_INITS)c3.$(OBJ)
+	$(ECHOGS_XE_BUILD) -a $(gpdlldt_tr) -s - $(REALMAIN_OBJ) $(MAIN_OBJ) $(EXTRALIBS) $(STDLIBS)
+	if [ x$(XLIBDIR) != x ]; then LD_RUN_PATH=$(XLIBDIR); export LD_RUN_PATH; fi; \
+	XCFLAGS= XINCLUDE= XLDFLAGS= XLIBDIRS= XLIBS= \
+	PCL_FEATURE_DEVS= DEVICE_DEVS= DEVICE_DEVS1= DEVICE_DEVS2= DEVICE_DEVS3= \
+	DEVICE_DEVS4= DEVICE_DEVS5= DEVICE_DEVS6= DEVICE_DEVS7= DEVICE_DEVS8= \
+	DEVICE_DEVS9= DEVICE_DEVS10= DEVICE_DEVS11= DEVICE_DEVS12= \
+	DEVICE_DEVS13= DEVICE_DEVS14= DEVICE_DEVS15= DEVICE_DEVS16= \
+	DEVICE_DEVS17= DEVICE_DEVS18= DEVICE_DEVS19= DEVICE_DEVS20= \
+	DEVICE_DEVS_EXTRA= \
+	sh <$(gpdlldt_tr)
+
+.gpdlsubtarget: $(GPDL_XE)
+	$(NO_OP)
+
+
+APITEST_XE=$(BINDIR)$(D)apitest$(XE)
+
+apitest: $(APITEST_XE)
+
+$(APITEST_XE): $(ld_tr) $(ECHOGS_XE) $(XE_ALL) $(PSOBJ)gsromfs$(COMPILE_INITS).$(OBJ) $(PSOBJ)apitest.$(OBJ) \
+               $(UNIXLINK_MAK)
+	$(ECHOGS_XE_BUILD) -w $(ldt_tr) -n - $(CCLD) $(LDFLAGS) -o $(APITEST_XE)
+	$(ECHOGS_XE_BUILD) -a $(ldt_tr) -n -s $(PSOBJ)gsromfs$(COMPILE_INITS).$(OBJ) $(PSOBJ)apitest.$(OBJ) -s
+	cat $(ld_tr) >>$(ldt_tr)
+	$(ECHOGS_XE_BUILD) -a $(ldt_tr) -s - $(EXTRALIBS) $(STDLIBS)
+	if [ x$(XLIBDIR) != x ]; then LD_RUN_PATH=$(XLIBDIR); export LD_RUN_PATH; fi; \
+	XCFLAGS= XINCLUDE= XLDFLAGS= XLIBDIRS= XLIBS= \
+	FEATURE_DEVS= DEVICE_DEVS= DEVICE_DEVS1= DEVICE_DEVS2= DEVICE_DEVS3= \
+	DEVICE_DEVS4= DEVICE_DEVS5= DEVICE_DEVS6= DEVICE_DEVS7= DEVICE_DEVS8= \
+	DEVICE_DEVS9= DEVICE_DEVS10= DEVICE_DEVS11= DEVICE_DEVS12= \
+	DEVICE_DEVS13= DEVICE_DEVS14= DEVICE_DEVS15= DEVICE_DEVS16= \
+	DEVICE_DEVS17= DEVICE_DEVS18= DEVICE_DEVS19= DEVICE_DEVS20= \
+	DEVICE_DEVS_EXTRA= \
+	$(SH) <$(ldt_tr)
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/winlib.mak
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/winlib.mak	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base/winlib.mak	(revision 5)
@@ -0,0 +1,296 @@
+# Copyright (C) 2001-2022 Artifex Software, Inc.
+# All Rights Reserved.
+#
+# This software is provided AS-IS with no warranty, either express or
+# implied.
+#
+# This software is distributed under license and may not be copied,
+# modified or distributed except as expressly authorized under the terms
+# of the license contained in the file LICENSE in this distribution.
+#
+# Refer to licensing information at http://www.artifex.com or contact
+# Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
+# CA 94945, U.S.A., +1(415)492-9861, for further information.
+#
+# Common makefile section for 32-bit MS Windows.
+
+# This makefile must be acceptable to Microsoft Visual C++, Watcom C++,
+# and Borland C++.  For this reason, the only conditional directives
+# allowed are !if[n]def, !else, and !endif.
+WINLIB_MAK=$(GLSRC)winlib.mak $(TOP_MAKEFILES)
+
+# Note that built-in third-party libraries aren't available.
+
+SHARE_FT=0
+SHARE_JPEG=0
+SHARE_LIBPNG=0
+SHARE_LIBTIFF=0
+SHARE_ZLIB=0
+SHARE_JBIG2=0
+SHARE_JPX=0
+SHARE_LCMS=0
+SHARE_LCUPS=0
+SHARE_LCUPSI=0
+
+SHARE_IJS=0
+IJS_NAME=
+IJSSRCDIR=ijs
+IJSEXECTYPE=win
+
+# Define the directory where the CUPS library sources are stored,
+
+!ifndef LCUPSSRCDIR
+SHARE_LCUPS=0
+LCUPS_NAME=
+LCUPSSRCDIR=cups
+LCUPSBUILDTYPE=win
+CUPS_CC=$(CC) $(CFLAGS) -DWIN32
+!endif
+
+!ifndef LCUPSISRCDIR
+SHARE_LCUPSI=0
+LCUPSI_NAME=
+LCUPSISRCDIR=cups
+CUPS_CC=$(CC) $(CFLAGS) -DWIN32
+!endif
+
+# Define the platform name.
+
+!ifndef GSPLATFORM
+!ifdef METRO
+GSPLATFORM=metro_
+!else
+GSPLATFORM=mswin32_
+!endif
+!endif
+
+# Define the auxiliary program dependency. We use this to
+# preconstruct ccf32.tr to get around the limit on the maximum
+# length of a command line.
+
+AK=$(GLGENDIR)\ccf32.tr
+
+# Define the syntax for command, object, and executable files.
+
+NULL=
+
+CMD=.bat
+D_=-D
+_D_=$(NULL)=
+_D=
+I_=-I
+II=-I
+_I=
+NO_OP=@rem
+# O_ and XE_ are defined separately for each compiler.
+OBJ=obj
+Q=
+XE=.exe
+XEAUX=.exe
+PERCENTESCAPE=%
+GENCONFLINECONT=
+
+# Define generic commands.
+
+# We have to use a batch file for the equivalent of cp,
+# because the DOS COPY command copies the file write time, like cp -p.
+# We also have to use a batch file for for the equivalent of rm -f,
+# because the DOS ERASE command returns an error status if the file
+# doesn't exist.
+CP_=call $(GLSRCDIR)\cp.bat
+RM_=call $(GLSRCDIR)\rm.bat
+RMN_=call $(GLSRCDIR)\rm.bat
+
+# Define the generic compilation flags.
+
+PLATOPT=
+
+# Define conditinal name for UFST bridge :
+!ifdef UFST_ROOT
+UFST_LIB_EXT=.lib
+!endif
+
+# Define conditinal for FreeType bridge :
+!ifndef FT_BRIDGE
+FT_BRIDGE = 0
+!endif
+
+# Which CMS are we using?
+!ifndef WHICH_CMS
+WHICH_CMS=lcms2mt
+!endif
+
+# Define the files to be removed by `make clean'.
+# nmake expands macros when encountered, not when used,
+# so this must precede the !include statements.
+
+BEGINFILES=$(GLGENDIR)\ccf32.tr\
+ $(GLOBJDIR)\*.res $(GLOBJDIR)\*.ico\
+ $(BINDIR)\$(GSDLL).dll $(BINDIR)\$(GSCONSOLE).exe\
+ $(BINDIR)\setupgs.exe $(BINDIR)\uninstgs.exe\
+ $(GLOBJDIR)\cups\*.h $(GLOBJDIR)\*.h $(GLOBJDIR)\*.c $(AUXDIR)\*.sbr \
+ $(AUXDIR)\*.pdb \
+ $(BEGINFILES2)
+
+# Include the generic makefiles.
+#!include $(COMMONDIR)/pcdefs.mak
+#!include $(COMMONDIR)/generic.mak
+!include $(GLSRCDIR)\gs.mak
+
+!if "$(OCR_VERSION)"=="1"
+!include $(GLSRCDIR)\leptonica.mak
+!include $(GLSRCDIR)\tesseract.mak
+!endif
+
+!include $(GLSRCDIR)\lib.mak
+!include $(GLSRCDIR)\freetype.mak
+!if "$(UFST_BRIDGE)"=="1"
+!include $(UFST_ROOT)\fapiufst.mak
+!endif
+!include $(GLSRCDIR)\jpeg.mak
+# zlib.mak must precede png.mak
+!include $(GLSRCDIR)\zlib.mak
+!include $(GLSRCDIR)\png.mak
+!include $(GLSRCDIR)\tiff.mak
+!include $(GLSRCDIR)\jbig2.mak
+!include $(GLSRCDIR)\openjpeg.mak
+!include $(GLSRCDIR)\cal.mak
+!include $(GLSRCDIR)\ocr.mak
+
+!include $(GLSRCDIR)\expat.mak
+!include $(GLSRCDIR)\jpegxr.mak
+
+!include $(GLSRCDIR)\$(WHICH_CMS).mak
+!include $(GLSRCDIR)\ijs.mak
+!include $(GLSRCDIR)\lcups.mak
+!include $(GLSRCDIR)\lcupsi.mak
+!include $(DEVSRCDIR)\extract.mak
+!include $(DEVSRCDIR)\devs.mak
+!include $(DEVSRCDIR)\dcontrib.mak
+!include $(CONTRIBDIR)\contrib.mak
+
+# Define the compilation rule for Windows devices.
+# This requires GL*_ to be defined, so it has to come after lib.mak.
+GLCCWIN=$(CC_WX) $(CCWINFLAGS) $(I_)$(GLI_)$(_I) $(GLF_)
+
+!include $(GLSRCDIR)\winplat.mak
+!include $(GLSRCDIR)\pcwin.mak
+
+# Define abbreviations for the executable and DLL files.
+GS_OBJ=$(GLOBJ)$(GS)
+GSDLL_SRC=$(GLSRC)$(GSDLL)
+GSDLL_OBJ=$(GLOBJ)$(GSDLL)
+
+# -------------------------- Auxiliary files --------------------------- #
+
+# No special gconfig_.h is needed.	/* This file deliberately left blank. */
+$(gconfig__h): $(TOP_MAKEFILES)
+	$(ECHOGS_XE_BUILD) -w $(gconfig__h) -x 2f2a20 This file deliberately left blank. -x 2a2f
+
+# -------------------------------- Library -------------------------------- #
+
+# The Windows Win32 platform
+
+mswin32__=$(GLOBJ)gp_mswin.$(OBJ) $(GLOBJ)gp_wgetv.$(OBJ) $(GLOBJ)gp_wpapr.$(OBJ) \
+ $(GLOBJ)gp_stdia.$(OBJ) $(GLOBJ)gp_wutf8.$(OBJ) $(GLOBJ)gp_winfs.$(OBJ)
+mswin32_inc=$(GLD)nosync.dev $(GLD)winplat.dev
+
+$(GLGEN)mswin32_.dev:  $(mswin32__) $(ECHOGS_XE) $(mswin32_inc) $(WINLIB_MAK)
+	$(SETMOD) $(GLGEN)mswin32_ $(mswin32__)
+	$(ADDMOD) $(GLGEN)mswin32_ -include $(mswin32_inc)
+
+$(GLOBJ)gp_mswin.$(OBJ): $(GLSRC)gp_mswin.c $(AK) $(gp_mswin_h) \
+ $(ctype__h) $(dos__h) $(malloc__h) $(memory__h) $(pipe__h) \
+ $(stdio__h) $(string__h) $(windows__h) \
+ $(gx_h) $(gp_h) $(gpcheck_h) $(gpmisc_h) $(gserrors_h) $(gsexit_h) \
+ $(WINLIB_MAK)
+	$(GLCCWIN) $(GLO_)gp_mswin.$(OBJ) $(C_) $(GLSRC)gp_mswin.c
+
+$(GLOBJ)gp_winfs.$(OBJ): $(GLSRC)gp_winfs.c $(AK) $(gp_mswin_h) \
+ $(memory__h) $(stdio__h) $(windows__h) $(gp_h) $(gserrors_h) \
+ $(gserrors_h) $(WINLIB_MAK)
+	$(GLCCWIN) $(GLO_)gp_winfs.$(OBJ) $(C_) $(GLSRC)gp_winfs.c
+
+$(AUX)gp_winfs.$(OBJ): $(GLSRC)gp_winfs.c $(AK) $(gp_mswin_h) \
+ $(memory__h) $(stdio__h) $(windows__h) $(gp_h) $(gserrors_h) \
+ $(WINLIB_MAK)
+	$(GLCCAUX) $(AUXO_)gp_winfs.$(OBJ) $(C_) $(GLSRC)gp_winfs.c
+
+$(AUX)gp_winfs2.$(OBJ): $(GLSRC)gp_winfs2.c $(AK) $(gp_mswin_h) \
+ $(memory__h) $(stdio__h) $(windows__h) $(gp_h) $(gserrors_h) \
+ $(WINLIB_MAK)
+	$(GLCCAUX) $(AUXO_)gp_winfs2.$(OBJ) $(C_) $(GLSRC)gp_winfs2.c
+
+$(GLOBJ)gp_wutf8.$(OBJ): $(GLSRC)gp_wutf8.c $(windows__h) $(WINLIB_MAK)
+	$(GLCCWIN) $(GLO_)gp_wutf8.$(OBJ) $(C_) $(GLSRC)gp_wutf8.c
+
+$(AUX)gp_wutf8.$(OBJ): $(GLSRC)gp_wutf8.c $(windows__h) $(WINLIB_MAK)
+	$(GLCCAUX) $(AUXO_)gp_wutf8.$(OBJ) $(C_) $(GLSRC)gp_wutf8.c
+
+$(GLOBJ)gp_wgetv.$(OBJ): $(GLSRC)gp_wgetv.c $(AK) $(gscdefs_h) $(WINLIB_MAK)
+	$(GLCCWIN) $(GLO_)gp_wgetv.$(OBJ) $(C_) $(GLSRC)gp_wgetv.c
+
+$(GLOBJ)gp_wpapr.$(OBJ): $(GLSRC)gp_wpapr.c $(AK) $(gp_h) $(WINLIB_MAK)
+	$(GLCCWIN) $(GLO_)gp_wpapr.$(OBJ) $(C_) $(GLSRC)gp_wpapr.c
+
+$(GLOBJ)gp_stdia.$(OBJ): $(GLSRC)gp_stdia.c $(AK)\
+  $(stdio__h) $(time__h) $(unistd__h) $(gx_h) $(gp_h) $(WINLIB_MAK)
+	$(GLCCWIN) $(GLO_)gp_stdia.$(OBJ) $(C_) $(GLSRC)gp_stdia.c
+
+# The Metro platform
+!ifdef METRO
+METRO_OBJS=$(GLOBJ)winrtsup.$(OBJ) $(GLOBJ)gp_wutf8.$(OBJ)
+
+$(GLOBJ)winrtsup.$(OBJ): $(GLSRCDIR)/winrtsup.cpp $(WINLIB_MAK)
+	$(GLCCWIN) /EHsc $(GLO_)winrtsup.$(OBJ) $(C_) $(GLSRCDIR)/winrtsup.cpp
+!else
+METRO_OBJS=
+!endif
+
+
+metro__=$(GLOBJ)gp_mswin.$(OBJ) $(GLOBJ)gp_wgetv.$(OBJ) $(GLOBJ)gp_wpapr.$(OBJ)\
+  $(GLOBJ)gp_stdia.$(OBJ) $(METRO_OBJS)
+#$(GLOBJ)gp_wutf8.$(OBJ)
+metro_inc=$(GLD)nosync.dev $(GLD)winplat.dev
+
+$(GLGEN)metro_.dev:  $(metro__) $(ECHOGS_XE) $(metro_inc) $(WINLIB_MAK)
+	$(SETMOD) $(GLGEN)metro_ $(metro__)
+	$(ADDMOD) $(GLGEN)metro_ -include $(metro_inc)
+
+
+# Define MS-Windows handles (file system) as a separable feature.
+
+mshandle_=$(GLOBJ)gp_mshdl.$(OBJ)
+$(GLD)mshandle.dev: $(ECHOGS_XE) $(mshandle_) $(WINLIB_MAK)
+	$(SETMOD) $(GLD)mshandle $(mshandle_)
+	$(ADDMOD) $(GLD)mshandle -iodev handle
+
+$(GLOBJ)gp_mshdl.$(OBJ): $(GLSRC)gp_mshdl.c $(AK)\
+ $(ctype__h) $(errno__h) $(stdio__h) $(string__h)\
+ $(gsmemory_h) $(gstypes_h) $(gxiodev_h) $(gserrors_h) $(WINLIB_MAK)
+	$(GLCC) $(GLO_)gp_mshdl.$(OBJ) $(C_) $(GLSRC)gp_mshdl.c
+
+# Define MS-Windows printer (file system) as a separable feature.
+
+msprinter_=$(GLOBJ)gp_msprn.$(OBJ)
+
+$(GLD)msprinter.dev: $(msprinter_) $(WINLIB_MAK)
+	$(SETMOD) $(GLD)msprinter $(msprinter_)
+	$(ADDMOD) $(GLD)msprinter -iodev printer
+
+$(GLOBJ)gp_msprn.$(OBJ): $(GLSRC)gp_msprn.c $(AK)\
+ $(ctype__h) $(errno__h) $(stdio__h) $(string__h)\
+ $(gsmemory_h) $(gstypes_h) $(gxiodev_h) $(WINLIB_MAK)
+	$(GLCCWIN) $(GLO_)gp_msprn.$(OBJ) $(C_) $(GLSRC)gp_msprn.c
+
+# Define MS-Windows polling as a separable feature
+# because it is not needed by the gslib.
+mspoll_=$(GLOBJ)gp_mspol.$(OBJ)
+$(GLD)mspoll.dev: $(ECHOGS_XE) $(mspoll_) $(WINLIB_MAK)
+	$(SETMOD) $(GLD)mspoll $(mspoll_)
+
+$(GLOBJ)gp_mspol.$(OBJ): $(GLSRC)gp_mspol.c $(AK)\
+ $(gx_h) $(gp_h) $(gpcheck_h) $(WINLIB_MAK)
+	$(GLCCWIN) $(GLO_)gp_mspol.$(OBJ) $(C_) $(GLSRC)gp_mspol.c
+
+# end of winlib.mak
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base	(revision 5)

Property changes on: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/base
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/configure.ac
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/configure.ac	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/configure.ac	(revision 5)
@@ -0,0 +1,3686 @@
+dnl Copyright (C) 2001-2021 Artifex Software, Inc.
+dnl All Rights Reserved.
+dnl
+dnl This software is provided AS-IS with no warranty, either express or
+dnl implied.
+dnl
+dnl This software is distributed under license and may not be copied,
+dnl modified or distributed except as expressly authorized under the terms
+dnl of the license contained in the file LICENSE in this distribution.
+dnl
+dnl Refer to licensing information at http://www.artifex.com or contact
+dnl Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
+dnl CA 94945, U.S.A., +1(415)492-9861, for further information.
+
+
+dnl Process this file with autoconf to produce a configure script
+
+dnl ------------------------------------------------
+dnl Initialization and Versioning
+dnl ------------------------------------------------
+
+AC_INIT
+AC_PREREQ([2.63])
+AC_LANG(C)
+AC_CONFIG_SRCDIR(psi/gs.c)
+
+AC_CANONICAL_HOST
+
+dnl Inherit compiler flags from the environment...
+CFLAGS="${CFLAGS:=}"
+CPPFLAGS="${CPPFLAGS:=}"
+CXXFLAGS="${CXXFLAGS:=}"
+LDFLAGS="${LDFLAGS:=}"
+
+if test x"$host" != x"$build" ; then
+  CFLAGSAUX="${CFLAGSAUX:=}"
+  CPPFLAGSAUX="${CPPFLAGSAUX:=}"
+  LDFLAGSAUX="${LDFLAGSAUX:=}"
+else
+  CFLAGSAUX="${CFLAGSAUX:-$CFLAGS}"
+  CPPFLAGSAUX="${CPPFLAGSAUX:-$CPPFLAGS}"
+  LDFLAGSAUX="${LDFLAGSAUX:-$LDFLAGS}"
+fi
+
+THEMAKEFILE="${MAKEFILE:-Makefile}"
+AUXFLAGS_MAK=auxflags.mak
+
+ARCH_AUTOCONF_HEADER=arch-config/arch_autoconf.h
+ARCH_AUTOCONF_HEADER_PROTO=arch/arch_autoconf.h.in
+
+dnl --------------------------------------------------
+dnl Local utilities
+dnl --------------------------------------------------
+
+dnl GS_SPLIT_LIBS( LIBS, LINKLINE )
+dnl Split a unix-style link line into a list of
+dnl bare library names. For example, the line
+dnl '-L/usr/X11R6/lib -lX11 -lXt' splits into
+dnl LIB='X11 Xt'
+dnl
+AC_DEFUN([GS_SPLIT_LIBS], [
+# the makefile wants a list of just the library names
+for gs_item in $2; do
+  gs_stripped_item=`echo "$gs_item" | sed -e 's/^-l//'`
+  if test "x$gs_stripped_item" != "x$gs_item"; then
+    $1="$[$1] $gs_stripped_item"
+  fi
+done
+])
+
+dnl GS_SPLIT_LIBPATHS( LIBPATHS, LINKLINE )
+dnl Split a unix-style link line into a list of
+dnl bare search path entries. For example,
+dnl '-L/usr/X11R6/lib -lX11 -L/opt/lib -lXt'
+dnl splits to LIBPATHS='/usr/X11R6/lib /opt/lib'
+dnl
+AC_DEFUN([GS_SPLIT_LIBPATHS], [
+for gs_item in $2; do
+  gs_stripped_item=`echo "$gs_item" | sed -e 's/-L//'`
+  if test "x$gs_stripped_item" != "x$gs_item"; then
+    $1="$[$1] $gs_stripped_item"
+  fi
+done
+])
+
+dnl --------------------------------------------------
+dnl Check for programs
+dnl --------------------------------------------------
+
+dnl AC_PROG_CC likes to add '-g -O2' to CFLAGS. however,
+dnl we ignore those flags and construct our own.
+save_cflags="$CFLAGS"
+AC_PROG_CC
+AC_PROG_CPP
+CFLAGS="$save_cflags"
+
+AUXFLAGS_MAK_LINE00="CCAUX=@CC@"
+AUXFLAGS_MAK_LINE01="GCFLAGSAUX=@CPPFLAGS@ @GCFLAGS@ @CFLAGS@"
+AUXFLAGS_MAK_LINE02="CAPOPTAUX="
+AUXFLAGS_MAK_LINE03="CFLAGSAUX_STANDARD=@OPT_CFLAGS@"
+AUXFLAGS_MAK_LINE04="CFLAGSAUX_DEBUG=@DBG_CFLAGS@"
+AUXFLAGS_MAK_LINE05="CFLAGSAUX_PROFILE=-pg @OPT_CFLAGS@"
+AUXFLAGS_MAK_LINE06="LDFLAGSAUX=@LDFLAGS@"
+AUXFLAGS_MAK_LINE07="AUXEXTRALIBS=@LIBS@"
+
+GCFLAGSAUXTMP="\$(GCFLAGS)"
+CAPOPTAUXTMP="\$(CAPOPT)"
+CFLAGSAUX_STANDARDTMP="\$(CFLAGS_STANDARD)"
+CFLAGSAUX_DEBUGTMP="\$(CFLAGS_DEBUG)"
+CFLAGSAUX_PROFILETMP="\$(CFLAGS_PROFILE)"
+LDFLAGSAUXTMP="\$(LDFLAGS)"
+AUXEXTRALIBSTMP="\$(EXTRALIBS)"
+
+# purposefully do not include "help" output for this
+AC_ARG_ENABLE([save_confaux])
+AC_ARG_ENABLE([auxtools_only])
+
+absolute_source_path=$(cd "$(dirname "$0")" && pwd)
+
+GCFLAGSAUX=$GCFLAGSAUXTMP
+CAPOPTAUX=$CAPOPTAUXTMP
+CFLAGSAUX_STANDARD=$CFLAGSAUX_STANDARDTMP
+CFLAGSAUX_DEBUG=$CFLAGSAUX_DEBUGTMP
+CFLAGS_PROFILE=$CFLAGS_PROFILETMP
+LDFLAGSAUX=$LDFLAGSAUXTMP
+AUXEXTRALIBS=$AUXEXTRALIBSTMP
+
+# we have to do this here in case it took
+# AC_PROG_CC to set CC (as it usually does)
+CCAUX="${CCAUX:-$CC}"
+
+AC_PROG_SED
+dnl See if it is GNU sed or else.
+dnl - need more work to tell SED features.
+SED_EXTENDED_REGEX_OPT=-nre
+sed_variant=`sed --version 2>&1`
+sed_variant=`echo $sed_variant|sed -e 's/ .*//'`
+if test "$sed_variant" != GNU ; then
+SED_EXTENDED_REGEX_OPT=-nEe
+fi
+AC_SUBST(SED_EXTENDED_REGEX_OPT)
+
+AC_PROG_RANLIB
+#AC_PROG_INSTALL
+
+# If the caller has gives a specific pkg-config to use, then
+# use it, and skip the tests.
+if test x"$PKGCONFIG" != x"" ; then
+    AC_MSG_NOTICE([Using $PKGCONFIG])
+else
+# this is an unpleasant hack
+# but if we are cross compiling, and there isn't a matching
+# pkconfig for the --host setting, then don't use the 'local'
+# pkconfig at all
+  AC_PATH_TOOL(PKGCONFIG, pkg-config)
+  if test x"$host" != x"$build" ; then
+    dnl pkg-config is used for several tests now...
+    AC_PATH_PROG(BUILD_PKGCONFIG, pkg-config)
+    if test x"$BUILD_PKGCONFIG" = x"$PKGCONFIG" ; then
+      PKGCONFIG=
+    fi
+  fi
+fi
+
+AC_PATH_TOOL(STRIP_XE, strip)
+
+# this is an unpleasant hack
+# but if we are cross compiling, and there isn't a matching
+# pkconfig for the --host setting, then don't use the 'local'
+# pkconfig at all
+if test x"$host" != x"$build" ; then
+  AC_PATH_PROG(BUILD_STRIP_XE, strip)
+  if test x"$BUILD_STRIP_XE" = x"$STRIP_XE" ; then
+    STRIP_XE=
+  fi
+fi
+
+dnl --------------------------------------------------
+dnl Allow excluding the contributed drivers
+dnl --------------------------------------------------
+
+AC_ARG_ENABLE([contrib], AS_HELP_STRING([--disable-contrib], [Do not include contributed drivers]))
+
+CONTRIBINCLUDE="include $srcdir/contrib/contrib.mak"
+INSTALL_CONTRIB="install-contrib-extras"
+
+if test x"$enable_contrib" = x; then
+    case $host in
+      *-mingw*|*-msys*)
+        AC_MSG_WARN([disabling contrib devices])
+        enable_contrib=no
+      ;;
+      *)
+      ;;
+    esac
+fi
+
+if test x"$enable_contrib" != x"no"; then
+#     This is just an arbitrary file in contrib to check
+      if test -f $srcdir/contrib/gdevbjc_.c; then
+        enable_contrib=yes
+      else
+        enable_contrib=no
+      fi
+fi
+
+if test x$enable_contrib = xno; then
+    CONTRIBINCLUDE=""
+    INSTALL_CONTRIB=""
+    CFLAGS="$CFLAGS -DNOCONTRIB"
+fi
+AC_SUBST(CONTRIBINCLUDE)
+AC_SUBST(INSTALL_CONTRIB)
+
+dnl --------------------------------------------------
+dnl Set build flags based on environment
+dnl --------------------------------------------------
+
+CC_OPT_FLAGS_TO_TRY="-O -DNDEBUG"
+CC_VISIBILITY_FLAGS_TO_TRY=""
+SET_DT_SONAME="-soname="
+CFLAGS_LARGEFILE=""
+
+case $host in
+        *-linux*|*-gnu)
+        if test x"$GCC" = x"yes"; then
+            CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
+            CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+            CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
+        fi
+        ;;
+        *bsd*)
+        if test x"$GCC" = x"yes"; then
+            CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
+            CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+            CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
+        fi
+        ;;
+        *-darwin*)
+        if test x"$GCC" = x"yes"; then
+            CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
+            CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+            CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
+        fi
+        SET_DT_SONAME=""
+        ;;
+        *-mingw*|*-msys*)
+        if test x"$GCC" = x"yes"; then
+            CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
+            CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+            CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
+        fi
+        SET_DT_SONAME=""
+        ;;
+        *-sun*|*-solaris*)
+        CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
+        CFLAGS_LARGEFILE="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
+        # the trailing space is required!
+        if test $GCC = no; then
+            SET_DT_SONAME="-h "
+        fi
+        if test x"$GCC" = x"yes"; then
+            CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
+            CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+            CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
+        else
+            CC_DBG_FLAGS_TO_TRY="-g -O0"
+        fi
+        ;;
+        *-aix*)
+        if test x"$GCC" = x"yes"; then
+            CC_OPT_FLAGS_TO_TRY="-O2 -DNDEBUG"
+            CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+            SET_DT_SONAME="so"
+            CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden"
+        fi
+        ;;
+esac
+
+AC_SUBST(SET_DT_SONAME)
+
+
+if test x"$GCC" = x"yes"; then
+    cflags_to_try="-Wall -Wstrict-prototypes -Wundef \
+-Wmissing-declarations -Wmissing-prototypes -Wwrite-strings \
+-fno-strict-aliasing -Werror=declaration-after-statement \
+-fno-builtin -fno-common -Werror=return-type $CFLAGS_LARGEFILE"
+    optflags_to_try="$CC_OPT_FLAGS_TO_TRY"
+    dbgflags_to_try="$CC_DBG_FLAGS_TO_TRY"
+else
+    cflags_to_try="$CFLAGS_LARGEFILE"
+    optflags_to_try="$CC_OPT_FLAGS_TO_TRY"
+    dbgflags_to_try="$CC_DBG_FLAGS_TO_TRY"
+fi
+
+AC_MSG_CHECKING([if compiler supports restrict])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ == 199901L
+void test (char * restrict p){}
+#else
+void test (char * __restrict p){}
+#endif
+]], [[
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ == 199901L
+                 char *restrict t;
+#else
+                 char * __restrict t;
+#endif
+                 test(t);
+                 return 1;
+               ]])],[
+               CFLAGS="$CFLAGS -DHAVE_RESTRICT=1"
+               if test x"$host" = x"$build" ; then
+                   CFLAGSAUX="$CFLAGSAUX -DHAVE_RESTRICT=1"
+               fi
+               AC_MSG_RESULT([yes])],[
+               CFLAGS="$CFLAGS -DHAVE_RESTRICT=0"
+               if test x"$host" = x"$build" ; then
+                   CFLAGSAUX="$CFLAGSAUX -DHAVE_RESTRICT=0"
+               fi
+               AC_MSG_RESULT([no])])
+
+
+
+AC_ARG_WITH([arch_h], AS_HELP_STRING([--with-arch_h=<arch.h to use>],
+            [Use a custom arch.h (must be an absolute path)]),[], [with_arch_h=])
+
+ARCH_CONF_HEADER=
+
+if test x"$with_arch_h" = x""; then
+    case $host in
+          x86_64*-mingw*|x86_64*-msys*)
+            ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/windows-x64-msvc.h"
+          ;;
+          *-mingw*|*-msys*)
+            ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/windows-x86-msvc.h"
+          ;;
+          *-darwin*)
+            ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/osx-x86-x86_64-ppc-gcc.h"
+          ;;
+          *)
+            ARCH_CONF_HEADER=
+            if test x"$host" != x"$build"; then
+              ARCH_CONF_HEADER="\$(GLSRCDIR)/../$ARCH_AUTOCONF_HEADER"
+            else
+              ARCH_CONF_HEADER=
+            fi
+          ;;
+    esac
+else
+  ARCH_CONF_HEADER=$with_arch_h
+fi
+
+AC_SUBST(ARCH_CONF_HEADER)
+
+# debug configurarion is available by default with "make debug"
+#AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug],
+#    [turn on debugging]))
+#if test x$enable_debug = xyes; then
+#    optflags_to_try="-g"
+#    CFLAGS="-DDEBUG $CFLAGS"
+#fi
+
+# NOTE: To correctly disable GCC's strict aliasing with '-fno-strict-aliasing'
+#       option, the 'cflags_to_try' have to be checked after 'optflags_to_try'.
+AC_MSG_CHECKING([supported compiler flags])
+old_cflags=$CFLAGS
+
+for flag in $optflags_to_try; do
+    CFLAGS="$CFLAGS $flag"
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[
+        echo "   $flag"
+        OPT_CFLAGS="$OPT_CFLAGS $flag"
+    ],[])
+    CFLAGS=$old_cflags
+done
+for flag in $cflags_to_try; do
+        CFLAGS="$CFLAGS $flag"
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[
+                echo "   $flag"
+                GCFLAGS="$GCFLAGS $flag"
+        ],[])
+        CFLAGS=$old_cflags
+done
+old_cflags=$CFLAGS
+
+for flag in $dbgflags_to_try; do
+    CFLAGS="$CFLAGS $flag"
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[
+        echo "   $flag"
+        DBG_CFLAGS="$DBG_CFLAGS $flag"
+    ],[])
+    CFLAGS=$old_cflags
+done
+
+CFLAGS_VISIBILITY=""
+
+for flag in $CC_VISIBILITY_FLAGS_TO_TRY; do
+    CFLAGS="$CFLAGS $flag"
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[
+        echo "   $flag"
+        CFLAGS_VISIBILITY="$CFLAGS_VISIBILITY $flag"
+    ],[])
+    CFLAGS=$old_cflags
+done
+
+AC_MSG_RESULT([ ...done.])
+
+dnl ----------------------------
+dnl check for sanitize support
+dnl ----------------------------
+AC_MSG_CHECKING([compiler/linker address santizer support])
+
+AC_ARG_WITH([sanitizer], AS_HELP_STRING([--with-sanitizer=@<:@address/memory@:>@],
+                                   [Sanitizer for 'sanitize' target (defaults to 'address')]),
+            [SANITIZER=$with_sanitizer], [SANITIZER=address])
+
+CFLAGS_SANITIZE=""
+CFLAGS_SANITIZE_TRY="-fsanitize=$SANITIZER -fno-omit-frame-pointer"
+CFLAGS_SAVED="$CFLAGS"
+CFLAGS="$CFLAGS_SANITIZE_TRY"
+
+AC_LINK_IFELSE(
+  [AC_LANG_PROGRAM([#include <stdio.h>], [
+  return(0);
+  ])],
+  [CFLAGS_SANITIZE="$CFLAGS"],
+  [
+    if test x"$with_sanitizer" != x; then
+      AC_MSG_ERROR([--with-sanitizer=$with_sanitizer not supported by compiler])
+    else
+      CFLAGS_SANITIZE="'****************ADDRESS_SANITIZER_NOT_SUPPORTED*********************'"
+    fi
+  ]
+  )
+
+CFLAGS="$CFLAGS_SAVED"
+
+AC_MSG_RESULT([ ...done.])
+
+
+dnl ----------------------------
+dnl check for sanitize build warnings support
+dnl ----------------------------
+AC_MSG_CHECKING([compiler/linker address santizer build warnings support])
+
+CFLAGS_SANITIZE_TRY="$CFLAGS_SANITIZE -W -Wall -Wno-unused-parameter -Wno-sign-compare -Wno-implicit-fallthrough -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-old-style-declaration -Wno-unused-but-set-parameter"
+CFLAGS_SAVED="$CFLAGS"
+CFLAGS="$CFLAGS_SANITIZE_TRY"
+
+AC_LINK_IFELSE(
+  [AC_LANG_PROGRAM([#include <stdio.h>], [
+  return(0);
+  ])],
+  [CFLAGS_SANITIZE="$CFLAGS"], [echo 'extra warnings not supported'])
+
+CFLAGS="$CFLAGS_SAVED"
+AC_MSG_RESULT([ ...done.])
+
+
+dnl ----------------------------
+dnl check for big/little endian
+dnl ----------------------------
+
+AC_C_BIGENDIAN([BIGENDIAN=1], [BIGENDIAN=0],
+  [AC_MSG_ERROR([Endian status cannot be determined])],
+  [AC_MSG_ERROR([Building of universal binaries is not implemented.])])
+
+dnl --------------------------------------------------
+dnl check for sse2 intrinsics
+dnl --------------------------------------------------
+
+AC_MSG_CHECKING([sse2 support])
+save_cflags=$CFLAGS
+CFLAGS="$CFLAGS $OPT_CFLAGS"
+
+HAVE_SSE2=""
+AC_LINK_IFELSE(
+  [AC_LANG_PROGRAM([#include <emmintrin.h>], [
+  __m128i input1;
+  unsigned char buf1[[128]];
+  input1 = _mm_loadu_si128((const __m128i *)buf1);
+  return(0);
+  ])],
+  [HAVE_SSE2="-DHAVE_SSE2"], [HAVE_SSE2=""])
+
+AC_ARG_ENABLE([sse2], AS_HELP_STRING([--disable-sse2],
+       [Do not use sse2 instrinsics]), [
+             if test "x$enable_sse2" = xno; then
+                HAVE_SSE2=""
+             fi])
+
+if test "x$HAVE_SSE2" != x; then
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+
+AC_SUBST(HAVE_SSE2)
+CFLAGS=$save_cflags
+
+
+dnl --------------------------------------------------
+dnl Check for headers
+dnl --------------------------------------------------
+
+AC_HEADER_DIRENT
+AC_CHECK_HEADERS([errno.h fcntl.h limits.h malloc.h memory.h stdlib.h string.h strings.h sys/ioctl.h sys/param.h sys/time.h sys/times.h syslog.h unistd.h dirent.h ndir.h sys/dir.h sys/ndir.h inttypes.h])
+
+dnl --------------------------------------------------
+dnl Sun, BSD possibly other makes don't have quite the
+dnl feature set of GNU make. We still prefer GNU make,
+dnl but......
+dnl --------------------------------------------------
+
+AC_ARG_WITH([make], AS_HELP_STRING([--with-make=@<:@"make" program name@:>@],
+                                   [If you use a version of make not called "make"]),
+            [MAKE=$with_make], [MAKE=make])
+
+AC_CHECK_PROG(MAKE_EXISTS,[$MAKE],[yes],[no])
+
+if test x"$MAKE_EXISTS" = x"no" ; then
+  AC_MSG_ERROR([Required make program '$MAKE' not found.])
+fi
+
+OBJDIR_BSDMAKE_WORKAROUND=obj
+SUB_MAKE_OPTION=
+ORDER_ONLY=""
+
+AC_MSG_CHECKING(if make is GNU make)
+if make --version 2> /dev/null | grep GNU 2>&1 > /dev/null ; then
+  AC_MSG_RESULT(yes)
+  SUB_MAKE_OPTION="-f \$(MAKEFILE)"
+  ORDER_ONLY="|"
+else
+  AC_MSG_RESULT(no)
+  # BSD Make treats obj special and cd into it first
+  OBJDIR_BSDMAKEWORKAOROUND="notobj"
+fi
+
+AC_SUBST(OBJDIR_BSDMAKE_WORKAROUND)
+AC_SUBST(ORDER_ONLY)
+AC_SUBST(SUB_MAKE_OPTION)
+
+AC_CHECK_HEADER([sys/window.h])
+
+dnl --------------------------------------------------
+dnl Check for typedefs, structures, etc
+dnl --------------------------------------------------
+
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_MODE_T
+AC_TYPE_OFF_T
+AC_TYPE_SIZE_T
+AC_STRUCT_ST_BLOCKS
+AC_STRUCT_TM
+
+dnl see if we're on a system that puts the *int*_t types
+dnl from stdint.h in sys/types.h
+if test "x$ac_cv_header_stdint_h" != xyes; then
+    AC_CHECK_TYPES([int8_t, int16_t, int32_t, uint8_t, uint16_t, uint32_t],,,[#include <sys/types.h>])
+    if test "$ac_cv_type_uint8_t" = yes; then
+        AC_DEFINE([SYS_TYPES_HAS_STDINT_TYPES])
+        GCFLAGS="$GCFLAGS -DSYS_TYPES_HAS_STDINT_TYPES"
+    fi
+fi
+
+dnl we aren't interested in all of DEFS, so manually insert
+dnl the flags we care about
+if test "$ac_cv_c_const" != yes; then
+        GCFLAGS="$GCFLAGS -Dconst="
+fi
+if test "x$ac_cv_header_stdint_h" = "xyes"; then
+        GCFLAGS="$GCFLAGS -DHAVE_STDINT_H=1"
+fi
+
+if test "x$ac_cv_header_dirent_h" = "xyes"; then
+        GCFLAGS="$GCFLAGS -DHAVE_DIRENT_H=1"
+fi
+
+if test "x$ac_cv_header_ndir_h" = xyes; then
+        GCFLAGS="$GCFLAGS -DHAVE_NDIR_H=1"
+fi
+
+if test "x$ac_cv_header_sys_dir_h" = "xyes"; then
+        GCFLAGS="$GCFLAGS -DHAVE_SYS_DIR_H=1"
+fi
+
+if test "x$ac_cv_header_sys_ndir_h" = "xyes"; then
+        GCFLAGS="$GCFLAGS -DHAVE_SYS_NDIR_H=1"
+fi
+
+if test "x$ac_cv_header_sys_time_h" = "xyes"; then
+        GCFLAGS="$GCFLAGS -DHAVE_SYS_TIME_H=1"
+fi
+
+if test "x$ac_cv_header_sys_times_h" = "xyes"; then
+        GCFLAGS="$GCFLAGS -DHAVE_SYS_TIMES_H=1"
+fi
+
+if test "x$ac_cv_header_inttypes_h" = "xyes"; then
+        GCFLAGS="$GCFLAGS -DHAVE_INTTYPES_H=1"
+fi
+
+AC_CHECK_LIB([dl], [dlopen],
+             [AC_CHECK_HEADER([dlfcn.h], [GCFLAGS="$GCFLAGS -DHAVE_LIBDL=1";LIBS="-ldl $LIBS"])]
+              )
+
+large_color_index=1
+
+AC_ARG_WITH([large_color_index],, large_color_index="$with_large_color_index")
+
+if test x"$large_color_index" != "x0"; then
+  dnl try to find a 64 bit type for devicen color index
+  color_ind_type="none"
+   AC_CHECK_SIZEOF(unsigned long long)
+   if test $ac_cv_sizeof_unsigned_long_long = 8; then
+          color_ind_type="unsigned long long"
+          color_ind_size=$ac_cv_sizeof_unsigned_long_long
+   else
+    AC_CHECK_SIZEOF(unsigned long int)
+    if test $ac_cv_sizeof_unsigned_long_int = 8; then
+          color_ind_type="unsigned long int"
+          color_ind_size=$ac_cv_sizeof_unsigned_long_int
+    else
+     AC_CHECK_SIZEOF(unsigned __int64)
+     if test $ac_cv_sizeof_unsigned___int64 = 8; then
+          color_ind_type="unsigned __int64"
+          color_ind_size=$ac_cv_sizeof_unsigned___int64
+     else
+      AC_CHECK_SIZEOF(u_int64_t)
+      if test $ac_cv_sizeof_u_int64_t = 8; then
+          color_ind_type="u_int64_t"
+          color_ind_size=$ac_cv_sizeof_u_int64_t
+      fi
+     fi
+    fi
+   fi
+else
+  dnl try to find a 32 bit type for devicen color index
+  color_ind_type="none"
+   AC_CHECK_SIZEOF(unsigned long int)
+   if test $ac_cv_sizeof_unsigned_long_int = 4; then
+          color_ind_type="unsigned long int"
+          color_ind_size=$ac_cv_sizeof_unsigned_long_int
+   else
+    AC_CHECK_SIZEOF(unsigned int)
+    if test $ac_cv_sizeof_unsigned_int = 4; then
+          color_ind_type="unsigned int"
+          color_ind_size=$ac_cv_sizeof_unsigned_int
+    else
+     AC_CHECK_SIZEOF(unsigned __int32)
+     if test $ac_cv_sizeof_unsigned___int32 = 4; then
+          color_ind_type="unsigned __int32"
+          color_in_size=$ac_cv_sizeof_unsigned___int32
+     else
+      AC_CHECK_SIZEOF(u_int32_t)
+      if test $ac_cv_sizeof_u_int32_t = 4; then
+          color_ind_type="u_int32_t"
+          color_ind_size=$ac_cv_sizeof_u_int32_t
+      fi
+     fi
+    fi
+   fi
+fi
+
+dnl if a suitable type wasn't found above, we fall back to
+dnl a default in genarch.
+if test "$color_ind_type" != "none"; then
+        GCFLAGS="$GCFLAGS -DGX_COLOR_INDEX_TYPE=\"$color_ind_type\""
+        ARCH_SIZEOF_GX_COLOR_INDEX=$color_ind_size
+fi
+
+AC_SUBST(ARCH_SIZEOF_GX_COLOR_INDEX)
+
+
+
+dnl --------------------------------------------------
+dnl Set options that we want to pass into all other
+dnl configure scripts we might call
+dnl --------------------------------------------------
+
+SUBCONFIG_OPTS="--build=$build --host=$host"
+
+#SUBCONFIG_OPTS=""
+#if test x"$build_alias" != x""; then
+#  SUBCONFIG_OPTS="$SUBCONFIG_OPTS --build=$build_alias"
+#fi
+#if test x"$host_alias" != x""; then
+#  SUBCONFIG_OPTS="$SUBCONFIG_OPTS --host=$host_alias"
+#fi
+
+dnl --------------------------------------------------
+dnl Check for libraries
+dnl --------------------------------------------------
+
+AC_CHECK_LIB(m, cos)
+
+AC_CHECK_FUNCS([pread pwrite], [HAVE_PREAD_PWRITE="-DHAVE_PREAD_PWRITE=1"], [HAVE_PREAD_PWRITE=])
+
+if test "x$HAVE_PREAD_PWRITE" != "x"; then
+  save_cflags=$CFLAGS
+  CFLAGS="$CFLAGS -D__USE_UNIX98=1 -D_XOPEN_SOURCE=500"
+  AC_CHECK_DECLS([pwrite,pread], [], [HAVE_PREAD_PWRITE=])
+  CFLAGS=$save_cflags
+  if test "x$HAVE_PREAD_PWRITE" != "x"; then
+    GCFLAGS="$GCFLAGS -D__USE_UNIX98=1"
+  fi
+fi
+
+AC_SUBST(HAVE_PREAD_PWRITE)
+
+AC_CHECK_DECL([popen], [HAVE_POPEN_PROTO="-DHAVE_POPEN_PROTO=1"], [AVE_POPEN_PROTO=])
+AC_SUBST(HAVE_POPEN_PROTO)
+
+SYNC="nosync"
+PTHREAD_LIBS=""
+RECURSIVE_MUTEXATTR=""
+
+AC_ARG_ENABLE([threading], AS_HELP_STRING([--disable-threading],
+    [disable support for multithreaded rendering]))
+
+# if you haven't got pread/pwrite, we can't use multithreading
+if test "x$HAVE_PREAD_PWRITE" != "x"; then
+  if test "$enable_threading" != "no"; then
+    mutex_result="no"
+    AC_CHECK_LIB(pthread, pthread_create, [
+      SYNC=posync;
+      PTHREAD_LIBS="-lpthread"
+    ])
+    AC_MSG_CHECKING([for recursive mutexes])
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], [[
+            static int k = PTHREAD_MUTEX_RECURSIVE;
+            #ifndef pthread_mutexattr_settype
+            #ifdef __cplusplus
+              (void) pthread_mutexattr_settype;
+            #else
+              (void) pthread_mutexattr_settype;
+            #endif
+            #endif
+            ;
+            return 0;
+          ]])],[RECURSIVE_MUTEXATTR="-DGS_RECURSIVE_MUTEXATTR=PTHREAD_MUTEX_RECURSIVE"
+          mutex_result="PTHREAD_MUTEX_RECURSIVE"],[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], [[
+              static int k = PTHREAD_MUTEX_RECURSIVE_NP;
+              #ifndef pthread_mutexattr_settype
+              #ifdef __cplusplus
+                (void) pthread_mutexattr_settype;
+              #else
+                (void) pthread_mutexattr_settype;
+              #endif
+              #endif
+              ;
+              return 0;
+            ]])],[RECURSIVE_MUTEXATTR="-DGS_RECURSIVE_MUTEXATTR=PTHREAD_MUTEX_RECURSIVE_NP"
+             mutex_result="PTHREAD_MUTEX_RECURSIVE_NP"],[])])
+    AC_MSG_RESULT($mutex_result)
+  fi
+fi
+
+AC_SUBST(SYNC)
+AC_SUBST(PTHREAD_LIBS)
+AC_SUBST(RECURSIVE_MUTEXATTR)
+
+dnl Tesseract/Leptonica detection
+TESSERACTDIR=tesseract
+LEPTONICADIR=leptonica
+OCR_VERSION=0
+LEPTONICAINCLUDE=
+TESSERACTINCLUDE=
+TESSERACT_LIBS=
+OCR_DEVS=
+
+OCR_DEVS_WARNING_LINE1=
+OCR_DEVS_WARNING_LINE2=
+
+AC_ARG_WITH([tesseract], AS_HELP_STRING([--without-tesseract],
+    [do not try to use the Tesseract library for OCR]))
+
+if test x$with_tesseract != xno; then
+  AC_MSG_CHECKING([for local Tesseract library source])
+  if test -d $srcdir/tesseract && test -d $srcdir/leptonica; then
+    AC_MSG_RESULT([yes])
+    AC_LANG_PUSH(C++)
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[HAVE_CXX_COMPILER=yes; AC_SUBST(CXX)],[HAVE_CXX_COMPILER=no])
+    if test x$HAVE_CXX_COMPILER != xyes; then
+      AC_MSG_WARN([Disabling tesseract as no working C++ compiler])
+    elif test x$SYNC = xnosync ; then
+      AC_MSG_ERROR([Threading disabled or not available. Tesseract OCR relies on threading. Rerun configure with "--without-tesseract" to exclude OCR from the build])
+    else
+
+      save_cxxflags="$CXXFLAGS"
+      cxxflags_to_try="-std=c++17 -stdlib=libstdc++"
+      CXXFLAGS_TO_USE=""
+
+      AC_MSG_CHECKING([supported C++ compiler flags])
+      for flag in $cxxflags_to_try ; do
+        CXXFLAGS="$CXXFLAGS $flag"
+
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <cstdlib>]], [[return 0;]])],[
+                echo "   $flag"; CXXFLAGS_TO_USE="$CXXFLAGS_TO_USE $flag"
+        ],[])
+
+        CXXFLAGS="$old_cflags"
+      done
+
+      if test x"$GXX" = x"no" || echo $CXXFLAGS_TO_USE | grep "std=c++17" ; then
+        if test x"$GXX" = x"no" ; then
+          OCR_DEVS_WARNING_LINE1="C++ compiler does not appear to be gcc or compatible, attempting to continue anyway"
+          OCR_DEVS_WARNING_LINE2="NOTE: that tesseract requires a C++17 compatible C++ compiler"
+        fi
+
+        CXXFLAGS="$save_cxxflags $CXXFLAGS_TO_USE"
+
+        dnl --------------------------------------------------
+        dnl check for sse4.1, avx, avx2 or fma
+        dnl --------------------------------------------------
+        AC_MSG_CHECKING([sse4.1 support])
+        save_cxxflags=$CXXFLAGS
+        TESS_CXXFLAGS="$CXXFLAGS"
+        CXXFLAGS="$CXXFLAGS -msse4.1"
+
+        TESS_SSE4_1=""
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM([#include <emmintrin.h>
+                            #include <smmintrin.h>],
+                           [__m128i input1;
+                            unsigned char buf1[[128]];
+                            input1 = _mm_loadu_si128((const __m128i *)buf1);
+                            input1 = _mm_hadd_epi32(input1, input1);
+                            return(0);
+                           ])],
+          [TESS_SSE4_1="-msse4.1"],
+          [TESS_SSE4_1=""])
+
+        if test "x$TESS_SSE4_1" != x; then
+          AC_MSG_RESULT(yes)
+          TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_SSE4_1"
+        else
+          AC_MSG_RESULT(no)
+        fi
+
+        AC_MSG_CHECKING([avx support])
+        CXXFLAGS="$save_cxxflags -mavx"
+
+        TESS_AVX=""
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM([#include <immintrin.h>],
+                           [__m256d input1 = _mm256_setzero_pd();
+                            input1 = _mm256_hadd_pd(input1, input1);
+                            return(0);])],
+          [TESS_AVX="-mavx"],
+          [TESS_AVX=""])
+
+        if test "x$TESS_AVX" != x; then
+          AC_MSG_RESULT(yes)
+          TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_AVX"
+        else
+          AC_MSG_RESULT(no)
+        fi
+
+        AC_MSG_CHECKING([avx2 support])
+        CXXFLAGS="$save_cxxflags -mavx2"
+
+        TESS_AVX2=""
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM([#include <immintrin.h>],
+                           [__m256i input1;
+                            unsigned char buf1[[256]];
+                            input1 = _mm256_loadu_si256((const __m256i *)buf1);
+                            input1 = _mm256_adds_epu8(input1, input1);
+                            return(0);])],
+          [TESS_AVX2="-mavx2"],
+          [TESS_AVX2=""])
+
+        if test "x$TESS_AVX2" != x; then
+          AC_MSG_RESULT(yes)
+          TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_AVX2"
+        else
+          AC_MSG_RESULT(no)
+        fi
+
+        AC_MSG_CHECKING([fma support])
+        CXXFLAGS="$save_cxxflags -mfma"
+
+        TESS_FMA=""
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM([#include <immintrin.h>],
+                           [__m256d input1 = _mm256_setzero_pd();
+                            input1 = _mm256_fmadd_pd(input1, input1, input1);
+                            return(0);])],
+          [TESS_FMA="-mfma"],
+          [TESS_FMA=""])
+
+        if test "x$TESS_FMA" != x; then
+          AC_MSG_RESULT(yes)
+          TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_FMA"
+        else
+          AC_MSG_RESULT(no)
+        fi
+
+        AC_MSG_CHECKING([neon support])
+        CXXFLAGS="$save_cxxflags -mfpu=neon -mcpu=cortex-a53"
+
+        TESS_NEON=""
+        AC_LINK_IFELSE(
+         [AC_LANG_PROGRAM([#include "arm_neon.h"],
+                          [int32x4_t round = vdupq_n_s32(10);
+                           return(0);])],
+         [TESS_NEON="-mfpu=neon -mcpu=cortex-a53 -D__ARM_NEON__"],
+         [TESS_NEON=""])
+
+        if test "x$TESS_NEON" != x; then
+          AC_MSG_RESULT(yes)
+          TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_NEON"
+        else
+          AC_MSG_RESULT(no)
+        fi
+
+        CXXFLAGS="$save_cxxflags"
+
+        OCR_VERSION=1
+        OCR_DEVS="\$(DD)ocr.dev \$(DD)hocr.dev \$(DD)pdfocr8.dev \$(DD)pdfocr24.dev \$(DD)pdfocr32.dev"
+        LEPTONICAINCLUDE="include base/leptonica.mak"
+        TESSERACTINCLUDE="include base/tesseract.mak"
+        TESSERACT_LIBS="-lstdc++"
+      else
+        OCR_DEVS_WARNING_LINE1="OCR devices disabled due to incompatible compiler: tesseract requires a C++17 compatible compiler"
+      fi
+    fi
+    AC_LANG_POP()
+  else
+    AC_MSG_RESULT([no])
+  fi
+fi
+
+AC_SUBST(TESSERACT_LIBS)
+AC_SUBST(LEPTONICAINCLUDE)
+AC_SUBST(TESSERACTINCLUDE)
+AC_SUBST(LEPTONICADIR)
+AC_SUBST(TESSERACTDIR)
+AC_SUBST(OCR_DEVS)
+AC_SUBST(OCR_VERSION)
+AC_SUBST(TESS_AVX)
+AC_SUBST(TESS_AVX2)
+AC_SUBST(TESS_FMA)
+AC_SUBST(TESS_SSE4_1)
+AC_SUBST(TESS_NEON)
+AC_SUBST(TESS_CXXFLAGS)
+
+dnl Tests for iconv (Needed for OpenPrinting Vector, "opvp" output device)
+AC_ARG_WITH(libiconv,
+            [AS_HELP_STRING([--with-libiconv=@<:@no/gnu/native@:>@],
+                            [use the libiconv library])],,
+            [with_libiconv=maybe])
+found_iconv=no
+case $with_libiconv in
+  maybe)
+    # Check in the C library first
+    AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
+    # Check if we have GNU libiconv
+    if test $found_iconv = "no"; then
+      AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
+    fi
+    # Check if we have a iconv in -liconv, possibly from vendor
+    if test $found_iconv = "no"; then
+      AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
+    fi
+    ;;
+  no)
+    found_iconv=no
+    ;;
+  gnu|yes)
+    AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
+    ;;
+  native)
+    AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
+    ;;
+esac
+if test x$found_iconv != xno -a x$with_libiconv != xno ; then
+  LIBS="$LIBS -liconv"
+fi
+
+case $with_libiconv in
+  gnu)
+    AC_DEFINE(USE_LIBICONV_GNU, 1, [Using GNU libiconv])
+    CFLAGS="$CFLAGS -DUSE_LIBICONV_GNU"
+    ;;
+  native)
+    AC_DEFINE(USE_LIBICONV_NATIVE, 1, [Using a native implementation of iconv in a separate library])
+    ;;
+esac
+
+dnl Check for libidn (needed for Unicode password support)
+AC_ARG_WITH(libidn,
+            [AS_HELP_STRING([--without-libidn],
+                               [Do not use libidn to support Unicode passwords])],,
+            [with_libidn=maybe])
+
+if test x$with_libidn != xno; then
+  if test x"$PKGCONFIG" != x""; then
+    AC_MSG_CHECKING(for libidn with pkg-config)
+    if $PKGCONFIG --exists libidn; then
+            AC_MSG_RESULT(yes)
+            LIBS="$LIBS `$PKGCONFIG --libs libidn`"
+            CFLAGS="$CFLAGS `$PKGCONFIG --cflags libidn`"
+            HAVE_LIBIDN=-DHAVE_LIBIDN
+    else
+            AC_MSG_RESULT(no)
+    fi
+  fi
+  if test -z "$HAVE_LIBIDN"; then
+    AC_CHECK_LIB(idn, stringprep, [
+        with_libidn=no
+        AC_CHECK_HEADER([stringprep.h],
+        [
+          with_libidn=yes
+          HAVE_LIBIDN="-DHAVE_LIBIDN"
+          LIBS="$LIBS -lidn"
+        ])
+        ], [
+        if test x$with_libidn != xmaybe; then
+          AC_MSG_ERROR([libidn not found])
+        fi
+        with_libidn=no
+    ])
+  fi
+fi
+
+UTF8DEVS=''
+if test x$with_libidn != xno; then
+  if test x$found_iconv != xno; then
+    UTF8DEVS='$(PSD)utf8.dev'
+  fi
+fi
+AC_SUBST(HAVE_LIBIDN)
+AC_SUBST(UTF8DEVS)
+
+dnl Tests for libpaper (to determine system default paper size)
+AC_ARG_WITH([libpaper],
+            AS_HELP_STRING([--without-libpaper],
+                           [disable libpaper support]))
+if test x$with_libpaper != xno; then
+    AC_CHECK_LIB(paper, systempapername, [with_libpaper=yes],
+    [
+        AC_MSG_WARN([disabling support for libpaper])
+        with_libpaper=no
+    ])
+fi
+if test x$with_libpaper != xno; then
+    AC_CHECK_HEADER([paper.h], [with_libpaper=yes],
+    [
+        AC_MSG_WARN([disabling support for libpaper])
+        with_libpaper=no
+    ])
+fi
+
+if test x$with_libpaper != xno; then
+    LIBS="$LIBS -lpaper"
+    AC_DEFINE(USE_LIBPAPER, 1, [Using libpaper])
+    CFLAGS="$CFLAGS -DUSE_LIBPAPER"
+fi
+
+dnl Fontconfig support
+HAVE_FONTCONFIG=""
+FONTCONFIG_CFLAGS=""
+FONTCONFIG_LIBS=""
+AC_ARG_ENABLE([fontconfig], AS_HELP_STRING([--disable-fontconfig],
+    [Do not use fontconfig to list system fonts]))
+if test "$enable_fontconfig" != "no"; then
+        # We MUST NOT use PKG_CHECK_MODULES since it is a) not a standard
+        # autoconf macro and b) requires pkg-config on the system, which is
+        # NOT standard on ANY OS, including Linux!
+        if test "x$PKGCONFIG" != x; then
+                AC_MSG_CHECKING(for fontconfig with pkg-config)
+                if $PKGCONFIG --exists fontconfig; then
+                        AC_MSG_RESULT(yes)
+                        FONTCONFIG_CFLAGS="$CFLAGS `$PKGCONFIG --cflags fontconfig`"
+                        FONTCONFIG_LIBS="`$PKGCONFIG --libs fontconfig`"
+                        HAVE_FONTCONFIG=-DHAVE_FONTCONFIG
+                else
+                        AC_MSG_RESULT(no)
+                fi
+        fi
+        if test -z "$HAVE_FONTCONFIG"; then
+                AC_CHECK_LIB([fontconfig], [FcInitLoadConfigAndFonts], [
+                  AC_CHECK_HEADER([fontconfig/fontconfig.h], [
+                    FONTCONFIG_LIBS="-lfontconfig"
+                    HAVE_FONTCONFIG="-DHAVE_FONTCONFIG"
+                  ])
+                ])
+        fi
+fi
+AC_SUBST(HAVE_FONTCONFIG)
+AC_SUBST(FONTCONFIG_CFLAGS)
+AC_SUBST(FONTCONFIG_LIBS)
+
+dnl DBus support
+HAVE_DBUS=""
+DBUS_CFLAGS=""
+DBUS_LIBS=""
+AC_ARG_ENABLE([dbus], AS_HELP_STRING([--disable-dbus],
+    [Do not use dbus to communicate with external services]))
+if test "$enable_dbus" != "no"; then
+        if test "x$PKGCONFIG" != x; then
+                AC_MSG_CHECKING(for dbus with pkg-config)
+                if $PKGCONFIG --exists dbus-1; then
+                        AC_MSG_RESULT(yes)
+                        DBUS_CFLAGS="$CFLAGS `$PKGCONFIG --cflags dbus-1`"
+                        DBUS_LIBS="`$PKGCONFIG --libs dbus-1`"
+                        HAVE_DBUS=-DHAVE_DBUS
+                else
+                        AC_MSG_RESULT(no)
+                fi
+        fi
+        if test -z "$HAVE_DBUS"; then
+                AC_CHECK_LIB([dbus], [dbus_message_iter_get_basic], [
+                  AC_CHECK_HEADER([dbus-1.0/dbus/dbus.h], [
+                    DBUS_LIBS="-ldbus-1 -lpthread -lrt"
+                    HAVE_DBUS="-DHAVE_DBUS"
+                  ])
+                ])
+        fi
+fi
+AC_SUBST(HAVE_DBUS)
+AC_SUBST(DBUS_CFLAGS)
+AC_SUBST(DBUS_LIBS)
+
+
+AC_ARG_ENABLE([freetype], AS_HELP_STRING([--disable-freetype],
+        [Disable freetype for font rasterization]))
+
+FT_BRIDGE=0
+SHARE_FT=0
+FTSRCDIR=src
+FT_CFLAGS=
+FT_LIBS=
+
+INSERT_UFST_BRIDGE_EQUAL_ONE=
+UFST_ROOT=
+UFST_CFLAGS=
+UFST_LIB_EXT=
+FAPIUFST_MAK="\$(GLSRCDIR)\$(D)stub.mak"
+
+if test x"$enable_fapi" != xno; then
+
+  dnl UFST detection
+  AC_ARG_WITH([ufst], AS_HELP_STRING([--with-ufst=UFST_ROOT_DIR],
+                                   [Use UFST]),
+            [], [with_ufst=no])
+
+  if test x"$with_ufst" != xno; then
+    if test -d $with_ufst; then
+      INSERT_UFST_BRIDGE_EQUAL_ONE="UFST_BRIDGE=1"
+      case $with_ufst in
+        /*) UFST_ROOT=$with_ufst ;;
+         *) UFST_ROOT=`pwd`/$with_ufst ;;
+      esac
+
+      # Various versions of UFST fail to build with -Werror=return-type so
+      # strip that off our GCFLAGS if it's there.
+      tmp_cflags=""
+      for tmp_cflag in $GCFLAGS ; do
+        echo $tmp_cflag
+        tmp_cflags="$tmp_cflags $(echo $tmp_cflag | grep -v "Werror=return-type")"
+      done
+      GCFLAGS="$tmp_cflags"
+
+      FAPIUFST_MAK="\$(UFST_ROOT)\$(D)fapiufst.mak"
+
+      if ! test -f $UFST_ROOT/fapiufst.mak ; then
+        echo $UFST_ROOT/fapiufst.mak
+        AC_MSG_ERROR([UFST: fapiufst.mak not found])
+      fi
+
+      # Check pointer size
+      AC_CHECK_SIZEOF(char*)
+
+      # UFST 5.x uses strcmpi() but on GNU systems the equivalent is
+      # strcasecmp()
+      if test "x$ac_cv_sizeof_charp" = "x8"; then
+        UFST_CFLAGS="-DGCCx86_64 -DO_BINARY=0 -Dstrcmpi=strcasecmp"
+      else
+        if test "x$ac_cv_sizeof_charp" = "x4"; then
+          UFST_CFLAGS="-DGCCx86 -DO_BINARY=0 -Dstrcmpi=strcasecmp"
+        fi
+      fi
+
+      UFST_LIB_EXT=.a
+    else
+      AC_MSG_ERROR([UFST source directory not found])
+    fi
+  fi
+
+  if test x"$enable_freetype" != xno; then
+    AC_MSG_CHECKING([for local freetype library source])
+    dnl We prefer freetype2 over freetype, so it is easy to override
+    dnl the included freetype source with a checkout from upstream.
+    for dir in $srccdir/freetype2 $srcdir/freetype; do
+      if test -f $dir/src/base/ftbbox.c; then
+        AC_MSG_RESULT(yes)
+        SHARE_FT=0
+        FTSRCDIR="$dir"
+        FT_CFLAGS="-I$dir/include"
+        FT_BRIDGE=1
+        break;
+      fi
+    done
+
+    if test x"$FTSRCDIR" = x"src"; then
+      AC_MSG_RESULT([no])
+      if test x"$PKGCONFIG" != x""; then
+        AC_MSG_CHECKING(for system freetype2 >= 2.4.2 with pkg-config)
+            # pkg-config needs the libtool version, which != the freetype2 version <sigh!>
+            # There is a table of corresponding ft2<->libtool numbers in freetype/docs/VERSION.DLL
+            if $PKGCONFIG --atleast-version=12.0.6 freetype2; then
+                AC_MSG_RESULT(yes)
+                if test "x$FT_CFLAGS" = "x"; then
+                  FT_CFLAGS="$CFLAGS `$PKGCONFIG --cflags freetype2`"
+		fi
+		if test "x$FT_LIBS" = "x"; then
+                  FT_LIBS="`$PKGCONFIG --libs-only-l freetype2`"
+                fi
+		if test "x$FT_LIB_PATH" = "x"; then
+		  FT_LIB_PATH="`$PKGCONFIG --libs-only-L freetype2`"
+		fi
+		FT_BRIDGE=1
+                SHARE_FT=1
+            else
+                AC_MSG_RESULT(no)
+                AFS=1
+            fi
+      else
+        AC_CHECK_HEADER([ft2build.h], [FT_BRIDGE=1], [AFS=1])
+
+        if test "x$FT_BRIDGE" = x1; then
+          AC_CHECK_LIB(freetype, FT_Init_FreeType,
+            [FT_BRIDGE=1], [FT_BRIDGE=0; AFS=1])
+
+          if test "x$FT_BRIDGE" = x1; then
+            AC_MSG_CHECKING(for system freetype2 library >= 2.4.2)
+            AC_COMPILE_IFELSE(
+              [AC_LANG_PROGRAM([#include "ft2build.h"
+              #include FT_FREETYPE_H], [
+                 #if FREETYPE_MAJOR < 2
+                   FAIL
+                 #endif
+                 #if FREETYPE_MINOR < 4
+                   FAIL
+                 #endif
+                 #if FREETYPE_PATCH < 2
+                   FAIL
+                 #endif
+                 return(0);
+              ])],
+              [FT_BRIDGE=1;AC_MSG_RESULT(yes)], [FT_BRIDGE=0; AFS=1;AC_MSG_RESULT(no)])
+          fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+if test x"$FT_BRIDGE" != x"1"; then
+  if test x"$enable_auxtools_only" != x"yes" ; then
+    AC_MSG_ERROR([No usable Freetype source or library found])
+  fi
+fi
+
+AC_SUBST(INSERT_UFST_BRIDGE_EQUAL_ONE)
+AC_SUBST(UFST_ROOT)
+AC_SUBST(UFST_CFLAGS)
+AC_SUBST(UFST_LIB_EXT)
+AC_SUBST(FAPIUFST_MAK)
+
+AC_SUBST(FT_BRIDGE)
+AC_SUBST(SHARE_FT)
+AC_SUBST(FTSRCDIR)
+AC_SUBST(FT_CFLAGS)
+AC_SUBST(FT_LIBS)
+AC_SUBST(FT_LIB_PATH)
+
+TIFF_JPEG_INCLUDE=
+
+if test x"$enable_auxtools_only" = x"yes" ; then
+  LIBJPEGDIR=
+  SHARE_LIBJPEG=0
+  AC_DEFINE([DONT_HAVE_JMEMSYS_H], 1, [])
+  AC_SUBST(SHARE_LIBJPEG)
+  AC_SUBST(LIBJPEGDIR)
+else
+  AC_MSG_CHECKING([for local jpeg library source])
+  dnl At present, we give the local source priority over the shared
+  dnl build, so that the D_MAX_BLOCKS_IN_MCU patch will be applied.
+  dnl A more sophisticated approach would be to test the shared lib
+  dnl to see whether it has already been patched.
+  LIBJPEGDIR=src
+  if test -f $srcdir/jpeg/jpeglib.h; then
+          AC_MSG_RESULT([jpeg])
+          SHARE_LIBJPEG=0
+          LIBJPEGDIR=$srcdir/jpeg
+  elif test -f $srcdir/jpeg-6b/jpeglib.h; then
+          AC_MSG_RESULT([jpeg-6b])
+          SHARE_LIBJPEG=0
+          LIBJPEGDIR=$srcdir/jpeg-6b
+  else
+          AC_MSG_RESULT([no])
+          AC_CHECK_LIB(jpeg, jpeg_set_defaults, [
+            AC_CHECK_HEADERS([jpeglib.h], [SHARE_LIBJPEG=1])
+          ])
+  fi
+
+  if test x"$LIBJPEGDIR" != x"src" ; then
+    TIFF_JPEG_INCLUDE="$LIBJPEGDIR"
+  fi
+
+  if test -z "$SHARE_LIBJPEG"; then
+    AC_MSG_ERROR([I wasn't able to find a copy
+    of the jpeg library. This is required for compiling
+    ghostscript. Please download a copy of the source,
+    e.g. from http://www.ijg.org/, unpack it at the
+    top level of the gs source tree, and rename
+    the directory to 'jpeg'.
+    ])
+  fi
+  AC_SUBST(SHARE_LIBJPEG)
+  AC_SUBST(LIBJPEGDIR)
+  dnl check for the internal jpeg memory header
+  AC_MSG_CHECKING([for jmemsys.h])
+  if test -r $LIBJPEGDIR/jmemsys.h; then
+    AC_MSG_RESULT([yes])
+  else
+    AC_MSG_RESULT([no])
+    AC_DEFINE([DONT_HAVE_JMEMSYS_H], 1,
+      [define if the libjpeg memory system prototypes aren't available])
+  fi
+fi
+
+# this option is useful if you're cross-compiling and want to use
+# your toolchain's zlib for $host but the local one for $build
+AC_ARG_WITH([local-zlib], AS_HELP_STRING([--without-local-zlib],
+  [do not check for local zlib sources (has no effect on AUX toolchain when cross-building)]))
+
+AC_MSG_CHECKING([for local zlib source])
+dnl zlib is needed for language level 3, and libpng
+# we must define ZLIBDIR regardless because png.mak does a -I$(ZLIBDIR)
+# this seems a harmless default
+ZLIBDIR=src
+AUX_SHARED_ZLIB=
+ZLIBCFLAGS=""
+
+if test x"$with_local_zlib" = x"no" ; then
+  AC_MSG_RESULT([skip])
+  AC_CHECK_LIB(z, deflate, [
+    AC_CHECK_HEADERS(zlib.h, [SHARE_ZLIB=1; AUX_SHARED_ZLIB="-l\$(ZLIB_NAME)"])
+  ])
+else
+  if test -d $srcdir/zlib; then
+        AC_MSG_RESULT([yes])
+        SHARE_ZLIB=0
+        ZLIBDIR=$srcdir/zlib
+
+        if test x"$GCC" = x"yes"; then
+          ZLIBCFLAGS="-Wno-write-strings"
+        fi
+  else
+        AC_MSG_RESULT([no])
+        AC_CHECK_LIB(z, deflate, [
+          AC_CHECK_HEADERS(zlib.h, [SHARE_ZLIB=1; AUX_SHARED_ZLIB="-l\$(ZLIB_NAME)"])
+        ])
+  fi
+fi
+if test -z "$SHARE_ZLIB"; then
+  AC_MSG_ERROR([I did not find a copy of zlib on your system.
+  Please either install it, or unpack a copy of the source in a
+  local directory named 'zlib'. See http://www.gzip.org/zlib/
+  for more information.
+  ])
+fi
+
+AC_SUBST(SHARE_ZLIB)
+AC_SUBST(AUX_SHARED_ZLIB)
+AC_SUBST(ZLIBCFLAGS)
+AC_SUBST(ZLIBDIR)
+AC_SUBST(FT_SYS_ZLIB)
+
+dnl png for the png output device; it also requires zlib
+if test x"$enable_auxtools_only" = x"yes" ; then
+  LIBPNGDIR=""
+  SHARE_LIBPNG=0
+else
+  LIBPNGDIR=src
+  PNGDEVS=''
+  PNGDEVS_ALL='png48 png16m pnggray pngmono pngmonod png256 png16 pngalpha png16malpha'
+  AC_MSG_CHECKING([for local png library source])
+  if test -f $srcdir/libpng/pngread.c; then
+          AC_MSG_RESULT([yes])
+          SHARE_LIBPNG=0
+          LIBPNGDIR=$srcdir/libpng
+          PNGDEVS="$PNGDEVS_ALL"
+          case $host in
+            *powerpc*)
+                # Building on PPC with gcc, disable libpng's PPC specific
+                # optimizations: we don't include the source file for it
+                # and it only applies to reading, which we don't use.
+                if test x"$GCC" = x"yes"; then
+                  CFLAGS="$CFLAGS -DPNG_POWERPC_VSX_OPT=0"
+                fi
+            ;;
+            *arm64*|*aarch64*)
+                # Building on arm64 with gcc, disable libpng's neon
+                # optimizations.
+                if test x"$GCC" = x"yes"; then
+                  CFLAGS="$CFLAGS -DPNG_ARM_NEON_OPT=0"
+                fi
+            ;;
+          esac
+ else
+          AC_MSG_RESULT([no])
+          AC_CHECK_LIB(png, png_create_write_struct, [
+            AC_CHECK_HEADERS(png.h, [
+                  SHARE_LIBPNG=1
+                  PNGDEVS="$PNGDEVS_ALL"
+            ], [SHARE_LIBPNG=0])
+          ], [SHARE_LIBPNG=0], [-lz])
+  fi
+  if test -z "$PNGDEVS"; then
+    AC_MSG_NOTICE([disabling png output devices])
+  fi
+fi
+AC_SUBST(SHARE_LIBPNG)
+AC_SUBST(LIBPNGDIR)
+#AC_SUBST(PNGDEVS)
+
+WHICHLCMS=
+
+AC_MSG_CHECKING([for local lcms2mt library source])
+LCMS2DIR=src
+LCMS2MTDIR=src
+
+if test x"$enable_auxtools_only" = x"yes" ; then
+  SHARELCMS=0
+  LCMS2DIR=
+  LCMS2MTDIR=
+else
+# First check for Artifex version
+  LCMS2MTSRC=$srcdir/lcms2mt
+  if test -f $LCMS2MTSRC/include/lcms2mt.h; then
+      AC_MSG_RESULT([yes])
+      SHARELCMS=0
+      WHICHLCMS=lcms2mt
+      LCMS2MTDIR=$LCMS2MTSRC
+  else
+    AC_MSG_RESULT([no])
+    # Now check for local lcms2 (non-Artifex)
+    AC_MSG_CHECKING([for local lcms2 library source])
+    LCMS2SRC=$srcdir/lcms2
+    if test -f $LCMS2SRC/include/lcms2.h; then
+      AC_MSG_RESULT([yes])
+      SHARELCMS=0
+      WHICHLCMS=lcms2
+      LCMS2DIR=$LCMS2SRC
+    else
+      # See if we have system library of lcms2
+      AC_MSG_RESULT([no])
+      AC_MSG_CHECKING([for system lcms2 library])
+      AC_CHECK_LIB(lcms2, _cmsCreateMutex, [
+         AC_CHECK_HEADERS([lcms2.h], [SHARELCMS=1;WHICHLCMS=lcms2])
+       ])
+      if test x$WHICHLCMS = x; then
+         AC_MSG_ERROR([lcms2 not found, or too old])
+      fi
+     fi
+  fi
+fi
+
+AC_SUBST(SHARELCMS)
+AC_SUBST(WHICHLCMS)
+AC_SUBST(LCMS2DIR)
+AC_SUBST(LCMS2MTDIR)
+
+dnl look for libtiff, it also requires lib
+dnl png for the png output device; it also requires zlib
+AC_ARG_WITH([libtiff],  AS_HELP_STRING([--without-libtiff],
+    [disable use of libtiff]), with_libtiff=no)
+
+AC_ARG_WITH([system-libtiff], AS_HELP_STRING([--with-system-libtiff],
+                                             [Force using the systems libtiff]),
+            [], [with_system_libtiff=check])
+
+if test x"$with_libtiff" = x"no" ; then
+  with_system_libtiff=none
+fi
+
+TIFFDEVS=''
+FAX_DEVS=''
+XPSWRITEDEVICE=''
+
+
+LIBTIFFDIR='src'
+LIBTIFFCONFDIR='src'
+TIFFCFLAGS=''
+
+TIFFDEVS_ALL='tiffs tiff12nc tiff24nc tiff48nc tiff32nc tiff64nc tiffcrle tifflzw tiffpack tiffgray tiffsep tiffsep1 tiffscaled tiffscaled4 tiffscaled8 tiffscaled24 tiffscaled32'
+FAX_DEVS_ALL='cfax dfaxlow dfaxhigh fax faxg3 faxg32d faxg4 tiffg3 tiffg32d tiffg4 tfax'
+
+case "x$with_system_libtiff" in
+    xcheck)
+        if test -d $srcdir/tiff; then
+            LIBTIFFDIR=$srcdir/tiff
+            LIBTIFFCONFDIR=tiff-config
+            HAVE_LOCAL_LIBTIFF=1
+            SHARE_LIBTIFF=0
+            ENABLETIFF="\$(D_)TIFF_INCLUDED\$(_D)"
+        else
+            # We MUST NOT use PKG_CHECK_MODULES since it is a) not a standard
+            # autoconf macro and b) requires pkg-config on the system, which is
+            # NOT standard on ANY OS, including Linux!
+            if test "x$PKGCONFIG" != x; then
+                AC_MSG_CHECKING(for libtiff with pkg-config)
+                if $PKGCONFIG --exists libtiff-4; then
+                        AC_MSG_RESULT(yes)
+                        CFLAGS="$CFLAGS `$PKGCONFIG --cflags libtiff-4`"
+                        LIBS="$LIBS `$PKGCONFIG --libs libtiff-4`"
+                        HAVE_SYSTEM_LIBTIFF=1
+               fi
+            fi
+            if test "x$HAVE_SYSTEM_LIBTIFF" = "x1"; then
+            AC_CHECK_LIB(tiff, TIFFOpen,
+                     [AC_CHECK_HEADERS(tiff.h, [HAVE_SYSTEM_LIBTIFF=1;SHARE_LIBTIFF=1])],
+                     [], [-ljpeg])
+            fi
+        fi
+        if test "x$HAVE_LOCAL_LIBTIFF" = x && test "x$HAVE_SYSTEM_LIBTIFF" = x; then
+            AC_MSG_NOTICE([Could not find a copy of libtiff on your system. Disabling tiff and xps output devices.])
+        else
+            TIFFDEVS="$TIFFDEVS_ALL"
+            FAX_DEVS="$FAX_DEVS_ALL"
+            XPSWRITEDEVICE='xpswrite'
+            ENABLETIFF="\$(D_)TIFF_INCLUDED\$(_D)"
+        fi
+        ;;
+    xyes)
+        # We MUST NOT use PKG_CHECK_MODULES since it is a) not a standard
+        # autoconf macro and b) requires pkg-config on the system, which is
+        # NOT standard on ANY OS, including Linux!
+        if test "x$PKGCONFIG" != x; then
+                AC_MSG_CHECKING(for libtiff with pkg-config)
+                if $PKGCONFIG --exists libtiff-4; then
+                        AC_MSG_RESULT(yes)
+                        CFLAGS="$CFLAGS `$PKGCONFIG --cflags libtiff-4`"
+                        LIBS="$LIBS `$PKGCONFIG --libs libtiff-4`"
+                        HAVE_SYSTEM_LIBTIFF=1
+                fi
+        fi
+        if test -z "$HAVE_SYSTEM_LIBTIFF"; then
+        AC_CHECK_LIB(tiff, TIFFOpen,
+                     [AC_CHECK_HEADERS(tiff.h, [HAVE_SYSTEM_LIBTIFF=1;SHARE_LIBTIFF=1])],
+                     [], [-ljpeg])
+        fi
+        if test "x$HAVE_SYSTEM_LIBTIFF" != x; then
+            SHARE_LIBTIFF=1
+            TIFFDEVS="$TIFFDEVS_ALL"
+            FAX_DEVS="$FAX_DEVS_ALL"
+            XPSWRITEDEVICE='xpswrite'
+            ENABLETIFF="\$(D_)TIFF_INCLUDED\$(_D)"
+       else
+            AC_MSG_NOTICE([Could not find a copy of libtiff on your system. Disabling tiff and xps output devices.])
+        fi
+        ;;
+    xno)
+        AC_MSG_CHECKING([for local libtiff source])
+        if test -d $srcdir/tiff; then
+            AC_MSG_RESULT([yes])
+            LIBTIFFDIR=$srcdir/tiff
+            LIBTIFFCONFDIR=tiff-config
+            SHARE_LIBTIFF=0
+            TIFFDEVS="$TIFFDEVS_ALL"
+            FAX_DEVS="$FAX_DEVS_ALL"
+            XPSWRITEDEVICE='xpswrite'
+            ENABLETIFF="\$(D_)TIFF_INCLUDED\$(_D)"
+        else
+            AC_MSG_RESULT([no])
+            AC_MSG_NOTICE([Could not find local copy of libtiff. Disabling tiff and xps output devices.])
+        fi
+        ;;
+    xnone)
+        ;;
+esac
+
+# Skip this check for the recursive configure call.
+# Not relevant for AUX tools.
+if test x"$enable_auxtools_only" != x"yes" ; then
+  if test x"$ENABLETIFF" != x"" && test x"$SHARE_LIBTIFF" != x"$SHARE_LIBJPEG" ; then
+    AC_MSG_ERROR([Mixing local libtiff with shared libjpeg not supported])
+  fi
+fi
+
+CGLAGS_STORE=$CFLAGS
+CFLAGS=-Wno-misleading-indentation
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[CFLAGS_NMI="-Wno-misleading-indentation"],[CFLAGS_NMI=""])
+
+CFLAGS=-Wno-undef
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[CFLAGS_NUD="-Wno-undef"],[CFLAGS_NUD=""])
+
+CFLAGS=$CGLAGS_STORE
+
+if test x"$SHARE_LIBTIFF" = x"0" ; then
+      echo "Running libtiff configure script..."
+      olddir=`pwd`
+      if ! test -d "$LIBTIFFCONFDIR" ; then
+        mkdir "$LIBTIFFCONFDIR"
+      fi
+      cd "$LIBTIFFCONFDIR" && "$absolute_source_path/$LIBTIFFDIR/configure" $GS_TIFF_CONFIGURE_OPTS --disable-lerc --disable-jbig --disable-lzma --disable-zstd --disable-webp --disable-libdeflate $SUBCONFIG_OPTS
+      status=$?
+      if test $status -ne 0 ; then
+        AC_MSG_ERROR([libtiff configure script failed], $status)
+      fi
+      cd "$olddir"
+
+      if test x"$GCC" = x"yes"; then
+        TIFFCFLAGS="-Wno-write-strings $CFLAGS_NMI $CFLAGS_NUD -DJPEG_LIB_MK1_OR_12BIT=0"
+      fi
+      # if we're building with our own libjpeg, or we have another libjpeg available, allow jpeg compression in TIFF
+      if test x"$SHARE_LIBJPEG" = x"1" ; then
+        TIFFCFLAGS="-DJPEG_SUPPORT -DOJPEG_SUPPORT -DJPEG_LIB_MK1_OR_12BIT=0 $TIFFCFLAGS"
+      fi
+
+      echo
+      echo "Continuing with Ghostscript configuration..."
+fi
+
+AC_SUBST(SHARE_LIBTIFF)
+AC_SUBST(LIBTIFFDIR)
+AC_SUBST(LIBTIFFCONFDIR)
+AC_SUBST(TIFFCFLAGS)
+AC_SUBST(ENABLETIFF)
+
+
+SHARE_EXPAT=0
+EXPATDIR=src
+EXPAT_CFLAGS=
+EXPAT_LIBS=
+
+if test x"$with_xps" != x"no" -a x"$enable_auxtools_only" != x"yes" ; then
+  if test -f $srcdir/xps/xps.mak; then
+    AC_MSG_CHECKING([for local expat library source])
+    if test -f $srcdir/expat/lib/expat.h ; then
+      AC_MSG_RESULT([yes])
+      SHARE_EXPAT=0
+      EXPATDIR=$srcdir/expat
+      EXPAT_CFLAGS="-DHAVE_MEMMOVE"
+      if test x"$BIGENDIAN" != x"0"; then
+        EXPAT_CFLAGS="$EXPAT_CFLAGS -DBYTEORDER=4321"
+      else
+        EXPAT_CFLAGS="$EXPAT_CFLAGS -DBYTEORDER=1234"
+      fi
+    else
+      AC_CHECK_LIB(expat, XML_ParserCreateNS, [
+           AC_CHECK_HEADER([expat.h], [SHARE_EXPAT=1])
+          ], [
+        AC_MSG_ERROR([expat lib not found])
+      ])
+      if test $SHARE_EXPAT = 1; then
+        if test "x$PKGCONFIG" != x; then
+          if $PKGCONFIG --exists expat; then
+            EXPAT_LIBS="`$PKGCONFIG --libs expat`"
+            CFLAGS="$CFLAGS `$PKGCONFIG --cflags expat`"
+          fi
+        fi
+        if test x"$XPS_LDFLAGS" = x ; then
+            EXPAT_LIBS="-lexpat"
+        fi
+      fi
+    fi
+  fi
+fi
+
+AC_SUBST(SHARE_EXPAT)
+AC_SUBST(EXPATDIR)
+AC_SUBST(EXPAT_CFLAGS)
+AC_SUBST(EXPAT_LIBS)
+
+dnl look for CUPS...
+AC_ARG_ENABLE([cups], AS_HELP_STRING([--disable-cups],
+    [Do not include CUPS support]))
+
+AC_ARG_WITH([pdftoraster], AS_HELP_STRING([--without-pdftoraster],
+    [Do not include CUPS' pdftoraster filter]))
+
+AC_ARG_WITH([local-cups], AS_HELP_STRING([--with-local-cups],
+                                             [Force using the GS supplied cups code - only useful for debugging]),
+            [with_local_cups=yes], [with_local_cups=no])
+
+AC_ARG_WITH([cups-serverbin],  AS_HELP_STRING([--with-cups-serverbin],
+    [override the "cups-config --serverbin" path]), CUPS_SERVERBIN="$withval", CUPS_SERVERBIN="")
+
+AC_ARG_WITH([cups-serverroot],  AS_HELP_STRING([--with-cups-serverroot],
+    [override the "cups-config --serverroot" path]), CUPS_SERVERROOT="$withval", CUPS_SERVERROOT="")
+
+
+AC_ARG_WITH([cups-datadir],  AS_HELP_STRING([--with-cups-datadir],
+    [override the "cups-config --datadir" path]), CUPS_DATADIR="$withval", CUPS_DATADIR="")
+
+CUPSDEV=""
+CUPSINCLUDE=""
+CUPSCFLAGS=""
+CUPSLIBS=""
+CUPSLIBDIRS=""
+CUPSCONFIG="${CUPSCONFIG:=}"
+CUPSSERVERBIN=""
+CUPSSERVERROOT=""
+CUPSDATA=""
+CUPSVERSION="0"
+CUPSPDFTORASTER="0"
+CUPS_DIR=""
+LIB_CUPS_DIR="src"
+
+cups_hard_fail=0
+
+SHARELCUPS=1
+SHARELCUPSI=1
+
+case $host in
+    *-mingw*|*-msys*|*-cygwin*)
+        AC_MSG_WARN([disabling cups])
+        enable_cups=no
+    ;;
+    *)
+    ;;
+esac
+
+if ( test -f $srcdir/cups/gdevcups.c ); then
+    CUPS_DIR="$srcdir/cups"
+#   If the user explicitly enabled cups, hard fail if not found
+    if test x"$enable_cups" = x"yes"; then
+      cups_hard_fail=1
+    fi
+    if test x$enable_cups != xno; then
+        if test x$with_local_cups != xyes; then
+            if test x"$CUPSCONFIG" = x""; then
+              AC_PATH_TOOL(CUPSCONFIG,cups-config)
+              if test x"$build" != x"$host"; then
+                AC_PATH_PROG(BUILD_CUPSCONFIG, cups-config)
+                if test x"$BUILD_CUPSCONFIG" = x"$CUPSCONFIG" ; then
+                  CUPSCONFIG=
+                fi
+              fi
+            else
+#             We were given a cups-config on the command line, assume the user intends to
+#             include cups, and make not finding a hard fail.
+              cups_hard_fail=1
+            fi
+            # check for a libcups header
+            AC_CHECK_HEADER([cups/cups.h],[],[CUPSCONFIG=""])
+            # And check for a libcupsimage header
+            if test "x$CUPSCONFIG" != x; then
+                AC_CHECK_HEADER([cups/raster.h],[],[CUPSCONFIG=""])
+            fi
+
+            if test "x$CUPSCONFIG" != x; then
+                dnl Use values from CUPS config...
+                CUPSCFLAGS="`$CUPSCONFIG --cflags` $CFLAGS"
+#                CUPSLINK="`$CUPSCONFIG --ldflags` `$CUPSCONFIG --static --image --libs | sed -e '1,$s/-lssl//'` $LIBS"
+                CUPSLINK="`$CUPSCONFIG --ldflags` `$CUPSCONFIG --image --libs`"
+                CUPSAPIVERSION="`$CUPSCONFIG --api-version`"
+
+                GS_SPLIT_LIBS([CUPSLIBS], [$CUPSLINK])
+                GS_SPLIT_LIBPATHS([CUPSLIBDIRS],[$CUPSLINK])
+
+                if test "x$CUPS_SERVERROOT" != "x"; then
+                  CUPSSERVERROOT="$CUPS_SERVERROOT"
+                else
+                  CUPSSERVERROOT="`$CUPSCONFIG --serverroot`"
+                fi
+
+                if test "x$CUPS_SERVERBIN" != "x"; then
+                  CUPSSERVERBIN="$CUPS_SERVERBIN"
+                else
+                  CUPSSERVERBIN="`$CUPSCONFIG --serverbin`"
+                fi
+
+                if test "x$CUPS_DATADIR" != "x"; then
+                  CUPSDATA="$CUPS_DATADIR"
+                else
+                  CUPSDATA="`$CUPSCONFIG --datadir`"
+                fi
+
+                CUPSINCLUDE="include $srcdir/cups/cups.mak"
+                CUPSDEV="cups"
+
+                # pwgraster support arrived in cups 1.5.x
+                if test "$CUPSAPIVERSION" ">" "1.4" ; then
+                  CUPSDEV="$CUPSDEV pwgraster"
+                fi
+
+                # appleraster support arrived in cups 2.2.2, so with
+                # API version 2.2 we do not necessarily have it, but
+                # 2.3 has it for sure
+                if test "$CUPSAPIVERSION" ">" "2.2" ; then
+                  CUPSDEV="$CUPSDEV appleraster urf"
+                fi
+
+                CUPSVERSION="`$CUPSCONFIG --version`"
+
+                LCUPSINCLUDE="include \$(GLSRCDIR)/lcups.mak"
+                LCUPSIINCLUDE="include \$(GLSRCDIR)/lcupsi.mak"
+                if ( test x$with_pdftoraster != xno ); then
+                    if test "$CUPSVERSION" ">" "1.2"; then
+                        CUPSPDFTORASTER="1"
+                    fi
+                fi
+            else
+                if test x"$cups_hard_fail" = x"1" ; then
+                  AC_MSG_ERROR([libcups/libcupsimage not found])
+                fi
+            fi
+        else
+            AC_MSG_WARN([USING LOCAL CUPS SOURCE])
+            SHARELCUPS=0
+            SHARELCUPSI=0
+            AC_CHECK_FUNCS([strlcat], [CUPSCFLAGS="$CUPSCFLAGS -DHAVE_STRLCAT=1"], [])
+            AC_CHECK_FUNCS([strlcpy], [CUPSCFLAGS="$CUPSCFLAGS -DHAVE_STRLCPY=1"], [])
+            AC_CHECK_FUNCS([snprintf], [CUPSCFLAGS="$CUPSCFLAGS -DHAVE_SNPRINTF=1"], [])
+            AC_CHECK_FUNCS([vsnprintf], [CUPSCFLAGS="$CUPSCFLAGS -DHAVE_VSNPRINTF=1"], [])
+            LCUPSBUILDTYPE=linux
+            LCUPSINCLUDE="include \$(GLSRCDIR)/lcups.mak"
+            LCUPSIINCLUDE="include \$(GLSRCDIR)/lcupsi.mak"
+            CUPSDEV="cups pwgraster"
+            LIB_CUPS_DIR=$CUPS_DIR
+        fi
+    fi
+fi
+
+#AC_SUBST(CUPSDEV)
+AC_SUBST(CUPSCFLAGS)
+AC_SUBST(CUPSLIBS)
+AC_SUBST(CUPSLIBDIRS)
+AC_SUBST(CUPSINCLUDE)
+AC_SUBST(CUPSSERVERBIN)
+AC_SUBST(CUPSSERVERROOT)
+AC_SUBST(CUPSDATA)
+AC_SUBST(CUPSINSTALL)
+AC_SUBST(CUPS_DIR)
+AC_SUBST(LIB_CUPS_DIR)
+
+AC_SUBST(SHARELCUPS)
+AC_SUBST(SHARELCUPSI)
+AC_SUBST(LCUPSBUILDTYPE)
+AC_SUBST(LCUPSINCLUDE)
+AC_SUBST(LCUPSIINCLUDE)
+
+
+AC_SUBST(CUPSPDFTORASTER)
+
+dnl look for IJS implementation
+AC_ARG_WITH([ijs], AS_HELP_STRING([--without-ijs],
+    [disable IJS driver support]))
+
+case $host in
+    *-mingw*|*-msys*)
+        AC_MSG_WARN([disabling the ijs device])
+        with_ijs=no
+    ;;
+    *)
+    ;;
+esac
+
+dnl set safe defaults
+    IJSDIR=src
+    IJSDEVS=''
+    SHAREIJS=0
+if test x$with_ijs != xno; then
+    AC_MSG_CHECKING([for local ijs library source])
+    if test -d $srcdir/ijs; then
+        AC_MSG_RESULT([yes])
+        IJSDIR=$srcdir/ijs
+        IJSDEVS='ijs'
+    else
+        AC_MSG_RESULT([no])
+        AC_CHECK_LIB(ijs, ijs_server_init, [
+          AC_CHECK_HEADERS(ijs/ijs.h, [SHAREIJS=1])
+        ])
+        if test $SHAREIJS -eq 1 ; then
+            IJSLIB=ijs
+            # This is for safety - it prevents our header search path going outside the GS source tree
+            IJSDIR='$(GLOBJDIR)'
+            IJSDEVS='ijs'
+        fi
+    fi
+fi
+AC_SUBST(IJSDIR)
+AC_SUBST(SHAREIJS)
+AC_SUBST(IJSLIB)
+#AC_SUBST(IJSDEVS)
+
+
+JBIG2_DECODER=
+JBIG2DIR=src
+SHARE_JBIG2=0
+JBIG2DEVS=''
+JBIG2_AUTOCONF_CFLAGS=
+
+JB2_STDINT_TYPES_IN=
+JBIG2DEC_REQ=0.19
+
+if test "x$JBIG2_DECODER" = x; then
+  dnl look for jbig2dec
+  AC_ARG_WITH([jbig2dec], AS_HELP_STRING([--without-jbig2dec],
+      [disable JBIG2 decode support]))
+  if test x$with_jbig2dec != xno; then
+    AC_MSG_CHECKING([for local jbig2dec library source])
+    for d in $srcdir/jbig2dec  $srcdir/jbig2dec-0.2  $srcdir/jbig2dec-0.3; do
+      test -d "$d" && JBIG2DIR=$d && break
+    done
+    if test "x$JBIG2DIR" != xsrc; then
+        JBIG2_DECODER=jbig2dec
+        if test x$ac_cv_header_stdint_h = xyes ; then
+            JBIG2_AUTOCONF_CFLAGS="-DHAVE_STDINT_H=1"
+        else
+
+          for include in sys/types.h inttypes.h sys/inttypes.h sys/int_types.h ; do
+            AC_MSG_CHECKING([for uint32_t in $include])
+            AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <$include>]], [[uint32_t canary;]])],[
+              AC_MSG_RESULT([yes])
+              stdint_types_in="$include"
+              break;
+              ],[AC_MSG_RESULT(no)
+            ])
+          done
+
+          case "$stdint_types_in" in
+            "sys/types.h")
+              JBIG2_AUTOCONF_CFLAGS="$JBIG2_AUTOCONF_CFLAGS -DSTD_INT_USE_SYS_TYPES_H"
+              ;;
+            "inttypes.h")
+              JBIG2_AUTOCONF_CFLAGS="$JBIG2_AUTOCONF_CFLAGS -DSTD_INT_USE_INTTYPES_H"
+              ;;
+            "sys/inttypes.h")
+              JBIG2_AUTOCONF_CFLAGS="$JBIG2_AUTOCONF_CFLAGS -DSTD_INT_USE_SYS_INTTYPES_H"
+              ;;
+            "sys/int_types.h")
+              JBIG2_AUTOCONF_CFLAGS="$JBIG2_AUTOCONF_CFLAGS -DSTD_INT_USE_SYS_INT_TYPES_H"
+              ;;
+            *)
+              AC_MSG_ERROR([
+                Unable to find suitable definitions of the stdint.h types (uint32_t and friends).
+                These are required by jbig2dec.
+              ])
+          esac
+        fi
+
+        if test "x$BIGENDIAN" != "x0"; then
+            JBIG2_AUTOCONF_CFLAGS="$JBIG2_AUTOCONF_CFLAGS -DWORDS_BIGENDIAN"
+        fi
+
+        AC_MSG_RESULT([$JBIG2DIR])
+        echo "Continuing with Ghostscript configuration..."
+    else
+      AC_MSG_RESULT([no])
+      # We MUST NOT use PKG_CHECK_MODULES since it is a) not a standard
+      # autoconf macro and b) requires pkg-config on the system, which is
+      # NOT standard on ANY OS, including Linux!
+      if test "x$PKGCONFIG" != x; then
+        AC_MSG_CHECKING(for jbig2dec $JBIG2DEC_REQ with pkg-config)
+        if $PKGCONFIG --atleast-version=$JBIG2DEC_REQ jbig2dec; then
+          AC_MSG_RESULT(yes)
+          JBIG2DEC_CFLAGS="$CFLAGS `$PKGCONFIG --cflags jbig2dec`"
+          JBIG2DEC_LIBS="`$PKGCONFIG --libs jbig2dec`"
+          SHARE_JBIG2=1
+        else
+          AC_MSG_ERROR([jbig2 decoder not found, or too old])
+        fi
+      else
+        AC_MSG_CHECKING(for jbig2dec library)
+        AC_CHECK_LIB([jbig2dec], [jbig2_page_out], [
+            SHARE_JBIG2=1
+        ], [
+            AC_MSG_ERROR([jbig2 decoder not found, or too old])
+        ])
+      fi
+      if test x$with_jbig2dec != xno; then
+        JBIG2_DECODER=jbig2dec
+      fi
+    fi
+  fi
+  if test x$with_jbig2dec != xno; then
+# I *think* jbig2dec handles these being missing gracefully
+#    if test x$ac_cv_header_stdint_h != xyes && test x$ac_cv_header_inttypes_h != xyes; then
+#      AC_MSG_WARN([JBIG2 support requires stdint types which do not seem to be available.])
+#    else
+      JBIG2DEVS='$(PSD)jbig2.dev'
+#    fi
+  fi
+fi
+
+AC_SUBST(JBIG2_DECODER)
+AC_SUBST(JBIG2DIR)
+AC_SUBST(SHARE_JBIG2)
+AC_SUBST(JBIG2DEVS)
+AC_SUBST(JBIG2_AUTOCONF_CFLAGS)
+
+JPXDIR=src
+SHARE_JPX=0
+JPXDEVS=''
+JPX_DECODER=
+JPX_AUTOCONF_CFLAGS=
+JPX_LRINTF_SUBST=
+
+if test "x$ac_cv_header_stdint_h" = "xyes"; then
+  CFLAGS_OPJ_HAVE_STDINT_H="-DOPJ_HAVE_STDINT_H=1"
+else
+  CFLAGS_OPJ_HAVE_STDINT_H=
+fi
+
+
+if test "x$ac_cv_header_inttypes_h" = "xyes"; then
+  CFLAGS_OPJ_HAVE_INTTYPES_H="-DOPJ_HAVE_INTTYPES_H=1"
+else
+  CFLAGS_OPJ_HAVE_INTTYPES_H=
+fi
+
+if test "x$BIGENDIAN" != "x0"; then
+  CFLAGS_OPJ_BIGENDIAN="-DOPJ_BIG_ENDIAN"
+else
+  CFLAGS_OPJ_BIGENDIAN=
+fi
+
+AC_CHECK_FUNCS([fseeko], [CFLAGS_OPJ_HAVE_FSEEKO="-DOPJ_HAVE_FSEEKO=1"], [CFLAGS_OPJ_HAVE_STDINT_H=])
+
+JPX_SSE_CFLAGS=""
+
+if test "x$HAVE_SSE2" = "x" ; then
+  if test x"$GCC" = x"yes"; then
+    JPX_SSE_CFLAGS="-U__SSE__"
+  fi
+fi
+
+AC_CHECK_DECL(lrintf, , [OPJ_LRINTF_SUBST="-D\"lrintf(a)\"=\"((long)(a+0.5))\"]",[[#include <math.h>]])
+
+AC_ARG_ENABLE([openjpeg], AS_HELP_STRING([--disable-openjpeg],
+        [Do not use OpenJPEG for JPX decoding]))
+
+OPENJPEGDIR=$srcdir/openjpeg
+
+if test "x$JPX_DECODER" = "x"; then
+  if test "x$enable_openjpeg" != "xno"; then
+    AC_MSG_CHECKING([for local OpenJPEG library source])
+    if test -e $OPENJPEGDIR/src/lib/openjp2/openjpeg.h; then
+      AC_MSG_RESULT([yes])
+      JPXDIR="$OPENJPEGDIR"
+      JPX_DECODER=openjpeg
+      SHARE_JPX=0
+      AC_CHECK_FUNCS([memalign], [have_memalign=1])
+
+      if test "x$have_memalign" = "x1"; then
+        JPX_AUTOCONF_CFLAGS=""
+      else
+        JPX_AUTOCONF_CFLAGS="-D\"memalign(a,b)=malloc(b)\""
+      fi
+
+      CFLAGS_old="$CFLAGS"
+      CFLAGS="-Wno-attributes"
+      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS -Wno-attributes"],[])
+      CFLAGS="$CFLAGS_old"
+
+      JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS -DOPJ_STATIC -DMUTEX_pthread=0 $OPJ_LRINTF_SUBST -DUSE_JPIP -DUSE_OPENJPEG_JP2 $CFLAGS_OPJ_HAVE_STDINT_H $CFLAGS_OPJ_HAVE_INTTYPES_H $CFLAGS_OPJ_BIGENDIAN $CFLAGS_OPJ_HAVE_FSEEKO"
+
+      JPXDEVS='$(PSD)jpx.dev'
+    else
+      AC_MSG_RESULT([no])
+      check_for_opj_stream_set_user_data=no
+      if test x"$PKGCONFIG" != x""; then
+        AC_MSG_CHECKING(for OpenJPEG2)
+        if $PKGCONFIG --exists libopenjp2; then
+          JPX_AUTOCONF_CFLAGS="`$PKGCONFIG libopenjp2 --cflags` -DUSE_OPENJPEG_JP2"
+          JPX_AUTOCONF_LIBS="`$PKGCONFIG libopenjp2 --libs`"
+          SHARE_JPX=1
+          JPX_DECODER=openjpeg
+          AC_MSG_RESULT([yes])
+        else
+          AC_MSG_RESULT([no])
+          check_for_opj_stream_set_user_data=yes
+        fi
+      else
+        check_for_opj_stream_set_user_data=yes
+      fi
+      if test x"$check_for_opj_stream_set_user_data" != x"no"; then
+        AC_CHECK_LIB(openjp2, opj_stream_set_user_data,
+            [JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS $OPJ_LRINTF_SUBST -DUSE_JPIP -DUSE_OPENJPEG_JP2 $CFLAGS_OPJ_HAVE_STDINT_H $CFLAGS_OPJ_HAVE_INTTYPES_H $CFLAGS_OPJ_BIGENDIAN $CFLAGS_OPJ_HAVE_FSEEKO";
+             JPX_AUTOCONF_LIBS="-lopenjp2";
+             SHARE_JPX=1]
+        )
+      fi
+    fi
+  fi
+fi
+
+AC_SUBST(JPX_DECODER)
+AC_SUBST(JPX_AUTOCONF_CFLAGS)
+AC_SUBST(JPX_AUTOCONF_LIBS)
+AC_SUBST(JPXDIR)
+AC_SUBST(SHARE_JPX)
+AC_SUBST(JPXDEVS)
+
+ENABLEURF=
+URF_DEVS=''
+URF_INCLUDE=
+URF_DEV=
+SURFX_H=
+AC_ARG_WITH([urf], AS_HELP_STRING([--without-urf],
+    [do not try to include URF support]))
+
+if test x$with_urf != xno; then
+  AC_MSG_CHECKING([for URF support])
+  if test -d $srcdir/urf; then
+    AC_MSG_RESULT([yes])
+    ENABLEURF="\$(D_)URF_INCLUDED\$(_D)"
+    URF_DEVS='urfgray urfrgb urfcmyk'
+    GPDL_URF_TOP_OBJ="\$(GPDLOBJ)/\$(GPDL_URF_TOP_OBJ_FILE)"
+    URF_INCLUDE="\$(I_)\$(URFSRCDIR)\$(_I)"
+    URF_DEV="\$(GLD)urfd.dev"
+    SURFX_H="\$(URFSRCDIR)\$(D)surfx.h"
+fi
+fi
+
+AC_SUBST(ENABLEURF)
+AC_SUBST(GPDL_URF_TOP_OBJ)
+AC_SUBST(URF_INCLUDE)
+AC_SUBST(URF_DEV)
+AC_SUBST(SURFX_H)
+
+AC_ARG_WITH([cal], AS_HELP_STRING([--without-cal],
+    [do not try to use the CAL library for acceleration]))
+
+CALSRCDIR=$srcdir/cal
+if test x$with_cal != xno; then
+  AC_MSG_CHECKING([for local CAL library source])
+  if test -d $srcdir/cal; then
+    AC_MSG_RESULT([yes])
+    WITH_CAL=1
+  else
+    WITH_CAL=0
+    AC_MSG_RESULT([no])
+  fi
+else
+  WITH_CAL=0
+fi
+
+if test x$WITH_CAL != x0; then
+  dnl --------------------------------------------------
+  dnl check for sse4.2, avx2 or neon
+  dnl --------------------------------------------------
+  AC_MSG_CHECKING([sse4.2 support])
+  save_cflags=$CFLAGS
+  CFLAGS="$CFLAGS $OPT_CFLAGS -msse4.2"
+
+  HAVE_SSE4_2=""
+  AC_LINK_IFELSE(
+    [AC_LANG_PROGRAM([#include <emmintrin.h>
+    #include <smmintrin.h>], [
+    __m128i input1;
+    unsigned char buf1[[128]];
+    input1 = _mm_loadu_si128((const __m128i *)buf1);
+    input1 = _mm_hadd_epi32(input1, input1);
+    (void)_mm_extract_epi64(input1, 0);
+    return(0);
+    ])],
+    [HAVE_SSE4_2="-DHAVE_SSE4_2"], [HAVE_SSE4_2=""])
+
+  #AC_ARG_ENABLE([sse4.2], AS_HELP_STRING([--disable-sse4.2],
+  #       [Do not use sse4.2 instrinsics]), [
+  #             if test "x$enable_sse4.2" = xno; then
+  #                HAVE_SSE4_2=""
+  #             fi])
+
+  if test "x$HAVE_SSE4_2" != x; then
+    AC_MSG_RESULT(yes)
+  else
+    AC_MSG_RESULT(no)
+  fi
+
+  AC_MSG_CHECKING([avx2 support])
+  CFLAGS="$save_cflags $OPT_CFLAGS -mavx2"
+
+  HAVE_AVX2=""
+  AC_LINK_IFELSE(
+    [AC_LANG_PROGRAM([#include <immintrin.h>], [
+    __m256i input1;
+    unsigned char buf1[[256]];
+    input1 = _mm256_loadu_si256((const __m256i *)buf1);
+    input1 = _mm256_adds_epu8(input1, input1);
+    (void)_mm256_insert_epi64(input1, 0, 0);
+    return(0);
+    ])],
+    [HAVE_AVX2="-DHAVE_AVX2"], [HAVE_AVX2=""])
+
+  #AC_ARG_ENABLE([sse4.2], AS_HELP_STRING([--disable-sse4.2],
+  #       [Do not use sse4.2 instrinsics]), [
+  #             if test "x$enable_sse4.2" = xno; then
+  #                HAVE_SSE4_2=""
+  #             fi])
+
+  if test "x$HAVE_AVX2" != x; then
+    AC_MSG_RESULT(yes)
+  else
+    AC_MSG_RESULT(no)
+  fi
+
+  AC_MSG_CHECKING([neon support])
+  CFLAGS="$save_cflags $OPT_CFLAGS -mfpu=neon -mcpu=cortex-a53"
+  HAVE_NEON=""
+  AC_LINK_IFELSE(
+    [AC_LANG_PROGRAM([#include "arm_neon.h"], [
+    int32x4_t round = vdupq_n_s32(10);
+    return(0);
+    ])],
+    [HAVE_NEON="-DHAVE_NEON"], [HAVE_NEON=""])
+
+  #AC_ARG_ENABLE([neon], AS_HELP_STRING([--disable-neon],
+  #       [Do not use neon instrinsics]), [
+  #             if test "x$enable_neon" = xno; then
+  #                HAVE_NEON=""
+  #             fi])
+
+  if test "x$HAVE_NEON" != x; then
+    AC_MSG_RESULT(yes)
+  else
+    AC_MSG_RESULT(no)
+  fi
+
+  #AC_SUBST(HAVE_SSE4_2)
+  #AC_SUBST(HAVE_NEON)
+  CFLAGS=$save_cflags
+
+  CAL_CFLAGS=""
+  CAL_SSE4_2_CFLAGS=""
+  CAL_AVX2_CFLAGS=""
+  CAL_NEON_CFLAGS=""
+  if test "x$HAVE_SSE4_2" != x; then
+    CAL_SSE4_2_CFLAGS="-msse4.2"
+    CAL_CFLAGS="$CAL_CFLAGS $HAVE_SSE4_2"
+  fi
+  if test "x$HAVE_AVX2" != x; then
+    CAL_AVX2_CFLAGS="-mavx2"
+    CAL_CFLAGS="$CAL_CFLAGS $HAVE_AVX2"
+  fi
+  if test "x$HAVE_NEON" != x; then
+    CAL_NEON_CFLAGS="-mfpu=neon -mcpu=cortex-a53"
+    CAL_CFLAGS="$CAL_CFLAGS $HAVE_NEON"
+  fi
+fi
+
+AC_SUBST(CALSRCDIR)
+AC_SUBST(WITH_CAL)
+AC_SUBST(CAL_CFLAGS)
+AC_SUBST(CAL_SSE4_2_CFLAGS)
+AC_SUBST(CAL_AVX2_CFLAGS)
+AC_SUBST(CAL_NEON_CFLAGS)
+
+dnl check if we can/should build the gtk loader
+AC_ARG_ENABLE([gtk], AS_HELP_STRING([--disable-gtk],
+    [Do not build the gtk loader]))
+SOC_CFLAGS=""
+SOC_LIBS=""
+SOC_LOADER=""
+if test "x$enable_gtk" != "xno"; then
+    # Try GTK+ 3.x first...
+    if test "x$PKGCONFIG" != x; then
+        AC_MSG_CHECKING(for GTK+ 3.x)
+        if $PKGCONFIG --exists gtk+-3.0; then
+            SOC_LOADER="dxmain"
+            SOC_CFLAGS="`$PKGCONFIG gtk+-3.0 --cflags`"
+            SOC_LIBS="`$PKGCONFIG gtk+-3.0 --libs`"
+            AC_MSG_RESULT([yes])
+        else
+            AC_MSG_RESULT([no])
+        fi
+
+        # Or resort to GTK+ 2.x
+        if test "x$SOC_LOADER" = "x"; then
+            AC_MSG_CHECKING(for GTK+ 2.x)
+            if $PKGCONFIG --exists gtk+-2.0; then
+                SOC_LOADER="dxmain"
+                SOC_CFLAGS="`$PKGCONFIG gtk+-2.0 --cflags`"
+                SOC_LIBS="`$PKGCONFIG gtk+-2.0 --libs`"
+                AC_MSG_RESULT([yes])
+            else
+                AC_MSG_RESULT([no])
+            fi
+        fi
+    fi
+fi
+
+if test "x$SOC_LOADER" = "x"; then
+  SOC_LOADER="dxmainc"
+fi
+
+AC_SUBST(SOC_CFLAGS)
+AC_SUBST(SOC_LIBS)
+AC_SUBST(SOC_LOADER)
+
+dnl optional X11 for display devices
+if test x"$enable_auxtools_only" = x"yes" ; then
+  no_x=yes
+else
+  AC_PATH_XTRA
+fi
+
+X_LDFLAGS=""
+X_CFLAGS=""
+X_DEVS=""
+X_LIBS=""
+
+if test x$no_x != xyes; then
+        if test "$x_libraries" = "/usr/lib"; then
+                echo "Ignoring X library directory \"$x_libraries\" requested by configure."
+                x_libraries="NONE"
+        fi
+        if test ! "$x_libraries" = "NONE" -a ! "$x_libraries" = ""; then
+                X_LDFLAGS="-L$x_libraries"
+                case $host in
+                    *-sun*|*-solaris*)
+                        X_LDFLAGS="$X_LDFLAGS -R$x_libraries"
+                    ;;
+                    *)
+                    ;;
+                esac
+
+        fi
+
+        if test "$x_includes" = "/usr/include"; then
+                echo "Ignoring X include directory \"$x_includes\" requested by configure."
+                x_includes="NONE"
+        fi
+        if test ! "$x_includes" = "NONE" -a ! "$x_includes" = ""; then
+                X_CFLAGS="-I$x_includes"
+        fi
+
+        SAVELIBS="$LIBS"
+        SAVELDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS $X_LDFLAGS"
+
+        AC_CHECK_LIB(X11,XOpenDisplay)
+        AC_CHECK_LIB(Xext,XdbeQueryExtension)
+        AC_CHECK_LIB(Xt,XtAppCreateShell)
+
+        LDFLAGS="$SAVELDFLAGS"
+        LIBS="$SAVELIBS"
+
+        if test "$ac_cv_lib_Xt_XtAppCreateShell" = yes; then
+                X11DEVS="x11 x11alpha x11cmyk x11mono x11_ x11alt_ x11cmyk2 x11cmyk4 x11cmyk8 x11rg16x x11rg32x x11gray2 x11gray4"
+                X_DEVS=$X11DEVS
+                # the makefile wants a list of just the library names in X_LIBS
+                GS_SPLIT_LIBS([X_LIBS],
+                        [-lXt $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS])
+        fi
+fi
+
+AC_SUBST(X_LDFLAGS)
+AC_SUBST(X_CFLAGS)
+AC_SUBST(X_LIBS)
+#AC_SUBST(X_DEVS)
+#AC_SUBST(X11DEVS)
+AC_SUBST(XLIBS)
+
+dnl executible name
+AC_ARG_WITH([gs], AS_HELP_STRING([--with-gs=NAME],
+        [name of the Ghostscript executible [[gs]]]),
+        [GS="$with_gs"],[GS='gs'])
+AC_SUBST(GS)
+
+PCL=no_gpcl6
+PCL_TARGET=
+
+PLROMFS_MAK="\$(GLSRCDIR)\$(D)stub.mak"
+PL_MAK="\$(GLSRCDIR)\$(D)stub.mak"
+PCL_MAK="\$(GLSRCDIR)\$(D)stub.mak"
+PCL_TOP_MAK="\$(GLSRCDIR)\$(D)stub.mak"
+PXL_MAK="\$(GLSRCDIR)\$(D)stub.mak"
+
+if test x"$with_pcl" != x"no" ; then
+  if test -f $srcdir/pcl/pl/pl.mak; then
+    AC_ARG_WITH([pcl], AS_HELP_STRING([--with-pcl=NAME],
+        [name of the GhostPCL executible (if the source is available, ignored otherwise) [[gpcl6]]]),
+        [PCL="$with_pcl"],[PCL='gpcl6'])
+
+    PCL_TARGET=gpcl6
+
+    PLROMFS_MAK="\$(PLSRCDIR)\$(D)plromfs.mak"
+    PL_MAK="\$(PLSRCDIR)\$(D)pl.mak"
+    PCL_MAK="\$(PCL5SRCDIR)\$(D)pcl.mak"
+    PCL_TOP_MAK="\$(PCL5SRCDIR)\$(D)pcl_top.mak"
+    PXL_MAK="\$(PXLSRCDIR)\$(D)pxl.mak"
+  fi
+fi
+AC_SUBST(PCL)
+AC_SUBST(PCL_TARGET)
+
+AC_SUBST(PLROMFS_MAK)
+AC_SUBST(PL_MAK)
+AC_SUBST(PCL_MAK)
+AC_SUBST(PCL_TOP_MAK)
+AC_SUBST(PXL_MAK)
+
+
+XPS=no_gxps
+XPS_TARGET=
+
+XPS_MAK="\$(GLSRCDIR)\$(D)stub.mak"
+XPSROMFS_MAK="\$(GLSRCDIR)\$(D)stub.mak"
+# gxps currently depends on code in pl
+if test x"$with_xps" != x"no" ; then
+  if test x"$PCL_TARGET" != x ; then
+    if test -f $srcdir/xps/xps.mak; then
+      AC_ARG_WITH([xps], AS_HELP_STRING([--with-xps=NAME],
+            [name of the GhostXPS executible (if the source is available, ignored otherwise) [[gxps]]]),
+            [XPS="$with_xps"],[XPS='gxps'])
+
+      XPS_TARGET=gxps
+      XPS_MAK="\$(XPSSRCDIR)\$(D)xps.mak"
+      XPSROMFS_MAK="\$(XPSSRCDIR)\$(D)xpsromfs.mak"
+    fi
+  fi
+fi
+
+AC_SUBST(XPS)
+AC_SUBST(XPS_TARGET)
+AC_SUBST(XPS_MAK)
+AC_SUBST(XPSROMFS_MAK)
+
+GPDF_DEV=
+PDF=
+PDF_MAK="\$(GLSRCDIR)\$(D)stub.mak"
+PDFROMFS_MAK="\$(GLSRCDIR)\$(D)stub.mak"
+
+if test x"$with_pdf" != x"no" ; then
+
+  if test x"$JBIG2_DECODER" = x""; then
+      AC_MSG_ERROR([No JBIG2 decoder available, required for PDF support])
+  fi
+  if test x"$JPX_DECODER" = x""; then
+      AC_MSG_ERROR([No JPX/JPEG2000 decoder available, required for PDF support])
+  fi
+
+  if test -f $srcdir/pdf/pdf.mak; then
+    AC_ARG_WITH([pdf], AS_HELP_STRING([--with-pdf=NAME],
+        [name of the Ghostpdf executible (if the source is available, ignored otherwise) [[gpdf]]]),
+        [PDFEXE="$with_pdf"],[PDFEXE='gpdf'])
+
+    if test -f $srcdir/pcl/pl/pl.mak && test x"$PCL_TARGET" != x"" ; then
+        PDF_TARGET=gpdf
+        PDF=$PDFEXE
+    else
+        PDF=no_gpdf
+    fi
+    CFLAGS="-DBUILD_PDF=1 -I$srcdir/pdf $CFLAGS"
+    GPDF_DEV="\$(PDFOBJDIR)\$(D)pdfi.dev"
+    PDF_MAK="\$(PDFSRCDIR)\$(D)pdf.mak"
+    PDFROMFS_MAK="\$(PDFSRCDIR)\$(D)pdfromfs.mak"
+  fi
+fi
+AC_SUBST(PDF)
+AC_SUBST(PDF_TARGET)
+
+AC_SUBST(PDF_MAK)
+AC_SUBST(GPDF_DEV)
+AC_SUBST(PDFROMFS_MAK)
+
+
+GPDL=no_gpdl
+GPDL_TARGET=
+GPDL_TARGET_VAR=
+
+GPDL_MAK="\$(GLSRCDIR)\$(D)stub.mak"
+# in order to build gpdl we need the pdls available
+
+if test "x$XPS_TARGET" != "x" && test "x$PCL_TARGET" != "x" ; then
+  if test -f $srcdir/gpdl/gpdl.mak; then
+    AC_ARG_WITH([gpdl], AS_HELP_STRING([--with-gpdl=NAME],
+          [name of the GhostPDL executible (if the source is available, ignored otherwise) [[gpdl]]]),
+          [GPDL="$with_gpdl"],[GPDL='gpdl'])
+
+    GPDL_TARGET=gpdl
+    GPDL_MAK="\$(GPDLSRCDIR)\$(D)gpdl.mak"
+  fi
+fi
+AC_SUBST(GPDL)
+AC_SUBST(GPDL_TARGET)
+AC_SUBST(GPDL_MAK)
+
+
+dnl do we compile the postscript initialization files into Ghostscript?
+COMPILE_INITS="1"
+AC_ARG_ENABLE([compile-inits], AS_HELP_STRING([--disable-compile-inits],
+       [Do not compile in initialization files]),[
+               if test "x$enable_compile_inits" = xno; then
+                       COMPILE_INITS="0"
+               fi])
+AC_SUBST(COMPILE_INITS)
+
+dnl look for drivers to compile...
+APPLE_DEVICES_REQUESTED="no"
+AC_ARG_WITH(drivers,
+[  --with-drivers=LIST     Drivers to support, separated by commas.
+                          Either list the drivers or use aliases:
+                          ALL      = all drivers
+                          FILES    = all file format drivers
+                          PRINTERS = all printer drivers
+                          Printers:
+                          APPLE    = all Apple printers
+                          BROTHER  = all Brother printers
+                          CANON    = all Canon printers
+                          EPSON    = all Epson printers
+                          HP       = all HP printers
+                          IBM      = all IBM printers
+                          JAPAN    = older japanese printers
+                          LEXMARK  = all Lexmark printers
+                          OKI      = all OKI printers
+                          PCLXL    = all PCL XL/6 printers
+                          File formats:
+                          BMP      = Output to bmp files
+                          FAX      = Output to fax files
+                          JPEG     = Output to JPEG files
+                          PBM      = Output to PBM/PNM
+                          PCX      = Output to PCX
+                          PNG      = Output to PNG
+                          PS       = Output to PostScript/PDF
+                          TIFF     = Output to TIFF
+                          You can mix both variants, e.g.
+                          --with-drivers=HP,stcolor would build HP drivers and
+                          the Epson stcolor driver.
+                          Aliases must be uppercase (a 3rd party driver might
+                          have the same name).
+                          Default: ALL],drivers="$withval",drivers="ALL")
+
+AC_ARG_WITH(driversfile,
+[  --with-driversfile=FILE Drivers to support from file, separated by newlines.],
+driversfile="$withval",driversfile="")
+
+if test "x$driversfile" != x; then
+        # Add drivers from file...
+        drivers="`tr '\n' ',' <$driversfile`"
+fi
+
+if echo $drivers | grep 'APPLE\|iwhi\|iwlo\|iwlq' >/dev/null; then
+   APPLE_DEVICES_REQUESTED="yes"
+fi
+
+dnl Check which drivers we'd like to support.
+P_DEVS0=""
+F_DEVS0=""
+CUPS_DEVS0=""
+XPS_DEVS0=""
+JBIG2_DEVS=""
+IJS_DEVS0=""
+PNG_DEVS0=""
+X11_DEVS0=""
+
+
+dnl Known printers
+HP_DEVS='cdj500 djet500 djet500c dnj650c cljet5pr deskjet laserjet ljetplus ljet2p ljet3 ljet3d ljet4 ljet4d lj4dith lj5mono lj5gray cdeskjet cdjcolor cdjmono cdj550 pj pjxl pjxl300 lp2563 paintjet pjetxl cljet5 cljet5c pxlmono pxlcolor cdj670 cdj850 cdj880 cdj890 cdj970 cdj1600 cdnj500 chp2200 pcl3 hpdjplus hpdjportable hpdj310 hpdj320 hpdj340 hpdj400 hpdj500 hpdj500c hpdj510 hpdj520 hpdj540 hpdj550c hpdj560c hpdj600 hpdj660c hpdj670c hpdj680c hpdj690c hpdj850c hpdj855c hpdj870c hpdj890c hpdj1120c lj3100sw'
+PCLXL_DEVS='pxlmono pxlcolor'
+EPSON_DEVS='eps9high eps9mid epson epsonc escp lp8000 lq850 photoex st800 stcolor alc1900 alc2000 alc4000 alc4100 alc8500 alc8600 alc9100 lp3000c lp8000c lp8200c lp8300c lp8500c lp8800c lp9000c lp9200c lp9500c lp9800c lps6500 epl2050 epl2050p epl2120 epl2500 epl2750 epl5800 epl5900 epl6100 epl6200 lp1800 lp1900 lp2200 lp2400 lp2500 lp7500 lp7700 lp7900 lp8100 lp8300f lp8400f lp8600 lp8600f lp8700 lp8900 lp9000b lp9100 lp9200b lp9300 lp9400 lp9600 lp9600s lps4500 eplcolor eplmono'
+CANON_DEVS='bj10e bj200 bjc600 bjc800 lbp8 lips3 bjcmono bjcgray bjccmyk bjccolor'
+LEXMARK_DEVS='lxm5700m lxm3200 lex2050 lex3200 lex5700 lex7000'
+BROTHER_DEVS='hl7x0 hl1240 hl1250'
+APPLE_DEVS='appledmp iwhi iwlo iwlq'
+IBM_DEVS='ibmpro jetp3852'
+OKI_DEVS='oki182 okiibm oki4w'
+JAPAN_DEVS='lips4 lips4v ljet4pjl lj4dithp dj505j picty180 lips2p bjc880j pr201 pr150 pr1000 pr1000_4 jj100 bj10v bj10vh mj700v2c mj500c mj6000c mj8000c fmpr fmlbp ml600 lbp310 lbp320 md50Mono md50Eco md1xMono escpage lp2000 npdl rpdl'
+MISC_PDEVS='uniprint ap3250 atx23 atx24 atx38 itk24i itk38 coslw2p coslwxl declj250 fs600 imagen lj250 m8510 necp6 oce9050 r4081 sj48 tek4696 t4693d2 t4693d4 t4693d8 dl2100 la50 la70 la75 la75plus ln03 xes md2k md5k gdi samsunggdi'
+OPVP_DEVS='opvp oprp'
+
+ETS_HALFTONING_DEVS='rinkj'
+
+dnl Known file formats
+BMP_DEVS='bmpmono bmpgray bmpsep1 bmpsep8 bmp16 bmp256 bmp16m bmp32b'
+
+JPEG_DEVS='jpeg jpeggray jpegcmyk'
+# PNG_DEVS='png16 png16m png256 pngalpha pnggray pngmono'
+
+PCX_DEVS='pcxmono pcxgray pcx16 pcx256 pcx24b pcxcmyk'
+PBM_DEVS='pbm pbmraw pgm pgmraw pgnm pgnmraw pnm pnmraw ppm ppmraw pkm pkmraw pksm pksmraw pam pamcmyk4 pamcmyk32 plan plang planm planc plank'
+PS_DEVS='psdf psdcmyk psdrgb psdcmyk16 psdrgb16 psdcmyktags psdcmyktags16 pdfwrite ps2write eps2write bbox txtwrite inkcov ink_cov psdcmykog fpng pdfimage8 pdfimage24 pdfimage32 PCLm PCLm8'
+
+# Handle --with-extract-dir=EXTRACT_DIR - build extract library and docxwrite
+# device.
+#
+AC_ARG_WITH([extract-dir],
+    AS_HELP_STRING([--with-extract-dir=EXTRACT_DIR],
+            [Build with the specified Extract library. By default we build with Extract automatically if <ghostpdl-directory>/extract exists.]
+            ),
+    [
+        EXTRACT_DIR="$withval"
+        AS_IF([test x"$EXTRACT_DIR" != x"no"],
+        [AS_IF([test -e $EXTRACT_DIR],[ PS_DEVS="$PS_DEVS docxwrite"] ,AC_MSG_ERROR([EXTRACT_DIR does not exist: $EXTRACT_DIR]))])
+    ],
+    [
+        AC_MSG_CHECKING([Checking for "extract" in default location])
+        EXTRACT_DIR="extract"
+        AS_IF([test -e $EXTRACT_DIR], [AC_MSG_RESULT(yes); PS_DEVS="$PS_DEVS docxwrite"], [EXTRACT_DIR=""; AC_MSG_RESULT(no)])
+    ]
+)
+
+AC_SUBST(EXTRACT_DIR)
+
+# the "display" device isn't an ideal fit in the list below, but it saves adding a "list" for just that one entry
+MISC_FDEVS='ccr cif inferno mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 plan9bm bit bitrgb bitrgbtags bitcmyk devicen spotcmyk xcf plib plibg plibm plibc plibk display'
+
+XPSDEV=$XPSWRITEDEVICE
+
+while test -n "$drivers"; do
+        if echo $drivers |grep "," >/dev/null; then
+                THIS="`echo $drivers |sed -e 's/,.*//'`"
+                SEDCMD="s/$THIS,//"
+                drivers="`echo $drivers |sed -e $SEDCMD`"
+        else
+                THIS=$drivers
+                drivers=""
+        fi
+        case "$THIS" in
+        ALL)
+                # ALL = PRINTERS + FILES...
+                if test -z "$drivers"; then
+                        drivers="PRINTERS,FILES,X11"
+                else
+                        drivers="$drivers,PRINTERS,FILES,X11"
+                fi
+                ;;
+        PRINTERS)
+                P_DEVS0="$P_DEVS0 $CANON_DEVS $EPSON_DEVS $HP_DEVS $LEXMARK_DEVS $BROTHER_DEVS $APPLE_DEVS $IBM_DEVS $OKI_DEVS $JAPAN_DEVS $MISC_PDEVS $ETS_HALFTONING_DEVS $URF_DEVS"
+                IJS_DEVS0="$IJSDEVS"
+                if test x$ac_cv_lib_dl_dlopen != xno -a x$found_iconv != xno; then
+                        P_DEVS0="$P_DEVS0 $OPVP_DEVS"
+                else
+                        AC_MSG_WARN(Unable to include opvp/oprp driver due to missing or disabled prerequisites...)
+                fi
+                ;;
+        FILES)
+                F_DEVS0="$F_DEVS0 $BMP_DEVS $FAX_DEVS $JPEG_DEVS $TIFFDEVS $PCX_DEVS $PBM_DEVS $PS_DEVS $MISC_FDEVS $XPSDEV"
+                CUPS_DEVS0="$CUPSDEV"
+                JBIG2_DEVS="$JBIG2FILEDEVS"
+                PNG_DEVS0="$PNGDEVS"
+                ;;
+        APPLE)
+                # All Apple printers
+                P_DEVS0="$P_DEVS0 $APPLE_DEVS"
+                ;;
+        BMP)
+                # BMP file format
+                F_DEVS0="$F_DEVS0 $BMP_DEVS"
+                ;;
+        CANON)
+                # All Canon printers
+                P_DEVS0="$P_DEVS0 $CANON_DEVS"
+                ;;
+        EPSON)
+                # All Epson printers
+                P_DEVS0="$P_DEVS0 $EPSON_DEVS"
+                ;;
+        FAX)
+                # Fax file formats
+                F_DEVS0="$F_DEVS0 $FAX_DEVS"
+                ;;
+        JPEG)
+                # Jpeg file formats
+                F_DEVS0="$F_DEVS0 $JPEG_DEVS"
+                ;;
+        JBIG2)
+                # JBIG file formats
+                JBIG2_DEVS="$JBIG2DEVS"
+                ;;
+        PNG)
+                # PNG file formats
+                PNG_DEVS0="$PNGDEVS"
+                ;;
+        TIFF)
+                # TIFF file formats
+                F_DEVS0="$F_DEVS0 $TIFFDEVS"
+                ;;
+        PCLXL)
+                # PCL XL/PCL 6 drivers
+                F_DEVS0="$F_DEVS0 $PCLXL_DEVS"
+                ;;
+        PCX)
+                # PCX file formats
+                F_DEVS0="$F_DEVS0 $PCX_DEVS"
+                ;;
+        PBM)
+                # PBM file formats
+                F_DEVS0="$F_DEVS0 $PBM_DEVS"
+                ;;
+        CUPS)
+                # CUPS file format
+                CUPS_DEVS0="$CUPSDEV"
+                ;;
+        HP)
+                # All HP printers
+                P_DEVS0="$P_DEVS0 $HP_DEVS"
+                ;;
+        LEXMARK)
+                # All Lexmark printers
+                P_DEVS0="$P_DEVS0 $LEXMARK_DEVS"
+                ;;
+        BROTHER)
+                # All Brother printers
+                P_DEVS0="$P_DEVS0 $BROTHER_DEVS"
+                ;;
+        OKI)
+                # All OKI printers
+                P_DEVS0="$P_DEVS0 $OKI_DEVS"
+                ;;
+        IBM)
+                # All IBM printers
+                P_DEVS0="$P_DEVS0 $IBM_DEVS"
+                ;;
+        IJS)
+                # IJS printers
+                IJS_DEVS0="$IJSDEVS"
+                ;;
+        JAPAN)
+                # All old japanese printers
+                P_DEVS0="$P_DEVS0 $JAPAN_DEVS"
+                ;;
+        PS)
+                # PostScript/PDF writing
+                F_DEVS0="$F_DEVS0 $PS_DEVS"
+                ;;
+        XPS)
+                # XPS writing
+                XPS_DEVS0="$XPSDEV"
+                ;;
+
+        ETS)
+                # ETS Halftoning devices
+                F_DEVS0="$F_DEVS0 $ETS_HALFTONING_DEVS"
+                ;;
+        X11)
+                # X11 display devices
+                X11_DEVS0="$X_DEVS"
+                ;;
+        opvp)
+                # Open Vector Printing driver...
+                if test x$ac_cv_lib_dl_dlopen != xno -a x$found_iconv != xno; then
+                        P_DEVS0="$P_DEVS0 $OPVP_DEVS"
+                else
+                        AC_MSG_WARN(Unable to include opvp/oprp driver due to missing or disabled prerequisites...)
+                fi
+                ;;
+        *)
+                # It's a driver name (or a user messup)
+                P_DEVS0="$P_DEVS0 `echo $THIS |sed -e 's,\.dev$,,'`"
+                ;;
+        esac
+done
+
+noncontribmakefiles=`find $srcdir -name '*.mak' -print | grep -v '/contrib/'`
+
+# No need to include opvp/oprp driver without iconv/libiconv.
+if test -n "$P_DEVS0"; then
+    if test x$found_iconv = xno ; then
+        P_DEVS0=`echo $P_DEVS0 | sed -e 's|opvp||' -e 's|oprp||'`
+        AC_MSG_WARN(Unable to include opvp/oprp driver due to missing iconv/libiconv...)
+    fi
+
+#    Remove contributed drivers if requested and make sure we don't have any
+#   duplicates in there, add $(DD)foo.dev constructs
+    P_DEVS=`(for i in $P_DEVS0; do d='$(DD)'${i}.dev; if ( grep '^'$d $noncontribmakefiles 2>&1 >/dev/null ) || ( ! test -z "$CONTRIBINCLUDE" ); then echo $d; fi; done) | sort | uniq | tr '\012\015' '  '`
+fi
+
+if test -n "$F_DEVS0"; then
+    F_DEVS=`(for i in $F_DEVS0; do d='$(DD)'${i}.dev; if ( grep '^'$d $noncontribmakefiles  2>&1 >/dev/null) || ( ! test -z "$CONTRIBINCLUDE" ); then echo $d; fi; done) | sort | uniq | tr '\012\015' '  '`
+fi
+
+if test -n "$CUPS_DEVS0"; then
+    CUPS_DEVS=`(for i in $CUPS_DEVS0; do d='$(DD)'${i}.dev; if ( grep '^'$d $noncontribmakefiles  2>&1 >/dev/null) || ( ! test -z "$CONTRIBINCLUDE" ); then echo $d; fi; done) | sort | uniq | tr '\012\015' '  '`
+fi
+
+if test -n "$XPS_DEVS0"; then
+    XPS_DEVS=`(for i in $XPS_DEVS0; do d='$(DD)'${i}.dev; if ( grep '^'$d $noncontribmakefiles  2>&1 >/dev/null) || ( ! test -z "$CONTRIBINCLUDE" ); then echo $d; fi; done) | sort | uniq | tr '\012\015' '  '`
+fi
+
+if test -n "$IJS_DEVS0"; then
+    IJS_DEVS=`(for i in $IJS_DEVS0; do d='$(DD)'${i}.dev; if ( grep '^'$d $noncontribmakefiles  2>&1 >/dev/null) || ( ! test -z "$CONTRIBINCLUDE" ); then echo $d; fi; done) | sort | uniq | tr '\012\015' '  '`
+fi
+
+if test -n "$PNG_DEVS0"; then
+    PNG_DEVS=`(for i in $PNG_DEVS0; do d='$(DD)'${i}.dev; if ( grep '^'$d $noncontribmakefiles  2>&1 >/dev/null) || ( ! test -z "$CONTRIBINCLUDE" ); then echo $d; fi; done) | sort | uniq | tr '\012\015' '  '`
+fi
+
+if test -n "$X11_DEVS0"; then
+    X11_DEVS=`(for i in $X11_DEVS0; do d='$(DD)'${i}.dev; if ( grep '^'$d $noncontribmakefiles  2>&1 >/dev/null) || ( ! test -z "$CONTRIBINCLUDE" ); then echo $d; fi; done) | sort | uniq | tr '\012\015' '  '`
+fi
+
+# if the user explicitly requested the Apple devices, then hard fail if they aren't available
+if test x"$APPLE_DEVICES_REQUESTED" = x"yes" ; then
+  APDEVS=`echo $P_DEVS | grep 'APPLE\|iwhi\|iwlo\|iwlq'`
+  if test -z "$APDEVS" ; then
+    AC_MSG_ERROR([Requested Apple device(s) not available (iwhi, iwlo, and/or iwlq)])
+  fi
+fi
+
+AC_SUBST(P_DEVS)
+AC_SUBST(F_DEVS)
+AC_SUBST(CUPS_DEVS)
+AC_SUBST(XPS_DEVS)
+AC_SUBST(JBIG2_DEVS)
+AC_SUBST(IJS_DEVS)
+AC_SUBST(PNG_DEVS)
+
+# This now gets done after handling --enable-dynamic
+# AC_SUBST(X11_DEVS)
+
+dnl Dynamic device support.
+DYNAMIC_CFLAGS=""
+DYNAMIC_DEVS=""
+DYNAMIC_FLAGS=""
+GS_DYNAMIC_LDFLAGS=""
+PCL_DYNAMIC_LDFLAGS=""
+XPS_DYNAMIC_LDFLAGS=""
+PDL_DYNAMIC_LDFLAGS=""
+DYNAMIC_LIBS=""
+INSTALL_SHARED=""
+SO_LIB_EXT=".so"
+DLL_EXT=""
+SO_LIB_VERSION_SEPARATOR="."
+
+libname1="_SO_BASE)\$(GS_SOEXT)\$(DLL_EXT)"
+libname2="_SO_BASE)\$(GS_SOEXT)\$(SO_LIB_VERSION_SEPARATOR)\$(GS_VERSION_MAJOR)\$(DLL_EXT)"
+libname3="_SO_BASE)\$(GS_SOEXT)\$(SO_LIB_VERSION_SEPARATOR)\$(GS_VERSION_MAJOR)\$(SO_LIB_VERSION_SEPARATOR)\$(GS_VERSION_MINOR)\$(DLL_EXT)"
+GS_SONAME="lib\$(GS${libname1}"
+GS_SONAME_MAJOR="lib\$(GS${libname2}"
+GS_SONAME_MAJOR_MINOR="lib\$(GS${libname3}"
+PCL_SONAME="lib\$(PCL${libname1}"
+PCL_SONAME_MAJOR="lib\$(PCL${libname2}"
+PCL_SONAME_MAJOR_MINOR="lib\$(PCL${libname3}"
+XPS_SONAME="lib\$(XPS${libname1}"
+XPS_SONAME_MAJOR="lib\$(XPS${libname2}"
+XPS_SONAME_MAJOR_MINOR="lib\$(XPS${libname3}"
+
+PDF_SONAME="lib\$(PDF${libname1}"
+PDF_SONAME_MAJOR="lib\$(PDF${libname2}"
+PDF_SONAME_MAJOR_MINOR="lib\$(PDF${libname3}"
+
+GPDL_SONAME="lib\$(GPDL${libname1}"
+GPDL_SONAME_MAJOR="lib\$(GPDL${libname2}"
+GPDL_SONAME_MAJOR_MINOR="lib\$(GPDL${libname3}"
+
+hide_symbols=yes
+attr_default=
+attr_hidden=
+_ldflags=
+
+AC_ARG_ENABLE([hidden-visibility],
+    AS_HELP_STRING([--disable-hidden-visibility],
+        [expose all shared library symbols even those which are not part of its public API]),
+    [hide_symbols=no])
+
+if test x"$hide_symbols" = x"yes" -a x"$GCC" = x"yes"; then
+    attr_default="__attribute__((visibility(\\\"default\\\")))"
+    attr_hidden="__attribute__((visibility(\\\"hidden\\\")))"
+fi
+
+case $host in
+    *-linux*|*-gnu)
+      DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
+      GS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
+      PCL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
+      XPS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR)"
+      PDL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GPDL_SONAME_MAJOR)"
+      PDF_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PDF_SONAME_MAJOR)"
+      if test x"$GCC" = x"yes"; then
+        # GCC high level flag
+        DYNAMIC_LIBS="-rdynamic"
+      else
+        DYNAMIC_LIBS=""
+      fi
+      SO_LIB_EXT=".so"
+    ;;
+    *-mingw*|*-msys*)
+      if test x"$hide_symbols" = x"yes"; then
+        attr_default="__declspec(dllexport)"
+        attr_hidden=""
+      else
+        _ldflags="-Wl,--export-all-symbols"
+      fi
+      _ldflags="$_ldflags -Wl,--enable-auto-import"
+      GS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(GS_SO_BASE).dll.a $_ldflags"
+      PCL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PCL_SO_BASE).dll.a $_ldflags"
+      XPS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(XPS_SO_BASE).dll.a $_ldflags"
+      PDL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PDL_SO_BASE).dll.a $_ldflags"
+      SO_LIB_EXT=""
+      DLL_EXT=".dll"
+      SO_LIB_VERSION_SEPARATOR="-"
+      # make sure the import library doesn't link a program against the DLL with the minor version in it
+      GS_SONAME="lib\$(GS${libname1}"
+      GS_SONAME_MAJOR="lib\$(GS${libname3}"
+      GS_SONAME_MAJOR_MINOR="lib\$(GS${libname2}"
+      PCL_SONAME="lib\$(PCL${libname1}"
+      PCL_SONAME_MAJOR="lib\$(PCL${libname3}"
+      PCL_SONAME_MAJOR_MINOR="lib\$(PCL${libname2}"
+      XPS_SONAME="lib\$(XPS${libname1}"
+      XPS_SONAME_MAJOR="lib\$(XPS${libname3}"
+      XPS_SONAME_MAJOR_MINOR="lib\$(XPS${libname2}"
+      PDF_SONAME="lib\$(PDF${libname1}"
+      PDF_SONAME_MAJOR="lib\$(PDF${libname3}"
+      PDF_SONAME_MAJOR_MINOR="lib\$(PDF${libname2}"
+      GPDL_SONAME="lib\$(GPDL${libname1}"
+      GPDL_SONAME_MAJOR="lib\$(GPDL${libname3}"
+      GPDL_SONAME_MAJOR_MINOR="lib\$(GPDL${libname2}"
+    ;;
+    *-cygwin*)
+      if test x"$hide_symbols" = x"yes"; then
+        attr_default="__declspec(dllexport)"
+        attr_hidden=""
+      fi
+      GS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(GS_SO_BASE).dll.a $_ldflags"
+      PCL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PCL_SO_BASE).dll.a $_ldflags"
+      XPS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(XPS_SO_BASE).dll.a $_ldflags"
+      PDL_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(PDL_SO_BASE).dll.a $_ldflags"
+      SO_LIB_EXT=""
+      DLL_EXT=".dll"
+      SO_LIB_VERSION_SEPARATOR="-"
+      # make sure the import library doesn't link a program against the DLL with the minor version in it
+      GS_SONAME="lib\$(GS${libname1}"
+      GS_SONAME_MAJOR="lib\$(GS${libname3}"
+      GS_SONAME_MAJOR_MINOR="cyg\$(GS${libname2}"
+      PCL_SONAME="lib\$(PCL${libname1}"
+      PCL_SONAME_MAJOR="lib\$(PCL${libname3}"
+      PCL_SONAME_MAJOR_MINOR="cyg\$(PCL${libname2}"
+      XPS_SONAME="lib\$(XPS${libname1}"
+      XPS_SONAME_MAJOR="lib\$(XPS${libname3}"
+      XPS_SONAME_MAJOR_MINOR="cyg\$(XPS${libname2}"
+      GPDL_SONAME="lib\$(GPDL${libname1}"
+      GPDL_SONAME_MAJOR="lib\$(GPDL${libname3}"
+      GPDL_SONAME_MAJOR_MINOR="cyg\$(GPDL${libname2}"
+    ;;
+    *bsd*)
+      DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
+      GS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
+      PCL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
+      XPS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR)"
+      PDL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GPDL_SONAME_MAJOR)"
+      PDF_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PDF_SONAME_MAJOR)"
+      DYNAMIC_LIBS=""
+      SO_LIB_EXT=".so"
+    ;;
+    *-darwin*)
+      DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
+      GS_DYNAMIC_LDFLAGS="-dynamiclib -install_name $DARWIN_LDFLAGS_SO_PREFIX\$(GS_SONAME_MAJOR_MINOR)"
+      PCL_DYNAMIC_LDFLAGS="-dynamiclib -install_name $DARWIN_LDFLAGS_SO_PREFIX\$(PCL_SONAME_MAJOR_MINOR)"
+      XPS_DYNAMIC_LDFLAGS="-dynamiclib -install_name $DARWIN_LDFLAGS_SO_PREFIX\$(XPS_SONAME_MAJOR_MINOR)"
+      PDL_DYNAMIC_LDFLAGS="-dynamiclib -install_name $DARWIN_LDFLAGS_SO_PREFIX\$(GPDL_SONAME_MAJOR_MINOR)"
+      PDF_DYNAMIC_LDFLAGS="-dynamiclib -install_name $DARWIN_LDFLAGS_SO_PREFIX\$(PDF_SONAME_MAJOR_MINOR)"
+      DYNAMIC_LIBS=""
+      SO_LIB_EXT=".dylib"
+    ;;
+    *-sun*|*-solaris*)
+      if test x"$GCC" = x"yes"; then
+        DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
+      else
+        DYNAMIC_CFLAGS="-KPIC $DYNAMIC_CFLAGS"
+        #if test x"$hide_symbols" = x"yes"; then
+        #  attr_default="__global"
+        #  attr_hidden="__hidden"
+        #  _ldflags="-xldscope=hidden"
+        #fi
+        # ^^^ untested
+      fi
+      GS_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR) $_ldflags"
+      PCL_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR) $_ldflags"
+      XPS_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR) $_ldflags"
+      PDL_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GPDL_SONAME_MAJOR) $_ldflags"
+      PDF_DYNAMIC_LDFLAGS="-G -shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PDF_SONAME_MAJOR)"
+      DYNAMIC_LIBS=""
+      SO_LIB_EXT=".so"
+    ;;
+    *-aix*)
+      if test x"$GCC" = x"yes"; then
+        DYNAMIC_CFLAGS="-fPIC $DYNAMIC_CFLAGS"
+        GCFLAGS="-Wl,-brtl -D_LARGE_FILES $GCFLAGS"
+        GS_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
+        PCL_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
+        XPS_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
+        PDL_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
+        PDF_DYNAMIC_LDFLAGS="-shared -Wl,-brtl,-G -fPIC"
+      else
+        DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS"
+        GCFLAGS="-Wl,-brtl -D_LARGE_FILES $GCFLAGS"
+        GS_DYNAMIC_LDFLAGS="-G -qmkshrobj -Wl,-brtl,-G"
+        PCL_DYNAMIC_LDFLAGS="-G -qmkshrobj -Wl,-brtl,-G"
+        XPS_DYNAMIC_LDFLAGS="-G -qmkshrobj -Wl,-brtl,-G"
+        PDL_DYNAMIC_LDFLAGS="-G -qmkshrobj -Wl,-brtl,-G"
+        PDF_DYNAMIC_LDFLAGS="-G -qmkshrobj -Wl,-brtl,-G"
+      fi
+      SO_LIB_EXT=".so"
+      ;;
+esac
+
+if test x"$hide_symbols" = x"yes" ; then
+  if test x"$GCC" = x"yes"; then
+    DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -fvisibility=hidden"
+  fi
+  DYNAMIC_CFLAGS="$DYNAMIC_CFLAGS -DGSDLLEXPORT=\"$attr_default\""
+  if test "x$FT_BRIDGE" = x1 -a "x$SHARE_FT" = x0 ; then
+    # disable warnings for redefined macros, so our abuse of FT_EXPORT() to hide symbols doesn't flag warnings
+    FT_HIDDEN_CFLAGS="-Wp,-w -D\"FT_EXPORT(x)\"=\"$attr_hidden x\" -D\"FT_EXPORT_DEF(x)\"=\"$attr_hidden x\""
+  fi
+  if test "x$SHARE_EXPAT" = x0 ; then
+    XML_HIDDEN_CFLAGS="-DXML_STATIC -DXMLIMPORT=\"$attr_hidden\""
+  fi
+fi
+
+AC_SUBST(GS_SONAME)
+AC_SUBST(GS_SONAME_MAJOR)
+AC_SUBST(GS_SONAME_MAJOR_MINOR)
+AC_SUBST(PCL_SONAME)
+AC_SUBST(PCL_SONAME_MAJOR)
+AC_SUBST(PCL_SONAME_MAJOR_MINOR)
+AC_SUBST(XPS_SONAME)
+AC_SUBST(XPS_SONAME_MAJOR)
+AC_SUBST(XPS_SONAME_MAJOR_MINOR)
+
+AC_SUBST(PDF_SONAME)
+AC_SUBST(PDF_SONAME_MAJOR)
+AC_SUBST(PDF_SONAME_MAJOR_MINOR)
+
+AC_SUBST(GPDL_SONAME)
+AC_SUBST(GPDL_SONAME_MAJOR)
+AC_SUBST(GPDL_SONAME_MAJOR_MINOR)
+
+AC_SUBST(FT_HIDDEN_CFLAGS)
+AC_SUBST(XML_HIDDEN_CFLAGS)
+
+AC_ARG_ENABLE([dynamic], AS_HELP_STRING([--enable-dynamic],
+    [Enable dynamically loaded drivers]),
+[
+  if test "x$enable_dynamic" != xno; then
+    case $host in
+      *-linux*|*-gnu)
+        INSTALL_SHARED="install-shared"
+        if test "x$X_DEVS" != x; then
+                DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
+        else
+                DYNAMIC_DEVS=""
+        fi
+        DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
+        X11_DEVS=""
+        OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
+        DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
+      ;;
+      *bsd*)
+        DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
+        DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
+        X11_DEVS=""
+        OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
+        DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
+      ;;
+      *-darwin*)
+        INSTALL_SHARED="install-shared"
+        DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
+        X11_DEVS=""
+        OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
+        DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
+      ;;
+      *-sun*|*-solaris*)
+        DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
+        DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
+        OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
+        DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
+      ;;
+      *)
+        AC_MSG_ERROR([Sorry, dynamic driver support not available on this platform!])
+      ;;
+    esac
+  fi
+])
+
+AC_SUBST(DYNAMIC_CFLAGS)
+AC_SUBST(DYNAMIC_DEVS)
+AC_SUBST(DYNAMIC_FLAGS)
+AC_SUBST(GS_DYNAMIC_LDFLAGS)
+AC_SUBST(PCL_DYNAMIC_LDFLAGS)
+AC_SUBST(XPS_DYNAMIC_LDFLAGS)
+AC_SUBST(PDL_DYNAMIC_LDFLAGS)
+AC_SUBST(PDF_DYNAMIC_LDFLAGS)
+AC_SUBST(DYNAMIC_LIBS)
+AC_SUBST(INSTALL_SHARED)
+AC_SUBST(X11_DEVS)
+AC_SUBST(SO_LIB_EXT)
+AC_SUBST(DLL_EXT)
+AC_SUBST(SO_LIB_VERSION_SEPARATOR)
+
+dnl look for default font path...
+AC_ARG_WITH([fontpath],  AS_HELP_STRING([--with-fontpath],
+    [set font search path for gs]), fontpath="$withval", fontpath="")
+
+dnl Fix "prefix" variable...
+if test "x$prefix" = xNONE; then
+        prefix=/usr/local
+fi
+
+dnl Fix "datadir" variable...
+if test "x$datadir" = 'x${prefix}/share'; then
+        datadir="$prefix/share"
+fi
+
+dnl Fix "fontpath" variable...
+if test "x$fontpath" = "x"; then
+        # These font directories are used by various Linux distributions...
+        fontpath="$datadir/fonts/default/ghostscript"
+        fontpath="${fontpath}:$datadir/fonts/default/Type1"
+        fontpath="${fontpath}:$datadir/fonts/default/TrueType"
+
+        # These font directories are used by IRIX...
+        fontpath="${fontpath}:/usr/lib/DPS/outline/base"
+
+        # These font directories are used by Solaris...
+        fontpath="${fontpath}:/usr/openwin/lib/X11/fonts/Type1"
+        fontpath="${fontpath}:/usr/openwin/lib/X11/fonts/TrueType"
+
+        # This font directory is used by CUPS...
+        if test "x$CUPSCONFIG" != x; then
+          fontpath="${fontpath}:`$CUPSCONFIG --datadir`/fonts"
+        fi
+fi
+
+AC_SUBST(fontpath)
+
+dnl look for default tessdata...
+AC_ARG_WITH([tessdata],  AS_HELP_STRING([--with-tessdata],
+    [set tesseract data search path]), tessdata="$withval", tessdata="")
+
+if test "x$tessdata" = "x"; then
+        tessdata="${datadir}/tessdata"
+fi
+
+AC_SUBST(tessdata)
+
+dnl --------------------------------------------------
+dnl Check for library functions
+dnl --------------------------------------------------
+
+AC_CHECK_FUNCS([mkstemp], [HAVE_MKSTEMP=-DHAVE_MKSTEMP])
+AC_SUBST(HAVE_MKSTEMP)
+
+AC_CHECK_FUNCS([fopen64], [HAVE_FILE64=-DHAVE_FILE64])
+AC_SUBST(HAVE_FILE64)
+
+AC_CHECK_FUNCS([fseeko], [HAVE_FSEEKO=-DHAVE_FSEEKO])
+AC_SUBST(HAVE_FSEEKO)
+
+AC_CHECK_FUNCS([mkstemp64], [HAVE_MKSTEMP64=-DHAVE_MKSTEMP64])
+AC_SUBST(HAVE_MKSTEMP64)
+
+AC_CHECK_FUNCS([setlocale], [HAVE_SETLOCALE=-DHAVE_SETLOCALE])
+AC_SUBST(HAVE_SETLOCALE)
+
+AC_CHECK_FUNCS([strerror], [HAVE_STRERROR=-DHAVE_STRERROR])
+AC_SUBST(HAVE_STRERROR)
+
+AC_CHECK_FUNCS([isnan], [HAVE_ISNAN=-DHAVE_ISNAN])
+AC_SUBST(HAVE_ISNAN)
+
+AC_CHECK_FUNCS([isinf], [HAVE_ISINF=-DHAVE_ISINF])
+AC_SUBST(HAVE_ISINF)
+
+AC_CHECK_FUNCS([fpclassify], [HAVE_FPCLASSIFY=-DHAVE_FPCLASSIFY])
+AC_SUBST(HAVE_FPCLASSIFY)
+
+AC_PROG_GCC_TRADITIONAL
+
+dnl NB: We don't actually provide autoconf-switched fallbacks for any
+dnl     of these functions, so the checks are purely informational.
+AC_FUNC_FORK
+AC_FUNC_MALLOC
+AC_FUNC_MEMCMP
+AC_FUNC_STAT
+AC_FUNC_VPRINTF
+AC_CHECK_FUNCS([bzero dup2 floor gettimeofday memchr memmove memset mkdir mkfifo modf pow putenv rint setenv sqrt strchr strrchr strspn strstr])
+
+dnl --------------------------------------------------
+dnl disable the memory header ID code on SPARC
+dnl --------------------------------------------------
+
+case $host in
+        *sparc*)
+	  GCFLAGS="$GCFLAGS -DGS_USE_MEMORY_HEADER_ID=0"
+        ;;
+esac
+
+dnl --------------------------------------------------
+dnl set big/little endian for LCMS
+dnl --------------------------------------------------
+LCMS_ENDIAN=
+LCMS2_ENDIAN=
+
+if test x"$BIGENDIAN" != x"0"; then
+  LCMS_ENDIAN="-DUSE_BIG_ENDIAN=$BIGENDIAN"
+  LCMS2_ENDIAN="-DCMS_USE_BIG_ENDIAN=$BIGENDIAN"
+fi
+
+AC_SUBST(LCMS_ENDIAN)
+AC_SUBST(LCMS2_ENDIAN)
+
+dnl --------------------------------------------------
+dnl set memory manager's ptr alignment
+dnl --------------------------------------------------
+
+ALIGN_TEXT_PROG_INCS="\
+#include <stdio.h>
+#include <stdlib.h>
+"
+
+
+ALIGN_TEXT_PROG="\
+    struct altest
+    {
+      char a;
+      int b;
+      long c;
+      long long d;
+      float e;
+      double f;
+      void *g;
+    };
+    struct altest *a;
+    struct altest d;
+    char *b, *c, *lim;
+    int ret = 0;
+    c = b = malloc(64 * sizeof(struct altest));
+    lim = b + (64 * sizeof(struct altest));
+    do
+    {
+        b++;
+        if ((b >= lim) ||
+            ((((unsigned int)b) & 4) == 0 && (((unsigned int)b) & 8) != 0))
+        {
+          break;
+        }
+    } while(1);
+    if (b >= lim)
+    {
+        ret = -1;
+    }
+    else
+    {
+        a = (struct altest *)b;
+        b = a->g;
+        ret = 0;
+    }
+    free(c);
+    exit(ret);
+"
+
+
+GS_MEMPTR_ALIGNMENT=
+
+AC_ARG_WITH(memory-alignment,
+            [AS_HELP_STRING([--with-memory-alignment],
+                               [Allows setting minimum alignment for the memory manager (4 or 8 bytes]))],
+            [GS_MEMPTR_ALIGNMENT=$with_memory_alignment],[GS_MEMPTR_ALIGNMENT=check])
+
+if test x"$GS_MEMPTR_ALIGNMENT" = xcheck ; then
+  case $host in
+    *hpux*|*-sun*|*-aix*|*-solaris*)
+     GS_MEMPTR_ALIGNMENT=8
+    ;;
+    *)
+    ;;
+  esac
+fi
+
+if test x"$GS_MEMPTR_ALIGNMENT" = xcheck ; then
+   AC_MSG_CHECKING([minimum memory pointer alignment])
+   AC_RUN_IFELSE(
+    [AC_LANG_PROGRAM([$ALIGN_TEXT_PROG_INCS], [
+      $ALIGN_TEXT_PROG
+    ])],
+    [GS_MEMPTR_ALIGNMENT=4;AC_MSG_RESULT(done)],
+    [GS_MEMPTR_ALIGNMENT=8;AC_MSG_RESULT(done)],
+    [GS_MEMPTR_ALIGNMENT=4;AC_MSG_RESULT(cross compiling: assuming 4 byte - otherwise use "--with-memory-alignment=")])
+
+fi
+
+if test x"$GS_MEMPTR_ALIGNMENT" != x4 && test x"$GS_MEMPTR_ALIGNMENT" != x8 ; then
+    AC_MSG_ERROR([4 and 8 are the only valid values for "--with-memory-alignment"], -1)
+fi
+
+if test x"$GS_MEMPTR_ALIGNMENT" != x4  || test x"$with_memory_alignment" != x ; then
+  LCMS2_PTR_ALIGNMENT="-DCMS_PTR_ALIGNMENT=$GS_MEMPTR_ALIGNMENT"
+
+  GCFLAGS="$GCFLAGS -DGS_MEMPTR_ALIGNMENT=$GS_MEMPTR_ALIGNMENT"
+fi
+
+AC_SUBST(LCMS2_PTR_ALIGNMENT)
+
+dnl --------------------------------------------------
+dnl decide if we have to "hack" sqrtf() for lcms2
+dnl --------------------------------------------------
+
+AC_CHECK_FUNC([sqrtf], [SQRTF_SUBST=], [SQRTF_SUBST="-Dsqrtf=\"(float)sqrt\""])
+
+AC_SUBST(SQRTF_SUBST)
+
+dnl --------------------------------------------------
+dnl check for and possibly replace strnlen
+dnl --------------------------------------------------
+AC_CHECK_FUNCS([strnlen], [HAVE_STRNLEN=],[HAVE_STRNLEN="-D\"strnlen(a,b)=strlen(a)\""])
+
+GCFLAGS="$GCFLAGS $HAVE_STRNLEN"
+
+
+dnl --------------------------------------------------
+dnl check for byte swap intrinsics
+dnl --------------------------------------------------
+AC_MSG_CHECKING([byteswap support])
+
+HAVE_BSWAP32=""
+AC_LINK_IFELSE(
+  [AC_LANG_PROGRAM([], [
+  int a = 0;
+  int b = __builtin_bswap32(a);
+  return(0);
+  ])],
+  [HAVE_BSWAP32="-DHAVE_BSWAP32"], [HAVE_BSWAP32=""])
+
+AC_ARG_ENABLE([bswap32], AS_HELP_STRING([--disable-bswap32],
+       [Do not use bswap32 instrinsic]), [
+             if test "x$enable_bswap32" = xno; then
+                HAVE_BSWAP32=""
+             fi])
+
+if test "x$HAVE_BSWAP32" != x; then
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+
+AC_SUBST(HAVE_BSWAP32)
+
+dnl --------------------------------------------------
+dnl check for byte swap header
+dnl --------------------------------------------------
+AC_MSG_CHECKING([for byteswap.h])
+
+HAVE_BYTESWAP_H=""
+AC_COMPILE_IFELSE(
+  [AC_LANG_PROGRAM([#include "byteswap.h"], [
+  int a = 0;
+  int b = __builtin_bswap32(a);
+  return(0);
+  ])],
+  [HAVE_BYTESWAP_H="-DHAVE_BYTESWAP_H"], [HAVE_BYTESWAP_H=""])
+
+AC_ARG_ENABLE([byteswap-h], AS_HELP_STRING([--disable-byteswap-h],
+       [Do not use byteswap.h functions]), [
+             if test "x$enable_byteswap-h" = xno; then
+                HAVE_BYTESWAP_H=""
+             fi])
+
+if test "x$HAVE_BYTESWAP_H" != x; then
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+
+AC_SUBST(HAVE_BYTESWAP_H)
+
+# --------------------------------------------------
+# Sun, BSD possibly other makes don't have quite the
+# feature set of GNU make. We still prefer GNU make,
+# but......
+# --------------------------------------------------
+AC_ARG_WITH([gnu-make],  AS_HELP_STRING([--without-gnu-make],
+    [disable GNU make features]), gnu_make=no)
+
+if test "x$gnu_make" != "xno"; then
+  SUB_MAKE_OPTION="-f \$(MAKEFILE)"
+  ORDER_ONLY="|"
+else
+  SUB_MAKE_OPTION=
+  ORDER_ONLY=""
+fi
+
+AC_SUBST(ORDER_ONLY)
+AC_SUBST(SUB_MAKE_OPTION)
+
+# --------------------------------------------------
+# annoying: Windows doesn't allow "aux" as a
+# directory nor file name, so if we're building in
+# mingw, add the same prefix as the VS build uses
+# --------------------------------------------------
+AUXDIRPOSTFIX=""
+case $build in
+    *-mingw*|*-msys*|*-cygwin*)
+    AUXDIRPOSTFIX="_"
+    ;;
+esac
+AC_SUBST(AUXDIRPOSTFIX)
+
+# --------------------------------------------------
+# Set executable name extention
+# usually empty on Unix-like systems
+# --------------------------------------------------
+EXEEXT=""
+
+case $host in
+    *-mingw*|*-msys*)
+      EXEEXT=".exe"
+    ;;
+    *)
+    ;;
+esac
+
+AC_ARG_WITH([exe-ext],  AS_HELP_STRING([--with-exe-ext=EXT],
+    [set the file name executable extension (must include any separator e.g. the period in ".exe")]),
+    [EXEEXT="$with_exe_ext"])
+
+AC_SUBST(EXEEXT)
+
+# --------------------------------------------------
+# Set executable name extention for aux binaries
+# usually empty on Unix-like systems
+# --------------------------------------------------
+AUXEXEEXT=""
+
+case $build in
+    *-mingw*|*-msys*)
+      AUXEXEEXT=".exe"
+    ;;
+    *)
+    ;;
+esac
+
+AC_ARG_WITH([aux-exe-ext],  AS_HELP_STRING([--with-aux-exe-ext=EXT],
+    [set the file name executable extension for auxiliary binaries (must include any separator e.g. the period in ".exe")]),
+    [AUXEXEEXT="$with_aux_exe_ext"])
+
+AC_SUBST(AUXEXEEXT)
+
+# --------------------------------------------------
+# Check for disabling of versioned path option.
+# By default the versioned path must be enabled!
+# Using this option is user's own risk & responsibility.
+# --------------------------------------------------
+AC_ARG_WITH([versioned-path],
+[  --without-versioned-path
+                          Do not use file paths containing the version of GS.
+
+                 WARNING: This option is dangerous & unsupported, and
+                          you take full responsibility for using it!],
+versioned_path=no)
+
+if test "x$versioned_path" != "xno"; then
+  VERSIONED_PATH='/$(GS_DOT_VERSION)'
+else
+  VERSIONED_PATH=''
+fi
+
+AC_SUBST(VERSIONED_PATH)
+
+# --------------------------------------------------
+# Check if we are using GCC, and disable strict
+# aliasing optimization if GCC supports it...
+#
+# NOTE: Strict aliasing can cause some parts
+#       of Ghostscript to malfunction.
+# --------------------------------------------------
+if test x"$GCC" = x"yes"; then
+  AC_MSG_CHECKING([whether to explicitly disable strict aliasing])
+  CFLAGS_backup="$CFLAGS"
+  CFLAGSAUX_backup="$CFLAGSAUX"
+  CFLAGS="$CFLAGS -fno-strict-aliasing"
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[
+    AC_MSG_RESULT([yes])
+    CFLAGS_backup="$CFLAGS"
+    if test x"$host" = x"$build" ; then
+      CFLAGSAUX_backup="$CFLAGSAUX -fno-strict-aliasing"
+    fi
+  ],[])
+  CFLAGS="$CFLAGS_backup"
+  CFLAGSAUX="$CFLAGSAUX_backup"
+fi
+
+# --------------------------------------------------
+# Modify build for internal cluster testing.
+# DO NOT USE THIS OPTION OUTSIDE OF ARTIFEX!
+# --------------------------------------------------
+AC_ARG_ENABLE([cluster])
+
+if test "x"$enable_cluster != "x"; then
+  CLUSTER_CFLAGS="-DCLUSTER"
+else
+  CLUSTER_CFLAGS=""
+fi
+
+AC_SUBST(CLUSTER_CFLAGS)
+
+if test x"$build" != x"$host"; then
+
+  ilog2()
+  {
+    ILOG2_VAL=$1
+    ILOG2_RES=0
+    while test $ILOG2_VAL -gt 1 ; do
+      ILOG2_VAL=$((ILOG2_VAL + 1))
+      ILOG2_VAL=$((ILOG2_VAL >> 1))
+      ILOG2_RES=$((ILOG2_RES + 1))
+    done
+    return $ILOG2_RES
+  };
+
+# --------------------------------------------------
+# Generate arch.h headers
+# --------------------------------------------------
+  AC_CHECK_ALIGNOF([short])
+  AC_CHECK_ALIGNOF([int])
+  AC_CHECK_ALIGNOF([long])
+  AC_CHECK_ALIGNOF([size_t])
+  AC_CHECK_ALIGNOF([void *])
+  AC_CHECK_ALIGNOF([float])
+  AC_CHECK_ALIGNOF([double])
+
+  AC_SUBST(ARCH_ALIGN_SHORT_MOD, $ac_cv_alignof_short)
+  AC_SUBST(ARCH_ALIGN_INT_MOD, $ac_cv_alignof_int)
+  AC_SUBST(ARCH_ALIGN_LONG_MOD, $ac_cv_alignof_long)
+  AC_SUBST(ARCH_ALIGN_SIZE_T_MOD, $ac_cv_alignof_size_t)
+  AC_SUBST(ARCH_ALIGN_PTR_MOD, $ac_cv_alignof_void_p)
+  AC_SUBST(ARCH_ALIGN_FLOAT_MOD, $ac_cv_alignof_float)
+  AC_SUBST(ARCH_ALIGN_DOUBLE_MOD, $ac_cv_alignof_double)
+
+  AC_CHECK_SIZEOF([char])
+  AC_CHECK_SIZEOF([short])
+  AC_CHECK_SIZEOF([int])
+  AC_CHECK_SIZEOF([long])
+  AC_CHECK_SIZEOF([long long])
+  AC_CHECK_SIZEOF([size_t])
+  AC_CHECK_SIZEOF([void *])
+  AC_CHECK_SIZEOF([float])
+  AC_CHECK_SIZEOF([double])
+
+  ilog2 $ac_cv_sizeof_char
+  AC_SUBST(ARCH_LOG2_SIZEOF_CHAR, $?)
+
+  ilog2 $ac_cv_sizeof_short
+  AC_SUBST(ARCH_LOG2_SIZEOF_SHORT, $?)
+
+  ilog2 $ac_cv_sizeof_int
+  AC_SUBST(ARCH_LOG2_SIZEOF_INT, $?)
+
+  ilog2 $ac_cv_sizeof_long
+  AC_SUBST(ARCH_LOG2_SIZEOF_LONG, $?)
+
+  ilog2 $ac_cv_sizeof_long_long
+  AC_SUBST(ARCH_LOG2_SIZEOF_LONG_LONG, $?)
+
+  ilog2 $ac_cv_sizeof_size_t
+  AC_SUBST(ARCH_LOG2_SIZEOF_SIZE_T, $?)
+  AC_SUBST(ARCH_SIZEOF_SIZE_T, $ac_cv_sizeof_size_t)
+
+  AC_SUBST(ARCH_SIZEOF_PTR, $ac_cv_sizeof_void_p)
+  ilog2 $ac_cv_sizeof_void_p
+  AC_SUBST(ARCH_LOG2_SIZEOF_PTR, $?)
+
+  AC_SUBST(ARCH_SIZEOF_FLOAT, $ac_cv_sizeof_float)
+  ilog2 $ac_cv_sizeof_float
+  AC_SUBST(ARCH_LOG2_SIZEOF_FLOAT, $?)
+
+  AC_SUBST(ARCH_SIZEOF_DOUBLE, $ac_cv_sizeof_double)
+  ilog2 $ac_cv_sizeof_double
+  AC_SUBST(ARCH_LOG2_SIZEOF_DOUBLE, $?)
+
+  AC_SUBST(ARCH_IS_BIG_ENDIAN, $BIGENDIAN)
+
+  AC_MSG_CHECKING([if pointers are signed])
+  AC_COMPILE_IFELSE(
+    [AC_LANG_PROGRAM([#include <stdint.h>], [
+      char b[[(char *)(uintptr_t)-1 < (char *)(uintptr_t)0 ? -1 : 0]];
+      return sizeof(b);
+    ])],
+    [ARCH_PTRS_ARE_SIGNED=0; AC_MSG_RESULT(no)], [ARCH_PTRS_ARE_SIGNED=1; AC_MSG_RESULT(yes)])
+  AC_SUBST(ARCH_PTRS_ARE_SIGNED)
+
+  AC_MSG_CHECKING([if dividing negative by positive truncates])
+  AC_COMPILE_IFELSE(
+    [AC_LANG_PROGRAM([], [
+      char b[[-1 / 2 == 0 ? -1 : 0]];
+      return sizeof(b);
+    ])],
+    [ARCH_DIV_NEG_POS_TRUNCATES=0; AC_MSG_RESULT(no)], [ARCH_DIV_NEG_POS_TRUNCATES=1; AC_MSG_RESULT(yes)])
+  AC_SUBST(ARCH_DIV_NEG_POS_TRUNCATES)
+
+  AC_MSG_CHECKING([if arithmetic shift works properly])
+  ARCH_ARITH_RSHIFT=""
+  AC_COMPILE_IFELSE(
+    [AC_LANG_PROGRAM([], [
+      char b[[(-1L >> 2) != -1 || (-1 >> 1) != -1 || (-1 >> 2) != -1 ? 0 : -1]];
+      return sizeof(b);
+    ])],
+    [ARCH_ARITH_RSHIFT=0; AC_MSG_RESULT(no)])
+
+  if test "x${ARCH_ARITH_RSHIFT}" = "x"; then
+    # Turbo C problem
+    AC_COMPILE_IFELSE(
+      [AC_LANG_PROGRAM([], [
+        char b[[(-1L >> 2) != -1 ? 0 : -1]];
+        return sizeof(b);
+      ])],
+      [ARCH_ARITH_RSHIFT=1; AC_MSG_RESULT(no)])
+  fi
+
+  if test "x${ARCH_ARITH_RSHIFT}" = "x"; then
+    AC_MSG_RESULT(yes)
+    ARCH_ARITH_RSHIFT=2
+  fi
+  AC_SUBST(ARCH_ARITH_RSHIFT)
+
+  AC_SUBST(ARCH_SIZEOF_GX_COLOR_INDEX)
+  CONFIG_FILES_LIST="$CONFIG_FILES_LIST $ARCH_AUTOCONF_HEADER:$ARCH_AUTOCONF_HEADER_PROTO"
+fi
+
+dnl --------------------------------------------------
+dnl AUX tool options
+dnl --------------------------------------------------
+AC_ARG_ENABLE([mkromfs-quiet], AS_HELP_STRING([--enable-mkromfs-quiet],
+       [Do not emit mkromfs verbose output]), [MKROMFS_FLAGS="-q $MKROMFS_FLAGS"])
+
+AC_SUBST(MKROMFS_FLAGS)
+
+
+if test x"$GCFLAGSAUX" = x"\$(GCFLAGS)" ; then
+    GCFLAGSAUX="$GCFLAGS"
+fi
+
+CFLAGSAUX=$(echo $CFLAGSAUX | sed -e 's/-DGS_NO_FILESYSTEM//g')
+
+dnl --------------------------------------------------
+dnl Do substitutions
+dnl --------------------------------------------------
+SRCDIR="$srcdir"
+AC_SUBST(SRCDIR)
+AC_SUBST(OPT_CFLAGS)
+AC_SUBST(DBG_CFLAGS)
+AC_SUBST(GCFLAGS)
+AC_SUBST(CFLAGS_SANITIZE)
+AC_SUBST(STRIP_XE)
+AC_SUBST(JPX_SSE_CFLAGS)
+
+AC_SUBST(CCAUX)
+AC_SUBST(CFLAGSAUX)
+AC_SUBST(GCFLAGSAUX)
+AC_SUBST(CAPOPTAUX)
+AC_SUBST(CFLAGSAUX_STANDARD)
+AC_SUBST(CFLAGSAUX_DEBUG)
+AC_SUBST(CFLAGSAUX_PROFILE)
+AC_SUBST(LDFLAGSAUX)
+AC_SUBST(AUXEXTRALIBS)
+AC_SUBST(ARCH_AUTOCONF_HEADER)
+AC_SUBST(CFLAGS_VISIBILITY)
+
+CONFIG_FILES_LIST="$CONFIG_FILES_LIST $THEMAKEFILE"
+
+if test x"$THEMAKEFILE" != x"$MAKEFILE" && test x"$build" = x"$host"; then
+  CONFIG_FILES_LIST="$CONFIG_FILES_LIST"
+fi
+
+if test "x$AFS" = "x1"; then
+   AC_MSG_WARN([Using "native" font scaler which is now deprecated (rather than freetype),])
+   AC_MSG_WARN([Support for this will be removed in a future release])
+fi
+
+if test x"$OCR_DEVS_WARNING_LINE1" != x"" ; then
+    echo ""
+    AC_MSG_WARN([$OCR_DEVS_WARNING_LINE1])
+    if test x"$OCR_DEVS_WARNING_LINE2" != x"" ; then
+      AC_MSG_WARN([$OCR_DEVS_WARNING_LINE2])
+    fi
+    echo ""
+fi
+
+AC_CONFIG_FILES($CONFIG_FILES_LIST)
+
+AC_OUTPUT
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/devices/devs.mak
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/devices/devs.mak	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/devices/devs.mak	(revision 5)
@@ -0,0 +1,4678 @@
+# Copyright (C) 2001-2022 Artifex Software, Inc.
+# All Rights Reserved.
+#
+# This software is provided AS-IS with no warranty, either express or
+# implied.
+#
+# This software is distributed under license and may not be copied,
+# modified or distributed except as expressly authorized under the terms
+# of the license contained in the file LICENSE in this distribution.
+#
+# Refer to licensing information at http://www.artifex.com or contact
+# Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
+# CA 94945, U.S.A., +1(415)492-9861, for further information.
+#
+# makefile for Artifex's device drivers.
+
+# Define the name of this makefile.
+DEVS_MAK=$(DEVSRC)devs.mak $(TOP_MAKEFILES)
+
+DEVSRC=$(DEVSRCDIR)$(D)
+DEVVEC=$(DEVSRC)vector
+DEVVECSRC=$(DEVVEC)$(D)
+
+DEVI_=$(DEVGENDIR) $(II)$(GLSRCDIR) $(II)$(GLGENDIR) $(II)$(DEVSRCDIR)
+DEVF_=
+
+DEVCCFLAGS=$(I_)$(DEVI_)$(_I) $(I_)$(DEVVEC)$(_I) $(D_)OCR_VERSION=$(OCR_VERSION)$(_D) $(DEVF_)
+DEVCC=$(CC_) $(DEVCCFLAGS)
+XPSDEVCC=$(CC_) $(XPSPRINTCFLAGS) $(DEVCCFLAGS)
+
+DEVJCC=$(GLJCC)
+DEVCCSHARED=$(GLCCSHARED)
+
+# All device drivers depend on the following:
+GDEVH=$(gserrors_h) $(gx_h) $(gxdevice_h)
+GDEV=$(AK) $(ECHOGS_XE) $(GDEVH)
+
+DEVOBJ=$(DEVOBJDIR)$(D)
+DEVO_=$(O_)$(DEVOBJ)
+
+DEVGEN=$(DEVGENDIR)$(D)
+
+###### --------------------------- Overview -------------------------- ######
+
+# It is possible to build Ghostscript with an arbitrary collection of device
+# drivers, although some drivers are supported only on a subset of the
+# target platforms.
+
+# The catalog in this file, devs.mak, lists all the drivers that were
+# written by Artifex, or by people working closely with Artifex, and for
+# which Artifex is willing to take problem reports (although since
+# Ghostscript is provided with NO WARRANTY and NO SUPPORT, we can't promise
+# that we'll solve your problem).  Another file, contrib.mak, lists all the
+# drivers contributed by other people that are distributed by Artifex with
+# Ghostscript.  Note in particular that all drivers for color inkjets and
+# other non-PostScript-capable color printers are in contrib.mak.
+
+# If you haven't configured Ghostscript before, or if you want to add a
+# driver that that isn't included in the catalogs (for which you have the
+# source code), we suggest you skip to the "End of catalog" below and read
+# the documentation there before continuing.
+
+###### --------------------------- Catalog -------------------------- ######
+
+# MS-DOS displays (note: not usable with Desqview/X):
+# Other displays:
+#	display		For use on any platform that supports DLLs
+#   MS Windows:
+#	mswinpr2	Microsoft Windows 3.0, 3.1 DIB printer  [MS Windows only]
+#   Unix and VMS:
+#	x11		X Windows version 11, release >=4   [Unix and VMS only]
+#	x11alpha	X Windows masquerading as a device with alpha capability
+#	x11cmyk		X Windows masquerading as a 1-bit-per-plane CMYK device
+#	x11cmyk2 	X Windows as a 2-bit-per-plane CMYK device
+#	x11cmyk4	X Windows as a 4-bit-per-plane CMYK device
+#	x11cmyk8	X Windows as an 8-bit-per-plane CMYK device
+#	x11gray2	X Windows as a 2-bit gray-scale device
+#	x11gray4 	X Windows as a 4-bit gray-scale device
+#	x11mono		X Windows masquerading as a black-and-white device
+#	x11rg16x 	X Windows with G5/B5/R6 pixel layout for testing.
+#	x11rg32x	X Windows with G11/B10/R11 pixel layout for testing.
+# Printers:
+# +	atx23		Practical Automation ATX-23 label printer
+# +	atx24		Practical Automation ATX-24 label printer
+# +	atx38		Practical Automation ATX-38 label printer
+# +	itk24i		Practical Automation ITK-24i thermal kiosk printer
+# +	itk38		Practical Automation ITK-38 thermal kiosk printer
+# +	deskjet		H-P DeskJet and DeskJet Plus
+#	djet500		H-P DeskJet 500; use -r600 for DJ 600 series
+# +	fs600		Kyocera FS-600 (600 dpi)
+# +	laserjet	H-P LaserJet
+# +	ljet2p		H-P LaserJet IId/IIp/III* with TIFF compression
+# +	ljet3		H-P LaserJet III* with Delta Row compression
+# +	ljet3d		H-P LaserJet IIID with duplex capability
+# +	ljet4		H-P LaserJet 4 (defaults to 600 dpi)
+# +	ljet4d		H-P LaserJet 4 (defaults to 600 dpi) with duplex
+# +	ljetplus	H-P LaserJet Plus
+#	lj5mono		H-P LaserJet 5 & 6 family (PCL XL), bitmap:
+#			see below for restrictions & advice
+#	lj5gray		H-P LaserJet 5 & 6 family, gray-scale bitmap;
+#			see below for restrictions & advice
+# *	lp2563		H-P 2563B line printer
+# *	oce9050		OCE 9050 printer
+#	(pxlmono)	H-P black-and-white PCL XL printers (LaserJet 5 and 6 family)
+#	(pxlcolor)	H-P color PCL XL printers (e.g. Color LaserJet 4500)
+# Fax file format:
+#   ****** NOTE: all of these drivers normally adjust the page size to match
+#   ****** one of the three CCITT standard sizes (U.S. letter with A4 width,
+#   ****** A4, or B4).  To suppress this, use -dAdjustWidth=0.
+#	faxg3		Group 3 fax, with EOLs but no header or EOD
+#	faxg32d		Group 3 2-D fax, with EOLs but no header or EOD
+#	faxg4		Group 4 fax, with EOLs but no header or EOD
+#	tiffcrle	TIFF "CCITT RLE 1-dim" (= Group 3 fax with no EOLs)
+#	tiffg3		TIFF Group 3 fax (with EOLs)
+#	tiffg32d	TIFF Group 3 2-D fax
+#	tiffg4		TIFF Group 4 fax
+# High-level file formats:
+#	pdfwrite	PDF output (like Adobe Acrobat Distiller)
+#	txtwrite	ASCII or Unicode text output
+#	docxwrite	Docx output
+#	pxlmono 	Black-and-white PCL XL
+#	pxlcolor	Color PCL XL
+# Other raster file formats and devices:
+#	bit		Plain bits, monochrome
+#	bitrgb		Plain bits, RGB
+#	bitcmyk		Plain bits, CMYK
+#	bmpmono		Monochrome MS Windows .BMP file format
+#	bmpgray		8-bit gray .BMP file format
+#	bmpsep1		Separated 1-bit CMYK .BMP file format, primarily for testing
+#	bmpsep8		Separated 8-bit CMYK .BMP file format, primarily for testing
+#	bmp16		4-bit (EGA/VGA) .BMP file format
+#	bmp256		8-bit (256-color) .BMP file format
+#	bmp16m		24-bit .BMP file format
+#	bmp32b		32-bit pseudo-.BMP file format
+#	chameleon	Plain bits, rgb/mono/cmyk runtime configurable.
+#	jpeg		JPEG format, RGB output
+#	jpeggray	JPEG format, gray output
+#	jpegcmyk	JPEG format, cmyk output
+#	miff24		ImageMagick MIFF format, 24-bit direct color, RLE compressed
+#	pamcmyk4 	Portable Arbitrary Map file format 4-bit CMYK
+#	pamcmyk32	Portable Arbitrary Map file format 32-bit CMYK
+#	pcxmono		PCX file format, monochrome (1-bit black and white)
+#	pcxgray		PCX file format, 8-bit gray scale
+#	pcx16		PCX file format, 4-bit planar (EGA/VGA) color
+#	pcx256		PCX file format, 8-bit chunky color
+#	pcx24b		PCX file format, 24-bit color (3 8-bit planes)
+#	pcxcmyk		PCX file format, 4-bit chunky CMYK color
+#	pbm		Portable Bitmap (plain format)
+#	pbmraw		Portable Bitmap (raw format)
+#	pgm		Portable Graymap (plain format)
+#	pgmraw		Portable Graymap (raw format)
+#	pgnm		Portable Graymap (plain format), optimizing to PBM if possible
+#	pgnmraw		Portable Graymap (raw format), optimizing to PBM if possible
+#	pnm		Portable Pixmap (plain format) (RGB), optimizing to PGM or PBM
+#			if possible
+#	pnmraw		Portable Pixmap (raw format) (RGB), optimizing to PGM or PBM
+#			if possible
+#       pnmcmyk         PAM 32-bit CMYK if colors, otherwise pgmraw.
+#	ppm		Portable Pixmap (plain format) (RGB)
+#	ppmraw		Portable Pixmap (raw format) (RGB)
+#	pkm		Portable inKmap (plain format) (4-bit CMYK => RGB)
+#	pkmraw		Portable inKmap (raw format) (4-bit CMYK => RGB)
+#	pksm		Portable Separated map (plain format) (4-bit CMYK => 4 pages)
+#	pksmraw		Portable Separated map (raw format) (4-bit CMYK => 4 pages)
+# *	plan9bm		Plan 9 bitmap format
+#	plan		PLANar device (24 bit RGB)
+#	planm		PLANar device (1 bit Mono)
+#	plang		PLANar device (8 bit Gray)
+#	planc		PLANar device (32 bit CMYK)
+#	plank		PLANar device (4 bit CMYK)
+#	planr		PLANar device (3 bit RGB)
+#	plib		PLanar Interleaved Band buffer device (24 bit RGB)
+#	plibm		PLanar Interleaved Band buffer device (1 bit Mono)
+#	plibg		PLanar Interleaved Band buffer device (8 bit Gray)
+#	plibc		PLanar Interleaved Band buffer device (32 bit CMYK)
+#	plibk		PLanar Interleaved Band buffer device (4 bit CMYK)
+#	pngmono		Monochrome Portable Network Graphics (PNG)
+#	pngmonod	Monochrome (error diffused) Portable Network Graphics (PNG)
+#	pnggray		8-bit gray Portable Network Graphics (PNG)
+#	png16		4-bit color Portable Network Graphics (PNG)
+#	png256		8-bit color Portable Network Graphics (PNG)
+#	png16m		24-bit color Portable Network Graphics (PNG)
+#	pngalpha	32-bit RGBA color Portable Network Graphics (PNG) (aa)
+#	png16malpha	32-bit RGBA color Portable Network Graphics (PNG)
+#	tiffgray	TIFF 8-bit gray, no compression
+#	tiff12nc	TIFF 12-bit RGB, no compression
+#	tiff24nc 	TIFF 24-bit RGB, no compression (NeXT standard format)
+#	tiff48nc	TIFF 48-bit RGB, no compression
+#	tiff32nc	TIFF 32-bit CMYK
+#	tiff64nc 	TIFF 64-bit CMYK
+#	tiffsep		Creates tiffgray for each colorant plus a CMYK composite
+#	tiffsep1	Creates halftoned tiff 1-bit per pixel for each colorant
+#	tifflzw 	TIFF LZW (tag = 5) (monochrome)
+#	tiffpack	TIFF PackBits (tag = 32773) (monochrome)
+#	tiffscaled	TIFF (monochrome output, integer downsampled and dithered from grayscale rendering)
+#	tiffscaled8	TIFF (greyscale output, integer downsampled and dithered from grayscale rendering)
+#	tiffscaled24	TIFF (rgb output, integer downsampled and dithered from rgb rendering)
+#	tiffscaled32	TIFF (cmyk output, integer downsampled and dithered from cmyk rendering)
+#	tiffscaled4	TIFF (cmyk output, integer downsampled and dithered from cmyk rendering)
+
+# Note that MS Windows-specific drivers are defined in pcwin.mak, not here,
+# because they have special compilation requirements that require defining
+# parameter macros not relevant to other platforms; the OS/2-specific
+# drivers are there too, because they share some definitions.
+
+# User-contributed drivers marked with * require hardware or software
+# that is not available to Artifex Software Inc.  Please contact the
+# original contributors, not Artifex Software Inc, if you have questions.
+# Contact information appears in the driver entry below.
+#
+# Drivers marked with a + are maintained by Artifex Software Inc with
+# the assistance of users, since Artifex Software Inc doesn't have access to
+# the hardware for these either.
+
+# If you add drivers, it would be nice if you kept each list
+# in alphabetical order.
+
+###### ----------------------- End of catalog ----------------------- ######
+
+# As noted in gs.mak, DEVICE_DEVS and DEVICE_DEVS1..15 select the devices
+# that should be included in a given configuration.  By convention, these
+# are used as follows.  Each of these must be limited to about 6 devices
+# so as not to overflow the 120 character limit on MS-DOS command lines.
+#	DEVICE_DEVS - the default device, and any display devices.
+#	DEVICE_DEVS1 - additional display devices if needed.
+#	DEVICE_DEVS2 - dot matrix printers.
+#	DEVICE_DEVS3 - H-P monochrome printers.
+#	DEVICE_DEVS4 - H-P color printers.
+#	DEVICE_DEVS5 - additional inkjet printers if needed.
+#	DEVICE_DEVS6 - other ink-jet and laser printers.
+#	DEVICE_DEVS7 - fax file formats.
+#	DEVICE_DEVS8 - PCX file formats.
+#	DEVICE_DEVS9 - PBM/PGM/PPM file formats.
+#	DEVICE_DEVS10 - black-and-white TIFF file formats.
+#	DEVICE_DEVS11 - BMP and color TIFF file formats.
+#	DEVICE_DEVS12 - PostScript image and 'bit' file formats.
+#	DEVICE_DEVS13 - PNG file formats.
+#	DEVICE_DEVS14 - CGM, JPEG, and MIFF file formats.
+#	DEVICE_DEVS15 - high-level (PostScript and PDF) file formats.
+#	DEVICE_DEVS16 - additional high-level and utility drivers
+#	DEVICE_DEVS17 - (overflow for PC platforms)
+#	DEVICE_DEVS18 - (ditto)
+#	DEVICE_DEVS19 - (ditto)
+#	DEVICE_DEVS20 - (ditto)
+# Feel free to disregard this convention if it gets in your way.
+
+# If you want to add a new device driver, the examples below should be
+# enough of a guide to the correct form for the makefile rules.
+# Note that all drivers other than displays must include page.dev in their
+# dependencies and use $(SETPDEV) rather than $(SETDEV) in their rule bodies.
+
+# "Printer" drivers depend on the following:
+PDEVH=$(AK) $(gdevprn_h)
+
+gxfcopy_h=$(DEVSRC)gxfcopy.h
+
+# Define the header files for device drivers.  Every header file used by
+# more than one device driver family must be listed here.
+gdev8bcm_h=$(DEVSRC)gdev8bcm.h
+gdevcbjc_h=$(DEVSRC)gdevcbjc.h $(stream_h)
+
+gdevpcl_h=$(DEVSRC)gdevpcl.h
+gdevpsu_h=$(DEVVECSRC)gdevpsu.h
+# Out of order
+gdevdljm_h=$(DEVSRC)gdevdljm.h
+
+GDEVLDFJB2CC=$(CC_) $(I_)$(DEVI_) $(II)$(LDF_JB2I_)$(_I) $(JB2CF_) $(GLF_)
+GDEVLWFJPXCC=$(CC_) $(I_)$(DEVI_) $(II)$(LWF_JPXI_)$(_I) $(JPXCF_) $(GLF_)
+GDEVLWFJB2JPXCC=$(CC_) $(I_)$(DEVI_)  $(II)$(LDF_JB2I_) $(II)$(LWF_JPXI_)$(_I) $(JB2CF_) $(JPXCF_) $(GLF_)
+
+###### ----------------------- Device support ----------------------- ######
+
+# Implement dynamic color management for 8-bit mapped color displays.
+$(DEVOBJ)gdev8bcm.$(OBJ) : $(DEVSRC)gdev8bcm.c $(AK)\
+ $(gx_h) $(gxdevice_h) $(gdev8bcm_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdev8bcm.$(OBJ) $(C_) $(DEVSRC)gdev8bcm.c
+
+# Generate Canon BJC command sequences.
+$(DEVOBJ)gdevcbjc.$(OBJ) : $(DEVSRC)gdevcbjc.c $(AK)\
+ $(std_h) $(stream_h) $(gdevcbjc_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevcbjc.$(OBJ) $(C_) $(DEVSRC)gdevcbjc.c
+
+# Support for writing PostScript (high- or low-level).
+$(DEVOBJ)gdevpsu.$(OBJ) : $(DEVVECSRC)gdevpsu.c $(GX) $(GDEV) $(math__h) $(time__h)\
+ $(stat__h) $(unistd__h)\
+ $(gdevpsu_h) $(gscdefs_h) $(gxdevice_h)\
+ $(spprint_h) $(stream_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpsu.$(OBJ) $(C_) $(DEVVECSRC)gdevpsu.c
+
+### ------------------ Display device for DLL platforms ----------------- ###
+
+display_=$(DEVOBJ)gdevdsp.$(OBJ) $(DEVOBJ)gdevpccm.$(OBJ) $(GLOBJ)gdevdevn.$(OBJ) \
+	 $(GLOBJ)gsequivc.$(OBJ) $(DEVOBJ)gdevdcrd.$(OBJ)
+$(DD)display.dev : $(display_) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV) $(DD)display $(display_)
+
+$(DEVOBJ)gdevdsp.$(OBJ) : $(DEVSRC)gdevdsp.c $(string__h) $(gdevkrnlsclass_h)\
+ $(gp_h) $(gpcheck_h) $(gdevpccm_h) $(gsparam_h) $(gsdevice_h)\
+ $(GDEVH) $(gxdevmem_h) $(gdevdevn_h) $(gsequivc_h) $(gdevdsp_h) $(gdevdsp2_h) \
+ $(gsicc_manage_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevdsp.$(OBJ) $(C_) $(DEVSRC)gdevdsp.c
+
+### -------------------------- The X11 device -------------------------- ###
+
+# Please note that Artifex Software Inc does not support Ghostview.
+# For more information about Ghostview, please contact Tim Theisen
+# (ghostview@cs.wisc.edu).
+
+gdevxcmp_h=$(DEVSRC)gdevxcmp.h
+gdevx_h=$(DEVSRC)gdevx.h
+
+# See the main makefile for the definition of XLIBDIRS and XLIBS.
+x11_=$(DEVOBJ)gdevx.$(OBJ) $(DEVOBJ)gdevxcmp.$(OBJ) $(DEVOBJ)gdevxini.$(OBJ)\
+ $(DEVOBJ)gdevxres.$(OBJ) $(DEVOBJ)gsparamx.$(OBJ)
+$(DD)x11_.dev : $(x11_) $(GLD)bboxutil.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETMOD) $(DD)x11_ $(x11_)
+	$(ADDMOD) $(DD)x11_ -link $(XLIBDIRS)
+	$(ADDMOD) $(DD)x11_ -lib $(XLIBS)
+	$(ADDMOD) $(DD)x11_ -include $(GLD)bboxutil
+
+$(DD)x11.dev : $(DD)x11_.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)x11 -include $(DD)x11_
+
+# See the main makefile for the definition of XINCLUDE.
+GDEVX=$(GDEV) $(x__h) $(gdevx_h) $(TOP_MAKEFILES)
+$(DEVOBJ)gdevx.$(OBJ) : $(DEVSRC)gdevx.c $(GDEVX) $(math__h) $(memory__h)\
+ $(gscoord_h) $(gsdevice_h) $(gsiparm2_h) $(gsmatrix_h) $(gsparam_h)\
+ $(gxdevmem_h) $(gxgetbit_h) $(gxiparam_h) $(gxpath_h) $(gdevkrnlsclass_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCCSHARED) $(XINCLUDE) $(DEVO_)gdevx.$(OBJ) $(C_) $(DEVSRC)gdevx.c
+
+$(DEVOBJ)gdevxcmp.$(OBJ) : $(DEVSRC)gdevxcmp.c $(GDEVX) $(math__h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCCSHARED) $(XINCLUDE) $(DEVO_)gdevxcmp.$(OBJ) $(C_) $(DEVSRC)gdevxcmp.c
+
+$(DEVOBJ)gdevxini.$(OBJ) : $(DEVSRC)gdevxini.c $(GDEVX) $(memory__h)\
+ $(gserrors_h) $(gsparamx_h) $(gxdevmem_h) $(gdevbbox_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCCSHARED) $(XINCLUDE) $(DEVO_)gdevxini.$(OBJ) $(C_) $(DEVSRC)gdevxini.c
+
+# We have to compile gdevxres without warnings, because there is a
+# const/non-const cast required by the X headers that we can't work around.
+$(DEVOBJ)gdevxres.$(OBJ) : $(DEVSRC)gdevxres.c $(std_h) $(x__h)\
+ $(gsmemory_h) $(gstypes_h) $(gxdevice_h) $(gdevx_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(CC_NO_WARN) $(GLCCFLAGS) $(XINCLUDE) $(DEVO_)gdevxres.$(OBJ) $(C_) $(DEVSRC)gdevxres.c
+
+# Alternate X11-based devices to help debug other drivers.
+# x11alpha pretends to have 4 bits of alpha channel.
+# x11cmyk pretends to be a CMYK device with 1 bit each of C,M,Y,K.
+# x11cmyk2 pretends to be a CMYK device with 2 bits each of C,M,Y,K.
+# x11cmyk4 pretends to be a CMYK device with 4 bits each of C,M,Y,K.
+# x11cmyk8 pretends to be a CMYK device with 8 bits each of C,M,Y,K.
+# x11gray2 pretends to be a 2-bit gray-scale device.
+# x11gray4 pretends to be a 4-bit gray-scale device.
+# x11mono pretends to be a black-and-white device.
+# x11rg16x pretends to be a G5/B5/R6 color device.
+# x11rg16x pretends to be a G11/B10/R11 color device.
+x11alt_=$(DEVOBJ)gdevxalt.$(OBJ)
+$(DD)x11alt_.dev : $(x11alt_) $(DD)x11_.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETMOD) $(DD)x11alt_ $(x11alt_)
+	$(ADDMOD) $(DD)x11alt_ -include $(DD)x11_
+
+$(DD)x11alpha.dev : $(DD)x11alt_.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)x11alpha -include $(DD)x11alt_
+
+$(DD)x11cmyk.dev : $(DD)x11alt_.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)x11cmyk -include $(DD)x11alt_
+
+$(DD)x11cmyk2.dev : $(DD)x11alt_.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)x11cmyk2 -include $(DD)x11alt_
+
+$(DD)x11cmyk4.dev : $(DD)x11alt_.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)x11cmyk4 -include $(DD)x11alt_
+
+$(DD)x11cmyk8.dev : $(DD)x11alt_.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)x11cmyk8 -include $(DD)x11alt_
+
+$(DD)x11gray2.dev : $(DD)x11alt_.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)x11gray2 -include $(DD)x11alt_
+
+$(DD)x11gray4.dev : $(DD)x11alt_.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)x11gray4 -include $(DD)x11alt_
+
+$(DD)x11mono.dev : $(DD)x11alt_.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)x11mono -include $(DD)x11alt_
+
+$(DD)x11rg16x.dev : $(DD)x11alt_.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)x11rg16x -include $(DD)x11alt_
+
+$(DD)x11rg32x.dev : $(DD)x11alt_.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)x11rg32x -include $(DD)x11alt_
+
+$(DEVOBJ)gdevxalt.$(OBJ) : $(DEVSRC)gdevxalt.c $(GDEVX) $(math__h) $(memory__h)\
+ $(gsdevice_h) $(gsparam_h) $(gsstruct_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCCSHARED) $(XINCLUDE) $(DEVO_)gdevxalt.$(OBJ) $(C_) $(DEVSRC)gdevxalt.c
+
+### Shared library object supporting X11.
+### NON PORTABLE, ONLY UNIX WITH GCC SUPPORT
+
+$(DEVOBJ)X11.so : $(x11alt_) $(x11_) $(DEVS_MAK) $(MAKEDIRS)
+	$(CCLD) $(LDFLAGS) -shared -o $(DEVOBJ)X11.so $(x11alt_) $(x11_) -L/usr/X11R6/lib -lXt -lSM -lICE -lXext -lX11 $(XLIBDIRS)
+
+###### --------------- Memory-buffered printer devices --------------- ######
+
+### ---------------- Practical Automation label printers ---------------- ###
+
+atx_=$(DEVOBJ)gdevatx.$(OBJ)
+
+$(DD)atx23.dev : $(atx_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)atx23 $(atx_)
+
+$(DD)atx24.dev : $(atx_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)atx24 $(atx_)
+
+$(DD)atx38.dev : $(atx_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)atx38 $(atx_)
+
+$(DD)itk24i.dev : $(atx_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)itk24i $(atx_)
+
+$(DD)itk38.dev : $(atx_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)itk38 $(atx_)
+
+$(DEVOBJ)gdevatx.$(OBJ) : $(DEVSRC)gdevatx.c $(PDEVH) $(math__h) $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevatx.$(OBJ) $(C_) $(DEVSRC)gdevatx.c
+
+### ----------- The H-P DeskJet and LaserJet printer devices ----------- ###
+
+### These are essentially the same device.
+### NOTE: printing at full resolution (300 DPI) requires a printer
+###   with at least 1.5 Mb of memory.  150 DPI only requires .5 Mb.
+### Note that the lj4dith driver is included with the H-P color printer
+###   drivers below.
+### For questions about the fs600 device, please contact                  ###
+### Peter Schildmann (peter.schildmann@etechnik.uni-rostock.de).          ###
+
+HPPCL=$(DEVOBJ)gdevpcl.$(OBJ)
+HPDLJM=$(DEVOBJ)gdevdljm.$(OBJ) $(HPPCL)
+HPMONO=$(DEVOBJ)gdevdjet.$(OBJ) $(HPDLJM)
+
+$(DEVOBJ)gdevpcl.$(OBJ) : $(DEVSRC)gdevpcl.c $(PDEVH) $(math__h) $(gdevpcl_h)\
+ $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpcl.$(OBJ) $(C_) $(DEVSRC)gdevpcl.c
+
+$(DEVOBJ)gdevdljm.$(OBJ) : $(DEVSRC)gdevdljm.c $(PDEVH) $(gdevdljm_h) $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevdljm.$(OBJ) $(C_) $(DEVSRC)gdevdljm.c
+
+$(DEVOBJ)gdevdjet.$(OBJ) : $(DEVSRC)gdevdjet.c $(PDEVH) $(gdevdljm_h) $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevdjet.$(OBJ) $(C_) $(DEVSRC)gdevdjet.c
+
+$(DD)deskjet.dev : $(HPMONO) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)deskjet $(HPMONO)
+
+$(DD)djet500.dev : $(HPMONO) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)djet500 $(HPMONO)
+
+$(DD)fs600.dev : $(HPMONO) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)fs600 $(HPMONO)
+
+$(DD)laserjet.dev : $(HPMONO) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)laserjet $(HPMONO)
+
+$(DD)ljetplus.dev : $(HPMONO) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)ljetplus $(HPMONO)
+
+### Selecting ljet2p provides TIFF (mode 2) compression on LaserJet III,
+### IIIp, IIId, IIIsi, IId, and IIp.
+
+$(DD)ljet2p.dev : $(HPMONO) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)ljet2p $(HPMONO)
+
+### Selecting ljet3 provides Delta Row (mode 3) compression on LaserJet III,
+### IIIp, IIId, IIIsi.
+
+$(DD)ljet3.dev : $(HPMONO) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)ljet3 $(HPMONO)
+
+### Selecting ljet3d also provides duplex printing capability.
+
+$(DD)ljet3d.dev : $(HPMONO) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)ljet3d $(HPMONO)
+
+### Selecting ljet4 or ljet4d also provides Delta Row compression on
+### LaserJet IV series.
+
+$(DD)ljet4.dev : $(HPMONO) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)ljet4 $(HPMONO)
+
+$(DD)ljet4d.dev : $(HPMONO) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)ljet4d $(HPMONO)
+
+$(DD)lp2563.dev : $(HPMONO) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)lp2563 $(HPMONO)
+
+$(DD)oce9050.dev : $(HPMONO) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)oce9050 $(HPMONO)
+
+### ------------------ The H-P LaserJet 5 and 6 devices ----------------- ###
+
+### These drivers use H-P's new PCL XL printer language, like H-P's
+### LaserJet 5 Enhanced driver for MS Windows.  We don't recommend using
+### them:
+###	- If you have a LJ 5L or 5P, which isn't a "real" LaserJet 5,
+###	use the ljet4 driver instead.  (The lj5 drivers won't work.)
+###	- If you have any other model of LJ 5 or 6, use the pxlmono
+###	driver, which often produces much more compact output.
+
+
+gdevpxut_h=$(DEVSRC)gdevpxut.h
+
+
+$(DEVOBJ)gdevpxut.$(OBJ) : $(DEVSRC)gdevpxut.c $(math__h) $(string__h)\
+ $(gx_h) $(gxdevcli_h) $(stream_h)\
+ $(gdevpxat_h) $(gdevpxen_h) $(gdevpxop_h) $(gdevpxut_h) $(GDEV) \
+  $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpxut.$(OBJ) $(C_) $(DEVSRC)gdevpxut.c
+
+ljet5_=$(DEVOBJ)gdevlj56.$(OBJ) $(DEVOBJ)gdevpxut.$(OBJ) $(HPPCL)
+$(DD)lj5mono.dev : $(ljet5_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV) $(DD)lj5mono $(ljet5_)
+
+$(DD)lj5gray.dev : $(ljet5_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV) $(DD)lj5gray $(ljet5_)
+
+$(DEVOBJ)gdevlj56.$(OBJ) : $(DEVSRC)gdevlj56.c $(PDEVH) $(gdevpcl_h)\
+ $(gdevpxat_h) $(gdevpxen_h) $(gdevpxop_h) $(gdevpxut_h) $(stream_h) \
+  $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevlj56.$(OBJ) $(C_) $(DEVSRC)gdevlj56.c
+
+### -------------------- The ijs client ----------------- ###
+
+ijs_=$(DEVOBJ)gdevijs.$(OBJ)
+
+#$(IJSOBJ)ijs.$(OBJ) $(IJSOBJ)ijs_client.$(OBJ) \
+# $(IJSOBJ)ijs_exec_$(IJSEXECTYPE).$(OBJ)
+
+$(DD)ijs.dev : $(ijs_) $(GLD)page.dev $(DD)ijslib.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV) $(DD)ijs $(ijs_)
+	$(ADDMOD) $(DD)ijs -include $(GLD)ijslib
+
+$(DEVOBJ)gdevijs.$(OBJ) : $(DEVSRC)gdevijs.c $(PDEVH) $(unistd__h) $(gp_h)\
+ $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(CC_) $(I_)$(DEVI_) $(II)$(IJSI_)$(_I) $(II)$(IJSI_)$(D)..$(_I) \
+            $(GLF_) $(DEVO_)gdevijs.$(OBJ) $(C_) $(DEVSRC)gdevijs.c
+
+# Please see ijs.mak for the Makefile fragment which builds the IJS
+# library.
+
+
+### -------------------------- The rinkj device ------------------------ ###
+
+RINKJ_SRCDIR=$(DEVSRC)rinkj
+RINKJ_SRC=$(RINKJ_SRCDIR)$(D)
+RINKJ_OBJ=$(DEVOBJ)
+RINKJ_O_=$(O_)$(RINKJ_OBJ)
+
+RINKJ_INCL=$(I_)$(RINKJ_SRCDIR)$(_I) $(I_)$(GLSRC)$(_I) $(I_)$(DEVOBJ)$(_I)
+RINKJ_CC=$(CC_) $(RINKJ_INCL)
+
+rinkj_byte_stream_h=$(RINKJ_SRC)rinkj-byte-stream.h
+rinkj_core=$(RINKJ_OBJ)evenbetter-rll.$(OBJ) \
+ $(RINKJ_OBJ)rinkj-byte-stream.$(OBJ) $(RINKJ_OBJ)rinkj-device.$(OBJ) \
+ $(RINKJ_OBJ)rinkj-config.$(OBJ) $(RINKJ_OBJ)rinkj-dither.$(OBJ) \
+ $(RINKJ_OBJ)rinkj-epson870.$(OBJ) $(RINKJ_OBJ)rinkj-screen-eb.$(OBJ)
+
+$(rinkj_byte_stream_h):$(gp_h)
+
+$(RINKJ_OBJ)evenbetter-rll.$(OBJ) : $(RINKJ_SRC)evenbetter-rll.c $(DEVS_MAK) $(MAKEDIRS)
+	$(RINKJ_CC) $(RINKJ_O_)evenbetter-rll.$(OBJ) $(C_) $(RINKJ_SRC)evenbetter-rll.c
+
+$(RINKJ_OBJ)rinkj-byte-stream.$(OBJ) : $(RINKJ_SRC)rinkj-byte-stream.c \
+ $(rinkj_byte_stream_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(RINKJ_CC) $(RINKJ_O_)rinkj-byte-stream.$(OBJ) $(C_) $(RINKJ_SRC)rinkj-byte-stream.c
+
+$(RINKJ_OBJ)rinkj-device.$(OBJ) : $(RINKJ_SRC)rinkj-device.c $(DEVS_MAK) $(MAKEDIRS)
+	$(RINKJ_CC) $(RINKJ_O_)rinkj-device.$(OBJ) $(C_) $(RINKJ_SRC)rinkj-device.c
+
+$(RINKJ_OBJ)rinkj-config.$(OBJ) : $(RINKJ_SRC)rinkj-config.c $(DEVS_MAK) $(MAKEDIRS)
+	$(RINKJ_CC) $(RINKJ_O_)rinkj-config.$(OBJ) $(C_) $(RINKJ_SRC)rinkj-config.c
+
+$(RINKJ_OBJ)rinkj-dither.$(OBJ) : $(RINKJ_SRC)rinkj-dither.c $(DEVS_MAK) $(MAKEDIRS)
+	$(RINKJ_CC) $(RINKJ_O_)rinkj-dither.$(OBJ) $(C_) $(RINKJ_SRC)rinkj-dither.c
+
+$(RINKJ_OBJ)rinkj-epson870.$(OBJ) : $(RINKJ_SRC)rinkj-epson870.c $(rinkj_byte_stream_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(RINKJ_CC) $(RINKJ_O_)rinkj-epson870.$(OBJ) $(C_) $(RINKJ_SRC)rinkj-epson870.c
+
+$(RINKJ_OBJ)rinkj-screen-eb.$(OBJ) : $(RINKJ_SRC)rinkj-screen-eb.c $(DEVS_MAK) $(MAKEDIRS) $(gserrors_h)
+	$(RINKJ_CC) $(RINKJ_O_)rinkj-screen-eb.$(OBJ) $(C_) $(RINKJ_SRC)rinkj-screen-eb.c
+
+rinkj_=$(DEVOBJ)gdevrinkj.$(OBJ) $(rinkj_core)
+
+$(DD)rinkj.dev : $(rinkj_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV) $(DD)rinkj $(rinkj_)
+
+$(DEVOBJ)gdevrinkj.$(OBJ) : $(DEVSRC)gdevrinkj.c $(PDEVH) $(math__h)\
+ $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gsparam_h) $(gxlum_h)\
+ $(gxdcconv_h) $(gscms_h) $(gsicc_cache_h) $(gsicc_manage_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevrinkj.$(OBJ) $(C_) $(DEVSRC)gdevrinkj.c
+
+
+###### ------------------- High-level file formats ------------------- ######
+
+# Support for PostScript and PDF
+
+gdevpsdf_h=$(DEVVECSRC)gdevpsdf.h
+gdevpsds_h=$(DEVVECSRC)gdevpsds.h
+
+psdf_1=$(DEVOBJ)gdevpsdi.$(OBJ) $(DEVOBJ)gdevpsdp.$(OBJ)
+psdf_2=$(DEVOBJ)gdevpsds.$(OBJ) $(DEVOBJ)gdevpsdu.$(OBJ)
+psdf_3=$(DEVOBJ)scfparam.$(OBJ) $(DEVOBJ)sdcparam.$(OBJ) $(DEVOBJ)sdeparam.$(OBJ)
+psdf_4=$(DEVOBJ)spprint.$(OBJ) $(DEVOBJ)spsdf.$(OBJ) $(DEVOBJ)sstring.$(OBJ)
+psdf_5=$(DEVOBJ)gsparamx.$(OBJ)
+psdf_=$(psdf_1) $(psdf_2) $(psdf_3) $(psdf_4) $(psdf_5)
+psdf_inc1=$(GLD)vector.dev $(GLD)pngp.dev $(GLD)seexec.dev
+psdf_inc2=$(GLD)sdcte.dev $(GLD)slzwe.dev $(GLD)szlibe.dev
+psdf_inc=$(psdf_inc1) $(psdf_inc2)
+$(DD)psdf.dev : $(ECHOGS_XE) $(psdf_) $(psdf_inc) $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETMOD) $(DD)psdf $(psdf_1)
+	$(ADDMOD) $(DD)psdf -obj $(psdf_2)
+	$(ADDMOD) $(DD)psdf -obj $(psdf_3)
+	$(ADDMOD) $(DD)psdf -obj $(psdf_4)
+	$(ADDMOD) $(DD)psdf -obj $(psdf_5)
+	$(ADDMOD) $(DD)psdf -include $(psdf_inc1)
+	$(ADDMOD) $(DD)psdf -include $(psdf_inc2)
+
+$(DEVOBJ)gdevpsdi.$(OBJ) : $(DEVVECSRC)gdevpsdi.c $(GXERR)\
+ $(jpeglib__h) $(math__h) $(stdio__h)\
+ $(gscspace_h)\
+ $(scfx_h) $(slzwx_h) $(spngpx_h)\
+ $(strimpl_h) $(szlibx_h) $(sisparam_h)\
+ $(gdevpsdf_h) $(gdevpsds_h) $(gxdevmem_h) $(gxcspace_h) $(gxparamx_h)\
+ $(gsicc_manage_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(GDEVLWFJB2JPXCC) $(DEVO_)gdevpsdi.$(OBJ) $(C_) $(DEVVECSRC)gdevpsdi.c
+
+$(DEVOBJ)gdevpsdp.$(OBJ) : $(DEVVECSRC)gdevpsdp.c $(GDEVH)\
+ $(string__h) $(jpeglib__h)\
+ $(scfx_h) $(sdct_h) $(slzwx_h) $(srlx_h) $(strimpl_h) $(szlibx_h)\
+ $(gsparamx_h) $(gsutil_h) $(gdevpsdf_h)\
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(GDEVLWFJB2JPXCC) $(DEVO_)gdevpsdp.$(OBJ) $(C_) $(DEVVECSRC)gdevpsdp.c
+
+$(DEVOBJ)gdevpsds.$(OBJ) : $(DEVVECSRC)gdevpsds.c $(GX) $(memory__h)\
+ $(gserrors_h) $(gxdcconv_h) $(gdevpsds_h) $(gxbitmap_h)\
+ $(gxcspace_h) $(gsdcolor_h) $(gscspace_h) $(gxdevcli_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpsds.$(OBJ) $(C_) $(DEVVECSRC)gdevpsds.c
+
+$(DEVOBJ)gdevpsdu.$(OBJ) : $(DEVVECSRC)gdevpsdu.c $(GXERR)\
+ $(jpeglib__h) $(memory__h) $(stdio__h)\
+ $(sa85x_h) $(scfx_h) $(sdct_h) $(sjpeg_h) $(strimpl_h)\
+ $(gdevpsdf_h) $(spprint_h) $(gsovrc_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVJCC) $(DEVO_)gdevpsdu.$(OBJ) $(C_) $(DEVVECSRC)gdevpsdu.c
+
+# Plain text writer
+
+txtwrite_=$(DEVOBJ)gdevtxtw.$(OBJ) $(DEVOBJ)doc_common.$(OBJ)
+
+$(DD)txtwrite.dev : $(ECHOGS_XE) $(txtwrite_) $(GDEV)\
+ $(gsagl_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)txtwrite $(txtwrite_)
+
+$(DEVOBJ)gdevtxtw.$(OBJ) : $(DEVVECSRC)gdevtxtw.c $(GDEV) $(gdevkrnlsclass_h) \
+  $(memory__h) $(string__h) $(gp_h) $(gsparam_h) $(gsutil_h) \
+  $(gsdevice_h) $(gxfont_h) $(gxfont0_h) $(gstext_h) $(gxfcid_h)\
+  $(gxgstate_h) $(gxpath_h) $(gsagl_h) $(DEVS_MAK) $(DEVVECSRC)doc_common.h $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevtxtw.$(OBJ) $(C_) $(DEVVECSRC)gdevtxtw.c
+
+# Docx writer
+
+docxwrite_=$(DEVOBJ)gdevdocxw.$(OBJ) $(DEVOBJ)doc_common.$(OBJ)
+
+$(DD)docxwrite.dev : $(ECHOGS_XE) $(docxwrite_) $(GLD)gsagl.dev $(GDEV)\
+ $(gsagl_h) $(DEVS_MAK) $(EXTRACT_OBJS) $(MAKEDIRS)
+	$(SETDEV2) $(DD)docxwrite $(docxwrite_) $(EXTRACT_OBJS)
+	$(ADDMOD) $(DD)docxwrite -include $(GLD)gsagl
+
+$(DEVOBJ)gdevdocxw.$(OBJ) : $(DEVVECSRC)gdevdocxw.c $(GDEV) $(gdevkrnlsclass_h) \
+  $(memory__h) $(string__h) $(gp_h) $(gsparam_h) $(gsutil_h) \
+  $(gsdevice_h) $(gxfont_h) $(gxfont0_h) $(gstext_h) $(gxfcid_h)\
+  $(gxgstate_h) $(gxpath_h) $(gsagl_h) $(DEVS_MAK) \
+  $(DEVVECSRC)doc_common.h  $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevdocxw.$(OBJ) $(C_) $(DEVVECSRC)gdevdocxw.c
+
+# Shared code used by txtwrite and docxwrite.
+
+$(DEVOBJ)doc_common.$(OBJ) : $(DEVVECSRC)doc_common.c $(GDEV) $(gdevkrnlsclass_h) \
+  $(memory__h) $(string__h) $(gp_h) $(gsparam_h) $(gsutil_h) \
+  $(gsdevice_h) $(gxfont_h) $(gxfont0_h) $(gstext_h) $(gxfcid_h)\
+  $(gxgstate_h) $(gxpath_h) $(gsagl_h) $(DEVS_MAK) $(DEVVECSRC)doc_common.h $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)doc_common.$(OBJ) $(C_) $(DEVVECSRC)doc_common.c
+
+
+################ BEGIN PDF WRITER ################
+
+# We reserve slots here for gdevpdfa...z, just in case we need them.
+pdfwrite1_=$(DEVOBJ)gdevpdf.$(OBJ) $(DEVOBJ)gdevpdfb.$(OBJ)
+pdfwrite2_=$(DEVOBJ)gdevpdfc.$(OBJ) $(DEVOBJ)gdevpdfd.$(OBJ) $(DEVOBJ)gdevpdfe.$(OBJ)
+pdfwrite3_=$(DEVOBJ)gdevpdfg.$(OBJ)
+pdfwrite4_=$(DEVOBJ)gdevpdfi.$(OBJ) $(DEVOBJ)gdevpdfj.$(OBJ) $(DEVOBJ)gdevpdfk.$(OBJ)
+pdfwrite5_=$(DEVOBJ)gdevpdfm.$(OBJ)
+pdfwrite6_=$(DEVOBJ)gdevpdfo.$(OBJ) $(DEVOBJ)gdevpdfp.$(OBJ) $(DEVOBJ)gdevpdft.$(OBJ)
+pdfwrite7_=$(DEVOBJ)gdevpdfr.$(OBJ)
+pdfwrite8_=$(DEVOBJ)gdevpdfu.$(OBJ) $(DEVOBJ)gdevpdfv.$(OBJ)
+pdfwrite9_=$(DEVOBJ)gsflip.$(OBJ)
+pdfwrite10_=$(DEVOBJ)scantab.$(OBJ) $(DEVOBJ)sfilter2.$(OBJ)
+pdfwrite_=$(pdfwrite1_) $(pdfwrite2_) $(pdfwrite3_) $(pdfwrite4_)\
+ $(pdfwrite5_) $(pdfwrite6_) $(pdfwrite7_) $(pdfwrite8_) $(pdfwrite9_)\
+ $(pdfwrite10_) $(pdfwrite11_)
+
+# Since ps2write and eps2write are actually "clones" of pdfwrite,
+# we just depend on it.
+# Also note gs_pdfwr.ps depends on pdfwrite being available. So
+# if this is changed to allow (e)ps2write to be built in without
+# pdfwrite, then gs_pdfwr.ps will need to be changed to check for
+# the three devices, rather than just pdfwrite.
+$(DD)ps2write.dev : $(DD)pdfwrite.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)ps2write
+	$(ADDMOD) $(DD)ps2write -include $(DD)pdfwrite.dev
+
+$(DD)eps2write.dev : $(DD)pdfwrite.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)eps2write
+	$(ADDMOD) $(DD)eps2write -include $(DD)pdfwrite.dev
+
+# Note that for ps2pdf operation, we need to parse DSC comments to set
+# the Orientation (Page dict /Rotate value). This is not part of the
+# pdfwrite device, but part of the PS interpreter so that the pdfwrite
+# device can be used with other top level interpreters (such as PCL).
+$(DD)pdfwrite.dev : $(ECHOGS_XE) $(pdfwrite_)\
+ $(GLD)cmyklib.dev $(GLD)cfe.dev $(GLD)lzwe.dev\
+ $(GLD)rle.dev $(GLD)sdcte.dev $(GLD)sdeparam.dev $(GLD)smd5.dev\
+ $(GLD)szlibe.dev $(GLD)psdf.dev $(GLD)gsagl.dev $(GLD)sarc4.dev $(DD)pdtext.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)pdfwrite $(pdfwrite1_)
+	$(ADDMOD) $(DD)pdfwrite $(pdfwrite2_)
+	$(ADDMOD) $(DD)pdfwrite $(pdfwrite3_)
+	$(ADDMOD) $(DD)pdfwrite $(pdfwrite4_)
+	$(ADDMOD) $(DD)pdfwrite $(pdfwrite5_)
+	$(ADDMOD) $(DD)pdfwrite $(pdfwrite6_)
+	$(ADDMOD) $(DD)pdfwrite $(pdfwrite7_)
+	$(ADDMOD) $(DD)pdfwrite $(pdfwrite8_)
+	$(ADDMOD) $(DD)pdfwrite $(pdfwrite9_)
+	$(ADDMOD) $(DD)pdfwrite $(pdfwrite10_)
+	$(ADDMOD) $(DD)pdfwrite $(pdfwrite11_)
+	$(ADDMOD) $(DD)pdfwrite -include $(GLD)cmyklib $(GLD)cfe $(GLD)lzwe
+	$(ADDMOD) $(DD)pdfwrite -include $(GLD)rle $(GLD)sdcte $(GLD)sdeparam
+	$(ADDMOD) $(DD)pdfwrite -include $(GLD)smd5 $(GLD)szlibe $(GLD)sarc4.dev
+	$(ADDMOD) $(DD)pdfwrite -include $(GLD)psdf $(GLD)gsagl
+	$(ADDMOD) $(DD)pdfwrite -include $(DD)pdtext
+
+gdevpdfb_h=$(DEVVECSRC)gdevpdfb.h
+gdevpdfc_h=$(DEVVECSRC)gdevpdfc.h
+gdevpdfg_h=$(DEVVECSRC)gdevpdfg.h
+gdevpdfo_h=$(DEVVECSRC)gdevpdfo.h
+gdevpdfx_h=$(DEVVECSRC)gdevpdfx.h
+
+opdfread_h=$(DEVGEN)opdfread.h
+
+$(DEVGEN)opdfread_1.h : $(PACKPS_XE) $(DEVVECSRC)opdfread.ps
+	$(EXP)$(PACKPS_XE_BUILD) -d -c -n opdfread_ps -o $(DEVGEN)opdfread_1.h $(DEVVECSRC)opdfread.ps
+
+$(DEVGEN)opdfread_.h : $(PACKPS_XE) $(DEVVECSRC)opdfread.ps
+	$(EXP)$(PACKPS_XE_BUILD) -c -n opdfread_ps -o $(DEVGEN)opdfread_.h $(DEVVECSRC)opdfread.ps
+
+$(DEVGEN)opdfread.h : $(DEVGEN)opdfread_$(DEBUG_OPDFREAD).h
+	$(CP_) $(DEVGEN)opdfread_$(DEBUG_OPDFREAD).h $(opdfread_h)
+
+$(DEVOBJ)gdevpdf.$(OBJ) : $(DEVVECSRC)gdevpdf.c $(GDEVH)\
+ $(fcntl__h) $(memory__h) $(string__h) $(time__h) $(unistd__h) $(gp_h)\
+ $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdfx_h) $(smd5_h) $(sarc4_h)\
+ $(gdevpdfb_h) $(gscms_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdf.$(OBJ) $(C_) $(DEVVECSRC)gdevpdf.c
+
+$(DEVOBJ)gdevpdfb.$(OBJ) : $(DEVVECSRC)gdevpdfb.c\
+ $(string__h) $(gx_h)\
+ $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdfx_h)\
+ $(gserrors_h) $(gxcspace_h) $(gxdcolor_h) $(gxpcolor_h) $(gxhldevc_h)\
+ $(gsptype1_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdfb.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfb.c
+
+$(DEVOBJ)gdevpdfc.$(OBJ) : $(DEVVECSRC)gdevpdfc.c $(GXERR) $(math__h) $(memory__h)\
+ $(gdevpdfc_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdfx_h)\
+ $(gscie_h) $(gscindex_h) $(gscspace_h) $(gscdevn_h) $(gscsepr_h) $(gsicc_h)\
+ $(sstring_h) $(stream_h) $(strimpl_h) $(gxcspace_h) $(gxcdevn_h) $(gscspace_h)\
+ $(gsicc_manage_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdfc.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfc.c
+
+$(DEVOBJ)gdevpdfd.$(OBJ) : $(DEVVECSRC)gdevpdfd.c $(math__h) $(memory__h)\
+ $(gx_h) $(gxdevice_h) $(gxfixed_h) $(gxgstate_h) $(gxpaint_h)\
+ $(gxcoord_h) $(gxdevmem_h) $(gxcolor2_h) $(gxhldevc_h)\
+ $(gsstate_h) $(gserrors_h) $(gsptype2_h) $(gsshade_h)\
+ $(gzpath_h) $(gzcpath_h) $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gsutil_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdfd.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfd.c
+
+$(DEVOBJ)gdevpdfe.$(OBJ) : $(DEVVECSRC)gdevpdfe.c\
+ $(gx_h) $(gserrors_h) $(string__h) $(time__h) $(stream_h) $(gp_h) $(smd5_h) $(gscdefs_h)\
+ $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdtf_h) $(ConvertUTF_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdfe.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfe.c
+
+$(DEVOBJ)gdevpdfg.$(OBJ) : $(DEVVECSRC)gdevpdfg.c $(GXERR) $(math__h) $(string__h)\
+ $(memory__h) $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdfx_h)\
+ $(gsfunc0_h) $(gsstate_h) $(gxdcolor_h) $(gxpcolor_h) $(gxcolor2_h) $(gsptype2_h)\
+ $(gxbitmap_h) $(gxdht_h) $(gxfarith_h) $(gxfmap_h) $(gxht_h) $(gxgstate_h)\
+ $(gzht_h) $(gsicc_manage_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdfg.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfg.c
+
+$(DEVOBJ)gdevpdfi.$(OBJ) : $(DEVVECSRC)gdevpdfi.c $(memory__h) $(math__h)\
+ $(gx_h)\
+ $(gserrors_h) $(gsdevice_h) $(gsflip_h) $(gsiparm4_h) $(gsstate_h) $(gscolor2_h)\
+ $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdfo_h)\
+ $(gxcspace_h) $(gximage3_h) $(gximag3x_h) $(gxdcolor_h) $(gxpcolor_h)\
+ $(gxhldevc_h) $(gsicc_manage_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdfi.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfi.c
+
+$(DEVOBJ)gdevpdfj.$(OBJ) : $(DEVVECSRC)gdevpdfj.c\
+ $(memory__h) $(string__h) $(gx_h) $(gserrors_h)\
+ $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gxcspace_h)\
+ $(gsiparm4_h) $(gdevpsds_h) $(spngpx_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVJCC) $(DEVO_)gdevpdfj.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfj.c
+
+$(DEVOBJ)gdevpdfk.$(OBJ) : $(DEVVECSRC)gdevpdfk.c $(GXERR) $(math__h) $(memory__h)\
+ $(gdevpdfc_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdfx_h)\
+ $(gsicc_h) $(gxcie_h) $(gxcspace_h)\
+ $(stream_h) $(strimpl_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdfk.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfk.c
+
+$(DEVOBJ)gdevpdfm.$(OBJ) : $(DEVVECSRC)gdevpdfm.c\
+ $(math__h) $(memory__h) $(string__h) $(gx_h)\
+ $(gdevpdfo_h) $(gdevpdfx_h) $(gserrors_h) $(gsutil_h)\
+ $(szlibx_h) $(slzwx_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdfm.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfm.c
+
+$(DEVOBJ)gdevpdfo.$(OBJ) : $(DEVVECSRC)gdevpdfo.c $(memory__h) $(string__h)\
+ $(gx_h)\
+ $(gdevpdfo_h) $(gdevpdfx_h) $(gserrors_h) $(gsparam_h) $(gsutil_h)\
+ $(sa85x_h) $(sarc4_h) $(strimpl_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdfo.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfo.c
+
+$(DEVOBJ)gdevpdfp.$(OBJ) : $(DEVVECSRC)gdevpdfp.c $(memory__h) $(string__h) $(gx_h)\
+ $(gdevpdfo_h) $(gdevpdfg_h) $(gdevpdfx_h) $(gserrors_h) $(gsparamx_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdfp.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfp.c
+
+$(DEVOBJ)gdevpdfr.$(OBJ) : $(DEVVECSRC)gdevpdfr.c $(memory__h) $(string__h)\
+ $(gx_h)\
+ $(gdevpdfo_h) $(gdevpdfx_h) $(gserrors_h) $(gsutil_h)\
+ $(scanchar_h) $(sstring_h) $(strimpl_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdfr.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfr.c
+
+$(DEVOBJ)gdevpdft.$(OBJ) : $(DEVVECSRC)gdevpdft.c $(string__h)\
+ $(gx_h) $(gserrors_h) $(gstrans_h) $(gscolor2_h) $(gzstate_h)\
+ $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gsccolor_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdft.$(OBJ) $(C_) $(DEVVECSRC)gdevpdft.c
+
+$(DEVOBJ)gdevpdfu.$(OBJ) : $(DEVVECSRC)gdevpdfu.c $(GXERR)\
+ $(jpeglib__h) $(memory__h) $(string__h)\
+ $(gdevpdfo_h) $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdtd_h) $(gscdefs_h)\
+ $(gsdsrc_h) $(gsfunc_h) $(gsfunc3_h)\
+ $(sa85x_h) $(scfx_h) $(sdct_h) $(slzwx_h) $(spngpx_h)\
+ $(srlx_h) $(sarc4_h) $(smd5_h) $(sstring_h) $(strimpl_h) $(szlibx_h)\
+ $(strmio_h) \
+ $(opdfread_h) $(gsagl_h) $(gs_mro_e_h) $(gs_mgl_e_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(GDEVLWFJB2JPXCC) $(DEVO_)gdevpdfu.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfu.c
+
+$(DEVOBJ)gdevpdfv.$(OBJ) : $(DEVVECSRC)gdevpdfv.c $(GXERR) $(math__h) $(string__h)\
+ $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdfx_h)\
+ $(gscindex_h) $(gscoord_h) $(gsiparm3_h) $(gsmatrix_h) $(gsptype2_h)\
+ $(gxcolor2_h) $(gxdcolor_h) $(gxpcolor_h) $(gxshade_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdfv.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfv.c
+
+# ---------------- Font writing ---------------- #
+# This is not really a library facility, but one piece of interpreter test
+# code uses it.
+
+# Support for PostScript and PDF font writing
+
+gdevpsf_h=$(DEVVECSRC)gdevpsf.h
+
+psf_1=$(DEVOBJ)gdevpsf1.$(OBJ) $(DEVOBJ)gdevpsf2.$(OBJ) $(DEVOBJ)gdevpsfm.$(OBJ)
+psf_2=$(DEVOBJ)gdevpsft.$(OBJ) $(DEVOBJ)gdevpsfu.$(OBJ) $(DEVOBJ)gdevpsfx.$(OBJ)
+psf_3=$(DEVOBJ)spsdf.$(OBJ)
+psf_=$(psf_1) $(psf_2) $(psf_3)
+$(DD)psf.dev : $(DEV_MAK) $(ECHOGS_XE) $(psf_) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETMOD) $(DD)psf $(psf_1)
+	$(ADDMOD) $(DD)psf -obj $(psf_2)
+	$(ADDMOD) $(DD)psf -obj $(psf_3)
+
+$(DEVOBJ)gdevpsf1.$(OBJ) : $(DEVVECSRC)gdevpsf1.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gsccode_h) $(gsmatrix_h)\
+ $(gxfixed_h) $(gxfont_h) $(gxfont1_h) $(gxmatrix_h) $(gxtype1_h)\
+ $(sfilter_h) $(sstring_h) $(stream_h) $(strimpl_h)\
+ $(gdevpsf_h) $(spprint_h) $(spsdf_h) $(math_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpsf1.$(OBJ) $(C_) $(DEVVECSRC)gdevpsf1.c
+
+$(DEVOBJ)gdevpsf2.$(OBJ) : $(DEVVECSRC)gdevpsf2.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h) $(memory__h) $(gxarith_h) $(gsutil_h)\
+ $(gsccode_h) $(gscencs_h) $(gscrypt1_h) $(gsmatrix_h)\
+ $(gxfcid_h) $(gxfixed_h) $(gxfont_h) $(gxfont1_h)\
+ $(stream_h) $(gdevpsf_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpsf2.$(OBJ) $(C_) $(DEVVECSRC)gdevpsf2.c
+
+$(DEVOBJ)gdevpsfm.$(OBJ) : $(DEVVECSRC)gdevpsfm.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gdevpsf_h) $(gxfcmap_h) $(spprint_h) $(spsdf_h) $(stream_h)\
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpsfm.$(OBJ) $(C_) $(DEVVECSRC)gdevpsfm.c
+
+$(DEVOBJ)gdevpsft.$(OBJ) : $(DEVVECSRC)gdevpsft.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gscencs_h) $(gsmatrix_h) $(gsutil_h)\
+ $(gxfcid_h) $(gxfont_h) $(gxfont42_h) $(gxttf_h)\
+ $(spprint_h) $(stream_h) $(gdevpsf_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpsft.$(OBJ) $(C_) $(DEVVECSRC)gdevpsft.c
+
+$(DEVOBJ)gdevpsfu.$(OBJ) : $(DEVVECSRC)gdevpsfu.c $(AK) $(gx_h)\
+ $(gserrors_h) $(memory__h) $(gsmatrix_h) $(gxfont_h) $(gdevpsf_h)\
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpsfu.$(OBJ) $(C_) $(DEVVECSRC)gdevpsfu.c
+
+$(DEVOBJ)gdevpsfx.$(OBJ) : $(DEVVECSRC)gdevpsfx.c $(AK) $(gx_h)\
+ $(gserrors_h) $(math__h) $(memory__h)\
+ $(gxfixed_h) $(gxfont_h) $(gxfont1_h) $(gxmatrix_h) $(gxtype1_h)\
+ $(stream_h) $(gdevpsf_h) $(gxgstate_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpsfx.$(OBJ) $(C_) $(DEVVECSRC)gdevpsfx.c
+
+# ---------------- Font copying ---------------- #
+
+# This facility is not included in the core library.  Currently it is used
+# only by pdfwrite.
+
+fcopy_=$(DEVOBJ)gxfcopy.$(OBJ)
+$(GLD)fcopy.dev : $(ECHOGS_XE) $(fcopy_) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETMOD) $(GLD)fcopy $(fcopy_)
+
+$(DEVOBJ)gxfcopy.$(OBJ) : $(DEVSRC)gxfcopy.c $(memory__h) $(AK) $(gx_h)\
+ $(gserrors_h) $(gscencs_h) $(gsline_h) $(gspaint_h) $(gspath_h) $(gsstruct_h)\
+ $(gsutil_h) $(gschar_h) $(gxfont_h) $(gxfont1_h) $(gxfont42_h) $(gxchar_h)\
+ $(gxfcid_h) $(gxfcopy_h) $(gxfcache_h) $(gxgstate_h) $(gxtext_h) $(gxtype1_h)\
+ $(smd5_h) $(gzstate_h) $(gdevpsf_h) $(stream_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gxfcopy.$(OBJ) $(C_) $(DEVSRC)gxfcopy.c
+
+######## pdfwrite text
+
+# The text facilities for the PDF writer are so large and complex that
+# we give them their own module name and (for the new code) file name prefix.
+# However, logically they are part of pdfwrite and cannot be used separately.
+
+$(DD)pdtext.dev : $(DD)pdxtext.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETMOD) $(DD)pdtext -include $(DD)pdxtext
+
+# For a code roadmap, see gdevpdtx.h.
+
+gdevpdt_h=$(DEVVECSRC)gdevpdt.h
+gdevpdtx_h=$(DEVVECSRC)gdevpdtx.h
+gdevpdtb_h=$(DEVVECSRC)gdevpdtb.h
+gdevpdtd_h=$(DEVVECSRC)gdevpdtd.h
+gdevpdtf_h=$(DEVVECSRC)gdevpdtf.h
+gdevpdti_h=$(DEVVECSRC)gdevpdti.h
+gdevpdts_h=$(DEVVECSRC)gdevpdts.h
+gdevpdtt_h=$(DEVVECSRC)gdevpdtt.h
+gdevpdtv_h=$(DEVVECSRC)gdevpdtv.h
+gdevpdtw_h=$(DEVVECSRC)gdevpdtw.h
+whitelst_h=$(DEVVECSRC)whitelst.h
+
+# We reserve space for all of a..z, just in case.
+pdxtext_ab=$(DEVOBJ)gdevpdt.$(OBJ) $(DEVOBJ)gdevpdtb.$(OBJ)
+pdxtext_cde=$(DEVOBJ)gdevpdtc.$(OBJ) $(DEVOBJ)gdevpdtd.$(OBJ) $(DEVOBJ)gdevpdte.$(OBJ)
+pdxtext_fgh=$(DEVOBJ)gdevpdtf.$(OBJ)
+pdxtext_ijk=$(DEVOBJ)gdevpdti.$(OBJ)
+pdxtext_lmn=
+pdxtext_opq=
+pdxtext_rst=$(DEVOBJ)gdevpdts.$(OBJ) $(DEVOBJ)gdevpdtt.$(OBJ)
+pdxtext_uvw=$(DEVOBJ)gdevpdtv.$(OBJ) $(DEVOBJ)gdevpdtw.$(OBJ) $(DEVOBJ)whitelst.$(OBJ)
+pdxtext_xyz=
+pdxtext_=$(pdxtext_ab) $(pdxtext_cde) $(pdxtext_fgh) $(pdxtext_ijk)\
+ $(pdxtext_lmn) $(pdxtext_opq) $(pdxtext_rst) $(pdxtext_uvw) $(pdxtext_xyz)\
+ $(DEVOBJ)gsfont0c.$(OBJ)
+$(DD)pdxtext.dev : $(pdxtext_) $(GDEV)\
+ $(GLD)fcopy.dev $(GLD)psf.dev $(DEVS_MAK) $(MAKEDIRS)
+	$(SETMOD) $(DD)pdxtext $(pdxtext_ab)
+	$(ADDMOD) $(DD)pdxtext $(pdxtext_cde)
+	$(ADDMOD) $(DD)pdxtext $(pdxtext_fgh)
+	$(ADDMOD) $(DD)pdxtext $(pdxtext_ijk)
+	$(ADDMOD) $(DD)pdxtext $(pdxtext_lmn)
+	$(ADDMOD) $(DD)pdxtext $(pdxtext_opq)
+	$(ADDMOD) $(DD)pdxtext $(pdxtext_rst)
+	$(ADDMOD) $(DD)pdxtext $(pdxtext_uvw)
+	$(ADDMOD) $(DD)pdxtext $(pdxtext_xyz)
+	$(ADDMOD) $(DD)pdxtext $(DEVOBJ)gsfont0c.$(OBJ)
+	$(ADDMOD) $(DD)pdxtext -include $(GLD)fcopy $(GLD)psf
+
+$(DEVOBJ)gdevpdt.$(OBJ) : $(DEVVECSRC)gdevpdt.c $(gx_h) $(gxpath_h) $(memory__h)\
+ $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdtf_h) $(gdevpdti_h) $(gdevpdtx_h) $(gdevpdt_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdt.$(OBJ) $(C_) $(DEVVECSRC)gdevpdt.c
+
+$(DEVOBJ)gdevpdtb.$(OBJ) : $(DEVVECSRC)gdevpdtb.c $(memory__h) $(ctype__h) $(string__h)\
+ $(memory__h) $(ctype__h) $(string__h) $(gx_h) $(gserrors_h) $(gsutil_h) $(gxfcid_h)\
+ $(gxfcopy_h) $(gxfont_h) $(gxfont42_h) $(gdevpsf_h) $(gdevpdfx_h) $(gdevpdfo_h)\
+ $(gdevpdtb_h) $(gdevpdfg_h) $(gdevpdtf_h) $(smd5_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdtb.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtb.c
+
+$(DEVOBJ)gdevpdtc.$(OBJ) : $(DEVVECSRC)gdevpdtc.c $(gx_h) $(memory__h) $(string__h)\
+ $(gserrors_h) $(gxfcmap_h) $(gxfont_h) $(gxfont0_h) $(gxfont0c_h)\
+ $(gzpath_h) $(gxchar_h) $(gdevpsf_h) $(gdevpdfx_h) $(gdevpdtx_h)\
+ $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdts_h) $(gdevpdtt_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdtc.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtc.c
+
+$(DEVOBJ)gdevpdte.$(OBJ) : $(DEVVECSRC)gdevpdte.c $(gx_h) $(math__h) $(memory__h) $(string__h)\
+ $(gserrors_h) $(gsutil_h) $(gxfcmap_h) $(gxfcopy_h) $(gxfont_h) \
+ $(gxfont0_h) $(gxfont0c_h) $(gxpath_h) $(gdevpsf_h) $(gdevpdfx_h) \
+ $(gdevpdfg_h)  $(gdevpdfo_h) $(gdevpdtx_h) $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdts_h) \
+ $(gdevpdtt_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdte.$(OBJ) $(C_) $(DEVVECSRC)gdevpdte.c
+
+$(DEVOBJ)gdevpdtd.$(OBJ) : $(DEVVECSRC)gdevpdtd.c $(math__h) $(memory__h) $(gx_h)\
+ $(gserrors_h) $(gsrect_h) $(gscencs_h)\
+ $(gdevpdfo_h) $(gdevpdfx_h)\
+ $(gdevpdtb_h) $(gdevpdtd_h) $(gdevpdtf_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdtd.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtd.c
+
+$(DEVOBJ)gdevpdtf.$(OBJ) : $(DEVVECSRC)gdevpdtf.c $(gx_h) $(memory__h)\
+ $(string__h) $(gserrors_h) $(gsutil_h)\
+ $(gxfcache_h) $(gxfcid_h) $(gxfcmap_h) $(gxfcopy_h) $(gxfont_h) $(gxfont1_h)\
+ $(gdevpsf_h) $(gdevpdfx_h) $(gdevpdtb_h) $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdtw_h)\
+ $(gdevpdti_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdtf.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtf.c
+
+$(DEVOBJ)gdevpdti.$(OBJ) : $(DEVVECSRC)gdevpdti.c $(memory__h) $(string__h) $(gx_h)\
+ $(gserrors_h) $(gsutil_h)\
+ $(gdevpdfx_h) $(gdevpdfg_h)\
+ $(gdevpdtf_h) $(gdevpdti_h) $(gdevpdts_h) $(gdevpdtw_h) $(gdevpdtt_h) $(gdevpdfo_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdti.$(OBJ) $(C_) $(DEVVECSRC)gdevpdti.c
+
+$(DEVOBJ)gdevpdts.$(OBJ) : $(DEVVECSRC)gdevpdts.c $(gx_h) $(math__h) $(memory__h)\
+ $(gserrors_h) $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdtx_h) $(gdevpdtf_h)\
+ $(gdevpdts_h) $(gdevpdtt_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdts.$(OBJ) $(C_) $(DEVVECSRC)gdevpdts.c
+
+$(DEVOBJ)gdevpdtt.$(OBJ) : $(DEVVECSRC)gdevpdtt.c $(gx_h) $(math__h) $(string__h)\
+ $(gserrors_h) $(gsencs_h) $(gscedata_h) $(gsmatrix_h) $(gzstate_h)\
+ $(gxfcache_h) $(gxfont_h) $(gxfont0_h) $(gxfcid_h) $(gxfcopy_h)\
+ $(gxfcmap_h) $(gxpath_h) $(gxchar_h) $(gxstate_h) $(gdevpdfx_h) $(gdevpdfg_h)\
+ $(gdevpdfo_h) $(gdevpdtx_h) $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdts_h) $(gdevpdtt_h)\
+ $(gdevpdti_h) $(gxhldevc_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdtt.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtt.c
+
+$(DEVOBJ)gdevpdtv.$(OBJ) : $(DEVVECSRC)gdevpdtv.c $(gx_h) $(gdevpdtv_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdtv.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtv.c
+
+$(DEVOBJ)gdevpdtw.$(OBJ) : $(DEVVECSRC)gdevpdtw.c $(gx_h) $(gserrors_h) $(memory__h)\
+ $(gxfcmap_h) $(gxfont_h) $(gxfcopy_h) $(gscencs_h)\
+ $(gdevpsf_h) $(gdevpdfx_h) $(gdevpdfo_h)\
+ $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdti_h) $(gdevpdtw_h) $(gdevpdtv_h) $(sarc4_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdtw.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtw.c
+
+$(DEVOBJ)whitelst.$(OBJ) : $(DEVVECSRC)whitelst.c $(whitelst_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)whitelst.$(OBJ) $(C_) $(DEVVECSRC)whitelst.c
+
+################ END PDF WRITER ################
+
+# High-level PCL XL writer
+
+pxl_=$(DEVOBJ)gdevpx.$(OBJ) $(DEVOBJ)gdevpxut.$(OBJ) $(HPPCL)
+$(DD)pxlmono.dev : $(pxl_) $(GDEV) $(GLD)vector.dev \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)pxlmono $(pxl_)
+	$(ADDMOD) $(DD)pxlmono -include $(GLD)vector
+
+$(DD)pxlcolor.dev : $(pxl_) $(GDEV) $(GLD)vector.dev \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)pxlcolor $(pxl_)
+	$(ADDMOD) $(DD)pxlcolor -include $(GLD)vector
+
+$(DEVOBJ)gdevpx.$(OBJ) : $(DEVVECSRC)gdevpx.c\
+ $(math__h) $(memory__h) $(string__h)\
+ $(gx_h) $(gsccolor_h) $(gsdcolor_h) $(gxiparam_h) $(gserrors_h)\
+ $(gxcspace_h) $(gxdevice_h) $(gxpath_h) $(gdevmrop_h)\
+ $(gdevpxat_h) $(gdevpxen_h) $(gdevpxop_h) $(gdevpxut_h) $(gdevvec_h)\
+ $(srlx_h) $(strimpl_h) $(jpeglib__h) $(sdct_h) $(sjpeg_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpx.$(OBJ) $(C_) $(DEVVECSRC)gdevpx.c
+
+# XPS writer. Uses libtiff for all images
+
+libtiff_dev=$(TIFFGENDIR)$(D)libtiff.dev
+tiff_i_=-include $(TIFFGENDIR)$(D)libtiff
+
+xpswrite_=$(DEVOBJ)gdevxps.$(OBJ)
+$(DD)xpswrite.dev : $(xpswrite_) $(GDEV) $(GLD)vector.dev \
+$(libtiff_dev) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)xpswrite $(xpswrite_)
+	$(ADDMOD) $(DD)xpswrite -include $(GLD)vector $(tiff_i_)
+
+$(DEVOBJ)gdevxps_1.$(OBJ) : $(DEVVECSRC)gdevxps.c $(gdevvec_h) \
+$(string__h) $(stdio__h) $(libtiff_dev) $(gx_h) $(gserrors_h) \
+$(gxpath_h) $(gzcpath_h) $(stream_h) \
+$(stdint__h) $(gdevtifs_h) $(gsicc_create_h) $(gsicc_cache_h) \
+$(gximdecode_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(XPSDEVCC) $(I_)$(TI_)$(_I) $(GLO_)gdevxps_1.$(OBJ) $(C_) $(DEVVECSRC)gdevxps.c
+
+$(DEVOBJ)gdevxps_0.$(OBJ) : $(DEVVECSRC)gdevxps.c $(gdevvec_h) \
+$(string__h) $(stdio__h) $(libtiff_dev) $(gx_h) $(gserrors_h) \
+$(gxpath_h) $(gzcpath_h) $(stream_h) $(zlib_h) \
+$(stdint__h) $(gdevtifs_h) $(gsicc_create_h) $(gsicc_cache_h) \
+$(gximdecode_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(XPSDEVCC) $(I_)$(TI_)$(_I) $(GLO_)gdevxps_0.$(OBJ) $(C_) $(DEVVECSRC)gdevxps.c
+
+$(DEVOBJ)gdevxps.$(OBJ) : $(DEVOBJ)gdevxps_$(SHARE_ZLIB).$(OBJ) $(DEVS_MAK) $(MAKEDIRS)
+	$(CP_) $(DEVOBJ)gdevxps_$(SHARE_ZLIB).$(OBJ) $(DEVOBJ)gdevxps.$(OBJ)
+
+###### --------------------- Raster file formats --------------------- ######
+
+### --------------------- The "plain bits" devices ---------------------- ###
+
+# This device also exercises the driver CRD facilities, which is why it
+# needs some additional files.
+
+bit_=$(DEVOBJ)gdevbit.$(OBJ) $(DEVOBJ)gdevdcrd.$(OBJ)
+
+$(DD)bit.dev : $(bit_) $(GLD)page.dev $(GLD)cielib.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)bit $(bit_)
+	$(ADDMOD) $(DD)bit -include $(GLD)cielib
+
+$(DD)bitrgb.dev : $(bit_) $(GLD)page.dev $(GLD)cielib.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)bitrgb $(bit_)
+	$(ADDMOD) $(DD)bitrgb -include $(GLD)cielib
+
+$(DD)bitcmyk.dev : $(bit_) $(GLD)page.dev $(GLD)cielib.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)bitcmyk $(bit_)
+	$(ADDMOD) $(DD)bitcmyk -include $(GLD)cielib
+
+$(DD)bitrgbtags.dev : $(bit_) $(GLD)page.dev $(GLD)cielib.dev\
+ $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)bitrgbtags $(bit_)
+	$(ADDMOD) $(DD)bitrgbtags -include $(GLD)cielib
+
+$(DEVOBJ)gdevbit.$(OBJ) : $(DEVSRC)gdevbit.c $(PDEVH)\
+ $(gsparam_h) $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gxlum_h) $(gxdcconv_h)\
+ $(gsutil_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevbit.$(OBJ) $(C_) $(DEVSRC)gdevbit.c
+
+### --------------------- The chameleon device ---------------------- ###
+
+chameleon_=$(DEVOBJ)gdevchameleon.$(OBJ) $(DEVOBJ)gdevdcrd.$(OBJ)
+
+$(DD)chameleon.dev : $(chameleon_) $(GLD)page.dev $(GLD)cielib.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)chameleon $(chameleon_)
+	$(ADDMOD) $(DD)chameleon -include $(GLD)cielib
+
+$(DEVOBJ)gdevchameleon.$(OBJ) : $(DEVSRC)gdevchameleon.c $(PDEVH)\
+ $(gsparam_h) $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gxlum_h) $(gxdcconv_h)\
+ $(gsutil_h) $(gsicc_manage_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevchameleon.$(OBJ) $(C_) $(DEVSRC)gdevchameleon.c
+
+### ------------------------- .BMP file formats ------------------------- ###
+
+gdevbmp_h=$(DEVSRC)gdevbmp.h
+
+bmp_=$(DEVOBJ)gdevbmp.$(OBJ) $(DEVOBJ)gdevbmpc.$(OBJ) $(DEVOBJ)gdevpccm.$(OBJ)
+
+$(DEVOBJ)gdevbmp.$(OBJ) : $(DEVSRC)gdevbmp.c $(PDEVH) $(gdevbmp_h) $(gdevpccm_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevbmp.$(OBJ) $(C_) $(DEVSRC)gdevbmp.c
+
+$(DEVOBJ)gdevbmpc.$(OBJ) : $(DEVSRC)gdevbmpc.c $(PDEVH) $(gdevbmp_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevbmpc.$(OBJ) $(C_) $(DEVSRC)gdevbmpc.c
+
+$(DD)bmpmono.dev : $(bmp_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)bmpmono $(bmp_)
+
+$(DD)bmpgray.dev : $(bmp_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)bmpgray $(bmp_)
+
+$(DD)bmpsep1.dev : $(bmp_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)bmpsep1 $(bmp_)
+
+$(DD)bmpsep8.dev : $(bmp_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)bmpsep8 $(bmp_)
+
+$(DD)bmp16.dev : $(bmp_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)bmp16 $(bmp_)
+
+$(DD)bmp256.dev : $(bmp_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)bmp256 $(bmp_)
+
+$(DD)bmp16m.dev : $(bmp_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)bmp16m $(bmp_)
+
+$(DD)bmp32b.dev : $(bmp_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)bmp32b $(bmp_)
+
+### --------------------------- The XCF device ------------------------- ###
+
+xcf_=$(DEVOBJ)gdevxcf.$(OBJ)
+
+$(DD)xcf.dev : $(xcf_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV) $(DD)xcf $(xcf_)
+
+$(DD)xcfcmyk.dev : $(xcf_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV) $(DD)xcfcmyk $(xcf_)
+
+$(DEVOBJ)gdevxcf.$(OBJ) : $(DEVSRC)gdevxcf.c $(PDEVH) $(math__h)\
+ $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gsparam_h) $(gxlum_h)\
+ $(gxdcconv_h) $(gscms_h) $(gsicc_cache_h) $(gsicc_manage_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevxcf.$(OBJ) $(C_) $(DEVSRC)gdevxcf.c
+
+### --------------------------- The PSD device ------------------------- ###
+
+psd_=$(DEVOBJ)gdevpsd.$(OBJ) $(GLOBJ)gdevdevn.$(OBJ) $(GLOBJ)gsequivc.$(OBJ)
+gdevpsd_h=$(DEVSRC)gdevpsd.h
+
+$(DD)psdrgb.dev : $(psd_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV) $(DD)psdrgb $(psd_)
+
+$(DD)psdcmyk.dev : $(psd_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV) $(DD)psdcmyk $(psd_)
+
+$(DD)psdcmyktags.dev : $(psd_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV) $(DD)psdcmyktags $(psd_)
+
+$(DD)psdrgb16.dev : $(DEVS_MAK) $(psd_) $(GLD)page.dev $(GDEV)
+	$(SETDEV) $(DD)psdrgb16 $(psd_)
+
+$(DD)psdcmyk16.dev : $(DEVS_MAK) $(psd_) $(GLD)page.dev $(GDEV)
+	$(SETDEV) $(DD)psdcmyk16 $(psd_)
+
+$(DD)psdcmyktags16.dev : $(DEVS_MAK) $(psd_) $(GLD)page.dev $(GDEV)
+	$(SETDEV) $(DD)psdcmyktags16 $(psd_)
+
+$(DEVOBJ)gdevpsd.$(OBJ) : $(DEVSRC)gdevpsd.c $(PDEVH) $(math__h)\
+ $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gsparam_h) $(gxlum_h)\
+ $(gstypes_h) $(gxdcconv_h) $(gdevdevn_h) $(gxdevsop_h) $(gsequivc_h)\
+ $(gscms_h) $(gsicc_cache_h) $(gsicc_manage_h) $(gxgetbit_h)\
+ $(gdevppla_h) $(gxiodev_h) $(gdevpsd_h) $(gxdevsop_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpsd.$(OBJ) $(C_) $(DEVSRC)gdevpsd.c
+
+### ----------------------- The permutation device --------------------- ###
+
+perm_=$(DEVOBJ)gdevperm.$(OBJ)
+
+$(DD)perm.dev : $(perm_) $(GLD)page.dev $(GDEV)
+	$(SETDEV) $(DD)perm $(perm_)
+
+$(DEVOBJ)gdevperm.$(OBJ) : $(DEVSRC)gdevperm.c $(PDEVH) $(math__h)\
+ $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gsparam_h) $(gxlum_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevperm.$(OBJ) $(C_) $(DEVSRC)gdevperm.c
+
+
+### ------------------------- JPEG file format ------------------------- ###
+
+jpeg_=$(DEVOBJ)gdevjpeg.$(OBJ)
+
+# RGB output
+$(DD)jpeg.dev : $(jpeg_) $(GLD)sdcte.dev $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)jpeg $(jpeg_)
+	$(ADDMOD) $(DD)jpeg -include $(GLD)sdcte
+
+# Gray output
+$(DD)jpeggray.dev : $(jpeg_) $(GLD)sdcte.dev $(GLD)page.dev\
+ $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)jpeggray $(jpeg_)
+	$(ADDMOD) $(DD)jpeggray -include $(GLD)sdcte
+
+# CMYK output
+$(DD)jpegcmyk.dev : $(jpeg_) $(GLD)sdcte.dev $(GLD)page.dev\
+ $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)jpegcmyk $(jpeg_)
+	$(ADDMOD) $(DD)jpegcmyk -include $(GLD)sdcte
+
+$(DEVOBJ)gdevjpeg.$(OBJ) : $(DEVSRC)gdevjpeg.c $(PDEVH)\
+ $(stdio__h) $(jpeglib__h)\
+ $(sdct_h) $(sjpeg_h) $(stream_h) $(strimpl_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevjpeg.$(OBJ) $(C_) $(DEVSRC)gdevjpeg.c
+
+### ------------------------- MIFF file format ------------------------- ###
+### Right now we support only 24-bit direct color, but we might add more ###
+### formats in the future.                                               ###
+
+miff_=$(DEVOBJ)gdevmiff.$(OBJ)
+
+$(DD)miff24.dev : $(miff_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV) $(DD)miff24 $(miff_)
+
+$(DEVOBJ)gdevmiff.$(OBJ) : $(DEVSRC)gdevmiff.c $(PDEVH) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevmiff.$(OBJ) $(C_) $(DEVSRC)gdevmiff.c
+
+### ------------------------- PCX file formats ------------------------- ###
+
+pcx_=$(DEVOBJ)gdevpcx.$(OBJ) $(DEVOBJ)gdevpccm.$(OBJ)
+
+$(DEVOBJ)gdevpcx.$(OBJ) : $(DEVSRC)gdevpcx.c $(PDEVH) $(gdevpccm_h) $(gxlum_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpcx.$(OBJ) $(C_) $(DEVSRC)gdevpcx.c
+
+$(DD)pcxmono.dev : $(pcx_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pcxmono $(pcx_)
+
+$(DD)pcxgray.dev : $(pcx_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pcxgray $(pcx_)
+
+$(DD)pcx16.dev : $(pcx_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pcx16 $(pcx_)
+
+$(DD)pcx256.dev : $(pcx_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pcx256 $(pcx_)
+
+$(DD)pcx24b.dev : $(pcx_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pcx24b $(pcx_)
+
+$(DD)pcxcmyk.dev : $(pcx_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pcxcmyk $(pcx_)
+
+### ------------------- Portable Bitmap file formats ------------------- ###
+### For more information, see the pam(5), pbm(5), pgm(5), and ppm(5)     ###
+### man pages.                                                           ###
+
+pxm_=$(DEVOBJ)gdevpbm.$(OBJ) $(GLOBJ)gdevppla.$(OBJ) $(GLOBJ)gdevmpla.$(OBJ)
+
+$(DEVOBJ)gdevpbm.$(OBJ) : $(DEVSRC)gdevpbm.c $(PDEVH)\
+ $(gdevmpla_h) $(gdevplnx_h) $(gdevppla_h)\
+ $(gscdefs_h) $(gscspace_h) $(gxgetbit_h) $(gxiparam_h) $(gxlum_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpbm.$(OBJ) $(C_) $(DEVSRC)gdevpbm.c
+
+### Portable Bitmap (PBM, plain or raw format, magic numbers "P1" or "P4")
+
+$(DD)pbm.dev : $(pxm_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pbm $(pxm_)
+
+$(DD)pbmraw.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pbmraw $(pxm_)
+
+### Portable Graymap (PGM, plain or raw format, magic numbers "P2" or "P5")
+
+$(DD)pgm.dev : $(pxm_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pgm $(pxm_)
+
+$(DD)pgmraw.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pgmraw $(pxm_)
+
+# PGM with automatic optimization to PBM if this is possible.
+
+$(DD)pgnm.dev : $(pxm_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pgnm $(pxm_)
+
+$(DD)pgnmraw.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pgnmraw $(pxm_)
+
+### Portable Pixmap (PPM, plain or raw format, magic numbers "P3" or "P6")
+
+$(DD)ppm.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)ppm $(pxm_)
+
+$(DD)ppmraw.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)ppmraw $(pxm_)
+
+# PPM with automatic optimization to PGM or PBM if possible.
+
+$(DD)pnm.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pnm $(pxm_)
+
+$(DD)pnmraw.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pnmraw $(pxm_)
+
+$(DD)pnmcmyk.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pnmcmyk $(pxm_)
+
+### Portable inKmap (CMYK internally, converted to PPM=RGB at output time)
+
+$(DD)pkm.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pkm $(pxm_)
+
+$(DD)pkmraw.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pkmraw $(pxm_)
+
+### Portable Separated map (CMYK internally, produces 4 monobit pages)
+
+$(DD)pksm.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pksm $(pxm_)
+
+$(DD)pksmraw.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pksmraw $(pxm_)
+
+### Plan 9 bitmap format
+
+$(DD)plan9bm.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)plan9bm $(pxm_)
+
+### Portable Arbitrary Map (PAM, magic number "P7", CMYK)
+
+$(DD)pamcmyk4.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pamcmyk4 $(pxm_)
+
+$(DD)pamcmyk32.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pamcmyk32 $(pxm_)
+
+# Keep the older (non-descriptive) name in case it is being used
+$(DD)pam.dev : $(pxm_) $(GLD)page.dev $(GDEV)  $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pam $(pxm_)
+
+### --------------- OCR device --------------- ###
+
+ocr_=$(DEVOBJ)gdevocr.$(OBJ)
+libocr_dev=$(DEVOBJ)libocr.dev
+ocr_i_=-include $(DEVOBJ)libocr
+
+$(DEVOBJ)gdevocr.$(OBJ) : $(DEVSRC)gdevocr.c\
+ $(gdevprn_h) $(gdevpccm_h) $(gscdefs_h) $(ocr__h) $(DEVS_MAK) $(MAKEDIRS)
+	$(CC_) $(I_)$(DEVI_) $(II)$(PI_)$(_I) $(PCF_) $(GLF_) $(DEVO_)gdevocr.$(OBJ) $(C_) $(DEVSRC)gdevocr.c
+
+$(DD)ocr.dev : $(libocr_dev) $(ocr_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)ocr $(ocr_)
+	$(ADDMOD) $(DD)ocr $(ocr_i_)
+
+### --------------- OCR device --------------- ###
+
+$(DD)hocr.dev : $(libocr_dev) $(hocr_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)hocr $(hocr_)
+	$(ADDMOD) $(DD)hocr $(hocr_i_)
+
+### --------------- Portable Network Graphics file format --------------- ###
+### Requires libpng 0.81 and zlib 0.95 (or more recent versions).         ###
+### See png.mak and zlib.mak for more details.                         ###
+
+png_=$(DEVOBJ)gdevpng.$(OBJ) $(DEVOBJ)gdevpccm.$(OBJ)
+libpng_dev=$(PNGGENDIR)$(D)libpng.dev
+png_i_=-include $(PNGGENDIR)$(D)libpng
+
+$(DEVOBJ)gdevpng.$(OBJ) : $(DEVSRC)gdevpng.c\
+ $(gdevprn_h) $(gdevpccm_h) $(gscdefs_h) $(png__h) $(gxdevsop_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(CC_) $(I_)$(DEVI_) $(II)$(PI_)$(_I) $(PCF_) $(GLF_) $(DEVO_)gdevpng.$(OBJ) $(C_) $(DEVSRC)gdevpng.c
+
+$(DD)pngmono.dev : $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pngmono $(png_)
+	$(ADDMOD) $(DD)pngmono $(png_i_)
+
+$(DD)pngmonod.dev : $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pngmonod $(png_)
+	$(ADDMOD) $(DD)pngmonod $(png_i_)
+
+$(DD)pnggray.dev : $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pnggray $(png_)
+	$(ADDMOD) $(DD)pnggray $(png_i_)
+
+$(DD)png16.dev : $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)png16 $(png_)
+	$(ADDMOD) $(DD)png16 $(png_i_)
+
+$(DD)png256.dev : $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)png256 $(png_)
+	$(ADDMOD) $(DD)png256 $(png_i_)
+
+$(DD)png16m.dev : $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)png16m $(png_)
+	$(ADDMOD) $(DD)png16m $(png_i_)
+
+$(DD)png48.dev : $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)png48 $(png_)
+	$(ADDMOD) $(DD)png48 $(png_i_)
+
+$(DD)pngalpha.dev : $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pngalpha $(png_)
+	$(ADDMOD) $(DD)pngalpha $(png_i_)
+
+$(DD)png16malpha.dev : $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)png16malpha $(png_)
+	$(ADDMOD) $(DD)png16malpha $(png_i_)
+
+### --------------- Portable Network Graphics file format --------------- ###
+### Requires zlib 0.95 (or more recent versions).                         ###
+### See zlib.mak for more details.                                        ###
+
+fpng_=$(DEVOBJ)gdevfpng.$(OBJ) $(DEVOBJ)gdevpccm.$(OBJ)
+
+$(DEVOBJ)gdevfpng_0.$(OBJ) : $(DEVSRC)gdevfpng.c\
+ $(gdevprn_h) $(gxdevsop_h) $(gdevpccm_h) $(gscdefs_h) $(zlib_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(CC_) $(I_)$(DEVI_) $(II)$(ZI_)$(_I) $(PCF_) $(GLF_) $(DEVO_)gdevfpng_0.$(OBJ) $(C_) $(DEVSRC)gdevfpng.c
+
+$(DEVOBJ)gdevfpng_1.$(OBJ) : $(DEVSRC)gdevfpng.c\
+ $(gdevprn_h) $(gdevpccm_h) $(gscdefs_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(CC_) $(I_)$(DEVI_) $(II)$(ZI_)$(_I) $(PCF_) $(GLF_) $(DEVO_)gdevfpng_1.$(OBJ) $(C_) $(DEVSRC)gdevfpng.c
+
+$(DEVOBJ)gdevfpng.$(OBJ) : $(DEVOBJ)gdevfpng_$(SHARE_ZLIB).$(OBJ) $(DEVS_MAK) $(MAKEDIRS)
+	$(CP_) $(DEVOBJ)gdevfpng_$(SHARE_ZLIB).$(OBJ) $(DEVOBJ)gdevfpng.$(OBJ)
+
+$(DD)fpng.dev : $(fpng_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)fpng $(fpng_)
+	$(ADDMOD) $(DD)fpng $(fpng_i_)
+
+### ---------------------- PostScript image format ---------------------- ###
+### These devices make it possible to print monochrome Level 2 files on a ###
+###   Level 1 printer, by converting them to a bitmap in PostScript       ###
+###   format.  They also can convert big, complex color PostScript files  ###
+###   to (often) smaller and more easily printed bitmaps.                 ###
+
+psim_=$(DEVOBJ)gdevpsim.$(OBJ) $(DEVOBJ)gdevpsu.$(OBJ)
+
+$(DEVOBJ)gdevpsim.$(OBJ) : $(DEVSRC)gdevpsim.c $(PDEVH)\
+ $(gdevpsu_h)\
+ $(sa85x_h) $(srlx_h) $(stream_h) $(strimpl_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpsim.$(OBJ) $(C_) $(DEVSRC)gdevpsim.c
+
+### --- Minimum Feature Size support functions --- ###
+
+# Required by fax and 1bpp tiff functions. The grouping of functions
+# within files means it is also pulled in for color/cmyk tiff functions
+# too.
+
+minftrsz_h=$(DEVSRC)minftrsz.h
+minftrsz_=$(minftrsz_h) $(DEVOBJ)minftrsz.$(OBJ)
+
+$(DEVOBJ)minftrsz.$(OBJ) : $(DEVSRC)minftrsz.c $(minftrsz_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)minftrsz.$(OBJ) $(C_) $(DEVSRC)minftrsz.c
+
+
+### ---------------- Fax encoding ---------------- ###
+
+# By default, these drivers recognize 3 page sizes -- (U.S.) letter, A4, and
+# B4 -- and adjust the page width to the nearest legal value for real fax
+# systems (1728 or 2048 pixels).  To suppress this, set the device parameter
+# AdjustWidth to 0 (e.g., -dAdjustWidth=0 on the command line).
+
+gdevfax_h=$(DEVSRC)gdevfax.h
+
+fax_=$(DEVOBJ)gdevfax.$(OBJ) $(DEVOBJ)minftrsz.$(OBJ)
+$(DD)fax.dev : $(libtiff_dev) $(fax_) $(GLD)cfe.dev $(minftrsz_h)\
+ $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETMOD) $(DD)fax $(fax_)
+	$(ADDMOD) $(DD)fax -include $(GLD)cfe $(tiff_i_)
+
+$(DEVOBJ)gdevfax.$(OBJ) : $(DEVSRC)gdevfax.c $(PDEVH)\
+ $(gdevfax_h) $(scfx_h) $(strimpl_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevfax.$(OBJ) $(C_) $(DEVSRC)gdevfax.c
+
+$(DD)faxg3.dev : $(libtiff_dev) $(DD)fax.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)faxg3 -include $(DD)fax
+	$(ADDMOD) $(DD)faxg3 $(tiff_i_)
+
+$(DD)faxg32d.dev : $(libtiff_dev) $(DD)fax.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)faxg32d -include $(DD)fax
+	$(ADDMOD) $(DD)faxg32d $(tiff_i_)
+
+$(DD)faxg4.dev : $(libtiff_dev) $(DD)fax.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)faxg4 -include $(DD)fax
+	$(ADDMOD) $(DD)faxg4 $(tiff_i_)
+
+### -------------------- Plain or TIFF fax encoding --------------------- ###
+###    Use -sDEVICE=tiffg3 or tiffg4 and				  ###
+###	  -r204x98 for low resolution output, or			  ###
+###	  -r204x196 for high resolution output				  ###
+
+gdevtifs_h=$(DEVSRC)gdevtifs.h
+
+tfax_=$(DEVOBJ)gdevtfax.$(OBJ) $(DEVOBJ)minftrsz.$(OBJ)
+$(DD)tfax.dev : $(libtiff_dev) $(tfax_) $(GLD)cfe.dev\
+ $(GLD)lzwe.dev $(GLD)rle.dev $(DD)fax.dev $(DD)tiffs.dev $(minftrsz_h)\
+ $(gstiffio_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETMOD) $(DD)tfax $(tfax_)
+	$(ADDMOD) $(DD)tfax -include $(GLD)cfe $(GLD)lzwe $(GLD)rle
+	$(ADDMOD) $(DD)tfax -include $(DD)fax $(DD)tiffs $(tiff_i_)
+
+$(DEVOBJ)gdevtfax.$(OBJ) : $(DEVSRC)gdevtfax.c $(PDEVH)\
+ $(stdint__h) $(gdevfax_h) $(gdevtifs_h) $(gdevkrnlsclass_h) \
+ $(scfx_h) $(slzwx_h) $(srlx_h) $(strimpl_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(I_)$(TI_)$(_I) $(DEVO_)gdevtfax.$(OBJ) $(C_) $(DEVSRC)gdevtfax.c
+
+### ---------------------------- TIFF formats --------------------------- ###
+
+tiffs_=$(DEVOBJ)gdevtifs.$(OBJ) $(DEVOBJ)minftrsz.$(OBJ)
+
+tiffgray_=$(DEVOBJ)gdevtsep.$(OBJ) $(GLOBJ)gsequivc.$(OBJ) $(DEVOBJ)minftrsz.$(OBJ)
+
+tiffsep_=$(tiffgray_) $(GLOBJ)gdevdevn.$(OBJ) $(GLOBJ)gsequivc.$(OBJ) \
+$(GLOBJ)gdevppla.$(OBJ)
+
+$(DD)tiffs.dev : $(libtiff_dev) $(tiffs_) $(GLD)page.dev\
+ $(minftrsz_) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETMOD) $(DD)tiffs $(tiffs_)
+	$(ADDMOD) $(DD)tiffs -include $(GLD)page $(tiff_i_)
+
+$(DEVOBJ)gdevtifs.$(OBJ) : $(DEVSRC)gdevtifs.c $(PDEVH) $(stdint__h) $(stdio__h) $(time__h)\
+ $(gdevtifs_h) $(gscdefs_h) $(gstypes_h) $(stream_h) $(strmio_h) $(gstiffio_h)\
+ $(gsicc_cache_h) $(gdevkrnlsclass_h) $(gscms_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(I_)$(DEVI_) $(II)$(TI_)$(_I) $(DEVO_)gdevtifs.$(OBJ) $(C_) $(DEVSRC)gdevtifs.c
+
+# Black & white, G3/G4 fax
+# NOTE: see under faxg* above regarding page width adjustment.
+
+$(DD)tiffcrle.dev : $(libtiff_dev) $(DD)tfax.dev $(minftrsz_)\
+ $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)tiffcrle -include $(DD)tfax
+	$(ADDMOD) $(DD)tiffcrle $(tiff_i_)
+
+$(DD)tiffg3.dev : $(libtiff_dev) $(DD)tfax.dev $(minftrsz_)\
+ $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)tiffg3 -include $(DD)tfax
+	$(ADDMOD) $(DD)tiffg3 $(tiff_i_)
+
+$(DD)tiffg32d.dev : $(libtiff_dev) $(DD)tfax.dev $(minftrsz_)\
+ $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)tiffg32d -include $(DD)tfax
+	$(ADDMOD) $(DD)tiffg32d $(tiff_i_)
+
+$(DD)tiffg4.dev : $(libtiff_dev) $(DD)tfax.dev $(minftrsz_)\
+ $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)tiffg4 -include $(DD)tfax
+	$(ADDMOD) $(DD)tiffg4 $(tiff_i_)
+
+# Black & white, LZW compression
+
+$(DD)tifflzw.dev : $(libtiff_dev) $(DD)tfax.dev $(minftrsz_)\
+ $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)tifflzw -include $(DD)tfax
+	$(ADDMOD) $(DD)tifflzw $(tiff_i_)
+
+# Black & white, PackBits compression
+
+$(DD)tiffpack.dev : $(libtiff_dev) $(DD)tfax.dev $(minftrsz_)\
+ $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)tiffpack -include $(DD)tfax
+	$(ADDMOD) $(DD)tiffpack $(tiff_i_)
+
+# TIFF Gray, no compression
+
+$(DD)tiffgray.dev : $(libtiff_dev) $(tiffgray_) $(DD)tiffs.dev\
+ $(minftrsz_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)tiffgray $(tiffgray_)
+	$(ADDMOD) $(DD)tiffgray -include $(DD)tiffs $(tiff_i_)
+
+$(DEVOBJ)gdevtsep_0.$(OBJ) : $(DEVSRC)gdevtsep.c $(PDEVH) $(stdint__h)\
+ $(gdevtifs_h) $(gdevdevn_h) $(gxdevsop_h) $(gsequivc_h) $(stdio__h) $(ctype__h)\
+ $(gxdht_h) $(gxiodev_h) $(gxdownscale_h) $(gzht_h)\
+ $(gxgetbit_h) $(gdevppla_h) $(gp_h) $(gstiffio_h) $(gsicc_h)\
+ $(gscms_h) $(gsicc_cache_h) $(gxdevsop_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(I_)$(TI_)$(_I) $(DEVO_)gdevtsep_0.$(OBJ) $(C_) $(DEVSRC)gdevtsep.c
+
+$(DEVOBJ)gdevtsep_1.$(OBJ) : $(DEVSRC)gdevtsep.c $(PDEVH) $(stdint__h)\
+ $(gdevtifs_h) $(gdevdevn_h) $(gxdevsop_h) $(gsequivc_h) $(stdio__h) $(ctype__h)\
+ $(gxdht_h) $(gxiodev_h) $(gxdownscale_h) $(gzht_h)\
+ $(gxgetbit_h) $(gdevppla_h) $(gp_h) $(gstiffio_h) $(gsicc_h) $(cal_h)\
+ $(gscms_h) $(gsicc_cache_h) $(gxdevsop_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(D_)WITH_CAL$(_D) $(I_)$(CALSRCDIR)$(_I) $(I_)$(TI_)$(_I) $(DEVO_)gdevtsep_1.$(OBJ) $(C_) $(DEVSRC)gdevtsep.c
+
+$(DEVOBJ)gdevtsep.$(OBJ) : $(DEVOBJ)gdevtsep_$(WITH_CAL).$(OBJ)
+	$(CP_) $(DEVOBJ)gdevtsep_$(WITH_CAL).$(OBJ) $(DEVOBJ)gdevtsep.$(OBJ)
+
+
+# TIFF Scaled (downscaled gray -> mono), configurable compression
+
+tiffscaled_=$(tiffsep_)
+
+$(DD)tiffscaled.dev : $(libtiff_dev) $(tiffscaled_) $(DD)tiffs.dev\
+ $(minftrsz_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)tiffscaled $(tiffscaled_)
+	$(ADDMOD) $(DD)tiffscaled -include $(DD)tiffs $(tiff_i_)
+
+# TIFF Scaled 8 (downscaled gray -> gray), configurable compression
+
+tiffscaled8_=$(tiffsep_)
+
+$(DD)tiffscaled8.dev : $(libtiff_dev) $(tiffscaled8_)\
+ $(DD)tiffs.dev $(minftrsz_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)tiffscaled8 $(tiffscaled8_)
+	$(ADDMOD) $(DD)tiffscaled8 -include $(DD)tiffs $(tiff_i_)
+
+# TIFF Scaled 24 (downscaled rgb -> rgb), configurable compression
+
+tiffscaled24_=$(tiffsep_)
+
+$(DD)tiffscaled24.dev : $(libtiff_dev) $(tiffscaled24_)\
+ $(DD)tiffs.dev $(minftrsz_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)tiffscaled24 $(tiffscaled8_)
+	$(ADDMOD) $(DD)tiffscaled24 -include $(DD)tiffs $(tiff_i_)
+
+# TIFF Scaled 32 (downscaled cmyk -> cmyk), configurable compression
+
+tiffscaled32_=$(tiffsep_)
+
+$(DD)tiffscaled32.dev : $(libtiff_dev) $(tiffscaled32_)\
+ $(DD)tiffs.dev $(minftrsz_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)tiffscaled32 $(tiffscaled8_)
+	$(ADDMOD) $(DD)tiffscaled32 -include $(DD)tiffs $(tiff_i_)
+
+# TIFF Scaled 4 (downscaled cmyk -> cmyk), configurable compression
+
+tiffscaled4_=$(tiffsep_)
+
+$(DD)tiffscaled4.dev : $(libtiff_dev) $(tiffscaled4_)\
+ $(DD)tiffs.dev $(minftrsz_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)tiffscaled4 $(tiffscaled8_)
+	$(ADDMOD) $(DD)tiffscaled4 -include $(DD)tiffs $(tiff_i_)
+
+# TIFF RGB, no compression
+
+tiffrgb_=$(DEVOBJ)gdevtfnx.$(OBJ) $(DEVOBJ)minftrsz.$(OBJ)
+
+$(DD)tiff12nc.dev : $(libtiff_dev) $(tiffrgb_) $(DD)tiffs.dev\
+ $(minftrsz_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)tiff12nc $(tiffrgb_)
+	$(ADDMOD) $(DD)tiff12nc -include $(DD)tiffs $(tiff_i_)
+
+$(DD)tiff24nc.dev : $(libtiff_dev) $(tiffrgb_) $(DD)tiffs.dev\
+ $(minftrsz_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)tiff24nc $(tiffrgb_)
+	$(ADDMOD) $(DD)tiff24nc -include $(DD)tiffs $(tiff_i_)
+
+$(DD)tiff48nc.dev : $(libtiff_dev) $(tiffrgb_) $(DD)tiffs.dev\
+ $(minftrsz_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)tiff48nc $(tiffrgb_)
+	$(ADDMOD) $(DD)tiff48nc -include $(DD)tiffs $(tiff_i_)
+
+$(DEVOBJ)gdevtfnx.$(OBJ) : $(DEVSRC)gdevtfnx.c $(PDEVH) $(stdint__h)\
+ $(gdevtifs_h) $(gscms_h) $(gstiffio_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(I_)$(TI_)$(_I) $(DEVO_)gdevtfnx.$(OBJ) $(C_) $(DEVSRC)gdevtfnx.c
+
+# TIFF CMYK, no compression
+
+$(DD)tiff32nc.dev : $(libtiff_dev) $(tiffgray_) $(DD)tiffs.dev\
+ $(minftrsz_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)tiff32nc $(tiffgray_)
+	$(ADDMOD) $(DD)tiff32nc -include $(DD)tiffs $(tiff_i_)
+
+$(DD)tiff64nc.dev : $(libtiff_dev) $(tiffgray_) $(DD)tiffs.dev\
+ $(minftrsz_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)tiff64nc $(tiffgray_)
+	$(ADDMOD) $(DD)tiff64nc -include $(DD)tiffs $(tiff_i_)
+
+#
+# Create separation files (tiffgray) plus CMYK composite (tiff32nc)
+
+$(DD)tiffsep.dev : $(libtiff_dev) $(tiffsep_) $(DD)tiffs.dev\
+ $(minftrsz_h) $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)tiffsep $(tiffsep_)
+	$(ADDMOD) $(DD)tiffsep -include $(DD)tiffs $(tiff_i_)
+
+#
+# Create separation files (tiff 1-bit)
+
+$(DD)tiffsep1.dev : $(tiffsep_) $(DD)tiffs.dev $(minftrsz_h)\
+ $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)tiffsep1 $(tiffsep_)
+	$(ADDMOD) $(DD)tiffsep1 -include $(DD)tiffs
+
+#
+# PLANar device
+
+plan_=$(DEVOBJ)gdevplan.$(OBJ) $(DEVOBJ)gdevppla.$(OBJ) $(DEVOBJ)gdevmpla.$(OBJ)
+
+$(DEVOBJ)gdevplan.$(OBJ) : $(DEVSRC)gdevplan.c $(PDEVH) $(gxdevsop_h)\
+ $(gdevmpla_h) $(gdevplnx_h) $(gdevppla_h) $(gxdownscale_h) $(gsicc_cache_h)\
+ $(gscdefs_h) $(gscspace_h) $(gxgetbit_h) $(gxiparam_h) $(gxlum_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevplan.$(OBJ) $(C_) $(DEVSRC)gdevplan.c
+
+$(DD)plan.dev : $(plan_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)plan $(plan_)
+
+$(DD)plang.dev : $(plan_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)plang $(plan_)
+
+$(DD)planm.dev : $(plan_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)planm $(plan_)
+
+$(DD)planc.dev : $(plan_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)planc $(plan_)
+
+$(DD)plank.dev : $(plan_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)plank $(plan_)
+
+$(DD)planr.dev : $(plan_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)planr $(plan_)
+
+#
+# PLanar Interlaced Buffer device
+
+plib_=$(DEVOBJ)gdevplib.$(OBJ) $(GLOBJ)gdevppla.$(OBJ) $(GLOBJ)gdevmpla.$(OBJ)
+
+$(DEVOBJ)gdevplib.$(OBJ) : $(DEVSRC)gdevplib.c $(PDEVH)\
+ $(gdevmpla_h) $(gdevplnx_h) $(gdevppla_h)\
+ $(gscdefs_h) $(gscspace_h) $(gxgetbit_h) $(gxiparam_h) $(gxlum_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevplib.$(OBJ) $(C_) $(DEVSRC)gdevplib.c
+
+$(DD)plib.dev : $(plib_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)plib $(plib_)
+
+$(DD)plibg.dev : $(plib_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)plibg $(plib_)
+
+$(DD)plibm.dev : $(plib_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)plibm $(plib_)
+
+$(DD)plibc.dev : $(plib_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)plibc $(plib_)
+
+$(DD)plibk.dev : $(plib_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)plibk $(plib_)
+
+# ink coverage device  --  a device that records the ink coverage
+# on each page, and discards the page.
+$(DD)inkcov.dev : $(ECHOGS_XE) $(LIB_MAK) $(DEVOBJ)gdevicov.$(OBJ) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)inkcov $(DEVOBJ)gdevicov.$(OBJ)
+
+$(DD)ink_cov.dev : $(ECHOGS_XE) $(LIB_MAK) $(DEVOBJ)gdevicov.$(OBJ) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETDEV2) $(DD)ink_cov $(DEVOBJ)gdevicov.$(OBJ)
+
+$(DEVOBJ)gdevicov.$(OBJ) : $(DEVSRC)gdevicov.c $(AK) \
+  $(arch_h) $(gdevprn_h) $(stdio__h)  $(stdint__h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevicov.$(OBJ) $(C_) $(DEVSRC)gdevicov.c
+
+
+### ------------------------------- CUPS ------------------------------- ###
+lcups_dev=$(LCUPSGENDIR)$(D)lcups.dev
+lcupsi_dev=$(LCUPSIGENDIR)$(D)lcupsi.dev
+
+cups_=$(DEVOBJ)gdevcups.$(OBJ)
+$(DD)cups.dev : $(lcups_dev) $(lcupsi_dev) $(cups_) $(GDEV) $(GLD)page.dev \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)cups $(cups_)
+	$(ADDMOD) $(DD)cups -include $(lcups_dev)
+	$(ADDMOD) $(DD)cups -include $(lcupsi_dev)
+	$(ADDMOD) $(DD)cups -include $(GLD)page
+$(DD)pwgraster.dev : $(lcups_dev) $(lcupsi_dev) $(cups_) $(GDEV) $(GLD)page.dev \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pwgraster $(cups_)
+	$(ADDMOD) $(DD)pwgraster -include $(lcups_dev)
+	$(ADDMOD) $(DD)pwgraster -include $(lcupsi_dev)
+	$(ADDMOD) $(DD)pwgraster -include $(GLD)page
+
+$(DD)appleraster.dev : $(lcups_dev) $(lcupsi_dev) $(cups_) $(GDEV) $(GLD)page.dev \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)appleraster $(cups_)
+	$(ADDMOD) $(DD)appleraster -include $(lcups_dev)
+	$(ADDMOD) $(DD)appleraster -include $(lcupsi_dev)
+	$(ADDMOD) $(DD)appleraster -include $(GLD)page
+
+$(DD)urf.dev : $(lcups_dev) $(lcupsi_dev) $(cups_) $(GDEV) $(GLD)page.dev \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)urf $(cups_)
+	$(ADDMOD) $(DD)urf -include $(lcups_dev)
+	$(ADDMOD) $(DD)urf -include $(lcupsi_dev)
+	$(ADDMOD) $(DD)urf -include $(GLD)page
+
+$(DEVOBJ)gdevcups.$(OBJ) : $(LCUPSSRCDIR)$(D)gdevcups.c $(std_h) $(gxdevsop_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(CUPS_CC) $(DEVO_)gdevcups.$(OBJ) $(C_) $(CFLAGS) $(CUPSCFLAGS) \
+		$(I_)$(GLSRC)$(_I) \
+		$(I_)$(DEVSRC)$(_I) $(I_)$(LIBCUPSSRCDIR)$(D)libs$(_I) \
+		$(I_)$(DEVOBJ)$(_I) \
+		$(LCUPSSRCDIR)$(D)gdevcups.c
+
+### ---------------------------- Tracing -------------------------------- ###
+
+# A tracing device, also an example of a high-level device.
+
+$(DEVOBJ)gdevtrac.$(OBJ) : $(DEVSRC)gdevtrac.c $(AK) $(gx_h)\
+ $(gserrors_h) $(gscspace_h)\
+ $(gxdevice_h) $(gxdht_h) $(gxfont_h) $(gxiparam_h) $(gxgstate_h)\
+ $(gxpaint_h) $(gxtmap_h) $(gzcpath_h) $(gzpath_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevtrac.$(OBJ) $(C_) $(DEVSRC)gdevtrac.c
+
+$(DD)tracedev.dev : $(GDEV) $(DEVOBJ)gdevtrac.$(OBJ) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(SETMOD) $(DD)tracedev -dev2 tr_mono tr_rgb tr_cmyk
+	$(ADDMOD) $(DD)tracedev -obj $(DEVOBJ)gdevtrac.$(OBJ)
+
+###@@@--------------- PSDCMYKOG device --------------------------###
+
+psdcmykog_=$(DEVOBJ)gdevcmykog.$(OBJ)
+
+$(DD)psdcmykog.dev : $(GDEV) $(psdcmykog_) $(DD)page.dev $(DD)psdcmyk.dev \
+  $(GLOBJ)gdevdevn.$(OBJ) $(gxdevsop_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV) $(DD)psdcmykog $(psdcmykog_)
+
+$(DEVOBJ)gdevcmykog.$(OBJ) : $(DEVSRC)gdevcmykog.c $(GDEV) \
+ $(GDEVH) $(gdevdevn_h) $(gsequivc_h) $(gxdevsop_h) $(gdevdevnprn_h) $(gdevpsd_h) \
+ $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevcmykog.$(OBJ) $(C_) $(DEVSRC)gdevcmykog.c
+
+### -------- PDF as an image downscaled device --------------------- ###
+
+gdevpdfimg_h=$(DEVSRC)gdevpdfimg.h
+
+$(DD)pdfimage8.dev : $(DEVOBJ)gdevpdfimg.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pdfimage8 $(DEVOBJ)gdevpdfimg.$(OBJ)
+	$(ADDMOD) $(DD)pdfimage8 -include $(GLD)page
+
+$(DD)pdfimage24.dev : $(DEVOBJ)gdevpdfimg.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pdfimage24 $(DEVOBJ)gdevpdfimg.$(OBJ)
+	$(ADDMOD) $(DD)pdfimage24 -include $(GLD)page
+
+$(DD)pdfimage32.dev : $(DEVOBJ)gdevpdfimg.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pdfimage32 $(DEVOBJ)gdevpdfimg.$(OBJ)
+	$(ADDMOD) $(DD)pdfimage32 -include $(GLD)page
+
+$(DD)PCLm.dev : $(DEVOBJ)gdevpdfimg.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)PCLm $(DEVOBJ)gdevpdfimg.$(OBJ)
+	$(ADDMOD) $(DD)PCLm -include $(GLD)page
+
+$(DD)PCLm8.dev : $(DEVOBJ)gdevpdfimg.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)PCLm8 $(DEVOBJ)gdevpdfimg.$(OBJ)
+	$(ADDMOD) $(DD)PCLm8 -include $(GLD)page
+
+$(DEVOBJ)gdevpdfimg.$(OBJ) : $(DEVSRC)gdevpdfimg.c $(AK) $(gdevkrnlsclass_h) \
+  $(DEVS_MAK) $(arch_h) $(stdint__h) $(gdevprn_h) $(gxdownscale_h) \
+  $(stream_h) $(spprint_h) $(time__h) $(smd5_h) $(sstring_h) $(strimpl_h) \
+  $(slzwx_h) $(szlibx_h) $(jpeglib__h) $(sdct_h) $(srlx_h) $(gsicc_cache_h) $(sjpeg_h) $(gdevpdfimg_h) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevpdfimg.$(OBJ) $(C_) $(DEVSRC)gdevpdfimg.c
+
+### -------- PDF image with OCRd text overlay --------------------- ###
+
+$(DD)pdfocr8.dev : $(DEVOBJ)gdevpdfocr.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pdfocr8 $(DEVOBJ)gdevpdfocr.$(OBJ)
+	$(ADDMOD) $(DD)pdfocr8 -include $(GLD)page
+
+$(DD)pdfocr24.dev : $(DEVOBJ)gdevpdfocr.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pdfocr24 $(DEVOBJ)gdevpdfocr.$(OBJ)
+	$(ADDMOD) $(DD)pdfocr24 -include $(GLD)page
+
+$(DD)pdfocr32.dev : $(DEVOBJ)gdevpdfocr.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)pdfocr32 $(DEVOBJ)gdevpdfocr.$(OBJ)
+	$(ADDMOD) $(DD)pdfocr32 -include $(GLD)page
+
+$(DEVOBJ)gdevpdfocr.$(OBJ) : $(DEVSRC)gdevpdfocr.c $(AK) $(gdevkrnlsclass_h) \
+  $(DEVS_MAK) $(MAKEDIRS) $(arch_h) $(stdint__h) $(gdevprn_h) $(gxdownscale_h) \
+  $(stream_h) $(spprint_h) $(time__h) $(smd5_h) $(sstring_h) $(strimpl_h) \
+  $(slzwx_h) $(szlibx_h) $(jpeglib__h) $(sdct_h) $(srlx_h) $(gsicc_cache_h) $(sjpeg_h) $(gdevpdfimg_h)
+	$(DEVCC) $(DEVO_)gdevpdfocr.$(OBJ) $(C_) $(DEVSRC)gdevpdfocr.c
+
+### -------- URF device --------------------- ###
+urf=$(DEVOBJ)gdevurf.$(OBJ)
+$(DD)urfgray.dev : $(urf) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)urfgray $(urf)
+	$(ADDMOD) $(DD)urfgray -include $(GLD)page
+
+$(DD)urfrgb.dev : $(urf) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)urfrgb $(urf)
+	$(ADDMOD) $(DD)urfrgb -include $(GLD)page
+
+$(DD)urfcmyk.dev : $(urf) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+	$(SETPDEV2) $(DD)urfcmyk $(urf)
+	$(ADDMOD) $(DD)urfcmyk -include $(GLD)page
+
+$(DEVOBJ)gdevurf.$(OBJ) : $(URFSRCDIR)$(D)gdevurf.c $(AK) $(PDEVH) \
+ $(gsparam_h) $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gxlum_h) $(gxdcconv_h)\
+ $(gsutil_h) $(DEVS_MAK) $(MAKEDIRS)
+	$(DEVCC) $(DEVO_)gdevurf.$(OBJ) $(C_) $(URFSRCDIR)$(D)gdevurf.c
+
+# Dependencies:
+$(DEVSRC)gxfcopy.h:$(GLSRC)gsfont.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)scommon.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gsstype.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gsmemory.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gslibctx.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)stdio_.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gsccode.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)stdint_.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gssprintf.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gstypes.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)std.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)stdpre.h
+$(DEVSRC)gxfcopy.h:$(GLGEN)arch.h
+$(DEVSRC)gxfcopy.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdev8bcm.h:$(GLSRC)gxcvalue.h
+$(DEVSRC)gdev8bcm.h:$(GLSRC)stdpre.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxdevcli.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxtext.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gstparam.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxcspace.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsfont.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxcvalue.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxftype.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gscms.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsxfont.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsiparam.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gp.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)memento.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsstruct.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxarith.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gpsync.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsmemory.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gpgetenv.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gslibctx.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gxcindex.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gsccode.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gssprintf.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)std.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)stdpre.h
+$(DEVSRC)gdevpcl.h:$(GLGEN)arch.h
+$(DEVSRC)gdevpcl.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpsu.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpsu.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gdevprn.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)string_.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsstrtok.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxclthrd.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxclpage.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxclist.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxgstate.h
+$(DEVSRC)gdevdljm.h:$(DEVSRC)gdevpcl.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gstrans.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gdevp14.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxline.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)math_.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcolor2.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxpcolor.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gdevdevn.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gx.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxclipsr.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gdebug.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevbuf.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxdcolor.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxband.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxblend.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscolor2.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxmatrix.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevice.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcpath.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsequivc.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxdevcli.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxpcache.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsptype1.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscie.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxtext.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxstate.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gstparam.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsmalloc.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcspace.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxctable.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsfont.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcvalue.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxiclass.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxftype.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscms.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxbitfmt.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxstdio.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsxfont.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsio.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsiparam.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxclio.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gp.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)memento.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsutil.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsstrl.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsstruct.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gdbflags.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gserrors.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)vmsmath.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsfname.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxarith.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gpsync.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsmemory.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gpgetenv.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gslibctx.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gxcindex.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gsccode.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gssprintf.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)std.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)stdpre.h
+$(DEVSRC)gdevdljm.h:$(GLGEN)arch.h
+$(DEVSRC)gdevdljm.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevxcmp.h:$(GLSRC)gxcvalue.h
+$(DEVSRC)gdevxcmp.h:$(GLSRC)x_.h
+$(DEVSRC)gdevxcmp.h:$(GLSRC)std.h
+$(DEVSRC)gdevxcmp.h:$(GLSRC)stdpre.h
+$(DEVSRC)gdevxcmp.h:$(GLGEN)arch.h
+$(DEVSRC)gdevx.h:$(GLSRC)gdevbbox.h
+$(DEVSRC)gdevx.h:$(DEVSRC)gdevxcmp.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxdevcli.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxtext.h
+$(DEVSRC)gdevx.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevx.h:$(GLSRC)gstparam.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxcspace.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevx.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsfont.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxcvalue.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxftype.h
+$(DEVSRC)gdevx.h:$(GLSRC)gscms.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevx.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevx.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevx.h:$(GLSRC)x_.h
+$(DEVSRC)gdevx.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsxfont.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsiparam.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevx.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevx.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevx.h:$(GLSRC)gp.h
+$(DEVSRC)gdevx.h:$(GLSRC)memento.h
+$(DEVSRC)gdevx.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsstruct.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevx.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevx.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxarith.h
+$(DEVSRC)gdevx.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevx.h:$(GLSRC)gpsync.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsmemory.h
+$(DEVSRC)gdevx.h:$(GLSRC)gpgetenv.h
+$(DEVSRC)gdevx.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevx.h:$(GLSRC)gslibctx.h
+$(DEVSRC)gdevx.h:$(GLSRC)gxcindex.h
+$(DEVSRC)gdevx.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevx.h:$(GLSRC)gsccode.h
+$(DEVSRC)gdevx.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevx.h:$(GLSRC)gssprintf.h
+$(DEVSRC)gdevx.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevx.h:$(GLSRC)std.h
+$(DEVSRC)gdevx.h:$(GLSRC)stdpre.h
+$(DEVSRC)gdevx.h:$(GLGEN)arch.h
+$(DEVSRC)gdevx.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gdevpxat.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gdevpxen.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gdevpxop.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gsmemory.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gslibctx.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gssprintf.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)std.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)stdpre.h
+$(DEVSRC)gdevpxut.h:$(GLGEN)arch.h
+$(DEVSRC)gdevpxut.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpsdf.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpsdf.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpsds.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpsds.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdfc.h:$(DEVVECSRC)gdevpdfx.h
+$(DEVVECSRC)gdevpdfc.h:$(DEVVECSRC)gdevpsdf.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpdfc.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdfc.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdfg.h:$(DEVVECSRC)gdevpdfx.h
+$(DEVVECSRC)gdevpdfg.h:$(DEVVECSRC)gdevpsdf.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpdfg.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdfg.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdfo.h:$(DEVVECSRC)gdevpdfx.h
+$(DEVVECSRC)gdevpdfo.h:$(DEVVECSRC)gdevpsdf.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)smd5.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmd5.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpdfo.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdfo.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdfx.h:$(DEVVECSRC)gdevpsdf.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpdfx.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdfx.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfcid.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gstype1.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfont42.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxcid.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpsf.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpsf.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdt.h:$(DEVVECSRC)gdevpdfx.h
+$(DEVVECSRC)gdevpdt.h:$(DEVVECSRC)gdevpsdf.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpdt.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdt.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdtx.h:$(DEVVECSRC)gdevpdt.h
+$(DEVVECSRC)gdevpdtx.h:$(DEVVECSRC)gdevpdfx.h
+$(DEVVECSRC)gdevpdtx.h:$(DEVVECSRC)gdevpsdf.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpdtx.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdtx.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdtb.h:$(DEVVECSRC)gdevpdtx.h
+$(DEVVECSRC)gdevpdtb.h:$(DEVVECSRC)gdevpdt.h
+$(DEVVECSRC)gdevpdtb.h:$(DEVVECSRC)gdevpdfx.h
+$(DEVVECSRC)gdevpdtb.h:$(DEVVECSRC)gdevpsdf.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpdtb.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdtb.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpdtb.h
+$(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpdtx.h
+$(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpdt.h
+$(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpdfx.h
+$(DEVVECSRC)gdevpdtd.h:$(DEVVECSRC)gdevpsdf.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpdtd.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdtd.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdtf.h:$(DEVVECSRC)gdevpdtx.h
+$(DEVVECSRC)gdevpdtf.h:$(DEVVECSRC)gdevpdt.h
+$(DEVVECSRC)gdevpdtf.h:$(DEVVECSRC)gdevpdfx.h
+$(DEVVECSRC)gdevpdtf.h:$(DEVVECSRC)gdevpsdf.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpdtf.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdtf.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdti.h:$(DEVVECSRC)gdevpdtx.h
+$(DEVVECSRC)gdevpdti.h:$(DEVVECSRC)gdevpdt.h
+$(DEVVECSRC)gdevpdti.h:$(DEVVECSRC)gdevpdfx.h
+$(DEVVECSRC)gdevpdti.h:$(DEVVECSRC)gdevpsdf.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpdti.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdti.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdts.h:$(DEVVECSRC)gdevpdtx.h
+$(DEVVECSRC)gdevpdts.h:$(DEVVECSRC)gdevpdt.h
+$(DEVVECSRC)gdevpdts.h:$(DEVVECSRC)gdevpdfx.h
+$(DEVVECSRC)gdevpdts.h:$(DEVVECSRC)gdevpsdf.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpdts.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdts.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpdts.h
+$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpdtf.h
+$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpdtx.h
+$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpdt.h
+$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpdfx.h
+$(DEVVECSRC)gdevpdtt.h:$(DEVVECSRC)gdevpsdf.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpdtt.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdtt.h:$(GLSRC)gs_dll_call.h
+$(DEVVECSRC)gdevpdtw.h:$(DEVVECSRC)gdevpdtx.h
+$(DEVVECSRC)gdevpdtw.h:$(DEVVECSRC)gdevpdt.h
+$(DEVVECSRC)gdevpdtw.h:$(DEVVECSRC)gdevpdfx.h
+$(DEVVECSRC)gdevpdtw.h:$(DEVVECSRC)gdevpsdf.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevvec.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxgstate.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstrans.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevp14.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxline.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsht1.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcomp.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)sarc4.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)math_.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)scfx.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevbbox.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcolor2.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxpcolor.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)spprint.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)spsdf.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdevmem.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfont.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gdevdevn.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gspath.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxclipsr.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsgdata.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfcmap.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdcolor.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxblend.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)shc.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscolor2.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxmatrix.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfapi.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdevice.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfcmap.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcpath.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsht.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxiparam.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)sa85x.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsequivc.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)sa85d.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdevcli.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxpcache.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscindex.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcmap.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsptype1.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscie.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxtext.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstext.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxstate.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsnamecl.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstparam.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gspcolor.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfmap.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stream.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsmalloc.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfunc.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcspace.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxhldevc.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxctable.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxiodev.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)strimpl.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxrplane.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscsel.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfcache.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfont.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsimage.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsdcolor.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcvalue.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxbcache.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsropt.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxdda.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxpath.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxiclass.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfrac.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxtmap.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxftype.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscms.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsrect.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gslparam.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsdevice.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxbitfmt.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscpm.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsgcache.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscspace.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsgstate.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsnotify.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxstdio.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsxfont.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcid.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsdsrc.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsio.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsiparam.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxfixed.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscompt.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsmatrix.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gspenum.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxhttile.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsparam.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsrefct.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gp.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)memento.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)memory_.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsuid.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsstruct.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxsync.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxbitmap.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)vmsmath.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)srdline.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)scommon.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsfname.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsbitmap.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsccolor.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxarith.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stat_.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gpsync.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsstype.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsmemory.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gpgetenv.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gscdefs.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gslibctx.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gxcindex.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stdio_.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsccode.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stdint_.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gssprintf.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gsbittab.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gstypes.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)std.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)stdpre.h
+$(DEVVECSRC)gdevpdtw.h:$(GLGEN)arch.h
+$(DEVVECSRC)gdevpdtw.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxclist.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxgstate.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gstrans.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gdevp14.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxline.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)math_.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcolor2.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxpcolor.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gdevdevn.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxclipsr.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevbuf.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxdcolor.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxband.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxblend.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscolor2.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxmatrix.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevice.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcpath.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsequivc.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxdevcli.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxpcache.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsptype1.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscie.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxtext.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxstate.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gstparam.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsmalloc.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcspace.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxctable.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsfont.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcvalue.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxiclass.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxftype.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscms.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxbitfmt.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxstdio.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsxfont.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsio.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsiparam.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxclio.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gp.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)memento.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsstruct.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)vmsmath.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsfname.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxarith.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gpsync.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsmemory.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gpgetenv.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gslibctx.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gxcindex.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gsccode.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gssprintf.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)std.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)stdpre.h
+$(DEVSRC)gdevbmp.h:$(GLGEN)arch.h
+$(DEVSRC)gdevbmp.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gdevdevnprn.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gdevprn.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)string_.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsstrtok.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxclthrd.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxclpage.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxclist.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxgstate.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gstrans.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gdevp14.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxline.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)math_.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcolor2.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxpcolor.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gdevdevn.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gx.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxclipsr.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gdebug.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevbuf.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxdcolor.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxband.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxblend.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscolor2.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxmatrix.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevice.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcpath.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsequivc.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxdevcli.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxpcache.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsptype1.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscie.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxtext.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxstate.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gstparam.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsmalloc.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcspace.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxctable.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsfont.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcvalue.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxiclass.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxftype.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscms.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxbitfmt.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxstdio.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsxfont.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsio.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsiparam.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxclio.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gp.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)memento.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsutil.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsstrl.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsstruct.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gdbflags.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gserrors.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)vmsmath.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsfname.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxarith.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gpsync.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsmemory.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gpgetenv.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gslibctx.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gxcindex.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gsccode.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gssprintf.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)std.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)stdpre.h
+$(DEVSRC)gdevpsd.h:$(GLGEN)arch.h
+$(DEVSRC)gdevpsd.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)minftrsz.h:$(GLSRC)std.h
+$(DEVSRC)minftrsz.h:$(GLSRC)stdpre.h
+$(DEVSRC)minftrsz.h:$(GLGEN)arch.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gdevprn.h
+$(DEVSRC)gdevfax.h:$(GLSRC)string_.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsstrtok.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxclthrd.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxclpage.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxclist.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxgstate.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gstrans.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gdevp14.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxline.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevfax.h:$(GLSRC)math_.h
+$(DEVSRC)gdevfax.h:$(GLSRC)scfx.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcolor2.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxpcolor.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gdevdevn.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gx.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxclipsr.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gdebug.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxdevbuf.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxdcolor.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxband.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxblend.h
+$(DEVSRC)gdevfax.h:$(GLSRC)shc.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscolor2.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxmatrix.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxdevice.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcpath.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsequivc.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxdevcli.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxpcache.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsptype1.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscie.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxtext.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxstate.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gstparam.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsmalloc.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcspace.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxctable.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsfont.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcvalue.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxiclass.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxftype.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscms.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxbitfmt.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxstdio.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsxfont.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsio.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsiparam.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxclio.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gp.h
+$(DEVSRC)gdevfax.h:$(GLSRC)memento.h
+$(DEVSRC)gdevfax.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsutil.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsstrl.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsstruct.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gdbflags.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gserrors.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevfax.h:$(GLSRC)vmsmath.h
+$(DEVSRC)gdevfax.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevfax.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsfname.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxarith.h
+$(DEVSRC)gdevfax.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gpsync.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsmemory.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gpgetenv.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gslibctx.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gxcindex.h
+$(DEVSRC)gdevfax.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsccode.h
+$(DEVSRC)gdevfax.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gssprintf.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gsbittab.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevfax.h:$(GLSRC)std.h
+$(DEVSRC)gdevfax.h:$(GLSRC)stdpre.h
+$(DEVSRC)gdevfax.h:$(GLGEN)arch.h
+$(DEVSRC)gdevfax.h:$(GLSRC)gs_dll_call.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdownscale.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gdevprn.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)string_.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsstrtok.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxclthrd.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxclpage.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxclist.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxgstate.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gstrans.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gdevp14.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxline.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxgetbit.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsht1.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcomp.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)math_.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcolor2.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxpcolor.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevmem.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gdevdevn.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gx.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxclipsr.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gdebug.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevbuf.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdcolor.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxband.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxblend.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscolor2.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxmatrix.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevice.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcpath.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsht.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsequivc.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdevcli.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxpcache.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscindex.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcmap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsptype1.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscie.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxtext.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gstext.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxstate.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsnamecl.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gstparam.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gspcolor.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxfmap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsmalloc.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsfunc.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcspace.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxctable.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxrplane.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscsel.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxfcache.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsfont.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsimage.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsdcolor.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcvalue.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxbcache.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsropt.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxdda.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxpath.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxiclass.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxfrac.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxtmap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxftype.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscms.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsrect.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gslparam.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsdevice.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxbitfmt.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscpm.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscspace.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsgstate.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxstdio.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsxfont.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsdsrc.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsio.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsiparam.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxfixed.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxclio.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscompt.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsmatrix.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gspenum.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxhttile.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsparam.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsrefct.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gp.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)memento.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)memory_.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsutil.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsuid.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsstrl.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsstruct.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gdbflags.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxsync.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gserrors.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxbitmap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)claptrap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)vmsmath.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)srdline.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)scommon.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsfname.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsbitmap.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsccolor.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxarith.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)stat_.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gpsync.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsstype.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsmemory.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gpgetenv.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gscdefs.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gslibctx.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)ctype_.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gxcindex.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)stdio_.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gsccode.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)stdint_.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gssprintf.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gstypes.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)std.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)stdpre.h
+$(DEVSRC)gdevtifs.h:$(GLGEN)arch.h
+$(DEVSRC)gdevtifs.h:$(GLSRC)gs_dll_call.h
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/devices
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/devices	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/devices	(revision 5)

Property changes on: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new/devices
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new	(revision 5)

Property changes on: a/ghostscript/create-10.0.0-cross-patch/ghostscript-10.0.0-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/ghostscript/create-10.0.0-cross-patch
===================================================================
--- a/ghostscript/create-10.0.0-cross-patch	(nonexistent)
+++ a/ghostscript/create-10.0.0-cross-patch	(revision 5)

Property changes on: a/ghostscript/create-10.0.0-cross-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/ghostscript/patches/README
===================================================================
--- a/ghostscript/patches/README	(nonexistent)
+++ a/ghostscript/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/ghostscript/patches
===================================================================
--- a/ghostscript/patches	(nonexistent)
+++ a/ghostscript/patches	(revision 5)

Property changes on: a/ghostscript/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/ghostscript
===================================================================
--- a/ghostscript	(nonexistent)
+++ a/ghostscript	(revision 5)

Property changes on: a/ghostscript
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/ghostscript-fonts-std/Makefile
===================================================================
--- a/ghostscript-fonts-std/Makefile	(nonexistent)
+++ a/ghostscript-fonts-std/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/ghostscript-fonts-std
+
+versions    = 8.11
+pkgname     = ghostscript-fonts-std
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: a/ghostscript-fonts-std
===================================================================
--- a/ghostscript-fonts-std	(nonexistent)
+++ a/ghostscript-fonts-std	(revision 5)

Property changes on: a/ghostscript-fonts-std
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/gpm/Makefile
===================================================================
--- a/gpm/Makefile	(nonexistent)
+++ a/gpm/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/gpm
+
+versions    = 1.20.7
+pkgname     = gpm
+suffix      = tar.bz2
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/gpm-1.20.7.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-1.20.7-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/gpm/create-1.20.7-patch/create.patch.sh
===================================================================
--- a/gpm/create-1.20.7-patch/create.patch.sh	(nonexistent)
+++ a/gpm/create-1.20.7-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=1.20.7
+
+tar --files-from=file.list -xjvf ../gpm-$VERSION.tar.bz2
+mv gpm-$VERSION gpm-$VERSION-orig
+
+cp -rf ./gpm-$VERSION-new ./gpm-$VERSION
+
+diff --unified -Nr  gpm-$VERSION-orig  gpm-$VERSION > gpm-$VERSION.patch
+
+mv gpm-$VERSION.patch ../patches
+
+rm -rf ./gpm-$VERSION
+rm -rf ./gpm-$VERSION-orig

Property changes on: a/gpm/create-1.20.7-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/gpm/create-1.20.7-patch/file.list
===================================================================
--- a/gpm/create-1.20.7-patch/file.list	(nonexistent)
+++ a/gpm/create-1.20.7-patch/file.list	(revision 5)
@@ -0,0 +1,11 @@
+gpm-1.20.7/Makefile.in
+gpm-1.20.7/configure
+gpm-1.20.7/configure.ac
+gpm-1.20.7/configure.ac.footer
+gpm-1.20.7/src/Makefile.in
+gpm-1.20.7/src/daemon/open_console.c
+gpm-1.20.7/src/daemon/startup.c
+gpm-1.20.7/src/headers/daemon.h
+gpm-1.20.7/src/lib/libcurses.c
+gpm-1.20.7/src/lib/report-lib.c
+gpm-1.20.7/src/prog/gpm-root.y
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/Makefile.in
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/Makefile.in	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/Makefile.in	(revision 5)
@@ -0,0 +1,146 @@
+#			-*-makefile-*- (gpm/main)
+#
+# Copyright 1994,1997  rubini@linux.it
+# Copyright 1997       dickey@clark.net
+# Copyright (C) 1998 Ian Zimmerman <itz@rahul.net>
+# Copyright (C) 2001-2012 Nico Schottelius
+#
+
+SHELL = /bin/sh
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = .
+
+include Makefile.include
+
+# allow CFLAGS to be overriden from make command line
+# ideally one would never have to write this rule again, but the GNU
+# makefile standards are at cross-purposes: CFLAGS is reserved for
+# user-overridable flags, but it's also all the implicit rule looks at.
+# missing ?
+
+SUBDIRS = src doc contrib
+
+
+### simple, but effective rules
+
+all: do-all
+
+src/$(DEPFILE):
+	touch $@ # to prevent unecessary warnings
+
+dep: src/$(DEPFILE)
+	$(MAKE) -C src dep
+
+check: all
+
+uninstall:	do-uninstall
+
+clean: do-clean
+	rm -f config.status.lineno
+
+#aclocal.m4: acinclude.m4
+#	$(MKDIR) config
+#	aclocal -I config
+
+#configure: configure.ac aclocal.m4 $(versionfiles)
+#	libtoolize --force --copy `libtoolize -n --install >/dev/null 2>&1 && echo --install`
+#	autoheader
+#	autoconf
+
+#config.status:	configure
+#	if [ -f config.status ]; then $(SHELL) ./config.status --recheck; \
+#	else $(SHELL) ./configure; fi
+
+Makefile: config.status         $(srcdir)/Makefile.in Makefile.include
+	./config.status
+Makefile.include: config.status $(srcdir)/Makefile.include.in
+	./config.status
+
+### INSTALL
+
+install:	check installdirs do-install
+
+install-strip:
+	$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) $(STRIP)' install
+
+installdirs:
+	$(MKDIR) $(libdir) $(bindir) $(sbindir) $(includedir) $(sysconfdir); \
+	if test "x$(ELISP)" != "x" ; then \
+		$(MKDIR) $(lispdir) ; \
+	fi
+
+### GENERIC
+
+# do-all goes to all subdirectories and does all
+do-%: dep
+	@target=`echo $@ | $(SED) -e 's/^do-//'`; \
+	for i in $(SUBDIRS) ; do \
+		if test -f ./$$i/Makefile ; then \
+			$(MAKE) -C ./$$i $${target} || exit 1 ;\
+		else \
+			true; \
+		fi; \
+       done
+
+
+# Configure & unconfigure
+
+# Maintainer portion, use at your own risk
+
+barf:
+	@echo 'This command is intended for maintainers to use; it'
+	@echo 'deletes files that may need special tools to rebuild.'
+	@echo 'If you want to continue, please press return.'
+	@echo -n "Hit Ctrl+C to abort."
+	@read somevar
+
+
+# who / what does need tags
+TAGS:	$(SRCS) $(HDRS) src/prog/gpm-root.y do-TAGS
+	cd $(srcdir) && $(ETAGS) -o TAGS $(SRCS) $(HDRS) src/prog/gpm-root.y
+
+### RELEASE STUFF
+TARS  =../gpm-$(release).tar.gz
+TARS +=../gpm-$(release).tar.bz2 ../gpm-$(release).tar.lzma
+
+M_HOST=arcana.linux.it
+M_DIR=gpm/
+
+tars: $(TARS)
+
+# configure headers, produce new configure script
+distconf: Makefile.in Makefile.include.in configure acinclude.m4 $(versionfiles)
+
+../gpm-$(release).tar: $(srcdir) distclean distconf
+	# no exclude possible of .git with pax it seems, so the following is not possible:
+	git archive --prefix "gpm-$(release)/" -o $@ HEAD
+
+../gpm-$(release).tar.gz:  ../gpm-$(release).tar
+	gzip -9 -c $< > $@
+
+../gpm-$(release).tar.bz2:  ../gpm-$(release).tar
+	bzip2 -9 -c $< > $@
+
+../gpm-$(release).tar.lzma:  ../gpm-$(release).tar
+	lzma -9 -c $< > $@
+
+# 3. Put package together into .tar.gz and .tar.bz2
+dist: disttest distclean distconf $(TARS)
+	scp $(TARS) $(M_HOST):$(M_DIR)
+	mv $(TARS) ~/niconetz/software/gpm/archives
+
+### TEST: on nicos machine: not to be used anywhere else currently
+# create / update configure, delete other parts from earlier build
+disttest: distconf clean
+	./configure
+	make all
+
+### CLEANUP
+distclean: clean do-clean do-distclean
+	rm -f config.log config.status* config.cache Makefile Makefile.include
+	rm -rf autom4te.cache 
+	rm -f src/$(DEPFILE)
+
+allclean: do-allclean distclean
+	rm -f configure  aclocal.m4
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/configure
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/configure	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/configure	(revision 5)
@@ -0,0 +1,13948 @@
+#! /bin/sh
+# From configure.ac configure.in.
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for gpm 0.1.0-38-g6f30355.
+#
+# Report bugs to <http://www.nico.schottelius.org/software/gpm/>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+
+  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org and
+$0: http://www.nico.schottelius.org/software/gpm/ about
+$0: your system, including any error possibly output before
+$0: this message. Then install a modern shell, or manually
+$0: run the script under such a shell if you do have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='gpm'
+PACKAGE_TARNAME='gpm'
+PACKAGE_VERSION='0.1.0-38-g6f30355'
+PACKAGE_STRING='gpm 0.1.0-38-g6f30355'
+PACKAGE_BUGREPORT='http://www.nico.schottelius.org/software/gpm/'
+PACKAGE_URL=''
+
+ac_unique_file="src/daemon/main.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='LTLIBOBJS
+LIBOBJS
+release_date
+release
+lispdir
+SHARED_LIBS
+CURSES_OBJS
+LIBGPM_A
+SOLDFLAGS
+PICFLAGS
+SHLIB
+ELISP
+EMACS
+abi_full
+abi_lev
+GPMXTERM
+ALLOCA
+emacs
+DIFF
+MAKEINFO
+TEXINDEX
+TEX
+TEXI2HTML
+DVIPS
+YFLAGS
+YACC
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+CPP
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+AWK
+RANLIB
+STRIP
+ac_ct_AR
+AR
+DLLTOOL
+OBJDUMP
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+LIBTOOL
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+with_curses
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+YACC
+YFLAGS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures gpm 0.1.0-38-g6f30355 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking ...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/gpm]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of gpm 0.1.0-38-g6f30355:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-static         build static libraries [default=no]
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-sysroot=DIR Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).
+  --without-curses        disable curses support even if curses found
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  YACC        The `Yet Another Compiler Compiler' implementation to use.
+              Defaults to the first program found out of: `bison -y', `byacc',
+              `yacc'.
+  YFLAGS      The list of arguments that will be passed by default to $YACC.
+              This script will default YFLAGS to the empty string to avoid a
+              default value of `-d' given by some make applications.
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <http://www.nico.schottelius.org/software/gpm/>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+gpm configure 0.1.0-38-g6f30355
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 test -x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval \${$3+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ------------------------------------------------------------ ##
+## Report this to http://www.nico.schottelius.org/software/gpm/ ##
+## ------------------------------------------------------------ ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+	 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+	    return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by gpm $as_me 0.1.0-38-g6f30355, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+releasedate="2014-03-02 14:24:24 +0400"
+release="0.1.0-38-g6f30355"
+
+
+
+
+
+
+ac_aux_dir=
+for ac_dir in config "$srcdir"/config; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+ac_config_headers="$ac_config_headers src/headers/config.h"
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+if test x$srcdir = x ; then
+        srcdir = `pwd`
+else
+        srcdir=`cd $srcdir && pwd`
+fi
+
+#
+# Versioning stuff
+#
+abi_lev="2"
+abi_age="1"
+abi_rev="0"
+abi_full="${abi_lev}.${abi_age}.${abi_rev}"
+
+
+cat >>confdefs.h <<_ACEOF
+#define GPM_ABI_LEV $abi_lev
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define GPM_ABI_AGE $abi_age
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define GPM_ABI_REV $abi_rev
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define GPM_ABI_FULL "$abi_full"
+_ACEOF
+
+
+#
+# Find programs
+#
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+case `pwd` in
+  *\ * | *\	*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.2'
+macro_revision='1.3337'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case "$ECHO" in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in dumpbin "link -dump"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[	 ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT_DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot;
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
+$as_echo "${with_sysroot}" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  ppc64-*linux*|powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  ppc*-*linux*|powerpc*-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+  fi
+else
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+
+
+
+
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_LIPO="lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&5
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&5
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+	LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&5
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[012]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if ${ac_cv_prog_CPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+# Set options
+
+
+
+        enable_dlopen=no
+
+
+  enable_win32_dll=no
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='--shared'
+	lt_prog_compiler_static='--static'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl='-Wl,-Wl,,'
+	lt_prog_compiler_pic='-PIC'
+	lt_prog_compiler_static='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fpic'
+	lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-qpic'
+	lt_prog_compiler_static='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Qoption ld '
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Wl,'
+	  ;;
+        *Intel*\ [CF]*Compiler*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fPIC'
+	  lt_prog_compiler_static='-static'
+	  ;;
+	*Portland\ Group*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fpic'
+	  lt_prog_compiler_static='-Bstatic'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='${wl}--export-all-symbols'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  whole_archive_flag_spec=
+	  tmp_sharedflag='--shared' ;;
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+	  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    ld_shlibs=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      export_dynamic_flag_spec='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' ${wl}-bernotok'
+	  allow_undefined_flag=' ${wl}-berok'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec='$convenience'
+	  fi
+	  archive_cmds_need_lc=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	always_export_symbols=yes
+	file_list_spec='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+	enable_shared_with_static_runtimes=yes
+	exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds='chmod 644 $oldlib'
+	postlink_cmds='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes=yes
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+  else
+    whole_archive_flag_spec=''
+  fi
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator=:
+	hardcode_direct=yes
+	hardcode_direct_absolute=yes
+	export_dynamic_flag_spec='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	*)
+	  hardcode_direct=yes
+	  hardcode_direct_absolute=yes
+	  export_dynamic_flag_spec='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           LDFLAGS="$save_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	hardcode_direct=yes
+	hardcode_shlibpath_var=no
+	hardcode_direct_absolute=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	  export_dynamic_flag_spec='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     hardcode_libdir_flag_spec='-R$libdir'
+	     ;;
+	   *)
+	     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	export_dynamic_flag_spec='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl
+	  pic_flag=$lt_prog_compiler_pic
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag
+	  allow_undefined_flag=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc=no
+	  else
+	    lt_cv_archive_cmds_need_lc=yes
+	  fi
+	  allow_undefined_flag=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux # correct to gnu/linux during the next big refactor
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+for ac_prog in 'bison -y' byacc
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_YACC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$YACC"; then
+  ac_cv_prog_YACC="$YACC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_YACC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+
+# check for programs.
+# Extract the first word of "dvips", so it can be a program name with args.
+set dummy dvips; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_DVIPS+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $DVIPS in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_DVIPS="$DVIPS" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_DVIPS="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_DVIPS" && ac_cv_path_DVIPS="no"
+  ;;
+esac
+fi
+DVIPS=$ac_cv_path_DVIPS
+if test -n "$DVIPS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DVIPS" >&5
+$as_echo "$DVIPS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "texi2html", so it can be a program name with args.
+set dummy texi2html; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_TEXI2HTML+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $TEXI2HTML in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_TEXI2HTML="$TEXI2HTML" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_TEXI2HTML="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_TEXI2HTML" && ac_cv_path_TEXI2HTML="no"
+  ;;
+esac
+fi
+TEXI2HTML=$ac_cv_path_TEXI2HTML
+if test -n "$TEXI2HTML"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEXI2HTML" >&5
+$as_echo "$TEXI2HTML" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "tex", so it can be a program name with args.
+set dummy tex; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_TEX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $TEX in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_TEX="$TEX" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_TEX="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_TEX" && ac_cv_path_TEX="no"
+  ;;
+esac
+fi
+TEX=$ac_cv_path_TEX
+if test -n "$TEX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEX" >&5
+$as_echo "$TEX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "texindex", so it can be a program name with args.
+set dummy texindex; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_TEXINDEX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $TEXINDEX in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_TEXINDEX="$TEXINDEX" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_TEXINDEX="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_TEXINDEX" && ac_cv_path_TEXINDEX="no"
+  ;;
+esac
+fi
+TEXINDEX=$ac_cv_path_TEXINDEX
+if test -n "$TEXINDEX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEXINDEX" >&5
+$as_echo "$TEXINDEX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "makeinfo", so it can be a program name with args.
+set dummy makeinfo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MAKEINFO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAKEINFO in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_MAKEINFO="$MAKEINFO" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_MAKEINFO="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_MAKEINFO" && ac_cv_path_MAKEINFO="no"
+  ;;
+esac
+fi
+MAKEINFO=$ac_cv_path_MAKEINFO
+if test -n "$MAKEINFO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5
+$as_echo "$MAKEINFO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "diff", so it can be a program name with args.
+set dummy diff; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_DIFF+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $DIFF in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_DIFF" && ac_cv_path_DIFF="no"
+  ;;
+esac
+fi
+DIFF=$ac_cv_path_DIFF
+if test -n "$DIFF"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5
+$as_echo "$DIFF" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "sed", so it can be a program name with args.
+set dummy sed; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $SED in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_SED="$SED" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_SED="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_SED" && ac_cv_path_SED="no"
+  ;;
+esac
+fi
+SED=$ac_cv_path_SED
+if test -n "$SED"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SED" >&5
+$as_echo "$SED" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "emacs", so it can be a program name with args.
+set dummy emacs; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_emacs+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $emacs in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_emacs="$emacs" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_emacs="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_emacs" && ac_cv_path_emacs="no"
+  ;;
+esac
+fi
+emacs=$ac_cv_path_emacs
+if test -n "$emacs"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $emacs" >&5
+$as_echo "$emacs" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+if test ${ac_cv_path_emacs} = no ; then
+        EMACS=:
+        ELISP=
+else
+        EMACS=${ac_cv_path_emacs}
+        ELISP="emacs/t-mouse.el emacs/t-mouse.elc"
+fi
+
+if test $EMACS != : ; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to install Emacs Lisp files" >&5
+$as_echo_n "checking where to install Emacs Lisp files... " >&6; }
+if ${itz_cv_path_site_lisp+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval itz_cv_path_site_lisp=`${EMACS} -batch -l ${srcdir}/exec.el -exec "(mapcar 'print load-path)" 2>/dev/null |
+sed -e '/^$/d' | sed -n -e 2p`
+case x${itz_cv_path_site_lisp} in
+x*site-lisp*) ;;
+x*) itz_cv_path_site_lisp='${datadir}/emacs/site-lisp' ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $itz_cv_path_site_lisp" >&5
+$as_echo "$itz_cv_path_site_lisp" >&6; }
+
+        lispdir=${itz_cv_path_site_lisp}
+else
+        lispdir='${datadir}/emacs/site-lisp'
+fi
+
+# Header-checks
+for ac_header in syslog.h linux/input.h linux/joystick.h ncurses.h ncurses/curses.h curses.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in sys/sysmacros.h linux/major.h linux/tty.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# Required headers
+for ac_header in sys/socket.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_socket_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_SOCKET_H 1
+_ACEOF
+
+else
+  as_fn_error $? "Required header file missing" "$LINENO" 5
+fi
+
+done
+
+
+# Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static;
+fi
+
+
+LIBGPM_A=
+
+if test "x$enable_static" = "xyes"; then :
+
+        LIBGPM_A=lib/libgpm.a
+
+fi
+
+
+
+# Check whether --with-curses was given.
+if test "${with_curses+set}" = set; then :
+  withval=$with_curses;
+fi
+
+
+CURSES_OBJS=
+
+case $with_curses in
+No|no|N|n) : ;;
+        *) if   test ${ac_cv_header_ncurses_h} = yes ||
+                test ${ac_cv_header_ncurses_curses_h} = yes ||
+                test ${ac_cv_header_curses_h} = yes ; then
+        CURSES_OBJS=lib/libcurses.o ; fi ;;
+esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __u32" >&5
+$as_echo_n "checking for __u32... " >&6; }
+if ${itz_cv_type___u32+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <linux/types.h>
+
+int
+main ()
+{
+
+__u32 dummy;
+return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  itz_cv_type___u32=yes
+else
+  itz_cv_type___u32=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $itz_cv_type___u32" >&5
+$as_echo "$itz_cv_type___u32" >&6; }
+
+if test ${itz_cv_type___u32} = yes || test ${ac_cv_type___u32} = yes ; then
+
+$as_echo "#define HAVE___U32 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system is ELF" >&5
+$as_echo_n "checking whether system is ELF... " >&6; }
+if ${itz_cv_sys_elf+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __ELF__
+win
+#else
+lose
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "win" >/dev/null 2>&1; then :
+  itz_cv_sys_elf=yes
+else
+  itz_cv_sys_elf=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $itz_cv_sys_elf" >&5
+$as_echo "$itz_cv_sys_elf" >&6; }
+if test ${itz_cv_sys_elf} = yes && test x${ac_cv_c_compiler_gnu} = xyes ; then
+        PICFLAGS="-DPIC -fPIC"
+        SOLDFLAGS="-fPIC -shared -Wl,-soname,"
+else
+        PICFLAGS=
+        SOLDFLAGS=
+fi
+
+if test ${itz_cv_sys_elf} = yes && test x${ac_cv_c_compiler_gnu} = xyes ; then
+    SHLIB=libgpm.so
+else
+    SHLIB=
+fi
+
+for ac_func in vsyslog syslog
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments.  Useless!
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+$as_echo_n "checking for working alloca.h... " >&6; }
+if ${ac_cv_working_alloca_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+			  if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_working_alloca_h=yes
+else
+  ac_cv_working_alloca_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+$as_echo "$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
+
+$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+$as_echo_n "checking for alloca... " >&6; }
+if ${ac_cv_func_alloca_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  ifdef HAVE_ALLOCA_H
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca /* predefined by HP cc +Olibcalls */
+void *alloca (size_t);
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+int
+main ()
+{
+char *p = (char *) alloca (1);
+				    if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_func_alloca_works=yes
+else
+  ac_cv_func_alloca_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+$as_echo "$ac_cv_func_alloca_works" >&6; }
+
+if test $ac_cv_func_alloca_works = yes; then
+
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+
+else
+  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+
+$as_echo "#define C_ALLOCA 1" >>confdefs.h
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
+$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
+if ${ac_cv_os_cray+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "webecray" >/dev/null 2>&1; then :
+  ac_cv_os_cray=yes
+else
+  ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
+$as_echo "$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+    break
+fi
+
+  done
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+$as_echo_n "checking stack direction for C alloca... " >&6; }
+if ${ac_cv_c_stack_direction+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_c_stack_direction=0
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+find_stack_direction (int *addr, int depth)
+{
+  int dir, dummy = 0;
+  if (! addr)
+    addr = &dummy;
+  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+  return dir + dummy;
+}
+
+int
+main (int argc, char **argv)
+{
+  return find_stack_direction (0, argc + !argv + 20) < 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_stack_direction=1
+else
+  ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+$as_echo "$ac_cv_c_stack_direction" >&6; }
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
+
+
+fi
+
+
+case $with_curses in
+No|no|N|n) SHARED_LIBS=-lc ;;
+*)
+    SAVELIBS=$LIBS
+    LIBS=
+    for i in tinfo ncurses termcap termlib; do
+        if test x$LIBS = x; then
+            as_ac_Lib=`$as_echo "ac_cv_lib_$i''_tputs" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tputs in -l$i" >&5
+$as_echo_n "checking for tputs in -l$i... " >&6; }
+if eval \${$as_ac_Lib+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-l$i  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char tputs ();
+int
+main ()
+{
+return tputs ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$as_ac_Lib=yes"
+else
+  eval "$as_ac_Lib=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+eval ac_res=\$$as_ac_Lib
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_LIB$i" | $as_tr_cpp` 1
+_ACEOF
+
+  LIBS="-l$i $LIBS"
+
+fi
+
+        else :; fi
+    done
+    TERMLIBS=$LIBS
+    LIBS=
+    for i in ncurses curses; do
+        if test x$LIBS = x; then
+            as_ac_Lib=`$as_echo "ac_cv_lib_$i''_wgetch" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wgetch in -l$i" >&5
+$as_echo_n "checking for wgetch in -l$i... " >&6; }
+if eval \${$as_ac_Lib+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-l$i $TERMLIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char wgetch ();
+int
+main ()
+{
+return wgetch ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$as_ac_Lib=yes"
+else
+  eval "$as_ac_Lib=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+eval ac_res=\$$as_ac_Lib
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_LIB$i" | $as_tr_cpp` 1
+_ACEOF
+
+  LIBS="-l$i $LIBS"
+
+fi
+
+        else :; fi
+    done
+    SHARED_LIBS="-lc"
+    LIBS=$SAVELIBS ;;
+esac
+
+GPMXTERM=
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+CPPFLAGS="$CPPFLAGS "'-I$(srcdir) $(DEFS) -include headers/config.h -Wall -DSYSCONFDIR="\"$(sysconfdir)\"" -DSBINDIR="\"$(sbindir)\"" -D_GNU_SOURCE'
+LDFLAGS="$LDFLAGS "'-L$(srcdir)'
+
+ac_config_files="$ac_config_files Makefile.include Makefile doc/Makefile src/Makefile contrib/Makefile doc/doc.gpm"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    if test "x$cache_file" != "x/dev/null"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by gpm $as_me 0.1.0-38-g6f30355, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <http://www.nico.schottelius.org/software/gpm/>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+gpm config.status 0.1.0-38-g6f30355
+configured by $0, generated by GNU Autoconf 2.69,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+nm_file_list_spec \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "src/headers/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/headers/config.h" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "Makefile.include") CONFIG_FILES="$CONFIG_FILES Makefile.include" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;;
+    "doc/doc.gpm") CONFIG_FILES="$CONFIG_FILES doc/doc.gpm" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp= ac_tmp=
+  trap 'exit_status=$?
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$ac_tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$ac_tmp/stdin"
+  case $ac_file in
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$ac_tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
+  fi
+ ;;
+
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  if test x"$xsi_shell" = xyes; then
+  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
+func_dirname ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_basename ()$/,/^} # func_basename /c\
+func_basename ()\
+{\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
+func_dirname_and_basename ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
+func_stripname ()\
+{\
+\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
+\    # positional parameters, so assign one to ordinary parameter first.\
+\    func_stripname_result=${3}\
+\    func_stripname_result=${func_stripname_result#"${1}"}\
+\    func_stripname_result=${func_stripname_result%"${2}"}\
+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
+func_split_long_opt ()\
+{\
+\    func_split_long_opt_name=${1%%=*}\
+\    func_split_long_opt_arg=${1#*=}\
+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
+func_split_short_opt ()\
+{\
+\    func_split_short_opt_arg=${1#??}\
+\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
+func_lo2o ()\
+{\
+\    case ${1} in\
+\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
+\      *)    func_lo2o_result=${1} ;;\
+\    esac\
+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_xform ()$/,/^} # func_xform /c\
+func_xform ()\
+{\
+    func_xform_result=${1%.*}.lo\
+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_arith ()$/,/^} # func_arith /c\
+func_arith ()\
+{\
+    func_arith_result=$(( $* ))\
+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_len ()$/,/^} # func_len /c\
+func_len ()\
+{\
+    func_len_result=${#1}\
+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  sed -e '/^func_append ()$/,/^} # func_append /c\
+func_append ()\
+{\
+    eval "${1}+=\\${2}"\
+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
+func_append_quoted ()\
+{\
+\    func_quote_for_eval "${2}"\
+\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
+fi
+
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+ ;;
+
+  esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+

Property changes on: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/configure
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/configure.ac
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/configure.ac	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/configure.ac	(revision 5)
@@ -0,0 +1,161 @@
+AC_INIT([gpm],[0.1.0-38-g6f30355],[http://www.nico.schottelius.org/software/gpm/])
+
+releasedate="2014-03-02 14:24:24 +0400"
+release="0.1.0-38-g6f30355"
+AC_REVISION(configure.in,v 1.8 2012-10-26 nico)
+
+dnl Process this file with autoconf to produce a configure script.
+dnl written jan/1997 - T.E.Dickey <dickey@clark.net>
+
+AC_PREREQ(2.61)
+
+AC_CONFIG_SRCDIR([src/daemon/main.c])
+AC_CONFIG_AUX_DIR([config])
+AC_CONFIG_HEADER([src/headers/config.h])
+
+AC_CANONICAL_HOST
+
+dnl Make srcdir an absolute path.
+if test x$srcdir = x ; then
+        srcdir = `pwd`
+else
+        srcdir=`cd $srcdir && pwd`
+fi
+
+#
+# Versioning stuff
+#
+abi_lev="2"
+abi_age="1"
+abi_rev="0"
+abi_full="${abi_lev}.${abi_age}.${abi_rev}"
+
+AC_DEFINE_UNQUOTED([GPM_ABI_LEV], [$abi_lev], [Library level])
+AC_DEFINE_UNQUOTED([GPM_ABI_AGE], [$abi_age], [Library age])
+AC_DEFINE_UNQUOTED([GPM_ABI_REV], [$abi_rev], [Library revision])
+AC_DEFINE_UNQUOTED([GPM_ABI_FULL],["$abi_full"],[Full library version])
+
+#
+# Find programs
+#
+
+AC_PROG_CC
+AC_PROG_LIBTOOL
+AC_PROG_INSTALL
+AC_PROG_YACC
+AC_PROG_LN_S
+
+# check for programs.
+AC_PATH_PROG(DVIPS,dvips,no)
+AC_PATH_PROG(TEXI2HTML,texi2html,no)
+AC_PATH_PROG(TEX,tex,no)
+AC_PATH_PROG(TEXINDEX,texindex,no)
+AC_PATH_PROG(MAKEINFO,makeinfo,no)
+AC_PATH_PROG(DIFF,diff,no)
+AC_PATH_PROG(SED,sed,no)
+AC_PATH_PROG(emacs,emacs,no)
+
+if test ${ac_cv_path_emacs} = no ; then
+        EMACS=:
+        ELISP=
+else
+        EMACS=${ac_cv_path_emacs}
+        ELISP="emacs/t-mouse.el emacs/t-mouse.elc"
+fi
+
+if test $EMACS != : ; then
+        ITZ_PATH_SITE_LISP
+        lispdir=${itz_cv_path_site_lisp}
+else
+        lispdir='${datadir}/emacs/site-lisp'
+fi
+
+# Header-checks
+AC_CHECK_HEADERS(syslog.h linux/input.h linux/joystick.h ncurses.h ncurses/curses.h curses.h)
+AC_CHECK_HEADERS(sys/sysmacros.h linux/major.h linux/tty.h)
+
+# Required headers
+AC_CHECK_HEADERS(sys/socket.h,,[AC_MSG_ERROR([Required header file missing])])
+
+AC_ARG_ENABLE([static],
+[  --enable-static         build static libraries @<:@default=no@:>@])
+
+LIBGPM_A=
+
+AS_IF([test "x$enable_static" = "xyes"], [
+        LIBGPM_A=lib/libgpm.a
+])
+
+
+AC_ARG_WITH(curses,
+[  --without-curses        disable curses support even if curses found])
+
+CURSES_OBJS=
+
+case $with_curses in
+No|no|N|n) : ;;
+        *) if   test ${ac_cv_header_ncurses_h} = yes || 
+                test ${ac_cv_header_ncurses_curses_h} = yes ||
+                test ${ac_cv_header_curses_h} = yes ; then
+        CURSES_OBJS=lib/libcurses.o ; fi ;;
+esac
+
+
+ITZ_CHECK_TYPE(__u32,linux/types.h)
+if test ${itz_cv_type___u32} = yes || test ${ac_cv_type___u32} = yes ; then
+    AC_DEFINE(HAVE___U32, 1, [define if the __u32 type exists either in sys/types.h or in linux/types.h])
+fi
+
+ITZ_SYS_ELF
+if test ${itz_cv_sys_elf} = yes && test x${ac_cv_prog_gcc} = xyes ; then
+    SHLIB=libgpm.so
+else
+    SHLIB=
+fi
+
+AC_CHECK_FUNCS(vsyslog syslog)
+AC_FUNC_ALLOCA
+
+case $with_curses in
+No|no|N|n) SHARED_LIBS=-lc ;;
+*)
+    SAVELIBS=$LIBS
+    LIBS=
+    for i in tinfo ncurses termcap termlib; do
+        if test x$LIBS = x; then
+            AC_CHECK_LIB($i, tputs)
+        else :; fi
+    done
+    TERMLIBS=$LIBS
+    LIBS=
+    for i in ncurses curses; do
+        if test x$LIBS = x; then
+            AC_CHECK_LIB($i, wgetch,,,$TERMLIBS)
+        else :; fi
+    done
+    SHARED_LIBS="-lc"
+    LIBS=$SAVELIBS ;;
+esac    
+
+GPMXTERM=
+AC_SUBST(GPMXTERM)
+AC_SUBST(abi_lev)
+AC_SUBST(abi_full)
+AC_SUBST(EMACS)
+AC_SUBST(ELISP)
+AC_SUBST(SHLIB)
+AC_SUBST(PICFLAGS)
+AC_SUBST(SOLDFLAGS)
+AC_SUBST(LIBGPM_A)
+AC_SUBST(CURSES_OBJS)
+AC_SUBST(SHARED_LIBS)
+AC_SUBST(lispdir)
+AC_SUBST(release)
+AC_SUBST(release_date)
+
+CPPFLAGS="$CPPFLAGS "'-I$(srcdir) $(DEFS) -include headers/config.h -Wall -DSYSCONFDIR="\"$(sysconfdir)\"" -DSBINDIR="\"$(sbindir)\"" -D_GNU_SOURCE'
+LDFLAGS="$LDFLAGS "'-L$(srcdir)'
+
+dnl AC_DEFINE_UNQUOTED(SYSCONFDIR,"$sysconfdir")
+dnl AC_DEFINE_UNQUOTED(SBINDIR,"$sbindir")
+AC_OUTPUT(Makefile.include Makefile doc/Makefile src/Makefile contrib/Makefile doc/doc.gpm)
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/configure.ac.footer
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/configure.ac.footer	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/configure.ac.footer	(revision 5)
@@ -0,0 +1,157 @@
+AC_REVISION(configure.in,v 1.8 2012-10-26 nico)
+
+dnl Process this file with autoconf to produce a configure script.
+dnl written jan/1997 - T.E.Dickey <dickey@clark.net>
+
+AC_PREREQ(2.61)
+
+AC_CONFIG_SRCDIR([src/daemon/main.c])
+AC_CONFIG_AUX_DIR([config])
+AC_CONFIG_HEADER([src/headers/config.h])
+
+AC_CANONICAL_HOST
+
+dnl Make srcdir an absolute path.
+if test x$srcdir = x ; then
+        srcdir = `pwd`
+else
+        srcdir=`cd $srcdir && pwd`
+fi
+
+#
+# Versioning stuff
+#
+abi_lev="2"
+abi_age="1"
+abi_rev="0"
+abi_full="${abi_lev}.${abi_age}.${abi_rev}"
+
+AC_DEFINE_UNQUOTED([GPM_ABI_LEV], [$abi_lev], [Library level])
+AC_DEFINE_UNQUOTED([GPM_ABI_AGE], [$abi_age], [Library age])
+AC_DEFINE_UNQUOTED([GPM_ABI_REV], [$abi_rev], [Library revision])
+AC_DEFINE_UNQUOTED([GPM_ABI_FULL],["$abi_full"],[Full library version])
+
+#
+# Find programs
+#
+
+AC_PROG_CC
+AC_PROG_LIBTOOL
+AC_PROG_INSTALL
+AC_PROG_YACC
+AC_PROG_LN_S
+
+# check for programs.
+AC_PATH_PROG(DVIPS,dvips,no)
+AC_PATH_PROG(TEXI2HTML,texi2html,no)
+AC_PATH_PROG(TEX,tex,no)
+AC_PATH_PROG(TEXINDEX,texindex,no)
+AC_PATH_PROG(MAKEINFO,makeinfo,no)
+AC_PATH_PROG(DIFF,diff,no)
+AC_PATH_PROG(SED,sed,no)
+AC_PATH_PROG(emacs,emacs,no)
+
+if test ${ac_cv_path_emacs} = no ; then
+        EMACS=:
+        ELISP=
+else
+        EMACS=${ac_cv_path_emacs}
+        ELISP="emacs/t-mouse.el emacs/t-mouse.elc"
+fi
+
+if test $EMACS != : ; then
+        ITZ_PATH_SITE_LISP
+        lispdir=${itz_cv_path_site_lisp}
+else
+        lispdir='${datadir}/emacs/site-lisp'
+fi
+
+# Header-checks
+AC_CHECK_HEADERS(syslog.h linux/input.h linux/joystick.h ncurses.h ncurses/curses.h curses.h)
+AC_CHECK_HEADERS(sys/sysmacros.h linux/major.h linux/tty.h)
+
+# Required headers
+AC_CHECK_HEADERS(sys/socket.h,,[AC_MSG_ERROR([Required header file missing])])
+
+AC_ARG_ENABLE([static],
+[  --enable-static         build static libraries @<:@default=no@:>@])
+
+LIBGPM_A=
+
+AS_IF([test "x$enable_static" = "xyes"], [
+        LIBGPM_A=lib/libgpm.a
+])
+
+
+AC_ARG_WITH(curses,
+[  --without-curses        disable curses support even if curses found])
+
+CURSES_OBJS=
+
+case $with_curses in
+No|no|N|n) : ;;
+        *) if   test ${ac_cv_header_ncurses_h} = yes || 
+                test ${ac_cv_header_ncurses_curses_h} = yes ||
+                test ${ac_cv_header_curses_h} = yes ; then
+        CURSES_OBJS=lib/libcurses.o ; fi ;;
+esac
+
+
+ITZ_CHECK_TYPE(__u32,linux/types.h)
+if test ${itz_cv_type___u32} = yes || test ${ac_cv_type___u32} = yes ; then
+    AC_DEFINE(HAVE___U32, 1, [define if the __u32 type exists either in sys/types.h or in linux/types.h])
+fi
+
+ITZ_SYS_ELF
+if test ${itz_cv_sys_elf} = yes && test x${ac_cv_prog_gcc} = xyes ; then
+    SHLIB=libgpm.so
+else
+    SHLIB=
+fi
+
+AC_CHECK_FUNCS(vsyslog syslog)
+AC_FUNC_ALLOCA
+
+case $with_curses in
+No|no|N|n) SHARED_LIBS=-lc ;;
+*)
+    SAVELIBS=$LIBS
+    LIBS=
+    for i in tinfo ncurses termcap termlib; do
+        if test x$LIBS = x; then
+            AC_CHECK_LIB($i, tputs)
+        else :; fi
+    done
+    TERMLIBS=$LIBS
+    LIBS=
+    for i in ncurses curses; do
+        if test x$LIBS = x; then
+            AC_CHECK_LIB($i, wgetch,,,$TERMLIBS)
+        else :; fi
+    done
+    SHARED_LIBS="-lc"
+    LIBS=$SAVELIBS ;;
+esac    
+
+GPMXTERM=
+AC_SUBST(GPMXTERM)
+AC_SUBST(abi_lev)
+AC_SUBST(abi_full)
+AC_SUBST(EMACS)
+AC_SUBST(ELISP)
+AC_SUBST(SHLIB)
+AC_SUBST(PICFLAGS)
+AC_SUBST(SOLDFLAGS)
+AC_SUBST(LIBGPM_A)
+AC_SUBST(CURSES_OBJS)
+AC_SUBST(SHARED_LIBS)
+AC_SUBST(lispdir)
+AC_SUBST(release)
+AC_SUBST(release_date)
+
+CPPFLAGS="$CPPFLAGS "'-I$(srcdir) $(DEFS) -include headers/config.h -Wall -DSYSCONFDIR="\"$(sysconfdir)\"" -DSBINDIR="\"$(sbindir)\"" -D_GNU_SOURCE'
+LDFLAGS="$LDFLAGS "'-L$(srcdir)'
+
+dnl AC_DEFINE_UNQUOTED(SYSCONFDIR,"$sysconfdir")
+dnl AC_DEFINE_UNQUOTED(SBINDIR,"$sbindir")
+AC_OUTPUT(Makefile.include Makefile doc/Makefile src/Makefile contrib/Makefile doc/doc.gpm)
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/Makefile.in
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/Makefile.in	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/Makefile.in	(revision 5)
@@ -0,0 +1,191 @@
+#			-*-makefile-*- (gpm/src)
+#
+# Copyright 1994,1997  		rubini@linux.it
+# Copyright 1997       		dickey@clark.net
+# Copyright (C) 1998 		Ian Zimmerman <itz@rahul.net>
+# Copyright (C) 2001-2008 	Nico Schottelius <nico-gpm2008 at schottelius.org>
+#
+
+srcdir = @srcdir@
+top_builddir = ..
+
+include $(top_builddir)/Makefile.include
+
+# Main portion: regular build rules
+
+GSRC = mice.c twiddler.c synaptics.c 														\
+		daemon/add_mouse.c daemon/init_mice.c daemon/reset_mice.c					\
+		daemon/build_argv.c daemon/disable_paste.c daemon/do_client.c				\
+		daemon/do_selection.c daemon/get_console_size.c daemon/get_data.c			\
+		daemon/getmousedata.c daemon/gpm.c daemon/gpm-killed.c						\
+		daemon/header.c daemon/main.c daemon/old_main.c									\
+		daemon/open_console.c daemon/check_kill.c daemon/gpm_exited.c   			\
+		generic/isodigit.c generic/getsym.c      											\
+		daemon/processspecial.c daemon/processconn.c daemon/processmouse.c		\
+		daemon/processrequest.c daemon/selection_copy.c daemon/selection_paste.c\
+		daemon/cmdline.c daemon/loadlut.c daemon/find_mouse_by_name.c				\
+		daemon/usage.c daemon/check_uniqueness.c 											\
+		daemon/startup.c daemon/wait_text.c
+
+GOBJ = $(GSRC:.c=.o) report.o tools.o
+
+LSRC = lib/libcurses.c lib/liblow.c lib/libhigh.c lib/libxtra.c lib/report-lib.c
+
+LOBJ = $(LSRC:.c=.o) tools.o @CURSES_OBJS@
+
+PICS = $(LOBJ:.o=.lo)
+
+HDRS = gpm.h gpmInt.h twiddler.h synaptics.h message.h
+
+PSRC = prog/mev.c prog/hltest.c prog/mouse-test.c prog/disable-paste.c			\
+		 prog/display-buttons.c  prog/display-coords.c prog/get-versions.c
+
+POBJ = $(PSRC:.c=.o) prog/gpm-root.o
+
+PROG = $(POBJ:.o=)
+
+SRCS = $(GSRC) $(LSRC) $(PSRC) report.c
+
+DEFS  = @DEFS@ -DHAVE_CURSES_H -I lib/ncurses -I headers
+
+STRIP = -s
+
+### BUILD PROCESS
+
+# allow CFLAGS to be overriden from make command line
+# ideally one would never have to write this rule again, but the GNU
+# makefile standards are at cross-purposes: CFLAGS is reserved for
+# user-overridable flags, but it's also all the implicit rule looks at.
+
+# the prog rules are not very clean...
+prog/%.o: prog/%.c
+	$(CC) -I@srcdir@/headers @CPPFLAGS@ $(CPPFLAGS) @CFLAGS@ $(CFLAGS) -c -o $@ $<
+
+prog/%:	prog/%.o
+	$(CC) @LDFLAGS@ $(LDFLAGS) -o $@ $^ @LIBS@ $(LIBS)
+
+%.o: %.c
+	$(CC) @CPPFLAGS@ $(CPPFLAGS) @CFLAGS@ $(CFLAGS) -c -o $@ $<
+
+%.lo:	%.c
+	$(CC) @CPPFLAGS@ $(CPPFLAGS) @PICFLAGS@ @CFLAGS@ $(CFLAGS) -c -o $@ $<
+
+%:	%.o
+	$(CC) @LDFLAGS@ $(LDFLAGS) -o $@ $^ @LIBS@ $(LIBS)
+
+# old, unused, but good rule [dependings]
+#%.d: $(srcdir)/%.c
+#	$(SHELL) -ec '$(CC) -M $(GPMCPPFLAGS) $(CPPFLAGS) $< \
+#		| $(SED) '\''s/\($*\)\.o\([ :]*\)/\1.o \1.lo\2/g'\'' > $(DEPDIR)/$@'
+
+# Do it all!
+all:	gpm lib/libgpm.so.@abi_lev@ @LIBGPM_A@ $(PROG)
+
+gpm:	$(GOBJ)
+	$(CC) @LDFLAGS@ $(LDFLAGS) -o $@ $(GOBJ) @LIBS@ $(LIBS) -lm
+
+# construct dependings of sourcefiles and link sourcefiles
+$(DEPFILE) dep: prog/gpm-root.c
+   # make links in subdirectories
+	-@for cfiledirs in prog lib; do $(MKDIR) $$cfiledirs; \
+	cd $$cfiledirs; for cfiles in `echo $(srcdir)/$$cfiledirs/*.c`; \
+	do $(LN_S) $$cfiles 2>/dev/null; done; cd ..; done
+
+	# make links in srcdir
+	-@if [ "$(CURDIR)" != "$(srcdir)" ] ; then for cfiles in `echo $(srcdir)/*.c`; do $(LN_S) $$cfiles 2>/dev/null; done ; fi
+
+	# create dependencies
+	for DEPS in `echo *.c */*.c`; do \
+	$(CC) -I. -I $(srcdir) -M @CPPFLAGS@ $(CPPFLAGS) $$DEPS | \
+	$(SED) 's/^\(.*\)\.o\([ :]+\)/\1.o \1.lo\2/g' >> $(DEPFILE) ; done
+
+### INSTALL
+check:	all
+installdirs:
+
+install:	check 
+	$(INSTALL_PROGRAM) gpm $(sbindir)/gpm
+	if [ -f lib/libgpm.a ] ; then \
+	$(INSTALL_DATA) -m 644 lib/libgpm.a $(libdir)/libgpm.a ; \
+	fi
+	$(INSTALL_DATA) -m 644 $(srcdir)/headers/gpm.h $(includedir)/gpm.h
+	# POSIX requires the range of a for loop be nonempty and Bash
+	# 2.x goes along; unfortunately that means an additional
+	# headache in cases like this
+	if test "x@SHLIB@" != "x" ; then \
+		$(INSTALL_DATA) -m 644 lib/libgpm.so.@abi_full@ $(libdir)/libgpm.so.@abi_full@	;	\
+		cd $(libdir) && $(LN_S) -f libgpm.so.@abi_full@ libgpm.so.@abi_lev@ 					;	\
+      echo "WARNING: We installed a lib, you should now call ldconfig" 						; 	\
+      echo "f.i.: ldconfig -n -l $(libdir)/libgpm.so.@abi_full@" 								;	\
+      echo "Or to update everything just type ldconfig"											;	\
+	fi
+#			The unversioned files seems to be not needed -> correct me, if I am wrong.
+#			&& $(LN_S) -f libgpm.so.@abi_lev@  libgpm.so 											;	\
+
+   # prog/
+	for i in $(PROG); do \
+		$(INSTALL_PROGRAM) $$i $(bindir)/`echo $$i | sed 's,prog/,,'` ;\
+	done
+
+install-strip:
+	$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) $(STRIP)' install
+
+# Note: this leaves around /usr/lib/libgpm.so.1 and /usr/lib/libgpm.so.1.nn
+# This is probably the right thing, because programs may be linked to it
+uninstall:
+	rm -f $(bindir)/mev $(bindir)/gpm-root $(bindir)/disable-paste \
+	$(sbindir)/gpm $(libdir)/libgpm.a $(libdir)/libgpm.so $(includedir)/gpm.h 
+	for i in $(PROG); do \
+		rm -f $(bindir)/$$i ;\
+	done
+
+# Configure & unconfigure
+
+Makefile: Makefile.in
+	$(top_builddir)/config.status Makefile
+
+# Subdirectory prog/
+prog/gpm-root.c:	$(srcdir)/prog/gpm-root.y
+	$(YACC) $(YFLAGS) $< && mv y.tab.c prog/gpm-root.c
+
+# gpm-root needs an own rule, because gpm-root.c is not in $(srcdir)
+prog/gpm-root: prog/gpm-root.c lib/libgpm.so.@abi_lev@
+	$(CC) -I. @CPPFLAGS@ $(CPPFLAGS) @CFLAGS@ $(CFLAGS) -c -o $@.o $<
+	$(CC) @LDFLAGS@ $(LDFLAGS) -o $@ $@.o @LIBS@ $(LIBS) lib/libgpm.so.@abi_lev@
+
+prog/mouse-test:	prog/mouse-test.o mice.o twiddler.o synaptics.o prog/open_console.o
+	$(CC) @LDFLAGS@ $(LDFLAGS) -o $@ $^ @LIBS@ $(LIBS) -lm
+
+$(PROG):	lib/libgpm.so.@abi_lev@
+
+# Subdirectory lib/
+lib/libgpm.a:	$(LOBJ)
+	$(AR) rc lib/libgpm.a $(LOBJ)
+	$(RANLIB) lib/libgpm.a
+
+lib/libgpm.so.@abi_full@:	$(PICS)
+	$(CC) @SOLDFLAGS@libgpm.so.@abi_lev@ \
+	@LDFLAGS@ $(LDFLAGS) -o lib/libgpm.so.@abi_full@ $^ @LIBS@ @SHARED_LIBS@ $(LIBS)	
+lib/libgpm.so.@abi_lev@:	lib/libgpm.so.@abi_full@
+	$(LN_S) -f libgpm.so.@abi_full@ lib/libgpm.so.@abi_lev@
+# unneeded, isn't it?
+#lib/libgpm.so:	lib/libgpm.so.@abi_full@
+#	$(LN_S) -f libgpm.so.@abi_full@ lib/libgpm.so
+
+include $(DEPFILE)
+
+## Release / Dist
+
+
+## Cleanup
+clean:
+	rm -f gpm lib/libgpm.a lib/libgpm.so.* $(RDEPS)
+	rm -f core *~ $(GOBJ) $(LOBJ) $(POBJ) $(PICS) gpm-root.c $(DEPFILE)
+	rm -f $(PROG) $(POBJ) prog/gpm-root.c prog/open_console.o
+
+distclean: clean
+	rm -f headers/config.h headers/drivers.h \
+		Makefile $(DEPFILE)
+
+allclean: clean
+	rm -f headers/config.h.in
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/daemon/open_console.c
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/daemon/open_console.c	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/daemon/open_console.c	(revision 5)
@@ -0,0 +1,61 @@
+/*
+ * general purpose mouse (gpm)
+ *
+ * Copyright (c) 2008        Nico Schottelius <nico-gpm2008 at schottelius.org>
+ *
+ *   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 2 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, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ *
+ ********/
+
+#include <fcntl.h>                  /* open and co.      */
+#include <sys/stat.h>               /* stat()            */
+#include <sys/ioctl.h>              /* ioctl             */
+#include <sys/types.h>
+
+#ifdef HAVE_SYS_SYSMACROS_H
+#include <sys/sysmacros.h>          /* major() w/newer glibc */
+#endif
+
+/* Linux specific (to be outsourced in gpm2 */
+#include <linux/serial.h>           /* for serial console check */
+#include <asm/ioctls.h>            /* for serial console check */
+
+
+#include "headers/message.h"        /* messaging in gpm  */
+#include "headers/daemon.h"         /* daemon internals  */
+
+int open_console(const int mode)
+{
+   int                  fd;
+   int                  maj;
+   int                  twelve = 12;
+   struct serial_struct si;
+   struct stat          sb;
+
+   fd = open(option.consolename, mode);
+   if (fd != -1) {
+      fstat(fd, &sb);
+      maj = major(sb.st_rdev);
+      if (maj != 4 && (maj < 136 || maj > 143)) {
+          if (ioctl(fd, TIOCLINUX, &twelve) < 0) {
+              if (si.line > 0) {
+                  gpm_report(GPM_PR_OOPS,GPM_MESS_OPEN_SERIALCON);
+               }
+          }
+      }
+   } else
+      gpm_report(GPM_PR_OOPS,GPM_MESS_OPEN_CON);
+   return fd;
+}
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/daemon/startup.c
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/daemon/startup.c	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/daemon/startup.c	(revision 5)
@@ -0,0 +1,151 @@
+/*
+ * general purpose mouse support for Linux
+ *
+ * *Startup and Daemon functions*
+ *
+ * Copyright (c) 2002-2008    Nico Schottelius <nico@schottelius.org>
+ *
+ *   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 2 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, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ ********/
+
+#include <stdlib.h>     /* atexit() */
+#include <string.h>     /* strlen() */
+#include <errno.h>      /* errno */
+#include <unistd.h>     /* unlink,geteuid */
+#include <sys/types.h>  /* geteuid, mknod */
+#include <sys/stat.h>   /* mknod */
+#include <fcntl.h>      /* mknod */
+
+
+#include "headers/gpmInt.h"
+#include "headers/message.h"
+#include "headers/daemon.h"
+
+void startup(int argc, char **argv)
+{
+   int i, opt;
+
+   static struct {
+      char *in;
+      char *out;
+   } seq[] = {
+      {"123","01234567"},
+      {"132","02134657"},
+      {"213","01452367"}, /* warning: these must be readable as integers... */
+      {"231","02461357"},
+      {"312","04152637"},
+      {"321","04261537"},
+      {NULL,NULL}
+   };
+   
+   /* log to debug, who we are */
+   gpm_report(GPM_PR_DEBUG, GPM_MESS_VERSION);
+
+   /* basic settings */
+   option.run_status    = GPM_RUN_STARTUP;      /* 10,9,8,... let's go */
+   option.autodetect    = 0;                    /* no mouse autodection */
+   option.progname      = argv[0];              /* who we are */
+   option.consolename   = Gpm_get_console();    /* get consolename */
+
+   /* basic2: are not necessary for oops()ing, if not root */
+   option.no_mice       = 0;                    /* counts -m + -t */
+   option.micelist      = NULL;                 /* no mice found yet */
+   option.repeater      = 0;                    /* repeat data */
+   option.repeater_type = NULL;                 /* type of */
+
+
+   cmdline(argc, argv);                         /* parse command line */
+
+   if (geteuid() != 0) gpm_report(GPM_PR_OOPS,GPM_MESS_ROOT); /* root or exit */
+
+   /* Planned for gpm-1.30, but only with devfs */
+   /* if(option.autodetect) autodetect(); */
+
+   
+   /****************** OLD CODE from gpn.c ***********************/
+   
+   openlog(option.progname, LOG_PID,
+                  option.run_status != GPM_RUN_DEBUG ? LOG_DAEMON : LOG_USER);
+   loadlut(opt_lut);
+
+   if (option.repeater) {
+      if(mkfifo(GPM_NODE_FIFO,0666) && errno!=EEXIST)
+         gpm_report(GPM_PR_OOPS,GPM_MESS_CREATE_FIFO,GPM_NODE_FIFO);
+      if((fifofd=open(GPM_NODE_FIFO, O_RDWR|O_NONBLOCK)) < 0)
+         gpm_report(GPM_PR_OOPS, GPM_MESS_OPEN, GPM_NODE_FIFO);
+   }
+
+   /* duplicate initialization */
+   for (i=1; i <= 1+opt_double; i++) {
+      which_mouse=mouse_table+i; /* used to access options */
+      if ((which_mouse->opt_accel) < 1) exit(usage("acceleration"));
+      if ((which_mouse->opt_delta) < 2) exit(usage("delta"));
+      if (strlen((which_mouse->opt_sequence)) != 3 || atoi((which_mouse->opt_sequence))<100)
+         exit(usage("sequence"));
+      if ((which_mouse->opt_glidepoint_tap) > 3) exit(usage("glidepoint tap button"));
+      if ((which_mouse->opt_glidepoint_tap))
+         (which_mouse->opt_glidepoint_tap)=GPM_B_LEFT >> ((which_mouse->opt_glidepoint_tap)-1);
+
+      /* choose the sequence */
+      for (opt=0; seq[opt].in && strcmp(seq[opt].in,(which_mouse->opt_sequence)); opt++) ;
+      if(!seq[opt].in) exit(usage("button sequence"));
+      (which_mouse->opt_sequence)=strdup(seq[opt].out); /* I can rewrite on it */
+
+      /* look for the mouse type */
+      (which_mouse->m_type) = find_mouse_by_name((which_mouse->opt_type));
+      if (!(which_mouse->m_type)) /* not found */
+         exit(M_listTypes());
+   }
+
+   /* Check repeater status */
+   if (option.repeater) {
+      if (strcmp(option.repeater_type,"raw") == 0)
+         opt_rawrep = 1;
+      else {
+         /* look for the type */
+         repeated_type = find_mouse_by_name(option.repeater_type);
+
+         if(!repeated_type) exit(M_listTypes()); /* not found */
+
+         if (!(repeated_type->repeat_fun)) /* unsupported translation */
+            gpm_report(GPM_PR_OOPS,GPM_MESS_NO_REPEAT,option.repeater_type);
+      }
+   }
+
+   if (option.run_status == GPM_RUN_STARTUP ) { /* else is debugging */
+      if (daemon(0,0))
+         gpm_report(GPM_PR_OOPS,GPM_MESS_FORK_FAILED);   /* error  */
+
+      option.run_status = GPM_RUN_DAEMON; /* child  */
+   }
+
+   /* damon init: check whether we run or not, display message */
+   check_uniqueness();
+   gpm_report(GPM_PR_INFO,GPM_MESS_STARTED);
+
+   /* close extra fds */
+   if (option.run_status == GPM_RUN_STARTUP ) {
+       close(0);
+       close(1);
+       close(2);
+   }
+
+   //return mouse_table[1].fd; /* the second is handled in the main() */
+
+   /****************** OLD CODE from gpn.c  END ***********************/
+
+   init_mice(option.micelist);                  /* reads option.micelist */
+   atexit(gpm_exited);                          /* call gpm_exited at the end */
+}
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/daemon
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/daemon	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/daemon	(revision 5)

Property changes on: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/daemon
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/headers/daemon.h
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/headers/daemon.h	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/headers/daemon.h	(revision 5)
@@ -0,0 +1,240 @@
+/*
+ * Daemon internals
+ *
+ * Copyright (c) 2008    Nico Schottelius <nico-gpm2008 at schottelius.org>
+ *
+ *   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 2 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, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _GPM_DAEMON_H
+#define _GPM_DAEMON_H
+
+/*************************************************************************
+ * Includes
+ */
+#include "gpm.h"           /* Gpm_Event         */
+#include <sys/select.h>    /* fd_set            */
+
+/*************************************************************************
+ * Types / structures
+ */
+
+struct micetab {
+   struct micetab *next;
+   char *device;
+   char *protocol;
+   char *options;
+};
+
+struct options {
+   int            autodetect;          /* -u [aUtodetect..'A' is unavailable] */
+   int            no_mice;             /* number of mice                      */
+   int            repeater;            /* repeat data                         */
+   char           *repeater_type;      /* repeat data as which mouse type     */
+   int            run_status;          /* startup/daemon/debug                */
+   char           *progname;           /* hopefully gpm ;)                    */
+   struct micetab *micelist;           /* mice and their options              */
+   char           *consolename;        /* /dev/tty0 || /dev/vc/0              */
+};
+
+typedef struct Gpm_Cinfo {
+   Gpm_Connect data;
+   int fd;
+   struct Gpm_Cinfo *next;
+} Gpm_Cinfo;
+
+/* and this is the entry in the mouse-type table */
+typedef struct Gpm_Type {
+   char              *name;
+   char              *desc;      /* a descriptive line */
+   char              *synonyms;  /* extra names (the XFree name etc) as a list */
+   /* mouse specific event handler: */
+   int               (*fun)(Gpm_Event *state, unsigned char *data);
+
+   /* mouse specific initialisation function: */
+   struct Gpm_Type   *(*init)(int fd, unsigned short flags,
+                     struct Gpm_Type   *type, int argc, char **argv);
+
+   unsigned short    flags;
+   unsigned char     proto[4];
+   int               packetlen;
+   int               howmany;    /* how many bytes to read at a time */
+   int               getextra;   /* does it get an extra byte? (only mouseman) */
+   int               absolute;   /* flag indicating absolute pointing device */
+
+                     /* repeat this event into fd */
+   int               (*repeat_fun)(Gpm_Event *state, int fd);
+} Gpm_Type;
+
+/* this structure is used to hide the dual-mouse stuff */
+struct mouse_features {
+   char  *opt_type,
+         *opt_dev,
+         *opt_sequence;
+   int   opt_baud,
+         opt_sample,
+         opt_delta,
+         opt_accel,
+         opt_scale,
+         opt_scaley,
+         opt_time,
+         opt_cluster,
+         opt_three,
+         opt_glidepoint_tap;
+   char  *opt_options;           /* extra textual configuration */
+   Gpm_Type *m_type;
+   int fd;
+};
+
+/*************************************************************************
+ * Macros
+ */
+
+/* How many virtual consoles are managed? */
+#ifndef MAX_NR_CONSOLES
+#  define MAX_NR_CONSOLES 64 /* this is always sure */
+#endif
+
+#define MAX_VC    MAX_NR_CONSOLES  /* doesn't work before 1.3.77 */
+
+/* for adding a mouse; add_mouse */
+#define GPM_ADD_DEVICE        0
+#define GPM_ADD_TYPE          1
+#define GPM_ADD_OPTIONS       2
+
+/* all the default values */
+#define DEF_TYPE          "ms"
+#define DEF_DEV           NULL     /* use the type-related one */
+#define DEF_LUT   "-a-zA-Z0-9_./\300-\326\330-\366\370-\377"
+#define DEF_SEQUENCE     "123"     /* how buttons are reordered */
+#define DEF_BAUD          1200
+#define DEF_SAMPLE         100
+#define DEF_DELTA           25
+#define DEF_ACCEL            2
+#define DEF_SCALE           10
+#define DEF_TIME           250    /* time interval (ms) for multiple clicks */
+#define DEF_THREE            0    /* have three buttons? */
+#define DEF_KERNEL           0    /* no kernel module, by default */
+
+/* 10 on old computers (<=386), 0 on current machines */
+#define DEF_CLUSTER          0    /* maximum number of clustered events */
+
+#define DEF_TEST             0
+#define DEF_PTRDRAG          1    /* double or triple click */
+#define DEF_GLIDEPOINT_TAP   0    /* tapping emulates no buttons by default */
+
+
+
+/*************************************************************************
+ * Global variables
+ */
+
+extern char             *opt_lut;
+extern char             *opt_special;
+
+extern int              opt_resize;       /* not really an option          */
+extern time_t           opt_age_limit;
+extern struct options   option;           /* one should be enough for us   */
+extern int              mouse_argc[3];    /* 0 for default (unused)        */
+extern char           **mouse_argv[3];    /* and two mice                  */
+
+extern int              opt_aged,
+                        opt_ptrdrag,
+                        opt_test,
+                        opt_double;
+
+
+extern int              statusX,
+                        statusY,
+                        statusB,
+                        statusC;          /* clicks */
+extern int              fifofd;
+extern int              opt_rawrep;
+extern int              maxx,
+                        maxy;
+
+
+extern fd_set           selSet,
+                        readySet,
+                        connSet;
+extern int              eventFlag;
+extern struct winsize   win;
+
+extern Gpm_Cinfo       *cinfo[MAX_VC+1];
+
+extern struct mouse_features  mouse_table[3],
+                             *which_mouse;      /*the current one*/
+
+extern Gpm_Type         mice[];
+extern Gpm_Type         *repeated_type;
+
+extern time_t           last_selection_time;
+
+
+
+
+/*************************************************************************
+ * Functions
+ */
+
+char **build_argv(char *argv0, char *str, int *argcptr, char sep);
+void disable_paste(int vc);
+
+int   do_client(Gpm_Cinfo *cinfo, Gpm_Event *event);
+int   do_selection(Gpm_Event *event);
+
+void  get_console_size(Gpm_Event *ePtr);
+int   get_data(Gpm_Connect *where, int whence);
+char *getMouseData(int fd, Gpm_Type *type, int kd_mode);
+int   getsym(const unsigned char *p0, unsigned char *res);
+
+void  gpm_exited(void);
+void  gpm_killed(int signo);
+
+int   open_console(const int mode);
+int old_main();
+
+int processConn(int fd);
+int processMouse(int fd, Gpm_Event *event, Gpm_Type *type, int kd_mode);
+int processRequest(Gpm_Cinfo *ci, int vc);
+int processSpecial(Gpm_Event *event);
+
+void selection_copy(int x1, int y1, int x2, int y2, int mode);
+void selection_paste(void);
+
+void startup(int argc, char **argv);
+
+
+int wait_text(int *fdptr);
+
+/* meta-mouse functions */
+void add_mouse (int type, char *value);
+int  init_mice (struct micetab *micelist);
+int  reset_mice(struct micetab *micelist);
+
+/* gpn.c */
+void cmdline(int argc, char **argv);
+int giveInfo(int request, int fd);
+int loadlut(char *charset);
+int usage(char *whofailed);
+struct Gpm_Type *find_mouse_by_name(char *name);
+void check_uniqueness(void);
+void check_kill(void);
+
+/* gpm.c */
+int old_main();
+
+
+#endif
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/headers
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/headers	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/headers	(revision 5)

Property changes on: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/headers
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/libcurses.c
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/libcurses.c	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/libcurses.c	(revision 5)
@@ -0,0 +1,163 @@
+/*
+ * libcurses.c - client library - curses level (gpm-Linux)
+ *
+ * Copyright 1994,1995   rubini@linux.it (Alessandro Rubini)
+ * Copyright 2002        nico@schottelius.org (Nico Schottelius)
+ * 
+ * xterm management is mostly by Miguel de Icaza
+ *
+ *   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 2 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, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ ********/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>        /* select(); */
+#include <sys/time.h>      /* timeval */
+#include <sys/types.h>     /* socket() */
+
+#include "headers/gpmInt.h"
+
+#ifdef HAVE_NCURSES_H
+#include <ncurses.h>
+#else
+#ifdef HAVE_NCURSES_CURSES_H
+#include <ncurses/curses.h>
+#else
+#ifdef HAVE_CURSES_H
+#include <curses.h>
+#endif /* HAVE_CURSES_H */
+#endif /* HAVE_NCURSES_CURSES_H */
+#endif /* HAVE_NCURSES_H */
+
+/* If win != NULL, it must have been created by ncurses anyway.
+   Avoid circular library dependencies.  */
+#pragma weak wgetch
+#pragma weak stdscr
+
+#define GET(win) ((win && wgetch) ? wgetch(win) : getch())
+
+int Gpm_Wgetch(WINDOW *win)
+{
+fd_set selSet;
+int max, flag, result;
+int fd=STDIN_FILENO;
+static Gpm_Event ev;
+
+  if (!gpm_flag || gpm_fd==-1) return GET(win);
+  if (gpm_morekeys) return (*gpm_handler)(&ev,gpm_data);
+  gpm_hflag=0;
+
+  max = (gpm_fd>fd) ? gpm_fd : fd;
+
+/*...................................................................*/
+  if (gpm_fd>=0)                                            /* linux */
+    while(1)
+      {
+      if (gpm_visiblepointer) GPM_DRAWPOINTER(&ev);
+      do
+	{
+	FD_ZERO(&selSet);
+	FD_SET(fd,&selSet);
+	if (gpm_fd>-1)
+	  FD_SET(gpm_fd,&selSet);
+	gpm_timeout.tv_sec=SELECT_TIME;
+	flag=select(max+1,&selSet,(fd_set *)NULL,(fd_set *)NULL,&gpm_timeout);
+	}
+      while (!flag);
+
+      if (flag==-1)
+	continue;
+      
+      if (FD_ISSET(fd,&selSet))
+	return GET(win);
+      
+      if (Gpm_GetEvent(&ev) && gpm_handler
+	  && (result=(*gpm_handler)(&ev,gpm_data)))
+	{
+	gpm_hflag=1;
+	return result;
+	}
+      }
+  else
+/*...................................................................*/
+  if (gpm_fd==-2)                                           /* xterm */
+    {
+#define DELAY_MS 100
+    static struct timeval to={0,DELAY_MS*1000};
+    static fd_set selSet;
+/* JD patch 11/08/1998 */
+#define MAXNBPREVCHAR 4         /* I don't think more is usefull, JD */
+    static int nbprevchar=0, prevchar[MAXNBPREVCHAR];
+    extern int gpm_convert_event(char *data, Gpm_Event *event);
+    int c; unsigned char mdata[4];
+
+/* JD patch 11/08/1998 */
+  if (nbprevchar)  /* if there are some consumed char ... */
+        return prevchar[--nbprevchar];
+/* if ungetc() didn't suffice... */
+/*    if ((c=prevchar)!=EOF)
+      {
+      prevchar=EOF;
+      return c;
+      }
+*/
+
+    while(1)
+      {
+      do 
+	{
+	FD_ZERO(&selSet); FD_SET(fd,&selSet);
+	gpm_timeout.tv_sec=SELECT_TIME;
+	flag=select(fd+1,&selSet,(fd_set *)NULL,(fd_set *)NULL,&gpm_timeout);
+	}
+      while (!flag);
+
+      if ((c=GET(win))!=0x1b) return c;
+
+      /* escape: go on */
+      FD_ZERO(&selSet); FD_SET(fd,&selSet); to.tv_usec=DELAY_MS*1000;
+      if ((flag=select(fd+1,&selSet,(fd_set *)NULL,(fd_set *)NULL,&to))==0)
+	return c;
+      if ((c=GET(win))!='[')
+        {prevchar[nbprevchar++]=c; return 0x1B;}  /* patche par JD 11/08/1998 */
+	/* {ungetc(c,stdin); return 0x1B;} */
+
+      /* '[': go on */
+      FD_ZERO(&selSet); FD_SET(fd,&selSet); to.tv_usec=DELAY_MS*1000;
+
+      if ((flag=select(fd+1,&selSet,(fd_set *)NULL,(fd_set *)NULL,&to))==0)
+        {prevchar[nbprevchar++]=c; return 0x1B;}  /* patche par JD 11/08/1998 */
+	/* {ungetc(c,stdin); return 0x1B;} */
+
+      if ((c=GET(win))!='M')
+	/* patche par JD 11/08/1998 NOTICE: prevchar is a lifo !*/
+        {prevchar[nbprevchar++]=c; prevchar[nbprevchar++]='['; return 0x1B;}
+	/* {ungetc(c,stdin);prevchar='['; return 0x1B;} */
+
+
+      /* now, it surely is a mouse event */
+
+      for (c=0;c<3;c++) mdata[c]=GET(win);
+      gpm_convert_event(mdata,&ev);
+
+      if (gpm_handler && (result=(*gpm_handler)(&ev,gpm_data)))
+	{
+	gpm_hflag=1;
+	return result;
+	}
+      } /* while(1) */
+    }
+  return 0;
+}
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/ncurses/curses.h
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/ncurses/curses.h	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/ncurses/curses.h	(revision 5)
@@ -0,0 +1,2065 @@
+/****************************************************************************
+ * Copyright 2018-2019,2020 Thomas E. Dickey                                *
+ * Copyright 1998-2016,2017 Free Software Foundation, Inc.                  *
+ *                                                                          *
+ * Permission is hereby granted, free of charge, to any person obtaining a  *
+ * copy of this software and associated documentation files (the            *
+ * "Software"), to deal in the Software without restriction, including      *
+ * without limitation the rights to use, copy, modify, merge, publish,      *
+ * distribute, distribute with modifications, sublicense, and/or sell       *
+ * copies of the Software, and to permit persons to whom the Software is    *
+ * furnished to do so, subject to the following conditions:                 *
+ *                                                                          *
+ * The above copyright notice and this permission notice shall be included  *
+ * in all copies or substantial portions of the Software.                   *
+ *                                                                          *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
+ *                                                                          *
+ * Except as contained in this notice, the name(s) of the above copyright   *
+ * holders shall not be used in advertising or otherwise to promote the     *
+ * sale, use or other dealings in this Software without prior written       *
+ * authorization.                                                           *
+ ****************************************************************************/
+
+/****************************************************************************
+ *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
+ *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
+ *     and: Thomas E. Dickey                        1996-on                 *
+ ****************************************************************************/
+
+/* $Id: curses.h.in,v 1.269 2020/08/17 14:14:12 tom Exp $ */
+
+#ifndef __NCURSES_H
+#define __NCURSES_H
+
+#define CURSES 1
+#define CURSES_H 1
+
+/* These are defined only in curses.h, and are used for conditional compiles */
+#define NCURSES_VERSION_MAJOR 6
+#define NCURSES_VERSION_MINOR 2
+#define NCURSES_VERSION_PATCH 20201024
+
+/* This is defined in more than one ncurses header, for identification */
+#undef  NCURSES_VERSION
+#define NCURSES_VERSION "6.2"
+
+/*
+ * Identify the mouse encoding version.
+ */
+#define NCURSES_MOUSE_VERSION 2
+
+/*
+ * Definitions to facilitate DLL's.
+ */
+#include <ncurses_dll.h>
+
+#if 1
+#include <stdint.h>
+#endif
+
+/*
+ * User-definable tweak to disable the include of <stdbool.h>.
+ */
+#ifndef NCURSES_ENABLE_STDBOOL_H
+#define NCURSES_ENABLE_STDBOOL_H 1
+#endif
+
+/*
+ * NCURSES_ATTR_T is used to quiet compiler warnings when building ncurses
+ * configured using --disable-macros.
+ */
+#ifndef NCURSES_ATTR_T
+#define NCURSES_ATTR_T int
+#endif
+
+/*
+ * Expands to 'const' if ncurses is configured using --enable-const.  Note that
+ * doing so makes it incompatible with other implementations of X/Open Curses.
+ */
+#undef  NCURSES_CONST
+#define NCURSES_CONST const
+
+#undef NCURSES_INLINE
+#define NCURSES_INLINE inline
+
+/*
+ * The standard type used for color values, and for color-pairs.  The latter
+ * allows the curses library to enumerate the combinations of foreground and
+ * background colors used by an application, and is normally the product of the
+ * total foreground and background colors.
+ *
+ * X/Open uses "short" for both of these types, ultimately because they are
+ * numbers from the SVr4 terminal database, which uses 16-bit signed values.
+ */
+#undef	NCURSES_COLOR_T
+#define	NCURSES_COLOR_T short
+
+#undef	NCURSES_PAIRS_T
+#define	NCURSES_PAIRS_T short
+
+/*
+ * Definitions used to make WINDOW and similar structs opaque.
+ */
+#ifndef NCURSES_INTERNALS
+#define NCURSES_OPAQUE       0
+#define NCURSES_OPAQUE_FORM  0
+#define NCURSES_OPAQUE_MENU  0
+#define NCURSES_OPAQUE_PANEL 0
+#endif
+
+/*
+ * Definition used to optionally suppress wattr* macros to help with the
+ * transition from ncurses5 to ncurses6 by allowing the header files to
+ * be shared across development packages for ncursesw in both ABIs.
+ */
+#ifndef NCURSES_WATTR_MACROS
+#define NCURSES_WATTR_MACROS 1
+#endif
+
+/*
+ * The reentrant code relies on the opaque setting, but adds features.
+ */
+#ifndef NCURSES_REENTRANT
+#define NCURSES_REENTRANT 0
+#endif
+
+/*
+ * In certain environments, we must work around linker problems for data
+ */
+#undef NCURSES_BROKEN_LINKER
+#if 0
+#define NCURSES_BROKEN_LINKER 1
+#endif
+
+/*
+ * Control whether bindings for interop support are added.
+ */
+#undef	NCURSES_INTEROP_FUNCS
+#define	NCURSES_INTEROP_FUNCS 1
+
+/*
+ * The internal type used for window dimensions.
+ */
+#undef	NCURSES_SIZE_T
+#define	NCURSES_SIZE_T short
+
+/*
+ * Control whether tparm() supports varargs or fixed-parameter list.
+ */
+#undef NCURSES_TPARM_VARARGS
+#define NCURSES_TPARM_VARARGS 1
+
+/*
+ * Control type used for tparm's arguments.  While X/Open equates long and
+ * char* values, this is not always workable for 64-bit platforms.
+ */
+#undef NCURSES_TPARM_ARG
+#define NCURSES_TPARM_ARG intptr_t
+
+/*
+ * Control whether ncurses uses wcwidth() for checking width of line-drawing
+ * characters.
+ */
+#undef NCURSES_WCWIDTH_GRAPHICS
+#define NCURSES_WCWIDTH_GRAPHICS 1
+
+/*
+ * NCURSES_CH_T is used in building the library, but not used otherwise in
+ * this header file, since that would make the normal/wide-character versions
+ * of the header incompatible.
+ */
+#undef	NCURSES_CH_T
+#define NCURSES_CH_T cchar_t
+
+#if 1 && defined(_LP64)
+typedef unsigned chtype;
+typedef unsigned mmask_t;
+#else
+typedef unsigned long chtype;
+typedef unsigned long mmask_t;
+#endif
+
+/*
+ * We need FILE, etc.  Include this before checking any feature symbols.
+ */
+#include <stdio.h>
+
+/*
+ * With XPG4, you must define _XOPEN_SOURCE_EXTENDED, it is redundant (or
+ * conflicting) when _XOPEN_SOURCE is 500 or greater.  If NCURSES_WIDECHAR is
+ * not already defined, e.g., if the platform relies upon nonstandard feature
+ * test macros, define it at this point if the standard feature test macros
+ * indicate that it should be defined.
+ */
+#ifndef NCURSES_WIDECHAR
+#if defined(_XOPEN_SOURCE_EXTENDED) || (defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0 >= 500))
+#define NCURSES_WIDECHAR 1
+#else
+#define NCURSES_WIDECHAR 0
+#endif
+#endif /* NCURSES_WIDECHAR */
+
+#include <stdarg.h>	/* we need va_list */
+#if NCURSES_WIDECHAR
+#include <stddef.h>	/* we want wchar_t */
+#endif
+
+/* X/Open and SVr4 specify that curses implements 'bool'.  However, C++ may also
+ * implement it.  If so, we must use the C++ compiler's type to avoid conflict
+ * with other interfaces.
+ *
+ * A further complication is that <stdbool.h> may declare 'bool' to be a
+ * different type, such as an enum which is not necessarily compatible with
+ * C++.  If we have <stdbool.h>, make 'bool' a macro, so users may #undef it.
+ * Otherwise, let it remain a typedef to avoid conflicts with other #define's.
+ * In either case, make a typedef for NCURSES_BOOL which can be used if needed
+ * from either C or C++.
+ */
+
+#undef TRUE
+#define TRUE    1
+
+#undef FALSE
+#define FALSE   0
+
+typedef unsigned char NCURSES_BOOL;
+
+#if defined(__cplusplus)	/* __cplusplus, etc. */
+
+/* use the C++ compiler's bool type */
+#define NCURSES_BOOL bool
+
+#else			/* c89, c99, etc. */
+
+#if NCURSES_ENABLE_STDBOOL_H
+#include <stdbool.h>
+/* use whatever the C compiler decides bool really is */
+#define NCURSES_BOOL bool
+#else
+/* there is no predefined bool - use our own */
+#undef bool
+#define bool NCURSES_BOOL
+#endif
+
+#endif /* !__cplusplus, etc. */
+
+#ifdef __cplusplus
+extern "C" {
+#define NCURSES_CAST(type,value) static_cast<type>(value)
+#else
+#define NCURSES_CAST(type,value) (type)(value)
+#endif
+
+#define NCURSES_OK_ADDR(p) (0 != NCURSES_CAST(const void *, (p)))
+
+/*
+ * X/Open attributes.  In the ncurses implementation, they are identical to the
+ * A_ attributes.
+ */
+#define WA_ATTRIBUTES	A_ATTRIBUTES
+#define WA_NORMAL	A_NORMAL
+#define WA_STANDOUT	A_STANDOUT
+#define WA_UNDERLINE	A_UNDERLINE
+#define WA_REVERSE	A_REVERSE
+#define WA_BLINK	A_BLINK
+#define WA_DIM		A_DIM
+#define WA_BOLD		A_BOLD
+#define WA_ALTCHARSET	A_ALTCHARSET
+#define WA_INVIS	A_INVIS
+#define WA_PROTECT	A_PROTECT
+#define WA_HORIZONTAL	A_HORIZONTAL
+#define WA_LEFT		A_LEFT
+#define WA_LOW		A_LOW
+#define WA_RIGHT	A_RIGHT
+#define WA_TOP		A_TOP
+#define WA_VERTICAL	A_VERTICAL
+
+#if 1
+#define WA_ITALIC	A_ITALIC	/* ncurses extension */
+#endif
+
+/* colors */
+#define COLOR_BLACK	0
+#define COLOR_RED	1
+#define COLOR_GREEN	2
+#define COLOR_YELLOW	3
+#define COLOR_BLUE	4
+#define COLOR_MAGENTA	5
+#define COLOR_CYAN	6
+#define COLOR_WHITE	7
+
+/* line graphics */
+
+#if 0 || NCURSES_REENTRANT
+NCURSES_WRAPPED_VAR(chtype*, acs_map);
+#define acs_map NCURSES_PUBLIC_VAR(acs_map())
+#else
+extern NCURSES_EXPORT_VAR(chtype) acs_map[];
+#endif
+
+#define NCURSES_ACS(c)	(acs_map[NCURSES_CAST(unsigned char,(c))])
+
+/* VT100 symbols begin here */
+#define ACS_ULCORNER	NCURSES_ACS('l') /* upper left corner */
+#define ACS_LLCORNER	NCURSES_ACS('m') /* lower left corner */
+#define ACS_URCORNER	NCURSES_ACS('k') /* upper right corner */
+#define ACS_LRCORNER	NCURSES_ACS('j') /* lower right corner */
+#define ACS_LTEE	NCURSES_ACS('t') /* tee pointing right */
+#define ACS_RTEE	NCURSES_ACS('u') /* tee pointing left */
+#define ACS_BTEE	NCURSES_ACS('v') /* tee pointing up */
+#define ACS_TTEE	NCURSES_ACS('w') /* tee pointing down */
+#define ACS_HLINE	NCURSES_ACS('q') /* horizontal line */
+#define ACS_VLINE	NCURSES_ACS('x') /* vertical line */
+#define ACS_PLUS	NCURSES_ACS('n') /* large plus or crossover */
+#define ACS_S1		NCURSES_ACS('o') /* scan line 1 */
+#define ACS_S9		NCURSES_ACS('s') /* scan line 9 */
+#define ACS_DIAMOND	NCURSES_ACS('`') /* diamond */
+#define ACS_CKBOARD	NCURSES_ACS('a') /* checker board (stipple) */
+#define ACS_DEGREE	NCURSES_ACS('f') /* degree symbol */
+#define ACS_PLMINUS	NCURSES_ACS('g') /* plus/minus */
+#define ACS_BULLET	NCURSES_ACS('~') /* bullet */
+/* Teletype 5410v1 symbols begin here */
+#define ACS_LARROW	NCURSES_ACS(',') /* arrow pointing left */
+#define ACS_RARROW	NCURSES_ACS('+') /* arrow pointing right */
+#define ACS_DARROW	NCURSES_ACS('.') /* arrow pointing down */
+#define ACS_UARROW	NCURSES_ACS('-') /* arrow pointing up */
+#define ACS_BOARD	NCURSES_ACS('h') /* board of squares */
+#define ACS_LANTERN	NCURSES_ACS('i') /* lantern symbol */
+#define ACS_BLOCK	NCURSES_ACS('0') /* solid square block */
+/*
+ * These aren't documented, but a lot of System Vs have them anyway
+ * (you can spot pprryyzz{{||}} in a lot of AT&T terminfo strings).
+ * The ACS_names may not match AT&T's, our source didn't know them.
+ */
+#define ACS_S3		NCURSES_ACS('p') /* scan line 3 */
+#define ACS_S7		NCURSES_ACS('r') /* scan line 7 */
+#define ACS_LEQUAL	NCURSES_ACS('y') /* less/equal */
+#define ACS_GEQUAL	NCURSES_ACS('z') /* greater/equal */
+#define ACS_PI		NCURSES_ACS('{') /* Pi */
+#define ACS_NEQUAL	NCURSES_ACS('|') /* not equal */
+#define ACS_STERLING	NCURSES_ACS('}') /* UK pound sign */
+
+/*
+ * Line drawing ACS names are of the form ACS_trbl, where t is the top, r
+ * is the right, b is the bottom, and l is the left.  t, r, b, and l might
+ * be B (blank), S (single), D (double), or T (thick).  The subset defined
+ * here only uses B and S.
+ */
+#define ACS_BSSB	ACS_ULCORNER
+#define ACS_SSBB	ACS_LLCORNER
+#define ACS_BBSS	ACS_URCORNER
+#define ACS_SBBS	ACS_LRCORNER
+#define ACS_SBSS	ACS_RTEE
+#define ACS_SSSB	ACS_LTEE
+#define ACS_SSBS	ACS_BTEE
+#define ACS_BSSS	ACS_TTEE
+#define ACS_BSBS	ACS_HLINE
+#define ACS_SBSB	ACS_VLINE
+#define ACS_SSSS	ACS_PLUS
+
+#undef	ERR
+#define ERR     (-1)
+
+#undef	OK
+#define OK      (0)
+
+/* values for the _flags member */
+#define _SUBWIN         0x01	/* is this a sub-window? */
+#define _ENDLINE        0x02	/* is the window flush right? */
+#define _FULLWIN        0x04	/* is the window full-screen? */
+#define _SCROLLWIN      0x08	/* bottom edge is at screen bottom? */
+#define _ISPAD	        0x10	/* is this window a pad? */
+#define _HASMOVED       0x20	/* has cursor moved since last refresh? */
+#define _WRAPPED        0x40	/* cursor was just wrappped */
+
+/*
+ * this value is used in the firstchar and lastchar fields to mark
+ * unchanged lines
+ */
+#define _NOCHANGE       -1
+
+/*
+ * this value is used in the oldindex field to mark lines created by insertions
+ * and scrolls.
+ */
+#define _NEWINDEX	-1
+
+typedef struct screen  SCREEN;
+typedef struct _win_st WINDOW;
+
+typedef	chtype	attr_t;		/* ...must be at least as wide as chtype */
+
+#if NCURSES_WIDECHAR
+
+#if 0
+#ifdef mblen			/* libutf8.h defines it w/o undefining first */
+#undef mblen
+#endif
+#include <libutf8.h>
+#endif
+
+#if 1
+#include <wchar.h>		/* ...to get mbstate_t, etc. */
+#endif
+
+#if 0
+typedef unsigned short wchar_t1;
+#endif
+
+#if 0
+typedef unsigned int wint_t1;
+#endif
+
+/*
+ * cchar_t stores an array of CCHARW_MAX wide characters.  The first is
+ * normally a spacing character.  The others are non-spacing.  If those
+ * (spacing and nonspacing) do not fill the array, a null L'\0' follows.
+ * Otherwise, a null is assumed to follow when extracting via getcchar().
+ */
+#define CCHARW_MAX	5
+typedef struct
+{
+    attr_t	attr;
+    wchar_t	chars[CCHARW_MAX];
+#if 1
+#undef NCURSES_EXT_COLORS
+#define NCURSES_EXT_COLORS 20201024
+    int		ext_color;	/* color pair, must be more than 16-bits */
+#endif
+}
+cchar_t;
+
+#endif /* NCURSES_WIDECHAR */
+
+#if !NCURSES_OPAQUE
+struct ldat;
+
+struct _win_st
+{
+	NCURSES_SIZE_T _cury, _curx; /* current cursor position */
+
+	/* window location and size */
+	NCURSES_SIZE_T _maxy, _maxx; /* maximums of x and y, NOT window size */
+	NCURSES_SIZE_T _begy, _begx; /* screen coords of upper-left-hand corner */
+
+	short   _flags;		/* window state flags */
+
+	/* attribute tracking */
+	attr_t  _attrs;		/* current attribute for non-space character */
+	chtype  _bkgd;		/* current background char/attribute pair */
+
+	/* option values set by user */
+	bool	_notimeout;	/* no time out on function-key entry? */
+	bool	_clear;		/* consider all data in the window invalid? */
+	bool	_leaveok;	/* OK to not reset cursor on exit? */
+	bool	_scroll;	/* OK to scroll this window? */
+	bool	_idlok;		/* OK to use insert/delete line? */
+	bool	_idcok;		/* OK to use insert/delete char? */
+	bool	_immed;		/* window in immed mode? (not yet used) */
+	bool	_sync;		/* window in sync mode? */
+	bool	_use_keypad;	/* process function keys into KEY_ symbols? */
+	int	_delay;		/* 0 = nodelay, <0 = blocking, >0 = delay */
+
+	struct ldat *_line;	/* the actual line data */
+
+	/* global screen state */
+	NCURSES_SIZE_T _regtop;	/* top line of scrolling region */
+	NCURSES_SIZE_T _regbottom; /* bottom line of scrolling region */
+
+	/* these are used only if this is a sub-window */
+	int	_parx;		/* x coordinate of this window in parent */
+	int	_pary;		/* y coordinate of this window in parent */
+	WINDOW	*_parent;	/* pointer to parent if a sub-window */
+
+	/* these are used only if this is a pad */
+	struct pdat
+	{
+	    NCURSES_SIZE_T _pad_y,      _pad_x;
+	    NCURSES_SIZE_T _pad_top,    _pad_left;
+	    NCURSES_SIZE_T _pad_bottom, _pad_right;
+	} _pad;
+
+	NCURSES_SIZE_T _yoffset; /* real begy is _begy + _yoffset */
+
+#if NCURSES_WIDECHAR
+	cchar_t  _bkgrnd;	/* current background char/attribute pair */
+#if 1
+	int	_color;		/* current color-pair for non-space character */
+#endif
+#endif
+};
+#endif /* NCURSES_OPAQUE */
+
+/*
+ * GCC (and some other compilers) define '__attribute__'; we're using this
+ * macro to alert the compiler to flag inconsistencies in printf/scanf-like
+ * function calls.  Just in case '__attribute__' isn't defined, make a dummy.
+ * Old versions of G++ do not accept it anyway, at least not consistently with
+ * GCC.
+ */
+#if !(defined(__GNUC__) || defined(__GNUG__) || defined(__attribute__))
+#define __attribute__(p) /* nothing */
+#endif
+
+/*
+ * We cannot define these in ncurses_cfg.h, since they require parameters to be
+ * passed (that is non-portable).  If you happen to be using gcc with warnings
+ * enabled, define
+ *	GCC_PRINTF
+ *	GCC_SCANF
+ * to improve checking of calls to printw(), etc.
+ */
+#ifndef GCC_PRINTFLIKE
+#if defined(GCC_PRINTF) && !defined(printf)
+#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
+#else
+#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
+#endif
+#endif
+
+#ifndef GCC_SCANFLIKE
+#if defined(GCC_SCANF) && !defined(scanf)
+#define GCC_SCANFLIKE(fmt,var)  __attribute__((format(scanf,fmt,var)))
+#else
+#define GCC_SCANFLIKE(fmt,var)  /*nothing*/
+#endif
+#endif
+
+#ifndef	GCC_NORETURN
+#define	GCC_NORETURN /* nothing */
+#endif
+
+#ifndef	GCC_UNUSED
+#define	GCC_UNUSED /* nothing */
+#endif
+
+#undef  GCC_DEPRECATED
+#if (__GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 >= 2)) && !defined(NCURSES_INTERNALS)
+#define GCC_DEPRECATED(msg) __attribute__((deprecated))
+#else
+#define GCC_DEPRECATED(msg) /* nothing */
+#endif
+
+/*
+ * Curses uses a helper function.  Define our type for this to simplify
+ * extending it for the sp-funcs feature.
+ */
+typedef int (*NCURSES_OUTC)(int);
+
+/*
+ * Function prototypes.  This is the complete X/Open Curses list of required
+ * functions.  Those marked `generated' will have sources generated from the
+ * macro definitions later in this file, in order to satisfy XPG4.2
+ * requirements.
+ */
+
+extern NCURSES_EXPORT(int) addch (const chtype);			/* generated */
+extern NCURSES_EXPORT(int) addchnstr (const chtype *, int);		/* generated */
+extern NCURSES_EXPORT(int) addchstr (const chtype *);			/* generated */
+extern NCURSES_EXPORT(int) addnstr (const char *, int);			/* generated */
+extern NCURSES_EXPORT(int) addstr (const char *);			/* generated */
+extern NCURSES_EXPORT(int) attroff (NCURSES_ATTR_T);			/* generated */
+extern NCURSES_EXPORT(int) attron (NCURSES_ATTR_T);			/* generated */
+extern NCURSES_EXPORT(int) attrset (NCURSES_ATTR_T);			/* generated */
+extern NCURSES_EXPORT(int) attr_get (attr_t *, NCURSES_PAIRS_T *, void *);	/* generated */
+extern NCURSES_EXPORT(int) attr_off (attr_t, void *);			/* generated */
+extern NCURSES_EXPORT(int) attr_on (attr_t, void *);			/* generated */
+extern NCURSES_EXPORT(int) attr_set (attr_t, NCURSES_PAIRS_T, void *);		/* generated */
+extern NCURSES_EXPORT(int) baudrate (void);				/* implemented */
+extern NCURSES_EXPORT(int) beep  (void);				/* implemented */
+extern NCURSES_EXPORT(int) bkgd (chtype);				/* generated */
+extern NCURSES_EXPORT(void) bkgdset (chtype);				/* generated */
+extern NCURSES_EXPORT(int) border (chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);	/* generated */
+extern NCURSES_EXPORT(int) box (WINDOW *, chtype, chtype);		/* generated */
+extern NCURSES_EXPORT(bool) can_change_color (void);			/* implemented */
+extern NCURSES_EXPORT(int) cbreak (void);				/* implemented */
+extern NCURSES_EXPORT(int) chgat (int, attr_t, NCURSES_PAIRS_T, const void *);	/* generated */
+extern NCURSES_EXPORT(int) clear (void);				/* generated */
+extern NCURSES_EXPORT(int) clearok (WINDOW *,bool);			/* implemented */
+extern NCURSES_EXPORT(int) clrtobot (void);				/* generated */
+extern NCURSES_EXPORT(int) clrtoeol (void);				/* generated */
+extern NCURSES_EXPORT(int) color_content (NCURSES_COLOR_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*,NCURSES_COLOR_T*);	/* implemented */
+extern NCURSES_EXPORT(int) color_set (NCURSES_PAIRS_T,void*);			/* generated */
+extern NCURSES_EXPORT(int) COLOR_PAIR (int);				/* generated */
+extern NCURSES_EXPORT(int) copywin (const WINDOW*,WINDOW*,int,int,int,int,int,int,int);	/* implemented */
+extern NCURSES_EXPORT(int) curs_set (int);				/* implemented */
+extern NCURSES_EXPORT(int) def_prog_mode (void);			/* implemented */
+extern NCURSES_EXPORT(int) def_shell_mode (void);			/* implemented */
+extern NCURSES_EXPORT(int) delay_output (int);				/* implemented */
+extern NCURSES_EXPORT(int) delch (void);				/* generated */
+extern NCURSES_EXPORT(void) delscreen (SCREEN *);			/* implemented */
+extern NCURSES_EXPORT(int) delwin (WINDOW *);				/* implemented */
+extern NCURSES_EXPORT(int) deleteln (void);				/* generated */
+extern NCURSES_EXPORT(WINDOW *) derwin (WINDOW *,int,int,int,int);	/* implemented */
+extern NCURSES_EXPORT(int) doupdate (void);				/* implemented */
+extern NCURSES_EXPORT(WINDOW *) dupwin (WINDOW *);			/* implemented */
+extern NCURSES_EXPORT(int) echo (void);					/* implemented */
+extern NCURSES_EXPORT(int) echochar (const chtype);			/* generated */
+extern NCURSES_EXPORT(int) erase (void);				/* generated */
+extern NCURSES_EXPORT(int) endwin (void);				/* implemented */
+extern NCURSES_EXPORT(char) erasechar (void);				/* implemented */
+extern NCURSES_EXPORT(void) filter (void);				/* implemented */
+extern NCURSES_EXPORT(int) flash (void);				/* implemented */
+extern NCURSES_EXPORT(int) flushinp (void);				/* implemented */
+extern NCURSES_EXPORT(chtype) getbkgd (WINDOW *);			/* generated */
+extern NCURSES_EXPORT(int) getch (void);				/* generated */
+extern NCURSES_EXPORT(int) getnstr (char *, int);			/* generated */
+extern NCURSES_EXPORT(int) getstr (char *);				/* generated */
+extern NCURSES_EXPORT(WINDOW *) getwin (FILE *);			/* implemented */
+extern NCURSES_EXPORT(int) halfdelay (int);				/* implemented */
+extern NCURSES_EXPORT(bool) has_colors (void);				/* implemented */
+extern NCURSES_EXPORT(bool) has_ic (void);				/* implemented */
+extern NCURSES_EXPORT(bool) has_il (void);				/* implemented */
+extern NCURSES_EXPORT(int) hline (chtype, int);				/* generated */
+extern NCURSES_EXPORT(void) idcok (WINDOW *, bool);			/* implemented */
+extern NCURSES_EXPORT(int) idlok (WINDOW *, bool);			/* implemented */
+extern NCURSES_EXPORT(void) immedok (WINDOW *, bool);			/* implemented */
+extern NCURSES_EXPORT(chtype) inch (void);				/* generated */
+extern NCURSES_EXPORT(int) inchnstr (chtype *, int);			/* generated */
+extern NCURSES_EXPORT(int) inchstr (chtype *);				/* generated */
+extern NCURSES_EXPORT(WINDOW *) initscr (void);				/* implemented */
+extern NCURSES_EXPORT(int) init_color (NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T);	/* implemented */
+extern NCURSES_EXPORT(int) init_pair (NCURSES_PAIRS_T,NCURSES_COLOR_T,NCURSES_COLOR_T);		/* implemented */
+extern NCURSES_EXPORT(int) innstr (char *, int);			/* generated */
+extern NCURSES_EXPORT(int) insch (chtype);				/* generated */
+extern NCURSES_EXPORT(int) insdelln (int);				/* generated */
+extern NCURSES_EXPORT(int) insertln (void);				/* generated */
+extern NCURSES_EXPORT(int) insnstr (const char *, int);			/* generated */
+extern NCURSES_EXPORT(int) insstr (const char *);			/* generated */
+extern NCURSES_EXPORT(int) instr (char *);				/* generated */
+extern NCURSES_EXPORT(int) intrflush (WINDOW *,bool);			/* implemented */
+extern NCURSES_EXPORT(bool) isendwin (void);				/* implemented */
+extern NCURSES_EXPORT(bool) is_linetouched (WINDOW *,int);		/* implemented */
+extern NCURSES_EXPORT(bool) is_wintouched (WINDOW *);			/* implemented */
+extern NCURSES_EXPORT(NCURSES_CONST char *) keyname (int);		/* implemented */
+extern NCURSES_EXPORT(int) keypad (WINDOW *,bool);			/* implemented */
+extern NCURSES_EXPORT(char) killchar (void);				/* implemented */
+extern NCURSES_EXPORT(int) leaveok (WINDOW *,bool);			/* implemented */
+extern NCURSES_EXPORT(char *) longname (void);				/* implemented */
+extern NCURSES_EXPORT(int) meta (WINDOW *,bool);			/* implemented */
+extern NCURSES_EXPORT(int) move (int, int);				/* generated */
+extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);		/* generated */
+extern NCURSES_EXPORT(int) mvaddchnstr (int, int, const chtype *, int);	/* generated */
+extern NCURSES_EXPORT(int) mvaddchstr (int, int, const chtype *);	/* generated */
+extern NCURSES_EXPORT(int) mvaddnstr (int, int, const char *, int);	/* generated */
+extern NCURSES_EXPORT(int) mvaddstr (int, int, const char *);		/* generated */
+extern NCURSES_EXPORT(int) mvchgat (int, int, int, attr_t, NCURSES_PAIRS_T, const void *);	/* generated */
+extern NCURSES_EXPORT(int) mvcur (int,int,int,int);			/* implemented */
+extern NCURSES_EXPORT(int) mvdelch (int, int);				/* generated */
+extern NCURSES_EXPORT(int) mvderwin (WINDOW *, int, int);		/* implemented */
+extern NCURSES_EXPORT(int) mvgetch (int, int);				/* generated */
+extern NCURSES_EXPORT(int) mvgetnstr (int, int, char *, int);		/* generated */
+extern NCURSES_EXPORT(int) mvgetstr (int, int, char *);			/* generated */
+extern NCURSES_EXPORT(int) mvhline (int, int, chtype, int);		/* generated */
+extern NCURSES_EXPORT(chtype) mvinch (int, int);			/* generated */
+extern NCURSES_EXPORT(int) mvinchnstr (int, int, chtype *, int);	/* generated */
+extern NCURSES_EXPORT(int) mvinchstr (int, int, chtype *);		/* generated */
+extern NCURSES_EXPORT(int) mvinnstr (int, int, char *, int);		/* generated */
+extern NCURSES_EXPORT(int) mvinsch (int, int, chtype);			/* generated */
+extern NCURSES_EXPORT(int) mvinsnstr (int, int, const char *, int);	/* generated */
+extern NCURSES_EXPORT(int) mvinsstr (int, int, const char *);		/* generated */
+extern NCURSES_EXPORT(int) mvinstr (int, int, char *);			/* generated */
+extern NCURSES_EXPORT(int) mvprintw (int,int, const char *,...)		/* implemented */
+		GCC_PRINTFLIKE(3,4);
+extern NCURSES_EXPORT(int) mvscanw (int,int, const char *,...)		/* implemented */
+		GCC_SCANFLIKE(3,4);
+extern NCURSES_EXPORT(int) mvvline (int, int, chtype, int);		/* generated */
+extern NCURSES_EXPORT(int) mvwaddch (WINDOW *, int, int, const chtype);	/* generated */
+extern NCURSES_EXPORT(int) mvwaddchnstr (WINDOW *, int, int, const chtype *, int);/* generated */
+extern NCURSES_EXPORT(int) mvwaddchstr (WINDOW *, int, int, const chtype *);	/* generated */
+extern NCURSES_EXPORT(int) mvwaddnstr (WINDOW *, int, int, const char *, int);	/* generated */
+extern NCURSES_EXPORT(int) mvwaddstr (WINDOW *, int, int, const char *);	/* generated */
+extern NCURSES_EXPORT(int) mvwchgat (WINDOW *, int, int, int, attr_t, NCURSES_PAIRS_T, const void *);/* generated */
+extern NCURSES_EXPORT(int) mvwdelch (WINDOW *, int, int);		/* generated */
+extern NCURSES_EXPORT(int) mvwgetch (WINDOW *, int, int);		/* generated */
+extern NCURSES_EXPORT(int) mvwgetnstr (WINDOW *, int, int, char *, int);	/* generated */
+extern NCURSES_EXPORT(int) mvwgetstr (WINDOW *, int, int, char *);	/* generated */
+extern NCURSES_EXPORT(int) mvwhline (WINDOW *, int, int, chtype, int);	/* generated */
+extern NCURSES_EXPORT(int) mvwin (WINDOW *,int,int);			/* implemented */
+extern NCURSES_EXPORT(chtype) mvwinch (WINDOW *, int, int);			/* generated */
+extern NCURSES_EXPORT(int) mvwinchnstr (WINDOW *, int, int, chtype *, int);	/* generated */
+extern NCURSES_EXPORT(int) mvwinchstr (WINDOW *, int, int, chtype *);		/* generated */
+extern NCURSES_EXPORT(int) mvwinnstr (WINDOW *, int, int, char *, int);		/* generated */
+extern NCURSES_EXPORT(int) mvwinsch (WINDOW *, int, int, chtype);		/* generated */
+extern NCURSES_EXPORT(int) mvwinsnstr (WINDOW *, int, int, const char *, int);	/* generated */
+extern NCURSES_EXPORT(int) mvwinsstr (WINDOW *, int, int, const char *);	/* generated */
+extern NCURSES_EXPORT(int) mvwinstr (WINDOW *, int, int, char *);		/* generated */
+extern NCURSES_EXPORT(int) mvwprintw (WINDOW*,int,int, const char *,...)	/* implemented */
+		GCC_PRINTFLIKE(4,5);
+extern NCURSES_EXPORT(int) mvwscanw (WINDOW *,int,int, const char *,...)	/* implemented */
+		GCC_SCANFLIKE(4,5);
+extern NCURSES_EXPORT(int) mvwvline (WINDOW *,int, int, chtype, int);	/* generated */
+extern NCURSES_EXPORT(int) napms (int);					/* implemented */
+extern NCURSES_EXPORT(WINDOW *) newpad (int,int);			/* implemented */
+extern NCURSES_EXPORT(SCREEN *) newterm (const char *,FILE *,FILE *);	/* implemented */
+extern NCURSES_EXPORT(WINDOW *) newwin (int,int,int,int);		/* implemented */
+extern NCURSES_EXPORT(int) nl (void);					/* implemented */
+extern NCURSES_EXPORT(int) nocbreak (void);				/* implemented */
+extern NCURSES_EXPORT(int) nodelay (WINDOW *,bool);			/* implemented */
+extern NCURSES_EXPORT(int) noecho (void);				/* implemented */
+extern NCURSES_EXPORT(int) nonl (void);					/* implemented */
+extern NCURSES_EXPORT(void) noqiflush (void);				/* implemented */
+extern NCURSES_EXPORT(int) noraw (void);				/* implemented */
+extern NCURSES_EXPORT(int) notimeout (WINDOW *,bool);			/* implemented */
+extern NCURSES_EXPORT(int) overlay (const WINDOW*,WINDOW *);		/* implemented */
+extern NCURSES_EXPORT(int) overwrite (const WINDOW*,WINDOW *);		/* implemented */
+extern NCURSES_EXPORT(int) pair_content (NCURSES_PAIRS_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*);		/* implemented */
+extern NCURSES_EXPORT(int) PAIR_NUMBER (int);				/* generated */
+extern NCURSES_EXPORT(int) pechochar (WINDOW *, const chtype);		/* implemented */
+extern NCURSES_EXPORT(int) pnoutrefresh (WINDOW*,int,int,int,int,int,int);/* implemented */
+extern NCURSES_EXPORT(int) prefresh (WINDOW *,int,int,int,int,int,int);	/* implemented */
+extern NCURSES_EXPORT(int) printw (const char *,...)			/* implemented */
+		GCC_PRINTFLIKE(1,2);
+extern NCURSES_EXPORT(int) putwin (WINDOW *, FILE *);			/* implemented */
+extern NCURSES_EXPORT(void) qiflush (void);				/* implemented */
+extern NCURSES_EXPORT(int) raw (void);					/* implemented */
+extern NCURSES_EXPORT(int) redrawwin (WINDOW *);			/* generated */
+extern NCURSES_EXPORT(int) refresh (void);				/* generated */
+extern NCURSES_EXPORT(int) resetty (void);				/* implemented */
+extern NCURSES_EXPORT(int) reset_prog_mode (void);			/* implemented */
+extern NCURSES_EXPORT(int) reset_shell_mode (void);			/* implemented */
+extern NCURSES_EXPORT(int) ripoffline (int, int (*)(WINDOW *, int));	/* implemented */
+extern NCURSES_EXPORT(int) savetty (void);				/* implemented */
+extern NCURSES_EXPORT(int) scanw (const char *,...)			/* implemented */
+		GCC_SCANFLIKE(1,2);
+extern NCURSES_EXPORT(int) scr_dump (const char *);			/* implemented */
+extern NCURSES_EXPORT(int) scr_init (const char *);			/* implemented */
+extern NCURSES_EXPORT(int) scrl (int);					/* generated */
+extern NCURSES_EXPORT(int) scroll (WINDOW *);				/* generated */
+extern NCURSES_EXPORT(int) scrollok (WINDOW *,bool);			/* implemented */
+extern NCURSES_EXPORT(int) scr_restore (const char *);			/* implemented */
+extern NCURSES_EXPORT(int) scr_set (const char *);			/* implemented */
+extern NCURSES_EXPORT(int) setscrreg (int,int);				/* generated */
+extern NCURSES_EXPORT(SCREEN *) set_term (SCREEN *);			/* implemented */
+extern NCURSES_EXPORT(int) slk_attroff (const chtype);			/* implemented */
+extern NCURSES_EXPORT(int) slk_attr_off (const attr_t, void *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) slk_attron (const chtype);			/* implemented */
+extern NCURSES_EXPORT(int) slk_attr_on (attr_t,void*);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) slk_attrset (const chtype);			/* implemented */
+extern NCURSES_EXPORT(attr_t) slk_attr (void);				/* implemented */
+extern NCURSES_EXPORT(int) slk_attr_set (const attr_t,NCURSES_PAIRS_T,void*);	/* implemented */
+extern NCURSES_EXPORT(int) slk_clear (void);				/* implemented */
+extern NCURSES_EXPORT(int) slk_color (NCURSES_PAIRS_T);				/* implemented */
+extern NCURSES_EXPORT(int) slk_init (int);				/* implemented */
+extern NCURSES_EXPORT(char *) slk_label (int);				/* implemented */
+extern NCURSES_EXPORT(int) slk_noutrefresh (void);			/* implemented */
+extern NCURSES_EXPORT(int) slk_refresh (void);				/* implemented */
+extern NCURSES_EXPORT(int) slk_restore (void);				/* implemented */
+extern NCURSES_EXPORT(int) slk_set (int,const char *,int);		/* implemented */
+extern NCURSES_EXPORT(int) slk_touch (void);				/* implemented */
+extern NCURSES_EXPORT(int) standout (void);				/* generated */
+extern NCURSES_EXPORT(int) standend (void);				/* generated */
+extern NCURSES_EXPORT(int) start_color (void);				/* implemented */
+extern NCURSES_EXPORT(WINDOW *) subpad (WINDOW *, int, int, int, int);	/* implemented */
+extern NCURSES_EXPORT(WINDOW *) subwin (WINDOW *, int, int, int, int);	/* implemented */
+extern NCURSES_EXPORT(int) syncok (WINDOW *, bool);			/* implemented */
+extern NCURSES_EXPORT(chtype) termattrs (void);				/* implemented */
+extern NCURSES_EXPORT(char *) termname (void);				/* implemented */
+extern NCURSES_EXPORT(void) timeout (int);				/* generated */
+extern NCURSES_EXPORT(int) touchline (WINDOW *, int, int);		/* generated */
+extern NCURSES_EXPORT(int) touchwin (WINDOW *);				/* generated */
+extern NCURSES_EXPORT(int) typeahead (int);				/* implemented */
+extern NCURSES_EXPORT(int) ungetch (int);				/* implemented */
+extern NCURSES_EXPORT(int) untouchwin (WINDOW *);			/* generated */
+extern NCURSES_EXPORT(void) use_env (bool);				/* implemented */
+extern NCURSES_EXPORT(void) use_tioctl (bool);				/* implemented */
+extern NCURSES_EXPORT(int) vidattr (chtype);				/* implemented */
+extern NCURSES_EXPORT(int) vidputs (chtype, NCURSES_OUTC);		/* implemented */
+extern NCURSES_EXPORT(int) vline (chtype, int);				/* generated */
+extern NCURSES_EXPORT(int) vwprintw (WINDOW *, const char *,va_list) GCC_DEPRECATED(use vw_printw);	/* implemented */
+extern NCURSES_EXPORT(int) vw_printw (WINDOW *, const char *,va_list);	/* implemented */
+extern NCURSES_EXPORT(int) vwscanw (WINDOW *, const char *,va_list) GCC_DEPRECATED(use vw_scanw);	/* implemented */
+extern NCURSES_EXPORT(int) vw_scanw (WINDOW *, const char *,va_list);	/* implemented */
+extern NCURSES_EXPORT(int) waddch (WINDOW *, const chtype);		/* implemented */
+extern NCURSES_EXPORT(int) waddchnstr (WINDOW *,const chtype *,int);	/* implemented */
+extern NCURSES_EXPORT(int) waddchstr (WINDOW *,const chtype *);		/* generated */
+extern NCURSES_EXPORT(int) waddnstr (WINDOW *,const char *,int);	/* implemented */
+extern NCURSES_EXPORT(int) waddstr (WINDOW *,const char *);		/* generated */
+extern NCURSES_EXPORT(int) wattron (WINDOW *, int);			/* generated */
+extern NCURSES_EXPORT(int) wattroff (WINDOW *, int);			/* generated */
+extern NCURSES_EXPORT(int) wattrset (WINDOW *, int);			/* generated */
+extern NCURSES_EXPORT(int) wattr_get (WINDOW *, attr_t *, NCURSES_PAIRS_T *, void *);	/* generated */
+extern NCURSES_EXPORT(int) wattr_on (WINDOW *, attr_t, void *);		/* implemented */
+extern NCURSES_EXPORT(int) wattr_off (WINDOW *, attr_t, void *);	/* implemented */
+extern NCURSES_EXPORT(int) wattr_set (WINDOW *, attr_t, NCURSES_PAIRS_T, void *);	/* generated */
+extern NCURSES_EXPORT(int) wbkgd (WINDOW *, chtype);			/* implemented */
+extern NCURSES_EXPORT(void) wbkgdset (WINDOW *,chtype);			/* implemented */
+extern NCURSES_EXPORT(int) wborder (WINDOW *,chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);	/* implemented */
+extern NCURSES_EXPORT(int) wchgat (WINDOW *, int, attr_t, NCURSES_PAIRS_T, const void *);/* implemented */
+extern NCURSES_EXPORT(int) wclear (WINDOW *);				/* implemented */
+extern NCURSES_EXPORT(int) wclrtobot (WINDOW *);			/* implemented */
+extern NCURSES_EXPORT(int) wclrtoeol (WINDOW *);			/* implemented */
+extern NCURSES_EXPORT(int) wcolor_set (WINDOW*,NCURSES_PAIRS_T,void*);		/* implemented */
+extern NCURSES_EXPORT(void) wcursyncup (WINDOW *);			/* implemented */
+extern NCURSES_EXPORT(int) wdelch (WINDOW *);				/* implemented */
+extern NCURSES_EXPORT(int) wdeleteln (WINDOW *);			/* generated */
+extern NCURSES_EXPORT(int) wechochar (WINDOW *, const chtype);		/* implemented */
+extern NCURSES_EXPORT(int) werase (WINDOW *);				/* implemented */
+extern NCURSES_EXPORT(int) wgetch (WINDOW *);				/* implemented */
+extern NCURSES_EXPORT(int) wgetnstr (WINDOW *,char *,int);		/* implemented */
+extern NCURSES_EXPORT(int) wgetstr (WINDOW *, char *);			/* generated */
+extern NCURSES_EXPORT(int) whline (WINDOW *, chtype, int);		/* implemented */
+extern NCURSES_EXPORT(chtype) winch (WINDOW *);				/* implemented */
+extern NCURSES_EXPORT(int) winchnstr (WINDOW *, chtype *, int);		/* implemented */
+extern NCURSES_EXPORT(int) winchstr (WINDOW *, chtype *);		/* generated */
+extern NCURSES_EXPORT(int) winnstr (WINDOW *, char *, int);		/* implemented */
+extern NCURSES_EXPORT(int) winsch (WINDOW *, chtype);			/* implemented */
+extern NCURSES_EXPORT(int) winsdelln (WINDOW *,int);			/* implemented */
+extern NCURSES_EXPORT(int) winsertln (WINDOW *);			/* generated */
+extern NCURSES_EXPORT(int) winsnstr (WINDOW *, const char *,int);	/* implemented */
+extern NCURSES_EXPORT(int) winsstr (WINDOW *, const char *);		/* generated */
+extern NCURSES_EXPORT(int) winstr (WINDOW *, char *);			/* generated */
+extern NCURSES_EXPORT(int) wmove (WINDOW *,int,int);			/* implemented */
+extern NCURSES_EXPORT(int) wnoutrefresh (WINDOW *);			/* implemented */
+extern NCURSES_EXPORT(int) wprintw (WINDOW *, const char *,...)		/* implemented */
+		GCC_PRINTFLIKE(2,3);
+extern NCURSES_EXPORT(int) wredrawln (WINDOW *,int,int);		/* implemented */
+extern NCURSES_EXPORT(int) wrefresh (WINDOW *);				/* implemented */
+extern NCURSES_EXPORT(int) wscanw (WINDOW *, const char *,...)		/* implemented */
+		GCC_SCANFLIKE(2,3);
+extern NCURSES_EXPORT(int) wscrl (WINDOW *,int);			/* implemented */
+extern NCURSES_EXPORT(int) wsetscrreg (WINDOW *,int,int);		/* implemented */
+extern NCURSES_EXPORT(int) wstandout (WINDOW *);			/* generated */
+extern NCURSES_EXPORT(int) wstandend (WINDOW *);			/* generated */
+extern NCURSES_EXPORT(void) wsyncdown (WINDOW *);			/* implemented */
+extern NCURSES_EXPORT(void) wsyncup (WINDOW *);				/* implemented */
+extern NCURSES_EXPORT(void) wtimeout (WINDOW *,int);			/* implemented */
+extern NCURSES_EXPORT(int) wtouchln (WINDOW *,int,int,int);		/* implemented */
+extern NCURSES_EXPORT(int) wvline (WINDOW *,chtype,int);		/* implemented */
+
+/*
+ * These are also declared in <term.h>:
+ */
+extern NCURSES_EXPORT(int) tigetflag (const char *);			/* implemented */
+extern NCURSES_EXPORT(int) tigetnum (const char *);			/* implemented */
+extern NCURSES_EXPORT(char *) tigetstr (const char *);			/* implemented */
+extern NCURSES_EXPORT(int) putp (const char *);				/* implemented */
+
+#if NCURSES_TPARM_VARARGS
+extern NCURSES_EXPORT(char *) tparm (const char *, ...);		/* special */
+#else
+extern NCURSES_EXPORT(char *) tparm (const char *, NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG);	/* special */
+#endif
+
+extern NCURSES_EXPORT(char *) tiparm (const char *, ...);		/* special */
+
+/*
+ * These functions are not in X/Open, but we use them in macro definitions:
+ */
+extern NCURSES_EXPORT(int) getattrs (const WINDOW *);			/* generated */
+extern NCURSES_EXPORT(int) getcurx (const WINDOW *);			/* generated */
+extern NCURSES_EXPORT(int) getcury (const WINDOW *);			/* generated */
+extern NCURSES_EXPORT(int) getbegx (const WINDOW *);			/* generated */
+extern NCURSES_EXPORT(int) getbegy (const WINDOW *);			/* generated */
+extern NCURSES_EXPORT(int) getmaxx (const WINDOW *);			/* generated */
+extern NCURSES_EXPORT(int) getmaxy (const WINDOW *);			/* generated */
+extern NCURSES_EXPORT(int) getparx (const WINDOW *);			/* generated */
+extern NCURSES_EXPORT(int) getpary (const WINDOW *);			/* generated */
+
+/*
+ * vid_attr() was implemented originally based on a draft of X/Open curses.
+ */
+#if !NCURSES_WIDECHAR
+#define vid_attr(a,pair,opts) vidattr(a)
+#endif
+
+/*
+ * These functions are extensions - not in X/Open Curses.
+ */
+#if 1
+#undef  NCURSES_EXT_FUNCS
+#define NCURSES_EXT_FUNCS 20201024
+typedef int (*NCURSES_WINDOW_CB)(WINDOW *, void *);
+typedef int (*NCURSES_SCREEN_CB)(SCREEN *, void *);
+extern NCURSES_EXPORT(bool) is_term_resized (int, int);
+extern NCURSES_EXPORT(char *) keybound (int, int);
+extern NCURSES_EXPORT(const char *) curses_version (void);
+extern NCURSES_EXPORT(int) alloc_pair (int, int);
+extern NCURSES_EXPORT(int) assume_default_colors (int, int);
+extern NCURSES_EXPORT(int) define_key (const char *, int);
+extern NCURSES_EXPORT(int) extended_color_content(int, int *, int *, int *);
+extern NCURSES_EXPORT(int) extended_pair_content(int, int *, int *);
+extern NCURSES_EXPORT(int) extended_slk_color(int);
+extern NCURSES_EXPORT(int) find_pair (int, int);
+extern NCURSES_EXPORT(int) free_pair (int);
+extern NCURSES_EXPORT(int) get_escdelay (void);
+extern NCURSES_EXPORT(int) init_extended_color(int, int, int, int);
+extern NCURSES_EXPORT(int) init_extended_pair(int, int, int);
+extern NCURSES_EXPORT(int) key_defined (const char *);
+extern NCURSES_EXPORT(int) keyok (int, bool);
+extern NCURSES_EXPORT(void) reset_color_pairs (void);
+extern NCURSES_EXPORT(int) resize_term (int, int);
+extern NCURSES_EXPORT(int) resizeterm (int, int);
+extern NCURSES_EXPORT(int) set_escdelay (int);
+extern NCURSES_EXPORT(int) set_tabsize (int);
+extern NCURSES_EXPORT(int) use_default_colors (void);
+extern NCURSES_EXPORT(int) use_extended_names (bool);
+extern NCURSES_EXPORT(int) use_legacy_coding (int);
+extern NCURSES_EXPORT(int) use_screen (SCREEN *, NCURSES_SCREEN_CB, void *);
+extern NCURSES_EXPORT(int) use_window (WINDOW *, NCURSES_WINDOW_CB, void *);
+extern NCURSES_EXPORT(int) wresize (WINDOW *, int, int);
+extern NCURSES_EXPORT(void) nofilter(void);
+
+/*
+ * These extensions provide access to information stored in the WINDOW even
+ * when NCURSES_OPAQUE is set:
+ */
+extern NCURSES_EXPORT(WINDOW *) wgetparent (const WINDOW *);	/* generated */
+extern NCURSES_EXPORT(bool) is_cleared (const WINDOW *);	/* generated */
+extern NCURSES_EXPORT(bool) is_idcok (const WINDOW *);		/* generated */
+extern NCURSES_EXPORT(bool) is_idlok (const WINDOW *);		/* generated */
+extern NCURSES_EXPORT(bool) is_immedok (const WINDOW *);	/* generated */
+extern NCURSES_EXPORT(bool) is_keypad (const WINDOW *);		/* generated */
+extern NCURSES_EXPORT(bool) is_leaveok (const WINDOW *);	/* generated */
+extern NCURSES_EXPORT(bool) is_nodelay (const WINDOW *);	/* generated */
+extern NCURSES_EXPORT(bool) is_notimeout (const WINDOW *);	/* generated */
+extern NCURSES_EXPORT(bool) is_pad (const WINDOW *);		/* generated */
+extern NCURSES_EXPORT(bool) is_scrollok (const WINDOW *);	/* generated */
+extern NCURSES_EXPORT(bool) is_subwin (const WINDOW *);		/* generated */
+extern NCURSES_EXPORT(bool) is_syncok (const WINDOW *);		/* generated */
+extern NCURSES_EXPORT(int) wgetdelay (const WINDOW *);		/* generated */
+extern NCURSES_EXPORT(int) wgetscrreg (const WINDOW *, int *, int *); /* generated */
+
+#else
+#define curses_version() NCURSES_VERSION
+#endif
+
+/*
+ * Extra extension-functions, which pass a SCREEN pointer rather than using
+ * a global variable SP.
+ */
+#if 1
+#undef  NCURSES_SP_FUNCS
+#define NCURSES_SP_FUNCS 20201024
+#define NCURSES_SP_NAME(name) name##_sp
+
+/* Define the sp-funcs helper function */
+#define NCURSES_SP_OUTC NCURSES_SP_NAME(NCURSES_OUTC)
+typedef int (*NCURSES_SP_OUTC)(SCREEN*, int);
+
+extern NCURSES_EXPORT(SCREEN *) new_prescr (void); /* implemented:SP_FUNC */
+
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(baudrate) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(beep) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(can_change_color) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(cbreak) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(curs_set) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(color_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(delay_output) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(doupdate) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(echo) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(endwin) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(char) NCURSES_SP_NAME(erasechar) (SCREEN*);/* implemented:SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(filter) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flash) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flushinp) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(getwin) (SCREEN*, FILE *);			/* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(halfdelay) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_colors) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_ic) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_il) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_color) (SCREEN*, NCURSES_COLOR_T, NCURSES_COLOR_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_pair) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(intrflush) (SCREEN*, WINDOW*, bool);	/* implemented:SP_FUNC */
+extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(isendwin) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(NCURSES_CONST char *) NCURSES_SP_NAME(keyname) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(char) NCURSES_SP_NAME(killchar) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(longname) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mvcur) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(napms) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newpad) (SCREEN*, int, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(SCREEN *) NCURSES_SP_NAME(newterm) (SCREEN*, const char *, FILE *, FILE *); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newwin) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nl) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nocbreak) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noecho) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nonl) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(noqiflush) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noraw) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(pair_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(qiflush) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(raw) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resetty) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ripoffline) (SCREEN*, int, int (*)(WINDOW *, int));	/* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(savetty) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_init) (SCREEN*, const char *); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_restore) (SCREEN*, const char *); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_set) (SCREEN*, const char *); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attroff) (SCREEN*, const chtype); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attron) (SCREEN*, const chtype); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attrset) (SCREEN*, const chtype); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(slk_attr) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attr_set) (SCREEN*, const attr_t, NCURSES_PAIRS_T, void*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_clear) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_color) (SCREEN*, NCURSES_PAIRS_T); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_init) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(slk_label) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_noutrefresh) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_refresh) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_restore) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_set) (SCREEN*, int, const char *, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_touch) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(start_color) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(chtype) NCURSES_SP_NAME(termattrs) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(termname) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(typeahead) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ungetch) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_env) (SCREEN*, bool); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_tioctl) (SCREEN*, bool); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidattr) (SCREEN*, chtype);	/* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidputs) (SCREEN*, chtype, NCURSES_SP_OUTC); /* implemented:SP_FUNC */
+#if 1
+extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(keybound) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(alloc_pair) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(assume_default_colors) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(define_key) (SCREEN*, const char *, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_color_content) (SCREEN*, int, int *, int *, int *);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_pair_content) (SCREEN*, int, int *, int *);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_slk_color) (SCREEN*, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(get_escdelay) (SCREEN*);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(find_pair) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(free_pair) (SCREEN*, int); /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_extended_color) (SCREEN*, int, int, int, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_extended_pair) (SCREEN*, int, int, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(is_term_resized) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(key_defined) (SCREEN*, const char *);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(keyok) (SCREEN*, int, bool);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(nofilter) (SCREEN*); /* implemented */	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(reset_color_pairs) (SCREEN*); /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resize_term) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resizeterm) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_escdelay) (SCREEN*, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_tabsize) (SCREEN*, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_default_colors) (SCREEN*);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (SCREEN*, int);	/* implemented:EXT_SP_FUNC */
+#endif
+#else
+#undef  NCURSES_SP_FUNCS
+#define NCURSES_SP_FUNCS 0
+#define NCURSES_SP_NAME(name) name
+#define NCURSES_SP_OUTC NCURSES_OUTC
+#endif
+
+/* attributes */
+
+#define NCURSES_ATTR_SHIFT       8
+#define NCURSES_BITS(mask,shift) (NCURSES_CAST(chtype,(mask)) << ((shift) + NCURSES_ATTR_SHIFT))
+
+#define A_NORMAL	(1UL - 1UL)
+#define A_ATTRIBUTES	NCURSES_BITS(~(1UL - 1UL),0)
+#define A_CHARTEXT	(NCURSES_BITS(1UL,0) - 1UL)
+#define A_COLOR		NCURSES_BITS(((1UL) << 8) - 1UL,0)
+#define A_STANDOUT	NCURSES_BITS(1UL,8)
+#define A_UNDERLINE	NCURSES_BITS(1UL,9)
+#define A_REVERSE	NCURSES_BITS(1UL,10)
+#define A_BLINK		NCURSES_BITS(1UL,11)
+#define A_DIM		NCURSES_BITS(1UL,12)
+#define A_BOLD		NCURSES_BITS(1UL,13)
+#define A_ALTCHARSET	NCURSES_BITS(1UL,14)
+#define A_INVIS		NCURSES_BITS(1UL,15)
+#define A_PROTECT	NCURSES_BITS(1UL,16)
+#define A_HORIZONTAL	NCURSES_BITS(1UL,17)
+#define A_LEFT		NCURSES_BITS(1UL,18)
+#define A_LOW		NCURSES_BITS(1UL,19)
+#define A_RIGHT		NCURSES_BITS(1UL,20)
+#define A_TOP		NCURSES_BITS(1UL,21)
+#define A_VERTICAL	NCURSES_BITS(1UL,22)
+
+#if 1
+#define A_ITALIC	NCURSES_BITS(1UL,23)	/* ncurses extension */
+#endif
+
+/*
+ * Most of the pseudo functions are macros that either provide compatibility
+ * with older versions of curses, or provide inline functionality to improve
+ * performance.
+ */
+
+/*
+ * These pseudo functions are always implemented as macros:
+ */
+
+#define getyx(win,y,x)		(y = getcury(win), x = getcurx(win))
+#define getbegyx(win,y,x)	(y = getbegy(win), x = getbegx(win))
+#define getmaxyx(win,y,x)	(y = getmaxy(win), x = getmaxx(win))
+#define getparyx(win,y,x)	(y = getpary(win), x = getparx(win))
+
+#define getsyx(y,x) do { if (newscr) { \
+			     if (is_leaveok(newscr)) \
+				(y) = (x) = -1; \
+			     else \
+				 getyx(newscr,(y), (x)); \
+			} \
+		    } while(0)
+
+#define setsyx(y,x) do { if (newscr) { \
+			    if ((y) == -1 && (x) == -1) \
+				leaveok(newscr, TRUE); \
+			    else { \
+				leaveok(newscr, FALSE); \
+				wmove(newscr, (y), (x)); \
+			    } \
+			} \
+		    } while(0)
+
+#ifndef NCURSES_NOMACROS
+
+/*
+ * These miscellaneous pseudo functions are provided for compatibility:
+ */
+
+#define wgetstr(w, s)		wgetnstr(w, s, -1)
+#define getnstr(s, n)		wgetnstr(stdscr, s, (n))
+
+#define setterm(term)		setupterm(term, 1, (int *)0)
+
+#define fixterm()		reset_prog_mode()
+#define resetterm()		reset_shell_mode()
+#define saveterm()		def_prog_mode()
+#define crmode()		cbreak()
+#define nocrmode()		nocbreak()
+#define gettmode()
+
+/* It seems older SYSV curses versions define these */
+#if !NCURSES_OPAQUE
+#define getattrs(win)		NCURSES_CAST(int, NCURSES_OK_ADDR(win) ? (win)->_attrs : A_NORMAL)
+#define getcurx(win)		(NCURSES_OK_ADDR(win) ? (win)->_curx : ERR)
+#define getcury(win)		(NCURSES_OK_ADDR(win) ? (win)->_cury : ERR)
+#define getbegx(win)		(NCURSES_OK_ADDR(win) ? (win)->_begx : ERR)
+#define getbegy(win)		(NCURSES_OK_ADDR(win) ? (win)->_begy : ERR)
+#define getmaxx(win)		(NCURSES_OK_ADDR(win) ? ((win)->_maxx + 1) : ERR)
+#define getmaxy(win)		(NCURSES_OK_ADDR(win) ? ((win)->_maxy + 1) : ERR)
+#define getparx(win)		(NCURSES_OK_ADDR(win) ? (win)->_parx : ERR)
+#define getpary(win)		(NCURSES_OK_ADDR(win) ? (win)->_pary : ERR)
+#endif /* NCURSES_OPAQUE */
+
+#define wstandout(win)		(wattrset(win,A_STANDOUT))
+#define wstandend(win)		(wattrset(win,A_NORMAL))
+
+#define wattron(win,at)		wattr_on(win, NCURSES_CAST(attr_t, at), NULL)
+#define wattroff(win,at)	wattr_off(win, NCURSES_CAST(attr_t, at), NULL)
+
+#if !NCURSES_OPAQUE
+#if NCURSES_WATTR_MACROS
+#if NCURSES_WIDECHAR && 1
+#define wattrset(win,at) \
+	(NCURSES_OK_ADDR(win) \
+	  ? ((win)->_color = NCURSES_CAST(int, PAIR_NUMBER(at)), \
+	     (win)->_attrs = NCURSES_CAST(attr_t, at), \
+	     OK) \
+	  : ERR)
+#else
+#define wattrset(win,at) \
+	(NCURSES_OK_ADDR(win) \
+	  ? ((win)->_attrs = NCURSES_CAST(attr_t, at), \
+	     OK) \
+	  : ERR)
+#endif
+#endif /* NCURSES_WATTR_MACROS */
+#endif /* NCURSES_OPAQUE */
+
+#define scroll(win)		wscrl(win,1)
+
+#define touchwin(win)		wtouchln((win), 0, getmaxy(win), 1)
+#define touchline(win, s, c)	wtouchln((win), s, c, 1)
+#define untouchwin(win)		wtouchln((win), 0, getmaxy(win), 0)
+
+#define box(win, v, h)		wborder(win, v, v, h, h, 0, 0, 0, 0)
+#define border(ls, rs, ts, bs, tl, tr, bl, br)	wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br)
+#define hline(ch, n)		whline(stdscr, ch, (n))
+#define vline(ch, n)		wvline(stdscr, ch, (n))
+
+#define winstr(w, s)		winnstr(w, s, -1)
+#define winchstr(w, s)		winchnstr(w, s, -1)
+#define winsstr(w, s)		winsnstr(w, s, -1)
+
+#if !NCURSES_OPAQUE
+#define redrawwin(win)		wredrawln(win, 0, (NCURSES_OK_ADDR(win) ? (win)->_maxy+1 : -1))
+#endif /* NCURSES_OPAQUE */
+
+#define waddstr(win,str)	waddnstr(win,str,-1)
+#define waddchstr(win,str)	waddchnstr(win,str,-1)
+
+/*
+ * These apply to the first 256 color pairs.
+ */
+#define COLOR_PAIR(n)	(NCURSES_BITS((n), 0) & A_COLOR)
+#define PAIR_NUMBER(a)	(NCURSES_CAST(int,((NCURSES_CAST(unsigned long,(a)) & A_COLOR) >> NCURSES_ATTR_SHIFT)))
+
+/*
+ * pseudo functions for standard screen
+ */
+
+#define addch(ch)		waddch(stdscr,(ch))
+#define addchnstr(str,n)	waddchnstr(stdscr,(str),(n))
+#define addchstr(str)		waddchstr(stdscr,(str))
+#define addnstr(str,n)		waddnstr(stdscr,(str),(n))
+#define addstr(str)		waddnstr(stdscr,(str),-1)
+#define attr_get(ap,cp,o)	wattr_get(stdscr,(ap),(cp),(o))
+#define attr_off(a,o)		wattr_off(stdscr,(a),(o))
+#define attr_on(a,o)		wattr_on(stdscr,(a),(o))
+#define attr_set(a,c,o)		wattr_set(stdscr,(a),(c),(o))
+#define attroff(at)		wattroff(stdscr,(at))
+#define attron(at)		wattron(stdscr,(at))
+#define attrset(at)		wattrset(stdscr,(at))
+#define bkgd(ch)		wbkgd(stdscr,(ch))
+#define bkgdset(ch)		wbkgdset(stdscr,(ch))
+#define chgat(n,a,c,o)		wchgat(stdscr,(n),(a),(c),(o))
+#define clear()			wclear(stdscr)
+#define clrtobot()		wclrtobot(stdscr)
+#define clrtoeol()		wclrtoeol(stdscr)
+#define color_set(c,o)		wcolor_set(stdscr,(c),(o))
+#define delch()			wdelch(stdscr)
+#define deleteln()		winsdelln(stdscr,-1)
+#define echochar(c)		wechochar(stdscr,(c))
+#define erase()			werase(stdscr)
+#define getch()			wgetch(stdscr)
+#define getstr(str)		wgetstr(stdscr,(str))
+#define inch()			winch(stdscr)
+#define inchnstr(s,n)		winchnstr(stdscr,(s),(n))
+#define inchstr(s)		winchstr(stdscr,(s))
+#define innstr(s,n)		winnstr(stdscr,(s),(n))
+#define insch(c)		winsch(stdscr,(c))
+#define insdelln(n)		winsdelln(stdscr,(n))
+#define insertln()		winsdelln(stdscr,1)
+#define insnstr(s,n)		winsnstr(stdscr,(s),(n))
+#define insstr(s)		winsstr(stdscr,(s))
+#define instr(s)		winstr(stdscr,(s))
+#define move(y,x)		wmove(stdscr,(y),(x))
+#define refresh()		wrefresh(stdscr)
+#define scrl(n)			wscrl(stdscr,(n))
+#define setscrreg(t,b)		wsetscrreg(stdscr,(t),(b))
+#define standend()		wstandend(stdscr)
+#define standout()		wstandout(stdscr)
+#define timeout(delay)		wtimeout(stdscr,(delay))
+#define wdeleteln(win)		winsdelln(win,-1)
+#define winsertln(win)		winsdelln(win,1)
+
+/*
+ * mv functions
+ */
+
+#define mvwaddch(win,y,x,ch)		(wmove((win),(y),(x)) == ERR ? ERR : waddch((win),(ch)))
+#define mvwaddchnstr(win,y,x,str,n)	(wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),(n)))
+#define mvwaddchstr(win,y,x,str)	(wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),-1))
+#define mvwaddnstr(win,y,x,str,n)	(wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),(n)))
+#define mvwaddstr(win,y,x,str)		(wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),-1))
+#define mvwchgat(win,y,x,n,a,c,o)	(wmove((win),(y),(x)) == ERR ? ERR : wchgat((win),(n),(a),(c),(o)))
+#define mvwdelch(win,y,x)		(wmove((win),(y),(x)) == ERR ? ERR : wdelch(win))
+#define mvwgetch(win,y,x)		(wmove((win),(y),(x)) == ERR ? ERR : wgetch(win))
+#define mvwgetnstr(win,y,x,str,n)	(wmove((win),(y),(x)) == ERR ? ERR : wgetnstr((win),(str),(n)))
+#define mvwgetstr(win,y,x,str)		(wmove((win),(y),(x)) == ERR ? ERR : wgetstr((win),(str)))
+#define mvwhline(win,y,x,c,n)		(wmove((win),(y),(x)) == ERR ? ERR : whline((win),(c),(n)))
+#define mvwinch(win,y,x)		(wmove((win),(y),(x)) == ERR ? NCURSES_CAST(chtype, ERR) : winch(win))
+#define mvwinchnstr(win,y,x,s,n)	(wmove((win),(y),(x)) == ERR ? ERR : winchnstr((win),(s),(n)))
+#define mvwinchstr(win,y,x,s)		(wmove((win),(y),(x)) == ERR ? ERR : winchstr((win),(s)))
+#define mvwinnstr(win,y,x,s,n)		(wmove((win),(y),(x)) == ERR ? ERR : winnstr((win),(s),(n)))
+#define mvwinsch(win,y,x,c)		(wmove((win),(y),(x)) == ERR ? ERR : winsch((win),(c)))
+#define mvwinsnstr(win,y,x,s,n)		(wmove((win),(y),(x)) == ERR ? ERR : winsnstr((win),(s),(n)))
+#define mvwinsstr(win,y,x,s)		(wmove((win),(y),(x)) == ERR ? ERR : winsstr((win),(s)))
+#define mvwinstr(win,y,x,s)		(wmove((win),(y),(x)) == ERR ? ERR : winstr((win),(s)))
+#define mvwvline(win,y,x,c,n)		(wmove((win),(y),(x)) == ERR ? ERR : wvline((win),(c),(n)))
+
+#define mvaddch(y,x,ch)			mvwaddch(stdscr,(y),(x),(ch))
+#define mvaddchnstr(y,x,str,n)		mvwaddchnstr(stdscr,(y),(x),(str),(n))
+#define mvaddchstr(y,x,str)		mvwaddchstr(stdscr,(y),(x),(str))
+#define mvaddnstr(y,x,str,n)		mvwaddnstr(stdscr,(y),(x),(str),(n))
+#define mvaddstr(y,x,str)		mvwaddstr(stdscr,(y),(x),(str))
+#define mvchgat(y,x,n,a,c,o)		mvwchgat(stdscr,(y),(x),(n),(a),(c),(o))
+#define mvdelch(y,x)			mvwdelch(stdscr,(y),(x))
+#define mvgetch(y,x)			mvwgetch(stdscr,(y),(x))
+#define mvgetnstr(y,x,str,n)		mvwgetnstr(stdscr,(y),(x),(str),(n))
+#define mvgetstr(y,x,str)		mvwgetstr(stdscr,(y),(x),(str))
+#define mvhline(y,x,c,n)		mvwhline(stdscr,(y),(x),(c),(n))
+#define mvinch(y,x)			mvwinch(stdscr,(y),(x))
+#define mvinchnstr(y,x,s,n)		mvwinchnstr(stdscr,(y),(x),(s),(n))
+#define mvinchstr(y,x,s)		mvwinchstr(stdscr,(y),(x),(s))
+#define mvinnstr(y,x,s,n)		mvwinnstr(stdscr,(y),(x),(s),(n))
+#define mvinsch(y,x,c)			mvwinsch(stdscr,(y),(x),(c))
+#define mvinsnstr(y,x,s,n)		mvwinsnstr(stdscr,(y),(x),(s),(n))
+#define mvinsstr(y,x,s)			mvwinsstr(stdscr,(y),(x),(s))
+#define mvinstr(y,x,s)			mvwinstr(stdscr,(y),(x),(s))
+#define mvvline(y,x,c,n)		mvwvline(stdscr,(y),(x),(c),(n))
+
+/*
+ * Some wide-character functions can be implemented without the extensions.
+ */
+#if !NCURSES_OPAQUE
+#define getbkgd(win)                    (NCURSES_OK_ADDR(win) ? ((win)->_bkgd) : 0)
+#endif /* NCURSES_OPAQUE */
+
+#define slk_attr_off(a,v)		((v) ? ERR : slk_attroff(a))
+#define slk_attr_on(a,v)		((v) ? ERR : slk_attron(a))
+
+#if !NCURSES_OPAQUE
+#if NCURSES_WATTR_MACROS
+#if NCURSES_WIDECHAR && 1
+#define wattr_set(win,a,p,opts) \
+	(NCURSES_OK_ADDR(win) \
+	 ? ((void)((win)->_attrs = ((a) & ~A_COLOR), \
+		   (win)->_color = (opts) ? *(int *)(opts) : (p)), \
+	    OK) \
+	 : ERR)
+#define wattr_get(win,a,p,opts) \
+	(NCURSES_OK_ADDR(win) \
+	 ? ((void)(NCURSES_OK_ADDR(a) \
+		   ? (*(a) = (win)->_attrs) \
+		   : OK), \
+	    (void)(NCURSES_OK_ADDR(p) \
+		   ? (*(p) = (NCURSES_PAIRS_T) (win)->_color) \
+		   : OK), \
+	    (void)(NCURSES_OK_ADDR(opts) \
+		   ? (*(int *)(opts) = (win)->_color) \
+		   : OK), \
+	    OK) \
+	 : ERR)
+#else /* !(NCURSES_WIDECHAR && NCURSES_EXE_COLORS) */
+#define wattr_set(win,a,p,opts) \
+	 (NCURSES_OK_ADDR(win) \
+	  ? ((void)((win)->_attrs = (((a) & ~A_COLOR) | \
+				     (attr_t)COLOR_PAIR(p))), \
+	     OK) \
+	  : ERR)
+#define wattr_get(win,a,p,opts) \
+	(NCURSES_OK_ADDR(win) \
+	 ? ((void)(NCURSES_OK_ADDR(a) \
+		   ? (*(a) = (win)->_attrs) \
+		   : OK), \
+	    (void)(NCURSES_OK_ADDR(p) \
+		   ? (*(p) = (NCURSES_PAIRS_T) PAIR_NUMBER((win)->_attrs)) \
+		   : OK), \
+	    OK) \
+	 : ERR)
+#endif /* (NCURSES_WIDECHAR && NCURSES_EXE_COLORS) */
+#endif /* NCURSES_WATTR_MACROS */
+#endif /* NCURSES_OPAQUE */
+
+/*
+ * X/Open curses deprecates SVr4 vwprintw/vwscanw, which are supposed to use
+ * varargs.h.  It adds new calls vw_printw/vw_scanw, which are supposed to
+ * use POSIX stdarg.h.  The ncurses versions of vwprintw/vwscanw already
+ * use stdarg.h, so...
+ */
+/* define vw_printw		vwprintw */
+/* define vw_scanw		vwscanw */
+
+/*
+ * Export fallback function for use in C++ binding.
+ */
+#if !1
+#define vsscanf(a,b,c) _nc_vsscanf(a,b,c)
+NCURSES_EXPORT(int) vsscanf(const char *, const char *, va_list);
+#endif
+
+/*
+ * These macros are extensions - not in X/Open Curses.
+ */
+#if 1
+#if !NCURSES_OPAQUE
+#define is_cleared(win)		(NCURSES_OK_ADDR(win) ? (win)->_clear : FALSE)
+#define is_idcok(win)		(NCURSES_OK_ADDR(win) ? (win)->_idcok : FALSE)
+#define is_idlok(win)		(NCURSES_OK_ADDR(win) ? (win)->_idlok : FALSE)
+#define is_immedok(win)		(NCURSES_OK_ADDR(win) ? (win)->_immed : FALSE)
+#define is_keypad(win)		(NCURSES_OK_ADDR(win) ? (win)->_use_keypad : FALSE)
+#define is_leaveok(win)		(NCURSES_OK_ADDR(win) ? (win)->_leaveok : FALSE)
+#define is_nodelay(win)		(NCURSES_OK_ADDR(win) ? ((win)->_delay == 0) : FALSE)
+#define is_notimeout(win)	(NCURSES_OK_ADDR(win) ? (win)->_notimeout : FALSE)
+#define is_pad(win)		(NCURSES_OK_ADDR(win) ? ((win)->_flags & _ISPAD) != 0 : FALSE)
+#define is_scrollok(win)	(NCURSES_OK_ADDR(win) ? (win)->_scroll : FALSE)
+#define is_subwin(win)		(NCURSES_OK_ADDR(win) ? ((win)->_flags & _SUBWIN) != 0 : FALSE)
+#define is_syncok(win)		(NCURSES_OK_ADDR(win) ? (win)->_sync : FALSE)
+#define wgetdelay(win)		(NCURSES_OK_ADDR(win) ? (win)->_delay : 0)
+#define wgetparent(win)		(NCURSES_OK_ADDR(win) ? (win)->_parent : 0)
+#define wgetscrreg(win,t,b)	(NCURSES_OK_ADDR(win) ? (*(t) = (win)->_regtop, *(b) = (win)->_regbottom, OK) : ERR)
+#endif
+#endif
+
+/*
+ * X/Open says this returns a bool; SVr4 also checked for out-of-range line.
+ * The macro provides compatibility:
+ */
+#define is_linetouched(w,l) ((!(w) || ((l) > getmaxy(w)) || ((l) < 0)) ? ERR : (is_linetouched)((w),(l)))
+
+#endif /* NCURSES_NOMACROS */
+
+/*
+ * Public variables.
+ *
+ * Notes:
+ *	a. ESCDELAY was an undocumented feature under AIX curses.
+ *	   It gives the ESC expire time in milliseconds.
+ *	b. ttytype is needed for backward compatibility
+ */
+#if NCURSES_REENTRANT
+
+NCURSES_WRAPPED_VAR(WINDOW *, curscr);
+NCURSES_WRAPPED_VAR(WINDOW *, newscr);
+NCURSES_WRAPPED_VAR(WINDOW *, stdscr);
+NCURSES_WRAPPED_VAR(char *, ttytype);
+NCURSES_WRAPPED_VAR(int, COLORS);
+NCURSES_WRAPPED_VAR(int, COLOR_PAIRS);
+NCURSES_WRAPPED_VAR(int, COLS);
+NCURSES_WRAPPED_VAR(int, ESCDELAY);
+NCURSES_WRAPPED_VAR(int, LINES);
+NCURSES_WRAPPED_VAR(int, TABSIZE);
+
+#define curscr      NCURSES_PUBLIC_VAR(curscr())
+#define newscr      NCURSES_PUBLIC_VAR(newscr())
+#define stdscr      NCURSES_PUBLIC_VAR(stdscr())
+#define ttytype     NCURSES_PUBLIC_VAR(ttytype())
+#define COLORS      NCURSES_PUBLIC_VAR(COLORS())
+#define COLOR_PAIRS NCURSES_PUBLIC_VAR(COLOR_PAIRS())
+#define COLS        NCURSES_PUBLIC_VAR(COLS())
+#define ESCDELAY    NCURSES_PUBLIC_VAR(ESCDELAY())
+#define LINES       NCURSES_PUBLIC_VAR(LINES())
+#define TABSIZE     NCURSES_PUBLIC_VAR(TABSIZE())
+
+#else
+
+extern NCURSES_EXPORT_VAR(WINDOW *) curscr;
+extern NCURSES_EXPORT_VAR(WINDOW *) newscr;
+extern NCURSES_EXPORT_VAR(WINDOW *) stdscr;
+extern NCURSES_EXPORT_VAR(char) ttytype[];
+extern NCURSES_EXPORT_VAR(int) COLORS;
+extern NCURSES_EXPORT_VAR(int) COLOR_PAIRS;
+extern NCURSES_EXPORT_VAR(int) COLS;
+extern NCURSES_EXPORT_VAR(int) ESCDELAY;
+extern NCURSES_EXPORT_VAR(int) LINES;
+extern NCURSES_EXPORT_VAR(int) TABSIZE;
+
+#endif
+
+/*
+ * Pseudo-character tokens outside ASCII range.  The curses wgetch() function
+ * will return any given one of these only if the corresponding k- capability
+ * is defined in your terminal's terminfo entry.
+ *
+ * Some keys (KEY_A1, etc) are arranged like this:
+ *	a1     up    a3
+ *	left   b2    right
+ *	c1     down  c3
+ *
+ * A few key codes do not depend upon the terminfo entry.
+ */
+#define KEY_CODE_YES	0400		/* A wchar_t contains a key code */
+#define KEY_MIN		0401		/* Minimum curses key */
+#define KEY_BREAK	0401		/* Break key (unreliable) */
+#define KEY_SRESET	0530		/* Soft (partial) reset (unreliable) */
+#define KEY_RESET	0531		/* Reset or hard reset (unreliable) */
+/*
+ * These definitions were generated by ./MKkey_defs.sh ./Caps ./Caps-ncurses
+ */
+#define KEY_DOWN	0402		/* down-arrow key */
+#define KEY_UP		0403		/* up-arrow key */
+#define KEY_LEFT	0404		/* left-arrow key */
+#define KEY_RIGHT	0405		/* right-arrow key */
+#define KEY_HOME	0406		/* home key */
+#define KEY_BACKSPACE	0407		/* backspace key */
+#define KEY_F0		0410		/* Function keys.  Space for 64 */
+#define KEY_F(n)	(KEY_F0+(n))	/* Value of function key n */
+#define KEY_DL		0510		/* delete-line key */
+#define KEY_IL		0511		/* insert-line key */
+#define KEY_DC		0512		/* delete-character key */
+#define KEY_IC		0513		/* insert-character key */
+#define KEY_EIC		0514		/* sent by rmir or smir in insert mode */
+#define KEY_CLEAR	0515		/* clear-screen or erase key */
+#define KEY_EOS		0516		/* clear-to-end-of-screen key */
+#define KEY_EOL		0517		/* clear-to-end-of-line key */
+#define KEY_SF		0520		/* scroll-forward key */
+#define KEY_SR		0521		/* scroll-backward key */
+#define KEY_NPAGE	0522		/* next-page key */
+#define KEY_PPAGE	0523		/* previous-page key */
+#define KEY_STAB	0524		/* set-tab key */
+#define KEY_CTAB	0525		/* clear-tab key */
+#define KEY_CATAB	0526		/* clear-all-tabs key */
+#define KEY_ENTER	0527		/* enter/send key */
+#define KEY_PRINT	0532		/* print key */
+#define KEY_LL		0533		/* lower-left key (home down) */
+#define KEY_A1		0534		/* upper left of keypad */
+#define KEY_A3		0535		/* upper right of keypad */
+#define KEY_B2		0536		/* center of keypad */
+#define KEY_C1		0537		/* lower left of keypad */
+#define KEY_C3		0540		/* lower right of keypad */
+#define KEY_BTAB	0541		/* back-tab key */
+#define KEY_BEG		0542		/* begin key */
+#define KEY_CANCEL	0543		/* cancel key */
+#define KEY_CLOSE	0544		/* close key */
+#define KEY_COMMAND	0545		/* command key */
+#define KEY_COPY	0546		/* copy key */
+#define KEY_CREATE	0547		/* create key */
+#define KEY_END		0550		/* end key */
+#define KEY_EXIT	0551		/* exit key */
+#define KEY_FIND	0552		/* find key */
+#define KEY_HELP	0553		/* help key */
+#define KEY_MARK	0554		/* mark key */
+#define KEY_MESSAGE	0555		/* message key */
+#define KEY_MOVE	0556		/* move key */
+#define KEY_NEXT	0557		/* next key */
+#define KEY_OPEN	0560		/* open key */
+#define KEY_OPTIONS	0561		/* options key */
+#define KEY_PREVIOUS	0562		/* previous key */
+#define KEY_REDO	0563		/* redo key */
+#define KEY_REFERENCE	0564		/* reference key */
+#define KEY_REFRESH	0565		/* refresh key */
+#define KEY_REPLACE	0566		/* replace key */
+#define KEY_RESTART	0567		/* restart key */
+#define KEY_RESUME	0570		/* resume key */
+#define KEY_SAVE	0571		/* save key */
+#define KEY_SBEG	0572		/* shifted begin key */
+#define KEY_SCANCEL	0573		/* shifted cancel key */
+#define KEY_SCOMMAND	0574		/* shifted command key */
+#define KEY_SCOPY	0575		/* shifted copy key */
+#define KEY_SCREATE	0576		/* shifted create key */
+#define KEY_SDC		0577		/* shifted delete-character key */
+#define KEY_SDL		0600		/* shifted delete-line key */
+#define KEY_SELECT	0601		/* select key */
+#define KEY_SEND	0602		/* shifted end key */
+#define KEY_SEOL	0603		/* shifted clear-to-end-of-line key */
+#define KEY_SEXIT	0604		/* shifted exit key */
+#define KEY_SFIND	0605		/* shifted find key */
+#define KEY_SHELP	0606		/* shifted help key */
+#define KEY_SHOME	0607		/* shifted home key */
+#define KEY_SIC		0610		/* shifted insert-character key */
+#define KEY_SLEFT	0611		/* shifted left-arrow key */
+#define KEY_SMESSAGE	0612		/* shifted message key */
+#define KEY_SMOVE	0613		/* shifted move key */
+#define KEY_SNEXT	0614		/* shifted next key */
+#define KEY_SOPTIONS	0615		/* shifted options key */
+#define KEY_SPREVIOUS	0616		/* shifted previous key */
+#define KEY_SPRINT	0617		/* shifted print key */
+#define KEY_SREDO	0620		/* shifted redo key */
+#define KEY_SREPLACE	0621		/* shifted replace key */
+#define KEY_SRIGHT	0622		/* shifted right-arrow key */
+#define KEY_SRSUME	0623		/* shifted resume key */
+#define KEY_SSAVE	0624		/* shifted save key */
+#define KEY_SSUSPEND	0625		/* shifted suspend key */
+#define KEY_SUNDO	0626		/* shifted undo key */
+#define KEY_SUSPEND	0627		/* suspend key */
+#define KEY_UNDO	0630		/* undo key */
+#define KEY_MOUSE	0631		/* Mouse event has occurred */
+
+#ifdef NCURSES_EXT_FUNCS
+#define KEY_RESIZE	0632		/* Terminal resize event */
+#endif
+
+#define KEY_MAX		0777		/* Maximum key value is 0632 */
+/* $Id: curses.wide,v 1.50 2017/03/26 16:05:21 tom Exp $ */
+/*
+ * vile:cmode:
+ * This file is part of ncurses, designed to be appended after curses.h.in
+ * (see that file for the relevant copyright).
+ */
+#define _XOPEN_CURSES 1
+
+#if NCURSES_WIDECHAR
+
+extern NCURSES_EXPORT_VAR(cchar_t *) _nc_wacs;
+
+#define NCURSES_WACS(c)	(&_nc_wacs[NCURSES_CAST(unsigned char,(c))])
+
+#define WACS_BSSB	NCURSES_WACS('l')
+#define WACS_SSBB	NCURSES_WACS('m')
+#define WACS_BBSS	NCURSES_WACS('k')
+#define WACS_SBBS	NCURSES_WACS('j')
+#define WACS_SBSS	NCURSES_WACS('u')
+#define WACS_SSSB	NCURSES_WACS('t')
+#define WACS_SSBS	NCURSES_WACS('v')
+#define WACS_BSSS	NCURSES_WACS('w')
+#define WACS_BSBS	NCURSES_WACS('q')
+#define WACS_SBSB	NCURSES_WACS('x')
+#define WACS_SSSS	NCURSES_WACS('n')
+
+#define WACS_ULCORNER	WACS_BSSB
+#define WACS_LLCORNER	WACS_SSBB
+#define WACS_URCORNER	WACS_BBSS
+#define WACS_LRCORNER	WACS_SBBS
+#define WACS_RTEE	WACS_SBSS
+#define WACS_LTEE	WACS_SSSB
+#define WACS_BTEE	WACS_SSBS
+#define WACS_TTEE	WACS_BSSS
+#define WACS_HLINE	WACS_BSBS
+#define WACS_VLINE	WACS_SBSB
+#define WACS_PLUS	WACS_SSSS
+
+#define WACS_S1		NCURSES_WACS('o') /* scan line 1 */
+#define WACS_S9 	NCURSES_WACS('s') /* scan line 9 */
+#define WACS_DIAMOND	NCURSES_WACS('`') /* diamond */
+#define WACS_CKBOARD	NCURSES_WACS('a') /* checker board */
+#define WACS_DEGREE	NCURSES_WACS('f') /* degree symbol */
+#define WACS_PLMINUS	NCURSES_WACS('g') /* plus/minus */
+#define WACS_BULLET	NCURSES_WACS('~') /* bullet */
+
+	/* Teletype 5410v1 symbols */
+#define WACS_LARROW	NCURSES_WACS(',') /* arrow left */
+#define WACS_RARROW	NCURSES_WACS('+') /* arrow right */
+#define WACS_DARROW	NCURSES_WACS('.') /* arrow down */
+#define WACS_UARROW	NCURSES_WACS('-') /* arrow up */
+#define WACS_BOARD	NCURSES_WACS('h') /* board of squares */
+#define WACS_LANTERN	NCURSES_WACS('i') /* lantern symbol */
+#define WACS_BLOCK	NCURSES_WACS('0') /* solid square block */
+
+	/* ncurses extensions */
+#define WACS_S3		NCURSES_WACS('p') /* scan line 3 */
+#define WACS_S7		NCURSES_WACS('r') /* scan line 7 */
+#define WACS_LEQUAL	NCURSES_WACS('y') /* less/equal */
+#define WACS_GEQUAL	NCURSES_WACS('z') /* greater/equal */
+#define WACS_PI		NCURSES_WACS('{') /* Pi */
+#define WACS_NEQUAL	NCURSES_WACS('|') /* not equal */
+#define WACS_STERLING	NCURSES_WACS('}') /* UK pound sign */
+
+	/* double lines */
+#define WACS_BDDB	NCURSES_WACS('C')
+#define WACS_DDBB	NCURSES_WACS('D')
+#define WACS_BBDD	NCURSES_WACS('B')
+#define WACS_DBBD	NCURSES_WACS('A')
+#define WACS_DBDD	NCURSES_WACS('G')
+#define WACS_DDDB	NCURSES_WACS('F')
+#define WACS_DDBD	NCURSES_WACS('H')
+#define WACS_BDDD	NCURSES_WACS('I')
+#define WACS_BDBD	NCURSES_WACS('R')
+#define WACS_DBDB	NCURSES_WACS('Y')
+#define WACS_DDDD	NCURSES_WACS('E')
+
+#define WACS_D_ULCORNER	WACS_BDDB
+#define WACS_D_LLCORNER	WACS_DDBB
+#define WACS_D_URCORNER	WACS_BBDD
+#define WACS_D_LRCORNER	WACS_DBBD
+#define WACS_D_RTEE	WACS_DBDD
+#define WACS_D_LTEE	WACS_DDDB
+#define WACS_D_BTEE	WACS_DDBD
+#define WACS_D_TTEE	WACS_BDDD
+#define WACS_D_HLINE	WACS_BDBD
+#define WACS_D_VLINE	WACS_DBDB
+#define WACS_D_PLUS	WACS_DDDD
+
+	/* thick lines */
+#define WACS_BTTB	NCURSES_WACS('L')
+#define WACS_TTBB	NCURSES_WACS('M')
+#define WACS_BBTT	NCURSES_WACS('K')
+#define WACS_TBBT	NCURSES_WACS('J')
+#define WACS_TBTT	NCURSES_WACS('U')
+#define WACS_TTTB	NCURSES_WACS('T')
+#define WACS_TTBT	NCURSES_WACS('V')
+#define WACS_BTTT	NCURSES_WACS('W')
+#define WACS_BTBT	NCURSES_WACS('Q')
+#define WACS_TBTB	NCURSES_WACS('X')
+#define WACS_TTTT	NCURSES_WACS('N')
+
+#define WACS_T_ULCORNER	WACS_BTTB
+#define WACS_T_LLCORNER	WACS_TTBB
+#define WACS_T_URCORNER	WACS_BBTT
+#define WACS_T_LRCORNER	WACS_TBBT
+#define WACS_T_RTEE	WACS_TBTT
+#define WACS_T_LTEE	WACS_TTTB
+#define WACS_T_BTEE	WACS_TTBT
+#define WACS_T_TTEE	WACS_BTTT
+#define WACS_T_HLINE	WACS_BTBT
+#define WACS_T_VLINE	WACS_TBTB
+#define WACS_T_PLUS	WACS_TTTT
+
+/*
+ * Function prototypes for wide-character operations.
+ *
+ * "generated" comments should include ":WIDEC" to make the corresponding
+ * functions ifdef'd in lib_gen.c
+ *
+ * "implemented" comments do not need this marker.
+ */
+
+extern NCURSES_EXPORT(int) add_wch (const cchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) add_wchnstr (const cchar_t *, int);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) add_wchstr (const cchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) addnwstr (const wchar_t *, int);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) addwstr (const wchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) bkgrnd (const cchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(void) bkgrndset (const cchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) border_set (const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*); /* generated:WIDEC */
+extern NCURSES_EXPORT(int) box_set (WINDOW *, const cchar_t *, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) echo_wchar (const cchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) erasewchar (wchar_t*);			/* implemented */
+extern NCURSES_EXPORT(int) get_wch (wint_t *);				/* generated:WIDEC */
+extern NCURSES_EXPORT(int) get_wstr (wint_t *);				/* generated:WIDEC */
+extern NCURSES_EXPORT(int) getbkgrnd (cchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) getcchar (const cchar_t *, wchar_t*, attr_t*, NCURSES_PAIRS_T*, void*);	/* implemented */
+extern NCURSES_EXPORT(int) getn_wstr (wint_t *, int);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) hline_set (const cchar_t *, int);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) in_wch (cchar_t *);				/* generated:WIDEC */
+extern NCURSES_EXPORT(int) in_wchnstr (cchar_t *, int);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) in_wchstr (cchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) innwstr (wchar_t *, int);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) ins_nwstr (const wchar_t *, int);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) ins_wch (const cchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) ins_wstr (const wchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) inwstr (wchar_t *);				/* generated:WIDEC */
+extern NCURSES_EXPORT(NCURSES_CONST char*) key_name (wchar_t);		/* implemented */
+extern NCURSES_EXPORT(int) killwchar (wchar_t *);			/* implemented */
+extern NCURSES_EXPORT(int) mvadd_wch (int, int, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvadd_wchnstr (int, int, const cchar_t *, int);/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvadd_wchstr (int, int, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvaddnwstr (int, int, const wchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvaddwstr (int, int, const wchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvget_wch (int, int, wint_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvget_wstr (int, int, wint_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvgetn_wstr (int, int, wint_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvhline_set (int, int, const cchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvin_wch (int, int, cchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvin_wchnstr (int, int, cchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvin_wchstr (int, int, cchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvinnwstr (int, int, wchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvins_nwstr (int, int, const wchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvins_wch (int, int, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvins_wstr (int, int, const wchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvinwstr (int, int, wchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvvline_set (int, int, const cchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwadd_wch (WINDOW *, int, int, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwadd_wchnstr (WINDOW *, int, int, const cchar_t *, int); /* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwadd_wchstr (WINDOW *, int, int, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwaddnwstr (WINDOW *, int, int, const wchar_t *, int);/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwaddwstr (WINDOW *, int, int, const wchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwget_wch (WINDOW *, int, int, wint_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwget_wstr (WINDOW *, int, int, wint_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwgetn_wstr (WINDOW *, int, int, wint_t *, int);/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwhline_set (WINDOW *, int, int, const cchar_t *, int);/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwin_wch (WINDOW *, int, int, cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwin_wchnstr (WINDOW *, int,int, cchar_t *,int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwin_wchstr (WINDOW *, int, int, cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwinnwstr (WINDOW *, int, int, wchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwins_nwstr (WINDOW *, int,int, const wchar_t *,int); /* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwins_wch (WINDOW *, int, int, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwins_wstr (WINDOW *, int, int, const wchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwinwstr (WINDOW *, int, int, wchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwvline_set (WINDOW *, int,int, const cchar_t *,int); /* generated:WIDEC */
+extern NCURSES_EXPORT(int) pecho_wchar (WINDOW *, const cchar_t *);	/* implemented */
+extern NCURSES_EXPORT(int) setcchar (cchar_t *, const wchar_t *, const attr_t, NCURSES_PAIRS_T, const void *);	/* implemented */
+extern NCURSES_EXPORT(int) slk_wset (int, const wchar_t *, int);	/* implemented */
+extern NCURSES_EXPORT(attr_t) term_attrs (void);			/* implemented */
+extern NCURSES_EXPORT(int) unget_wch (const wchar_t);			/* implemented */
+extern NCURSES_EXPORT(int) vid_attr (attr_t, NCURSES_PAIRS_T, void *);		/* implemented */
+extern NCURSES_EXPORT(int) vid_puts (attr_t, NCURSES_PAIRS_T, void *, NCURSES_OUTC); /* implemented */
+extern NCURSES_EXPORT(int) vline_set (const cchar_t *, int);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) wadd_wch (WINDOW *,const cchar_t *);		/* implemented */
+extern NCURSES_EXPORT(int) wadd_wchnstr (WINDOW *,const cchar_t *,int);	/* implemented */
+extern NCURSES_EXPORT(int) wadd_wchstr (WINDOW *,const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) waddnwstr (WINDOW *,const wchar_t *,int);	/* implemented */
+extern NCURSES_EXPORT(int) waddwstr (WINDOW *,const wchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) wbkgrnd (WINDOW *,const cchar_t *);		/* implemented */
+extern NCURSES_EXPORT(void) wbkgrndset (WINDOW *,const cchar_t *);	/* implemented */
+extern NCURSES_EXPORT(int) wborder_set (WINDOW *,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*);	/* implemented */
+extern NCURSES_EXPORT(int) wecho_wchar (WINDOW *, const cchar_t *);	/* implemented */
+extern NCURSES_EXPORT(int) wget_wch (WINDOW *, wint_t *);		/* implemented */
+extern NCURSES_EXPORT(int) wget_wstr (WINDOW *, wint_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) wgetbkgrnd (WINDOW *, cchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) wgetn_wstr (WINDOW *, wint_t *, int);	/* implemented */
+extern NCURSES_EXPORT(int) whline_set (WINDOW *, const cchar_t *, int);	/* implemented */
+extern NCURSES_EXPORT(int) win_wch (WINDOW *, cchar_t *);		/* implemented */
+extern NCURSES_EXPORT(int) win_wchnstr (WINDOW *, cchar_t *, int);	/* implemented */
+extern NCURSES_EXPORT(int) win_wchstr (WINDOW *, cchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) winnwstr (WINDOW *, wchar_t *, int);		/* implemented */
+extern NCURSES_EXPORT(int) wins_nwstr (WINDOW *, const wchar_t *, int);	/* implemented */
+extern NCURSES_EXPORT(int) wins_wch (WINDOW *, const cchar_t *);	/* implemented */
+extern NCURSES_EXPORT(int) wins_wstr (WINDOW *, const wchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) winwstr (WINDOW *, wchar_t *);		/* implemented */
+extern NCURSES_EXPORT(wchar_t*) wunctrl (cchar_t *);			/* implemented */
+extern NCURSES_EXPORT(int) wvline_set (WINDOW *, const cchar_t *, int);	/* implemented */
+
+#if NCURSES_SP_FUNCS
+extern NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(term_attrs) (SCREEN*);		/* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(unget_wch) (SCREEN*, const wchar_t);	/* implemented:SP_FUNC */
+extern NCURSES_EXPORT(wchar_t*) NCURSES_SP_NAME(wunctrl) (SCREEN*, cchar_t *);	/* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vid_attr) (SCREEN*, attr_t, NCURSES_PAIRS_T, void *);	/* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vid_puts) (SCREEN*, attr_t, NCURSES_PAIRS_T, void *, NCURSES_SP_OUTC);	/* implemented:SP_FUNC */
+#endif
+
+#ifndef NCURSES_NOMACROS
+
+/*
+ * XSI curses macros for XPG4 conformance.
+ */
+#define add_wch(c)			wadd_wch(stdscr,(c))
+#define add_wchnstr(str,n)		wadd_wchnstr(stdscr,(str),(n))
+#define add_wchstr(str)			wadd_wchstr(stdscr,(str))
+#define addnwstr(wstr,n)		waddnwstr(stdscr,(wstr),(n))
+#define addwstr(wstr)			waddwstr(stdscr,(wstr))
+#define bkgrnd(c)			wbkgrnd(stdscr,(c))
+#define bkgrndset(c)			wbkgrndset(stdscr,(c))
+#define border_set(l,r,t,b,tl,tr,bl,br) wborder_set(stdscr,(l),(r),(t),(b),tl,tr,bl,br)
+#define box_set(w,v,h)			wborder_set((w),(v),(v),(h),(h),0,0,0,0)
+#define echo_wchar(c)			wecho_wchar(stdscr,(c))
+#define get_wch(c)			wget_wch(stdscr,(c))
+#define get_wstr(t)			wget_wstr(stdscr,(t))
+#define getbkgrnd(wch)			wgetbkgrnd(stdscr,(wch))
+#define getn_wstr(t,n)			wgetn_wstr(stdscr,(t),(n))
+#define hline_set(c,n)			whline_set(stdscr,(c),(n))
+#define in_wch(c)			win_wch(stdscr,(c))
+#define in_wchnstr(c,n)			win_wchnstr(stdscr,(c),(n))
+#define in_wchstr(c)			win_wchstr(stdscr,(c))
+#define innwstr(c,n)			winnwstr(stdscr,(c),(n))
+#define ins_nwstr(t,n)			wins_nwstr(stdscr,(t),(n))
+#define ins_wch(c)			wins_wch(stdscr,(c))
+#define ins_wstr(t)			wins_wstr(stdscr,(t))
+#define inwstr(c)			winwstr(stdscr,(c))
+#define vline_set(c,n)			wvline_set(stdscr,(c),(n))
+#define wadd_wchstr(win,str)		wadd_wchnstr((win),(str),-1)
+#define waddwstr(win,wstr)		waddnwstr((win),(wstr),-1)
+#define wget_wstr(w,t)			wgetn_wstr((w),(t),-1)
+#define win_wchstr(w,c)			win_wchnstr((w),(c),-1)
+#define wins_wstr(w,t)			wins_nwstr((w),(t),-1)
+
+#if !NCURSES_OPAQUE
+#define wgetbkgrnd(win,wch)		(NCURSES_OK_ADDR(wch) ? ((win) ? (*(wch) = (win)->_bkgrnd) : *(wch), OK) : ERR)
+#endif
+
+#define mvadd_wch(y,x,c)		mvwadd_wch(stdscr,(y),(x),(c))
+#define mvadd_wchnstr(y,x,s,n)		mvwadd_wchnstr(stdscr,(y),(x),(s),(n))
+#define mvadd_wchstr(y,x,s)		mvwadd_wchstr(stdscr,(y),(x),(s))
+#define mvaddnwstr(y,x,wstr,n)		mvwaddnwstr(stdscr,(y),(x),(wstr),(n))
+#define mvaddwstr(y,x,wstr)		mvwaddwstr(stdscr,(y),(x),(wstr))
+#define mvget_wch(y,x,c)		mvwget_wch(stdscr,(y),(x),(c))
+#define mvget_wstr(y,x,t)		mvwget_wstr(stdscr,(y),(x),(t))
+#define mvgetn_wstr(y,x,t,n)		mvwgetn_wstr(stdscr,(y),(x),(t),(n))
+#define mvhline_set(y,x,c,n)		mvwhline_set(stdscr,(y),(x),(c),(n))
+#define mvin_wch(y,x,c)			mvwin_wch(stdscr,(y),(x),(c))
+#define mvin_wchnstr(y,x,c,n)		mvwin_wchnstr(stdscr,(y),(x),(c),(n))
+#define mvin_wchstr(y,x,c)		mvwin_wchstr(stdscr,(y),(x),(c))
+#define mvinnwstr(y,x,c,n)		mvwinnwstr(stdscr,(y),(x),(c),(n))
+#define mvins_nwstr(y,x,t,n)		mvwins_nwstr(stdscr,(y),(x),(t),(n))
+#define mvins_wch(y,x,c)		mvwins_wch(stdscr,(y),(x),(c))
+#define mvins_wstr(y,x,t)		mvwins_wstr(stdscr,(y),(x),(t))
+#define mvinwstr(y,x,c)			mvwinwstr(stdscr,(y),(x),(c))
+#define mvvline_set(y,x,c,n)		mvwvline_set(stdscr,(y),(x),(c),(n))
+
+#define mvwadd_wch(win,y,x,c)		(wmove(win,(y),(x)) == ERR ? ERR : wadd_wch((win),(c)))
+#define mvwadd_wchnstr(win,y,x,s,n)	(wmove(win,(y),(x)) == ERR ? ERR : wadd_wchnstr((win),(s),(n)))
+#define mvwadd_wchstr(win,y,x,s)	(wmove(win,(y),(x)) == ERR ? ERR : wadd_wchstr((win),(s)))
+#define mvwaddnwstr(win,y,x,wstr,n)	(wmove(win,(y),(x)) == ERR ? ERR : waddnwstr((win),(wstr),(n)))
+#define mvwaddwstr(win,y,x,wstr)	(wmove(win,(y),(x)) == ERR ? ERR : waddwstr((win),(wstr)))
+#define mvwget_wch(win,y,x,c)		(wmove(win,(y),(x)) == ERR ? ERR : wget_wch((win),(c)))
+#define mvwget_wstr(win,y,x,t)		(wmove(win,(y),(x)) == ERR ? ERR : wget_wstr((win),(t)))
+#define mvwgetn_wstr(win,y,x,t,n)	(wmove(win,(y),(x)) == ERR ? ERR : wgetn_wstr((win),(t),(n)))
+#define mvwhline_set(win,y,x,c,n)	(wmove(win,(y),(x)) == ERR ? ERR : whline_set((win),(c),(n)))
+#define mvwin_wch(win,y,x,c)		(wmove(win,(y),(x)) == ERR ? ERR : win_wch((win),(c)))
+#define mvwin_wchnstr(win,y,x,c,n)	(wmove(win,(y),(x)) == ERR ? ERR : win_wchnstr((win),(c),(n)))
+#define mvwin_wchstr(win,y,x,c)		(wmove(win,(y),(x)) == ERR ? ERR : win_wchstr((win),(c)))
+#define mvwinnwstr(win,y,x,c,n)		(wmove(win,(y),(x)) == ERR ? ERR : winnwstr((win),(c),(n)))
+#define mvwins_nwstr(win,y,x,t,n)	(wmove(win,(y),(x)) == ERR ? ERR : wins_nwstr((win),(t),(n)))
+#define mvwins_wch(win,y,x,c)		(wmove(win,(y),(x)) == ERR ? ERR : wins_wch((win),(c)))
+#define mvwins_wstr(win,y,x,t)		(wmove(win,(y),(x)) == ERR ? ERR : wins_wstr((win),(t)))
+#define mvwinwstr(win,y,x,c)		(wmove(win,(y),(x)) == ERR ? ERR : winwstr((win),(c)))
+#define mvwvline_set(win,y,x,c,n)	(wmove(win,(y),(x)) == ERR ? ERR : wvline_set((win),(c),(n)))
+
+#endif /* NCURSES_NOMACROS */
+
+#if defined(TRACE) || defined(NCURSES_TEST)
+extern NCURSES_EXPORT(const char *) _nc_viswbuf(const wchar_t *);
+extern NCURSES_EXPORT(const char *) _nc_viswibuf(const wint_t *);
+#endif
+
+#endif /* NCURSES_WIDECHAR */
+/* $Id: curses.tail,v 1.25 2019/12/14 22:28:39 tom Exp $ */
+/*
+ * vile:cmode:
+ * This file is part of ncurses, designed to be appended after curses.h.in
+ * (see that file for the relevant copyright).
+ */
+
+/* mouse interface */
+
+#if NCURSES_MOUSE_VERSION > 1
+#define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 5))
+#else
+#define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 6))
+#endif
+
+#define	NCURSES_BUTTON_RELEASED	001L
+#define	NCURSES_BUTTON_PRESSED	002L
+#define	NCURSES_BUTTON_CLICKED	004L
+#define	NCURSES_DOUBLE_CLICKED	010L
+#define	NCURSES_TRIPLE_CLICKED	020L
+#define	NCURSES_RESERVED_EVENT	040L
+
+/* event masks */
+#define	BUTTON1_RELEASED	NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED)
+#define	BUTTON1_PRESSED		NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED)
+#define	BUTTON1_CLICKED		NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_CLICKED)
+#define	BUTTON1_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(1, NCURSES_DOUBLE_CLICKED)
+#define	BUTTON1_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(1, NCURSES_TRIPLE_CLICKED)
+
+#define	BUTTON2_RELEASED	NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_RELEASED)
+#define	BUTTON2_PRESSED		NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_PRESSED)
+#define	BUTTON2_CLICKED		NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_CLICKED)
+#define	BUTTON2_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(2, NCURSES_DOUBLE_CLICKED)
+#define	BUTTON2_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(2, NCURSES_TRIPLE_CLICKED)
+
+#define	BUTTON3_RELEASED	NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_RELEASED)
+#define	BUTTON3_PRESSED		NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_PRESSED)
+#define	BUTTON3_CLICKED		NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_CLICKED)
+#define	BUTTON3_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(3, NCURSES_DOUBLE_CLICKED)
+#define	BUTTON3_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(3, NCURSES_TRIPLE_CLICKED)
+
+#define	BUTTON4_RELEASED	NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_RELEASED)
+#define	BUTTON4_PRESSED		NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_PRESSED)
+#define	BUTTON4_CLICKED		NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_CLICKED)
+#define	BUTTON4_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(4, NCURSES_DOUBLE_CLICKED)
+#define	BUTTON4_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(4, NCURSES_TRIPLE_CLICKED)
+
+/*
+ * In 32 bits the version-1 scheme does not provide enough space for a 5th
+ * button, unless we choose to change the ABI by omitting the reserved-events.
+ */
+#if NCURSES_MOUSE_VERSION > 1
+
+#define	BUTTON5_RELEASED	NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_RELEASED)
+#define	BUTTON5_PRESSED		NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_PRESSED)
+#define	BUTTON5_CLICKED		NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_CLICKED)
+#define	BUTTON5_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(5, NCURSES_DOUBLE_CLICKED)
+#define	BUTTON5_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(5, NCURSES_TRIPLE_CLICKED)
+
+#define	BUTTON_CTRL		NCURSES_MOUSE_MASK(6, 0001L)
+#define	BUTTON_SHIFT		NCURSES_MOUSE_MASK(6, 0002L)
+#define	BUTTON_ALT		NCURSES_MOUSE_MASK(6, 0004L)
+#define	REPORT_MOUSE_POSITION	NCURSES_MOUSE_MASK(6, 0010L)
+
+#else
+
+#define	BUTTON1_RESERVED_EVENT	NCURSES_MOUSE_MASK(1, NCURSES_RESERVED_EVENT)
+#define	BUTTON2_RESERVED_EVENT	NCURSES_MOUSE_MASK(2, NCURSES_RESERVED_EVENT)
+#define	BUTTON3_RESERVED_EVENT	NCURSES_MOUSE_MASK(3, NCURSES_RESERVED_EVENT)
+#define	BUTTON4_RESERVED_EVENT	NCURSES_MOUSE_MASK(4, NCURSES_RESERVED_EVENT)
+
+#define	BUTTON_CTRL		NCURSES_MOUSE_MASK(5, 0001L)
+#define	BUTTON_SHIFT		NCURSES_MOUSE_MASK(5, 0002L)
+#define	BUTTON_ALT		NCURSES_MOUSE_MASK(5, 0004L)
+#define	REPORT_MOUSE_POSITION	NCURSES_MOUSE_MASK(5, 0010L)
+
+#endif
+
+#define	ALL_MOUSE_EVENTS	(REPORT_MOUSE_POSITION - 1)
+
+/* macros to extract single event-bits from masks */
+#define	BUTTON_RELEASE(e, x)		((e) & NCURSES_MOUSE_MASK(x, 001))
+#define	BUTTON_PRESS(e, x)		((e) & NCURSES_MOUSE_MASK(x, 002))
+#define	BUTTON_CLICK(e, x)		((e) & NCURSES_MOUSE_MASK(x, 004))
+#define	BUTTON_DOUBLE_CLICK(e, x)	((e) & NCURSES_MOUSE_MASK(x, 010))
+#define	BUTTON_TRIPLE_CLICK(e, x)	((e) & NCURSES_MOUSE_MASK(x, 020))
+#define	BUTTON_RESERVED_EVENT(e, x)	((e) & NCURSES_MOUSE_MASK(x, 040))
+
+typedef struct
+{
+    short id;		/* ID to distinguish multiple devices */
+    int x, y, z;	/* event coordinates (character-cell) */
+    mmask_t bstate;	/* button state bits */
+}
+MEVENT;
+
+extern NCURSES_EXPORT(bool)    has_mouse(void);
+extern NCURSES_EXPORT(int)     getmouse (MEVENT *);
+extern NCURSES_EXPORT(int)     ungetmouse (MEVENT *);
+extern NCURSES_EXPORT(mmask_t) mousemask (mmask_t, mmask_t *);
+extern NCURSES_EXPORT(bool)    wenclose (const WINDOW *, int, int);
+extern NCURSES_EXPORT(int)     mouseinterval (int);
+extern NCURSES_EXPORT(bool)    wmouse_trafo (const WINDOW*, int*, int*, bool);
+extern NCURSES_EXPORT(bool)    mouse_trafo (int*, int*, bool);              /* generated */
+
+#if NCURSES_SP_FUNCS
+extern NCURSES_EXPORT(bool)    NCURSES_SP_NAME(has_mouse) (SCREEN*);
+extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(getmouse) (SCREEN*, MEVENT *);
+extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(ungetmouse) (SCREEN*,MEVENT *);
+extern NCURSES_EXPORT(mmask_t) NCURSES_SP_NAME(mousemask) (SCREEN*, mmask_t, mmask_t *);
+extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(mouseinterval) (SCREEN*, int);
+#endif
+
+#ifndef NCURSES_NOMACROS
+#define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
+#endif
+
+/* other non-XSI functions */
+
+extern NCURSES_EXPORT(int) mcprint (char *, int);	/* direct data to printer */
+extern NCURSES_EXPORT(int) has_key (int);		/* do we have given key? */
+
+#if NCURSES_SP_FUNCS
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(has_key) (SCREEN*, int);    /* do we have given key? */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mcprint) (SCREEN*, char *, int);	/* direct data to printer */
+#endif
+
+/* Debugging : use with libncurses_g.a */
+
+extern NCURSES_EXPORT(void) _tracef (const char *, ...) GCC_PRINTFLIKE(1,2);
+extern NCURSES_EXPORT(char *) _traceattr (attr_t);
+extern NCURSES_EXPORT(char *) _traceattr2 (int, chtype);
+extern NCURSES_EXPORT(char *) _tracechar (int);
+extern NCURSES_EXPORT(char *) _tracechtype (chtype);
+extern NCURSES_EXPORT(char *) _tracechtype2 (int, chtype);
+#if NCURSES_WIDECHAR
+#define _tracech_t		_tracecchar_t
+extern NCURSES_EXPORT(char *) _tracecchar_t (const cchar_t *);
+#define _tracech_t2		_tracecchar_t2
+extern NCURSES_EXPORT(char *) _tracecchar_t2 (int, const cchar_t *);
+#else
+#define _tracech_t		_tracechtype
+#define _tracech_t2		_tracechtype2
+#endif
+extern NCURSES_EXPORT(void) trace (const unsigned) GCC_DEPRECATED("use curses_trace");
+extern NCURSES_EXPORT(unsigned) curses_trace (const unsigned);
+
+/* trace masks */
+#define TRACE_DISABLE	0x0000	/* turn off tracing */
+#define TRACE_TIMES	0x0001	/* trace user and system times of updates */
+#define TRACE_TPUTS	0x0002	/* trace tputs calls */
+#define TRACE_UPDATE	0x0004	/* trace update actions, old & new screens */
+#define TRACE_MOVE	0x0008	/* trace cursor moves and scrolls */
+#define TRACE_CHARPUT	0x0010	/* trace all character outputs */
+#define TRACE_ORDINARY	0x001F	/* trace all update actions */
+#define TRACE_CALLS	0x0020	/* trace all curses calls */
+#define TRACE_VIRTPUT	0x0040	/* trace virtual character puts */
+#define TRACE_IEVENT	0x0080	/* trace low-level input processing */
+#define TRACE_BITS	0x0100	/* trace state of TTY control bits */
+#define TRACE_ICALLS	0x0200	/* trace internal/nested calls */
+#define TRACE_CCALLS	0x0400	/* trace per-character calls */
+#define TRACE_DATABASE	0x0800	/* trace read/write of terminfo/termcap data */
+#define TRACE_ATTRS	0x1000	/* trace attribute updates */
+
+#define TRACE_SHIFT	13	/* number of bits in the trace masks */
+#define TRACE_MAXIMUM	((1 << TRACE_SHIFT) - 1) /* maximum trace level */
+
+#if defined(TRACE) || defined(NCURSES_TEST)
+extern NCURSES_EXPORT_VAR(int) _nc_optimize_enable;		/* enable optimizations */
+extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *);
+#define OPTIMIZE_MVCUR		0x01	/* cursor movement optimization */
+#define OPTIMIZE_HASHMAP	0x02	/* diff hashing to detect scrolls */
+#define OPTIMIZE_SCROLL		0x04	/* scroll optimization */
+#define OPTIMIZE_ALL		0xff	/* enable all optimizations (dflt) */
+#endif
+
+extern NCURSES_EXPORT(void) exit_curses (int) GCC_NORETURN;
+
+#include <unctrl.h>
+
+#ifdef __cplusplus
+
+#ifndef NCURSES_NOMACROS
+
+/* these names conflict with STL */
+#undef box
+#undef clear
+#undef erase
+#undef move
+#undef refresh
+
+#endif /* NCURSES_NOMACROS */
+
+}
+#endif
+
+#endif /* __NCURSES_H */
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/ncurses/ncurses_dll.h
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/ncurses/ncurses_dll.h	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/ncurses/ncurses_dll.h	(revision 5)
@@ -0,0 +1,99 @@
+/****************************************************************************
+ * Copyright 2018,2020 Thomas E. Dickey                                     *
+ * Copyright 2009,2014 Free Software Foundation, Inc.                       *
+ *                                                                          *
+ * Permission is hereby granted, free of charge, to any person obtaining a  *
+ * copy of this software and associated documentation files (the            *
+ * "Software"), to deal in the Software without restriction, including      *
+ * without limitation the rights to use, copy, modify, merge, publish,      *
+ * distribute, distribute with modifications, sublicense, and/or sell       *
+ * copies of the Software, and to permit persons to whom the Software is    *
+ * furnished to do so, subject to the following conditions:                 *
+ *                                                                          *
+ * The above copyright notice and this permission notice shall be included  *
+ * in all copies or substantial portions of the Software.                   *
+ *                                                                          *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
+ *                                                                          *
+ * Except as contained in this notice, the name(s) of the above copyright   *
+ * holders shall not be used in advertising or otherwise to promote the     *
+ * sale, use or other dealings in this Software without prior written       *
+ * authorization.                                                           *
+ ****************************************************************************/
+/* $Id: ncurses_dll.h.in,v 1.17 2020/09/05 17:58:47 juergen Exp $ */
+
+#ifndef NCURSES_DLL_H_incl
+#define NCURSES_DLL_H_incl 1
+
+/*
+ * MinGW gcc (unlike MSYS2 and Cygwin) should define _WIN32 and possibly _WIN64.
+ */
+#if defined(__MINGW64__)
+
+#ifndef _WIN64
+#define _WIN64 1
+#endif
+
+#elif defined(__MINGW32__)
+
+#ifndef _WIN32
+#define _WIN32 1
+#endif
+
+/* 2014-08-02 workaround for broken MinGW compiler.
+ * Oddly, only TRACE is mapped to trace - the other -D's are okay.
+ * suggest TDM as an alternative.
+ */
+#if (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
+
+#ifdef trace
+#undef trace
+#define TRACE
+#endif
+
+#endif	/* broken compiler */
+
+#endif	/* MingW */
+
+/*
+ * For reentrant code, we map the various global variables into SCREEN by
+ * using functions to access them.
+ */
+#define NCURSES_PUBLIC_VAR(name) _nc_##name
+
+#if defined(BUILDING_NCURSES)
+# define NCURSES_IMPEXP NCURSES_EXPORT_GENERAL_EXPORT
+#else
+# define NCURSES_IMPEXP NCURSES_EXPORT_GENERAL_IMPORT
+#endif
+
+#define NCURSES_WRAPPED_VAR(type,name) extern NCURSES_IMPEXP type NCURSES_PUBLIC_VAR(name)(void)
+
+#define NCURSES_EXPORT(type) NCURSES_IMPEXP type NCURSES_API
+#define NCURSES_EXPORT_VAR(type) NCURSES_IMPEXP type
+
+/*
+ * These symbols hide dllimport/dllexport, for compilers which care about it.
+ */
+#if defined(__CYGWIN__) || (defined(_WIN32) || defined(_WIN64))
+# if defined(NCURSES_STATIC)	/* "static" here only implies "not-a-DLL" */
+#   define NCURSES_EXPORT_GENERAL_IMPORT
+#   define NCURSES_EXPORT_GENERAL_EXPORT
+# else
+#   define NCURSES_EXPORT_GENERAL_IMPORT __declspec(dllimport)
+#   define NCURSES_EXPORT_GENERAL_EXPORT __declspec(dllexport)
+# endif
+# define NCURSES_API __cdecl
+#else
+# define NCURSES_EXPORT_GENERAL_IMPORT
+# define NCURSES_EXPORT_GENERAL_EXPORT
+# define NCURSES_API /* FIXME: __attribute__ ((cdecl)) is only available on x86 */
+#endif
+
+#endif /* NCURSES_DLL_H_incl */
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/ncurses/unctrl.h
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/ncurses/unctrl.h	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/ncurses/unctrl.h	(revision 5)
@@ -0,0 +1,68 @@
+/****************************************************************************
+ * Copyright 2020 Thomas E. Dickey                                          *
+ * Copyright 1998-2001,2009 Free Software Foundation, Inc.                  *
+ *                                                                          *
+ * Permission is hereby granted, free of charge, to any person obtaining a  *
+ * copy of this software and associated documentation files (the            *
+ * "Software"), to deal in the Software without restriction, including      *
+ * without limitation the rights to use, copy, modify, merge, publish,      *
+ * distribute, distribute with modifications, sublicense, and/or sell       *
+ * copies of the Software, and to permit persons to whom the Software is    *
+ * furnished to do so, subject to the following conditions:                 *
+ *                                                                          *
+ * The above copyright notice and this permission notice shall be included  *
+ * in all copies or substantial portions of the Software.                   *
+ *                                                                          *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
+ *                                                                          *
+ * Except as contained in this notice, the name(s) of the above copyright   *
+ * holders shall not be used in advertising or otherwise to promote the     *
+ * sale, use or other dealings in this Software without prior written       *
+ * authorization.                                                           *
+ ****************************************************************************/
+
+/****************************************************************************
+ *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
+ *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
+ ****************************************************************************/
+
+/*
+ * unctrl.h
+ *
+ * Display a printable version of a control character.
+ * Control characters are displayed in caret notation (^x), DELETE is displayed
+ * as ^?. Printable characters are displayed as is.
+ */
+
+/* $Id: unctrl.h.in,v 1.12 2020/02/02 23:34:34 tom Exp $ */
+
+#ifndef NCURSES_UNCTRL_H_incl
+#define NCURSES_UNCTRL_H_incl	1
+
+#undef  NCURSES_VERSION
+#define NCURSES_VERSION "6.2"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <curses.h>
+
+#undef unctrl
+NCURSES_EXPORT(NCURSES_CONST char *) unctrl (chtype);
+
+#if 1
+NCURSES_EXPORT(NCURSES_CONST char *) NCURSES_SP_NAME(unctrl) (SCREEN*, chtype);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NCURSES_UNCTRL_H_incl */
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/ncurses
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/ncurses	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/ncurses	(revision 5)

Property changes on: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/ncurses
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/report-lib.c
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/report-lib.c	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib/report-lib.c	(revision 5)
@@ -0,0 +1,67 @@
+/*
+ * report-lib.c: the exported version of gpm_report. used in Gpm_Open and co.
+ *
+ * Copyright (c) 2001        Nico Schottelius <nico@schottelius.org>
+ *
+ *   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 2 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, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <stdio.h>      /* NULL */
+#include <stdarg.h>     /* va_arg/start/... */
+#include <stdlib.h>     /* exit() */
+
+#include "headers/message.h"
+
+static int gpm_silent()
+{
+   if ( getenv( "GPM_VERBOSE" ) == NULL ) return 1;
+   return 0;
+}
+
+void gpm_report(int line, char *file, int stat, char *text, ... )
+{
+   char *string = NULL;
+   int log_level;
+   va_list ap;
+
+   if ( gpm_silent() && stat != GPM_STAT_OOPS ) return;
+
+   if (stat == GPM_STAT_DEBUG) return;
+
+   va_start(ap,text);
+
+   switch(stat) {
+      case GPM_STAT_INFO : string = GPM_TEXT_INFO ;
+                           log_level = LOG_INFO; break;
+      case GPM_STAT_WARN : string = GPM_TEXT_WARN ;
+                           log_level = LOG_WARNING; break;
+      case GPM_STAT_ERR  : string = GPM_TEXT_ERR  ;
+                           log_level = LOG_ERR; break;
+      case GPM_STAT_DEBUG: string = GPM_TEXT_DEBUG;
+                           log_level = LOG_DEBUG; break;
+      case GPM_STAT_OOPS : string = GPM_TEXT_OOPS;
+                           log_level = LOG_CRIT; break;
+   }
+#ifdef HAVE_VSYSLOG
+   syslog(log_level, string);
+   vsyslog(log_level, text, ap);
+#else
+   fprintf(stderr,"%s[%s(%d)]:\n",string,file,line);
+   vfprintf(stderr,text,ap);
+   fprintf(stderr,"\n");
+#endif
+
+   if(stat == GPM_STAT_OOPS) exit(1);  /* may a lib function call exit ???? */
+}
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib	(revision 5)

Property changes on: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/lib
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/prog/gpm-root.y
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/prog/gpm-root.y	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/prog/gpm-root.y	(revision 5)
@@ -0,0 +1,1392 @@
+/*
+ * gpm-root.y - a default-handler for mouse events (gpm-Linux)
+ *
+ * Copyright 1994,1995   rubini@linux.it (Alessandro Rubini)
+ * Copyright (C) 1998    Ian Zimmerman <itz@rahul.net>
+ *
+ * Tue,  5 Jan 1999 23:16:45 +0000, modified by James Troup <james@nocrew.org>:
+ * (get_winsize): use /dev/tty0 not /dev/console.
+ * gpm-root.y (f.debug): disable undocumented f.debug function because it uses a
+ * file in /tmp in a fashion which invites symlink abuse.
+ *
+ *   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 2 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, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ ********/
+
+%{
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <time.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/syslog.h>
+#include <signal.h>         /* sigaction() */
+#include <pwd.h>            /* pwd entries */
+#include <grp.h>            /* initgroups() */
+#include <sys/kd.h>         /* KDGETMODE */
+#include <sys/stat.h>       /* fstat() */
+#include <sys/utsname.h>    /* uname() */
+#include <termios.h>        /* winsize */
+#include <linux/vt.h>       /* VT_ACTIVATE */
+#include <linux/keyboard.h> /* K_SHIFT */
+#include <utmp.h>         
+#include <endian.h>
+
+#ifdef HAVE_SYS_SYSMACROS_H
+#include <sys/sysmacros.h>
+#else
+#define major(dev) (((unsigned) (dev))>>8)
+#define minor(dev) ((dev)&0xff)
+#endif
+
+
+#define GPM_NULL_DEV "/dev/null"
+
+#ifdef HAVE_LINUX_MAJOR_H
+#include <linux/major.h>
+#else
+#define VCS_MAJOR	7
+#endif
+
+#define MAX_NR_USER_CONSOLES 63 /* <linux/tty.h> needs __KERNEL__ */
+
+#include "headers/message.h"
+#include "headers/gpm.h"
+
+#ifdef DEBUG
+#define YYDEBUG 1
+#else
+#undef YYDEBUG
+#endif
+
+#define USER_CFG   ".gpm-root"
+#define SYSTEM_CFG SYSCONFDIR "/gpm-root.conf"
+
+#define DEFAULT_FORE 7
+#define DEFAULT_BACK 0
+#define DEFAULT_BORD 7
+#define DEFAULT_HEAD 7
+
+/* These macros are useful to avoid curses. The program is unportable anyway */
+#define GOTOXY(f,x,y)   fprintf(f,"\x1B[%03i;%03iH",y,x)
+#define FORECOLOR(f,c)  fprintf(f,"\x1B[%i;3%cm",(c)&8?1:22,colLut[(c)&7]+'0') 
+#define BACKCOLOR(f,c)  fprintf(f,"\x1B[4%cm",colLut[(c)&7]+'0') 
+
+/* These defines are ugly hacks but work */
+#define ULCORNER 0xc9
+#define URCORNER 0xbb
+#define LLCORNER 0xc8 
+#define LRCORNER 0xbc
+#define HORLINE  0xcd
+#define VERLINE  0xba
+
+int colLut[]={0,4,2,6,1,5,3,7};
+
+char *prgname;
+char *consolename;
+int run_status  = GPM_RUN_STARTUP;
+struct winsize win;
+int disallocFlag=0;
+struct node {char *name; int flag;};
+
+struct node  tableMod[]= {
+   {"shift",    1<<KG_SHIFT},
+   {"anyAlt",   1<<KG_ALT | 1<<KG_ALTGR},
+   {"leftAlt",  1<<KG_ALT},
+   {"rightAlt", 1<<KG_ALTGR},
+   {"control",  1<<KG_CTRL},
+   {NULL,0}
+};
+
+   /* provide defaults */
+int opt_mod     =  4;           /* control */
+int opt_buf     =  0;           /* ask the kernel about it */
+int opt_user    =  1;           /* allow user cfg files */
+
+
+
+typedef struct DrawItem {
+   short type;
+   short pad;
+   char *name;
+   char *arg;   /* a cmd string */
+   void *clientdata;  /* a (Draw *) for menus or whatever   */
+   int (*fun)();
+   struct DrawItem *next;
+} DrawItem;
+
+typedef struct Draw {
+   short width;               /* length of longest item */
+   short height;              /* the number of items */
+   short uid;                 /* owner */
+   short buttons;             /* which button */
+   short fore,back,bord,head; /* colors */
+   char *title;               /* name */
+   time_t mtime;              /* timestamp of source file */
+   DrawItem *menu;            /* the list of items */
+   struct Draw *next;         /* chain */
+} Draw;
+
+typedef struct Posted {
+   short x,y,X,Y;
+   Draw *draw;
+   unsigned char *dump;
+   short colorcell;
+   struct Posted *prev;
+} Posted;
+
+Draw *drawList=NULL;
+
+/* support functions and vars */
+int yyerror(char *s);
+int yylex(void);
+
+DrawItem *cfg_cat(DrawItem *, DrawItem *);
+DrawItem *cfg_makeitem(int mode, char *msg, int(*fun)(), void *detail);
+
+
+/*===================================================================*
+ * This part of the source is devoted to reading the cfg file
+ */
+
+char cfgname[256];
+FILE *cfgfile=NULL;
+int cfglineno=0;
+Draw *cfgcurrent, *cfgall;
+
+Draw *cfg_alloc(void);
+
+/* prototypes for predefined functions */
+
+enum F_call {F_CREATE, F_POST, F_INVOKE, F_DONE};
+int f_debug(int mode, DrawItem *self, int uid);
+int f_bgcmd(int mode, DrawItem *self, int uid);
+int f_fgcmd(int mode, DrawItem *self, int uid);
+int f_jptty(int mode, DrawItem *self, int uid);
+int f_mktty(int mode, DrawItem *self, int uid);
+int f_menu(int mode, DrawItem *self, int uid);
+int f_lock(int mode, DrawItem *self, int uid);
+int f_load(int mode, DrawItem *self, int uid);
+int f_free(int mode, DrawItem *self, int uid);
+int f_time(int mode, DrawItem *self, int uid);
+int f_pipe(int mode, DrawItem *self, int uid);
+
+%} /* and this starts yacc definitions */
+
+%union {
+      int silly;
+      char *string;
+      Draw *draw;
+      DrawItem *item;
+      int (*fun)();
+      }
+
+%token <string> T_STRING
+%token <silly> T_BACK T_FORE T_BORD T_HEAD
+%token <silly> T_BRIGHT T_COLOR T_NAME
+
+%token T_BUTTON
+%token <fun> T_FUNC T_FUN2
+%type <silly> bright button
+%type <draw> menu file
+%type <item> item items itemlist
+%% /* begin grammar #########################################################*/
+
+file: /* empty */               {$$=cfgall=NULL;}
+      | file button menu      {$3->buttons=$2; $3->next=$1; $$=cfgall=$3;}
+      ;
+
+button: T_BUTTON '1' {$$=GPM_B_LEFT;}
+         | T_BUTTON '2' {$$=GPM_B_MIDDLE;}
+         | T_BUTTON '3' {$$=GPM_B_RIGHT;}
+         ;
+
+menu: '{'                       {$<draw>$=cfgcurrent=cfg_alloc();}
+          configs itemlist '}'  {$$=$<draw>2; $$->menu=$4;}
+            ;
+
+configs: /* empty */ | configs cfgpair ;
+
+cfgpair: T_NAME T_STRING         {cfgcurrent->title=$2;}
+       | T_BACK T_COLOR          {cfgcurrent->back=$2;}
+       | T_FORE bright T_COLOR   {cfgcurrent->fore=$3|$2;}
+       | T_BORD bright T_COLOR   {cfgcurrent->bord=$3|$2;}
+       | T_HEAD bright T_COLOR   {cfgcurrent->head=$3|$2;}
+       ;
+
+bright: /* empty */ {$$=0;} | T_BRIGHT {$$=8;} ;
+
+itemlist: item items  {$$=cfg_cat($1,$2);}  ;
+
+items: /* empty */ {$$=NULL;}
+     | items item  {$$= $1 ? cfg_cat($1,$2) : $2;}
+     ; 
+
+item: T_STRING T_FUNC             {$$=cfg_makeitem('F',$1,$2, NULL);}
+      | T_STRING T_FUN2 T_STRING    {$$=cfg_makeitem('2',$1,$2, $3);}
+      | T_STRING menu               {$$=cfg_makeitem('M',$1,NULL,$2);}
+      ;
+
+%% /* end grammar ###########################################################*/
+
+int yyerror(char *s)
+{
+   fprintf(stderr,"%s:%s(%i): %s\n",prgname,cfgname,cfglineno,s);
+   return 1;
+}
+
+int yywrap()
+{
+   return 1;
+}
+
+struct tokenName {
+   char *name;
+   int token;
+   int value;
+   };
+struct tokenName tokenList[] = {
+   {"foreground",T_FORE,0},
+   {"background",T_BACK,0},
+   {"border",    T_BORD,0},
+   {"head",      T_HEAD,0},
+   {"name",      T_NAME,0},
+   {"button",    T_BUTTON,0},
+   {"black",     T_COLOR,0},
+   {"blue",      T_COLOR,1},
+   {"green",     T_COLOR,2},
+   {"cyan",      T_COLOR,3},
+   {"red",       T_COLOR,4},
+   {"magenta",   T_COLOR,5},
+   {"yellow",    T_COLOR,6},
+   {"white",     T_COLOR,7},
+   {"bright",    T_BRIGHT,0},
+   {NULL,0,0}
+   };
+
+struct funcName {
+   char *name;
+   int token;
+   int (*fun)();
+   };
+struct funcName funcList[] = {
+   {"f.debug",T_FUNC,f_debug},
+   {"f.fgcmd",T_FUN2,f_fgcmd},
+   {"f.bgcmd",T_FUN2,f_bgcmd},
+   {"f.jptty",T_FUN2,f_jptty},
+   {"f.mktty",T_FUNC,f_mktty},
+   {"f.menu",T_FUNC,f_menu},
+   {"f.lock",T_FUN2,f_lock}, /* "lock one", "lock all" */
+   {"f.load",T_FUNC,f_load},
+   {"f.free",T_FUNC,f_free},
+   {"f.time",T_FUNC,f_time},
+   {"f.pipe",T_FUN2,f_pipe},
+   {"f.nop",T_FUNC,NULL},
+   {NULL,0,NULL}
+};
+
+/*---------------------------------------------------------------------*/
+int yylex(void)
+{
+   int c,i;
+   char s[80];
+   struct tokenName *tn;
+   struct funcName *fn;
+
+   while(1) {
+      i=0;
+      switch(c=getc(cfgfile)) {
+         case EOF: fclose(cfgfile); return 0;
+         case '\"':
+            do {
+               s[i]=getc(cfgfile);
+               if ((s[i])=='\n') {
+                  yyerror("unterminated string");
+                  cfglineno++;
+               }
+               if (s[i]=='\\') s[i]=getc(cfgfile);
+            } /* get '"' as '\"' */ while (s[i++]!='\"' && s[i-2] !='\\') ;
+            s[i-1]=0;
+            yylval.string=(char *)strdup(s);
+            return T_STRING;
+
+         case '#': while ( (c=getc(cfgfile)!='\n') && c!=EOF) ;
+         case '\n': cfglineno++;
+         case ' ': /* fall through */
+         case '\t': continue;
+         default: if (!isalpha(c)) return(c);
+      }
+      /* get a single word and convert it */
+      do {
+         s[i++]=c;
+      } while (isalnum(c=getc(cfgfile)) || c=='.');
+      ungetc(c,cfgfile);
+      s[i]=0;
+      for (tn=tokenList; tn->name; tn++)
+         if (tn->name[0]==s[0] && !strcmp(tn->name,s)) {
+            yylval.silly=tn->value; 
+            return tn->token;
+         }
+      for (fn=funcList; fn->name; fn++)
+         if (fn->name[0]==s[0] && !strcmp(fn->name,s)) {
+            yylval.fun=fn->fun; 
+            return fn->token;
+         }
+      yylval.string=(char *)strdup(s); return T_STRING;
+   }
+} 
+
+/*---------------------------------------------------------------------*/
+void cfg_free(Draw *what)
+{
+   Draw *ptr;
+   DrawItem *item;
+
+   for (ptr=what; ptr; ptr=ptr->next) {
+      if (ptr->title) free(ptr->title);
+      for (item=ptr->menu; item; item=item->next) {
+         if (item->name) free(item->name);
+         if (item->arg) free(item->arg);
+         if (item->type=='M' && item->clientdata) {
+            ((Draw *)(item->clientdata))->next=NULL; /* redundant */
+            cfg_free(item->clientdata);
+         }
+         if (item->clientdata) free(item->clientdata);
+      }
+   }
+}
+
+/*---------------------------------------------------------------------*/
+/* malloc an empty Draw */
+Draw *cfg_alloc(void)
+{
+   Draw *new=calloc(1,sizeof(Draw));
+
+   if (!new) return NULL;
+   new->back=DEFAULT_BACK;
+   new->fore=DEFAULT_FORE;
+   new->bord=DEFAULT_BORD;
+   new->head=DEFAULT_HEAD;
+
+   return new;
+}
+
+/*---------------------------------------------------------------------*/
+/* malloc an empty DrawItem and fill it */
+DrawItem *cfg_makeitem(int mode, char *msg, int(*fun)(), void *detail)
+{
+   DrawItem *new=calloc(1,sizeof(DrawItem));
+
+   if (!new) return NULL;
+
+   new->name=(char *)strdup(msg);
+   new->type=mode;
+   switch(mode) {
+      case '2': /* a function with one arg */
+         new->arg=(char *)strdup(detail);
+         /* fall through */
+
+      case 'F': /* a function without args */
+         new->fun=fun;
+         if (fun) fun(F_CREATE,new);
+         break;
+
+      case 'M':
+         new->clientdata=detail;
+         new->fun=f_menu;
+         break;
+
+      default: fprintf(stderr,"%s: unknown item type (can't happen)\n",prgname);
+   }
+
+   return new;
+}
+
+/*---------------------------------------------------------------------*/
+/* concatenate two item lists */
+DrawItem *cfg_cat(DrawItem *d1, DrawItem *d2)
+{
+   DrawItem *tmp;
+
+   for (tmp=d1; tmp->next; tmp=tmp->next) ;
+   tmp->next=d2;
+   return d1;
+}
+
+/*====================================================================*/
+void f__fix(struct passwd *pass)
+{
+   if (setgid(pass->pw_gid) < 0 ||
+       initgroups(pass->pw_name, pass->pw_gid) < 0 ||
+       setuid(pass->pw_uid) < 0)
+   exit(1);
+   setenv("HOME",    pass->pw_dir, 1);
+   setenv("LOGNAME", pass->pw_name,1);
+   setenv("USER",    pass->pw_name,1);
+}
+
+/*---------------------------------------------------------------------*/
+static int f_debug_one(FILE *f, Draw *draw)
+{
+   DrawItem *ip;
+   static int tc=0;
+   int i;
+
+#define LINE(args) for(i=0;i<tc;i++) putc('\t',f); fprintf args
+
+   LINE((f,"BUTT %i - %ix%i\n",draw->buttons,draw->width,draw->height));
+   LINE((f,"UID %i\n",draw->uid));
+   LINE((f,"fore %i - back %i\n",draw->fore,draw->back));
+   LINE((f,"bord %i - head %i\n",draw->bord,draw->head));
+   LINE((f,"---> \"%s\" %li\n",draw->title,(long)(draw->mtime)));
+   for (ip=draw->menu; ip; ip=ip->next) {
+      LINE((f,"    %i \"%s\" (%p)\n",ip->type,ip->name,ip->fun));
+      if (ip->fun == f_menu) {
+         tc++; f_debug_one(f,(Draw *)ip->clientdata); tc--;
+      }
+   }
+#undef LINE
+   return 0;
+}
+
+int f_debug(int mode, DrawItem *self, int uid)
+{
+#if 0 /* Disabled on account of security concerns; the way 
+       * "/tmp/root-debug" is used is gratuitously
+       * open to symlink abuse */
+
+   FILE *f;
+   Draw *dp;
+
+   switch (mode) {
+      case F_POST:
+         if (!(f=fopen("/tmp/root-debug","a"))) return 1;
+         for(dp=drawList; dp; dp=dp->next)
+	         f_debug_one(f,dp);
+         fprintf(f,"\n\n");
+         fclose(f);
+
+      case F_CREATE:
+      case F_INVOKE:
+         break;
+      }
+#endif /* 0 */
+   return 0;
+}
+
+
+/*---------------------------------------------------------------------*/
+int f_fgcmd(int mode, DrawItem *self, int uid)
+{
+   switch (mode) {
+      case F_CREATE:
+      case F_POST: break;
+      case F_INVOKE: ; /* MISS */
+   }
+   return 0;
+}
+
+/*---------------------------------------------------------------------*/
+int f_bgcmd(int mode, DrawItem *self, int uid)
+{
+   int i;
+   struct passwd *pass;
+
+   switch (mode) {
+      case F_CREATE:
+      case F_POST: break;
+      case F_INVOKE:
+         switch(fork()) {
+	         case -1:
+               gpm_report(GPM_PR_ERR, "fork(): %s", strerror(errno));
+               return 1;
+	         case 0:
+	            pass=getpwuid(uid);
+	            if (!pass) exit(1);
+	            f__fix(pass); /* setgid(), setuid(), setenv(), ... */
+	            close(0); close(1); close(2);
+	            open("/dev/null",O_RDONLY); /* stdin  */
+	            open(consolename,O_WRONLY); /* stdout */
+	            dup(1);                     /* stderr */  
+		    int open_max = sysconf(_SC_OPEN_MAX);
+		    if (open_max == -1) open_max = 1024;
+	            for (i=3;i<open_max; i++) close(i);
+	            execl("/bin/sh","sh","-c",self->arg,(char *)NULL);
+	            exit(1); /* shouldn't happen */
+	         default: return 0;
+
+	      }
+   }
+   return 0;
+}
+/*---------------------------------------------------------------------*/
+int f_jptty(int mode, DrawItem *self, int uid)
+{
+   int i,fd;
+
+   switch (mode) {
+      case F_CREATE:
+      case F_POST: break;
+      case F_INVOKE:
+         i=atoi(self->arg);
+         fd=open(consolename,O_RDWR);
+         if (fd<0) {
+            gpm_report(GPM_PR_ERR, "%s: %s",consolename, strerror(errno));
+            return 1;
+         } /*if*/
+         if (ioctl(fd, VT_ACTIVATE, i)<0) {
+            gpm_report(GPM_PR_ERR, "%s: %s", consolename,strerror(errno));
+            return 1;
+         } /*if*/
+         if (ioctl(fd, VT_WAITACTIVE, i)<0) {
+            gpm_report(GPM_PR_ERR, "%s: %s", consolename,strerror(errno));
+            return 1;
+         }
+      default: return 0;
+   }
+   return 0; /* silly gcc -Wall */
+}
+
+/*---------------------------------------------------------------------*/
+/* This array registers spawned consoles */
+static int consolepids[1+MAX_NR_USER_CONSOLES];
+
+int f_mktty(int mode, DrawItem *self, int uid)
+{
+   int fd, pid;
+   int vc;
+   char name[10];
+   switch (mode) {
+      case F_CREATE: self->arg=malloc(8);
+      case F_POST: break;
+      case F_INVOKE:
+         fd=open(consolename,O_RDWR);
+         if (fd<0) {
+            gpm_report(GPM_PR_ERR,"%s: %s",consolename, strerror(errno));
+            return 1;
+         } /*if*/
+         if (ioctl(fd, VT_OPENQRY, &vc)<0) {
+            gpm_report(GPM_PR_ERR, "%s: %s",consolename, strerror(errno));
+            return 1;
+         } /*if*/
+         switch(pid=fork()) {
+	         case -1:
+               gpm_report(GPM_PR_ERR, "fork(): %s", strerror(errno));
+               return 1;
+	         case 0: /* child: exec getty */
+	            sprintf(name,"tty%i",vc);
+	            execl("/sbin/mingetty","mingetty",name,(char *)NULL);
+	            exit(1); /* shouldn't happen */
+            default: /* father: jump to the tty */
+               gpm_report(GPM_PR_INFO,"Registering child %i on console %i"
+                                                                      ,pid,vc);
+	            consolepids[vc]=pid;
+	            sprintf(self->arg,"%i",vc);
+	            return f_jptty(mode,self,uid);
+	      }
+      default: return 0;
+   }
+   return 0;
+}
+
+/*---------------------------------------------------------------------*/
+int f_menu(int mode, DrawItem *self, int uid)
+{
+   return 0; /* just a placeholder, recursion is performed in main() */  
+}
+
+/*---------------------------------------------------------------------*/
+int f_lock(int mode, DrawItem *self, int uid)
+{
+#if 0 /* some kind of interesting ...: if never */
+   int all;
+   static DrawItem msg = {
+      0,
+      10,
+      "Enter your password to unlock",
+      NULL, NULL, NULL, NULL
+   };
+   static Draw
+
+
+   switch (mode) {
+      case F_CREATE: /* either "one" or anything else */
+         if (strcmp(self->arg,"one")) self->arg[0]='a';
+      case F_POST: break;
+      case F_INVOKE: /* the biggest of all... */
+   }
+
+#endif
+   return 0;
+}
+
+/*---------------------------------------------------------------------*/
+int f_load(int mode, DrawItem *self, int uid)
+{
+   FILE *f;
+   double l1,l2,l3;
+
+   l1=l2=l3=0.0;
+
+   switch (mode) {
+      case F_CREATE: /* modify name, just to fake its length */
+         self->clientdata=malloc(strlen(self->name)+20);
+         self->name=realloc(self->name,strlen(self->name)+20);
+         strcpy(self->clientdata,self->name);
+         strcat(self->clientdata," %5.2f %5.2f %5.2f");
+         sprintf(self->name,self->clientdata,l1,l2,l3);
+         break;
+
+      case F_POST:
+         if (!(f=fopen("/proc/loadavg","r"))) return 1;
+         fscanf(f,"%lf %lf %lf",&l1,&l2,&l3);
+         sprintf(self->name,self->clientdata,l1,l2,l3);
+         fclose(f);
+
+      case F_INVOKE: break;
+   }
+   return 0;
+}
+
+/*---------------------------------------------------------------------*/
+int f_free(int mode, DrawItem *self, int uid)
+{
+   FILE *f;
+   long l1,l2;
+   char s[80];
+
+   l1=l2=0;
+   switch (mode) {
+      case F_CREATE: /* modify name, just to fake its length */
+         self->clientdata=malloc(strlen(self->name)+30);
+         self->name=realloc(self->name,strlen(self->name)+30);
+         strcpy(self->clientdata,self->name);
+         strcat(self->clientdata," %5.2fM mem + %5.2fM swap");
+         sprintf(self->name,self->clientdata,(double)l1,(double)l2);
+         break;
+
+      case F_POST:
+         if (!(f=fopen("/proc/meminfo","r"))) return 1;
+         fgets(s,80,f);
+         fgets(s,80,f); sscanf(s,"%*s %*s %*s %li",&l1);
+         fgets(s,80,f); sscanf(s,"%*s %*s %*s %li",&l2);
+         sprintf(self->name,self->clientdata,
+	      (double)l1/1024/1024,(double)l2/1024/1024);
+         fclose(f);
+
+      case F_INVOKE: break;
+   }
+   return 0;
+}
+
+/*---------------------------------------------------------------------*/
+int f_time(int mode, DrawItem *self, int uid) {
+   char s[128];
+   struct tm *broken;
+   time_t t;
+
+   time(&t); broken=localtime(&t);
+   switch (mode) {
+      case F_CREATE: /* modify name, just to fake its length */
+         self->clientdata=self->name;
+         strftime(s,110,self->clientdata,broken);
+         strcat(s,"1234567890"); /* names can change length */       
+         self->name=(char *)strdup(s);
+         /* rewrite the right string */
+         strftime(self->name,110,self->clientdata,broken);
+         break;
+
+      case F_POST: strftime(self->name,120,self->clientdata,broken);
+      case F_INVOKE: break;
+   }
+   return 0;
+}
+
+/*---------------------------------------------------------------------*/
+int f_pipe(int mode, DrawItem *self, int uid)
+{
+   return 0;
+}
+
+/*====================================================================*/
+int fixone(Draw *ptr, int uid)
+{
+   int hei,wid;
+   DrawItem *item;
+
+   ptr->uid=uid;
+   hei=0; wid= ptr->title? strlen(ptr->title)+2 : 0;
+
+   /* calculate width and height */
+   for (item=ptr->menu; item; item=item->next) {
+      hei++;
+      wid= wid > strlen(item->name) ? wid : strlen(item->name);
+   }
+   ptr->height=hei+2;
+   ptr->width=wid+2;
+
+   /* fix paddings and recurse */
+   for (item=ptr->menu; item; item=item->next) {
+      item->pad=(ptr->width-strlen(item->name ? item->name : ""))/2;
+      if (item->fun==f_menu) fixone((Draw *)item->clientdata,uid);
+   }
+   return 0;
+}
+
+
+/* read menus from a file, and return a list or NULL */
+Draw *cfg_read(int uid)
+{
+   Draw *ptr;
+
+   if (!(cfgfile=fopen(cfgname,"r"))) {
+         gpm_report(GPM_PR_ERR, "%s: %s", cfgname, strerror(errno));
+         return NULL;
+   }
+   gpm_report(GPM_PR_INFO,"Reading file %s",cfgname);
+   cfglineno=1;
+   if (yyparse()) {
+         cfg_free(cfgall);
+         cfgall=NULL;
+         return NULL;
+   }
+
+   /* handle recursion */
+   for (ptr=cfgall; ptr; ptr=ptr->next) {
+      fixone(ptr,uid);
+   }
+
+   return cfgall;
+}
+
+
+/*---------------------------------------------------------------------*/
+/* the return value tells whether it has been newly loaded or not */
+int getdraw(int uid, int buttons, time_t mtime1, time_t mtime2)
+{
+   struct passwd *pass;
+   struct stat buf;
+   Draw *new, *np, *op, *pp;
+   int retval=0;
+   time_t mtime;
+
+   gpm_report(GPM_PR_DEBUG,"getdraw: %i %i %li %li",uid,buttons,mtime1,mtime2);
+   pass=getpwuid(uid);
+
+   /* deny personal cfg to root for security reasons */
+   if (pass==NULL || !uid || !opt_user) {
+      mtime=mtime2; uid=-1;
+      strcpy(cfgname,SYSTEM_CFG);
+   } else {
+      mtime=mtime1;
+      strcpy(cfgname,pass->pw_dir);
+      strcat(cfgname,"/" USER_CFG);
+   }
+
+   if (stat(cfgname,&buf)==-1) {
+      gpm_report(GPM_PR_DEBUG,"stat (%s) failed",cfgname);
+      /* try the system wide */
+      mtime=mtime2; uid = -1;
+      strcpy(cfgname,SYSTEM_CFG);
+      if (stat(cfgname,&buf)==-1) {
+         gpm_report(GPM_PR_ERR,"stat (%s) failed",cfgname);
+         return 0;
+      }
+   }
+
+   if (buf.st_mtime <= mtime) return 0;
+  
+   /* else, read the new drawing tree */
+   new=cfg_read(uid);
+   if (!new) return 0;
+
+   /* scan old data to remove duplicates */
+   for (np=pp=new; np; pp=np, np=np->next) {
+      np->mtime=buf.st_mtime;
+      if (np->buttons==buttons) retval++;
+      for (op=drawList; op; op=op->next)
+         if (op->uid==np->uid && op->buttons==np->buttons)
+            op->buttons=0; /* mark for deletion */
+      }
+
+   /* chain in */
+   pp->next=drawList; drawList=new;
+
+   /* actually remove fake entries */
+   for (np=drawList; np; pp=np, np=np->next)
+      if (!np->buttons) {
+         pp->next=np->next;
+         np->next=NULL;
+         cfg_free(np);
+         np=pp;
+      }
+   return retval; /* found or not */
+}
+
+
+/*---------------------------------------------------------------------*/
+Draw *retrievedraw(int uid, int buttons)
+{
+   Draw *drawPtr, *genericPtr=NULL;
+
+   /* retrieve a drawing by scanning the list */
+   do {
+      for (drawPtr=drawList; drawPtr; drawPtr=drawPtr->next) {
+         if (drawPtr->uid==uid && drawPtr->buttons==buttons) break;
+         if (drawPtr->uid==-1 && drawPtr->buttons==buttons) genericPtr=drawPtr;
+      }
+   } while (getdraw(uid,buttons,
+		 drawPtr ? drawPtr->mtime : 0,
+		 genericPtr ? genericPtr->mtime :0));
+
+
+   return drawPtr ? drawPtr : genericPtr;
+}
+
+
+/*=====================================================================*/
+int usage(void)
+{
+   printf( GPM_MESS_VERSION "\n"
+         "Usage: %s [options]\n",prgname);
+   printf("  Valid options are\n"
+         "    -m <number-or-name>   modifier to use\n"
+         "    -u                    inhibit user configuration files\n"
+         "    -D                    don't auto-background and run as daemon\n"
+         "    -V <verbosity-delta>  increase amount of logged messages\n"
+         );
+
+   return 1;
+}
+
+/*------------*/
+int getmask(char *arg, struct node *table)
+{
+   int last=0, value=0;
+   char *cur;
+   struct node *n;
+
+   if (isdigit(arg[0])) return atoi(arg);
+
+   while (1) {
+      while (*arg && !isalnum(*arg)) arg++; /* skip delimiters */
+      cur=arg;
+      while(isalnum(*cur)) cur++; /* scan the word */
+      if (!*cur) last++;
+      *cur=0;
+
+      for (n=table;n->name;n++)
+         if (!strcmp(n->name,arg)) {
+            value |= n->flag;
+            break;
+         }
+         if(!n->name) fprintf(stderr,"%s: Incorrect flag \"%s\"\n",prgname,arg);
+         if (last) break;
+         cur++; arg=cur;
+      }
+
+   return value;
+}
+
+/*------------*/
+int cmdline(int argc, char **argv)
+{
+   int opt;
+  
+   run_status = GPM_RUN_STARTUP;
+   while ((opt = getopt(argc, argv,"m:uDV::")) != -1) {
+         switch (opt) {
+            case 'm':  opt_mod=getmask(optarg, tableMod); break;
+            case 'u':  opt_user=0; break;
+            case 'D':  run_status = GPM_RUN_DEBUG; break;
+            case 'V':
+               /*gpm_debug_level += (0==optarg ? 1 : strtol(optarg,0,0)); */
+               break;
+            default:   return 1;
+         }
+
+   }
+   return 0;
+}
+
+
+
+/*------------*
+ * This buffer is passed to set_selection, and the only meaningful value
+ * is the last one, which is the mode: 4 means "clear_selection".
+ * however, the byte just before the 1th short must be 2 which denotes
+ * the selection-related stuff in ioctl(TIOCLINUX).
+ */
+
+static unsigned short clear_sel_args[6]={0, 0,0, 0,0, 4};
+static unsigned char *clear_sel_arg= (unsigned char *)clear_sel_args+1;
+
+/*------------*/
+static inline void scr_dump(int fd, FILE *f, unsigned char *buffer, int vc)
+{
+   int dumpfd;
+   char dumpname[20];
+
+   sprintf(dumpname,"/dev/vcsa%i",vc);
+   dumpfd=open(dumpname,O_RDONLY);
+   if (dumpfd<0) {
+      gpm_report(GPM_PR_ERR,"%s: %s", dumpname, strerror(errno));
+      return;
+   } /*if*/
+   clear_sel_arg[0]=2;  /* clear_selection */
+   ioctl(fd,TIOCLINUX,clear_sel_arg);
+   read(dumpfd,buffer,4);
+   read(dumpfd,buffer+4,2*buffer[0]*buffer[1]);
+   close(dumpfd);
+}
+
+/*------------*/
+static inline void scr_restore(int fd, FILE *f, unsigned char *buffer, int vc)
+{
+   int x,y, dumpfd;
+   char dumpname[20];
+
+   x=buffer[2]; y=buffer[3];
+   
+   /* WILL NOT WORK WITH DEVFS! FIXME! */
+   sprintf(dumpname,"/dev/vcsa%i",vc);
+   dumpfd=open(dumpname,O_WRONLY);
+   if (dumpfd<0) {
+      gpm_report(GPM_PR_ERR,"%s: %s", dumpname, strerror(errno));
+      return;
+   } /*if*/
+   clear_sel_arg[0]=2;  /* clear_selection */
+   ioctl(fd,TIOCLINUX,clear_sel_arg);
+   write(dumpfd,buffer,4+2*buffer[0]*buffer[1]);
+   close(dumpfd);
+}
+
+/*===================================================================*/
+/* post and unpost menus from the screen */
+static int postcount;
+static Posted *activemenu;
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+#define bigendian 1
+#else
+#define bigendian 0
+#endif
+
+Posted *postmenu(int fd, FILE *f, Draw *draw, int x, int y, int console)
+{
+   Posted *new;
+   DrawItem *item;
+   unsigned char *dump;
+   unsigned char *curr, *curr2;
+   int i;
+   short lines,columns;
+
+   new=calloc(1,sizeof(Posted));
+   if (!new) return NULL;
+   new->draw=draw;
+   new->dump=dump=malloc(opt_buf);
+   scr_dump(fd,f,dump,console);
+   lines=dump[0]; columns=dump[1];
+   i=(columns*dump[3]+dump[2])*2+1; /* where to get it */
+   if (i<0) i=1;
+   new->colorcell=dump[4+i-bigendian];
+   gpm_report(GPM_PR_DEBUG,"Colorcell=%02x (at %i,%i = %i)",
+                new->colorcell,dump[2],dump[3],i-bigendian);
+
+   /* place the box relative to the mouse */
+   if (!postcount) x -= draw->width/2; else x+=2;
+   y++;
+
+   /* fit inside the screen */
+   if (x<1) x=1;
+   if (x+draw->width >= columns) x=columns-1-draw->width;
+   if (y+draw->height > lines+1) y=lines+1-draw->height;
+   new->x=x; new->X=x+draw->width-1;
+   new->y=y; new->Y=y+draw->height-1;
+
+   /* these definitions are dirty hacks, but they help in writing to the screen */
+#if __BYTE_ORDER == __BIG_ENDIAN
+#define PUTC(c,f,b)   (*(curr++)=((b)<<4)+(f),*(curr++)=(c))
+#else
+#define PUTC(c,f,b)   (*(curr++)=(c),*(curr++)=((b)<<4)+(f))
+#endif
+#define PUTS(s,f,b)   for(curr2=s;*curr2;PUTC(*(curr2++),f,b))
+#define GOTO(x,y)     (curr=dump+4+2*((y)*columns+(x)))
+
+   x--; y--; /* /dev/vcs is zero based */
+   ioctl(fd,TCXONC,TCOOFF); /* inhibit further prints */
+   dump=malloc(opt_buf);
+   memcpy(dump,new->dump,opt_buf); /* dup the buffer */
+   /* top border */
+   GOTO(x,y);
+   PUTC(ULCORNER,draw->bord,draw->back);
+   for (i=0; i<draw->width; i++) PUTC(HORLINE,draw->bord,draw->back);
+   PUTC(URCORNER,draw->bord,draw->back);
+   if (draw->title) {
+         GOTO(x+(draw->width-strlen(draw->title))/2,y);
+         PUTC(' ',draw->head,draw->back);
+         PUTS(draw->title,draw->head,draw->back);
+         PUTC(' ',draw->head,draw->back);
+   }
+   /* sides and items */
+   for (item=draw->menu; y++, item; item=item->next) {
+         if (item->fun) (*(item->fun))(F_POST,item);
+         GOTO(x,y); PUTC(VERLINE,draw->bord,draw->back);
+         for (i=0;i<item->pad;i++) PUTC(' ',draw->fore,draw->back);
+         PUTS(item->name,draw->fore,draw->back); i+=strlen(item->name);
+         while (i++<draw->width) PUTC(' ',draw->fore,draw->back);
+         PUTC(VERLINE,draw->bord,draw->back);
+   }
+   /* bottom border */
+   GOTO(x,y);
+   PUTC(LLCORNER,draw->bord,draw->back);
+   for (i=0; i<draw->width; i++) PUTC(HORLINE,draw->bord,draw->back);
+   PUTC(LRCORNER,draw->bord,draw->back);
+
+   scr_restore(fd,f,dump,console);
+   free(dump);
+
+#undef PUTC
+#undef PUTS
+#undef GOTO
+
+   new->prev=activemenu;
+   activemenu=new;
+   postcount++;
+   return new;
+}
+
+Posted *unpostmenu(int fd, FILE *f, Posted *which, int vc)
+{
+   Posted *prev=which->prev;
+
+   scr_restore(fd,f,which->dump, vc);
+   ioctl(fd,TCXONC,TCOON); /* activate the console */  
+   free(which->dump);
+   free(which);
+   activemenu=prev;
+   postcount--;
+   return prev;
+}
+
+
+void reap_children(int signo)
+{
+   int i, pid;
+   pid=wait(&i);
+   gpm_report(GPM_PR_INFO,"pid %i exited %i",pid,i);
+
+   if (disallocFlag)
+      gpm_report(GPM_PR_INFO,"Warning, overriding logout from %i",disallocFlag);
+   for (i=1;i<=MAX_NR_USER_CONSOLES; i++)
+      if (consolepids[i]==pid) {
+         disallocFlag=i;
+         consolepids[i]=0;
+         gpm_report(GPM_PR_INFO,"Registering disallocation of console %i",i);
+         break;
+      }
+}
+
+
+void get_winsize(void)
+{
+   int fd;
+
+   if ((fd=open(consolename,O_RDONLY))<0) {
+         fprintf(stderr,"%s: ",prgname); perror(consolename);
+         exit(1);
+   }
+   ioctl(fd, TIOCGWINSZ, &win);
+   opt_buf=win.ws_col*win.ws_row;
+   close(fd);
+
+   opt_buf +=4; /* 2:size, 1:terminator, 1:alignment */
+   opt_buf*=2; /* the new scrdump and /dev/vcsa returns color info as well */
+}
+
+
+/*===================================================================*/
+static int do_resize=0;
+#if defined(__GLIBC__)
+__sighandler_t winchHandler(int errno);
+#else /* __GLIBC__ */
+void winchHandler(int errno);
+#endif /* __GLIBC__ */
+
+int main(int argc, char **argv)
+{
+   Gpm_Connect conn;
+   Gpm_Event ev;
+   int vc, fd=-1 ,uid=-1;
+   FILE *f=NULL;
+   struct stat stbuf;
+   Draw *draw=NULL;
+   DrawItem *item;
+   char s[80];
+   int posty = 0, postx, postX;
+   struct sigaction childaction;
+   int evflag;
+   int recursenow=0; /* not on first iteration */
+
+   prgname=argv[0];
+   consolename = Gpm_get_console();
+   setuid(0); /* if we're setuid, force it */
+
+   if (getuid()) {
+         fprintf(stderr,"%s: Must be root\n", prgname);
+         exit(1);
+   }
+
+   /*
+   * Now, first of all we need to check that /dev/vcs is there.
+   * But only if the kernel is new enough. vcs appeared in 1.1.82.
+   * If an actual open fails, a message on syslog will be issued.
+   */
+   {
+      struct utsname linux_info;
+      int v1,v2,v3;
+      struct stat sbuf;
+
+      if (uname(&linux_info)) {
+         fprintf(stderr,"%s: uname(): %s\n",prgname,strerror(errno));
+         exit(1);
+      }
+      sscanf(linux_info.release,"%d.%d.%d",&v1,&v2,&v3);
+      if (v1*1000000 + v2*1000 +v3 < 1001082) {
+         fprintf(stderr,"%s: can't run with linux < 1.1.82\n",prgname);
+         exit(1);
+      }
+      
+      /* problems with devfs! FIXME! */
+      if (stat("/dev/vcs0",&sbuf)<0 && stat("/dev/vcs",&sbuf)<0) {
+         fprintf(stderr,"%s: /dev/vcs0: %s\n",prgname,strerror(errno));
+         fprintf(stderr,"%s: do you have vcs devices? Refer to the manpage\n",
+                prgname);
+         exit(1);
+      } else if (!S_ISCHR(sbuf.st_mode) ||
+             VCS_MAJOR != major(sbuf.st_rdev) ||
+             0 != minor(sbuf.st_rdev)) {
+         fprintf(stderr,"Your /dev/vcs device looks funny\n");
+         fprintf(stderr,"Refer to the manpage and possibly run the"
+                        "create_vcs script in gpm source directory\n");
+         exit(1);
+      }
+   }
+
+   if (cmdline(argc,argv)) exit(usage());
+
+   openlog(prgname, LOG_PID|LOG_CONS, run_status == GPM_RUN_DAEMON ?
+                                                        LOG_DAEMON : LOG_USER);
+   /* reap your zombies */
+   childaction.sa_handler=reap_children;
+   sigemptyset(&childaction.sa_mask);
+   childaction.sa_flags=SA_INTERRUPT; /* need to break the select() call */
+   sigaction(SIGCHLD,&childaction,NULL);
+
+   /*....................................... Connect and get your buffer */
+
+   conn.eventMask=GPM_DOWN;
+   conn.defaultMask=GPM_MOVE; /* only ctrl-move gets the default */
+   conn.maxMod=conn.minMod=opt_mod;
+
+   gpm_zerobased=1;
+
+   for (vc=4; vc-->0;)
+      {
+         extern int gpm_tried; /* liblow.c */
+         gpm_tried=0; /* to enable retryings */
+         if (Gpm_Open(&conn,-1)!=-1)
+            break;
+         if (vc)
+            sleep(2);
+      }
+   if (!vc)
+      {
+         gpm_report(GPM_PR_OOPS,"can't open mouse connection");
+      }
+
+   conn.eventMask=~0; /* grab everything away form selection */
+   conn.defaultMask=GPM_MOVE & GPM_HARD;
+   conn.minMod=0;
+   conn.maxMod=~0;
+
+   chdir("/");
+
+
+   get_winsize();
+
+   /*....................................... Go to background */
+
+   if (run_status != GPM_RUN_DEBUG) {
+      switch(fork()) {
+         case -1: gpm_report(GPM_PR_OOPS,"fork()");                  /* error  */
+         case  0: run_status = GPM_RUN_DAEMON; break; /* child  */
+         default: _exit(0);                           /* parent */
+      }
+
+      /* redirect stderr to /dev/console -- avoided now. 
+         we should really cleans this more up! */
+      fclose(stdin); fclose(stdout);
+      if (!freopen(GPM_NULL_DEV,"w",stderr)) {
+            gpm_report(GPM_PR_OOPS,"freopen(stderr)");
+      }
+      if (setsid()<0)
+            gpm_report(GPM_PR_OOPS,"setsid()");
+
+   } /*if*/
+
+   /*....................................... Loop */
+
+   while((evflag=Gpm_GetEvent(&ev))!=0)
+      {
+         if (do_resize) {get_winsize(); do_resize--;}
+
+         if (disallocFlag)
+            {
+          struct utmp *uu;
+          struct utmp u;
+          char s[8];
+          int i=0;
+          
+          gpm_report(GPM_PR_INFO,"Disallocating %i",disallocFlag);
+          ioctl(fileno(stdin),VT_DISALLOCATE,&i); /* all of them */
+          
+          sprintf(s,"tty%i",disallocFlag);
+          setutent();
+          strncpy(u.ut_line, s, sizeof(u.ut_line));
+          if ((uu = getutline(&u)) != 0)
+            {
+              uu->ut_type = DEAD_PROCESS ;
+              pututline(uu);
+            }
+          disallocFlag=0;
+            }
+
+         if (evflag==-1) continue; /* no real event */
+
+         /* get rid of spurious events */
+         if (ev.type&GPM_MOVE) continue; 
+
+         vc=ev.vc;
+         gpm_report(GPM_PR_DEBUG,"%s: event on console %i at %i, %i",
+                    prgname,ev.vc,ev.x,ev.y);
+
+         if (!recursenow) /* don't open on recursion */
+            {
+          sprintf(s,"/dev/tty%i",ev.vc);
+          if (stat(s,&stbuf)==-1) continue;
+          uid = stbuf.st_uid;
+          gpm_report(GPM_PR_DEBUG,"uid = %i",uid);
+
+          draw=retrievedraw(uid,ev.buttons);
+          if (!draw) continue;
+
+          if (stat(s,&stbuf)==-1 || !(f=fopen(s,"r+"))) /* used to draw */
+            {
+              gpm_report(GPM_PR_ERR, "%s: %s", s, strerror(errno));
+              continue;
+            }
+          
+          if ((fd=open(s,O_RDWR))<0) /* will O_RDONLY be enough? */
+            {
+              gpm_report(GPM_PR_ERR, "%s: %s", s, strerror(errno));
+              exit(1);
+            }
+
+          /* now change your connection information and manage the console */
+          Gpm_Open(&conn,-1);
+          uid=stbuf.st_uid;
+            }
+
+         /* the task now is drawing the box from user data */
+         if (!draw)
+            {
+          /* itz Thu Jul  2 00:02:53 PDT 1998 this cannot happen, see
+             continue statement above?!? */
+          gpm_report(GPM_PR_ERR,"NULL menu ptr while drawing");
+          continue;
+            }
+         postmenu(fd,f,draw,ev.x,ev.y,vc);
+
+         while(Gpm_GetEvent(&ev)>0 && ev.vc==vc)
+            {
+          Gpm_FitEvent(&ev);
+          if (ev.type&GPM_DOWN)
+            break; /* we're done */
+          Gpm_DrawPointer(ev.x,ev.y,fd);
+            }
+         gpm_report(GPM_PR_DEBUG,"%i - %i",posty,ev.y);
+
+         /* ok, redraw, close and return waiting */
+         gpm_report(GPM_PR_DEBUG,"Active is %p",activemenu->draw);
+         posty=activemenu->y;
+         postx=activemenu->x;
+         postX=activemenu->X;
+
+         recursenow=0; item=NULL; /* by default */
+         posty=ev.y-posty;
+         if (postx<=ev.x && ev.x<=postX) /* look for it */
+            {
+          for (item=draw->menu; posty-- && item; item=item->next)
+            gpm_report(GPM_PR_DEBUG,"item %s (%p)",item->name, item->fun);
+          if (item && item->fun && item->fun==f_menu)
+            {
+              recursenow++;
+              draw=item->clientdata;
+              continue;
+            }
+            }
+
+         /* unpost them all */
+         while (unpostmenu(fd,f,activemenu,vc))
+            ;
+         close(fd);
+         fclose(f);
+         Gpm_Close();
+         recursenow=0; /* just in case... */
+
+         /* invoke the item */
+         if (item && item->fun)
+            (*(item->fun))(F_INVOKE,item,uid);
+      }
+
+   /*....................................... Done */
+
+   while (Gpm_Close()) ; /* close all the stack */ 
+   exit(0);
+}
+
+/* developers chat:
+ * author1 (possibly alessandro):
+   "This is because Linus uses 4-wide tabstops, forcing me to use the same
+   default to manage kernel sources"
+  * ian zimmermann (alias itz) on Wed Jul  1 23:28:13 PDT 1998:
+   "I don't mind what anybody's physical tab size is, but when I load it into
+   the editor I don't want any wrapping lines."
+  * nico schottelius (january 2002): 
+   "Although Linux document /usr/src/linux/Documentation/CodingStyle is mostly
+   correct, I agree with itz to avoid wrapping lines. Merging 4(alessandro)
+   /2(itz) spaces makes 3 which is the current standard."
+  */ 
+
+/* Local Variables: */
+/* tab-width:3      */
+/* c-indent-level: 3 */
+/* End:             */
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/prog
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/prog	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/prog	(revision 5)

Property changes on: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src/prog
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src	(revision 5)

Property changes on: a/gpm/create-1.20.7-patch/gpm-1.20.7-new/src
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/gpm/create-1.20.7-patch/gpm-1.20.7-new
===================================================================
--- a/gpm/create-1.20.7-patch/gpm-1.20.7-new	(nonexistent)
+++ a/gpm/create-1.20.7-patch/gpm-1.20.7-new	(revision 5)

Property changes on: a/gpm/create-1.20.7-patch/gpm-1.20.7-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/gpm/create-1.20.7-patch
===================================================================
--- a/gpm/create-1.20.7-patch	(nonexistent)
+++ a/gpm/create-1.20.7-patch	(revision 5)

Property changes on: a/gpm/create-1.20.7-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/gpm/patches/README
===================================================================
--- a/gpm/patches/README	(nonexistent)
+++ a/gpm/patches/README	(revision 5)
@@ -0,0 +1,3 @@
+
+We have added ncurses-6.2 headers to avoid circular library dependencies
+see: src/lib/libcurses.c and src/Makefile.in in gpm-1.20.7.patch .
Index: a/gpm/patches
===================================================================
--- a/gpm/patches	(nonexistent)
+++ a/gpm/patches	(revision 5)

Property changes on: a/gpm/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/gpm
===================================================================
--- a/gpm	(nonexistent)
+++ a/gpm	(revision 5)

Property changes on: a/gpm
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/gptfdisk/Makefile
===================================================================
--- a/gptfdisk/Makefile	(nonexistent)
+++ a/gptfdisk/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/gptfdisk
+
+versions    = 1.0.7
+pkgname     = gptfdisk
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: a/gptfdisk
===================================================================
--- a/gptfdisk	(nonexistent)
+++ a/gptfdisk	(revision 5)

Property changes on: a/gptfdisk
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/hdparm/Makefile
===================================================================
--- a/hdparm/Makefile	(nonexistent)
+++ a/hdparm/Makefile	(revision 5)
@@ -0,0 +1,57 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/hdparm
+
+versions    = 9.60
+pkgname     = hdparm
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+patches      = $(CURDIR)/patches/hdparm-9.60-pass-ldflags.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-9.60-pass-ldflags-patch     ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/hdparm/create-9.60-pass-ldflags-patch/create.patch.sh
===================================================================
--- a/hdparm/create-9.60-pass-ldflags-patch/create.patch.sh	(nonexistent)
+++ a/hdparm/create-9.60-pass-ldflags-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=9.60
+
+tar --files-from=file.list -xzvf ../hdparm-$VERSION.tar.gz
+mv hdparm-$VERSION hdparm-$VERSION-orig
+
+cp -rf ./hdparm-$VERSION-new ./hdparm-$VERSION
+
+diff --unified -Nr  hdparm-$VERSION-orig  hdparm-$VERSION > hdparm-$VERSION-pass-ldflags.patch
+
+mv hdparm-$VERSION-pass-ldflags.patch ../patches
+
+rm -rf ./hdparm-$VERSION
+rm -rf ./hdparm-$VERSION-orig

Property changes on: a/hdparm/create-9.60-pass-ldflags-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/hdparm/create-9.60-pass-ldflags-patch/file.list
===================================================================
--- a/hdparm/create-9.60-pass-ldflags-patch/file.list	(nonexistent)
+++ a/hdparm/create-9.60-pass-ldflags-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+hdparm-9.60/Makefile
Index: a/hdparm/create-9.60-pass-ldflags-patch/hdparm-9.60-new/Makefile
===================================================================
--- a/hdparm/create-9.60-pass-ldflags-patch/hdparm-9.60-new/Makefile	(nonexistent)
+++ a/hdparm/create-9.60-pass-ldflags-patch/hdparm-9.60-new/Makefile	(revision 5)
@@ -0,0 +1,62 @@
+# Makefile for hdparm
+
+# DESTDIR is for non root installs (eg packages, NFS) only!
+DESTDIR =
+
+binprefix = 
+manprefix = /usr
+exec_prefix = $(binprefix)/
+sbindir = $(exec_prefix)sbin
+mandir = $(manprefix)/share/man
+oldmandir = $(manprefix)/man
+
+CC ?= gcc
+STRIP ?= strip
+
+CFLAGS := -O2 -W -Wall -Wbad-function-cast -Wcast-align -Wpointer-arith -Wcast-qual -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -fkeep-inline-functions -Wwrite-strings -Waggregate-return -Wnested-externs -Wtrigraphs $(CFLAGS)
+
+LDFLAGS := $(LDFLAGS)
+
+INSTALL = install
+INSTALL_DATA = $(INSTALL) -m 644
+INSTALL_DIR = $(INSTALL) -m 755 -d
+INSTALL_PROGRAM = $(INSTALL)
+
+OBJS = hdparm.o identify.o sgio.o sysfs.o geom.o fallocate.o fibmap.o fwdownload.o dvdspeed.o wdidle3.o apt.o
+
+all:
+	$(MAKE) -j4 hdparm
+
+static:
+	LDFLAGS=-static $(MAKE)
+
+hdparm: Makefile hdparm.h sgio.h $(OBJS)
+	$(CC) $(LDFLAGS) -o hdparm $(OBJS)
+
+hdparm.o:	hdparm.h sgio.h
+
+identify.o:	hdparm.h
+
+dvdspeed.o:     dvdspeed.c
+
+sgio.o: sgio.c sgio.h hdparm.h
+
+fwdownload.o: fwdownload.c sgio.h hdparm.h
+
+apt.o:		apt.c
+
+install: all hdparm.8
+	if [ ! -z $(DESTDIR) ]; then $(INSTALL_DIR) $(DESTDIR) ; fi
+	if [ ! -z $(DESTDIR)$(sbindir) ]; then $(INSTALL_DIR) $(DESTDIR)$(sbindir) ; fi
+	if [ ! -z $(DESTDIR)$(mandir) ]; then $(INSTALL_DIR) $(DESTDIR)$(mandir) ; fi
+	if [ ! -z $(DESTDIR)$(mandir)/man8/ ]; then $(INSTALL_DIR) $(DESTDIR)$(mandir)/man8/ ; fi
+	if [ -f $(DESTDIR)$(sbindir)/hdparm ]; then rm -f $(DESTDIR)$(sbindir)/hdparm ; fi
+	if [ -f $(DESTDIR)$(mandir)/man8/hdparm.8 ]; then rm -f $(DESTDIR)$(mandir)/man8/hdparm.8 ;\
+	elif [ -f $(DESTDIR)$(oldmandir)/man8/hdparm.8 ]; then rm -f $(DESTDIR)$(oldmandir)/man8/hdparm.8 ; fi
+	$(INSTALL_PROGRAM) -D hdparm $(DESTDIR)$(sbindir)/hdparm
+	if [ -d $(DESTDIR)$(mandir) ]; then $(INSTALL_DATA) -D hdparm.8 $(DESTDIR)$(mandir)/man8/hdparm.8 ;\
+	elif [ -d $(DESTDIR)$(oldmandir) ]; then $(INSTALL_DATA) -D hdparm.8 $(DESTDIR)$(oldmandir)/man8/hdparm.8 ; fi
+
+clean:
+	-rm -f hdparm $(OBJS) core 2>/dev/null
+
Index: a/hdparm/create-9.60-pass-ldflags-patch/hdparm-9.60-new
===================================================================
--- a/hdparm/create-9.60-pass-ldflags-patch/hdparm-9.60-new	(nonexistent)
+++ a/hdparm/create-9.60-pass-ldflags-patch/hdparm-9.60-new	(revision 5)

Property changes on: a/hdparm/create-9.60-pass-ldflags-patch/hdparm-9.60-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/hdparm/create-9.60-pass-ldflags-patch
===================================================================
--- a/hdparm/create-9.60-pass-ldflags-patch	(nonexistent)
+++ a/hdparm/create-9.60-pass-ldflags-patch	(revision 5)

Property changes on: a/hdparm/create-9.60-pass-ldflags-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/hdparm/patches/README
===================================================================
--- a/hdparm/patches/README	(nonexistent)
+++ a/hdparm/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/hdparm/patches
===================================================================
--- a/hdparm/patches	(nonexistent)
+++ a/hdparm/patches	(revision 5)

Property changes on: a/hdparm/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/hdparm
===================================================================
--- a/hdparm	(nonexistent)
+++ a/hdparm	(revision 5)

Property changes on: a/hdparm
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/Makefile
===================================================================
--- a/infozip/Makefile	(nonexistent)
+++ a/infozip/Makefile	(revision 5)
@@ -0,0 +1,13 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+SOURCE_REQUIRES += ALL_DIRS
+
+
+include ../../../../build-system/core.mk
+
+
+download_clean:
+	@true
+
+.PHONY: download_clean
Index: a/infozip/unzip/Makefile
===================================================================
--- a/infozip/unzip/Makefile	(nonexistent)
+++ a/infozip/unzip/Makefile	(revision 5)
@@ -0,0 +1,57 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/infozip/unzip60
+
+versions    = 60
+pkgname     = unzip
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname), $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+patches     = $(CURDIR)/patches/unzip-6.0-slackware.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-6.0-slackware-patch     ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/infozip/unzip/create-6.0-slackware-patch/create.patch.sh
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/create.patch.sh	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+VERSION=6.0
+
+version=${VERSION/./}
+
+tar --files-from=file.list -xzvf ../unzip${version}.tar.gz
+mv unzip${version} unzip${version}-orig
+
+cp -rf ./unzip${version}-new ./unzip${version}
+
+diff --unified -Nr  unzip${version}-orig  unzip${version} > unzip-${VERSION}-slackware.patch
+
+mv unzip-${VERSION}-slackware.patch ../patches
+
+rm -rf ./unzip${version}
+rm -rf ./unzip${version}-orig

Property changes on: a/infozip/unzip/create-6.0-slackware-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/infozip/unzip/create-6.0-slackware-patch/file.list
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/file.list	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/file.list	(revision 5)
@@ -0,0 +1,14 @@
+unzip60/crc_i386.S
+unzip60/crypt.c
+unzip60/extract.c
+unzip60/fileio.c
+unzip60/list.c
+unzip60/man/unzip.1
+unzip60/match.c
+unzip60/process.c
+unzip60/unix/configure
+unzip60/unix/unix.c
+unzip60/unix/unxcfg.h
+unzip60/unzip.c
+unzip60/unzpriv.h
+unzip60/zipinfo.c
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/crc_i386.S
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/crc_i386.S	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/crc_i386.S	(revision 5)
@@ -0,0 +1,307 @@
+/*
+  Copyright (c) 1990-2007 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2000-Apr-09 or later
+  (the contents of which are also included in zip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*
+ * crc_i386.S, optimized CRC calculation function for Zip and UnZip,
+ * created by Paul Kienitz and Christian Spieler.  Last revised 07 Jan 2007.
+ *
+ * GRR 961110:  incorporated Scott Field optimizations from win32/crc_i386.asm
+ *              => overall 6% speedup in "unzip -tq" on 9MB zipfile (486-66)
+ *
+ * SPC 970402:  revised for Rodney Brown's optimizations (32-bit-wide
+ *              aligned reads for most of the data from buffer), can be
+ *              disabled by defining the macro NO_32_BIT_LOADS
+ *
+ * SPC 971012:  added Rodney Brown's additional tweaks for 32-bit-optimized
+ *              CPUs (like the Pentium Pro, Pentium II, and probably some
+ *              Pentium clones). This optimization is controlled by the
+ *              preprocessor switch "__686" and is disabled by default.
+ *              (This default is based on the assumption that most users
+ *              do not yet work on a Pentium Pro or Pentium II machine ...)
+ *
+ * COS 050116:  Enabled the 686 build by default, because there are hardly any
+ *              pre-686 CPUs in serious use nowadays. (See SPC 970402 above.)
+ *
+ * SPC 060103:  Updated code to incorporate newer optimizations found in zlib.
+ *
+ * SPC 070107:  Added conditional switch to deactivate crc32() compilation.
+ *
+ * FLAT memory model assumed.  Calling interface:
+ *   - args are pushed onto the stack from right to left,
+ *   - return value is given in the EAX register,
+ *   - all other registers (with exception of EFLAGS) are preserved. (With
+ *     GNU C 2.7.x, %edx and %ecx are `scratch' registers, but preserving
+ *     them nevertheless adds only 4 single byte instructions.)
+ *
+ * This source generates the function
+ * ulg crc32(ulg crc, ZCONST uch *buf, extent len).
+ *
+ * Loop unrolling can be disabled by defining the macro NO_UNROLLED_LOOPS.
+ * This results in shorter code at the expense of reduced performance.
+ */
+
+/* This file is NOT used in conjunction with zlib, or when only creation of
+ * the basic CRC_32_Table (for other purpose) is requested.
+ */
+#if !defined(USE_ZLIB) && !defined(CRC_TABLE_ONLY)
+
+/* Preprocess with -DNO_UNDERLINE if your C compiler does not prefix
+ * external symbols with an underline character '_'.
+ */
+#if defined(NO_UNDERLINE) || defined(__ELF__)
+#  define _crc32            crc32
+#  define _get_crc_table    get_crc_table
+#endif
+/* Use 16-byte alignment if your assembler supports it. Warning: gas
+ * uses a log(x) parameter (.align 4 means 16-byte alignment). On SVR4
+ * the parameter is a number of bytes.
+ */
+#ifndef ALIGNMENT
+#  define ALIGNMENT .align 4,0x90
+#endif
+
+#if defined(i386) || defined(_i386) || defined(_I386) || defined(__i386)
+
+/* This version is for 386 Unix, OS/2, MSDOS in 32 bit mode (gcc & gas).
+ * Warning: it uses the AT&T syntax: mov source,dest
+ * This file is only optional. If you want to use the C version,
+ * remove -DASM_CRC from CFLAGS in Makefile and set OBJA to an empty string.
+ */
+
+                .file   "crc_i386.S"
+
+#if !defined(PRE_686) && !defined(__686)
+   /* Optimize for Pentium Pro and compatible CPUs by default. */
+#  define __686
+#endif
+
+#if defined(NO_STD_STACKFRAME) && defined(USE_STD_STACKFRAME)
+#  undef USE_STACKFRAME
+#else
+   /* The default is to use standard stack frame entry, because it
+    * results in smaller code!
+    */
+#  ifndef USE_STD_STACKFRAME
+#    define USE_STD_STACKFRAME
+#  endif
+#endif
+
+#ifdef USE_STD_STACKFRAME
+#  define _STD_ENTRY    pushl   %ebp ; movl   %esp,%ebp
+#  define arg1  8(%ebp)
+#  define arg2  12(%ebp)
+#  define arg3  16(%ebp)
+#  define _STD_LEAVE    popl    %ebp
+#else /* !USE_STD_STACKFRAME */
+#  define _STD_ENTRY
+#  define arg1  24(%esp)
+#  define arg2  28(%esp)
+#  define arg3  32(%esp)
+#  define _STD_LEAVE
+#endif /* ?USE_STD_STACKFRAME */
+
+/*
+ * These two (three) macros make up the loop body of the CRC32 cruncher.
+ * registers modified:
+ *   eax  : crc value "c"
+ *   esi  : pointer to next data byte (or lword) "buf++"
+ * registers read:
+ *   edi  : pointer to base of crc_table array
+ * scratch registers:
+ *   ebx  : index into crc_table array
+ *          (requires upper three bytes = 0 when __686 is undefined)
+ */
+#ifndef __686   /* optimize for 386, 486, Pentium */
+#define Do_CRC          /* c = (c >> 8) ^ table[c & 0xFF] */\
+                movb    %al, %bl                ;/* tmp = c & 0xFF  */\
+                shrl    $8, %eax                ;/* c = (c >> 8)    */\
+                xorl    (%edi, %ebx, 4), %eax   ;/* c ^= table[tmp] */
+#else   /* __686 : optimize for Pentium Pro and compatible CPUs */
+#define Do_CRC          /* c = (c >> 8) ^ table[c & 0xFF] */\
+                movzbl  %al, %ebx               ;/* tmp = c & 0xFF  */\
+                shrl    $8, %eax                ;/* c = (c >> 8)    */\
+                xorl    (%edi, %ebx, 4), %eax   ;/* c ^=table[tmp]  */
+#endif  /* ?__686 */
+
+#define Do_CRC_byte             /* c = (c >> 8) ^ table[(c^*buf++)&0xFF] */\
+                xorb    (%esi), %al     ;/* c ^= *buf  */\
+                incl    %esi            ;/* buf++      */\
+                Do_CRC
+
+#define Do_CRC_byteof(ofs)      /* c = (c >> 8) ^ table[(c^*buf++)&0xFF] */\
+                xorb    ofs(%esi), %al  ;/* c ^= *buf  */\
+                incl    %esi            ;/* buf++      */\
+                Do_CRC
+
+#ifndef  NO_32_BIT_LOADS
+# ifdef IZ_CRCOPTIM_UNFOLDTBL
+   /* the edx register is needed in crc calculation */
+#  define SavLen arg3
+#  define UpdCRC_lword \
+                movzbl  %al, %ebx               ; \
+                movl    3072(%edi,%ebx,4), %edx ; \
+                movzbl  %ah, %ebx               ; \
+                shrl    $16, %eax               ; \
+                xor     2048(%edi,%ebx,4), %edx ; \
+                movzbl  %al, %ebx               ; \
+                shrl    $8,%eax                 ; \
+                xorl    1024(%edi,%ebx,4), %edx ; \
+                movl    (%edi,%eax,4), %eax     ; \
+                xorl    %edx,%eax               ;
+#  define UpdCRC_lword_sh(dwPtrIncr) \
+                movzbl  %al, %ebx               ; \
+                movl    3072(%edi,%ebx,4), %edx ; \
+                movzbl  %ah, %ebx               ; \
+                shrl    $16, %eax               ; \
+                xor     2048(%edi,%ebx,4), %edx ; \
+                movzbl  %al, %ebx               ; \
+                addl    $4*(dwPtrIncr), %esi    ;/* ((ulg *)buf)+=dwPtrIncr */\
+                shrl    $8,%eax                 ; \
+                xorl    1024(%edi,%ebx,4), %edx ; \
+                movl    (%edi,%eax,4),%eax      ; \
+                xorl    %edx,%eax               ;
+# else /* !IZ_CRCOPTIM_UNFOLDTBL */
+   /* the edx register is not needed anywhere else */
+#  define SavLen %edx
+#  define UpdCRC_lword \
+                Do_CRC \
+                Do_CRC \
+                Do_CRC \
+                Do_CRC
+#  define UpdCRC_lword_sh(dwPtrIncr) \
+                Do_CRC \
+                Do_CRC \
+                addl    $4*(dwPtrIncr), %esi    ;/* ((ulg *)buf)++   */\
+                Do_CRC \
+                Do_CRC
+# endif /* ?IZ_CRCOPTIM_UNFOLDTBL */
+#define Do_CRC_lword \
+                xorl    (%esi), %eax           ;/* c ^= *(ulg *)buf */\
+                UpdCRC_lword_sh(1)              /* ... ((ulg *)buf)++ */
+#define Do_CRC_4lword \
+                xorl    (%esi), %eax           ;/* c ^= *(ulg *)buf */\
+                UpdCRC_lword \
+                xorl    4(%esi), %eax          ;/* c ^= *((ulg *)buf+1) */\
+                UpdCRC_lword \
+                xorl    8(%esi), %eax          ;/* c ^= *((ulg *)buf+2) */\
+                UpdCRC_lword \
+                xorl    12(%esi), %eax         ;/* c ^= *((ulg *)buf]+3 */\
+                UpdCRC_lword_sh(4)              /* ... ((ulg *)buf)+=4 */
+#endif  /* !NO_32_BIT_LOADS */
+
+
+                .text
+
+                .globl  _crc32
+
+_crc32:                         /* ulg crc32(ulg crc, uch *buf, extent len) */
+                _STD_ENTRY
+                pushl   %edi
+                pushl   %esi
+                pushl   %ebx
+                pushl   %edx
+                pushl   %ecx
+
+                movl    arg2, %esi           /* 2nd arg: uch *buf            */
+                subl    %eax, %eax           /* > if (!buf)                  */
+                testl   %esi, %esi           /* >   return 0;                */
+                jz      .L_fine              /* > else {                     */
+                call    _get_crc_table
+                movl    %eax, %edi
+                movl    arg1, %eax           /* 1st arg: ulg crc             */
+#ifndef __686
+                subl    %ebx, %ebx           /* ebx=0; bl usable as dword    */
+#endif
+                movl    arg3, %ecx           /* 3rd arg: extent len          */
+                notl    %eax                 /* >   c = ~crc;                */
+
+                testl   %ecx, %ecx
+#ifndef  NO_UNROLLED_LOOPS
+                jz      .L_bail
+#  ifndef  NO_32_BIT_LOADS
+                /* Assert now have positive length */
+.L_align_loop:
+                testl   $3, %esi        /* Align buf on lword boundary */
+                jz      .L_aligned_now
+                Do_CRC_byte
+                decl    %ecx
+                jnz     .L_align_loop
+.L_aligned_now:
+#  endif  /* !NO_32_BIT_LOADS */
+                movl    %ecx, SavLen         /* save current value of len */
+                shrl    $4, %ecx             /* ecx = len / 16   */
+                jz      .L_No_Sixteens
+/*  align loop head at start of 486 internal cache line !! */
+                ALIGNMENT
+.L_Next_Sixteen:
+#  ifndef NO_32_BIT_LOADS
+                 Do_CRC_4lword
+#  else   /* NO_32_BIT_LOADS */
+                 Do_CRC_byteof(0)
+                 Do_CRC_byteof(1)
+                 Do_CRC_byteof(2)
+                 Do_CRC_byteof(3)
+                 Do_CRC_byteof(4)
+                 Do_CRC_byteof(5)
+                 Do_CRC_byteof(6)
+                 Do_CRC_byteof(7)
+                 Do_CRC_byteof(8)
+                 Do_CRC_byteof(9)
+                 Do_CRC_byteof(10)
+                 Do_CRC_byteof(11)
+                 Do_CRC_byteof(12)
+                 Do_CRC_byteof(13)
+                 Do_CRC_byteof(14)
+                 Do_CRC_byteof(15)
+                 addl    $16,%esi        ;/* buf += 16 */
+#  endif  /* ?NO_32_BIT_LOADS */
+                decl    %ecx
+                jnz     .L_Next_Sixteen
+
+.L_No_Sixteens:
+                movl    SavLen, %ecx
+                andl    $15, %ecx         /* ecx = len % 16   */
+# ifndef NO_32_BIT_LOADS
+                shrl    $2,%ecx           /* ecx = len / 4    */
+                jz      .L_No_Fours
+.L_Next_Four:
+                Do_CRC_lword
+                decl    %ecx
+                jnz     .L_Next_Four
+.L_No_Fours:
+                movl    SavLen,%ecx
+                andl    $3,%ecx          /* ecx = len % 4 */
+# endif /* !NO_32_BIT_LOADS */
+#endif /* !NO_UNROLLED_LOOPS */
+                jz      .L_bail          /* > if (len)                       */
+/* align loop head at start of 486 internal cache line !! */
+                ALIGNMENT
+.L_loupe:                                /* >   do {                         */
+                 Do_CRC_byte             /*       c = CRC32(c,*buf++,crctab);*/
+                decl    %ecx             /* >   } while (--len);             */
+                jnz     .L_loupe
+
+.L_bail:                                 /* > }                              */
+                notl    %eax             /* > return ~c;                     */
+.L_fine:
+                popl    %ecx
+                popl    %edx
+                popl    %ebx
+                popl    %esi
+                popl    %edi
+                _STD_LEAVE
+                ret
+
+#else
+ error: this asm version is for 386 only
+#endif /* i386 || _i386 || _I386 || __i386 */
+
+#endif /* !USE_ZLIB && !CRC_TABLE_ONLY */
+
+.section .note.GNU-stack, "", @progbits
+.previous
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/crypt.c
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/crypt.c	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/crypt.c	(revision 5)
@@ -0,0 +1,663 @@
+/*
+  Copyright (c) 1990-2007 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2005-Feb-10 or later
+  (the contents of which are also included in (un)zip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*
+  crypt.c (full version) by Info-ZIP.      Last revised:  [see crypt.h]
+
+  The main encryption/decryption source code for Info-Zip software was
+  originally written in Europe.  To the best of our knowledge, it can
+  be freely distributed in both source and object forms from any country,
+  including the USA under License Exception TSU of the U.S. Export
+  Administration Regulations (section 740.13(e)) of 6 June 2002.
+
+  NOTE on copyright history:
+  Previous versions of this source package (up to version 2.8) were
+  not copyrighted and put in the public domain.  If you cannot comply
+  with the Info-Zip LICENSE, you may want to look for one of those
+  public domain versions.
+ */
+
+/*
+  This encryption code is a direct transcription of the algorithm from
+  Roger Schlafly, described by Phil Katz in the file appnote.txt.  This
+  file (appnote.txt) is distributed with the PKZIP program (even in the
+  version without encryption capabilities).
+ */
+
+#define ZCRYPT_INTERNAL
+#include "zip.h"
+#include "crypt.h"
+#include "ttyio.h"
+
+#if CRYPT
+
+#ifndef FALSE
+#  define FALSE 0
+#endif
+
+#ifdef ZIP
+   /* For the encoding task used in Zip (and ZipCloak), we want to initialize
+      the crypt algorithm with some reasonably unpredictable bytes, see
+      the crypthead() function. The standard rand() library function is
+      used to supply these `random' bytes, which in turn is initialized by
+      a srand() call. The srand() function takes an "unsigned" (at least 16bit)
+      seed value as argument to determine the starting point of the rand()
+      pseudo-random number generator.
+      This seed number is constructed as "Seed = Seed1 .XOR. Seed2" with
+      Seed1 supplied by the current time (= "(unsigned)time()") and Seed2
+      as some (hopefully) nondeterministic bitmask. On many (most) systems,
+      we use some "process specific" number, as the PID or something similar,
+      but when nothing unpredictable is available, a fixed number may be
+      sufficient.
+      NOTE:
+      1.) This implementation requires the availability of the following
+          standard UNIX C runtime library functions: time(), rand(), srand().
+          On systems where some of them are missing, the environment that
+          incorporates the crypt routines must supply suitable replacement
+          functions.
+      2.) It is a very bad idea to use a second call to time() to set the
+          "Seed2" number! In this case, both "Seed1" and "Seed2" would be
+          (almost) identical, resulting in a (mostly) "zero" constant seed
+          number passed to srand().
+
+      The implementation environment defined in the "zip.h" header should
+      supply a reasonable definition for ZCR_SEED2 (an unsigned number; for
+      most implementations of rand() and srand(), only the lower 16 bits are
+      significant!). An example that works on many systems would be
+           "#define ZCR_SEED2  (unsigned)getpid()".
+      The default definition for ZCR_SEED2 supplied below should be regarded
+      as a fallback to allow successful compilation in "beta state"
+      environments.
+    */
+#  include <time.h>     /* time() function supplies first part of crypt seed */
+   /* "last resort" source for second part of crypt seed pattern */
+#  ifndef ZCR_SEED2
+#    define ZCR_SEED2 (unsigned)3141592654L     /* use PI as default pattern */
+#  endif
+#  ifdef GLOBAL         /* used in Amiga system headers, maybe others too */
+#    undef GLOBAL
+#  endif
+#  define GLOBAL(g) g
+#else /* !ZIP */
+#  define GLOBAL(g) G.g
+#endif /* ?ZIP */
+
+
+#ifdef UNZIP
+   /* char *key = (char *)NULL; moved to globals.h */
+#  ifndef FUNZIP
+     local int testp OF((__GPRO__ ZCONST uch *h));
+     local int testkey OF((__GPRO__ ZCONST uch *h, ZCONST char *key));
+#  endif
+#endif /* UNZIP */
+
+#ifndef UNZIP             /* moved to globals.h for UnZip */
+#  ifndef Z_UINT4_DEFINED
+#   if !defined(NO_LIMITS_H)
+#    if (defined(UINT_MAX) && (UINT_MAX == 0xffffffffUL))
+       typedef unsigned int     z_uint4;
+#      define Z_UINT4_DEFINED
+#    else
+#    if (defined(ULONG_MAX) && (ULONG_MAX == 0xffffffffUL))
+       typedef unsigned long    z_uint4;
+#      define Z_UINT4_DEFINED
+#    else
+#    if (defined(USHRT_MAX) && (USHRT_MAX == 0xffffffffUL))
+       typedef unsigned short   z_uint4;
+#      define Z_UINT4_DEFINED
+#    endif
+#    endif
+#    endif
+#   endif /* !NO_LIMITS_H */
+#  endif /* !Z_UINT4_DEFINED */
+#  ifndef Z_UINT4_DEFINED
+     typedef ulg                z_uint4;
+#    define Z_UINT4_DEFINED
+#  endif
+   local z_uint4 keys[3];       /* keys defining the pseudo-random sequence */
+#endif /* !UNZIP */
+
+#ifndef Trace
+#  ifdef CRYPT_DEBUG
+#    define Trace(x) fprintf x
+#  else
+#    define Trace(x)
+#  endif
+#endif
+
+#include "crc32.h"
+
+#ifdef IZ_CRC_BE_OPTIMIZ
+   local z_uint4 near crycrctab[256];
+   local z_uint4 near *cry_crctb_p = NULL;
+   local z_uint4 near *crytab_init OF((__GPRO));
+#  define CRY_CRC_TAB  cry_crctb_p
+#  undef CRC32
+#  define CRC32(c, b, crctab) (crctab[((int)(c) ^ (b)) & 0xff] ^ ((c) >> 8))
+#else
+#  define CRY_CRC_TAB  CRC_32_TAB
+#endif /* ?IZ_CRC_BE_OPTIMIZ */
+
+/***********************************************************************
+ * Return the next byte in the pseudo-random sequence
+ */
+int decrypt_byte(__G)
+    __GDEF
+{
+    unsigned temp;  /* POTENTIAL BUG:  temp*(temp^1) may overflow in an
+                     * unpredictable manner on 16-bit systems; not a problem
+                     * with any known compiler so far, though */
+
+    temp = ((unsigned)GLOBAL(keys[2]) & 0xffff) | 2;
+    return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
+}
+
+/***********************************************************************
+ * Update the encryption keys with the next byte of plain text
+ */
+int update_keys(__G__ c)
+    __GDEF
+    int c;                      /* byte of plain text */
+{
+    GLOBAL(keys[0]) = CRC32(GLOBAL(keys[0]), c, CRY_CRC_TAB);
+    GLOBAL(keys[1]) = (GLOBAL(keys[1])
+                       + (GLOBAL(keys[0]) & 0xff))
+                      * 134775813L + 1;
+    {
+      register int keyshift = (int)(GLOBAL(keys[1]) >> 24);
+      GLOBAL(keys[2]) = CRC32(GLOBAL(keys[2]), keyshift, CRY_CRC_TAB);
+    }
+    return c;
+}
+
+
+/***********************************************************************
+ * Initialize the encryption keys and the random header according to
+ * the given password.
+ */
+void init_keys(__G__ passwd)
+    __GDEF
+    ZCONST char *passwd;        /* password string with which to modify keys */
+{
+#ifdef IZ_CRC_BE_OPTIMIZ
+    if (cry_crctb_p == NULL) {
+        cry_crctb_p = crytab_init(__G);
+    }
+#endif
+    GLOBAL(keys[0]) = 305419896L;
+    GLOBAL(keys[1]) = 591751049L;
+    GLOBAL(keys[2]) = 878082192L;
+    while (*passwd != '\0') {
+        update_keys(__G__ (int)*passwd);
+        passwd++;
+    }
+}
+
+
+/***********************************************************************
+ * Initialize the local copy of the table of precomputed crc32 values.
+ * Whereas the public crc32-table is optimized for crc32 calculations
+ * on arrays of bytes, the crypt code needs the crc32 values in an
+ * byte-order-independent form as 32-bit unsigned numbers. On systems
+ * with Big-Endian byte order using the optimized crc32 code, this
+ * requires inverting the byte-order of the values in the
+ * crypt-crc32-table.
+ */
+#ifdef IZ_CRC_BE_OPTIMIZ
+local z_uint4 near *crytab_init(__G)
+    __GDEF
+{
+    int i;
+
+    for (i = 0; i < 256; i++) {
+        crycrctab[i] = REV_BE(CRC_32_TAB[i]);
+    }
+    return crycrctab;
+}
+#endif
+
+
+#ifdef ZIP
+
+/***********************************************************************
+ * Write encryption header to file zfile using the password passwd
+ * and the cyclic redundancy check crc.
+ */
+void crypthead(passwd, crc, zfile)
+    ZCONST char *passwd;         /* password string */
+    ulg crc;                     /* crc of file being encrypted */
+    FILE *zfile;                 /* where to write header */
+{
+    int n;                       /* index in random header */
+    int t;                       /* temporary */
+    int c;                       /* random byte */
+    uch header[RAND_HEAD_LEN];   /* random header */
+    static unsigned calls = 0;   /* ensure different random header each time */
+
+    /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the
+     * output of rand() to get less predictability, since rand() is
+     * often poorly implemented.
+     */
+    if (++calls == 1) {
+        srand((unsigned)time(NULL) ^ ZCR_SEED2);
+    }
+    init_keys(passwd);
+    for (n = 0; n < RAND_HEAD_LEN-2; n++) {
+        c = (rand() >> 7) & 0xff;
+        header[n] = (uch)zencode(c, t);
+    }
+    /* Encrypt random header (last two bytes is high word of crc) */
+    init_keys(passwd);
+    for (n = 0; n < RAND_HEAD_LEN-2; n++) {
+        header[n] = (uch)zencode(header[n], t);
+    }
+    header[RAND_HEAD_LEN-2] = (uch)zencode((int)(crc >> 16) & 0xff, t);
+    header[RAND_HEAD_LEN-1] = (uch)zencode((int)(crc >> 24) & 0xff, t);
+    fwrite(header, 1, RAND_HEAD_LEN, f);
+}
+
+
+#ifdef UTIL
+
+/***********************************************************************
+ * Encrypt the zip entry described by z from file source to file dest
+ * using the password passwd.  Return an error code in the ZE_ class.
+ */
+int zipcloak(z, source, dest, passwd)
+    struct zlist far *z;    /* zip entry to encrypt */
+    FILE *source, *dest;    /* source and destination files */
+    ZCONST char *passwd;    /* password string */
+{
+    int c;                  /* input byte */
+    int res;                /* result code */
+    ulg n;                  /* holds offset and counts size */
+    ush flag;               /* previous flags */
+    int t;                  /* temporary */
+    int ztemp;              /* temporary storage for zencode value */
+
+    /* Set encrypted bit, clear extended local header bit and write local
+       header to output file */
+    if ((n = (ulg)ftell(dest)) == (ulg)-1L) return ZE_TEMP;
+    z->off = n;
+    flag = z->flg;
+    z->flg |= 1,  z->flg &= ~8;
+    z->lflg |= 1, z->lflg &= ~8;
+    z->siz += RAND_HEAD_LEN;
+    if ((res = putlocal(z, dest)) != ZE_OK) return res;
+
+    /* Initialize keys with password and write random header */
+    crypthead(passwd, z->crc, dest);
+
+    /* Skip local header in input file */
+    if (fseek(source, (long)((4 + LOCHEAD) + (ulg)z->nam + (ulg)z->ext),
+              SEEK_CUR)) {
+        return ferror(source) ? ZE_READ : ZE_EOF;
+    }
+
+    /* Encrypt data */
+    for (n = z->siz - RAND_HEAD_LEN; n; n--) {
+        if ((c = getc(source)) == EOF) {
+            return ferror(source) ? ZE_READ : ZE_EOF;
+        }
+        ztemp = zencode(c, t);
+        putc(ztemp, dest);
+    }
+    /* Skip extended local header in input file if there is one */
+    if ((flag & 8) != 0 && fseek(source, 16L, SEEK_CUR)) {
+        return ferror(source) ? ZE_READ : ZE_EOF;
+    }
+    if (fflush(dest) == EOF) return ZE_TEMP;
+
+    /* Update number of bytes written to output file */
+    tempzn += (4 + LOCHEAD) + z->nam + z->ext + z->siz;
+
+    return ZE_OK;
+}
+
+/***********************************************************************
+ * Decrypt the zip entry described by z from file source to file dest
+ * using the password passwd.  Return an error code in the ZE_ class.
+ */
+int zipbare(z, source, dest, passwd)
+    struct zlist far *z;  /* zip entry to encrypt */
+    FILE *source, *dest;  /* source and destination files */
+    ZCONST char *passwd;  /* password string */
+{
+#ifdef ZIP10
+    int c0                /* byte preceding the last input byte */
+#endif
+    int c1;               /* last input byte */
+    ulg offset;           /* used for file offsets */
+    ulg size;             /* size of input data */
+    int r;                /* size of encryption header */
+    int res;              /* return code */
+    ush flag;             /* previous flags */
+
+    /* Save position and skip local header in input file */
+    if ((offset = (ulg)ftell(source)) == (ulg)-1L ||
+        fseek(source, (long)((4 + LOCHEAD) + (ulg)z->nam + (ulg)z->ext),
+              SEEK_CUR)) {
+        return ferror(source) ? ZE_READ : ZE_EOF;
+    }
+    /* Initialize keys with password */
+    init_keys(passwd);
+
+    /* Decrypt encryption header, save last two bytes */
+    c1 = 0;
+    for (r = RAND_HEAD_LEN; r; r--) {
+#ifdef ZIP10
+        c0 = c1;
+#endif
+        if ((c1 = getc(source)) == EOF) {
+            return ferror(source) ? ZE_READ : ZE_EOF;
+        }
+        Trace((stdout, " (%02x)", c1));
+        zdecode(c1);
+        Trace((stdout, " %02x", c1));
+    }
+    Trace((stdout, "\n"));
+
+    /* If last two bytes of header don't match crc (or file time in the
+     * case of an extended local header), back up and just copy. For
+     * pkzip 2.0, the check has been reduced to one byte only.
+     */
+#ifdef ZIP10
+    if ((ush)(c0 | (c1<<8)) !=
+        (z->flg & 8 ? (ush) z->tim & 0xffff : (ush)(z->crc >> 16))) {
+#else
+    if ((ush)c1 != (z->flg & 8 ? (ush) z->tim >> 8 : (ush)(z->crc >> 24))) {
+#endif
+        if (fseek(source, offset, SEEK_SET)) {
+            return ferror(source) ? ZE_READ : ZE_EOF;
+        }
+        if ((res = zipcopy(z, source, dest)) != ZE_OK) return res;
+        return ZE_MISS;
+    }
+
+    /* Clear encrypted bit and local header bit, and write local header to
+       output file */
+    if ((offset = (ulg)ftell(dest)) == (ulg)-1L) return ZE_TEMP;
+    z->off = offset;
+    flag = z->flg;
+    z->flg &= ~9;
+    z->lflg &= ~9;
+    z->siz -= RAND_HEAD_LEN;
+    if ((res = putlocal(z, dest)) != ZE_OK) return res;
+
+    /* Decrypt data */
+    for (size = z->siz; size; size--) {
+        if ((c1 = getc(source)) == EOF) {
+            return ferror(source) ? ZE_READ : ZE_EOF;
+        }
+        zdecode(c1);
+        putc(c1, dest);
+    }
+    /* Skip extended local header in input file if there is one */
+    if ((flag & 8) != 0 && fseek(source, 16L, SEEK_CUR)) {
+        return ferror(source) ? ZE_READ : ZE_EOF;
+    }
+    if (fflush(dest) == EOF) return ZE_TEMP;
+
+    /* Update number of bytes written to output file */
+    tempzn += (4 + LOCHEAD) + z->nam + z->ext + z->siz;
+
+    return ZE_OK;
+}
+
+
+#else /* !UTIL */
+
+/***********************************************************************
+ * If requested, encrypt the data in buf, and in any case call fwrite()
+ * with the arguments to zfwrite().  Return what fwrite() returns.
+ *
+ * A bug has been found when encrypting large files.  See trees.c
+ * for details and the fix.
+ */
+unsigned zfwrite(buf, item_size, nb, f)
+    zvoid *buf;                 /* data buffer */
+    extent item_size;           /* size of each item in bytes */
+    extent nb;                  /* number of items */
+    FILE *f;                    /* file to write to */
+{
+    int t;                      /* temporary */
+
+    if (key != (char *)NULL) {  /* key is the global password pointer */
+        ulg size;               /* buffer size */
+        char *p = (char*)buf;   /* steps through buffer */
+
+        /* Encrypt data in buffer */
+        for (size = item_size*(ulg)nb; size != 0; p++, size--) {
+            *p = (char)zencode(*p, t);
+        }
+    }
+    /* Write the buffer out */
+    return fwrite(buf, item_size, nb, f);
+}
+
+#endif /* ?UTIL */
+#endif /* ZIP */
+
+
+#if (defined(UNZIP) && !defined(FUNZIP))
+
+/***********************************************************************
+ * Get the password and set up keys for current zipfile member.
+ * Return PK_ class error.
+ */
+int decrypt(__G__ passwrd)
+    __GDEF
+    ZCONST char *passwrd;
+{
+    ush b;
+    int n, r;
+    uch h[RAND_HEAD_LEN];
+
+    Trace((stdout, "\n[incnt = %d]: ", GLOBAL(incnt)));
+
+    /* get header once (turn off "encrypted" flag temporarily so we don't
+     * try to decrypt the same data twice) */
+    GLOBAL(pInfo->encrypted) = FALSE;
+    defer_leftover_input(__G);
+    for (n = 0; n < RAND_HEAD_LEN; n++) {
+        /* 2012-11-23 SMS.  (OUSPG report.)
+         * Quit early if compressed size < HEAD_LEN.  The resulting
+         * error message ("unable to get password") could be improved,
+         * but it's better than trying to read nonexistent data, and
+         * then continuing with a negative G.csize.  (See
+         * fileio.c:readbyte()).
+         */
+        if ((b = NEXTBYTE) == (ush)EOF)
+        {
+            return PK_ERR;
+        }
+        h[n] = (uch)b;
+        Trace((stdout, " (%02x)", h[n]));
+    }
+    undefer_input(__G);
+    GLOBAL(pInfo->encrypted) = TRUE;
+
+    if (GLOBAL(newzip)) { /* this is first encrypted member in this zipfile */
+        GLOBAL(newzip) = FALSE;
+        if (passwrd != (char *)NULL) { /* user gave password on command line */
+            if (!GLOBAL(key)) {
+                if ((GLOBAL(key) = (char *)malloc(strlen(passwrd)+1)) ==
+                    (char *)NULL)
+                    return PK_MEM2;
+                strcpy(GLOBAL(key), passwrd);
+                GLOBAL(nopwd) = TRUE;  /* inhibit password prompting! */
+            }
+        } else if (GLOBAL(key)) { /* get rid of previous zipfile's key */
+            free(GLOBAL(key));
+            GLOBAL(key) = (char *)NULL;
+        }
+    }
+
+    /* if have key already, test it; else allocate memory for it */
+    if (GLOBAL(key)) {
+        if (!testp(__G__ h))
+            return PK_COOL;   /* existing password OK (else prompt for new) */
+        else if (GLOBAL(nopwd))
+            return PK_WARN;   /* user indicated no more prompting */
+    } else if ((GLOBAL(key) = (char *)malloc(IZ_PWLEN+1)) == (char *)NULL)
+        return PK_MEM2;
+
+    /* try a few keys */
+    n = 0;
+    do {
+        r = (*G.decr_passwd)((zvoid *)&G, &n, GLOBAL(key), IZ_PWLEN+1,
+                             GLOBAL(zipfn), GLOBAL(filename));
+        if (r == IZ_PW_ERROR) {         /* internal error in fetch of PW */
+            free (GLOBAL(key));
+            GLOBAL(key) = NULL;
+            return PK_MEM2;
+        }
+        if (r != IZ_PW_ENTERED) {       /* user replied "skip" or "skip all" */
+            *GLOBAL(key) = '\0';        /*   We try the NIL password, ... */
+            n = 0;                      /*   and cancel fetch for this item. */
+        }
+        if (!testp(__G__ h))
+            return PK_COOL;
+        if (r == IZ_PW_CANCELALL)       /* User replied "Skip all" */
+            GLOBAL(nopwd) = TRUE;       /*   inhibit any further PW prompt! */
+    } while (n > 0);
+
+    return PK_WARN;
+
+} /* end function decrypt() */
+
+
+
+/***********************************************************************
+ * Test the password.  Return -1 if bad, 0 if OK.
+ */
+local int testp(__G__ h)
+    __GDEF
+    ZCONST uch *h;
+{
+    int r;
+    char *key_translated;
+
+    /* On systems with "obscure" native character coding (e.g., EBCDIC),
+     * the first test translates the password to the "main standard"
+     * character coding. */
+
+#ifdef STR_TO_CP1
+    /* allocate buffer for translated password */
+    if ((key_translated = malloc(strlen(GLOBAL(key)) + 1)) == (char *)NULL)
+        return -1;
+    /* first try, test password translated "standard" charset */
+    r = testkey(__G__ h, STR_TO_CP1(key_translated, GLOBAL(key)));
+#else /* !STR_TO_CP1 */
+    /* first try, test password as supplied on the extractor's host */
+    r = testkey(__G__ h, GLOBAL(key));
+#endif /* ?STR_TO_CP1 */
+
+#ifdef STR_TO_CP2
+    if (r != 0) {
+#ifndef STR_TO_CP1
+        /* now prepare for second (and maybe third) test with translated pwd */
+        if ((key_translated = malloc(strlen(GLOBAL(key)) + 1)) == (char *)NULL)
+            return -1;
+#endif
+        /* second try, password translated to alternate ("standard") charset */
+        r = testkey(__G__ h, STR_TO_CP2(key_translated, GLOBAL(key)));
+#ifdef STR_TO_CP3
+        if (r != 0)
+            /* third try, password translated to another "standard" charset */
+            r = testkey(__G__ h, STR_TO_CP3(key_translated, GLOBAL(key)));
+#endif
+#ifndef STR_TO_CP1
+        free(key_translated);
+#endif
+    }
+#endif /* STR_TO_CP2 */
+
+#ifdef STR_TO_CP1
+    free(key_translated);
+    if (r != 0) {
+        /* last resort, test password as supplied on the extractor's host */
+        r = testkey(__G__ h, GLOBAL(key));
+    }
+#endif /* STR_TO_CP1 */
+
+    return r;
+
+} /* end function testp() */
+
+
+local int testkey(__G__ h, key)
+    __GDEF
+    ZCONST uch *h;      /* decrypted header */
+    ZCONST char *key;   /* decryption password to test */
+{
+    ush b;
+#ifdef ZIP10
+    ush c;
+#endif
+    int n;
+    uch *p;
+    uch hh[RAND_HEAD_LEN]; /* decrypted header */
+
+    /* set keys and save the encrypted header */
+    init_keys(__G__ key);
+    memcpy(hh, h, RAND_HEAD_LEN);
+
+    /* check password */
+    for (n = 0; n < RAND_HEAD_LEN; n++) {
+        zdecode(hh[n]);
+        Trace((stdout, " %02x", hh[n]));
+    }
+
+    Trace((stdout,
+      "\n  lrec.crc= %08lx  crec.crc= %08lx  pInfo->ExtLocHdr= %s\n",
+      GLOBAL(lrec.crc32), GLOBAL(pInfo->crc),
+      GLOBAL(pInfo->ExtLocHdr) ? "true":"false"));
+    Trace((stdout, "  incnt = %d  unzip offset into zipfile = %ld\n",
+      GLOBAL(incnt),
+      GLOBAL(cur_zipfile_bufstart)+(GLOBAL(inptr)-GLOBAL(inbuf))));
+
+    /* same test as in zipbare(): */
+
+#ifdef ZIP10 /* check two bytes */
+    c = hh[RAND_HEAD_LEN-2], b = hh[RAND_HEAD_LEN-1];
+    Trace((stdout,
+      "  (c | (b<<8)) = %04x  (crc >> 16) = %04x  lrec.time = %04x\n",
+      (ush)(c | (b<<8)), (ush)(GLOBAL(lrec.crc32) >> 16),
+      ((ush)GLOBAL(lrec.last_mod_dos_datetime) & 0xffff))));
+    if ((ush)(c | (b<<8)) != (GLOBAL(pInfo->ExtLocHdr) ?
+                           ((ush)GLOBAL(lrec.last_mod_dos_datetime) & 0xffff) :
+                           (ush)(GLOBAL(lrec.crc32) >> 16)))
+        return -1;  /* bad */
+#else
+    b = hh[RAND_HEAD_LEN-1];
+    Trace((stdout, "  b = %02x  (crc >> 24) = %02x  (lrec.time >> 8) = %02x\n",
+      b, (ush)(GLOBAL(lrec.crc32) >> 24),
+      ((ush)GLOBAL(lrec.last_mod_dos_datetime) >> 8) & 0xff));
+    if (b != (GLOBAL(pInfo->ExtLocHdr) ?
+        ((ush)GLOBAL(lrec.last_mod_dos_datetime) >> 8) & 0xff :
+        (ush)(GLOBAL(lrec.crc32) >> 24)))
+        return -1;  /* bad */
+#endif
+    /* password OK:  decrypt current buffer contents before leaving */
+    for (n = (long)GLOBAL(incnt) > GLOBAL(csize) ?
+             (int)GLOBAL(csize) : GLOBAL(incnt),
+         p = GLOBAL(inptr); n--; p++)
+        zdecode(*p);
+    return 0;       /* OK */
+
+} /* end function testkey() */
+
+#endif /* UNZIP && !FUNZIP */
+
+#else /* !CRYPT */
+
+/* something "externally visible" to shut up compiler/linker warnings */
+int zcr_dummy;
+
+#endif /* ?CRYPT */
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/extract.c
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/extract.c	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/extract.c	(revision 5)
@@ -0,0 +1,3031 @@
+/*
+  Copyright (c) 1990-2014 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2009-Jan-02 or later
+  (the contents of which are also included in unzip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*---------------------------------------------------------------------------
+
+  extract.c
+
+  This file contains the high-level routines ("driver routines") for extrac-
+  ting and testing zipfile members.  It calls the low-level routines in files
+  explode.c, inflate.c, unreduce.c and unshrink.c.
+
+  Contains:  extract_or_test_files()
+             store_info()
+             find_compr_idx()
+             extract_or_test_entrylist()
+             extract_or_test_member()
+             TestExtraField()
+             test_compr_eb()
+             memextract()
+             memflush()
+             extract_izvms_block()    (VMS or VMS_TEXT_CONV)
+             set_deferred_symlink()   (SYMLINKS only)
+             fnfilter()
+             dircomp()                (SET_DIR_ATTRIB only)
+             UZbunzip2()              (USE_BZIP2 only)
+
+  ---------------------------------------------------------------------------*/
+
+
+#define __EXTRACT_C     /* identifies this source module */
+#define UNZIP_INTERNAL
+#include "unzip.h"
+#ifdef WINDLL
+#  ifdef POCKET_UNZIP
+#    include "wince/intrface.h"
+#  else
+#    include "windll/windll.h"
+#  endif
+#endif
+#include "crc32.h"
+#include "crypt.h"
+#include <wctype.h>
+
+#define GRRDUMP(buf,len) { \
+    int i, j; \
+ \
+    for (j = 0;  j < (len)/16;  ++j) { \
+        printf("        "); \
+        for (i = 0;  i < 16;  ++i) \
+            printf("%02x ", (uch)(buf)[i+(j<<4)]); \
+        printf("\n        "); \
+        for (i = 0;  i < 16;  ++i) { \
+            char c = (char)(buf)[i+(j<<4)]; \
+ \
+            if (c == '\n') \
+                printf("\\n "); \
+            else if (c == '\r') \
+                printf("\\r "); \
+            else \
+                printf(" %c ", c); \
+        } \
+        printf("\n"); \
+    } \
+    if ((len) % 16) { \
+        printf("        "); \
+        for (i = j<<4;  i < (len);  ++i) \
+            printf("%02x ", (uch)(buf)[i]); \
+        printf("\n        "); \
+        for (i = j<<4;  i < (len);  ++i) { \
+            char c = (char)(buf)[i]; \
+ \
+            if (c == '\n') \
+                printf("\\n "); \
+            else if (c == '\r') \
+                printf("\\r "); \
+            else \
+                printf(" %c ", c); \
+        } \
+        printf("\n"); \
+    } \
+}
+
+static int store_info OF((__GPRO));
+#ifdef SET_DIR_ATTRIB
+static int extract_or_test_entrylist OF((__GPRO__ unsigned numchunk,
+                ulg *pfilnum, ulg *pnum_bad_pwd, zoff_t *pold_extra_bytes,
+                unsigned *pnum_dirs, direntry **pdirlist,
+                int error_in_archive));
+#else
+static int extract_or_test_entrylist OF((__GPRO__ unsigned numchunk,
+                ulg *pfilnum, ulg *pnum_bad_pwd, zoff_t *pold_extra_bytes,
+                int error_in_archive));
+#endif
+static int extract_or_test_member OF((__GPRO));
+#ifndef SFX
+   static int TestExtraField OF((__GPRO__ uch *ef, unsigned ef_len));
+   static int test_compr_eb OF((__GPRO__ uch *eb, unsigned eb_size,
+        unsigned compr_offset,
+        int (*test_uc_ebdata)(__GPRO__ uch *eb, unsigned eb_size,
+                              uch *eb_ucptr, ulg eb_ucsize)));
+#endif
+#if (defined(VMS) || defined(VMS_TEXT_CONV))
+   static void decompress_bits OF((uch *outptr, unsigned needlen,
+                                   ZCONST uch *bitptr));
+#endif
+#ifdef SYMLINKS
+   static void set_deferred_symlink OF((__GPRO__ slinkentry *slnk_entry));
+#endif
+#ifdef SET_DIR_ATTRIB
+   static int Cdecl dircomp OF((ZCONST zvoid *a, ZCONST zvoid *b));
+#endif
+
+
+
+/*******************************/
+/*  Strings used in extract.c  */
+/*******************************/
+
+static ZCONST char Far VersionMsg[] =
+  "   skipping: %-22s  need %s compat. v%u.%u (can do v%u.%u)\n";
+static ZCONST char Far ComprMsgNum[] =
+  "   skipping: %-22s  unsupported compression method %u\n";
+#ifndef SFX
+   static ZCONST char Far ComprMsgName[] =
+     "   skipping: %-22s  `%s' method not supported\n";
+   static ZCONST char Far CmprNone[]       = "store";
+   static ZCONST char Far CmprShrink[]     = "shrink";
+   static ZCONST char Far CmprReduce[]     = "reduce";
+   static ZCONST char Far CmprImplode[]    = "implode";
+   static ZCONST char Far CmprTokenize[]   = "tokenize";
+   static ZCONST char Far CmprDeflate[]    = "deflate";
+   static ZCONST char Far CmprDeflat64[]   = "deflate64";
+   static ZCONST char Far CmprDCLImplode[] = "DCL implode";
+   static ZCONST char Far CmprBzip[]       = "bzip2";
+   static ZCONST char Far CmprLZMA[]       = "LZMA";
+   static ZCONST char Far CmprIBMTerse[]   = "IBM/Terse";
+   static ZCONST char Far CmprIBMLZ77[]    = "IBM LZ77";
+   static ZCONST char Far CmprWavPack[]    = "WavPack";
+   static ZCONST char Far CmprPPMd[]       = "PPMd";
+   static ZCONST char Far *ComprNames[NUM_METHODS] = {
+     CmprNone, CmprShrink, CmprReduce, CmprReduce, CmprReduce, CmprReduce,
+     CmprImplode, CmprTokenize, CmprDeflate, CmprDeflat64, CmprDCLImplode,
+     CmprBzip, CmprLZMA, CmprIBMTerse, CmprIBMLZ77, CmprWavPack, CmprPPMd
+   };
+   static ZCONST unsigned ComprIDs[NUM_METHODS] = {
+     STORED, SHRUNK, REDUCED1, REDUCED2, REDUCED3, REDUCED4,
+     IMPLODED, TOKENIZED, DEFLATED, ENHDEFLATED, DCLIMPLODED,
+     BZIPPED, LZMAED, IBMTERSED, IBMLZ77ED, WAVPACKED, PPMDED
+   };
+#endif /* !SFX */
+static ZCONST char Far FilNamMsg[] =
+  "%s:  bad filename length (%s)\n";
+#ifndef SFX
+   static ZCONST char Far WarnNoMemCFName[] =
+     "%s:  warning, no memory for comparison with local header\n";
+   static ZCONST char Far LvsCFNamMsg[] =
+     "%s:  mismatching \"local\" filename (%s),\n\
+         continuing with \"central\" filename version\n";
+#endif /* !SFX */
+#if (!defined(SFX) && defined(UNICODE_SUPPORT))
+   static ZCONST char Far GP11FlagsDiffer[] =
+     "file #%lu (%s):\n\
+         mismatch between local and central GPF bit 11 (\"UTF-8\"),\n\
+         continuing with central flag (IsUTF8 = %d)\n";
+#endif /* !SFX && UNICODE_SUPPORT */
+static ZCONST char Far WrnStorUCSizCSizDiff[] =
+  "%s:  ucsize %s <> csize %s for STORED entry\n\
+         continuing with \"compressed\" size value\n";
+static ZCONST char Far ExtFieldMsg[] =
+  "%s:  bad extra field length (%s)\n";
+static ZCONST char Far OffsetMsg[] =
+  "file #%lu:  bad zipfile offset (%s):  %ld\n";
+static ZCONST char Far ExtractMsg[] =
+  "%8sing: %-22s  %s%s";
+#ifndef SFX
+   static ZCONST char Far LengthMsg[] =
+     "%s  %s:  %s bytes required to uncompress to %s bytes;\n    %s\
+      supposed to require %s bytes%s%s%s\n";
+#endif
+
+static ZCONST char Far BadFileCommLength[] = "%s:  bad file comment length\n";
+static ZCONST char Far LocalHdrSig[] = "local header sig";
+static ZCONST char Far BadLocalHdr[] = "file #%lu:  bad local header\n";
+static ZCONST char Far AttemptRecompensate[] =
+  "  (attempting to re-compensate)\n";
+#ifndef SFX
+   static ZCONST char Far BackslashPathSep[] =
+     "warning:  %s appears to use backslashes as path separators\n";
+#endif
+static ZCONST char Far AbsolutePathWarning[] =
+  "warning:  stripped absolute path spec from %s\n";
+static ZCONST char Far SkipVolumeLabel[] =
+  "   skipping: %-22s  %svolume label\n";
+
+#ifdef SET_DIR_ATTRIB   /* messages of code for setting directory attributes */
+   static ZCONST char Far DirlistEntryNoMem[] =
+     "warning:  cannot alloc memory for dir times/permissions/UID/GID\n";
+   static ZCONST char Far DirlistSortNoMem[] =
+     "warning:  cannot alloc memory to sort dir times/perms/etc.\n";
+   static ZCONST char Far DirlistSetAttrFailed[] =
+     "warning:  set times/attribs failed for %s\n";
+   static ZCONST char Far DirlistFailAttrSum[] =
+     "     failed setting times/attribs for %lu dir entries";
+#endif
+
+#ifdef SYMLINKS         /* messages of the deferred symlinks handler */
+   static ZCONST char Far SymLnkWarnNoMem[] =
+     "warning:  deferred symlink (%s) failed:\n\
+          out of memory\n";
+   static ZCONST char Far SymLnkWarnInvalid[] =
+     "warning:  deferred symlink (%s) failed:\n\
+          invalid placeholder file\n";
+   static ZCONST char Far SymLnkDeferred[] =
+     "finishing deferred symbolic links:\n";
+   static ZCONST char Far SymLnkFinish[] =
+     "  %-22s -> %s\n";
+#endif
+
+#ifndef WINDLL
+   static ZCONST char Far ReplaceQuery[] =
+# ifdef VMS
+     "new version of %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: ";
+# else
+     "replace %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: ";
+# endif
+   static ZCONST char Far AssumeNone[] =
+     " NULL\n(EOF or read error, treating as \"[N]one\" ...)\n";
+   static ZCONST char Far NewNameQuery[] = "new name: ";
+   static ZCONST char Far InvalidResponse[] =
+     "error:  invalid response [%s]\n";
+#endif /* !WINDLL */
+
+static ZCONST char Far ErrorInArchive[] =
+  "At least one %serror was detected in %s.\n";
+static ZCONST char Far ZeroFilesTested[] =
+  "Caution:  zero files tested in %s.\n";
+
+#ifndef VMS
+   static ZCONST char Far VMSFormatQuery[] =
+     "\n%s:  stored in VMS format.  Extract anyway? (y/n) ";
+#endif
+
+#if CRYPT
+   static ZCONST char Far SkipCannotGetPasswd[] =
+     "   skipping: %-22s  unable to get password\n";
+   static ZCONST char Far SkipIncorrectPasswd[] =
+     "   skipping: %-22s  incorrect password\n";
+   static ZCONST char Far FilesSkipBadPasswd[] =
+     "%lu file%s skipped because of incorrect password.\n";
+   static ZCONST char Far MaybeBadPasswd[] =
+     "    (may instead be incorrect password)\n";
+#else
+   static ZCONST char Far SkipEncrypted[] =
+     "   skipping: %-22s  encrypted (not supported)\n";
+#endif
+
+static ZCONST char Far NoErrInCompData[] =
+  "No errors detected in compressed data of %s.\n";
+static ZCONST char Far NoErrInTestedFiles[] =
+  "No errors detected in %s for the %lu file%s tested.\n";
+static ZCONST char Far FilesSkipped[] =
+  "%lu file%s skipped because of unsupported compression or encoding.\n";
+
+static ZCONST char Far ErrUnzipFile[] = "  error:  %s%s %s\n";
+static ZCONST char Far ErrUnzipNoFile[] = "\n  error:  %s%s\n";
+static ZCONST char Far NotEnoughMem[] = "not enough memory to ";
+static ZCONST char Far InvalidComprData[] = "invalid compressed data to ";
+static ZCONST char Far Inflate[] = "inflate";
+#ifdef USE_BZIP2
+  static ZCONST char Far BUnzip[] = "bunzip";
+#endif
+
+#ifndef SFX
+   static ZCONST char Far Explode[] = "explode";
+#ifndef LZW_CLEAN
+   static ZCONST char Far Unshrink[] = "unshrink";
+#endif
+#endif
+
+#if (!defined(DELETE_IF_FULL) || !defined(HAVE_UNLINK))
+   static ZCONST char Far FileTruncated[] =
+     "warning:  %s is probably truncated\n";
+#endif
+
+static ZCONST char Far FileUnknownCompMethod[] =
+  "%s:  unknown compression method\n";
+static ZCONST char Far BadCRC[] = " bad CRC %08lx  (should be %08lx)\n";
+
+      /* TruncEAs[] also used in OS/2 mapname(), close_outfile() */
+char ZCONST Far TruncEAs[] = " compressed EA data missing (%d bytes)%s";
+char ZCONST Far TruncNTSD[] =
+  " compressed WinNT security data missing (%d bytes)%s";
+
+#ifndef SFX
+   static ZCONST char Far InconsistEFlength[] = "bad extra-field entry:\n \
+     EF block length (%u bytes) exceeds remaining EF data (%u bytes)\n";
+   static ZCONST char Far TooSmallEBlength[] = "bad extra-field entry:\n \
+     EF block length (%u bytes) invalid (< %d)\n";
+   static ZCONST char Far InvalidComprDataEAs[] =
+     " invalid compressed data for EAs\n";
+#  if (defined(WIN32) && defined(NTSD_EAS))
+     static ZCONST char Far InvalidSecurityEAs[] =
+       " EAs fail security check\n";
+#  endif
+   static ZCONST char Far UnsuppNTSDVersEAs[] =
+     " unsupported NTSD EAs version %d\n";
+   static ZCONST char Far BadCRC_EAs[] = " bad CRC for extended attributes\n";
+   static ZCONST char Far UnknComprMethodEAs[] =
+     " unknown compression method for EAs (%u)\n";
+   static ZCONST char Far NotEnoughMemEAs[] =
+     " out of memory while inflating EAs\n";
+   static ZCONST char Far UnknErrorEAs[] =
+     " unknown error on extended attributes\n";
+#endif /* !SFX */
+
+static ZCONST char Far UnsupportedExtraField[] =
+  "\nerror:  unsupported extra-field compression type (%u)--skipping\n";
+static ZCONST char Far BadExtraFieldCRC[] =
+  "error [%s]:  bad extra-field CRC %08lx (should be %08lx)\n";
+
+
+
+
+
+/**************************************/
+/*  Function extract_or_test_files()  */
+/**************************************/
+
+int extract_or_test_files(__G)    /* return PK-type error code */
+     __GDEF
+{
+    unsigned i, j;
+    zoff_t cd_bufstart;
+    uch *cd_inptr;
+    int cd_incnt;
+    ulg filnum=0L, blknum=0L;
+    int reached_end;
+#ifndef SFX
+    int no_endsig_found;
+#endif
+    int error, error_in_archive=PK_COOL;
+    int *fn_matched=NULL, *xn_matched=NULL;
+    zucn_t members_processed;
+    ulg num_skipped=0L, num_bad_pwd=0L;
+    zoff_t old_extra_bytes = 0L;
+#ifdef SET_DIR_ATTRIB
+    unsigned num_dirs=0;
+    direntry *dirlist=(direntry *)NULL, **sorted_dirlist=(direntry **)NULL;
+#endif
+
+    /*
+     * First, two general initializations are applied. These have been moved
+     * here from process_zipfiles() because they are only needed for accessing
+     * and/or extracting the data content of the zip archive.
+     */
+
+    /* a) initialize the CRC table pointer (once) */
+    if (CRC_32_TAB == NULL) {
+        if ((CRC_32_TAB = get_crc_table()) == NULL) {
+            return PK_MEM;
+        }
+    }
+
+#if (!defined(SFX) || defined(SFX_EXDIR))
+    /* b) check out if specified extraction root directory exists */
+    if (uO.exdir != (char *)NULL && G.extract_flag) {
+        G.create_dirs = !uO.fflag;
+        if ((error = checkdir(__G__ uO.exdir, ROOT)) > MPN_INF_SKIP) {
+            /* out of memory, or file in way */
+            return (error == MPN_NOMEM ? PK_MEM : PK_ERR);
+        }
+    }
+#endif /* !SFX || SFX_EXDIR */
+
+/*---------------------------------------------------------------------------
+    The basic idea of this function is as follows.  Since the central di-
+    rectory lies at the end of the zipfile and the member files lie at the
+    beginning or middle or wherever, it is not very desirable to simply
+    read a central directory entry, jump to the member and extract it, and
+    then jump back to the central directory.  In the case of a large zipfile
+    this would lead to a whole lot of disk-grinding, especially if each mem-
+    ber file is small.  Instead, we read from the central directory the per-
+    tinent information for a block of files, then go extract/test the whole
+    block.  Thus this routine contains two small(er) loops within a very
+    large outer loop:  the first of the small ones reads a block of files
+    from the central directory; the second extracts or tests each file; and
+    the outer one loops over blocks.  There's some file-pointer positioning
+    stuff in between, but that's about it.  Btw, it's because of this jump-
+    ing around that we can afford to be lenient if an error occurs in one of
+    the member files:  we should still be able to go find the other members,
+    since we know the offset of each from the beginning of the zipfile.
+  ---------------------------------------------------------------------------*/
+
+    G.pInfo = G.info;
+
+#if CRYPT
+    G.newzip = TRUE;
+#endif
+#ifndef SFX
+    G.reported_backslash = FALSE;
+#endif
+
+    /* malloc space for check on unmatched filespecs (OK if one or both NULL) */
+    if (G.filespecs > 0  &&
+        (fn_matched=(int *)malloc(G.filespecs*sizeof(int))) != (int *)NULL)
+        for (i = 0;  i < G.filespecs;  ++i)
+            fn_matched[i] = FALSE;
+    if (G.xfilespecs > 0  &&
+        (xn_matched=(int *)malloc(G.xfilespecs*sizeof(int))) != (int *)NULL)
+        for (i = 0;  i < G.xfilespecs;  ++i)
+            xn_matched[i] = FALSE;
+
+/*---------------------------------------------------------------------------
+    Begin main loop over blocks of member files.  We know the entire central
+    directory is on this disk:  we would not have any of this information un-
+    less the end-of-central-directory record was on this disk, and we would
+    not have gotten to this routine unless this is also the disk on which
+    the central directory starts.  In practice, this had better be the ONLY
+    disk in the archive, but we'll add multi-disk support soon.
+  ---------------------------------------------------------------------------*/
+
+    members_processed = 0;
+#ifndef SFX
+    no_endsig_found = FALSE;
+#endif
+    reached_end = FALSE;
+    while (!reached_end) {
+        j = 0;
+#ifdef AMIGA
+        memzero(G.filenotes, DIR_BLKSIZ * sizeof(char *));
+#endif
+
+        /*
+         * Loop through files in central directory, storing offsets, file
+         * attributes, case-conversion and text-conversion flags until block
+         * size is reached.
+         */
+
+        while ((j < DIR_BLKSIZ)) {
+            G.pInfo = &G.info[j];
+
+            if (readbuf(__G__ G.sig, 4) == 0) {
+                error_in_archive = PK_EOF;
+                reached_end = TRUE;     /* ...so no more left to do */
+                break;
+            }
+            if (memcmp(G.sig, central_hdr_sig, 4)) {  /* is it a new entry? */
+                /* no new central directory entry
+                 * -> is the number of processed entries compatible with the
+                 *    number of entries as stored in the end_central record?
+                 */
+                if ((members_processed
+                     & (G.ecrec.have_ecr64 ? MASK_ZUCN64 : MASK_ZUCN16))
+                    == G.ecrec.total_entries_central_dir) {
+#ifndef SFX
+                    /* yes, so look if we ARE back at the end_central record
+                     */
+                    no_endsig_found =
+                      ( (memcmp(G.sig,
+                                (G.ecrec.have_ecr64 ?
+                                 end_central64_sig : end_central_sig),
+                                4) != 0)
+                       && (!G.ecrec.is_zip64_archive)
+                       && (memcmp(G.sig, end_central_sig, 4) != 0)
+                      );
+#endif /* !SFX */
+                } else {
+                    /* no; we have found an error in the central directory
+                     * -> report it and stop searching for more Zip entries
+                     */
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarString(CentSigMsg), j + blknum*DIR_BLKSIZ + 1));
+                    Info(slide, 0x401,
+                         ((char *)slide,"%s", LoadFarString(ReportMsg)));
+                    error_in_archive = PK_BADERR;
+                }
+                reached_end = TRUE;     /* ...so no more left to do */
+                break;
+            }
+            /* process_cdir_file_hdr() sets pInfo->hostnum, pInfo->lcflag */
+            if ((error = process_cdir_file_hdr(__G)) != PK_COOL) {
+                error_in_archive = error;   /* only PK_EOF defined */
+                reached_end = TRUE;     /* ...so no more left to do */
+                break;
+            }
+            if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) !=
+                 PK_COOL)
+            {
+                if (error > error_in_archive)
+                    error_in_archive = error;
+                if (error > PK_WARN) {  /* fatal:  no more left to do */
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarString(FilNamMsg),
+                      FnFilter1(G.filename), "central"));
+                    reached_end = TRUE;
+                    break;
+                }
+            }
+            if ((error = do_string(__G__ G.crec.extra_field_length,
+                EXTRA_FIELD)) != 0)
+            {
+                if (error > error_in_archive)
+                    error_in_archive = error;
+                if (error > PK_WARN) {  /* fatal */
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarString(ExtFieldMsg),
+                      FnFilter1(G.filename), "central"));
+                    reached_end = TRUE;
+                    break;
+                }
+            }
+#ifdef AMIGA
+            G.filenote_slot = j;
+            if ((error = do_string(__G__ G.crec.file_comment_length,
+                                   uO.N_flag ? FILENOTE : SKIP)) != PK_COOL)
+#else
+            if ((error = do_string(__G__ G.crec.file_comment_length, SKIP))
+                != PK_COOL)
+#endif
+            {
+                if (error > error_in_archive)
+                    error_in_archive = error;
+                if (error > PK_WARN) {  /* fatal */
+                    Info(slide, 0x421, ((char *)slide,
+                      LoadFarString(BadFileCommLength),
+                      FnFilter1(G.filename)));
+                    reached_end = TRUE;
+                    break;
+                }
+            }
+            if (G.process_all_files) {
+                if (store_info(__G))
+                    ++j;  /* file is OK; info[] stored; continue with next */
+                else
+                    ++num_skipped;
+            } else {
+                int   do_this_file;
+
+                if (G.filespecs == 0)
+                    do_this_file = TRUE;
+                else {  /* check if this entry matches an `include' argument */
+                    do_this_file = FALSE;
+                    for (i = 0; i < G.filespecs; i++)
+                        if (match(G.filename, G.pfnames[i], uO.C_flag WISEP)) {
+                            do_this_file = TRUE;  /* ^-- ignore case or not? */
+                            if (fn_matched)
+                                fn_matched[i] = TRUE;
+                            break;       /* found match, so stop looping */
+                        }
+                }
+                if (do_this_file) {  /* check if this is an excluded file */
+                    for (i = 0; i < G.xfilespecs; i++)
+                        if (match(G.filename, G.pxnames[i], uO.C_flag WISEP)) {
+                            do_this_file = FALSE; /* ^-- ignore case or not? */
+                            if (xn_matched)
+                                xn_matched[i] = TRUE;
+                            break;
+                        }
+                }
+                if (do_this_file) {
+                    if (store_info(__G))
+                        ++j;            /* file is OK */
+                    else
+                        ++num_skipped;  /* unsupp. compression or encryption */
+                }
+            } /* end if (process_all_files) */
+
+            members_processed++;
+
+        } /* end while-loop (adding files to current block) */
+
+        /* save position in central directory so can come back later */
+        cd_bufstart = G.cur_zipfile_bufstart;
+        cd_inptr = G.inptr;
+        cd_incnt = G.incnt;
+
+    /*-----------------------------------------------------------------------
+        Second loop:  process files in current block, extracting or testing
+        each one.
+      -----------------------------------------------------------------------*/
+
+        error = extract_or_test_entrylist(__G__ j,
+                        &filnum, &num_bad_pwd, &old_extra_bytes,
+#ifdef SET_DIR_ATTRIB
+                        &num_dirs, &dirlist,
+#endif
+                        error_in_archive);
+        if (error != PK_COOL) {
+            if (error > error_in_archive)
+                error_in_archive = error;
+            /* ...and keep going (unless disk full or user break) */
+            if (G.disk_full > 1 || error_in_archive == IZ_CTRLC) {
+                /* clear reached_end to signal premature stop ... */
+                reached_end = FALSE;
+                /* ... and cancel scanning the central directory */
+                break;
+            }
+        }
+
+
+        /*
+         * Jump back to where we were in the central directory, then go and do
+         * the next batch of files.
+         */
+
+#ifdef USE_STRM_INPUT
+        zfseeko(G.zipfd, cd_bufstart, SEEK_SET);
+        G.cur_zipfile_bufstart = zftello(G.zipfd);
+#else /* !USE_STRM_INPUT */
+        G.cur_zipfile_bufstart =
+          zlseek(G.zipfd, cd_bufstart, SEEK_SET);
+#endif /* ?USE_STRM_INPUT */
+        read(G.zipfd, (char *)G.inbuf, INBUFSIZ);  /* been here before... */
+        G.inptr = cd_inptr;
+        G.incnt = cd_incnt;
+        ++blknum;
+
+#ifdef TEST
+        printf("\ncd_bufstart = %ld (%.8lXh)\n", cd_bufstart, cd_bufstart);
+        printf("cur_zipfile_bufstart = %ld (%.8lXh)\n", cur_zipfile_bufstart,
+          cur_zipfile_bufstart);
+        printf("inptr-inbuf = %d\n", G.inptr-G.inbuf);
+        printf("incnt = %d\n\n", G.incnt);
+#endif
+
+    } /* end while-loop (blocks of files in central directory) */
+
+/*---------------------------------------------------------------------------
+    Process the list of deferred symlink extractions and finish up
+    the symbolic links.
+  ---------------------------------------------------------------------------*/
+
+#ifdef SYMLINKS
+    if (G.slink_last != NULL) {
+        if (QCOND2)
+            Info(slide, 0, ((char *)slide, LoadFarString(SymLnkDeferred)));
+        while (G.slink_head != NULL) {
+           set_deferred_symlink(__G__ G.slink_head);
+           /* remove the processed entry from the chain and free its memory */
+           G.slink_last = G.slink_head;
+           G.slink_head = G.slink_last->next;
+           free(G.slink_last);
+       }
+       G.slink_last = NULL;
+    }
+#endif /* SYMLINKS */
+
+/*---------------------------------------------------------------------------
+    Go back through saved list of directories, sort and set times/perms/UIDs
+    and GIDs from the deepest level on up.
+  ---------------------------------------------------------------------------*/
+
+#ifdef SET_DIR_ATTRIB
+    if (num_dirs > 0) {
+        sorted_dirlist = (direntry **)malloc(num_dirs*sizeof(direntry *));
+        if (sorted_dirlist == (direntry **)NULL) {
+            Info(slide, 0x401, ((char *)slide,
+              LoadFarString(DirlistSortNoMem)));
+            while (dirlist != (direntry *)NULL) {
+                direntry *d = dirlist;
+
+                dirlist = dirlist->next;
+                free(d);
+            }
+        } else {
+            ulg ndirs_fail = 0;
+
+            if (num_dirs == 1)
+                sorted_dirlist[0] = dirlist;
+            else {
+                for (i = 0;  i < num_dirs;  ++i) {
+                    sorted_dirlist[i] = dirlist;
+                    dirlist = dirlist->next;
+                }
+                qsort((char *)sorted_dirlist, num_dirs, sizeof(direntry *),
+                  dircomp);
+            }
+
+            Trace((stderr, "setting directory times/perms/attributes\n"));
+            for (i = 0;  i < num_dirs;  ++i) {
+                direntry *d = sorted_dirlist[i];
+
+                Trace((stderr, "dir = %s\n", d->fn));
+                if ((error = set_direc_attribs(__G__ d)) != PK_OK) {
+                    ndirs_fail++;
+                    Info(slide, 0x201, ((char *)slide,
+                      LoadFarString(DirlistSetAttrFailed), d->fn));
+                    if (!error_in_archive)
+                        error_in_archive = error;
+                }
+                free(d);
+            }
+            free(sorted_dirlist);
+            if (!uO.tflag && QCOND2) {
+                if (ndirs_fail > 0)
+                    Info(slide, 0, ((char *)slide,
+                      LoadFarString(DirlistFailAttrSum), ndirs_fail));
+            }
+        }
+    }
+#endif /* SET_DIR_ATTRIB */
+
+/*---------------------------------------------------------------------------
+    Check for unmatched filespecs on command line and print warning if any
+    found.  Free allocated memory.  (But suppress check when central dir
+    scan was interrupted prematurely.)
+  ---------------------------------------------------------------------------*/
+
+    if (fn_matched) {
+        if (reached_end) for (i = 0;  i < G.filespecs;  ++i)
+            if (!fn_matched[i]) {
+#ifdef DLL
+                if (!G.redirect_data && !G.redirect_text)
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarString(FilenameNotMatched), G.pfnames[i]));
+                else
+                    setFileNotFound(__G);
+#else
+                Info(slide, 1, ((char *)slide,
+                  LoadFarString(FilenameNotMatched), G.pfnames[i]));
+#endif
+                if (error_in_archive <= PK_WARN)
+                    error_in_archive = PK_FIND;   /* some files not found */
+            }
+        free((zvoid *)fn_matched);
+    }
+    if (xn_matched) {
+        if (reached_end) for (i = 0;  i < G.xfilespecs;  ++i)
+            if (!xn_matched[i])
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(ExclFilenameNotMatched), G.pxnames[i]));
+        free((zvoid *)xn_matched);
+    }
+
+/*---------------------------------------------------------------------------
+    Now, all locally allocated memory has been released.  When the central
+    directory processing has been interrupted prematurely, it is safe to
+    return immediately.  All completeness checks and summary messages are
+    skipped in this case.
+  ---------------------------------------------------------------------------*/
+    if (!reached_end)
+        return error_in_archive;
+
+/*---------------------------------------------------------------------------
+    Double-check that we're back at the end-of-central-directory record, and
+    print quick summary of results, if we were just testing the archive.  We
+    send the summary to stdout so that people doing the testing in the back-
+    ground and redirecting to a file can just do a "tail" on the output file.
+  ---------------------------------------------------------------------------*/
+
+#ifndef SFX
+    if (no_endsig_found) {                      /* just to make sure */
+        Info(slide, 0x401, ((char *)slide,"%s", LoadFarString(EndSigMsg)));
+        Info(slide, 0x401, ((char *)slide,"%s", LoadFarString(ReportMsg)));
+        if (!error_in_archive)       /* don't overwrite stronger error */
+            error_in_archive = PK_WARN;
+    }
+#endif /* !SFX */
+    if (uO.tflag) {
+        ulg num = filnum - num_bad_pwd;
+
+        if (uO.qflag < 2) {        /* GRR 930710:  was (uO.qflag == 1) */
+            if (error_in_archive)
+                Info(slide, 0, ((char *)slide, LoadFarString(ErrorInArchive),
+                  (error_in_archive == PK_WARN)? "warning-" : "", G.zipfn));
+            else if (num == 0L)
+                Info(slide, 0, ((char *)slide, LoadFarString(ZeroFilesTested),
+                  G.zipfn));
+            else if (G.process_all_files && (num_skipped+num_bad_pwd == 0L))
+                Info(slide, 0, ((char *)slide, LoadFarString(NoErrInCompData),
+                  G.zipfn));
+            else
+                Info(slide, 0, ((char *)slide, LoadFarString(NoErrInTestedFiles)
+                  , G.zipfn, num, (num==1L)? "":"s"));
+            if (num_skipped > 0L)
+                Info(slide, 0, ((char *)slide, LoadFarString(FilesSkipped),
+                  num_skipped, (num_skipped==1L)? "":"s"));
+#if CRYPT
+            if (num_bad_pwd > 0L)
+                Info(slide, 0, ((char *)slide, LoadFarString(FilesSkipBadPasswd)
+                  , num_bad_pwd, (num_bad_pwd==1L)? "":"s"));
+#endif /* CRYPT */
+        }
+    }
+
+    /* give warning if files not tested or extracted (first condition can still
+     * happen if zipfile is empty and no files specified on command line) */
+
+    if ((filnum == 0) && error_in_archive <= PK_WARN) {
+        if (num_skipped > 0L)
+            error_in_archive = IZ_UNSUP; /* unsupport. compression/encryption */
+        else
+            error_in_archive = PK_FIND;  /* no files found at all */
+    }
+#if CRYPT
+    else if ((filnum == num_bad_pwd) && error_in_archive <= PK_WARN)
+        error_in_archive = IZ_BADPWD;    /* bad passwd => all files skipped */
+#endif
+    else if ((num_skipped > 0L) && error_in_archive <= PK_WARN)
+        error_in_archive = IZ_UNSUP;     /* was PK_WARN; Jean-loup complained */
+#if CRYPT
+    else if ((num_bad_pwd > 0L) && !error_in_archive)
+        error_in_archive = PK_WARN;
+#endif
+
+    return error_in_archive;
+
+} /* end function extract_or_test_files() */
+
+
+
+
+
+/***************************/
+/*  Function store_info()  */
+/***************************/
+
+static int store_info(__G)   /* return 0 if skipping, 1 if OK */
+    __GDEF
+{
+#ifdef USE_BZIP2
+#  define UNKN_BZ2 (G.crec.compression_method!=BZIPPED)
+#else
+#  define UNKN_BZ2 TRUE       /* bzip2 unknown */
+#endif
+
+#ifdef USE_LZMA
+#  define UNKN_LZMA (G.crec.compression_method!=LZMAED)
+#else
+#  define UNKN_LZMA TRUE      /* LZMA unknown */
+#endif
+
+#ifdef USE_WAVP
+#  define UNKN_WAVP (G.crec.compression_method!=WAVPACKED)
+#else
+#  define UNKN_WAVP TRUE      /* WavPack unknown */
+#endif
+
+#ifdef USE_PPMD
+#  define UNKN_PPMD (G.crec.compression_method!=PPMDED)
+#else
+#  define UNKN_PPMD TRUE      /* PPMd unknown */
+#endif
+
+#ifdef SFX
+#  ifdef USE_DEFLATE64
+#    define UNKN_COMPR \
+     (G.crec.compression_method!=STORED && G.crec.compression_method<DEFLATED \
+      && G.crec.compression_method>ENHDEFLATED \
+      && UNKN_BZ2 && UNKN_LZMA && UNKN_WAVP && UNKN_PPMD)
+#  else
+#    define UNKN_COMPR \
+     (G.crec.compression_method!=STORED && G.crec.compression_method!=DEFLATED\
+      && UNKN_BZ2 && UNKN_LZMA && UNKN_WAVP && UNKN_PPMD)
+#  endif
+#else
+#  ifdef COPYRIGHT_CLEAN  /* no reduced files */
+#    define UNKN_RED (G.crec.compression_method >= REDUCED1 && \
+                      G.crec.compression_method <= REDUCED4)
+#  else
+#    define UNKN_RED  FALSE  /* reducing not unknown */
+#  endif
+#  ifdef LZW_CLEAN  /* no shrunk files */
+#    define UNKN_SHR (G.crec.compression_method == SHRUNK)
+#  else
+#    define UNKN_SHR  FALSE  /* unshrinking not unknown */
+#  endif
+#  ifdef USE_DEFLATE64
+#    define UNKN_COMPR (UNKN_RED || UNKN_SHR || \
+     G.crec.compression_method==TOKENIZED || \
+     (G.crec.compression_method>ENHDEFLATED && UNKN_BZ2 && UNKN_LZMA \
+      && UNKN_WAVP && UNKN_PPMD))
+#  else
+#    define UNKN_COMPR (UNKN_RED || UNKN_SHR || \
+     G.crec.compression_method==TOKENIZED || \
+     (G.crec.compression_method>DEFLATED && UNKN_BZ2 && UNKN_LZMA \
+      && UNKN_WAVP && UNKN_PPMD))
+#  endif
+#endif
+
+#if (defined(USE_BZIP2) && (UNZIP_VERSION < UNZIP_BZ2VERS))
+    int unzvers_support = (UNKN_BZ2 ? UNZIP_VERSION : UNZIP_BZ2VERS);
+#   define UNZVERS_SUPPORT  unzvers_support
+#else
+#   define UNZVERS_SUPPORT  UNZIP_VERSION
+#endif
+
+/*---------------------------------------------------------------------------
+    Check central directory info for version/compatibility requirements.
+  ---------------------------------------------------------------------------*/
+
+    G.pInfo->encrypted = G.crec.general_purpose_bit_flag & 1;   /* bit field */
+    G.pInfo->ExtLocHdr = (G.crec.general_purpose_bit_flag & 8) == 8;  /* bit */
+    G.pInfo->textfile = G.crec.internal_file_attributes & 1;    /* bit field */
+    G.pInfo->crc = G.crec.crc32;
+    G.pInfo->compr_size = G.crec.csize;
+    G.pInfo->uncompr_size = G.crec.ucsize;
+
+    switch (uO.aflag) {
+        case 0:
+            G.pInfo->textmode = FALSE;   /* bit field */
+            break;
+        case 1:
+            G.pInfo->textmode = G.pInfo->textfile;   /* auto-convert mode */
+            break;
+        default:  /* case 2: */
+            G.pInfo->textmode = TRUE;
+            break;
+    }
+
+    if (G.crec.version_needed_to_extract[1] == VMS_) {
+        if (G.crec.version_needed_to_extract[0] > VMS_UNZIP_VERSION) {
+            if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)))
+                Info(slide, 0x401, ((char *)slide, LoadFarString(VersionMsg),
+                  FnFilter1(G.filename), "VMS",
+                  G.crec.version_needed_to_extract[0] / 10,
+                  G.crec.version_needed_to_extract[0] % 10,
+                  VMS_UNZIP_VERSION / 10, VMS_UNZIP_VERSION % 10));
+            return 0;
+        }
+#ifndef VMS   /* won't be able to use extra field, but still have data */
+        else if (!uO.tflag && !IS_OVERWRT_ALL) { /* if -o, extract anyway */
+            Info(slide, 0x481, ((char *)slide, LoadFarString(VMSFormatQuery),
+              FnFilter1(G.filename)));
+            fgets(G.answerbuf, sizeof(G.answerbuf), stdin);
+            if ((*G.answerbuf != 'y') && (*G.answerbuf != 'Y'))
+                return 0;
+        }
+#endif /* !VMS */
+    /* usual file type:  don't need VMS to extract */
+    } else if (G.crec.version_needed_to_extract[0] > UNZVERS_SUPPORT) {
+        if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)))
+            Info(slide, 0x401, ((char *)slide, LoadFarString(VersionMsg),
+              FnFilter1(G.filename), "PK",
+              G.crec.version_needed_to_extract[0] / 10,
+              G.crec.version_needed_to_extract[0] % 10,
+              UNZVERS_SUPPORT / 10, UNZVERS_SUPPORT % 10));
+        return 0;
+    }
+
+    if (UNKN_COMPR) {
+        if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) {
+#ifndef SFX
+            unsigned cmpridx;
+
+            if ((cmpridx = find_compr_idx(G.crec.compression_method))
+                < NUM_METHODS)
+                Info(slide, 0x401, ((char *)slide, LoadFarString(ComprMsgName),
+                  FnFilter1(G.filename),
+                  LoadFarStringSmall(ComprNames[cmpridx])));
+            else
+#endif
+                Info(slide, 0x401, ((char *)slide, LoadFarString(ComprMsgNum),
+                  FnFilter1(G.filename),
+                  G.crec.compression_method));
+        }
+        return 0;
+    }
+#if (!CRYPT)
+    if (G.pInfo->encrypted) {
+        if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)))
+            Info(slide, 0x401, ((char *)slide, LoadFarString(SkipEncrypted),
+              FnFilter1(G.filename)));
+        return 0;
+    }
+#endif /* !CRYPT */
+
+#ifndef SFX
+    /* store a copy of the central header filename for later comparison */
+    if ((G.pInfo->cfilname = zfmalloc(strlen(G.filename) + 1)) == NULL) {
+        Info(slide, 0x401, ((char *)slide, LoadFarString(WarnNoMemCFName),
+          FnFilter1(G.filename)));
+    } else
+        zfstrcpy(G.pInfo->cfilname, G.filename);
+#endif /* !SFX */
+
+    /* map whatever file attributes we have into the local format */
+    mapattr(__G);   /* GRR:  worry about return value later */
+
+    G.pInfo->diskstart = G.crec.disk_number_start;
+    G.pInfo->offset = (zoff_t)G.crec.relative_offset_local_header;
+    return 1;
+
+} /* end function store_info() */
+
+
+
+
+
+#ifndef SFX
+/*******************************/
+/*  Function find_compr_idx()  */
+/*******************************/
+
+unsigned find_compr_idx(compr_methodnum)
+    unsigned compr_methodnum;
+{
+    unsigned i;
+
+    for (i = 0; i < NUM_METHODS; i++) {
+        if (ComprIDs[i] == compr_methodnum) break;
+    }
+    return i;
+}
+#endif /* !SFX */
+
+
+
+
+
+/******************************************/
+/*  Function extract_or_test_entrylist()  */
+/******************************************/
+
+static int extract_or_test_entrylist(__G__ numchunk,
+                pfilnum, pnum_bad_pwd, pold_extra_bytes,
+#ifdef SET_DIR_ATTRIB
+                pnum_dirs, pdirlist,
+#endif
+                error_in_archive)    /* return PK-type error code */
+    __GDEF
+    unsigned numchunk;
+    ulg *pfilnum;
+    ulg *pnum_bad_pwd;
+    zoff_t *pold_extra_bytes;
+#ifdef SET_DIR_ATTRIB
+    unsigned *pnum_dirs;
+    direntry **pdirlist;
+#endif
+    int error_in_archive;
+{
+    unsigned i;
+    int renamed, query;
+    int skip_entry;
+    zoff_t bufstart, inbuf_offset, request;
+    int error, errcode;
+
+/* possible values for local skip_entry flag: */
+#define SKIP_NO         0       /* do not skip this entry */
+#define SKIP_Y_EXISTING 1       /* skip this entry, do not overwrite file */
+#define SKIP_Y_NONEXIST 2       /* skip this entry, do not create new file */
+
+    /*-----------------------------------------------------------------------
+        Second loop:  process files in current block, extracting or testing
+        each one.
+      -----------------------------------------------------------------------*/
+
+    for (i = 0; i < numchunk; ++i) {
+        (*pfilnum)++;   /* *pfilnum = i + blknum*DIR_BLKSIZ + 1; */
+        G.pInfo = &G.info[i];
+#ifdef NOVELL_BUG_FAILSAFE
+        G.dne = FALSE;  /* assume file exists until stat() says otherwise */
+#endif
+
+        /* if the target position is not within the current input buffer
+         * (either haven't yet read far enough, or (maybe) skipping back-
+         * ward), skip to the target position and reset readbuf(). */
+
+        /* seek_zipf(__G__ pInfo->offset);  */
+        request = G.pInfo->offset + G.extra_bytes;
+        inbuf_offset = request % INBUFSIZ;
+        bufstart = request - inbuf_offset;
+
+        Trace((stderr, "\ndebug: request = %ld, inbuf_offset = %ld\n",
+          (long)request, (long)inbuf_offset));
+        Trace((stderr,
+          "debug: bufstart = %ld, cur_zipfile_bufstart = %ld\n",
+          (long)bufstart, (long)G.cur_zipfile_bufstart));
+        if (request < 0) {
+            Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(SeekMsg),
+              G.zipfn, LoadFarString(ReportMsg)));
+            error_in_archive = PK_ERR;
+            if (*pfilnum == 1 && G.extra_bytes != 0L) {
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(AttemptRecompensate)));
+                *pold_extra_bytes = G.extra_bytes;
+                G.extra_bytes = 0L;
+                request = G.pInfo->offset;  /* could also check if != 0 */
+                inbuf_offset = request % INBUFSIZ;
+                bufstart = request - inbuf_offset;
+                Trace((stderr, "debug: request = %ld, inbuf_offset = %ld\n",
+                  (long)request, (long)inbuf_offset));
+                Trace((stderr,
+                  "debug: bufstart = %ld, cur_zipfile_bufstart = %ld\n",
+                  (long)bufstart, (long)G.cur_zipfile_bufstart));
+                /* try again */
+                if (request < 0) {
+                    Trace((stderr,
+                      "debug: recompensated request still < 0\n"));
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarStringSmall(SeekMsg),
+                      G.zipfn, LoadFarString(ReportMsg)));
+                    error_in_archive = PK_BADERR;
+                    continue;
+                }
+            } else {
+                error_in_archive = PK_BADERR;
+                continue;  /* this one hosed; try next */
+            }
+        }
+
+        if (bufstart != G.cur_zipfile_bufstart) {
+            Trace((stderr, "debug: bufstart != cur_zipfile_bufstart\n"));
+#ifdef USE_STRM_INPUT
+            zfseeko(G.zipfd, bufstart, SEEK_SET);
+            G.cur_zipfile_bufstart = zftello(G.zipfd);
+#else /* !USE_STRM_INPUT */
+            G.cur_zipfile_bufstart =
+              zlseek(G.zipfd, bufstart, SEEK_SET);
+#endif /* ?USE_STRM_INPUT */
+            if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) <= 0)
+            {
+                Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg),
+                  *pfilnum, "lseek", (long)bufstart));
+                error_in_archive = PK_BADERR;
+                continue;   /* can still do next file */
+            }
+            G.inptr = G.inbuf + (int)inbuf_offset;
+            G.incnt -= (int)inbuf_offset;
+        } else {
+            G.incnt += (int)(G.inptr-G.inbuf) - (int)inbuf_offset;
+            G.inptr = G.inbuf + (int)inbuf_offset;
+        }
+
+        /* should be in proper position now, so check for sig */
+        if (readbuf(__G__ G.sig, 4) == 0) {  /* bad offset */
+            Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg),
+              *pfilnum, "EOF", (long)request));
+            error_in_archive = PK_BADERR;
+            continue;   /* but can still try next one */
+        }
+        if (memcmp(G.sig, local_hdr_sig, 4)) {
+            Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg),
+              *pfilnum, LoadFarStringSmall(LocalHdrSig), (long)request));
+            /*
+                GRRDUMP(G.sig, 4)
+                GRRDUMP(local_hdr_sig, 4)
+             */
+            error_in_archive = PK_ERR;
+            if ((*pfilnum == 1 && G.extra_bytes != 0L) ||
+                (G.extra_bytes == 0L && *pold_extra_bytes != 0L)) {
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(AttemptRecompensate)));
+                if (G.extra_bytes) {
+                    *pold_extra_bytes = G.extra_bytes;
+                    G.extra_bytes = 0L;
+                } else
+                    G.extra_bytes = *pold_extra_bytes; /* third attempt */
+                if (((error = seek_zipf(__G__ G.pInfo->offset)) != PK_OK) ||
+                    (readbuf(__G__ G.sig, 4) == 0)) {  /* bad offset */
+                    if (error != PK_BADERR)
+                      Info(slide, 0x401, ((char *)slide,
+                        LoadFarString(OffsetMsg), *pfilnum, "EOF",
+                        (long)request));
+                    error_in_archive = PK_BADERR;
+                    continue;   /* but can still try next one */
+                }
+                if (memcmp(G.sig, local_hdr_sig, 4)) {
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarString(OffsetMsg), *pfilnum,
+                      LoadFarStringSmall(LocalHdrSig), (long)request));
+                    error_in_archive = PK_BADERR;
+                    continue;
+                }
+            } else
+                continue;  /* this one hosed; try next */
+        }
+        if ((error = process_local_file_hdr(__G)) != PK_COOL) {
+            Info(slide, 0x421, ((char *)slide, LoadFarString(BadLocalHdr),
+              *pfilnum));
+            error_in_archive = error;   /* only PK_EOF defined */
+            continue;   /* can still try next one */
+        }
+#if (!defined(SFX) && defined(UNICODE_SUPPORT))
+        if (((G.lrec.general_purpose_bit_flag & (1 << 11)) == (1 << 11))
+            != (G.pInfo->GPFIsUTF8 != 0)) {
+            if (QCOND2) {
+#  ifdef SMALL_MEM
+                char *temp_cfilnam = slide + (7 * (WSIZE>>3));
+
+                zfstrcpy((char Far *)temp_cfilnam, G.pInfo->cfilname);
+#    define  cFile_PrintBuf  temp_cfilnam
+#  else
+#    define  cFile_PrintBuf  G.pInfo->cfilname
+#  endif
+                Info(slide, 0x421, ((char *)slide,
+                  LoadFarStringSmall2(GP11FlagsDiffer),
+                  *pfilnum, FnFilter1(cFile_PrintBuf), G.pInfo->GPFIsUTF8));
+#  undef    cFile_PrintBuf
+            }
+            if (error_in_archive < PK_WARN)
+                error_in_archive = PK_WARN;
+        }
+#endif /* !SFX && UNICODE_SUPPORT */
+        if ((error = do_string(__G__ G.lrec.filename_length, DS_FN_L)) !=
+             PK_COOL)
+        {
+            if (error > error_in_archive)
+                error_in_archive = error;
+            if (error > PK_WARN) {
+                Info(slide, 0x401, ((char *)slide, LoadFarString(FilNamMsg),
+                  FnFilter1(G.filename), "local"));
+                continue;   /* go on to next one */
+            }
+        }
+        if (G.extra_field != (uch *)NULL) {
+            free(G.extra_field);
+            G.extra_field = (uch *)NULL;
+        }
+        if ((error =
+             do_string(__G__ G.lrec.extra_field_length, EXTRA_FIELD)) != 0)
+        {
+            if (error > error_in_archive)
+                error_in_archive = error;
+            if (error > PK_WARN) {
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(ExtFieldMsg),
+                  FnFilter1(G.filename), "local"));
+                continue;   /* go on */
+            }
+        }
+#ifndef SFX
+        /* Filename consistency checks must come after reading in the local
+         * extra field, so that a UTF-8 entry name e.f. block has already
+         * been processed.
+         */
+        if (G.pInfo->cfilname != (char Far *)NULL) {
+            if (zfstrcmp(G.pInfo->cfilname, G.filename) != 0) {
+#  ifdef SMALL_MEM
+                char *temp_cfilnam = slide + (7 * (WSIZE>>3));
+
+                zfstrcpy((char Far *)temp_cfilnam, G.pInfo->cfilname);
+#    define  cFile_PrintBuf  temp_cfilnam
+#  else
+#    define  cFile_PrintBuf  G.pInfo->cfilname
+#  endif
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarStringSmall2(LvsCFNamMsg),
+                  FnFilter2(cFile_PrintBuf), FnFilter1(G.filename)));
+#  undef    cFile_PrintBuf
+                zfstrcpy(G.filename, G.pInfo->cfilname);
+                if (error_in_archive < PK_WARN)
+                    error_in_archive = PK_WARN;
+            }
+            zffree(G.pInfo->cfilname);
+            G.pInfo->cfilname = (char Far *)NULL;
+        }
+#endif /* !SFX */
+        /* Size consistency checks must come after reading in the local extra
+         * field, so that any Zip64 extension local e.f. block has already
+         * been processed.
+         */
+        if (G.lrec.compression_method == STORED) {
+            zusz_t csiz_decrypted = G.lrec.csize;
+
+            if (G.pInfo->encrypted) {
+                if (csiz_decrypted < 12) {
+                    /* handle the error now to prevent unsigned overflow */
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarStringSmall(ErrUnzipNoFile),
+                      LoadFarString(InvalidComprData),
+                      LoadFarStringSmall2(Inflate)));
+                    return PK_ERR;
+                }
+                csiz_decrypted -= 12;
+            }
+            if (G.lrec.ucsize != csiz_decrypted) {
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarStringSmall2(WrnStorUCSizCSizDiff),
+                  FnFilter1(G.filename),
+                  FmZofft(G.lrec.ucsize, NULL, "u"),
+                  FmZofft(csiz_decrypted, NULL, "u")));
+                G.lrec.ucsize = csiz_decrypted;
+                if (error_in_archive < PK_WARN)
+                    error_in_archive = PK_WARN;
+            }
+        }
+
+#if CRYPT
+        if (G.pInfo->encrypted &&
+            (error = decrypt(__G__ uO.pwdarg)) != PK_COOL) {
+            if (error == PK_WARN) {
+                if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)))
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarString(SkipIncorrectPasswd),
+                      FnFilter1(G.filename)));
+                ++(*pnum_bad_pwd);
+            } else {  /* (error > PK_WARN) */
+                if (error > error_in_archive)
+                    error_in_archive = error;
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(SkipCannotGetPasswd),
+                  FnFilter1(G.filename)));
+            }
+            continue;   /* go on to next file */
+        }
+#endif /* CRYPT */
+
+        /*
+         * just about to extract file:  if extracting to disk, check if
+         * already exists, and if so, take appropriate action according to
+         * fflag/uflag/overwrite_all/etc. (we couldn't do this in upper
+         * loop because we don't store the possibly renamed filename[] in
+         * info[])
+         */
+#ifdef DLL
+        if (!uO.tflag && !uO.cflag && !G.redirect_data)
+#else
+        if (!uO.tflag && !uO.cflag)
+#endif
+        {
+            renamed = FALSE;   /* user hasn't renamed output file yet */
+
+startover:
+            query = FALSE;
+            skip_entry = SKIP_NO;
+            /* for files from DOS FAT, check for use of backslash instead
+             *  of slash as directory separator (bug in some zipper(s); so
+             *  far, not a problem in HPFS, NTFS or VFAT systems)
+             */
+#ifndef SFX
+            if (G.pInfo->hostnum == FS_FAT_ && !MBSCHR(G.filename, '/')) {
+                char *p=G.filename;
+
+                if (*p) do {
+                    if (*p == '\\') {
+                        if (!G.reported_backslash) {
+                            Info(slide, 0x21, ((char *)slide,
+                              LoadFarString(BackslashPathSep), G.zipfn));
+                            G.reported_backslash = TRUE;
+                            if (!error_in_archive)
+                                error_in_archive = PK_WARN;
+                        }
+                        *p = '/';
+                    }
+                } while (*PREINCSTR(p));
+            }
+#endif /* !SFX */
+
+            if (!renamed) {
+               /* remove absolute path specs */
+               if (G.filename[0] == '/') {
+                   Info(slide, 0x401, ((char *)slide,
+                        LoadFarString(AbsolutePathWarning),
+                        FnFilter1(G.filename)));
+                   if (!error_in_archive)
+                       error_in_archive = PK_WARN;
+                   do {
+                       char *p = G.filename + 1;
+                       do {
+                           *(p-1) = *p;
+                       } while (*p++ != '\0');
+                   } while (G.filename[0] == '/');
+               }
+            }
+
+            /* mapname can create dirs if not freshening or if renamed */
+            error = mapname(__G__ renamed);
+            if ((errcode = error & ~MPN_MASK) != PK_OK &&
+                error_in_archive < errcode)
+                error_in_archive = errcode;
+            if ((errcode = error & MPN_MASK) > MPN_INF_TRUNC) {
+                if (errcode == MPN_CREATED_DIR) {
+#ifdef SET_DIR_ATTRIB
+                    direntry *d_entry;
+
+                    error = defer_dir_attribs(__G__ &d_entry);
+                    if (d_entry == (direntry *)NULL) {
+                        /* There may be no dir_attribs info available, or
+                         * we have encountered a mem allocation error.
+                         * In case of an error, report it and set program
+                         * error state to warning level.
+                         */
+                        if (error) {
+                            Info(slide, 0x401, ((char *)slide,
+                                 LoadFarString(DirlistEntryNoMem)));
+                            if (!error_in_archive)
+                                error_in_archive = PK_WARN;
+                        }
+                    } else {
+                        d_entry->next = (*pdirlist);
+                        (*pdirlist) = d_entry;
+                        ++(*pnum_dirs);
+                    }
+#endif /* SET_DIR_ATTRIB */
+                } else if (errcode == MPN_VOL_LABEL) {
+#ifdef DOS_OS2_W32
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarString(SkipVolumeLabel),
+                      FnFilter1(G.filename),
+                      uO.volflag? "hard disk " : ""));
+#else
+                    Info(slide, 1, ((char *)slide,
+                      LoadFarString(SkipVolumeLabel),
+                      FnFilter1(G.filename), ""));
+#endif
+                } else if (errcode > MPN_INF_SKIP &&
+                           error_in_archive < PK_ERR)
+                    error_in_archive = PK_ERR;
+                Trace((stderr, "mapname(%s) returns error code = %d\n",
+                  FnFilter1(G.filename), error));
+                continue;   /* go on to next file */
+            }
+
+#ifdef QDOS
+            QFilename(__G__ G.filename);
+#endif
+            switch (check_for_newer(__G__ G.filename)) {
+                case DOES_NOT_EXIST:
+#ifdef NOVELL_BUG_FAILSAFE
+                    G.dne = TRUE;   /* stat() says file DOES NOT EXIST */
+#endif
+                    /* freshen (no new files): skip unless just renamed */
+                    if (uO.fflag && !renamed)
+                        skip_entry = SKIP_Y_NONEXIST;
+                    break;
+                case EXISTS_AND_OLDER:
+#ifdef UNIXBACKUP
+                    if (!uO.B_flag)
+#endif
+                    {
+                        if (IS_OVERWRT_NONE)
+                            /* never overwrite:  skip file */
+                            skip_entry = SKIP_Y_EXISTING;
+                        else if (!IS_OVERWRT_ALL)
+                            query = TRUE;
+                    }
+                    break;
+                case EXISTS_AND_NEWER:             /* (or equal) */
+#ifdef UNIXBACKUP
+                    if ((!uO.B_flag && IS_OVERWRT_NONE) ||
+#else
+                    if (IS_OVERWRT_NONE ||
+#endif
+                        (uO.uflag && !renamed)) {
+                        /* skip if update/freshen & orig name */
+                        skip_entry = SKIP_Y_EXISTING;
+                    } else {
+#ifdef UNIXBACKUP
+                        if (!IS_OVERWRT_ALL && !uO.B_flag)
+#else
+                        if (!IS_OVERWRT_ALL)
+#endif
+                            query = TRUE;
+                    }
+                    break;
+            }
+#ifdef VMS
+            /* 2008-07-24 SMS.
+             * On VMS, if the file name includes a version number,
+             * and "-V" ("retain VMS version numbers", V_flag) is in
+             * effect, then the VMS-specific code will handle any
+             * conflicts with an existing file, making this query
+             * redundant.  (Implicit "y" response here.)
+             */
+            if (query && uO.V_flag) {
+                /* Not discarding file versions.  Look for one. */
+                int cndx = strlen(G.filename) - 1;
+
+                while ((cndx > 0) && (isdigit(G.filename[cndx])))
+                    cndx--;
+                if (G.filename[cndx] == ';')
+                    /* File version found; skip the generic query,
+                     * proceeding with its default response "y".
+                     */
+                    query = FALSE;
+            }
+#endif /* VMS */
+            if (query) {
+#ifdef WINDLL
+                switch (G.lpUserFunctions->replace != NULL ?
+                        (*G.lpUserFunctions->replace)(G.filename, FILNAMSIZ) :
+                        IDM_REPLACE_NONE) {
+                    case IDM_REPLACE_RENAME:
+                        _ISO_INTERN(G.filename);
+                        renamed = TRUE;
+                        goto startover;
+                    case IDM_REPLACE_ALL:
+                        G.overwrite_mode = OVERWRT_ALWAYS;
+                        /* FALL THROUGH, extract */
+                    case IDM_REPLACE_YES:
+                        break;
+                    case IDM_REPLACE_NONE:
+                        G.overwrite_mode = OVERWRT_NEVER;
+                        /* FALL THROUGH, skip */
+                    case IDM_REPLACE_NO:
+                        skip_entry = SKIP_Y_EXISTING;
+                        break;
+                }
+#else /* !WINDLL */
+                extent fnlen;
+reprompt:
+                Info(slide, 0x81, ((char *)slide,
+                  LoadFarString(ReplaceQuery),
+                  FnFilter1(G.filename)));
+                if (fgets(G.answerbuf, sizeof(G.answerbuf), stdin)
+                    == (char *)NULL) {
+                    Info(slide, 1, ((char *)slide,
+                      LoadFarString(AssumeNone)));
+                    *G.answerbuf = 'N';
+                    if (!error_in_archive)
+                        error_in_archive = 1;  /* not extracted:  warning */
+                }
+                switch (*G.answerbuf) {
+                    case 'r':
+                    case 'R':
+                        do {
+                            Info(slide, 0x81, ((char *)slide,
+                              LoadFarString(NewNameQuery)));
+                            fgets(G.filename, FILNAMSIZ, stdin);
+                            /* usually get \n here:  better check for it */
+                            fnlen = strlen(G.filename);
+                            if (lastchar(G.filename, fnlen) == '\n')
+                                G.filename[--fnlen] = '\0';
+                        } while (fnlen == 0);
+#ifdef WIN32  /* WIN32 fgets( ... , stdin) returns OEM coded strings */
+                        _OEM_INTERN(G.filename);
+#endif
+                        renamed = TRUE;
+                        goto startover;   /* sorry for a goto */
+                    case 'A':   /* dangerous option:  force caps */
+                        G.overwrite_mode = OVERWRT_ALWAYS;
+                        /* FALL THROUGH, extract */
+                    case 'y':
+                    case 'Y':
+                        break;
+                    case 'N':
+                        G.overwrite_mode = OVERWRT_NEVER;
+                        /* FALL THROUGH, skip */
+                    case 'n':
+                        /* skip file */
+                        skip_entry = SKIP_Y_EXISTING;
+                        break;
+                    case '\n':
+                    case '\r':
+                        /* Improve echo of '\n' and/or '\r'
+                           (sizeof(G.answerbuf) == 10 (see globals.h), so
+                           there is enough space for the provided text...) */
+                        strcpy(G.answerbuf, "{ENTER}");
+                        /* fall through ... */
+                    default:
+                        /* usually get \n here:  remove it for nice display
+                           (fnlen can be re-used here, we are outside the
+                           "enter new filename" loop) */
+                        fnlen = strlen(G.answerbuf);
+                        if (lastchar(G.answerbuf, fnlen) == '\n')
+                            G.answerbuf[--fnlen] = '\0';
+                        Info(slide, 1, ((char *)slide,
+                          LoadFarString(InvalidResponse), G.answerbuf));
+                        goto reprompt;   /* yet another goto? */
+                } /* end switch (*answerbuf) */
+#endif /* ?WINDLL */
+            } /* end if (query) */
+            if (skip_entry != SKIP_NO) {
+#ifdef WINDLL
+                if (skip_entry == SKIP_Y_EXISTING) {
+                    /* report skipping of an existing entry */
+                    Info(slide, 0, ((char *)slide,
+                      ((IS_OVERWRT_NONE || !uO.uflag || renamed) ?
+                       "Target file exists.  Skipping %s\n" :
+                       "Target file newer.  Skipping %s\n"),
+                      FnFilter1(G.filename)));
+                }
+#endif /* WINDLL */
+                continue;
+            }
+        } /* end if (extracting to disk) */
+
+#ifdef DLL
+        if ((G.statreportcb != NULL) &&
+            (*G.statreportcb)(__G__ UZ_ST_START_EXTRACT, G.zipfn,
+                              G.filename, NULL)) {
+            return IZ_CTRLC;        /* cancel operation by user request */
+        }
+#endif
+#ifdef MACOS  /* MacOS is no preemptive OS, thus call event-handling by hand */
+        UserStop();
+#endif
+#ifdef AMIGA
+        G.filenote_slot = i;
+#endif
+        G.disk_full = 0;
+        if ((error = extract_or_test_member(__G)) != PK_COOL) {
+            if (error > error_in_archive)
+                error_in_archive = error;       /* ...and keep going */
+#ifdef DLL
+            if (G.disk_full > 1 || error_in_archive == IZ_CTRLC) {
+#else
+            if (G.disk_full > 1) {
+#endif
+                return error_in_archive;        /* (unless disk full) */
+            }
+        }
+#ifdef DLL
+        if ((G.statreportcb != NULL) &&
+            (*G.statreportcb)(__G__ UZ_ST_FINISH_MEMBER, G.zipfn,
+                              G.filename, (zvoid *)&G.lrec.ucsize)) {
+            return IZ_CTRLC;        /* cancel operation by user request */
+        }
+#endif
+#ifdef MACOS  /* MacOS is no preemptive OS, thus call event-handling by hand */
+        UserStop();
+#endif
+    } /* end for-loop (i:  files in current block) */
+
+    return error_in_archive;
+
+} /* end function extract_or_test_entrylist() */
+
+
+
+
+
+/* wsize is used in extract_or_test_member() and UZbunzip2() */
+#if (defined(DLL) && !defined(NO_SLIDE_REDIR))
+#  define wsize G._wsize    /* wsize is a variable */
+#else
+#  define wsize WSIZE       /* wsize is a constant */
+#endif
+
+/***************************************/
+/*  Function extract_or_test_member()  */
+/***************************************/
+
+static int extract_or_test_member(__G)    /* return PK-type error code */
+     __GDEF
+{
+    char *nul="[empty] ", *txt="[text]  ", *bin="[binary]";
+#ifdef CMS_MVS
+    char *ebc="[ebcdic]";
+#endif
+    register int b;
+    int r, error=PK_COOL;
+
+
+/*---------------------------------------------------------------------------
+    Initialize variables, buffers, etc.
+  ---------------------------------------------------------------------------*/
+
+    G.bits_left = 0;
+    G.bitbuf = 0L;       /* unreduce and unshrink only */
+    G.zipeof = 0;
+    G.newfile = TRUE;
+    G.crc32val = CRCVAL_INITIAL;
+
+#ifdef SYMLINKS
+    /* If file is a (POSIX-compatible) symbolic link and we are extracting
+     * to disk, prepare to restore the link. */
+    G.symlnk = (G.pInfo->symlink &&
+                !uO.tflag && !uO.cflag && (G.lrec.ucsize > 0));
+#endif /* SYMLINKS */
+
+    if (uO.tflag) {
+        if (!uO.qflag)
+            Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "test",
+              FnFilter1(G.filename), "", ""));
+    } else {
+#ifdef DLL
+        if (uO.cflag && !G.redirect_data)
+#else
+        if (uO.cflag)
+#endif
+        {
+#if (defined(OS2) && defined(__IBMC__) && (__IBMC__ >= 200))
+            G.outfile = freopen("", "wb", stdout);   /* VAC++ ignores setmode */
+#else
+            G.outfile = stdout;
+#endif
+#ifdef DOS_FLX_NLM_OS2_W32
+#if (defined(__HIGHC__) && !defined(FLEXOS))
+            setmode(G.outfile, _BINARY);
+#else /* !(defined(__HIGHC__) && !defined(FLEXOS)) */
+            setmode(fileno(G.outfile), O_BINARY);
+#endif /* ?(defined(__HIGHC__) && !defined(FLEXOS)) */
+#           define NEWLINE "\r\n"
+#else /* !DOS_FLX_NLM_OS2_W32 */
+#           define NEWLINE "\n"
+#endif /* ?DOS_FLX_NLM_OS2_W32 */
+#ifdef VMS
+            /* VMS:  required even for stdout! */
+            if ((r = open_outfile(__G)) != 0)
+                switch (r) {
+                  case OPENOUT_SKIPOK:
+                    return PK_OK;
+                  case OPENOUT_SKIPWARN:
+                    return PK_WARN;
+                  default:
+                    return PK_DISK;
+                }
+        } else if ((r = open_outfile(__G)) != 0)
+            switch (r) {
+              case OPENOUT_SKIPOK:
+                return PK_OK;
+              case OPENOUT_SKIPWARN:
+                return PK_WARN;
+              default:
+                return PK_DISK;
+            }
+#else /* !VMS */
+        } else if (open_outfile(__G))
+            return PK_DISK;
+#endif /* ?VMS */
+    }
+
+/*---------------------------------------------------------------------------
+    Unpack the file.
+  ---------------------------------------------------------------------------*/
+
+    defer_leftover_input(__G);    /* so NEXTBYTE bounds check will work */
+    switch (G.lrec.compression_method) {
+        case STORED:
+            if (!uO.tflag && QCOND2) {
+#ifdef SYMLINKS
+                if (G.symlnk)   /* can also be deflated, but rarer... */
+                    Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg),
+                      "link", FnFilter1(G.filename), "", ""));
+                else
+#endif /* SYMLINKS */
+                Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg),
+                  "extract", FnFilter1(G.filename),
+                  (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)?
+                  "" : (G.lrec.ucsize == 0L? nul : (G.pInfo->textfile? txt :
+                  bin)), uO.cflag? NEWLINE : ""));
+            }
+#if (defined(DLL) && !defined(NO_SLIDE_REDIR))
+            if (G.redirect_slide) {
+                wsize = G.redirect_size; redirSlide = G.redirect_buffer;
+            } else {
+                wsize = WSIZE; redirSlide = slide;
+            }
+#endif
+            G.outptr = redirSlide;
+            G.outcnt = 0L;
+            while ((b = NEXTBYTE) != EOF) {
+                *G.outptr++ = (uch)b;
+                if (++G.outcnt == wsize) {
+                    error = flush(__G__ redirSlide, G.outcnt, 0);
+                    G.outptr = redirSlide;
+                    G.outcnt = 0L;
+                    if (error != PK_COOL || G.disk_full) break;
+                }
+            }
+            if (G.outcnt) {        /* flush final (partial) buffer */
+                r = flush(__G__ redirSlide, G.outcnt, 0);
+                if (error < r) error = r;
+            }
+            break;
+
+#ifndef SFX
+#ifndef LZW_CLEAN
+        case SHRUNK:
+            if (!uO.tflag && QCOND2) {
+                Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg),
+                  LoadFarStringSmall(Unshrink), FnFilter1(G.filename),
+                  (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)?
+                  "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : ""));
+            }
+            if ((r = unshrink(__G)) != PK_COOL) {
+                if (r < PK_DISK) {
+                    if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarStringSmall(ErrUnzipFile), r == PK_MEM3 ?
+                          LoadFarString(NotEnoughMem) :
+                          LoadFarString(InvalidComprData),
+                          LoadFarStringSmall2(Unshrink),
+                          FnFilter1(G.filename)));
+                    else
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarStringSmall(ErrUnzipNoFile), r == PK_MEM3 ?
+                          LoadFarString(NotEnoughMem) :
+                          LoadFarString(InvalidComprData),
+                          LoadFarStringSmall2(Unshrink)));
+                }
+                error = r;
+            }
+            break;
+#endif /* !LZW_CLEAN */
+
+#ifndef COPYRIGHT_CLEAN
+        case REDUCED1:
+        case REDUCED2:
+        case REDUCED3:
+        case REDUCED4:
+            if (!uO.tflag && QCOND2) {
+                Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg),
+                  "unreduc", FnFilter1(G.filename),
+                  (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)?
+                  "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : ""));
+            }
+            if ((r = unreduce(__G)) != PK_COOL) {
+                /* unreduce() returns only PK_COOL, PK_DISK, or IZ_CTRLC */
+                error = r;
+            }
+            break;
+#endif /* !COPYRIGHT_CLEAN */
+
+        case IMPLODED:
+            if (!uO.tflag && QCOND2) {
+                Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg),
+                  "explod", FnFilter1(G.filename),
+                  (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)?
+                  "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : ""));
+            }
+            if ((r = explode(__G)) != 0) {
+                if (r == 5) { /* treat 5 specially */
+                    int warning = ((zusz_t)G.used_csize <= G.lrec.csize);
+
+                    if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarString(LengthMsg),
+                          "", warning ? "warning" : "error",
+                          FmZofft(G.used_csize, NULL, NULL),
+                          FmZofft(G.lrec.ucsize, NULL, "u"),
+                          warning ? "  " : "",
+                          FmZofft(G.lrec.csize, NULL, "u"),
+                          " [", FnFilter1(G.filename), "]"));
+                    else
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarString(LengthMsg),
+                          "\n", warning ? "warning" : "error",
+                          FmZofft(G.used_csize, NULL, NULL),
+                          FmZofft(G.lrec.ucsize, NULL, "u"),
+                          warning ? "  " : "",
+                          FmZofft(G.lrec.csize, NULL, "u"),
+                          "", "", "."));
+                    error = warning ? PK_WARN : PK_ERR;
+                } else if (r < PK_DISK) {
+                    if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarStringSmall(ErrUnzipFile), r == 3?
+                          LoadFarString(NotEnoughMem) :
+                          LoadFarString(InvalidComprData),
+                          LoadFarStringSmall2(Explode),
+                          FnFilter1(G.filename)));
+                    else
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarStringSmall(ErrUnzipNoFile), r == 3?
+                          LoadFarString(NotEnoughMem) :
+                          LoadFarString(InvalidComprData),
+                          LoadFarStringSmall2(Explode)));
+                    error = ((r == 3) ? PK_MEM3 : PK_ERR);
+                } else {
+                    error = r;
+                }
+            }
+            break;
+#endif /* !SFX */
+
+        case DEFLATED:
+#ifdef USE_DEFLATE64
+        case ENHDEFLATED:
+#endif
+            if (!uO.tflag && QCOND2) {
+                Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg),
+                  "inflat", FnFilter1(G.filename),
+                  (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)?
+                  "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : ""));
+            }
+#ifndef USE_ZLIB  /* zlib's function is called inflate(), too */
+#  define UZinflate inflate
+#endif
+            if ((r = UZinflate(__G__
+                               (G.lrec.compression_method == ENHDEFLATED)))
+                != 0) {
+                if (r < PK_DISK) {
+                    if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarStringSmall(ErrUnzipFile), r == 3?
+                          LoadFarString(NotEnoughMem) :
+                          LoadFarString(InvalidComprData),
+                          LoadFarStringSmall2(Inflate),
+                          FnFilter1(G.filename)));
+                    else
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarStringSmall(ErrUnzipNoFile), r == 3?
+                          LoadFarString(NotEnoughMem) :
+                          LoadFarString(InvalidComprData),
+                          LoadFarStringSmall2(Inflate)));
+                    error = ((r == 3) ? PK_MEM3 : PK_ERR);
+                } else {
+                    error = r;
+                }
+            }
+            break;
+
+#ifdef USE_BZIP2
+        case BZIPPED:
+            if (!uO.tflag && QCOND2) {
+                Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg),
+                  "bunzipp", FnFilter1(G.filename),
+                  (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)?
+                  "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : ""));
+            }
+            if ((r = UZbunzip2(__G)) != 0) {
+                if (r < PK_DISK) {
+                    if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarStringSmall(ErrUnzipFile), r == 3?
+                          LoadFarString(NotEnoughMem) :
+                          LoadFarString(InvalidComprData),
+                          LoadFarStringSmall2(BUnzip),
+                          FnFilter1(G.filename)));
+                    else
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarStringSmall(ErrUnzipNoFile), r == 3?
+                          LoadFarString(NotEnoughMem) :
+                          LoadFarString(InvalidComprData),
+                          LoadFarStringSmall2(BUnzip)));
+                    error = ((r == 3) ? PK_MEM3 : PK_ERR);
+                } else {
+                    error = r;
+                }
+            }
+            break;
+#endif /* USE_BZIP2 */
+
+        default:   /* should never get to this point */
+            Info(slide, 0x401, ((char *)slide,
+              LoadFarString(FileUnknownCompMethod), FnFilter1(G.filename)));
+            /* close and delete file before return? */
+            undefer_input(__G);
+            return PK_WARN;
+
+    } /* end switch (compression method) */
+
+/*---------------------------------------------------------------------------
+    Close the file and set its date and time (not necessarily in that order),
+    and make sure the CRC checked out OK.  Logical-AND the CRC for 64-bit
+    machines (redundant on 32-bit machines).
+  ---------------------------------------------------------------------------*/
+
+#ifdef VMS                  /* VMS:  required even for stdout! (final flush) */
+    if (!uO.tflag)           /* don't close NULL file */
+        error = close_outfile(__G);
+#else
+#ifdef DLL
+    if (!uO.tflag && (!uO.cflag || G.redirect_data)) {
+        if (G.redirect_data)
+            FINISH_REDIRECT();
+        else
+            error = close_outfile(__G);
+    }
+#else
+    if (!uO.tflag && !uO.cflag)   /* don't close NULL file or stdout */
+        error = close_outfile(__G);
+#endif
+#endif /* VMS */
+
+    if (G.disk_full) {            /* set by flush() */
+        if (G.disk_full > 1) {
+#if (defined(DELETE_IF_FULL) && defined(HAVE_UNLINK))
+            /* delete the incomplete file if we can */
+            if (unlink(G.filename) != 0)
+                Trace((stderr, "extract.c:  could not delete %s\n",
+                  FnFilter1(G.filename)));
+#else
+            /* warn user about the incomplete file */
+            Info(slide, 0x421, ((char *)slide, LoadFarString(FileTruncated),
+              FnFilter1(G.filename)));
+#endif
+            error = PK_DISK;
+        } else {
+            error = PK_WARN;
+        }
+    }
+
+    if (error > PK_WARN) {/* don't print redundant CRC error if error already */
+        undefer_input(__G);
+        return error;
+    }
+    if (G.crc32val != G.lrec.crc32) {
+        /* if quiet enough, we haven't output the filename yet:  do it */
+        if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))
+            Info(slide, 0x401, ((char *)slide, "%-22s ",
+              FnFilter1(G.filename)));
+        Info(slide, 0x401, ((char *)slide, LoadFarString(BadCRC), G.crc32val,
+          G.lrec.crc32));
+#if CRYPT
+        if (G.pInfo->encrypted)
+            Info(slide, 0x401, ((char *)slide, LoadFarString(MaybeBadPasswd)));
+#endif
+        error = PK_ERR;
+    } else if (uO.tflag) {
+#ifndef SFX
+        if (G.extra_field) {
+            if ((r = TestExtraField(__G__ G.extra_field,
+                                    G.lrec.extra_field_length)) > error)
+                error = r;
+        } else
+#endif /* !SFX */
+        if (!uO.qflag)
+            Info(slide, 0, ((char *)slide, " OK\n"));
+    } else {
+        if (QCOND2 && !error)   /* GRR:  is stdout reset to text mode yet? */
+            Info(slide, 0, ((char *)slide, "\n"));
+    }
+
+    undefer_input(__G);
+    return error;
+
+} /* end function extract_or_test_member() */
+
+
+
+
+
+#ifndef SFX
+
+/*******************************/
+/*  Function TestExtraField()  */
+/*******************************/
+
+static int TestExtraField(__G__ ef, ef_len)
+    __GDEF
+    uch *ef;
+    unsigned ef_len;
+{
+    ush ebID;
+    unsigned ebLen;
+    unsigned eb_cmpr_offs = 0;
+    int r;
+
+    /* we know the regular compressed file data tested out OK, or else we
+     * wouldn't be here ==> print filename if any extra-field errors found
+     */
+    while (ef_len >= EB_HEADSIZE) {
+        ebID = makeword(ef);
+        ebLen = (unsigned)makeword(ef+EB_LEN);
+
+        if (ebLen > (ef_len - EB_HEADSIZE))
+        {
+           /* Discovered some extra field inconsistency! */
+            if (uO.qflag)
+                Info(slide, 1, ((char *)slide, "%-22s ",
+                  FnFilter1(G.filename)));
+            Info(slide, 1, ((char *)slide, LoadFarString(InconsistEFlength),
+              ebLen, (ef_len - EB_HEADSIZE)));
+            return PK_ERR;
+        }
+
+        switch (ebID) {
+            case EF_OS2:
+            case EF_ACL:
+            case EF_MAC3:
+            case EF_BEOS:
+            case EF_ATHEOS:
+                switch (ebID) {
+                  case EF_OS2:
+                  case EF_ACL:
+                    eb_cmpr_offs = EB_OS2_HLEN;
+                    break;
+                  case EF_MAC3:
+                    if (ebLen >= EB_MAC3_HLEN &&
+                        (makeword(ef+(EB_HEADSIZE+EB_FLGS_OFFS))
+                         & EB_M3_FL_UNCMPR) &&
+                        (makelong(ef+EB_HEADSIZE) == ebLen - EB_MAC3_HLEN))
+                        eb_cmpr_offs = 0;
+                    else
+                        eb_cmpr_offs = EB_MAC3_HLEN;
+                    break;
+                  case EF_BEOS:
+                  case EF_ATHEOS:
+                    if (ebLen >= EB_BEOS_HLEN &&
+                        (*(ef+(EB_HEADSIZE+EB_FLGS_OFFS)) & EB_BE_FL_UNCMPR) &&
+                        (makelong(ef+EB_HEADSIZE) == ebLen - EB_BEOS_HLEN))
+                        eb_cmpr_offs = 0;
+                    else
+                        eb_cmpr_offs = EB_BEOS_HLEN;
+                    break;
+                }
+                if ((r = test_compr_eb(__G__ ef, ebLen, eb_cmpr_offs, NULL))
+                    != PK_OK) {
+                    if (uO.qflag)
+                        Info(slide, 1, ((char *)slide, "%-22s ",
+                          FnFilter1(G.filename)));
+                    switch (r) {
+                        case IZ_EF_TRUNC:
+                            Info(slide, 1, ((char *)slide,
+                              LoadFarString(TruncEAs),
+                              ebLen-(eb_cmpr_offs+EB_CMPRHEADLEN), "\n"));
+                            break;
+                        case PK_ERR:
+                            Info(slide, 1, ((char *)slide,
+                              LoadFarString(InvalidComprDataEAs)));
+                            break;
+                        case PK_MEM3:
+                        case PK_MEM4:
+                            Info(slide, 1, ((char *)slide,
+                              LoadFarString(NotEnoughMemEAs)));
+                            break;
+                        default:
+                            if ((r & 0xff) != PK_ERR)
+                                Info(slide, 1, ((char *)slide,
+                                  LoadFarString(UnknErrorEAs)));
+                            else {
+                                ush m = (ush)(r >> 8);
+                                if (m == DEFLATED)            /* GRR KLUDGE! */
+                                    Info(slide, 1, ((char *)slide,
+                                      LoadFarString(BadCRC_EAs)));
+                                else
+                                    Info(slide, 1, ((char *)slide,
+                                      LoadFarString(UnknComprMethodEAs), m));
+                            }
+                            break;
+                    }
+                    return r;
+                }
+                break;
+
+            case EF_NTSD:
+                Trace((stderr, "ebID: %i / ebLen: %u\n", ebID, ebLen));
+                r = ebLen < EB_NTSD_L_LEN ? IZ_EF_TRUNC :
+                    ((ef[EB_HEADSIZE+EB_NTSD_VERSION] > EB_NTSD_MAX_VER) ?
+                     (PK_WARN | 0x4000) :
+                     test_compr_eb(__G__ ef, ebLen, EB_NTSD_L_LEN, TEST_NTSD));
+                if (r != PK_OK) {
+                    if (uO.qflag)
+                        Info(slide, 1, ((char *)slide, "%-22s ",
+                          FnFilter1(G.filename)));
+                    switch (r) {
+                        case IZ_EF_TRUNC:
+                            Info(slide, 1, ((char *)slide,
+                              LoadFarString(TruncNTSD),
+                              ebLen-(EB_NTSD_L_LEN+EB_CMPRHEADLEN), "\n"));
+                            break;
+#if (defined(WIN32) && defined(NTSD_EAS))
+                        case PK_WARN:
+                            Info(slide, 1, ((char *)slide,
+                              LoadFarString(InvalidSecurityEAs)));
+                            break;
+#endif
+                        case PK_ERR:
+                            Info(slide, 1, ((char *)slide,
+                              LoadFarString(InvalidComprDataEAs)));
+                            break;
+                        case PK_MEM3:
+                        case PK_MEM4:
+                            Info(slide, 1, ((char *)slide,
+                              LoadFarString(NotEnoughMemEAs)));
+                            break;
+                        case (PK_WARN | 0x4000):
+                            Info(slide, 1, ((char *)slide,
+                              LoadFarString(UnsuppNTSDVersEAs),
+                              (int)ef[EB_HEADSIZE+EB_NTSD_VERSION]));
+                            r = PK_WARN;
+                            break;
+                        default:
+                            if ((r & 0xff) != PK_ERR)
+                                Info(slide, 1, ((char *)slide,
+                                  LoadFarString(UnknErrorEAs)));
+                            else {
+                                ush m = (ush)(r >> 8);
+                                if (m == DEFLATED)            /* GRR KLUDGE! */
+                                    Info(slide, 1, ((char *)slide,
+                                      LoadFarString(BadCRC_EAs)));
+                                else
+                                    Info(slide, 1, ((char *)slide,
+                                      LoadFarString(UnknComprMethodEAs), m));
+                            }
+                            break;
+                    }
+                    return r;
+                }
+                break;
+            case EF_PKVMS:
+                /* 2015-01-30 SMS.  Added sufficient-bytes test/message
+                 * here.  (Removed defective ebLen test above.)
+                 *
+                 * If sufficient bytes (EB_PKVMS_MINLEN) are available,
+                 * then compare the stored CRC value with the calculated
+                 * CRC for the remainder of the data (and complain about
+                 * a mismatch).
+                 */
+                if (ebLen < EB_PKVMS_MINLEN)
+                {
+                    /* Insufficient bytes available. */
+                    Info( slide, 1,
+                     ((char *)slide, LoadFarString( TooSmallEBlength),
+                     ebLen, EB_PKVMS_MINLEN));
+                }
+                else if (makelong(ef+ EB_HEADSIZE) !=
+                 crc32(CRCVAL_INITIAL,
+                 (ef+ EB_HEADSIZE+ EB_PKVMS_MINLEN),
+                 (extent)(ebLen- EB_PKVMS_MINLEN)))
+                {
+                     Info(slide, 1, ((char *)slide,
+                       LoadFarString(BadCRC_EAs)));
+                }
+                break;
+            case EF_PKW32:
+            case EF_PKUNIX:
+            case EF_ASIUNIX:
+            case EF_IZVMS:
+            case EF_IZUNIX:
+            case EF_VMCMS:
+            case EF_MVS:
+            case EF_SPARK:
+            case EF_TANDEM:
+            case EF_THEOS:
+            case EF_AV:
+            default:
+                break;
+        }
+        ef_len -= (ebLen + EB_HEADSIZE);
+        ef += (ebLen + EB_HEADSIZE);
+    }
+
+    if (!uO.qflag)
+        Info(slide, 0, ((char *)slide, " OK\n"));
+
+    return PK_COOL;
+
+} /* end function TestExtraField() */
+
+
+
+
+
+/******************************/
+/*  Function test_compr_eb()  */
+/******************************/
+
+#ifdef PROTO
+static int test_compr_eb(
+    __GPRO__
+    uch *eb,
+    unsigned eb_size,
+    unsigned compr_offset,
+    int (*test_uc_ebdata)(__GPRO__ uch *eb, unsigned eb_size,
+                          uch *eb_ucptr, ulg eb_ucsize))
+#else /* !PROTO */
+static int test_compr_eb(__G__ eb, eb_size, compr_offset, test_uc_ebdata)
+    __GDEF
+    uch *eb;
+    unsigned eb_size;
+    unsigned compr_offset;
+    int (*test_uc_ebdata)();
+#endif /* ?PROTO */
+{
+    ulg eb_ucsize;
+    uch *eb_ucptr;
+    int r;
+    ush method;
+
+    if (compr_offset < 4)                /* field is not compressed: */
+        return PK_OK;                    /* do nothing and signal OK */
+
+    /* Return no/bad-data error status if any problem is found:
+     *    1. eb_size is too small to hold the uncompressed size
+     *       (eb_ucsize).  (Else extract eb_ucsize.)
+     *    2. eb_ucsize is zero (invalid).  2014-12-04 SMS.
+     *    3. eb_ucsize is positive, but eb_size is too small to hold
+     *       the compressed data header.
+     */
+    if ((eb_size < (EB_UCSIZE_P + 4)) ||
+     ((eb_ucsize = makelong( eb+ (EB_HEADSIZE+ EB_UCSIZE_P))) == 0L) ||
+     ((eb_ucsize > 0L) && (eb_size <= (compr_offset + EB_CMPRHEADLEN))))
+        return IZ_EF_TRUNC;             /* no/bad compressed data! */
+
+    method = makeword(eb + (EB_HEADSIZE + compr_offset));
+    if ((method == STORED) && (eb_size != compr_offset + EB_CMPRHEADLEN + eb_ucsize))
+        return PK_ERR;            /* compressed & uncompressed
+                                   * should match in STORED
+                                   * method */
+
+    if (
+#ifdef INT_16BIT
+        (((ulg)(extent)eb_ucsize) != eb_ucsize) ||
+#endif
+        (eb_ucptr = (uch *)malloc((extent)eb_ucsize)) == (uch *)NULL)
+        return PK_MEM4;
+
+    r = memextract(__G__ eb_ucptr, eb_ucsize,
+                   eb + (EB_HEADSIZE + compr_offset),
+                   (ulg)(eb_size - compr_offset));
+
+    if (r == PK_OK && test_uc_ebdata != NULL)
+        r = (*test_uc_ebdata)(__G__ eb, eb_size, eb_ucptr, eb_ucsize);
+
+    free(eb_ucptr);
+    return r;
+
+} /* end function test_compr_eb() */
+
+#endif /* !SFX */
+
+
+
+
+
+/***************************/
+/*  Function memextract()  */
+/***************************/
+
+int memextract(__G__ tgt, tgtsize, src, srcsize)  /* extract compressed */
+    __GDEF                                        /*  extra field block; */
+    uch *tgt;                                     /*  return PK-type error */
+    ulg tgtsize;                                  /*  level */
+    ZCONST uch *src;
+    ulg srcsize;
+{
+    zoff_t old_csize=G.csize;
+    uch   *old_inptr=G.inptr;
+    int    old_incnt=G.incnt;
+    int    r, error=PK_OK;
+    ush    method;
+    ulg    extra_field_crc;
+
+
+    method = makeword(src);
+    extra_field_crc = makelong(src+2);
+
+    /* compressed extra field exists completely in memory at this location: */
+    G.inptr = (uch *)src + (2 + 4);     /* method and extra_field_crc */
+    G.incnt = (int)(G.csize = (long)(srcsize - (2 + 4)));
+    G.mem_mode = TRUE;
+    G.outbufptr = tgt;
+    G.outsize = tgtsize;
+
+    switch (method) {
+        case STORED:
+            memcpy((char *)tgt, (char *)G.inptr, (extent)G.incnt);
+            G.outcnt = (ulg)G.csize;    /* for CRC calculation */
+            break;
+        case DEFLATED:
+#ifdef USE_DEFLATE64
+        case ENHDEFLATED:
+#endif
+            G.outcnt = 0L;
+            if ((r = UZinflate(__G__ (method == ENHDEFLATED))) != 0) {
+                if (!uO.tflag)
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarStringSmall(ErrUnzipNoFile), r == 3?
+                      LoadFarString(NotEnoughMem) :
+                      LoadFarString(InvalidComprData),
+                      LoadFarStringSmall2(Inflate)));
+                error = (r == 3)? PK_MEM3 : PK_ERR;
+            }
+            if (G.outcnt == 0L)   /* inflate's final FLUSH sets outcnt */
+                break;
+            break;
+        default:
+            if (uO.tflag)
+                error = PK_ERR | ((int)method << 8);
+            else {
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(UnsupportedExtraField), method));
+                error = PK_ERR;  /* GRR:  should be passed on up via SetEAs() */
+            }
+            break;
+    }
+
+    G.inptr = old_inptr;
+    G.incnt = old_incnt;
+    G.csize = old_csize;
+    G.mem_mode = FALSE;
+
+    if (!error) {
+        register ulg crcval = crc32(CRCVAL_INITIAL, tgt, (extent)G.outcnt);
+
+        if (crcval != extra_field_crc) {
+            if (uO.tflag)
+                error = PK_ERR | (DEFLATED << 8);  /* kludge for now */
+            else {
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(BadExtraFieldCRC), G.zipfn, crcval,
+                  extra_field_crc));
+                error = PK_ERR;
+            }
+        }
+    }
+    return error;
+
+} /* end function memextract() */
+
+
+
+
+
+/*************************/
+/*  Function memflush()  */
+/*************************/
+
+int memflush(__G__ rawbuf, size)
+    __GDEF
+    ZCONST uch *rawbuf;
+    ulg size;
+{
+    if (size > G.outsize)
+        /* Here, PK_DISK is a bit off-topic, but in the sense of marking
+           "overflow of output space", its use may be tolerated. */
+        return PK_DISK;   /* more data than output buffer can hold */
+
+
+
+    memcpy((char *)G.outbufptr, (char *)rawbuf, (extent)size);
+    G.outbufptr += (unsigned int)size;
+    G.outsize -= size;
+    G.outcnt += size;
+
+    return 0;
+
+} /* end function memflush() */
+
+
+
+
+
+#if (defined(VMS) || defined(VMS_TEXT_CONV))
+
+/************************************/
+/*  Function extract_izvms_block()  */
+/************************************/
+
+/*
+ * Extracts block from p. If resulting length is less than needed, fill
+ * extra space with corresponding bytes from 'init'.
+ * Currently understands 3 formats of block compression:
+ * - Simple storing
+ * - Compression of zero bytes to zero bits
+ * - Deflation (see memextract())
+ * The IZVMS block data is returned in malloc'd space.
+ */
+uch *extract_izvms_block(__G__ ebdata, size, retlen, init, needlen)
+    __GDEF
+    ZCONST uch *ebdata;
+    unsigned size;
+    unsigned *retlen;
+    ZCONST uch *init;
+    unsigned needlen;
+{
+    uch *ucdata;       /* Pointer to block allocated */
+    int cmptype;
+    unsigned usiz, csiz;
+
+    cmptype = (makeword(ebdata+EB_IZVMS_FLGS) & EB_IZVMS_BCMASK);
+    csiz = size - EB_IZVMS_HLEN;
+    usiz = (cmptype == EB_IZVMS_BCSTOR ?
+            csiz : makeword(ebdata+EB_IZVMS_UCSIZ));
+
+    if (retlen)
+        *retlen = usiz;
+
+    if ((ucdata = (uch *)malloc(MAX(needlen, usiz))) == NULL)
+        return NULL;
+
+    if (init && (usiz < needlen))
+        memcpy((char *)ucdata, (ZCONST char *)init, needlen);
+
+    switch (cmptype)
+    {
+        case EB_IZVMS_BCSTOR: /* The simplest case */
+            memcpy(ucdata, ebdata+EB_IZVMS_HLEN, usiz);
+            break;
+        case EB_IZVMS_BC00:
+            decompress_bits(ucdata, usiz, ebdata+EB_IZVMS_HLEN);
+            break;
+        case EB_IZVMS_BCDEFL:
+            memextract(__G__ ucdata, (ulg)usiz,
+                       ebdata+EB_IZVMS_HLEN, (ulg)csiz);
+            break;
+        default:
+            free(ucdata);
+            ucdata = NULL;
+    }
+    return ucdata;
+
+} /* end of extract_izvms_block */
+
+
+
+
+
+/********************************/
+/*  Function decompress_bits()  */
+/********************************/
+/*
+ *  Simple uncompression routine. The compression uses bit stream.
+ *  Compression scheme:
+ *
+ *  if (byte!=0)
+ *      putbit(1),putbyte(byte)
+ *  else
+ *      putbit(0)
+ */
+static void decompress_bits(outptr, needlen, bitptr)
+    uch *outptr;        /* Pointer into output block */
+    unsigned needlen;   /* Size of uncompressed block */
+    ZCONST uch *bitptr; /* Pointer into compressed data */
+{
+    ulg bitbuf = 0;
+    int bitcnt = 0;
+
+#define _FILL   {       bitbuf |= (*bitptr++) << bitcnt;\
+                        bitcnt += 8;                    \
+                }
+
+    while (needlen--)
+    {
+        if (bitcnt <= 0)
+            _FILL;
+
+        if (bitbuf & 1)
+        {
+            bitbuf >>= 1;
+            if ((bitcnt -= 1) < 8)
+                _FILL;
+            *outptr++ = (uch)bitbuf;
+            bitcnt -= 8;
+            bitbuf >>= 8;
+        }
+        else
+        {
+            *outptr++ = '\0';
+            bitcnt -= 1;
+            bitbuf >>= 1;
+        }
+    }
+} /* end function decompress_bits() */
+
+#endif /* VMS || VMS_TEXT_CONV */
+
+
+
+
+
+#ifdef SYMLINKS
+/***********************************/
+/* Function set_deferred_symlink() */
+/***********************************/
+
+static void set_deferred_symlink(__G__ slnk_entry)
+    __GDEF
+    slinkentry *slnk_entry;
+{
+    extent ucsize = slnk_entry->targetlen;
+    char *linkfname = slnk_entry->fname;
+    char *linktarget = (char *)malloc(ucsize+1);
+
+    if (!linktarget) {
+        Info(slide, 0x201, ((char *)slide,
+          LoadFarString(SymLnkWarnNoMem), FnFilter1(linkfname)));
+        return;
+    }
+    linktarget[ucsize] = '\0';
+    G.outfile = zfopen(linkfname, FOPR); /* open link placeholder for reading */
+    /* Check that the following conditions are all fulfilled:
+     * a) the placeholder file exists,
+     * b) the placeholder file contains exactly "ucsize" bytes
+     *    (read the expected placeholder content length + 1 extra byte, this
+     *    should return the expected content length),
+     * c) the placeholder content matches the link target specification as
+     *    stored in the symlink control structure.
+     */
+    if (!G.outfile ||
+        fread(linktarget, 1, ucsize+1, G.outfile) != ucsize ||
+        strcmp(slnk_entry->target, linktarget))
+    {
+        Info(slide, 0x201, ((char *)slide,
+          LoadFarString(SymLnkWarnInvalid), FnFilter1(linkfname)));
+        free(linktarget);
+        if (G.outfile)
+            fclose(G.outfile);
+        return;
+    }
+    fclose(G.outfile);                  /* close "data" file for good... */
+    unlink(linkfname);                  /* ...and delete it */
+    if (QCOND2)
+        Info(slide, 0, ((char *)slide, LoadFarString(SymLnkFinish),
+          FnFilter1(linkfname), FnFilter2(linktarget)));
+    if (symlink(linktarget, linkfname))  /* create the real link */
+        perror("symlink error");
+    free(linktarget);
+#ifdef SET_SYMLINK_ATTRIBS
+    set_symlnk_attribs(__G__ slnk_entry);
+#endif
+    return;                             /* can't set time on symlinks */
+
+} /* end function set_deferred_symlink() */
+#endif /* SYMLINKS */
+
+/*
+ * If Unicode is supported, assume we have what we need to do this
+ * check using wide characters, avoiding MBCS issues.
+ */
+
+#ifndef UZ_FNFILTER_REPLACECHAR
+        /* A convenient choice for the replacement of unprintable char codes is
+         * the "single char wildcard", as this character is quite unlikely to
+         * appear in filenames by itself.  The following default definition
+         * sets the replacement char to a question mark as the most common
+         * "single char wildcard"; this setting should be overridden in the
+         * appropiate system-specific configuration header when needed.
+         */
+# define UZ_FNFILTER_REPLACECHAR      '?'
+#endif
+
+/*************************/
+/*  Function fnfilter()  */        /* here instead of in list.c for SFX */
+/*************************/
+
+char *fnfilter(raw, space, size)   /* convert name to safely printable form */
+    ZCONST char *raw;
+    uch *space;
+    extent size;
+{
+#ifndef NATIVE   /* ASCII:  filter ANSI escape codes, etc. */
+    ZCONST uch *r; // =(ZCONST uch *)raw;
+    uch *s=space;
+    uch *slim=NULL;
+    uch *se=NULL;
+    int have_overflow = FALSE;
+
+# if defined( UNICODE_SUPPORT) && defined( _MBCS)
+/* If Unicode support is enabled, and we have multi-byte characters,
+ * then do the isprint() checks by first converting to wide characters
+ * and checking those.  This avoids our having to parse multi-byte
+ * characters for ourselves.  After the wide-char replacements have been
+ * made, the wide string is converted back to the local character set.
+ */
+    wchar_t *wstring;    /* wchar_t version of raw */
+    size_t wslen;        /* length of wstring */
+    wchar_t *wostring;   /* wchar_t version of output string */
+    size_t woslen;       /* length of wostring */
+    char *newraw;        /* new raw */
+
+    /* 2012-11-06 SMS.
+     * Changed to check the value returned by mbstowcs(), and bypass the
+     * Unicode processing if it fails.  This seems to fix a problem
+     * reported in the SourceForge forum, but it's not clear that we
+     * should be doing any Unicode processing without some evidence that
+     * the name actually is Unicode.  (Check bit 11 in the flags before
+     * coming here?)
+     * http://sourceforge.net/p/infozip/bugs/40/
+     */
+
+    if (MB_CUR_MAX <= 1)
+    {
+        /* There's no point to converting multi-byte chars if there are
+         * no multi-byte chars.
+         */
+        wslen = (size_t)-1;
+    }
+    else
+    {
+        /* Get Unicode wide character count (for storage allocation). */
+        wslen = mbstowcs( NULL, raw, 0);
+    }
+
+    if (wslen != (size_t)-1)
+    {
+        /* Apparently valid Unicode.  Allocate wide-char storage. */
+        wstring = (wchar_t *)malloc((wslen + 1) * sizeof(wchar_t));
+        if (wstring == NULL) {
+            strcpy( (char *)space, raw);
+            return (char *)space;
+        }
+        wostring = (wchar_t *)malloc(2 * (wslen + 1) * sizeof(wchar_t));
+        if (wostring == NULL) {
+            free(wstring);
+            strcpy( (char *)space, raw);
+            return (char *)space;
+        }
+
+        /* Convert the multi-byte Unicode to wide chars. */
+        wslen = mbstowcs(wstring, raw, wslen + 1);
+
+        /* Filter the wide-character string. */
+        fnfilterw( wstring, wostring, (2 * (wslen + 1) * sizeof(wchar_t)));
+
+        /* Convert filtered wide chars back to multi-byte. */
+        woslen = wcstombs( NULL, wostring, 0);
+        if ((newraw = malloc(woslen + 1)) == NULL) {
+            free(wstring);
+            free(wostring);
+            strcpy( (char *)space, raw);
+            return (char *)space;
+        }
+        woslen = wcstombs( newraw, wostring, (woslen * MB_CUR_MAX) + 1);
+
+        if (size > 0) {
+            slim = space + size - 4;
+        }
+        r = (ZCONST uch *)newraw;
+        while (*r) {
+            if (size > 0 && s >= slim && se == NULL) {
+                se = s;
+            }
+#  ifdef QDOS
+            if (qlflag & 2) {
+                if (*r == '/' || *r == '.') {
+                    if (se != NULL && (s > (space + (size-3)))) {
+                        have_overflow = TRUE;
+                        break;
+                    }
+                    ++r;
+                    *s++ = '_';
+                    continue;
+                }
+            } else
+#  endif
+            {
+                if (se != NULL && (s > (space + (size-3)))) {
+                    have_overflow = TRUE;
+                    break;
+                }
+                *s++ = *r++;
+            }
+        }
+        if (have_overflow) {
+            strcpy((char *)se, "...");
+        } else {
+            *s = '\0';
+        }
+
+        free(wstring);
+        free(wostring);
+        free(newraw);
+    }
+    else
+# endif /* defined( UNICODE_SUPPORT) && defined( _MBCS) */
+    {
+        /* No Unicode support, or apparently invalid Unicode. */
+        r = (ZCONST uch *)raw;
+
+        if (size > 0) {
+            slim = space + size
+#ifdef _MBCS
+                         - (MB_CUR_MAX - 1)
+#endif
+                         - 4;
+        }
+        while (*r) {
+            if (size > 0 && s >= slim && se == NULL) {
+                se = s;
+            }
+#ifdef QDOS
+            if (qlflag & 2) {
+                if (*r == '/' || *r == '.') {
+                    if (se != NULL && (s > (space + (size-3)))) {
+                        have_overflow = TRUE;
+                        break;
+                    }
+                    ++r;
+                    *s++ = '_';
+                    continue;
+                }
+            } else
+#endif
+#ifdef HAVE_WORKING_ISPRINT
+            if (!isprint(*r)) {
+                if (*r < 32) {
+                    /* ASCII control codes are escaped as "^{letter}". */
+                    if (se != NULL && (s > (space + (size-4)))) {
+                        have_overflow = TRUE;
+                        break;
+                    }
+                    *s++ = '^', *s++ = (uch)(64 + *r++);
+                } else {
+                    /* Other unprintable codes are replaced by the
+                     * placeholder character. */
+                    if (se != NULL && (s > (space + (size-3)))) {
+                        have_overflow = TRUE;
+                        break;
+                    }
+                    *s++ = UZ_FNFILTER_REPLACECHAR;
+                    INCSTR(r);
+                }
+#else /* !HAVE_WORKING_ISPRINT */
+            if (*r < 32) {
+                /* ASCII control codes are escaped as "^{letter}". */
+                if (se != NULL && (s > (space + (size-4)))) {
+                    have_overflow = TRUE;
+                    break;
+                }
+                *s++ = '^', *s++ = (uch)(64 + *r++);
+#endif /* ?HAVE_WORKING_ISPRINT */
+            } else {
+#ifdef _MBCS
+                unsigned i = CLEN(r);
+                if (se != NULL && (s > (space + (size-i-2)))) {
+                    have_overflow = TRUE;
+                    break;
+                }
+                for (; i > 0; i--)
+                    *s++ = *r++;
+#else
+                if (se != NULL && (s > (space + (size-3)))) {
+                    have_overflow = TRUE;
+                    break;
+                }
+                *s++ = *r++;
+#endif
+             }
+        }
+        if (have_overflow) {
+            strcpy((char *)se, "...");
+        } else {
+            *s = '\0';
+        }
+    }
+
+#ifdef WINDLL
+    INTERN_TO_ISO((char *)space, (char *)space);  /* translate to ANSI */
+#else
+#if (defined(WIN32) && !defined(_WIN32_WCE))
+    /* Win9x console always uses OEM character coding, and
+       WinNT console is set to OEM charset by default, too */
+    INTERN_TO_OEM((char *)space, (char *)space);
+#endif /* (WIN32 && !_WIN32_WCE) */
+#endif /* ?WINDLL */
+
+    return (char *)space;
+
+#else /* NATIVE:  EBCDIC or whatever */
+    return (char *)raw;
+#endif
+
+} /* end function fnfilter() */
+
+
+#if defined( UNICODE_SUPPORT) && defined( _MBCS)
+
+/****************************/
+/*  Function fnfilter[w]()  */  /* (Here instead of in list.c for SFX.) */
+/****************************/
+
+/* fnfilterw() - Convert wide name to safely printable form. */
+
+/* fnfilterw() - Convert wide-character name to safely printable form. */
+
+wchar_t *fnfilterw( src, dst, siz)
+    ZCONST wchar_t *src;        /* Pointer to source char (string). */
+    wchar_t *dst;               /* Pointer to destination char (string). */
+    extent siz;                 /* Not used (!). */
+{
+    wchar_t *dsx = dst;
+
+    /* Filter the wide chars. */
+    while (*src)
+    {
+        if (iswprint( *src))
+        {
+            /* Printable code.  Copy it. */
+            *dst++ = *src;
+        }
+        else
+        {
+            /* Unprintable code.  Substitute something printable for it. */
+            if (*src < 32)
+            {
+                /* Replace ASCII control code with "^{letter}". */
+                *dst++ = (wchar_t)'^';
+                *dst++ = (wchar_t)(64 + *src);
+            }
+            else
+            {
+                /* Replace other unprintable code with the placeholder. */
+                *dst++ = (wchar_t)UZ_FNFILTER_REPLACECHAR;
+            }
+        }
+        src++;
+    }
+    *dst = (wchar_t)0;  /* NUL-terminate the destination string. */
+    return dsx;
+} /* fnfilterw(). */
+
+#endif /* defined( UNICODE_SUPPORT) && defined( _MBCS) */
+
+
+#ifdef SET_DIR_ATTRIB
+/* must sort saved directories so can set perms from bottom up */
+
+/************************/
+/*  Function dircomp()  */
+/************************/
+
+static int Cdecl dircomp(a, b)  /* used by qsort(); swiped from Zip */
+    ZCONST zvoid *a, *b;
+{
+    /* order is significant:  this sorts in reverse order (deepest first) */
+    return strcmp((*(direntry **)b)->fn, (*(direntry **)a)->fn);
+ /* return namecmp((*(direntry **)b)->fn, (*(direntry **)a)->fn); */
+}
+
+#endif /* SET_DIR_ATTRIB */
+
+
+#ifdef USE_BZIP2
+
+/**************************/
+/*  Function UZbunzip2()  */
+/**************************/
+
+int UZbunzip2(__G)
+__GDEF
+/* decompress a bzipped entry using the libbz2 routines */
+{
+    int retval = 0;     /* return code: 0 = "no error" */
+    int err=BZ_OK;
+    int repeated_buf_err;
+    bz_stream bstrm;
+
+    if (G.incnt <= 0 && G.csize <= 0L) {
+        /* avoid an infinite loop */
+        Trace((stderr, "UZbunzip2() got empty input\n"));
+        return 2;
+    }
+
+#if (defined(DLL) && !defined(NO_SLIDE_REDIR))
+    if (G.redirect_slide)
+        wsize = G.redirect_size, redirSlide = G.redirect_buffer;
+    else
+        wsize = WSIZE, redirSlide = slide;
+#endif
+
+    bstrm.next_out = (char *)redirSlide;
+    bstrm.avail_out = wsize;
+
+    bstrm.next_in = (char *)G.inptr;
+    bstrm.avail_in = G.incnt;
+
+    {
+        /* local buffer for efficiency */
+        /* $TODO Check for BZIP LIB version? */
+
+        bstrm.bzalloc = NULL;
+        bstrm.bzfree = NULL;
+        bstrm.opaque = NULL;
+
+        Trace((stderr, "initializing bzlib()\n"));
+        err = BZ2_bzDecompressInit(&bstrm, 0, 0);
+
+        if (err == BZ_MEM_ERROR)
+            return 3;
+        else if (err != BZ_OK)
+            Trace((stderr, "oops!  (BZ2_bzDecompressInit() err = %d)\n", err));
+    }
+
+#ifdef FUNZIP
+    while (err != BZ_STREAM_END) {
+#else /* !FUNZIP */
+    while (G.csize > 0) {
+        Trace((stderr, "first loop:  G.csize = %ld\n", G.csize));
+#endif /* ?FUNZIP */
+        while (bstrm.avail_out > 0) {
+            err = BZ2_bzDecompress(&bstrm);
+
+            if (err == BZ_DATA_ERROR) {
+                retval = 2; goto uzbunzip_cleanup_exit;
+            } else if (err == BZ_MEM_ERROR) {
+                retval = 3; goto uzbunzip_cleanup_exit;
+            } else if (err != BZ_OK && err != BZ_STREAM_END)
+                Trace((stderr, "oops!  (bzip(first loop) err = %d)\n", err));
+
+#ifdef FUNZIP
+            if (err == BZ_STREAM_END)    /* "END-of-entry-condition" ? */
+#else /* !FUNZIP */
+            if (G.csize <= 0L)          /* "END-of-entry-condition" ? */
+#endif /* ?FUNZIP */
+                break;
+
+            if (bstrm.avail_in == 0) {
+                if (fillinbuf(__G) == 0) {
+                    /* no "END-condition" yet, but no more data */
+                    retval = 2; goto uzbunzip_cleanup_exit;
+                }
+
+                bstrm.next_in = (char *)G.inptr;
+                bstrm.avail_in = G.incnt;
+            }
+            Trace((stderr, "     avail_in = %u\n", bstrm.avail_in));
+        }
+        /* flush slide[] */
+        if ((retval = FLUSH(wsize - bstrm.avail_out)) != 0)
+            goto uzbunzip_cleanup_exit;
+        Trace((stderr, "inside loop:  flushing %ld bytes (ptr diff = %ld)\n",
+          (long)(wsize - bstrm.avail_out),
+          (long)(bstrm.next_out-(char *)redirSlide)));
+        bstrm.next_out = (char *)redirSlide;
+        bstrm.avail_out = wsize;
+    }
+
+    /* no more input, so loop until we have all output */
+    Trace((stderr, "beginning final loop:  err = %d\n", err));
+    repeated_buf_err = FALSE;
+    while (err != BZ_STREAM_END) {
+        err = BZ2_bzDecompress(&bstrm);
+        if (err == BZ_DATA_ERROR) {
+            retval = 2; goto uzbunzip_cleanup_exit;
+        } else if (err == BZ_MEM_ERROR) {
+            retval = 3; goto uzbunzip_cleanup_exit;
+        } else if (err != BZ_OK && err != BZ_STREAM_END) {
+            Trace((stderr, "oops!  (bzip(final loop) err = %d)\n", err));
+            DESTROYGLOBALS();
+            EXIT(PK_MEM3);
+        }
+        /* final flush of slide[] */
+        if ((retval = FLUSH(wsize - bstrm.avail_out)) != 0)
+            goto uzbunzip_cleanup_exit;
+        Trace((stderr, "final loop:  flushing %ld bytes (ptr diff = %ld)\n",
+          (long)(wsize - bstrm.avail_out),
+          (long)(bstrm.next_out-(char *)redirSlide)));
+        bstrm.next_out = (char *)redirSlide;
+        bstrm.avail_out = wsize;
+    }
+#ifdef LARGE_FILE_SUPPORT
+    Trace((stderr, "total in = %llu, total out = %llu\n",
+      (zusz_t)(bstrm.total_in_lo32) + ((zusz_t)(bstrm.total_in_hi32))<<32,
+      (zusz_t)(bstrm.total_out_lo32) + ((zusz_t)(bstrm.total_out_hi32))<<32));
+#else
+    Trace((stderr, "total in = %lu, total out = %lu\n", bstrm.total_in_lo32,
+      bstrm.total_out_lo32));
+#endif
+
+    G.inptr = (uch *)bstrm.next_in;
+    G.incnt = (G.inbuf + INBUFSIZ) - G.inptr;  /* reset for other routines */
+
+uzbunzip_cleanup_exit:
+    err = BZ2_bzDecompressEnd(&bstrm);
+    if (err != BZ_OK)
+        Trace((stderr, "oops!  (BZ2_bzDecompressEnd() err = %d)\n", err));
+
+    return retval;
+} /* end function UZbunzip2() */
+#endif /* USE_BZIP2 */
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/fileio.c
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/fileio.c	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/fileio.c	(revision 5)
@@ -0,0 +1,2889 @@
+/*
+  Copyright (c) 1990-2017 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2009-Jan-02 or later
+  (the contents of which are also included in unzip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*---------------------------------------------------------------------------
+
+  fileio.c
+
+  This file contains routines for doing direct but relatively generic input/
+  output, file-related sorts of things, plus some miscellaneous stuff.  Most
+  of the stuff has to do with opening, closing, reading and/or writing files.
+
+  Contains:  open_input_file()
+             open_outfile()           (not: VMS, AOS/VS, CMSMVS, MACOS, TANDEM)
+             undefer_input()
+             defer_leftover_input()
+             readbuf()
+             readbyte()
+             fillinbuf()
+             seek_zipf()
+             flush()                  (non-VMS)
+             is_vms_varlen_txt()      (non-VMS, VMS_TEXT_CONV only)
+             disk_error()             (non-VMS)
+             UzpMessagePrnt()
+             UzpMessageNull()         (DLL only)
+             UzpInput()
+             UzpMorePause()
+             UzpPassword()            (non-WINDLL)
+             handler()
+             dos_to_unix_time()       (non-VMS, non-VM/CMS, non-MVS)
+             check_for_newer()        (non-VMS, non-OS/2, non-VM/CMS, non-MVS)
+             do_string()
+             makeword()
+             makelong()
+             makeint64()
+             fzofft()
+             str2iso()                (CRYPT && NEED_STR2ISO, only)
+             str2oem()                (CRYPT && NEED_STR2OEM, only)
+             memset()                 (ZMEM only)
+             memcpy()                 (ZMEM only)
+             zstrnicmp()              (NO_STRNICMP only)
+             zstat()                  (REGULUS only)
+             plastchar()              (_MBCS only)
+             uzmbclen()               (_MBCS && NEED_UZMBCLEN, only)
+             uzmbschr()               (_MBCS && NEED_UZMBSCHR, only)
+             uzmbsrchr()              (_MBCS && NEED_UZMBSRCHR, only)
+             fLoadFarString()         (SMALL_MEM only)
+             fLoadFarStringSmall()    (SMALL_MEM only)
+             fLoadFarStringSmall2()   (SMALL_MEM only)
+             zfstrcpy()               (SMALL_MEM only)
+             zfstrcmp()               (SMALL_MEM && !(SFX || FUNZIP) only)
+
+  ---------------------------------------------------------------------------*/
+
+
+#define __FILEIO_C      /* identifies this source module */
+#define UNZIP_INTERNAL
+#include "unzip.h"
+#ifdef WINDLL
+#  ifdef POCKET_UNZIP
+#    include "wince/intrface.h"
+#  else
+#    include "windll/windll.h"
+#  endif
+#  include <setjmp.h>
+#endif
+#include "crc32.h"
+#include "crypt.h"
+#include "ttyio.h"
+
+/* setup of codepage conversion for decryption passwords */
+#if CRYPT
+#  if (defined(CRYP_USES_ISO2OEM) && !defined(IZ_ISO2OEM_ARRAY))
+#    define IZ_ISO2OEM_ARRAY            /* pull in iso2oem[] table */
+#  endif
+#  if (defined(CRYP_USES_OEM2ISO) && !defined(IZ_OEM2ISO_ARRAY))
+#    define IZ_OEM2ISO_ARRAY            /* pull in oem2iso[] table */
+#  endif
+#endif
+#include "ebcdic.h"   /* definition/initialization of ebcdic[] */
+
+
+/*
+   Note: Under Windows, the maximum size of the buffer that can be used
+   with any of the *printf calls is 16,384, so win_fprintf was used to
+   feed the fprintf clone no more than 16K chunks at a time. This should
+   be valid for anything up to 64K (and probably beyond, assuming your
+   buffers are that big).
+*/
+#ifdef WINDLL
+#  define WriteError(buf,len,strm) \
+   (win_fprintf(pG, strm, (extent)len, (char far *)buf) != (int)(len))
+#else /* !WINDLL */
+#  ifdef USE_FWRITE
+#    define WriteError(buf,len,strm) \
+     ((extent)fwrite((char *)(buf),1,(extent)(len),strm) != (extent)(len))
+#  else
+#    define WriteError(buf,len,strm) \
+     ((extent)write(fileno(strm),(char *)(buf),(extent)(len)) != (extent)(len))
+#  endif
+#endif /* ?WINDLL */
+
+/*
+   2005-09-16 SMS.
+   On VMS, when output is redirected to a file, as in a command like
+   "PIPE UNZIP -v > X.OUT", the output file is created with VFC record
+   format, and multiple calls to write() or fwrite() will produce multiple
+   records, even when there's no newline terminator in the buffer.
+   The result is unsightly output with spurious newlines.  Using fprintf()
+   instead of write() here, and disabling a fflush(stdout) in UzpMessagePrnt()
+   below, together seem to solve the problem.
+
+   According to the C RTL manual, "The write and decc$record_write
+   functions always generate at least one record."  Also, "[T]he fwrite
+   function always generates at least <number_items> records."  So,
+   "fwrite(buf, len, 1, strm)" is much better ("1" record) than
+   "fwrite(buf, 1, len, strm)" ("len" (1-character) records, _really_
+   ugly), but neither is better than write().  Similarly, "The fflush
+   function always generates a record if there is unwritten data in the
+   buffer."  Apparently fprintf() buffers the stuff somewhere, and puts
+   out a record (only) when it sees a newline.
+*/
+#ifdef VMS
+#  define WriteTxtErr(buf,len,strm) \
+   ((extent)fprintf(strm, "%.*s", len, buf) != (extent)(len))
+#else
+#  define WriteTxtErr(buf,len,strm)  WriteError(buf,len,strm)
+#endif
+
+#if (defined(USE_DEFLATE64) && defined(__16BIT__))
+static int partflush OF((__GPRO__ uch *rawbuf, ulg size, int unshrink));
+#endif
+#ifdef VMS_TEXT_CONV
+static int is_vms_varlen_txt OF((__GPRO__ uch *ef_buf, unsigned ef_len));
+#endif
+static int disk_error OF((__GPRO));
+
+
+/****************************/
+/* Strings used in fileio.c */
+/****************************/
+
+static ZCONST char Far CannotOpenZipfile[] =
+  "error:  cannot open zipfile [ %s ]\n        %s\n";
+
+#if (!defined(VMS) && !defined(AOS_VS) && !defined(CMS_MVS) && !defined(MACOS))
+#if (!defined(TANDEM))
+#if (defined(ATH_BEO_THS_UNX) || defined(DOS_FLX_NLM_OS2_W32))
+   static ZCONST char Far CannotDeleteOldFile[] =
+     "error:  cannot delete old %s\n        %s\n";
+#ifdef UNIXBACKUP
+   static ZCONST char Far CannotRenameOldFile[] =
+     "error:  cannot rename old %s\n        %s\n";
+   static ZCONST char Far BackupSuffix[] = "~";
+#endif
+#endif /* ATH_BEO_THS_UNX || DOS_FLX_NLM_OS2_W32 */
+#ifdef NOVELL_BUG_FAILSAFE
+   static ZCONST char Far NovellBug[] =
+     "error:  %s: stat() says does not exist, but fopen() found anyway\n";
+#endif
+   static ZCONST char Far CannotCreateFile[] =
+     "error:  cannot create %s\n        %s\n";
+#endif /* !TANDEM */
+#endif /* !VMS && !AOS_VS && !CMS_MVS && !MACOS */
+
+static ZCONST char Far ReadError[] = "error:  zipfile read error\n";
+static ZCONST char Far FilenameTooLongTrunc[] =
+  "warning:  filename too long--truncating.\n";
+#ifdef UNICODE_SUPPORT
+   static ZCONST char Far UFilenameCorrupt[] =
+     "error: Unicode filename corrupt.\n";
+   static ZCONST char Far UFilenameTooLongTrunc[] =
+     "warning:  Converted unicode filename too long--truncating.\n";
+#endif
+static ZCONST char Far ExtraFieldTooLong[] =
+  "warning:  extra field too long (%d).  Ignoring...\n";
+static ZCONST char Far ExtraFieldCorrupt[] =
+  "warning:  extra field (type: 0x%04x) corrupt.  Continuing...\n";
+
+#ifdef WINDLL
+   static ZCONST char Far DiskFullQuery[] =
+     "%s:  write error (disk full?).\n";
+#else
+   static ZCONST char Far DiskFullQuery[] =
+     "%s:  write error (disk full?).  Continue? (y/n/^C) ";
+   static ZCONST char Far ZipfileCorrupt[] =
+     "error:  zipfile probably corrupt (%s)\n";
+#  ifdef SYMLINKS
+     static ZCONST char Far FileIsSymLink[] =
+       "%s exists and is a symbolic link%s.\n";
+#  endif
+#  ifdef MORE
+     static ZCONST char Far MorePrompt[] = "--More--(%lu)";
+#  endif
+   static ZCONST char Far QuitPrompt[] =
+     "--- Press `Q' to quit, or any other key to continue ---";
+   static ZCONST char Far HidePrompt[] = /* "\r                       \r"; */
+     "\r                                                         \r";
+#  if CRYPT
+#    ifdef MACOS
+       /* SPC: are names on MacOS REALLY so much longer than elsewhere ??? */
+       static ZCONST char Far PasswPrompt[] = "[%s]\n %s password: ";
+#    else
+       static ZCONST char Far PasswPrompt[] = "[%s] %s password: ";
+#    endif
+     static ZCONST char Far PasswPrompt2[] = "Enter password: ";
+     static ZCONST char Far PasswRetry[] = "password incorrect--reenter: ";
+#  endif /* CRYPT */
+#endif /* !WINDLL */
+
+
+
+
+
+/******************************/
+/* Function open_input_file() */
+/******************************/
+
+int open_input_file(__G)    /* return 1 if open failed */
+    __GDEF
+{
+    /*
+     *  open the zipfile for reading and in BINARY mode to prevent cr/lf
+     *  translation, which would corrupt the bitstreams
+     */
+
+#ifdef VMS
+    G.zipfd = open(G.zipfn, O_RDONLY, 0, OPNZIP_RMS_ARGS);
+#else /* !VMS */
+#ifdef MACOS
+    G.zipfd = open(G.zipfn, 0);
+#else /* !MACOS */
+#ifdef CMS_MVS
+    G.zipfd = vmmvs_open_infile(__G);
+#else /* !CMS_MVS */
+#ifdef USE_STRM_INPUT
+    G.zipfd = fopen(G.zipfn, FOPR);
+#else /* !USE_STRM_INPUT */
+    G.zipfd = open(G.zipfn, O_RDONLY | O_BINARY);
+#endif /* ?USE_STRM_INPUT */
+#endif /* ?CMS_MVS */
+#endif /* ?MACOS */
+#endif /* ?VMS */
+
+#ifdef USE_STRM_INPUT
+    if (G.zipfd == NULL)
+#else
+    /* if (G.zipfd < 0) */  /* no good for Windows CE port */
+    if (G.zipfd == -1)
+#endif
+    {
+        Info(slide, 0x401, ((char *)slide, LoadFarString(CannotOpenZipfile),
+          G.zipfn, strerror(errno)));
+        return 1;
+    }
+    return 0;
+
+} /* end function open_input_file() */
+
+
+
+
+#if (!defined(VMS) && !defined(AOS_VS) && !defined(CMS_MVS) && !defined(MACOS))
+#if (!defined(TANDEM))
+
+/***************************/
+/* Function open_outfile() */
+/***************************/
+
+int open_outfile(__G)           /* return 1 if fail */
+    __GDEF
+{
+#ifdef DLL
+    if (G.redirect_data)
+        return (redirect_outfile(__G) == FALSE);
+#endif
+#ifdef QDOS
+    QFilename(__G__ G.filename);
+#endif
+#if (defined(DOS_FLX_NLM_OS2_W32) || defined(ATH_BEO_THS_UNX))
+#ifdef BORLAND_STAT_BUG
+    /* Borland 5.0's stat() barfs if the filename has no extension and the
+     * file doesn't exist. */
+    if (access(G.filename, 0) == -1) {
+        FILE *tmp = fopen(G.filename, "wb+");
+
+        /* file doesn't exist, so create a dummy file to keep stat() from
+         * failing (will be over-written anyway) */
+        fputc('0', tmp);  /* just to have something in the file */
+        fclose(tmp);
+    }
+#endif /* BORLAND_STAT_BUG */
+#ifdef SYMLINKS
+    if (SSTAT(G.filename, &G.statbuf) == 0 ||
+        lstat(G.filename, &G.statbuf) == 0)
+#else
+    if (SSTAT(G.filename, &G.statbuf) == 0)
+#endif /* ?SYMLINKS */
+    {
+        Trace((stderr, "open_outfile:  stat(%s) returns 0:  file exists\n",
+          FnFilter1(G.filename)));
+#ifdef UNIXBACKUP
+        if (uO.B_flag) {    /* do backup */
+            char *tname;
+            z_stat tmpstat;
+            int blen, flen, tlen;
+
+            blen = strlen(BackupSuffix);
+            flen = strlen(G.filename);
+            tlen = flen + blen + 6;    /* includes space for 5 digits */
+            if (tlen >= FILNAMSIZ) {   /* in case name is too long, truncate */
+                tname = (char *)malloc(FILNAMSIZ);
+                if (tname == NULL)
+                    return 1;                 /* in case we run out of space */
+                tlen = FILNAMSIZ - 1 - blen;
+                strcpy(tname, G.filename);    /* make backup name */
+                tname[tlen] = '\0';
+                if (flen > tlen) flen = tlen;
+                tlen = FILNAMSIZ;
+            } else {
+                tname = (char *)malloc(tlen);
+                if (tname == NULL)
+                    return 1;                 /* in case we run out of space */
+                strcpy(tname, G.filename);    /* make backup name */
+            }
+            strcpy(tname+flen, BackupSuffix);
+
+            if (IS_OVERWRT_ALL) {
+                /* If there is a previous backup file, delete it,
+                 * otherwise the following rename operation may fail.
+                 */
+                if (SSTAT(tname, &tmpstat) == 0)
+                    unlink(tname);
+            } else {
+                /* Check if backupname exists, and, if it's true, try
+                 * appending numbers of up to 5 digits (or the maximum
+                 * "unsigned int" number on 16-bit systems) to the
+                 * BackupSuffix, until an unused name is found.
+                 */
+                unsigned maxtail, i;
+                char *numtail = tname + flen + blen;
+
+                /* take account of the "unsigned" limit on 16-bit systems: */
+                maxtail = ( ((~0) >= 99999L) ? 99999 : (~0) );
+                switch (tlen - flen - blen - 1) {
+                    case 4: maxtail = 9999; break;
+                    case 3: maxtail = 999; break;
+                    case 2: maxtail = 99; break;
+                    case 1: maxtail = 9; break;
+                    case 0: maxtail = 0; break;
+                }
+                /* while filename exists */
+                for (i = 0; (i < maxtail) && (SSTAT(tname, &tmpstat) == 0);)
+                    sprintf(numtail,"%u", ++i);
+            }
+
+            if (rename(G.filename, tname) != 0) {   /* move file */
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(CannotRenameOldFile),
+                  FnFilter1(G.filename), strerror(errno)));
+                free(tname);
+                return 1;
+            }
+            Trace((stderr, "open_outfile:  %s now renamed into %s\n",
+              FnFilter1(G.filename), FnFilter2(tname)));
+            free(tname);
+        } else
+#endif /* UNIXBACKUP */
+        {
+#ifdef DOS_FLX_OS2_W32
+            if (!(G.statbuf.st_mode & S_IWRITE)) {
+                Trace((stderr,
+                  "open_outfile:  existing file %s is read-only\n",
+                  FnFilter1(G.filename)));
+                chmod(G.filename, S_IREAD | S_IWRITE);
+                Trace((stderr, "open_outfile:  %s now writable\n",
+                  FnFilter1(G.filename)));
+            }
+#endif /* DOS_FLX_OS2_W32 */
+#ifdef NLM
+            /* Give the file read/write permission (non-POSIX shortcut) */
+            chmod(G.filename, 0);
+#endif /* NLM */
+            if (unlink(G.filename) != 0) {
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(CannotDeleteOldFile),
+                  FnFilter1(G.filename), strerror(errno)));
+                return 1;
+            }
+            Trace((stderr, "open_outfile:  %s now deleted\n",
+              FnFilter1(G.filename)));
+        }
+    }
+#endif /* DOS_FLX_NLM_OS2_W32 || ATH_BEO_THS_UNX */
+#ifdef RISCOS
+    if (SWI_OS_File_7(G.filename,0xDEADDEAD,0xDEADDEAD,G.lrec.ucsize)!=NULL) {
+        Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile),
+          FnFilter1(G.filename), strerror(errno)));
+        return 1;
+    }
+#endif /* RISCOS */
+#ifdef TOPS20
+    char *tfilnam;
+
+    if ((tfilnam = (char *)malloc(2*strlen(G.filename)+1)) == (char *)NULL)
+        return 1;
+    strcpy(tfilnam, G.filename);
+    upper(tfilnam);
+    enquote(tfilnam);
+    if ((G.outfile = fopen(tfilnam, FOPW)) == (FILE *)NULL) {
+        Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile),
+          tfilnam, strerror(errno)));
+        free(tfilnam);
+        return 1;
+    }
+    free(tfilnam);
+#else /* !TOPS20 */
+#ifdef MTS
+    if (uO.aflag)
+        G.outfile = zfopen(G.filename, FOPWT);
+    else
+        G.outfile = zfopen(G.filename, FOPW);
+    if (G.outfile == (FILE *)NULL) {
+        Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile),
+          FnFilter1(G.filename), strerror(errno)));
+        return 1;
+    }
+#else /* !MTS */
+#ifdef DEBUG
+    Info(slide, 1, ((char *)slide,
+      "open_outfile:  doing fopen(%s) for reading\n", FnFilter1(G.filename)));
+    if ((G.outfile = zfopen(G.filename, FOPR)) == (FILE *)NULL)
+        Info(slide, 1, ((char *)slide,
+          "open_outfile:  fopen(%s) for reading failed:  does not exist\n",
+          FnFilter1(G.filename)));
+    else {
+        Info(slide, 1, ((char *)slide,
+          "open_outfile:  fopen(%s) for reading succeeded:  file exists\n",
+          FnFilter1(G.filename)));
+        fclose(G.outfile);
+    }
+#endif /* DEBUG */
+#ifdef NOVELL_BUG_FAILSAFE
+    if (G.dne && ((G.outfile = zfopen(G.filename, FOPR)) != (FILE *)NULL)) {
+        Info(slide, 0x401, ((char *)slide, LoadFarString(NovellBug),
+          FnFilter1(G.filename)));
+        fclose(G.outfile);
+        return 1;   /* with "./" fix in checkdir(), should never reach here */
+    }
+#endif /* NOVELL_BUG_FAILSAFE */
+    Trace((stderr, "open_outfile:  doing fopen(%s) for writing\n",
+      FnFilter1(G.filename)));
+    {
+#if defined(ATH_BE_UNX) || defined(AOS_VS) || defined(QDOS) || defined(TANDEM)
+        mode_t umask_sav = umask(0077);
+#endif
+#if defined(SYMLINKS) || defined(QLZIP)
+        /* These features require the ability to re-read extracted data from
+           the output files. Output files are created with Read&Write access.
+         */
+        G.outfile = zfopen(G.filename, FOPWR);
+#else
+        G.outfile = zfopen(G.filename, FOPW);
+#endif
+#if defined(ATH_BE_UNX) || defined(AOS_VS) || defined(QDOS) || defined(TANDEM)
+        umask(umask_sav);
+#endif
+    }
+    if (G.outfile == (FILE *)NULL) {
+        Info(slide, 0x401, ((char *)slide, LoadFarString(CannotCreateFile),
+          FnFilter1(G.filename), strerror(errno)));
+        return 1;
+    }
+    Trace((stderr, "open_outfile:  fopen(%s) for writing succeeded\n",
+      FnFilter1(G.filename)));
+#endif /* !MTS */
+#endif /* !TOPS20 */
+
+#ifdef USE_FWRITE
+#ifdef DOS_NLM_OS2_W32
+    /* 16-bit MSC: buffer size must be strictly LESS than 32K (WSIZE):  bogus */
+    setbuf(G.outfile, (char *)NULL);   /* make output unbuffered */
+#else /* !DOS_NLM_OS2_W32 */
+#ifndef RISCOS
+#ifdef _IOFBF  /* make output fully buffered (works just about like write()) */
+    setvbuf(G.outfile, (char *)slide, _IOFBF, WSIZE);
+#else
+    setbuf(G.outfile, (char *)slide);
+#endif
+#endif /* !RISCOS */
+#endif /* ?DOS_NLM_OS2_W32 */
+#endif /* USE_FWRITE */
+#ifdef OS2_W32
+    /* preallocate the final file size to prevent file fragmentation */
+    SetFileSize(G.outfile, G.lrec.ucsize);
+#endif
+    return 0;
+
+} /* end function open_outfile() */
+
+#endif /* !TANDEM */
+#endif /* !VMS && !AOS_VS && !CMS_MVS && !MACOS */
+
+
+
+
+
+/*
+ * These functions allow NEXTBYTE to function without needing two bounds
+ * checks.  Call defer_leftover_input() if you ever have filled G.inbuf
+ * by some means other than readbyte(), and you then want to start using
+ * NEXTBYTE.  When going back to processing bytes without NEXTBYTE, call
+ * undefer_input().  For example, extract_or_test_member brackets its
+ * central section that does the decompression with these two functions.
+ * If you need to check the number of bytes remaining in the current
+ * file while using NEXTBYTE, check (G.csize + G.incnt), not G.csize.
+ */
+
+/****************************/
+/* function undefer_input() */
+/****************************/
+
+void undefer_input(__G)
+    __GDEF
+{
+    if (G.incnt > 0)
+        G.csize += G.incnt;
+    if (G.incnt_leftover > 0) {
+        /* We know that "(G.csize < MAXINT)" so we can cast G.csize to int:
+         * This condition was checked when G.incnt_leftover was set > 0 in
+         * defer_leftover_input(), and it is NOT allowed to touch G.csize
+         * before calling undefer_input() when (G.incnt_leftover > 0)
+         * (single exception: see read_byte()'s  "G.csize <= 0" handling) !!
+         */
+        G.incnt = G.incnt_leftover + (int)G.csize;
+        G.inptr = G.inptr_leftover - (int)G.csize;
+        G.incnt_leftover = 0;
+    } else if (G.incnt < 0)
+        G.incnt = 0;
+} /* end function undefer_input() */
+
+
+
+
+
+/***********************************/
+/* function defer_leftover_input() */
+/***********************************/
+
+void defer_leftover_input(__G)
+    __GDEF
+{
+    if ((zoff_t)G.incnt > G.csize) {
+        /* (G.csize < MAXINT), we can safely cast it to int !! */
+        if (G.csize < 0L)
+            G.csize = 0L;
+        G.inptr_leftover = G.inptr + (int)G.csize;
+        G.incnt_leftover = G.incnt - (int)G.csize;
+        G.incnt = (int)G.csize;
+    } else
+        G.incnt_leftover = 0;
+    G.csize -= G.incnt;
+} /* end function defer_leftover_input() */
+
+
+
+
+
+/**********************/
+/* Function readbuf() */
+/**********************/
+
+unsigned readbuf(__G__ buf, size)   /* return number of bytes read into buf */
+    __GDEF
+    char *buf;
+    register unsigned size;
+{
+    register unsigned count;
+    unsigned n;
+
+    n = size;
+    while (size) {
+        if (G.incnt <= 0) {
+            if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) == 0)
+                return (n-size);
+            else if (G.incnt < 0) {
+                /* another hack, but no real harm copying same thing twice */
+                (*G.message)((zvoid *)&G,
+                  (uch *)LoadFarString(ReadError),  /* CANNOT use slide */
+                  (ulg)strlen(LoadFarString(ReadError)), 0x401);
+                return 0;  /* discarding some data; better than lock-up */
+            }
+            /* buffer ALWAYS starts on a block boundary:  */
+            G.cur_zipfile_bufstart += INBUFSIZ;
+            G.inptr = G.inbuf;
+        }
+        count = MIN(size, (unsigned)G.incnt);
+        memcpy(buf, G.inptr, count);
+        buf += count;
+        G.inptr += count;
+        G.incnt -= count;
+        size -= count;
+    }
+    return n;
+
+} /* end function readbuf() */
+
+
+
+
+
+/***********************/
+/* Function readbyte() */
+/***********************/
+
+int readbyte(__G)   /* refill inbuf and return a byte if available, else EOF */
+    __GDEF
+{
+    if (G.mem_mode)
+        return EOF;
+    if (G.csize <= 0) {
+        G.csize--;             /* for tests done after exploding */
+        G.incnt = 0;
+        return EOF;
+    }
+    if (G.incnt <= 0) {
+        if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) == 0) {
+            return EOF;
+        } else if (G.incnt < 0) {  /* "fail" (abort, retry, ...) returns this */
+            /* another hack, but no real harm copying same thing twice */
+            (*G.message)((zvoid *)&G,
+              (uch *)LoadFarString(ReadError),
+              (ulg)strlen(LoadFarString(ReadError)), 0x401);
+            echon();
+#ifdef WINDLL
+            longjmp(dll_error_return, 1);
+#else
+            DESTROYGLOBALS();
+            EXIT(PK_BADERR);    /* totally bailing; better than lock-up */
+#endif
+        }
+        G.cur_zipfile_bufstart += INBUFSIZ; /* always starts on block bndry */
+        G.inptr = G.inbuf;
+        defer_leftover_input(__G);           /* decrements G.csize */
+    }
+
+#if CRYPT
+    if (G.pInfo->encrypted) {
+        uch *p;
+        int n;
+
+        /* This was previously set to decrypt one byte beyond G.csize, when
+         * incnt reached that far.  GRR said, "but it's required:  why?"  This
+         * was a bug in fillinbuf() -- was it also a bug here?
+         */
+        for (n = G.incnt, p = G.inptr;  n--;  p++)
+            zdecode(*p);
+    }
+#endif /* CRYPT */
+
+    --G.incnt;
+    return *G.inptr++;
+
+} /* end function readbyte() */
+
+
+
+
+
+#if defined(USE_ZLIB) || defined(USE_BZIP2)
+
+/************************/
+/* Function fillinbuf() */
+/************************/
+
+int fillinbuf(__G) /* like readbyte() except returns number of bytes in inbuf */
+    __GDEF
+{
+    if (G.mem_mode ||
+                  (G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) <= 0)
+        return 0;
+    G.cur_zipfile_bufstart += INBUFSIZ;  /* always starts on a block boundary */
+    G.inptr = G.inbuf;
+    defer_leftover_input(__G);           /* decrements G.csize */
+
+#if CRYPT
+    if (G.pInfo->encrypted) {
+        uch *p;
+        int n;
+
+        for (n = G.incnt, p = G.inptr;  n--;  p++)
+            zdecode(*p);
+    }
+#endif /* CRYPT */
+
+    return G.incnt;
+
+} /* end function fillinbuf() */
+
+#endif /* USE_ZLIB || USE_BZIP2 */
+
+
+
+
+
+/************************/
+/* Function seek_zipf() */
+/************************/
+
+int seek_zipf(__G__ abs_offset)
+    __GDEF
+    zoff_t abs_offset;
+{
+/*
+ *  Seek to the block boundary of the block which includes abs_offset,
+ *  then read block into input buffer and set pointers appropriately.
+ *  If block is already in the buffer, just set the pointers.  This function
+ *  is used by do_seekable (process.c), extract_or_test_entrylist (extract.c)
+ *  and do_string (fileio.c).  Also, a slightly modified version is embedded
+ *  within extract_or_test_entrylist (extract.c).  readbyte() and readbuf()
+ *  (fileio.c) are compatible.  NOTE THAT abs_offset is intended to be the
+ *  "proper offset" (i.e., if there were no extra bytes prepended);
+ *  cur_zipfile_bufstart contains the corrected offset.
+ *
+ *  Since seek_zipf() is never used during decompression, it is safe to
+ *  use the slide[] buffer for the error message.
+ *
+ * returns PK error codes:
+ *  PK_BADERR if effective offset in zipfile is negative
+ *  PK_EOF if seeking past end of zipfile
+ *  PK_OK when seek was successful
+ */
+    zoff_t request = abs_offset + G.extra_bytes;
+    zoff_t inbuf_offset = request % INBUFSIZ;
+    zoff_t bufstart = request - inbuf_offset;
+
+    if (request < 0) {
+        Info(slide, 1, ((char *)slide, LoadFarStringSmall(SeekMsg),
+             G.zipfn, LoadFarString(ReportMsg)));
+        return(PK_BADERR);
+    } else if (bufstart != G.cur_zipfile_bufstart) {
+        Trace((stderr,
+          "fpos_zip: abs_offset = %s, G.extra_bytes = %s\n",
+          FmZofft(abs_offset, NULL, NULL),
+          FmZofft(G.extra_bytes, NULL, NULL)));
+#ifdef USE_STRM_INPUT
+        zfseeko(G.zipfd, bufstart, SEEK_SET);
+        G.cur_zipfile_bufstart = zftello(G.zipfd);
+#else /* !USE_STRM_INPUT */
+        G.cur_zipfile_bufstart = zlseek(G.zipfd, bufstart, SEEK_SET);
+#endif /* ?USE_STRM_INPUT */
+        Trace((stderr,
+          "       request = %s, (abs+extra) = %s, inbuf_offset = %s\n",
+          FmZofft(request, NULL, NULL),
+          FmZofft((abs_offset+G.extra_bytes), NULL, NULL),
+          FmZofft(inbuf_offset, NULL, NULL)));
+        Trace((stderr, "       bufstart = %s, cur_zipfile_bufstart = %s\n",
+          FmZofft(bufstart, NULL, NULL),
+          FmZofft(G.cur_zipfile_bufstart, NULL, NULL)));
+        if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) <= 0)
+            return(PK_EOF);
+        G.incnt -= (int)inbuf_offset;
+        G.inptr = G.inbuf + (int)inbuf_offset;
+    } else {
+        G.incnt += (G.inptr-G.inbuf) - (int)inbuf_offset;
+        G.inptr = G.inbuf + (int)inbuf_offset;
+    }
+    return(PK_OK);
+} /* end function seek_zipf() */
+
+
+
+
+
+#ifndef VMS  /* for VMS use code in vms.c */
+
+/********************/
+/* Function flush() */   /* returns PK error codes: */
+/********************/   /* if tflag => always 0; PK_DISK if write error */
+
+int flush(__G__ rawbuf, size, unshrink)
+    __GDEF
+    uch *rawbuf;
+    ulg size;
+    int unshrink;
+#if (defined(USE_DEFLATE64) && defined(__16BIT__))
+{
+    int ret;
+
+    /* On 16-bit systems (MSDOS, OS/2 1.x), the standard C library functions
+     * cannot handle writes of 64k blocks at once.  For these systems, the
+     * blocks to flush are split into pieces of 32k or less.
+     */
+    while (size > 0x8000L) {
+        ret = partflush(__G__ rawbuf, 0x8000L, unshrink);
+        if (ret != PK_OK)
+            return ret;
+        size -= 0x8000L;
+        rawbuf += (extent)0x8000;
+    }
+    return partflush(__G__ rawbuf, size, unshrink);
+} /* end function flush() */
+
+
+/************************/
+/* Function partflush() */  /* returns PK error codes: */
+/************************/  /* if tflag => always 0; PK_DISK if write error */
+
+static int partflush(__G__ rawbuf, size, unshrink)
+    __GDEF
+    uch *rawbuf;        /* cannot be ZCONST, gets passed to (*G.message)() */
+    ulg size;
+    int unshrink;
+#endif /* USE_DEFLATE64 && __16BIT__ */
+{
+    register uch *p;
+    register uch *q;
+    uch *transbuf;
+#if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV))
+    ulg transbufsiz;
+#endif
+    /* static int didCRlast = FALSE;    moved to globals.h */
+
+
+/*---------------------------------------------------------------------------
+    Compute the CRC first; if testing or if disk is full, that's it.
+  ---------------------------------------------------------------------------*/
+
+    G.crc32val = crc32(G.crc32val, rawbuf, (extent)size);
+
+#ifdef DLL
+    if ((G.statreportcb != NULL) &&
+        (*G.statreportcb)(__G__ UZ_ST_IN_PROGRESS, G.zipfn, G.filename, NULL))
+        return IZ_CTRLC;        /* cancel operation by user request */
+#endif
+
+    if (uO.tflag || size == 0L)  /* testing or nothing to write:  all done */
+        return PK_OK;
+
+    if (G.disk_full)
+        return PK_DISK;         /* disk already full:  ignore rest of file */
+
+/*---------------------------------------------------------------------------
+    Write the bytes rawbuf[0..size-1] to the output device, first converting
+    end-of-lines and ASCII/EBCDIC as needed.  If SMALL_MEM or MED_MEM are NOT
+    defined, outbuf is assumed to be at least as large as rawbuf and is not
+    necessarily checked for overflow.
+  ---------------------------------------------------------------------------*/
+
+    if (!G.pInfo->textmode) {   /* write raw binary data */
+        /* GRR:  note that for standard MS-DOS compilers, size argument to
+         * fwrite() can never be more than 65534, so WriteError macro will
+         * have to be rewritten if size can ever be that large.  For now,
+         * never more than 32K.  Also note that write() returns an int, which
+         * doesn't necessarily limit size to 32767 bytes if write() is used
+         * on 16-bit systems but does make it more of a pain; however, because
+         * at least MSC 5.1 has a lousy implementation of fwrite() (as does
+         * DEC Ultrix cc), write() is used anyway.
+         */
+#ifdef DLL
+        if (G.redirect_data) {
+#ifdef NO_SLIDE_REDIR
+            if (writeToMemory(__G__ rawbuf, (extent)size)) return PK_ERR;
+#else
+            writeToMemory(__G__ rawbuf, (extent)size);
+#endif
+        } else
+#endif
+        if (!uO.cflag && WriteError(rawbuf, size, G.outfile))
+            return disk_error(__G);
+        else if (uO.cflag && (*G.message)((zvoid *)&G, rawbuf, size, 0))
+            return PK_OK;
+    } else {   /* textmode:  aflag is true */
+        if (unshrink) {
+            /* rawbuf = outbuf */
+            transbuf = G.outbuf2;
+#if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV))
+            transbufsiz = TRANSBUFSIZ;
+#endif
+        } else {
+            /* rawbuf = slide */
+            transbuf = G.outbuf;
+#if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV))
+            transbufsiz = OUTBUFSIZ;
+            Trace((stderr, "\ntransbufsiz = OUTBUFSIZ = %u\n",
+                   (unsigned)OUTBUFSIZ));
+#endif
+        }
+        if (G.newfile) {
+#ifdef VMS_TEXT_CONV
+            if (G.pInfo->hostnum == VMS_ && G.extra_field &&
+                is_vms_varlen_txt(__G__ G.extra_field,
+                                  G.lrec.extra_field_length))
+                G.VMS_line_state = 0;    /* 0: ready to read line length */
+            else
+                G.VMS_line_state = -1;   /* -1: don't treat as VMS text */
+#endif
+            G.didCRlast = FALSE;         /* no previous buffers written */
+            G.newfile = FALSE;
+        }
+
+#ifdef VMS_TEXT_CONV
+        if (G.VMS_line_state >= 0)
+        {
+            p = rawbuf;
+            q = transbuf;
+            while ((extent)(p-rawbuf) < (extent)size) {
+                switch (G.VMS_line_state) {
+
+                    /* 0: ready to read line length */
+                    case 0:
+                        G.VMS_line_length = 0;
+                        if ((extent)(p-rawbuf) == (extent)size-1) {
+                            /* last char */
+                            G.VMS_line_length = (unsigned)(*p++);
+                            G.VMS_line_state = 1;
+                        } else {
+                            G.VMS_line_length = makeword(p);
+                            p += 2;
+                            G.VMS_line_state = 2;
+                        }
+                        G.VMS_line_pad =
+                               ((G.VMS_line_length & 1) != 0); /* odd */
+                        break;
+
+                    /* 1: read one byte of length, need second */
+                    case 1:
+                        G.VMS_line_length += ((unsigned)(*p++) << 8);
+                        G.VMS_line_state = 2;
+                        break;
+
+                    /* 2: ready to read VMS_line_length chars */
+                    case 2:
+                        {
+                            extent remaining = (extent)size+(rawbuf-p);
+                            extent outroom;
+
+                            if (G.VMS_line_length < remaining) {
+                                remaining = G.VMS_line_length;
+                                G.VMS_line_state = 3;
+                            }
+
+                            outroom = transbuf+(extent)transbufsiz-q;
+                            if (remaining >= outroom) {
+                                remaining -= outroom;
+                                for (;outroom > 0; p++, outroom--)
+                                    *q++ = native(*p);
+#ifdef DLL
+                                if (G.redirect_data) {
+                                    if (writeToMemory(__G__ transbuf,
+                                          (extent)(q-transbuf))) return PK_ERR;
+                                } else
+#endif
+                                if (!uO.cflag && WriteError(transbuf,
+                                    (extent)(q-transbuf), G.outfile))
+                                    return disk_error(__G);
+                                else if (uO.cflag && (*G.message)((zvoid *)&G,
+                                         transbuf, (ulg)(q-transbuf), 0))
+                                    return PK_OK;
+                                q = transbuf;
+                                /* fall through to normal case */
+                            }
+                            G.VMS_line_length -= remaining;
+                            for (;remaining > 0; p++, remaining--)
+                                *q++ = native(*p);
+                        }
+                        break;
+
+                    /* 3: ready to PutNativeEOL */
+                    case 3:
+                        if (q > transbuf+(extent)transbufsiz-lenEOL) {
+#ifdef DLL
+                            if (G.redirect_data) {
+                                if (writeToMemory(__G__ transbuf,
+                                      (extent)(q-transbuf))) return PK_ERR;
+                            } else
+#endif
+                            if (!uO.cflag &&
+                                WriteError(transbuf, (extent)(q-transbuf),
+                                  G.outfile))
+                                return disk_error(__G);
+                            else if (uO.cflag && (*G.message)((zvoid *)&G,
+                                     transbuf, (ulg)(q-transbuf), 0))
+                                return PK_OK;
+                            q = transbuf;
+                        }
+                        PutNativeEOL
+                        G.VMS_line_state = G.VMS_line_pad ? 4 : 0;
+                        break;
+
+                    /* 4: ready to read pad byte */
+                    case 4:
+                        ++p;
+                        G.VMS_line_state = 0;
+                        break;
+                }
+            } /* end while */
+
+        } else
+#endif /* VMS_TEXT_CONV */
+
+    /*-----------------------------------------------------------------------
+        Algorithm:  CR/LF => native; lone CR => native; lone LF => native.
+        This routine is only for non-raw-VMS, non-raw-VM/CMS files (i.e.,
+        stream-oriented files, not record-oriented).
+      -----------------------------------------------------------------------*/
+
+        /* else not VMS text */ {
+            p = rawbuf;
+            if (*p == LF && G.didCRlast)
+                ++p;
+            G.didCRlast = FALSE;
+            for (q = transbuf;  (extent)(p-rawbuf) < (extent)size;  ++p) {
+                if (*p == CR) {           /* lone CR or CR/LF: treat as EOL  */
+                    PutNativeEOL
+                    if ((extent)(p-rawbuf) == (extent)size-1)
+                        /* last char in buffer */
+                        G.didCRlast = TRUE;
+                    else if (p[1] == LF)  /* get rid of accompanying LF */
+                        ++p;
+                } else if (*p == LF)      /* lone LF */
+                    PutNativeEOL
+                else
+#ifndef DOS_FLX_OS2_W32
+                if (*p != CTRLZ)          /* lose all ^Z's */
+#endif
+                    *q++ = native(*p);
+
+#if (defined(SMALL_MEM) || defined(MED_MEM))
+# if (lenEOL == 1)   /* don't check unshrink:  both buffers small but equal */
+                if (!unshrink)
+# endif
+                    /* check for danger of buffer overflow and flush */
+                    if (q > transbuf+(extent)transbufsiz-lenEOL) {
+                        Trace((stderr,
+                          "p - rawbuf = %u   q-transbuf = %u   size = %lu\n",
+                          (unsigned)(p-rawbuf), (unsigned)(q-transbuf), size));
+                        if (!uO.cflag && WriteError(transbuf,
+                            (extent)(q-transbuf), G.outfile))
+                            return disk_error(__G);
+                        else if (uO.cflag && (*G.message)((zvoid *)&G,
+                                 transbuf, (ulg)(q-transbuf), 0))
+                            return PK_OK;
+                        q = transbuf;
+                        continue;
+                    }
+#endif /* SMALL_MEM || MED_MEM */
+            }
+        }
+
+    /*-----------------------------------------------------------------------
+        Done translating:  write whatever we've got to file (or screen).
+      -----------------------------------------------------------------------*/
+
+        Trace((stderr, "p - rawbuf = %u   q-transbuf = %u   size = %lu\n",
+          (unsigned)(p-rawbuf), (unsigned)(q-transbuf), size));
+        if (q > transbuf) {
+#ifdef DLL
+            if (G.redirect_data) {
+                if (writeToMemory(__G__ transbuf, (extent)(q-transbuf)))
+                    return PK_ERR;
+            } else
+#endif
+            if (!uO.cflag && WriteError(transbuf, (extent)(q-transbuf),
+                G.outfile))
+                return disk_error(__G);
+            else if (uO.cflag && (*G.message)((zvoid *)&G, transbuf,
+                (ulg)(q-transbuf), 0))
+                return PK_OK;
+        }
+    }
+
+    return PK_OK;
+
+} /* end function flush() [resp. partflush() for 16-bit Deflate64 support] */
+
+
+
+
+
+#ifdef VMS_TEXT_CONV
+
+/********************************/
+/* Function is_vms_varlen_txt() */
+/********************************/
+
+static int is_vms_varlen_txt(__G__ ef_buf, ef_len)
+    __GDEF
+    uch *ef_buf;        /* buffer containing extra field */
+    unsigned ef_len;    /* total length of extra field */
+{
+    unsigned eb_id;
+    unsigned eb_len;
+    uch *eb_data;
+    unsigned eb_datlen;
+#define VMSREC_C_UNDEF  0
+#define VMSREC_C_VAR    2
+    uch vms_rectype = VMSREC_C_UNDEF;
+ /* uch vms_fileorg = 0; */ /* currently, fileorg is not used... */
+
+#define VMSPK_ITEMID            0
+#define VMSPK_ITEMLEN           2
+#define VMSPK_ITEMHEADSZ        4
+
+#define VMSATR_C_RECATTR        4
+#define VMS_FABSIG              0x42414656      /* "VFAB" */
+/* offsets of interesting fields in VMS fabdef structure */
+#define VMSFAB_B_RFM            31      /* record format byte */
+#define VMSFAB_B_ORG            29      /* file organization byte */
+
+    if (ef_len == 0 || ef_buf == NULL)
+        return FALSE;
+
+    while (ef_len >= EB_HEADSIZE) {
+        eb_id = makeword(EB_ID + ef_buf);
+        eb_len = makeword(EB_LEN + ef_buf);
+
+        if (eb_len > (ef_len - EB_HEADSIZE)) {
+            /* discovered some extra field inconsistency! */
+            Trace((stderr,
+              "is_vms_varlen_txt: block length %u > rest ef_size %u\n", eb_len,
+              ef_len - EB_HEADSIZE));
+            break;
+        }
+
+        switch (eb_id) {
+          case EF_PKVMS:
+            /* The PKVMS e.f. raw data part consists of:
+             * a) 4 bytes CRC checksum
+             * b) list of uncompressed variable-length data items
+             * Each data item is introduced by a fixed header
+             *  - 2 bytes data type ID
+             *  - 2 bytes <size> of data
+             *  - <size> bytes of actual attribute data
+             */
+
+            /* get pointer to start of data and its total length */
+            eb_data = ef_buf+(EB_HEADSIZE+4);
+            eb_datlen = eb_len-4;
+
+            /* test the CRC checksum */
+            if (makelong(ef_buf+EB_HEADSIZE) !=
+                crc32(CRCVAL_INITIAL, eb_data, (extent)eb_datlen))
+            {
+                Info(slide, 1, ((char *)slide,
+                  "[Warning: CRC error, discarding PKWARE extra field]\n"));
+                /* skip over the data analysis code */
+                break;
+            }
+
+            /* scan through the attribute data items */
+            while (eb_datlen > 4)
+            {
+                unsigned fldsize = makeword(&eb_data[VMSPK_ITEMLEN]);
+
+                /* check the item type word */
+                switch (makeword(&eb_data[VMSPK_ITEMID])) {
+                  case VMSATR_C_RECATTR:
+                    /* we have found the (currently only) interesting
+                     * data item */
+                    if (fldsize >= 1) {
+                        vms_rectype = eb_data[VMSPK_ITEMHEADSZ] & 15;
+                     /* vms_fileorg = eb_data[VMSPK_ITEMHEADSZ] >> 4; */
+                    }
+                    break;
+                  default:
+                    break;
+                }
+                /* skip to next data item */
+                eb_datlen -= fldsize + VMSPK_ITEMHEADSZ;
+                eb_data += fldsize + VMSPK_ITEMHEADSZ;
+            }
+            break;
+
+          case EF_IZVMS:
+            if (makelong(ef_buf+EB_HEADSIZE) == VMS_FABSIG) {
+                if ((eb_data = extract_izvms_block(__G__
+                                                   ef_buf+EB_HEADSIZE, eb_len,
+                                                   &eb_datlen, NULL, 0))
+                    != NULL)
+                {
+                    if (eb_datlen >= VMSFAB_B_RFM+1) {
+                        vms_rectype = eb_data[VMSFAB_B_RFM] & 15;
+                     /* vms_fileorg = eb_data[VMSFAB_B_ORG] >> 4; */
+                    }
+                    free(eb_data);
+                }
+            }
+            break;
+
+          default:
+            break;
+        }
+
+        /* Skip this extra field block */
+        ef_buf += (eb_len + EB_HEADSIZE);
+        ef_len -= (eb_len + EB_HEADSIZE);
+    }
+
+    return (vms_rectype == VMSREC_C_VAR);
+
+} /* end function is_vms_varlen_txtfile() */
+
+#endif /* VMS_TEXT_CONV */
+
+
+
+
+/*************************/
+/* Function disk_error() */
+/*************************/
+
+static int disk_error(__G)
+    __GDEF
+{
+    /* OK to use slide[] here because this file is finished regardless */
+    Info(slide, 0x4a1, ((char *)slide, LoadFarString(DiskFullQuery),
+      FnFilter1(G.filename)));
+
+#ifndef WINDLL
+    fgets(G.answerbuf, sizeof(G.answerbuf), stdin);
+    if (*G.answerbuf == 'y')   /* stop writing to this file */
+        G.disk_full = 1;       /*  (outfile bad?), but new OK */
+    else
+#endif
+        G.disk_full = 2;       /* no:  exit program */
+
+    return PK_DISK;
+
+} /* end function disk_error() */
+
+#endif /* !VMS */
+
+
+
+
+
+/*****************************/
+/* Function UzpMessagePrnt() */
+/*****************************/
+
+int UZ_EXP UzpMessagePrnt(pG, buf, size, flag)
+    zvoid *pG;   /* globals struct:  always passed */
+    uch *buf;    /* preformatted string to be printed */
+    ulg size;    /* length of string (may include nulls) */
+    int flag;    /* flag bits */
+{
+    /* IMPORTANT NOTE:
+     *    The name of the first parameter of UzpMessagePrnt(), which passes
+     *    the "Uz_Globs" address, >>> MUST <<< be identical to the string
+     *    expansion of the __G__ macro in the REENTRANT case (see globals.h).
+     *    This name identity is mandatory for the LoadFarString() macro
+     *    (in the SMALL_MEM case) !!!
+     */
+    int error;
+    uch *q=buf, *endbuf=buf+(unsigned)size;
+#ifdef MORE
+    uch *p=buf;
+#if (defined(SCREENWIDTH) && defined(SCREENLWRAP))
+    int islinefeed = FALSE;
+#endif
+#endif
+    FILE *outfp;
+
+
+/*---------------------------------------------------------------------------
+    These tests are here to allow fine-tuning of UnZip's output messages,
+    but none of them will do anything without setting the appropriate bit
+    in the flag argument of every Info() statement which is to be turned
+    *off*.  That is, all messages are currently turned on for all ports.
+    To turn off *all* messages, use the UzpMessageNull() function instead
+    of this one.
+  ---------------------------------------------------------------------------*/
+
+#if (defined(OS2) && defined(DLL))
+    if (MSG_NO_DLL2(flag))  /* if OS/2 DLL bit is set, do NOT print this msg */
+        return 0;
+#endif
+#ifdef WINDLL
+    if (MSG_NO_WDLL(flag))
+        return 0;
+#endif
+#ifdef WINDLL
+    if (MSG_NO_WGUI(flag))
+        return 0;
+#endif
+/*
+#ifdef ACORN_GUI
+    if (MSG_NO_AGUI(flag))
+        return 0;
+#endif
+ */
+#ifdef DLL                 /* don't display message if data is redirected */
+    if (((Uz_Globs *)pG)->redirect_data &&
+        !((Uz_Globs *)pG)->redirect_text)
+        return 0;
+#endif
+
+    if (MSG_STDERR(flag) && !((Uz_Globs *)pG)->UzO.tflag)
+        outfp = (FILE *)stderr;
+    else
+        outfp = (FILE *)stdout;
+
+#ifdef QUERY_TRNEWLN
+    /* some systems require termination of query prompts with '\n' to force
+     * immediate display */
+    if (MSG_MNEWLN(flag)) {   /* assumes writable buffer (e.g., slide[]) */
+        *endbuf++ = '\n';     /*  with room for one more char at end of buf */
+        ++size;               /*  (safe assumption:  only used for four */
+    }                         /*  short queries in extract.c and fileio.c) */
+#endif
+
+    if (MSG_TNEWLN(flag)) {   /* again assumes writable buffer:  fragile... */
+        if ((!size && !((Uz_Globs *)pG)->sol) ||
+            (size && (endbuf[-1] != '\n')))
+        {
+            *endbuf++ = '\n';
+            ++size;
+        }
+    }
+
+#ifdef MORE
+# ifdef SCREENSIZE
+    /* room for --More-- and one line of overlap: */
+#  if (defined(SCREENWIDTH) && defined(SCREENLWRAP))
+    SCREENSIZE(&((Uz_Globs *)pG)->height, &((Uz_Globs *)pG)->width);
+#  else
+    SCREENSIZE(&((Uz_Globs *)pG)->height, (int *)NULL);
+#  endif
+    ((Uz_Globs *)pG)->height -= 2;
+# else
+    /* room for --More-- and one line of overlap: */
+    ((Uz_Globs *)pG)->height = SCREENLINES - 2;
+#  if (defined(SCREENWIDTH) && defined(SCREENLWRAP))
+    ((Uz_Globs *)pG)->width = SCREENWIDTH;
+#  endif
+# endif
+#endif /* MORE */
+
+    if (MSG_LNEWLN(flag) && !((Uz_Globs *)pG)->sol) {
+        /* not at start of line:  want newline */
+#ifdef OS2DLL
+        if (!((Uz_Globs *)pG)->redirect_text) {
+#endif
+            putc('\n', outfp);
+            fflush(outfp);
+#ifdef MORE
+            if (((Uz_Globs *)pG)->M_flag)
+            {
+#if (defined(SCREENWIDTH) && defined(SCREENLWRAP))
+                ((Uz_Globs *)pG)->chars = 0;
+#endif
+                ++((Uz_Globs *)pG)->numlines;
+                ++((Uz_Globs *)pG)->lines;
+                if (((Uz_Globs *)pG)->lines >= ((Uz_Globs *)pG)->height)
+                    (*((Uz_Globs *)pG)->mpause)((zvoid *)pG,
+                      LoadFarString(MorePrompt), 1);
+            }
+#endif /* MORE */
+            if (MSG_STDERR(flag) && ((Uz_Globs *)pG)->UzO.tflag &&
+                !isatty(1) && isatty(2))
+            {
+                /* error output from testing redirected:  also send to stderr */
+                putc('\n', stderr);
+                fflush(stderr);
+            }
+#ifdef OS2DLL
+        } else
+           REDIRECTC('\n');
+#endif
+        ((Uz_Globs *)pG)->sol = TRUE;
+    }
+
+    /* put zipfile name, filename and/or error/warning keywords here */
+
+#ifdef MORE
+    if (((Uz_Globs *)pG)->M_flag
+#ifdef OS2DLL
+         && !((Uz_Globs *)pG)->redirect_text
+#endif
+                                                 )
+    {
+        while (p < endbuf) {
+            if (*p == '\n') {
+#if (defined(SCREENWIDTH) && defined(SCREENLWRAP))
+                islinefeed = TRUE;
+            } else if (SCREENLWRAP) {
+                if (*p == '\r') {
+                    ((Uz_Globs *)pG)->chars = 0;
+                } else {
+#  ifdef TABSIZE
+                    if (*p == '\t')
+                        ((Uz_Globs *)pG)->chars +=
+                            (TABSIZE - (((Uz_Globs *)pG)->chars % TABSIZE));
+                    else
+#  endif
+                        ++((Uz_Globs *)pG)->chars;
+
+                    if (((Uz_Globs *)pG)->chars >= ((Uz_Globs *)pG)->width)
+                        islinefeed = TRUE;
+                }
+            }
+            if (islinefeed) {
+                islinefeed = FALSE;
+                ((Uz_Globs *)pG)->chars = 0;
+#endif /* (SCREENWIDTH && SCREEN_LWRAP) */
+                ++((Uz_Globs *)pG)->numlines;
+                ++((Uz_Globs *)pG)->lines;
+                if (((Uz_Globs *)pG)->lines >= ((Uz_Globs *)pG)->height)
+                {
+                    if ((error = WriteTxtErr(q, p-q+1, outfp)) != 0)
+                        return error;
+                    fflush(outfp);
+                    ((Uz_Globs *)pG)->sol = TRUE;
+                    q = p + 1;
+                    (*((Uz_Globs *)pG)->mpause)((zvoid *)pG,
+                      LoadFarString(MorePrompt), 1);
+                }
+            }
+            INCSTR(p);
+        } /* end while */
+        size = (ulg)(p - q);   /* remaining text */
+    }
+#endif /* MORE */
+
+    if (size) {
+#ifdef OS2DLL
+        if (!((Uz_Globs *)pG)->redirect_text) {
+#endif
+            if ((error = WriteTxtErr(q, size, outfp)) != 0)
+                return error;
+#ifndef VMS     /* 2005-09-16 SMS.  See note at "WriteTxtErr()", above. */
+            fflush(outfp);
+#endif
+            if (MSG_STDERR(flag) && ((Uz_Globs *)pG)->UzO.tflag &&
+                !isatty(1) && isatty(2))
+            {
+                /* error output from testing redirected:  also send to stderr */
+                if ((error = WriteTxtErr(q, size, stderr)) != 0)
+                    return error;
+                fflush(stderr);
+            }
+#ifdef OS2DLL
+        } else {                /* GRR:  this is ugly:  hide with macro */
+            if ((error = REDIRECTPRINT(q, size)) != 0)
+                return error;
+        }
+#endif /* OS2DLL */
+        ((Uz_Globs *)pG)->sol = (endbuf[-1] == '\n');
+    }
+    return 0;
+
+} /* end function UzpMessagePrnt() */
+
+
+
+
+
+#ifdef DLL
+
+/*****************************/
+/* Function UzpMessageNull() */  /* convenience routine for no output at all */
+/*****************************/
+
+int UZ_EXP UzpMessageNull(pG, buf, size, flag)
+    zvoid *pG;    /* globals struct:  always passed */
+    uch *buf;     /* preformatted string to be printed */
+    ulg size;     /* length of string (may include nulls) */
+    int flag;     /* flag bits */
+{
+    return 0;
+
+} /* end function UzpMessageNull() */
+
+#endif /* DLL */
+
+
+
+
+
+/***********************/
+/* Function UzpInput() */   /* GRR:  this is a placeholder for now */
+/***********************/
+
+int UZ_EXP UzpInput(pG, buf, size, flag)
+    zvoid *pG;    /* globals struct:  always passed */
+    uch *buf;     /* preformatted string to be printed */
+    int *size;    /* (address of) size of buf and of returned string */
+    int flag;     /* flag bits (bit 0: no echo) */
+{
+    /* tell picky compilers to shut up about "unused variable" warnings */
+    pG = pG; buf = buf; flag = flag;
+
+    *size = 0;
+    return 0;
+
+} /* end function UzpInput() */
+
+
+
+
+
+#if (!defined(WINDLL) && !defined(MACOS))
+
+/***************************/
+/* Function UzpMorePause() */
+/***************************/
+
+void UZ_EXP UzpMorePause(pG, prompt, flag)
+    zvoid *pG;            /* globals struct:  always passed */
+    ZCONST char *prompt;  /* "--More--" prompt */
+    int flag;             /* 0 = any char OK; 1 = accept only '\n', ' ', q */
+{
+    uch c;
+
+/*---------------------------------------------------------------------------
+    Print a prompt and wait for the user to press a key, then erase prompt
+    if possible.
+  ---------------------------------------------------------------------------*/
+
+    if (!((Uz_Globs *)pG)->sol)
+        fprintf(stderr, "\n");
+    /* numlines may or may not be used: */
+    fprintf(stderr, prompt, ((Uz_Globs *)pG)->numlines);
+    fflush(stderr);
+    if (flag & 1) {
+        do {
+            c = (uch)FGETCH(0);
+        } while (
+#ifdef THEOS
+                 c != 17 &&     /* standard QUIT key */
+#endif
+                 c != '\r' && c != '\n' && c != ' ' && c != 'q' && c != 'Q');
+    } else
+        c = (uch)FGETCH(0);
+
+    /* newline was not echoed, so cover up prompt line */
+    fprintf(stderr, LoadFarString(HidePrompt));
+    fflush(stderr);
+
+    if (
+#ifdef THEOS
+        (c == 17) ||            /* standard QUIT key */
+#endif
+        (ToLower(c) == 'q')) {
+        DESTROYGLOBALS();
+        EXIT(PK_COOL);
+    }
+
+    ((Uz_Globs *)pG)->sol = TRUE;
+
+#ifdef MORE
+    /* space for another screen, enter for another line. */
+    if ((flag & 1) && c == ' ')
+        ((Uz_Globs *)pG)->lines = 0;
+#endif /* MORE */
+
+} /* end function UzpMorePause() */
+
+#endif /* !WINDLL && !MACOS */
+
+
+
+
+#ifndef WINDLL
+
+/**************************/
+/* Function UzpPassword() */
+/**************************/
+
+int UZ_EXP UzpPassword (pG, rcnt, pwbuf, size, zfn, efn)
+    zvoid *pG;         /* pointer to UnZip's internal global vars */
+    int *rcnt;         /* retry counter */
+    char *pwbuf;       /* buffer for password */
+    int size;          /* size of password buffer */
+    ZCONST char *zfn;  /* name of zip archive */
+    ZCONST char *efn;  /* name of archive entry being processed */
+{
+#if CRYPT
+    int r = IZ_PW_ENTERED;
+    char *m;
+    char *prompt;
+    char *ep;
+    char *zp;
+
+#ifndef REENTRANT
+    /* tell picky compilers to shut up about "unused variable" warnings */
+    pG = pG;
+#endif
+
+    if (*rcnt == 0) {           /* First call for current entry */
+        *rcnt = 2;
+        zp = FnFilter1( zfn);
+        ep = FnFilter2( efn);
+        prompt = (char *)malloc(        /* Slightly too long (2* "%s"). */
+         sizeof( PasswPrompt)+ strlen( zp)+ strlen( ep));
+        if (prompt != (char *)NULL) {
+            sprintf(prompt, LoadFarString(PasswPrompt), zp, ep);
+            m = prompt;
+        } else
+            m = (char *)LoadFarString(PasswPrompt2);
+    } else {                    /* Retry call, previous password was wrong */
+        (*rcnt)--;
+        prompt = NULL;
+        m = (char *)LoadFarString(PasswRetry);
+    }
+
+    m = getp(__G__ m, pwbuf, size);
+    if (prompt != (char *)NULL) {
+        free(prompt);
+    }
+    if (m == (char *)NULL) {
+        r = IZ_PW_ERROR;
+    }
+    else if (*pwbuf == '\0') {
+        r = IZ_PW_CANCELALL;
+    }
+    return r;
+
+#else /* !CRYPT */
+    /* tell picky compilers to shut up about "unused variable" warnings */
+    pG = pG; rcnt = rcnt; pwbuf = pwbuf; size = size; zfn = zfn; efn = efn;
+
+    return IZ_PW_ERROR;  /* internal error; function should never get called */
+#endif /* ?CRYPT */
+
+} /* end function UzpPassword() */
+
+
+
+
+
+/**********************/
+/* Function handler() */
+/**********************/
+
+void handler(signal)   /* upon interrupt, turn on echo and exit cleanly */
+    int signal;
+{
+    GETGLOBALS();
+
+#if !(defined(SIGBUS) || defined(SIGSEGV))      /* add a newline if not at */
+    (*G.message)((zvoid *)&G, slide, 0L, 0x41); /*  start of line (to stderr; */
+#endif                                          /*  slide[] should be safe) */
+
+    echon();
+
+#ifdef SIGBUS
+    if (signal == SIGBUS) {
+        Info(slide, 0x421, ((char *)slide, LoadFarString(ZipfileCorrupt),
+          "bus error"));
+        DESTROYGLOBALS();
+        EXIT(PK_BADERR);
+    }
+#endif /* SIGBUS */
+
+#ifdef SIGILL
+    if (signal == SIGILL) {
+        Info(slide, 0x421, ((char *)slide, LoadFarString(ZipfileCorrupt),
+          "illegal instruction"));
+        DESTROYGLOBALS();
+        EXIT(PK_BADERR);
+    }
+#endif /* SIGILL */
+
+#ifdef SIGSEGV
+    if (signal == SIGSEGV) {
+        Info(slide, 0x421, ((char *)slide, LoadFarString(ZipfileCorrupt),
+          "segmentation violation"));
+        DESTROYGLOBALS();
+        EXIT(PK_BADERR);
+    }
+#endif /* SIGSEGV */
+
+    /* probably ctrl-C */
+    DESTROYGLOBALS();
+#if defined(AMIGA) && defined(__SASC)
+    _abort();
+#endif
+    EXIT(IZ_CTRLC);       /* was EXIT(0), then EXIT(PK_ERR) */
+}
+
+#endif /* !WINDLL */
+
+
+
+
+#if (!defined(VMS) && !defined(CMS_MVS))
+#if (!defined(OS2) || defined(TIMESTAMP))
+
+#if (!defined(HAVE_MKTIME) || defined(WIN32))
+/* also used in amiga/filedate.c and win32/win32.c */
+ZCONST ush ydays[] =
+    { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
+#endif
+
+/*******************************/
+/* Function dos_to_unix_time() */ /* used for freshening/updating/timestamps */
+/*******************************/
+
+time_t dos_to_unix_time(dosdatetime)
+    ulg dosdatetime;
+{
+    time_t m_time;
+
+#ifdef HAVE_MKTIME
+
+    ZCONST time_t now = time(NULL);
+    struct tm *tm;
+#   define YRBASE  1900
+
+    tm = localtime(&now);
+    tm->tm_isdst = -1;          /* let mktime determine if DST is in effect */
+
+    /* dissect date */
+    tm->tm_year = ((int)(dosdatetime >> 25) & 0x7f) + (1980 - YRBASE);
+    tm->tm_mon  = ((int)(dosdatetime >> 21) & 0x0f) - 1;
+    tm->tm_mday = ((int)(dosdatetime >> 16) & 0x1f);
+
+    /* dissect time */
+    tm->tm_hour = (int)((unsigned)dosdatetime >> 11) & 0x1f;
+    tm->tm_min  = (int)((unsigned)dosdatetime >> 5) & 0x3f;
+    tm->tm_sec  = (int)((unsigned)dosdatetime << 1) & 0x3e;
+
+    m_time = mktime(tm);
+    NATIVE_TO_TIMET(m_time)     /* NOP unless MSC 7.0 or Macintosh */
+    TTrace((stderr, "  final m_time  =       %lu\n", (ulg)m_time));
+
+#else /* !HAVE_MKTIME */
+
+    int yr, mo, dy, hh, mm, ss;
+#ifdef TOPS20
+#   define YRBASE  1900
+    struct tmx *tmx;
+    char temp[20];
+#else /* !TOPS20 */
+#   define YRBASE  1970
+    int leap;
+    unsigned days;
+    struct tm *tm;
+#if (!defined(MACOS) && !defined(RISCOS) && !defined(QDOS) && !defined(TANDEM))
+#ifdef WIN32
+    TIME_ZONE_INFORMATION tzinfo;
+    DWORD res;
+#else /* ! WIN32 */
+#ifndef BSD4_4   /* GRR:  change to !defined(MODERN) ? */
+#if (defined(BSD) || defined(MTS) || defined(__GO32__))
+    struct timeb tbp;
+#else /* !(BSD || MTS || __GO32__) */
+#ifdef DECLARE_TIMEZONE
+    extern time_t timezone;
+#endif
+#endif /* ?(BSD || MTS || __GO32__) */
+#endif /* !BSD4_4 */
+#endif /* ?WIN32 */
+#endif /* !MACOS && !RISCOS && !QDOS && !TANDEM */
+#endif /* ?TOPS20 */
+
+
+    /* dissect date */
+    yr = ((int)(dosdatetime >> 25) & 0x7f) + (1980 - YRBASE);
+    mo = ((int)(dosdatetime >> 21) & 0x0f) - 1;
+    dy = ((int)(dosdatetime >> 16) & 0x1f) - 1;
+
+    /* dissect time */
+    hh = (int)((unsigned)dosdatetime >> 11) & 0x1f;
+    mm = (int)((unsigned)dosdatetime >> 5) & 0x3f;
+    ss = (int)((unsigned)dosdatetime & 0x1f) * 2;
+
+#ifdef TOPS20
+    tmx = (struct tmx *)malloc(sizeof(struct tmx));
+    sprintf (temp, "%02d/%02d/%02d %02d:%02d:%02d", mo+1, dy+1, yr, hh, mm, ss);
+    time_parse(temp, tmx, (char *)0);
+    m_time = time_make(tmx);
+    free(tmx);
+
+#else /* !TOPS20 */
+
+/*---------------------------------------------------------------------------
+    Calculate the number of seconds since the epoch, usually 1 January 1970.
+  ---------------------------------------------------------------------------*/
+
+    /* leap = # of leap yrs from YRBASE up to but not including current year */
+    leap = ((yr + YRBASE - 1) / 4);   /* leap year base factor */
+
+    /* calculate days from BASE to this year and add expired days this year */
+    days = (yr * 365) + (leap - 492) + ydays[mo];
+
+    /* if year is a leap year and month is after February, add another day */
+    if ((mo > 1) && ((yr+YRBASE)%4 == 0) && ((yr+YRBASE) != 2100))
+        ++days;                 /* OK through 2199 */
+
+    /* convert date & time to seconds relative to 00:00:00, 01/01/YRBASE */
+    m_time = (time_t)((unsigned long)(days + dy) * 86400L +
+                      (unsigned long)hh * 3600L +
+                      (unsigned long)(mm * 60 + ss));
+      /* - 1;   MS-DOS times always rounded up to nearest even second */
+    TTrace((stderr, "dos_to_unix_time:\n"));
+    TTrace((stderr, "  m_time before timezone = %lu\n", (ulg)m_time));
+
+/*---------------------------------------------------------------------------
+    Adjust for local standard timezone offset.
+  ---------------------------------------------------------------------------*/
+
+#if (!defined(MACOS) && !defined(RISCOS) && !defined(QDOS) && !defined(TANDEM))
+#ifdef WIN32
+    /* account for timezone differences */
+    res = GetTimeZoneInformation(&tzinfo);
+    if (res != TIME_ZONE_ID_INVALID)
+    {
+    m_time += 60*(tzinfo.Bias);
+#else /* !WIN32 */
+#if (defined(BSD) || defined(MTS) || defined(__GO32__))
+#ifdef BSD4_4
+    if ( (dosdatetime >= DOSTIME_2038_01_18) &&
+         (m_time < (time_t)0x70000000L) )
+        m_time = U_TIME_T_MAX;  /* saturate in case of (unsigned) overflow */
+    if (m_time < (time_t)0L)    /* a converted DOS time cannot be negative */
+        m_time = S_TIME_T_MAX;  /*  -> saturate at max signed time_t value */
+    if ((tm = localtime(&m_time)) != (struct tm *)NULL)
+        m_time -= tm->tm_gmtoff;                /* sec. EAST of GMT: subtr. */
+#else /* !(BSD4_4 */
+    ftime(&tbp);                                /* get `timezone' */
+    m_time += tbp.timezone * 60L;               /* seconds WEST of GMT:  add */
+#endif /* ?(BSD4_4 || __EMX__) */
+#else /* !(BSD || MTS || __GO32__) */
+    /* tzset was already called at start of process_zipfiles() */
+    /* tzset(); */              /* set `timezone' variable */
+#ifndef __BEOS__                /* BeOS DR8 has no timezones... */
+    m_time += timezone;         /* seconds WEST of GMT:  add */
+#endif
+#endif /* ?(BSD || MTS || __GO32__) */
+#endif /* ?WIN32 */
+    TTrace((stderr, "  m_time after timezone =  %lu\n", (ulg)m_time));
+
+/*---------------------------------------------------------------------------
+    Adjust for local daylight savings (summer) time.
+  ---------------------------------------------------------------------------*/
+
+#ifndef BSD4_4  /* (DST already added to tm_gmtoff, so skip tm_isdst) */
+    if ( (dosdatetime >= DOSTIME_2038_01_18) &&
+         (m_time < (time_t)0x70000000L) )
+        m_time = U_TIME_T_MAX;  /* saturate in case of (unsigned) overflow */
+    if (m_time < (time_t)0L)    /* a converted DOS time cannot be negative */
+        m_time = S_TIME_T_MAX;  /*  -> saturate at max signed time_t value */
+    TIMET_TO_NATIVE(m_time)     /* NOP unless MSC 7.0 or Macintosh */
+    if (((tm = localtime((time_t *)&m_time)) != NULL) && tm->tm_isdst)
+#ifdef WIN32
+        m_time += 60L * tzinfo.DaylightBias;    /* adjust with DST bias */
+    else
+        m_time += 60L * tzinfo.StandardBias;    /* add StdBias (normally 0) */
+#else
+        m_time -= 60L * 60L;    /* adjust for daylight savings time */
+#endif
+    NATIVE_TO_TIMET(m_time)     /* NOP unless MSC 7.0 or Macintosh */
+    TTrace((stderr, "  m_time after DST =       %lu\n", (ulg)m_time));
+#endif /* !BSD4_4 */
+#ifdef WIN32
+    }
+#endif
+#endif /* !MACOS && !RISCOS && !QDOS && !TANDEM */
+#endif /* ?TOPS20 */
+
+#endif /* ?HAVE_MKTIME */
+
+    if ( (dosdatetime >= DOSTIME_2038_01_18) &&
+         (m_time < (time_t)0x70000000L) )
+        m_time = U_TIME_T_MAX;  /* saturate in case of (unsigned) overflow */
+    if (m_time < (time_t)0L)    /* a converted DOS time cannot be negative */
+        m_time = S_TIME_T_MAX;  /*  -> saturate at max signed time_t value */
+
+    return m_time;
+
+} /* end function dos_to_unix_time() */
+
+#endif /* !OS2 || TIMESTAMP */
+#endif /* !VMS && !CMS_MVS */
+
+
+
+#if (!defined(VMS) && !defined(OS2) && !defined(CMS_MVS))
+
+/******************************/
+/* Function check_for_newer() */  /* used for overwriting/freshening/updating */
+/******************************/
+
+int check_for_newer(__G__ filename)  /* return 1 if existing file is newer */
+    __GDEF                           /*  or equal; 0 if older; -1 if doesn't */
+    char *filename;                  /*  exist yet */
+{
+    time_t existing, archive;
+#ifdef USE_EF_UT_TIME
+    iztimes z_utime;
+#endif
+#ifdef AOS_VS
+    long    dyy, dmm, ddd, dhh, dmin, dss;
+
+
+    dyy = (lrec.last_mod_dos_datetime >> 25) + 1980;
+    dmm = (lrec.last_mod_dos_datetime >> 21) & 0x0f;
+    ddd = (lrec.last_mod_dos_datetime >> 16) & 0x1f;
+    dhh = (lrec.last_mod_dos_datetime >> 11) & 0x1f;
+    dmin = (lrec.last_mod_dos_datetime >> 5) & 0x3f;
+    dss = (lrec.last_mod_dos_datetime & 0x1f) * 2;
+
+    /* under AOS/VS, file times can only be set at creation time,
+     * with the info in a special DG format.  Make sure we can create
+     * it here - we delete it later & re-create it, whether or not
+     * it exists now.
+     */
+    if (!zvs_create(filename, (((ulg)dgdate(dmm, ddd, dyy)) << 16) |
+        (dhh*1800L + dmin*30L + dss/2L), -1L, -1L, (char *) -1, -1, -1, -1))
+        return DOES_NOT_EXIST;
+#endif /* AOS_VS */
+
+    Trace((stderr, "check_for_newer:  doing stat(%s)\n", FnFilter1(filename)));
+    if (SSTAT(filename, &G.statbuf)) {
+        Trace((stderr,
+          "check_for_newer:  stat(%s) returns %d:  file does not exist\n",
+          FnFilter1(filename), SSTAT(filename, &G.statbuf)));
+#ifdef SYMLINKS
+        Trace((stderr, "check_for_newer:  doing lstat(%s)\n",
+          FnFilter1(filename)));
+        /* GRR OPTION:  could instead do this test ONLY if G.symlnk is true */
+        if (lstat(filename, &G.statbuf) == 0) {
+            Trace((stderr,
+              "check_for_newer:  lstat(%s) returns 0:  symlink does exist\n",
+              FnFilter1(filename)));
+            if (QCOND2 && !IS_OVERWRT_ALL)
+                Info(slide, 0, ((char *)slide, LoadFarString(FileIsSymLink),
+                  FnFilter1(filename), " with no real file"));
+            return EXISTS_AND_OLDER;   /* symlink dates are meaningless */
+        }
+#endif /* SYMLINKS */
+        return DOES_NOT_EXIST;
+    }
+    Trace((stderr, "check_for_newer:  stat(%s) returns 0:  file exists\n",
+      FnFilter1(filename)));
+
+#ifdef SYMLINKS
+    /* GRR OPTION:  could instead do this test ONLY if G.symlnk is true */
+    if (lstat(filename, &G.statbuf) == 0 && S_ISLNK(G.statbuf.st_mode)) {
+        Trace((stderr, "check_for_newer:  %s is a symbolic link\n",
+          FnFilter1(filename)));
+        if (QCOND2 && !IS_OVERWRT_ALL)
+            Info(slide, 0, ((char *)slide, LoadFarString(FileIsSymLink),
+              FnFilter1(filename), ""));
+        return EXISTS_AND_OLDER;   /* symlink dates are meaningless */
+    }
+#endif /* SYMLINKS */
+
+    NATIVE_TO_TIMET(G.statbuf.st_mtime)   /* NOP unless MSC 7.0 or Macintosh */
+
+#ifdef USE_EF_UT_TIME
+    /* The `Unix extra field mtime' should be used for comparison with the
+     * time stamp of the existing file >>>ONLY<<< when the EF info is also
+     * used to set the modification time of the extracted file.
+     */
+    if (G.extra_field &&
+#ifdef IZ_CHECK_TZ
+        G.tz_is_valid &&
+#endif
+        (ef_scan_for_izux(G.extra_field, G.lrec.extra_field_length, 0,
+                          G.lrec.last_mod_dos_datetime, &z_utime, NULL)
+         & EB_UT_FL_MTIME))
+    {
+        TTrace((stderr, "check_for_newer:  using Unix extra field mtime\n"));
+        existing = G.statbuf.st_mtime;
+        archive  = z_utime.mtime;
+    } else {
+        /* round up existing filetime to nearest 2 seconds for comparison,
+         * but saturate in case of arithmetic overflow
+         */
+        existing = ((G.statbuf.st_mtime & 1) &&
+                    (G.statbuf.st_mtime + 1 > G.statbuf.st_mtime)) ?
+                   G.statbuf.st_mtime + 1 : G.statbuf.st_mtime;
+        archive  = dos_to_unix_time(G.lrec.last_mod_dos_datetime);
+    }
+#else /* !USE_EF_UT_TIME */
+    /* round up existing filetime to nearest 2 seconds for comparison,
+     * but saturate in case of arithmetic overflow
+     */
+    existing = ((G.statbuf.st_mtime & 1) &&
+                (G.statbuf.st_mtime + 1 > G.statbuf.st_mtime)) ?
+               G.statbuf.st_mtime + 1 : G.statbuf.st_mtime;
+    archive  = dos_to_unix_time(G.lrec.last_mod_dos_datetime);
+#endif /* ?USE_EF_UT_TIME */
+
+    TTrace((stderr, "check_for_newer:  existing %lu, archive %lu, e-a %ld\n",
+      (ulg)existing, (ulg)archive, (long)(existing-archive)));
+
+    return (existing >= archive);
+
+} /* end function check_for_newer() */
+
+#endif /* !VMS && !OS2 && !CMS_MVS */
+
+
+
+
+
+/************************/
+/* Function do_string() */
+/************************/
+
+int do_string(__G__ length, option)   /* return PK-type error code */
+    __GDEF
+    unsigned int length;        /* without prototype, ush converted to this */
+    int option;
+{
+    unsigned comment_bytes_left;
+    unsigned int block_len;
+    int error=PK_OK;
+    unsigned int length2;
+#ifdef AMIGA
+    char tmp_fnote[2 * AMIGA_FILENOTELEN];   /* extra room for squozen chars */
+#endif
+
+
+/*---------------------------------------------------------------------------
+    This function processes arbitrary-length (well, usually) strings.  Four
+    major options are allowed:  SKIP, wherein the string is skipped (pretty
+    logical, eh?); DISPLAY, wherein the string is printed to standard output
+    after undergoing any necessary or unnecessary character conversions;
+    DS_FN, wherein the string is put into the filename[] array after under-
+    going appropriate conversions (including case-conversion, if that is
+    indicated: see the global variable pInfo->lcflag); and EXTRA_FIELD,
+    wherein the `string' is assumed to be an extra field and is copied to
+    the (freshly malloced) buffer G.extra_field.  The third option should
+    be OK since filename is dimensioned at 1025, but we check anyway.
+
+    The string, by the way, is assumed to start at the current file-pointer
+    position; its length is given by 'length'.  So start off by checking the
+    length of the string:  if zero, we're already done.
+  ---------------------------------------------------------------------------*/
+
+    if (!length)
+        return PK_COOL;
+
+    switch (option) {
+
+#if (defined(SFX) && defined(CHEAP_SFX_AUTORUN))
+    /*
+     * Special case: See if the comment begins with an autorun command line.
+     * Save that and display (or skip) the remainder.
+     */
+
+    case CHECK_AUTORUN:
+    case CHECK_AUTORUN_Q:
+        comment_bytes_left = length;
+        if (length >= 10)
+        {
+            block_len = readbuf(__G__ (char *)G.outbuf, 10);
+            if (block_len == 0)
+                return PK_EOF;
+            comment_bytes_left -= block_len;
+            G.outbuf[block_len] = '\0';
+            if (!strcmp((char *)G.outbuf, "$AUTORUN$>")) {
+                char *eol;
+                length -= 10;
+                block_len = readbuf(__G__ G.autorun_command,
+                                    MIN(length, sizeof(G.autorun_command)-1));
+                if (block_len == 0)
+                    return PK_EOF;
+                comment_bytes_left -= block_len;
+                G.autorun_command[block_len] = '\0';
+                A_TO_N(G.autorun_command);
+                eol = strchr(G.autorun_command, '\n');
+                if (!eol)
+                    eol = G.autorun_command + strlen(G.autorun_command) - 1;
+                length -= eol + 1 - G.autorun_command;
+                while (eol >= G.autorun_command && isspace(*eol))
+                    *eol-- = '\0';
+#if (defined(WIN32) && !defined(_WIN32_WCE))
+                /* Win9x console always uses OEM character coding, and
+                   WinNT console is set to OEM charset by default, too */
+                INTERN_TO_OEM(G.autorun_command, G.autorun_command);
+#endif /* (WIN32 && !_WIN32_WCE) */
+            }
+        }
+        if (option == CHECK_AUTORUN_Q)  /* don't display the remainder */
+            length = 0;
+        /* seek to beginning of remaining part of comment -- rewind if */
+        /* displaying entire comment, or skip to end if discarding it  */
+        seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes +
+                  (G.inptr - G.inbuf) + comment_bytes_left - length);
+        if (!length)
+            break;
+        /*  FALL THROUGH...  */
+#endif /* SFX && CHEAP_SFX_AUTORUN */
+
+    /*
+     * First normal case:  print string on standard output.  First set loop
+     * variables, then loop through the comment in chunks of OUTBUFSIZ bytes,
+     * converting formats and printing as we go.  The second half of the
+     * loop conditional was added because the file might be truncated, in
+     * which case comment_bytes_left will remain at some non-zero value for
+     * all time.  outbuf and slide are used as scratch buffers because they
+     * are available (we should be either before or in between any file pro-
+     * cessing).
+     */
+
+    case DISPLAY:
+    case DISPL_8:
+        comment_bytes_left = length;
+        block_len = OUTBUFSIZ;       /* for the while statement, first time */
+        while (comment_bytes_left > 0 && block_len > 0) {
+            register uch *p = G.outbuf;
+            register uch *q = G.outbuf;
+
+            if ((block_len = readbuf(__G__ (char *)G.outbuf,
+                   MIN((unsigned)OUTBUFSIZ, comment_bytes_left))) == 0)
+                return PK_EOF;
+            comment_bytes_left -= block_len;
+
+            /* this is why we allocated an extra byte for outbuf:  terminate
+             *  with zero (ASCIIZ) */
+            G.outbuf[block_len] = '\0';
+
+            /* remove all ASCII carriage returns from comment before printing
+             * (since used before A_TO_N(), check for CR instead of '\r')
+             */
+            while (*p) {
+                while (*p == CR)
+                    ++p;
+                *q++ = *p++;
+            }
+            /* could check whether (p - outbuf) == block_len here */
+            *q = '\0';
+
+            if (option == DISPL_8) {
+                /* translate the text coded in the entry's host-dependent
+                   "extended ASCII" charset into the compiler's (system's)
+                   internal text code page */
+                Ext_ASCII_TO_Native((char *)G.outbuf, G.pInfo->hostnum,
+                                    G.pInfo->hostver, G.pInfo->HasUxAtt,
+                                    FALSE);
+#ifdef WINDLL
+                /* translate to ANSI (RTL internal codepage may be OEM) */
+                INTERN_TO_ISO((char *)G.outbuf, (char *)G.outbuf);
+#else /* !WINDLL */
+#if (defined(WIN32) && !defined(_WIN32_WCE))
+                /* Win9x console always uses OEM character coding, and
+                   WinNT console is set to OEM charset by default, too */
+                INTERN_TO_OEM((char *)G.outbuf, (char *)G.outbuf);
+#endif /* (WIN32 && !_WIN32_WCE) */
+#endif /* ?WINDLL */
+            } else {
+                A_TO_N(G.outbuf);   /* translate string to native */
+            }
+
+#ifdef WINDLL
+            /* ran out of local mem -- had to cheat */
+            win_fprintf((zvoid *)&G, stdout, (extent)(q-G.outbuf),
+                        (char *)G.outbuf);
+            win_fprintf((zvoid *)&G, stdout, 2, (char *)"\n\n");
+#else /* !WINDLL */
+#ifdef NOANSIFILT       /* GRR:  can ANSI be used with EBCDIC? */
+            (*G.message)((zvoid *)&G, G.outbuf, (ulg)(q-G.outbuf), 0);
+#else /* ASCII, filter out ANSI escape sequences and handle ^S (pause) */
+            p = G.outbuf - 1;
+            q = slide;
+            while (*++p) {
+                int pause = FALSE;
+
+                if (*p == 0x1B) {          /* ASCII escape char */
+                    *q++ = '^';
+                    *q++ = '[';
+                } else if (*p == 0x13) {   /* ASCII ^S (pause) */
+                    pause = TRUE;
+                    if (p[1] == LF)        /* ASCII LF */
+                        *q++ = *++p;
+                    else if (p[1] == CR && p[2] == LF) {  /* ASCII CR LF */
+                        *q++ = *++p;
+                        *q++ = *++p;
+                    }
+                } else
+                    *q++ = *p;
+                if ((unsigned)(q-slide) > WSIZE-3 || pause) {   /* flush */
+                    (*G.message)((zvoid *)&G, slide, (ulg)(q-slide), 0);
+                    q = slide;
+                    if (pause && G.extract_flag) /* don't pause for list/test */
+                        (*G.mpause)((zvoid *)&G, LoadFarString(QuitPrompt), 0);
+                }
+            }
+            (*G.message)((zvoid *)&G, slide, (ulg)(q-slide), 0);
+#endif /* ?NOANSIFILT */
+#endif /* ?WINDLL */
+        }
+        /* add '\n' if not at start of line */
+        (*G.message)((zvoid *)&G, slide, 0L, 0x40);
+        break;
+
+    /*
+     * Second case:  read string into filename[] array.  The filename should
+     * never ever be longer than FILNAMSIZ-1 (1024), but for now we'll check,
+     * just to be sure.
+     */
+
+    case DS_FN:
+    case DS_FN_L:
+#ifdef UNICODE_SUPPORT
+        /* get the whole filename as need it for Unicode checksum */
+        if (G.fnfull_bufsize <= length) {
+            extent fnbufsiz = FILNAMSIZ;
+
+            if (fnbufsiz <= length)
+                fnbufsiz = length + 1;
+            if (G.filename_full)
+                free(G.filename_full);
+            G.filename_full = malloc(fnbufsiz);
+            if (G.filename_full == NULL)
+                return PK_MEM;
+            G.fnfull_bufsize = fnbufsiz;
+        }
+        if (readbuf(__G__ G.filename_full, length) == 0)
+            return PK_EOF;
+        G.filename_full[length] = '\0';      /* terminate w/zero:  ASCIIZ */
+
+        /* if needed, chop off end so standard filename is a valid length */
+        if (length >= FILNAMSIZ) {
+            Info(slide, 0x401, ((char *)slide,
+              LoadFarString(FilenameTooLongTrunc)));
+            error = PK_WARN;
+            length = FILNAMSIZ - 1;
+        }
+        /* no excess size */
+        block_len = 0;
+        strncpy(G.filename, G.filename_full, length);
+        G.filename[length] = '\0';      /* terminate w/zero:  ASCIIZ */
+#else /* !UNICODE_SUPPORT */
+        if (length >= FILNAMSIZ) {
+            Info(slide, 0x401, ((char *)slide,
+              LoadFarString(FilenameTooLongTrunc)));
+            error = PK_WARN;
+            /* remember excess length in block_len */
+            block_len = length - (FILNAMSIZ - 1);
+            length = FILNAMSIZ - 1;
+        } else
+            /* no excess size */
+            block_len = 0;
+        if (readbuf(__G__ G.filename, length) == 0)
+            return PK_EOF;
+        G.filename[length] = '\0';      /* terminate w/zero:  ASCIIZ */
+#endif /* ?UNICODE_SUPPORT */
+
+        /* translate the Zip entry filename coded in host-dependent "extended
+           ASCII" into the compiler's (system's) internal text code page */
+        Ext_ASCII_TO_Native(G.filename, G.pInfo->hostnum, G.pInfo->hostver,
+                            G.pInfo->HasUxAtt, (option == DS_FN_L));
+
+        if (G.pInfo->lcflag)      /* replace with lowercase filename */
+            STRLOWER(G.filename, G.filename);
+
+        if (G.pInfo->vollabel && length > 8 && G.filename[8] == '.') {
+            char *p = G.filename+8;
+            while (*p++)
+                p[-1] = *p;  /* disk label, and 8th char is dot:  remove dot */
+        }
+
+        if (!block_len)         /* no overflow, we're done here */
+            break;
+
+        /*
+         * We truncated the filename, so print what's left and then fall
+         * through to the SKIP routine.
+         */
+        Info(slide, 0x401, ((char *)slide, "[ %s ]\n", FnFilter1(G.filename)));
+        length = block_len;     /* SKIP the excess bytes... */
+        /*  FALL THROUGH...  */
+
+    /*
+     * Third case:  skip string, adjusting readbuf's internal variables
+     * as necessary (and possibly skipping to and reading a new block of
+     * data).
+     */
+
+    case SKIP:
+        /* cur_zipfile_bufstart already takes account of extra_bytes, so don't
+         * correct for it twice: */
+        seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes +
+                  (G.inptr-G.inbuf) + length);
+        break;
+
+    /*
+     * Fourth case:  assume we're at the start of an "extra field"; malloc
+     * storage for it and read data into the allocated space.
+     */
+
+    case EXTRA_FIELD:
+        if (G.extra_field != (uch *)NULL)
+            free(G.extra_field);
+        if ((G.extra_field = (uch *)malloc(length)) == (uch *)NULL) {
+            Info(slide, 0x401, ((char *)slide, LoadFarString(ExtraFieldTooLong),
+              length));
+            /* cur_zipfile_bufstart already takes account of extra_bytes,
+             * so don't correct for it twice: */
+            seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes +
+                      (G.inptr-G.inbuf) + length);
+        } else {
+            if ((length2 = readbuf(__G__ (char *)G.extra_field, length)) == 0)
+                return PK_EOF;
+            if(length2 < length) {
+              memset (__G__ (char *)G.extra_field+length2, 0 , length-length2);
+              length = length2;
+            }
+            /* Looks like here is where extra fields are read */
+            if (getZip64Data(__G__ G.extra_field, length) != PK_COOL)
+            {
+                Info(slide, 0x401, ((char *)slide,
+                 LoadFarString( ExtraFieldCorrupt), EF_PKSZ64));
+                error = PK_WARN;
+            }
+
+#ifdef UNICODE_SUPPORT
+            G.unipath_filename = NULL;
+            if (G.UzO.U_flag < 2) {
+              /* check if GPB11 (General Purpuse Bit 11) is set indicating
+                 the standard path and comment are UTF-8 */
+              if (G.pInfo->GPFIsUTF8) {
+                /* if GPB11 set then filename_full is untruncated UTF-8 */
+                G.unipath_filename = G.filename_full;
+              } else {
+                /* Get the Unicode fields if exist */
+                getUnicodeData(__G__ G.extra_field, length);
+                if (G.unipath_filename && strlen(G.unipath_filename) == 0) {
+                  /* the standard filename field is UTF-8 */
+                  free(G.unipath_filename);
+                  G.unipath_filename = G.filename_full;
+                }
+              }
+              if (G.unipath_filename) {
+# ifdef UTF8_MAYBE_NATIVE
+                if (G.native_is_utf8
+#  ifdef UNICODE_WCHAR
+                    && (!G.unicode_escape_all)
+#  endif
+                   ) {
+                  strncpy(G.filename, G.unipath_filename, FILNAMSIZ - 1);
+                  /* make sure filename is short enough */
+                  if (strlen(G.unipath_filename) >= FILNAMSIZ) {
+                    G.filename[FILNAMSIZ - 1] = '\0';
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarString(UFilenameTooLongTrunc)));
+                    error = PK_WARN;
+                  }
+                }
+#  ifdef UNICODE_WCHAR
+                else
+#  endif
+# endif /* UTF8_MAYBE_NATIVE */
+# ifdef UNICODE_WCHAR
+                {
+                  char *fn;
+
+                  /* convert UTF-8 to local character set */
+                  fn = utf8_to_local_string(G.unipath_filename,
+                                            G.unicode_escape_all);
+
+                  /* 2022-07-22 SMS, et al.  CVE-2022-0530
+                   * Detect conversion failure, emit message.
+                   * Continue with unconverted name.
+                   */
+                  if (fn == NULL)
+                  {
+                    Info(slide, 0x401, ((char *)slide,
+                     LoadFarString(UFilenameCorrupt)));
+                    error = PK_ERR;
+                  }
+                  else
+                  {
+                    /* make sure filename is short enough */
+                    if (strlen(fn) >= FILNAMSIZ) {
+                      fn[FILNAMSIZ - 1] = '\0';
+                      Info(slide, 0x401, ((char *)slide,
+                        LoadFarString(UFilenameTooLongTrunc)));
+                      error = PK_WARN;
+                    }
+                    /* replace filename with converted UTF-8 */
+                    strcpy(G.filename, fn);
+                    free(fn);
+                  }
+                }
+# endif /* UNICODE_WCHAR */
+                if (G.unipath_filename != G.filename_full)
+                  free(G.unipath_filename);
+                G.unipath_filename = NULL;
+              }
+            }
+#endif /* UNICODE_SUPPORT */
+        }
+        break;
+
+#ifdef AMIGA
+    /*
+     * Fifth case, for the Amiga only:  take the comment that would ordinarily
+     * be skipped over, and turn it into a 79 character string that will be
+     * attached to the file as a "filenote" after it is extracted.
+     */
+
+    case FILENOTE:
+        if ((block_len = readbuf(__G__ tmp_fnote, (unsigned)
+                                 MIN(length, 2 * AMIGA_FILENOTELEN - 1))) == 0)
+            return PK_EOF;
+        if ((length -= block_len) > 0)  /* treat remainder as in case SKIP: */
+            seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes
+                      + (G.inptr - G.inbuf) + length);
+        /* convert multi-line text into single line with no ctl-chars: */
+        tmp_fnote[block_len] = '\0';
+        while ((short int) --block_len >= 0)
+            if ((unsigned) tmp_fnote[block_len] < ' ')
+                if (tmp_fnote[block_len+1] == ' ')     /* no excess */
+                    strcpy(tmp_fnote+block_len, tmp_fnote+block_len+1);
+                else
+                    tmp_fnote[block_len] = ' ';
+        tmp_fnote[AMIGA_FILENOTELEN - 1] = '\0';
+        if (G.filenotes[G.filenote_slot])
+            free(G.filenotes[G.filenote_slot]);     /* should not happen */
+        G.filenotes[G.filenote_slot] = NULL;
+        if (tmp_fnote[0]) {
+            if (!(G.filenotes[G.filenote_slot] = malloc(strlen(tmp_fnote)+1)))
+                return PK_MEM;
+            strcpy(G.filenotes[G.filenote_slot], tmp_fnote);
+        }
+        break;
+#endif /* AMIGA */
+
+    } /* end switch (option) */
+
+    return error;
+
+} /* end function do_string() */
+
+
+
+
+
+/***********************/
+/* Function makeword() */
+/***********************/
+
+ush makeword(b)
+    ZCONST uch *b;
+{
+    /*
+     * Convert Intel style 'short' integer to non-Intel non-16-bit
+     * host format.  This routine also takes care of byte-ordering.
+     */
+    return (ush)((b[1] << 8) | b[0]);
+}
+
+
+
+
+
+/***********************/
+/* Function makelong() */
+/***********************/
+
+ulg makelong(sig)
+    ZCONST uch *sig;
+{
+    /*
+     * Convert intel style 'long' variable to non-Intel non-16-bit
+     * host format.  This routine also takes care of byte-ordering.
+     */
+    return (((ulg)sig[3]) << 24)
+         + (((ulg)sig[2]) << 16)
+         + (ulg)((((unsigned)sig[1]) << 8)
+               + ((unsigned)sig[0]));
+}
+
+
+
+
+
+/************************/
+/* Function makeint64() */
+/************************/
+
+zusz_t makeint64(sig)
+    ZCONST uch *sig;
+{
+#ifdef LARGE_FILE_SUPPORT
+    /*
+     * Convert intel style 'int64' variable to non-Intel non-16-bit
+     * host format.  This routine also takes care of byte-ordering.
+     */
+    return (((zusz_t)sig[7]) << 56)
+        + (((zusz_t)sig[6]) << 48)
+        + (((zusz_t)sig[4]) << 32)
+        + (zusz_t)((((ulg)sig[3]) << 24)
+                 + (((ulg)sig[2]) << 16)
+                 + (((unsigned)sig[1]) << 8)
+                 + (sig[0]));
+
+#else /* !LARGE_FILE_SUPPORT */
+
+    if ((sig[7] | sig[6] | sig[5] | sig[4]) != 0)
+        return (zusz_t)0xffffffffL;
+    else
+        return (zusz_t)((((ulg)sig[3]) << 24)
+                      + (((ulg)sig[2]) << 16)
+                      + (((unsigned)sig[1]) << 8)
+                      + (sig[0]));
+
+#endif /* ?LARGE_FILE_SUPPORT */
+}
+
+
+
+
+
+/*********************/
+/* Function fzofft() */
+/*********************/
+
+/* Format a zoff_t value in a cylindrical buffer set. */
+char *fzofft(__G__ val, pre, post)
+    __GDEF
+    zoff_t val;
+    ZCONST char *pre;
+    ZCONST char *post;
+{
+    /* Storage cylinder. (now in globals.h) */
+    /*static char fzofft_buf[FZOFFT_NUM][FZOFFT_LEN];*/
+    /*static int fzofft_index = 0;*/
+
+    /* Temporary format string storage. */
+    char fmt[16];
+
+    /* Assemble the format string. */
+    fmt[0] = '%';
+    fmt[1] = '\0';             /* Start after initial "%". */
+    if (pre == FZOFFT_HEX_WID)  /* Special hex width. */
+    {
+        strcat(fmt, FZOFFT_HEX_WID_VALUE);
+    }
+    else if (pre == FZOFFT_HEX_DOT_WID) /* Special hex ".width". */
+    {
+        strcat(fmt, ".");
+        strcat(fmt, FZOFFT_HEX_WID_VALUE);
+    }
+    else if (pre != NULL)       /* Caller's prefix (width). */
+    {
+        strcat(fmt, pre);
+    }
+
+    strcat(fmt, FZOFFT_FMT);   /* Long or long-long or whatever. */
+
+    if (post == NULL)
+        strcat(fmt, "d");      /* Default radix = decimal. */
+    else
+        strcat(fmt, post);     /* Caller's radix. */
+
+    /* Advance the cylinder. */
+    G.fzofft_index = (G.fzofft_index + 1) % FZOFFT_NUM;
+
+    /* Write into the current chamber. */
+    sprintf(G.fzofft_buf[G.fzofft_index], fmt, val);
+
+    /* Return a pointer to this chamber. */
+    return G.fzofft_buf[G.fzofft_index];
+}
+
+
+
+
+#if CRYPT
+
+#ifdef NEED_STR2ISO
+/**********************/
+/* Function str2iso() */
+/**********************/
+
+char *str2iso(dst, src)
+    char *dst;                          /* destination buffer */
+    register ZCONST char *src;          /* source string */
+{
+#ifdef INTERN_TO_ISO
+    INTERN_TO_ISO(src, dst);
+#else
+    register uch c;
+    register char *dstp = dst;
+
+    do {
+        c = (uch)foreign(*src++);
+        *dstp++ = (char)ASCII2ISO(c);
+    } while (c != '\0');
+#endif
+
+    return dst;
+}
+#endif /* NEED_STR2ISO */
+
+
+#ifdef NEED_STR2OEM
+/**********************/
+/* Function str2oem() */
+/**********************/
+
+char *str2oem(dst, src)
+    char *dst;                          /* destination buffer */
+    register ZCONST char *src;          /* source string */
+{
+#ifdef INTERN_TO_OEM
+    INTERN_TO_OEM(src, dst);
+#else
+    register uch c;
+    register char *dstp = dst;
+
+    do {
+        c = (uch)foreign(*src++);
+        *dstp++ = (char)ASCII2OEM(c);
+    } while (c != '\0');
+#endif
+
+    return dst;
+}
+#endif /* NEED_STR2OEM */
+
+#endif /* CRYPT */
+
+
+#ifdef ZMEM  /* memset/memcmp/memcpy for systems without either them or */
+             /* bzero/bcmp/bcopy */
+             /* (no known systems as of 960211) */
+
+/*********************/
+/* Function memset() */
+/*********************/
+
+zvoid *memset(buf, init, len)
+    register zvoid *buf;        /* buffer location */
+    register int init;          /* initializer character */
+    register unsigned int len;  /* length of the buffer */
+{
+    zvoid *start;
+
+    start = buf;
+    while (len--)
+        *((char *)buf++) = (char)init;
+    return start;
+}
+
+
+
+/*********************/
+/* Function memcmp() */
+/*********************/
+
+int memcmp(b1, b2, len)
+    register ZCONST zvoid *b1;
+    register ZCONST zvoid *b2;
+    register unsigned int len;
+{
+    register int c;
+
+    if (len > 0) do {
+        if ((c = (int)(*((ZCONST unsigned char *)b1)++) -
+                 (int)(*((ZCONST unsigned char *)b2)++)) != 0)
+           return c;
+    } while (--len > 0)
+    return 0;
+}
+
+
+
+/*********************/
+/* Function memcpy() */
+/*********************/
+
+zvoid *memcpy(dst, src, len)
+    register zvoid *dst;
+    register ZCONST zvoid *src;
+    register unsigned int len;
+{
+    zvoid *start;
+
+    start = dst;
+    while (len-- > 0)
+        *((char *)dst)++ = *((ZCONST char *)src)++;
+    return start;
+}
+
+#endif /* ZMEM */
+
+
+
+
+#ifdef NO_STRNICMP
+
+/************************/
+/* Function zstrnicmp() */
+/************************/
+
+int zstrnicmp(s1, s2, n)
+    register ZCONST char *s1, *s2;
+    register unsigned n;
+{
+    for (; n > 0;  --n, ++s1, ++s2) {
+
+        if (ToLower(*s1) != ToLower(*s2))
+            /* test includes early termination of one string */
+            return ((uch)ToLower(*s1) < (uch)ToLower(*s2))? -1 : 1;
+
+        if (*s1 == '\0')   /* both strings terminate early */
+            return 0;
+    }
+    return 0;
+}
+
+#endif /* NO_STRNICMP */
+
+
+
+
+#ifdef REGULUS  /* returns the inode number on success(!)...argh argh argh */
+#  undef stat
+
+/********************/
+/* Function zstat() */
+/********************/
+
+int zstat(p, s)
+    ZCONST char *p;
+    struct stat *s;
+{
+    return (stat((char *)p,s) >= 0? 0 : (-1));
+}
+
+#endif /* REGULUS */
+
+
+
+
+#ifdef _MBCS
+
+/* DBCS support for Info-ZIP's zip  (mainly for japanese (-: )
+ * by Yoshioka Tsuneo (QWF00133@nifty.ne.jp,tsuneo-y@is.aist-nara.ac.jp)
+ * This code is public domain!   Date: 1998/12/20
+ */
+
+/************************/
+/* Function plastchar() */
+/************************/
+
+char *plastchar(ptr, len)
+    ZCONST char *ptr;
+    extent len;
+{
+    unsigned clen;
+    ZCONST char *oldptr = ptr;
+    while(*ptr != '\0' && len > 0){
+        oldptr = ptr;
+        clen = CLEN(ptr);
+        ptr += clen;
+        len -= clen;
+    }
+    return (char *)oldptr;
+}
+
+
+#ifdef NEED_UZMBCLEN
+/***********************/
+/* Function uzmbclen() */
+/***********************/
+
+extent uzmbclen(ptr)
+    ZCONST unsigned char *ptr;
+{
+    int mbl;
+
+    mbl = mblen((ZCONST char *)ptr, MB_CUR_MAX);
+    /* For use in code scanning through MBCS strings, we need a strictly
+       positive "MB char bytes count".  For our scanning purpose, it is not
+       not relevant whether the MB character is valid or not. And, the NUL
+       char '\0' has a byte count of 1, but mblen() returns 0. So, we make
+       sure that the uzmbclen() return value is not less than 1.
+     */
+    return (extent)(mbl > 0 ? mbl : 1);
+}
+#endif /* NEED_UZMBCLEN */
+
+
+#ifdef NEED_UZMBSCHR
+/***********************/
+/* Function uzmbschr() */
+/***********************/
+
+unsigned char *uzmbschr(str, c)
+    ZCONST unsigned char *str;
+    unsigned int c;
+{
+    while(*str != '\0'){
+        if (*str == c) {return (unsigned char *)str;}
+        INCSTR(str);
+    }
+    return NULL;
+}
+#endif /* NEED_UZMBSCHR */
+
+
+#ifdef NEED_UZMBSRCHR
+/************************/
+/* Function uzmbsrchr() */
+/************************/
+
+unsigned char *uzmbsrchr(str, c)
+    ZCONST unsigned char *str;
+    unsigned int c;
+{
+    unsigned char *match = NULL;
+    while(*str != '\0'){
+        if (*str == c) {match = (unsigned char *)str;}
+        INCSTR(str);
+    }
+    return match;
+}
+#endif /* NEED_UZMBSRCHR */
+#endif /* _MBCS */
+
+
+
+
+
+#ifdef SMALL_MEM
+
+/*******************************/
+/*  Function fLoadFarString()  */   /* (and friends...) */
+/*******************************/
+
+char *fLoadFarString(__GPRO__ const char Far *sz)
+{
+    (void)zfstrcpy(G.rgchBigBuffer, sz);
+    return G.rgchBigBuffer;
+}
+
+char *fLoadFarStringSmall(__GPRO__ const char Far *sz)
+{
+    (void)zfstrcpy(G.rgchSmallBuffer, sz);
+    return G.rgchSmallBuffer;
+}
+
+char *fLoadFarStringSmall2(__GPRO__ const char Far *sz)
+{
+    (void)zfstrcpy(G.rgchSmallBuffer2, sz);
+    return G.rgchSmallBuffer2;
+}
+
+
+
+
+#if (!defined(_MSC_VER) || (_MSC_VER < 600))
+/*************************/
+/*  Function zfstrcpy()  */   /* portable clone of _fstrcpy() */
+/*************************/
+
+char Far * Far zfstrcpy(char Far *s1, const char Far *s2)
+{
+    char Far *p = s1;
+
+    while ((*s1++ = *s2++) != '\0');
+    return p;
+}
+
+#if (!(defined(SFX) || defined(FUNZIP)))
+/*************************/
+/*  Function zfstrcmp()  */   /* portable clone of _fstrcmp() */
+/*************************/
+
+int Far zfstrcmp(const char Far *s1, const char Far *s2)
+{
+    int ret;
+
+    while ((ret = (int)(uch)*s1 - (int)(uch)*s2) == 0
+           && *s2 != '\0') {
+        ++s2; ++s1;
+    }
+    return ret;
+}
+#endif /* !(SFX || FUNZIP) */
+#endif /* !_MSC_VER || (_MSC_VER < 600) */
+
+#endif /* SMALL_MEM */
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/list.c
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/list.c	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/list.c	(revision 5)
@@ -0,0 +1,746 @@
+/*
+  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2009-Jan-02 or later
+  (the contents of which are also included in unzip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*---------------------------------------------------------------------------
+
+  list.c
+
+  This file contains the non-ZipInfo-specific listing routines for UnZip.
+
+  Contains:  list_files()
+             get_time_stamp()   [optional feature]
+             ratio()
+             fnprint()
+
+  ---------------------------------------------------------------------------*/
+
+
+#define UNZIP_INTERNAL
+#include "unzip.h"
+#ifdef WINDLL
+#  ifdef POCKET_UNZIP
+#    include "wince/intrface.h"
+#  else
+#    include "windll/windll.h"
+#  endif
+#endif
+
+
+#ifdef TIMESTAMP
+   static int  fn_is_dir   OF((__GPRO));
+#endif
+
+#ifndef WINDLL
+   static ZCONST char Far CompFactorStr[] = "%c%d%%";
+   static ZCONST char Far CompFactor100[] = "100%%";
+
+#ifdef OS2_EAS
+   static ZCONST char Far HeadersS[]  =
+     "  Length     EAs   ACLs     Date    Time    Name";
+   static ZCONST char Far HeadersS1[] =
+     "---------    ---   ----  ---------- -----   ----";
+#else
+   static ZCONST char Far HeadersS[]  =
+     "  Length      Date    Time    Name";
+   static ZCONST char Far HeadersS1[] =
+     "---------  ---------- -----   ----";
+#endif
+
+   static ZCONST char Far HeadersL[]  =
+     " Length   Method    Size  Cmpr    Date    Time   CRC-32   Name";
+   static ZCONST char Far HeadersL1[] =
+     "--------  ------  ------- ---- ---------- ----- --------  ----";
+   static ZCONST char Far *Headers[][2] =
+     { {HeadersS, HeadersS1}, {HeadersL, HeadersL1} };
+
+   static ZCONST char Far CaseConversion[] =
+     "%s (\"^\" ==> case\n%s   conversion)\n";
+   static ZCONST char Far LongHdrStats[] =
+     "%s  %-7s%s %4s %02u%c%02u%c%02u %02u:%02u %08lx %c";
+   static ZCONST char Far LongFileTrailer[] =
+     "--------          -------  ---                       \
+     -------\n%s         %s %4s                            %lu file%s\n";
+#ifdef OS2_EAS
+   static ZCONST char Far ShortHdrStats[] =
+     "%s %6lu %6lu  %02u%c%02u%c%02u %02u:%02u  %c";
+   static ZCONST char Far ShortFileTrailer[] =
+     "---------  -----  -----                \
+     -------\n%s %6lu %6lu                     %lu file%s\n";
+   static ZCONST char Far OS2ExtAttrTrailer[] =
+     "%lu file%s %lu bytes of OS/2 extended attributes attached.\n";
+   static ZCONST char Far OS2ACLTrailer[] =
+     "%lu file%s %lu bytes of access control lists attached.\n";
+#else
+   static ZCONST char Far ShortHdrStats[] =
+     "%s  %02u%c%02u%c%02u %02u:%02u  %c";
+   static ZCONST char Far ShortFileTrailer[] =
+     "---------                     -------\n%s\
+                     %lu file%s\n";
+#endif /* ?OS2_EAS */
+#endif /* !WINDLL */
+
+
+
+
+
+/*************************/
+/* Function list_files() */
+/*************************/
+
+int list_files(__G)    /* return PK-type error code */
+    __GDEF
+{
+    int do_this_file=FALSE, cfactor, error, error_in_archive=PK_COOL;
+#ifndef WINDLL
+    char sgn, cfactorstr[1+10+1+1];	/* <sgn><int>%NUL */
+    int longhdr=(uO.vflag>1);
+#endif
+    int date_format;
+    char dt_sepchar;
+    ulg members=0L;
+    zusz_t j;
+    unsigned methnum;
+#ifdef USE_EF_UT_TIME
+    iztimes z_utime;
+    struct tm *t;
+#endif
+    unsigned yr, mo, dy, hh, mm;
+    zusz_t csiz, tot_csize=0L, tot_ucsize=0L;
+#ifdef OS2_EAS
+    ulg ea_size, tot_easize=0L, tot_eafiles=0L;
+    ulg acl_size, tot_aclsize=0L, tot_aclfiles=0L;
+#endif
+    min_info info;
+    char methbuf[8];
+    static ZCONST char dtype[]="NXFS";  /* see zi_short() */
+    static ZCONST char Far method[NUM_METHODS+1][8] =
+        {"Stored", "Shrunk", "Reduce1", "Reduce2", "Reduce3", "Reduce4",
+         "Implode", "Token", "Defl:#", "Def64#", "ImplDCL", "BZip2",
+         "LZMA", "Terse", "IBMLZ77", "WavPack", "PPMd", "Unk:###"};
+
+
+
+/*---------------------------------------------------------------------------
+    Unlike extract_or_test_files(), this routine confines itself to the cen-
+    tral directory.  Thus its structure is somewhat simpler, since we can do
+    just a single loop through the entire directory, listing files as we go.
+
+    So to start off, print the heading line and then begin main loop through
+    the central directory.  The results will look vaguely like the following:
+
+ Length   Method    Size  Ratio   Date   Time   CRC-32    Name ("^" ==> case
+--------  ------  ------- -----   ----   ----   ------    ----   conversion)
+   44004  Implode   13041  71%  11-02-89 19:34  8b4207f7  Makefile.UNIX
+    3438  Shrunk     2209  36%  09-15-90 14:07  a2394fd8 ^dos-file.ext
+   16717  Defl:X     5252  69%  11-03-97 06:40  1ce0f189  WHERE
+--------          -------  ---                            -------
+   64159            20502  68%                            3 files
+  ---------------------------------------------------------------------------*/
+
+    G.pInfo = &info;
+    date_format = DATE_FORMAT;
+    dt_sepchar = DATE_SEPCHAR;
+
+#ifndef WINDLL
+    if (uO.qflag < 2) {
+        if (uO.L_flag)
+            Info(slide, 0, ((char *)slide, LoadFarString(CaseConversion),
+              LoadFarStringSmall(Headers[longhdr][0]),
+              LoadFarStringSmall2(Headers[longhdr][1])));
+        else
+            Info(slide, 0, ((char *)slide, "%s\n%s\n",
+               LoadFarString(Headers[longhdr][0]),
+               LoadFarStringSmall(Headers[longhdr][1])));
+    }
+#endif /* !WINDLL */
+
+    for (j = 1L;;j++) {
+
+        if (readbuf(__G__ G.sig, 4) == 0)
+            return PK_EOF;
+        if (memcmp(G.sig, central_hdr_sig, 4)) {  /* is it a CentDir entry? */
+            /* no new central directory entry
+             * -> is the number of processed entries compatible with the
+             *    number of entries as stored in the end_central record?
+             */
+            if (((j - 1) &
+                 (ulg)(G.ecrec.have_ecr64 ? MASK_ZUCN64 : MASK_ZUCN16))
+                == (ulg)G.ecrec.total_entries_central_dir)
+            {
+                /* "j modulus 4T/64k" matches the reported 64/16-bit-unsigned
+                 * number of directory entries -> probably, the regular
+                 * end of the central directory has been reached
+                 */
+                break;
+            } else {
+                Info(slide, 0x401,
+                     ((char *)slide, LoadFarString(CentSigMsg), j));
+                Info(slide, 0x401,
+                     ((char *)slide,"%s", LoadFarString(ReportMsg)));
+                return PK_BADERR;   /* sig not found */
+            }
+        }
+        /* process_cdir_file_hdr() sets pInfo->hostnum, pInfo->lcflag, ...: */
+        if ((error = process_cdir_file_hdr(__G)) != PK_COOL)
+            return error;       /* only PK_EOF defined */
+
+        /*
+         * We could DISPLAY the filename instead of storing (and possibly trun-
+         * cating, in the case of a very long name) and printing it, but that
+         * has the disadvantage of not allowing case conversion--and it's nice
+         * to be able to see in the listing precisely how you have to type each
+         * filename in order for unzip to consider it a match.  Speaking of
+         * which, if member names were specified on the command line, check in
+         * with match() to see if the current file is one of them, and make a
+         * note of it if it is.
+         */
+
+        if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) !=
+             PK_COOL)   /*  ^--(uses pInfo->lcflag) */
+        {
+            error_in_archive = error;
+            if (error > PK_WARN)   /* fatal:  can't continue */
+                return error;
+        }
+        if (G.extra_field != (uch *)NULL) {
+            free(G.extra_field);
+            G.extra_field = (uch *)NULL;
+        }
+        if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD))
+            != 0)
+        {
+            error_in_archive = error;
+            if (error > PK_WARN)      /* fatal */
+                return error;
+        }
+        if (!G.process_all_files) {   /* check if specified on command line */
+            unsigned i;
+
+            if (G.filespecs == 0)
+                do_this_file = TRUE;
+            else {  /* check if this entry matches an `include' argument */
+                do_this_file = FALSE;
+                for (i = 0; i < G.filespecs; i++)
+                    if (match(G.filename, G.pfnames[i], uO.C_flag WISEP)) {
+                        do_this_file = TRUE;
+                        break;       /* found match, so stop looping */
+                    }
+            }
+            if (do_this_file) {  /* check if this is an excluded file */
+                for (i = 0; i < G.xfilespecs; i++)
+                    if (match(G.filename, G.pxnames[i], uO.C_flag WISEP)) {
+                        do_this_file = FALSE;  /* ^-- ignore case in match */
+                        break;
+                    }
+            }
+        }
+        /*
+         * If current file was specified on command line, or if no names were
+         * specified, do the listing for this file.  Otherwise, get rid of the
+         * file comment and go back for the next file.
+         */
+
+        if (G.process_all_files || do_this_file) {
+
+#ifdef OS2DLL
+            /* this is used by UzpFileTree() to allow easy processing of lists
+             * of zip directory contents */
+            if (G.processExternally) {
+                if ((G.processExternally)(G.filename, &G.crec))
+                    break;
+                ++members;
+            } else {
+#endif
+#ifdef OS2_EAS
+            {
+                uch *ef_ptr = G.extra_field;
+                int ef_size, ef_len = G.crec.extra_field_length;
+                ea_size = acl_size = 0;
+
+                while (ef_len >= EB_HEADSIZE) {
+                    ef_size = makeword(&ef_ptr[EB_LEN]);
+                    switch (makeword(&ef_ptr[EB_ID])) {
+                        case EF_OS2:
+                            ea_size = makelong(&ef_ptr[EB_HEADSIZE]);
+                            break;
+                        case EF_ACL:
+                            acl_size = makelong(&ef_ptr[EB_HEADSIZE]);
+                            break;
+                    }
+                    ef_ptr += (ef_size + EB_HEADSIZE);
+                    ef_len -= (ef_size + EB_HEADSIZE);
+                }
+            }
+#endif
+#ifdef USE_EF_UT_TIME
+            if (G.extra_field &&
+#ifdef IZ_CHECK_TZ
+                G.tz_is_valid &&
+#endif
+                (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1,
+                                  G.crec.last_mod_dos_datetime, &z_utime, NULL)
+                 & EB_UT_FL_MTIME))
+            {
+                TIMET_TO_NATIVE(z_utime.mtime)   /* NOP unless MSC 7.0, Mac */
+                t = localtime(&(z_utime.mtime));
+            } else
+                t = (struct tm *)NULL;
+            if (t != (struct tm *)NULL) {
+                mo = (unsigned)(t->tm_mon + 1);
+                dy = (unsigned)(t->tm_mday);
+                yr = (unsigned)(t->tm_year + 1900);
+                hh = (unsigned)(t->tm_hour);
+                mm = (unsigned)(t->tm_min);
+            } else
+#endif /* USE_EF_UT_TIME */
+            {
+                yr = ((((unsigned)(G.crec.last_mod_dos_datetime >> 25) & 0x7f)
+                       + 1980));
+                mo = ((unsigned)(G.crec.last_mod_dos_datetime >> 21) & 0x0f);
+                dy = ((unsigned)(G.crec.last_mod_dos_datetime >> 16) & 0x1f);
+                hh = (((unsigned)G.crec.last_mod_dos_datetime >> 11) & 0x1f);
+                mm = (((unsigned)G.crec.last_mod_dos_datetime >> 5) & 0x3f);
+            }
+            /* permute date so it displays according to nat'l convention
+             * ('methnum' is not yet set, it is used as temporary buffer) */
+            switch (date_format) {
+                case DF_YMD:
+                    methnum = mo;
+                    mo = yr; yr = dy; dy = methnum;
+                    break;
+                case DF_DMY:
+                    methnum = mo;
+                    mo = dy; dy = methnum;
+            }
+
+            csiz = G.crec.csize;
+            if (G.crec.general_purpose_bit_flag & 1)
+                csiz -= 12;   /* if encrypted, don't count encryption header */
+            if ((cfactor = ratio(G.crec.ucsize, csiz)) < 0) {
+#ifndef WINDLL
+                sgn = '-';
+#endif
+                cfactor = (-cfactor + 5) / 10;
+            } else {
+#ifndef WINDLL
+                sgn = ' ';
+#endif
+                cfactor = (cfactor + 5) / 10;
+            }
+
+            methnum = find_compr_idx(G.crec.compression_method);
+            zfstrcpy(methbuf, method[methnum]);
+            if (G.crec.compression_method == DEFLATED ||
+                G.crec.compression_method == ENHDEFLATED) {
+                methbuf[5] = dtype[(G.crec.general_purpose_bit_flag>>1) & 3];
+            } else if (methnum >= NUM_METHODS) {
+                /* 2013-02-26 SMS.
+                 * http://sourceforge.net/tracker/?func=detail
+                 *  &aid=2861648&group_id=118012&atid=679786
+                 * Unexpectedly large compression methods overflow
+                 * &methbuf[].  Use the old, three-digit decimal format
+                 * for values which fit.  Otherwise, sacrifice the
+                 * colon, and use four-digit hexadecimal.
+                 */
+                if (G.crec.compression_method <= 999) {
+                    sprintf( &methbuf[ 4], "%03u", G.crec.compression_method);
+                } else {
+                    sprintf( &methbuf[ 3], "%04X", G.crec.compression_method);
+                }
+            }
+
+#if 0       /* GRR/Euro:  add this? */
+#if defined(DOS_FLX_NLM_OS2_W32) || defined(THEOS) || defined(UNIX)
+            for (p = G.filename;  *p;  ++p)
+                if (!isprint(*p))
+                    *p = '?';  /* change non-printable chars to '?' */
+#endif /* DOS_FLX_NLM_OS2_W32 || THEOS || UNIX */
+#endif /* 0 */
+
+#ifdef WINDLL
+            /* send data to application for formatting and printing */
+            if (G.lpUserFunctions->SendApplicationMessage != NULL)
+                (*G.lpUserFunctions->SendApplicationMessage)(G.crec.ucsize,
+                  csiz, (unsigned)cfactor, mo, dy, yr, hh, mm,
+                  (char)(G.pInfo->lcflag ? '^' : ' '),
+                  (LPCSTR)fnfilter(G.filename, slide, (WSIZE>>1)),
+                  (LPCSTR)methbuf, G.crec.crc32,
+                  (char)((G.crec.general_purpose_bit_flag & 1) ? 'E' : ' '));
+            else if (G.lpUserFunctions->SendApplicationMessage_i32 != NULL) {
+                unsigned long ucsize_lo, csiz_lo;
+                unsigned long ucsize_hi=0L, csiz_hi=0L;
+                ucsize_lo = (unsigned long)(G.crec.ucsize);
+                csiz_lo = (unsigned long)(csiz);
+#ifdef ZIP64_SUPPORT
+                ucsize_hi = (unsigned long)(G.crec.ucsize >> 32);
+                csiz_hi = (unsigned long)(csiz >> 32);
+#endif /* ZIP64_SUPPORT */
+                (*G.lpUserFunctions->SendApplicationMessage_i32)(ucsize_lo,
+                    ucsize_hi, csiz_lo, csiz_hi, (unsigned)cfactor,
+                    mo, dy, yr, hh, mm,
+                    (char)(G.pInfo->lcflag ? '^' : ' '),
+                    (LPCSTR)fnfilter(G.filename, slide, (WSIZE>>1)),
+                    (LPCSTR)methbuf, G.crec.crc32,
+                    (char)((G.crec.general_purpose_bit_flag & 1) ? 'E' : ' '));
+            }
+#else /* !WINDLL */
+            if (cfactor == 100)
+                snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactor100));
+            else
+                snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactorStr), sgn, cfactor);
+            if (longhdr)
+                Info(slide, 0, ((char *)slide, LoadFarString(LongHdrStats),
+                  FmZofft(G.crec.ucsize, "8", "u"), methbuf,
+                  FmZofft(csiz, "8", "u"), cfactorstr,
+                  mo, dt_sepchar, dy, dt_sepchar, yr, hh, mm,
+                  G.crec.crc32, (G.pInfo->lcflag? '^':' ')));
+            else
+#ifdef OS2_EAS
+                Info(slide, 0, ((char *)slide, LoadFarString(ShortHdrStats),
+                  FmZofft(G.crec.ucsize, "9", "u"), ea_size, acl_size,
+                  mo, dt_sepchar, dy, dt_sepchar, yr, hh, mm,
+                  (G.pInfo->lcflag? '^':' ')));
+#else
+                Info(slide, 0, ((char *)slide, LoadFarString(ShortHdrStats),
+                  FmZofft(G.crec.ucsize, "9", "u"),
+                  mo, dt_sepchar, dy, dt_sepchar, yr, hh, mm,
+                  (G.pInfo->lcflag? '^':' ')));
+#endif
+            fnprint(__G);
+#endif /* ?WINDLL */
+
+            if ((error = do_string(__G__ G.crec.file_comment_length,
+                                   QCOND? DISPL_8 : SKIP)) != 0)
+            {
+                error_in_archive = error;  /* might be just warning */
+                if (error > PK_WARN)       /* fatal */
+                    return error;
+            }
+            tot_ucsize += G.crec.ucsize;
+            tot_csize += csiz;
+            ++members;
+#ifdef OS2_EAS
+            if (ea_size) {
+                tot_easize += ea_size;
+                ++tot_eafiles;
+            }
+            if (acl_size) {
+                tot_aclsize += acl_size;
+                ++tot_aclfiles;
+            }
+#endif
+#ifdef OS2DLL
+            } /* end of "if (G.processExternally) {...} else {..." */
+#endif
+        } else {        /* not listing this file */
+            SKIP_(G.crec.file_comment_length)
+        }
+    } /* end for-loop (j: files in central directory) */
+
+/*---------------------------------------------------------------------------
+    Print footer line and totals (compressed size, uncompressed size, number
+    of members in zipfile).
+  ---------------------------------------------------------------------------*/
+
+    if (uO.qflag < 2
+#ifdef OS2DLL
+                     && !G.processExternally
+#endif
+                                            ) {
+        if ((cfactor = ratio(tot_ucsize, tot_csize)) < 0) {
+#ifndef WINDLL
+            sgn = '-';
+#endif
+            cfactor = (-cfactor + 5) / 10;
+        } else {
+#ifndef WINDLL
+            sgn = ' ';
+#endif
+            cfactor = (cfactor + 5) / 10;
+        }
+#ifdef WINDLL
+        /* pass the totals back to the calling application */
+        G.lpUserFunctions->TotalSizeComp = tot_csize;
+        G.lpUserFunctions->TotalSize = tot_ucsize;
+        G.lpUserFunctions->CompFactor = (ulg)cfactor;
+        G.lpUserFunctions->NumMembers = members;
+
+#else /* !WINDLL */
+        if (cfactor == 100)
+            snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactor100));
+        else
+            snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactorStr), sgn, cfactor);
+        if (longhdr) {
+            Info(slide, 0, ((char *)slide, LoadFarString(LongFileTrailer),
+              FmZofft(tot_ucsize, "8", "u"), FmZofft(tot_csize, "8", "u"),
+              cfactorstr, members, members==1? "":"s"));
+#ifdef OS2_EAS
+            if (tot_easize || tot_aclsize)
+                Info(slide, 0, ((char *)slide, "\n"));
+            if (tot_eafiles && tot_easize)
+                Info(slide, 0, ((char *)slide, LoadFarString(OS2ExtAttrTrailer),
+                  tot_eafiles, tot_eafiles == 1? " has" : "s have a total of",
+                  tot_easize));
+            if (tot_aclfiles && tot_aclsize)
+                Info(slide, 0, ((char *)slide, LoadFarString(OS2ACLTrailer),
+                  tot_aclfiles,
+                  tot_aclfiles == 1 ? " has" : "s have a total of",
+                  tot_aclsize));
+#endif /* OS2_EAS */
+        } else
+#ifdef OS2_EAS
+            Info(slide, 0, ((char *)slide, LoadFarString(ShortFileTrailer),
+              FmZofft(tot_ucsize, "9", "u"), tot_easize, tot_aclsize,
+              members, members == 1 ? "" : "s"));
+#else
+            Info(slide, 0, ((char *)slide, LoadFarString(ShortFileTrailer),
+              FmZofft(tot_ucsize, "9", "u"),
+              members, members == 1 ? "" : "s"));
+#endif /* OS2_EAS */
+#endif /* ?WINDLL */
+    }
+
+    /* Skip the following checks in case of a premature listing break. */
+    if (error_in_archive <= PK_WARN) {
+
+/*---------------------------------------------------------------------------
+    Double check that we're back at the end-of-central-directory record.
+  ---------------------------------------------------------------------------*/
+
+        if ( (memcmp(G.sig,
+                     (G.ecrec.have_ecr64 ?
+                      end_central64_sig : end_central_sig),
+                     4) != 0)
+            && (!G.ecrec.is_zip64_archive)
+            && (memcmp(G.sig, end_central_sig, 4) != 0)
+           ) {          /* just to make sure again */
+            Info(slide, 0x401, 
+                 ((char *)slide,"%s", LoadFarString(EndSigMsg)));
+            error_in_archive = PK_WARN;   /* didn't find sig */
+        }
+
+        /* Set specific return code when no files have been found. */
+        if (members == 0L && error_in_archive <= PK_WARN)
+            error_in_archive = PK_FIND;
+
+    }
+
+    return error_in_archive;
+
+} /* end function list_files() */
+
+
+
+
+
+#ifdef TIMESTAMP
+
+/************************/
+/* Function fn_is_dir() */
+/************************/
+
+static int fn_is_dir(__G)    /* returns TRUE if G.filename is directory */
+    __GDEF
+{
+    extent fn_len = strlen(G.filename);
+    register char   endc;
+
+    return  fn_len > 0 &&
+            ((endc = lastchar(G.filename, fn_len)) == '/' ||
+             (G.pInfo->hostnum == FS_FAT_ && !MBSCHR(G.filename, '/') &&
+              endc == '\\'));
+}
+
+
+
+
+
+/*****************************/
+/* Function get_time_stamp() */
+/*****************************/
+
+int get_time_stamp(__G__ last_modtime, nmember)  /* return PK-type error code */
+    __GDEF
+    time_t *last_modtime;
+    ulg *nmember;
+{
+    int do_this_file=FALSE, error, error_in_archive=PK_COOL;
+    ulg j;
+#ifdef USE_EF_UT_TIME
+    iztimes z_utime;
+#endif
+    min_info info;
+
+
+/*---------------------------------------------------------------------------
+    Unlike extract_or_test_files() but like list_files(), this function works
+    on information in the central directory alone.  Thus we have a single,
+    large loop through the entire directory, searching for the latest time
+    stamp.
+  ---------------------------------------------------------------------------*/
+
+    *last_modtime = 0L;         /* assuming no zipfile data older than 1970 */
+    *nmember = 0L;
+    G.pInfo = &info;
+
+    for (j = 1L;; j++) {
+
+        if (readbuf(__G__ G.sig, 4) == 0)
+            return PK_EOF;
+        if (memcmp(G.sig, central_hdr_sig, 4)) {  /* is it a CentDir entry? */
+            if (((unsigned)(j - 1) & (unsigned)0xFFFF) ==
+                (unsigned)G.ecrec.total_entries_central_dir) {
+                /* "j modulus 64k" matches the reported 16-bit-unsigned
+                 * number of directory entries -> probably, the regular
+                 * end of the central directory has been reached
+                 */
+                break;
+            } else {
+                Info(slide, 0x401,
+                     ((char *)slide, LoadFarString(CentSigMsg), j));
+                Info(slide, 0x401,
+                     ((char *)slide,"%s", LoadFarString(ReportMsg)));
+                return PK_BADERR;   /* sig not found */
+            }
+        }
+        /* process_cdir_file_hdr() sets pInfo->lcflag: */
+        if ((error = process_cdir_file_hdr(__G)) != PK_COOL)
+            return error;       /* only PK_EOF defined */
+        if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) != PK_OK)
+        {        /*  ^-- (uses pInfo->lcflag) */
+            error_in_archive = error;
+            if (error > PK_WARN)   /* fatal:  can't continue */
+                return error;
+        }
+        if (G.extra_field != (uch *)NULL) {
+            free(G.extra_field);
+            G.extra_field = (uch *)NULL;
+        }
+        if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD))
+            != 0)
+        {
+            error_in_archive = error;
+            if (error > PK_WARN)      /* fatal */
+                return error;
+        }
+        if (!G.process_all_files) {   /* check if specified on command line */
+            unsigned i;
+
+            if (G.filespecs == 0)
+                do_this_file = TRUE;
+            else {  /* check if this entry matches an `include' argument */
+                do_this_file = FALSE;
+                for (i = 0; i < G.filespecs; i++)
+                    if (match(G.filename, G.pfnames[i], uO.C_flag WISEP)) {
+                        do_this_file = TRUE;
+                        break;       /* found match, so stop looping */
+                    }
+            }
+            if (do_this_file) {  /* check if this is an excluded file */
+                for (i = 0; i < G.xfilespecs; i++)
+                    if (match(G.filename, G.pxnames[i], uO.C_flag WISEP)) {
+                        do_this_file = FALSE;  /* ^-- ignore case in match */
+                        break;
+                    }
+            }
+        }
+
+        /* If current file was specified on command line, or if no names were
+         * specified, check the time for this file.  Either way, get rid of the
+         * file comment and go back for the next file.
+         * Directory entries are always ignored, to stay compatible with both
+         * Zip and PKZIP.
+         */
+        if ((G.process_all_files || do_this_file) && !fn_is_dir(__G)) {
+#ifdef USE_EF_UT_TIME
+            if (G.extra_field &&
+#ifdef IZ_CHECK_TZ
+                G.tz_is_valid &&
+#endif
+                (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1,
+                                  G.crec.last_mod_dos_datetime, &z_utime, NULL)
+                 & EB_UT_FL_MTIME))
+            {
+                if (*last_modtime < z_utime.mtime)
+                    *last_modtime = z_utime.mtime;
+            } else
+#endif /* USE_EF_UT_TIME */
+            {
+                time_t modtime = dos_to_unix_time(G.crec.last_mod_dos_datetime);
+
+                if (*last_modtime < modtime)
+                    *last_modtime = modtime;
+            }
+            ++*nmember;
+        }
+        SKIP_(G.crec.file_comment_length)
+
+    } /* end for-loop (j: files in central directory) */
+
+/*---------------------------------------------------------------------------
+    Double check that we're back at the end-of-central-directory record.
+  ---------------------------------------------------------------------------*/
+
+    if (memcmp(G.sig, end_central_sig, 4)) {    /* just to make sure again */
+        Info(slide, 0x401, ((char *)slide,"%s", LoadFarString(EndSigMsg)));
+        error_in_archive = PK_WARN;
+    }
+    if (*nmember == 0L && error_in_archive <= PK_WARN)
+        error_in_archive = PK_FIND;
+
+    return error_in_archive;
+
+} /* end function get_time_stamp() */
+
+#endif /* TIMESTAMP */
+
+
+
+
+
+/********************/
+/* Function ratio() */    /* also used by ZipInfo routines */
+/********************/
+
+int ratio(uc, c)
+    zusz_t uc, c;
+{
+    zusz_t denom;
+
+    if (uc == 0)
+        return 0;
+    if (uc > 2000000L) {    /* risk signed overflow if multiply numerator */
+        denom = uc / 1000L;
+        return ((uc >= c) ?
+            (int) ((uc-c + (denom>>1)) / denom) :
+          -((int) ((c-uc + (denom>>1)) / denom)));
+    } else {             /* ^^^^^^^^ rounding */
+        denom = uc;
+        return ((uc >= c) ?
+            (int) ((1000L*(uc-c) + (denom>>1)) / denom) :
+          -((int) ((1000L*(c-uc) + (denom>>1)) / denom)));
+    }                            /* ^^^^^^^^ rounding */
+}
+
+
+
+
+
+/************************/
+/*  Function fnprint()  */    /* also used by ZipInfo routines */
+/************************/
+
+void fnprint(__G)    /* print filename (after filtering) and newline */
+    __GDEF
+{
+    char *name = fnfilter(G.filename, slide, (extent)(WSIZE>>1));
+
+    (*G.message)((zvoid *)&G, (uch *)name, (ulg)strlen(name), 0);
+    (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0);
+
+} /* end function fnprint() */
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/man/unzip.1
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/man/unzip.1	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/man/unzip.1	(revision 5)
@@ -0,0 +1,1040 @@
+.\"  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
+.\"
+.\"  See the accompanying file LICENSE, version 2009-Jan-02 or later
+.\"  (the contents of which are also included in unzip.h) for terms of use.
+.\"  If, for some reason, all these files are missing, the Info-ZIP license
+.\"  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+.\"
+.\" unzip.1 by Greg Roelofs, Fulvio Marino, Jim van Zandt and others.
+.\"
+.\" =========================================================================
+.\" define .EX/.EE (for multiline user-command examples; normal Courier font)
+.de EX
+.in +4n
+.nf
+.ft CW
+..
+.de EE
+.ft R
+.fi
+.in -4n
+..
+.\" =========================================================================
+.TH UNZIP 1L "20 April 2009 (v6.0)" "Info-ZIP"
+.SH NAME
+unzip \- list, test and extract compressed files in a ZIP archive
+.PD
+.SH SYNOPSIS
+\fBunzip\fP [\fB\-Z\fP] [\fB\-cflptTuvz\fP[\fBabjnoqsCDKLMUVWX$/:^\fP]]
+\fIfile\fP[\fI.zip\fP] [\fIfile(s)\fP\ .\|.\|.]
+[\fB\-x\fP\ \fIxfile(s)\fP\ .\|.\|.] [\fB\-d\fP\ \fIexdir\fP]
+.PD
+.\" =========================================================================
+.SH DESCRIPTION
+\fIunzip\fP will list, test, or extract files from a ZIP archive, commonly
+found on MS-DOS systems.  The default behavior (with no options) is to extract
+into the current directory (and subdirectories below it) all files from the
+specified ZIP archive.  A companion program, \fIzip\fP(1L), creates ZIP
+archives; both programs are compatible with archives created by PKWARE's
+\fIPKZIP\fP and \fIPKUNZIP\fP for MS-DOS, but in many cases the program
+options or default behaviors differ.
+.PD
+.\" =========================================================================
+.SH ARGUMENTS
+.TP
+.IR file [ .zip ]
+Path of the ZIP archive(s).  If the file specification is a wildcard,
+each matching file is processed in an order determined by the operating
+system (or file system).  Only the filename can be a wildcard; the path
+itself cannot.  Wildcard expressions are similar to those supported in
+commonly used Unix shells (\fIsh\fP, \fIksh\fP, \fIcsh\fP) and may contain:
+.RS
+.IP *
+matches a sequence of 0 or more characters
+.IP ?
+matches exactly 1 character
+.IP [.\|.\|.]
+matches any single character found inside the brackets; ranges are specified
+by a beginning character, a hyphen, and an ending character.  If an exclamation
+point or a caret (`!' or `^') follows the left bracket, then the range of
+characters within the brackets is complemented (that is, anything \fIexcept\fP
+the characters inside the brackets is considered a match).  To specify a
+verbatim left bracket, the three-character sequence ``[[]'' has to be used.
+.RE
+.IP
+(Be sure to quote any character that might otherwise be interpreted or
+modified by the operating system, particularly under Unix and VMS.)  If no
+matches are found, the specification is assumed to be a literal filename;
+and if that also fails, the suffix \fC.zip\fR is appended.  Note that
+self-extracting ZIP files are supported, as with any other ZIP archive;
+just specify the \fC.exe\fR suffix (if any) explicitly.
+.IP [\fIfile(s)\fP]
+An optional list of archive members to be processed, separated by spaces.
+(VMS versions compiled with VMSCLI defined must delimit files with commas
+instead.  See \fB\-v\fP in \fBOPTIONS\fP below.)
+Regular expressions (wildcards) may be used to match multiple members; see
+above.  Again, be sure to quote expressions that would otherwise be expanded
+or modified by the operating system.
+.IP [\fB\-x\fP\ \fIxfile(s)\fP]
+An optional list of archive members to be excluded from processing.
+Since wildcard characters normally match (`/') directory separators
+(for exceptions see the option \fB\-W\fP), this option may be used
+to exclude any files that are in subdirectories.  For
+example, ``\fCunzip foo *.[ch] -x */*\fR'' would extract all C source files
+in the main directory, but none in any subdirectories.  Without the \fB\-x\fP
+option, all C source files in all directories within the zipfile would be
+extracted.
+.IP [\fB\-d\fP\ \fIexdir\fP]
+An optional directory to which to extract files.  By default, all files
+and subdirectories are recreated in the current directory; the \fB\-d\fP
+option allows extraction in an arbitrary directory (always assuming one
+has permission to write to the directory).  This option need not appear
+at the end of the command line; it is also accepted before the zipfile
+specification (with the normal options), immediately after the zipfile
+specification, or between the \fIfile(s)\fP and the \fB\-x\fP option.
+The option and directory may be concatenated without any white space
+between them, but note that this may cause normal shell behavior to be
+suppressed.  In particular, ``\fC\-d\ ~\fR'' (tilde) is expanded by Unix
+C shells into the name of the user's home directory, but ``\fC\-d~\fR''
+is treated as a literal subdirectory ``\fB~\fP'' of the current directory.
+.\" =========================================================================
+.SH OPTIONS
+Note that, in order to support obsolescent hardware, \fIunzip\fP's usage
+screen is limited to 22 or 23 lines and should therefore be considered
+only a reminder of the basic \fIunzip\fP syntax rather than an exhaustive
+list of all possible flags.  The exhaustive list follows:
+.TP
+.B \-Z
+\fIzipinfo\fP(1L) mode.  If the first option on the command line is \fB\-Z\fP,
+the remaining options are taken to be \fIzipinfo\fP(1L) options.  See the
+appropriate manual page for a description of these options.
+.TP
+.B \-A
+[OS/2, Unix DLL] print extended help for the DLL's programming interface (API).
+.TP
+.B \-c
+extract files to stdout/screen (``CRT'').  This option is similar to the
+\fB\-p\fP option except that the name of each file is printed as it is
+extracted, the \fB\-a\fP option is allowed, and ASCII-EBCDIC conversion
+is automatically performed if appropriate.  This option is not listed in
+the \fIunzip\fP usage screen.
+.TP
+.B \-f
+freshen existing files, i.e., extract only those files that
+already exist on disk and that are newer than the disk copies.  By
+default \fIunzip\fP queries before overwriting, but the \fB\-o\fP option
+may be used to suppress the queries.  Note that under many operating systems,
+the TZ (timezone) environment variable must be set correctly in order for
+\fB\-f\fP and \fB\-u\fP to work properly (under Unix the variable is usually
+set automatically).  The reasons for this are somewhat subtle but
+have to do with the differences between DOS-format file times (always local
+time) and Unix-format times (always in GMT/UTC) and the necessity to compare
+the two.  A typical TZ value is ``PST8PDT'' (US Pacific time with automatic
+adjustment for Daylight Savings Time or ``summer time'').
+.TP
+.B \-l
+list archive files (short format).  The names, uncompressed file sizes and
+modification dates and times of the specified files are printed, along
+with totals for all files specified.  If UnZip was compiled with OS2_EAS
+defined, the \fB\-l\fP option also lists columns for the sizes of stored
+OS/2 extended attributes (EAs) and OS/2 access control lists (ACLs).  In
+addition, the zipfile comment and individual file comments (if any) are
+displayed.  If a file was archived from a single-case file system (for
+example, the old MS-DOS FAT file system) and the \fB\-L\fP option was given,
+the filename is converted to lowercase and is prefixed with a caret (^).
+.TP
+.B \-p
+extract files to pipe (stdout).  Nothing but the file data is sent to
+stdout, and the files are always extracted in binary format, just as they
+are stored (no conversions).
+.TP
+.B \-t
+test archive files.  This option extracts each specified file in memory
+and compares the CRC (cyclic redundancy check, an enhanced checksum) of
+the expanded file with the original file's stored CRC value.
+.TP
+.B \-T
+[most OSes] set the timestamp on the archive(s) to that of the newest file
+in each one.  This corresponds to \fIzip\fP's \fB\-go\fP option except that
+it can be used on wildcard zipfiles (e.g., ``\fCunzip \-T \e*.zip\fR'') and
+is much faster.
+.TP
+.B \-u
+update existing files and create new ones if needed.  This option performs
+the same function as the \fB\-f\fP option, extracting (with query) files
+that are newer than those with the same name on disk, and in addition it
+extracts those files that do not already exist on disk.  See \fB\-f\fP
+above for information on setting the timezone properly.
+.TP
+.B \-v
+list archive files (verbose format) or show diagnostic version info.
+This option has evolved and now behaves as both an option and a modifier.
+As an option it has two purposes:  when a zipfile is specified with no
+other options, \fB\-v\fP lists archive files verbosely, adding to the
+basic \fB\-l\fP info the compression method, compressed size,
+compression ratio and 32-bit CRC.  In contrast to most of the competing
+utilities, \fIunzip\fP removes the 12 additional header bytes of
+encrypted entries from the compressed size numbers.  Therefore,
+compressed size and compression ratio figures are independent of the entry's
+encryption status and show the correct compression performance.  (The complete
+size of the encrypted compressed data stream for zipfile entries is reported
+by the more verbose \fIzipinfo\fP(1L) reports, see the separate manual.)
+When no zipfile is specified (that is, the complete command is simply
+``\fCunzip \-v\fR''), a diagnostic screen is printed.  In addition to
+the normal header with release date and version, \fIunzip\fP lists the
+home Info-ZIP ftp site and where to find a list of other ftp and non-ftp
+sites; the target operating system for which it was compiled, as well
+as (possibly) the hardware on which it was compiled, the compiler and
+version used, and the compilation date; any special compilation options
+that might affect the program's operation (see also \fBDECRYPTION\fP below);
+and any options stored in environment variables that might do the same
+(see \fBENVIRONMENT OPTIONS\fP below).  As a modifier it works in
+conjunction with other options (e.g., \fB\-t\fP) to produce more
+verbose or debugging output; this is not yet fully implemented
+but will be in future releases.
+.TP
+.B \-z
+display only the archive comment.
+.PD
+.\" =========================================================================
+.SH MODIFIERS
+.TP
+.B \-a
+convert text files.  Ordinarily all files are extracted exactly as they
+are stored (as ``binary'' files).  The \fB\-a\fP option causes files identified
+by \fIzip\fP as text files (those with the `t' label in \fIzipinfo\fP
+listings, rather than `b') to be automatically extracted as such, converting
+line endings, end-of-file characters and the character set itself as necessary.
+(For example, Unix files use line feeds (LFs) for end-of-line (EOL) and
+have no end-of-file (EOF) marker; Macintoshes use carriage returns (CRs)
+for EOLs; and most PC operating systems use CR+LF for EOLs and control-Z for
+EOF.  In addition, IBM mainframes and the Michigan Terminal System use EBCDIC
+rather than the more common ASCII character set, and NT supports Unicode.)
+Note that \fIzip\fP's identification of text files is by no means perfect; some
+``text'' files may actually be binary and vice versa.  \fIunzip\fP therefore
+prints ``\fC[text]\fR'' or ``\fC[binary]\fR'' as a visual check for each file
+it extracts when using the \fB\-a\fP option.  The \fB\-aa\fP option forces
+all files to be extracted as text, regardless of the supposed file type.
+On VMS, see also \fB\-S\fP.
+.TP
+.B \-b
+[general] treat all files as binary (no text conversions).  This is a shortcut
+for \fB\-\-\-a\fP.
+.TP
+.B \-b
+[Tandem] force the creation files with filecode type 180 ('C') when
+extracting Zip entries marked as "text". (On Tandem, \fB\-a\fP is enabled
+by default, see above).
+.TP
+.B \-b
+[VMS] auto-convert binary files (see \fB\-a\fP above) to fixed-length,
+512-byte record format.  Doubling the option (\fB\-bb\fP) forces all files
+to be extracted in this format. When extracting to standard output
+(\fB\-c\fP or \fB\-p\fP option in effect), the default conversion of text
+record delimiters is disabled for binary (\fB\-b\fP) resp. all (\fB\-bb\fP)
+files.
+.TP
+.B \-B
+[when compiled with UNIXBACKUP defined] save a backup copy of each
+overwritten file. The backup file is gets the name of the target file with
+a tilde and optionally a unique sequence number (up to 5 digits) appended.
+The sequence number is applied whenever another file with the original name
+plus tilde already exists.  When used together with the "overwrite all"
+option \fB\-o\fP, numbered backup files are never created. In this case,
+all backup files are named as the original file with an appended tilde,
+existing backup files are deleted without notice.
+This feature works similarly to the default behavior of \fIemacs\fP(1)
+in many locations.
+.IP
+Example: the old copy of ``\fCfoo\fR'' is renamed to ``\fCfoo~\fR''.
+.IP
+Warning: Users should be aware that the \fB-B\fP option does not prevent
+loss of existing data under all circumstances.  For example, when
+\fIunzip\fP is run in overwrite-all mode, an existing ``\fCfoo~\fR'' file
+is deleted before \fIunzip\fP attempts to rename ``\fCfoo\fR'' to
+``\fCfoo~\fR''.  When this rename attempt fails (because of a file locks,
+insufficient privileges, or ...), the extraction of ``\fCfoo~\fR'' gets
+cancelled, but the old backup file is already lost.  A similar scenario
+takes place when the sequence number range for numbered backup files gets
+exhausted (99999, or 65535 for 16-bit systems).  In this case, the backup
+file with the maximum sequence number is deleted and replaced by the new
+backup version without notice.
+.TP
+.B \-C
+use case-insensitive matching for the selection of archive entries
+from the command-line list of extract selection patterns.
+\fIunzip\fP's philosophy is ``you get what you ask for'' (this is
+also responsible for the \fB\-L\fP/\fB\-U\fP change; see the relevant
+options below).  Because some file systems are fully case-sensitive
+(notably those under the Unix operating system) and because
+both ZIP archives and \fIunzip\fP itself are portable across platforms,
+\fIunzip\fP's default behavior is to match both wildcard and literal
+filenames case-sensitively.  That is, specifying ``\fCmakefile\fR''
+on the command line will \fIonly\fP match ``makefile'' in the archive,
+not ``Makefile'' or ``MAKEFILE'' (and similarly for wildcard specifications).
+Since this does not correspond to the behavior of many other
+operating/file systems (for example, OS/2 HPFS, which preserves
+mixed case but is not sensitive to it), the \fB\-C\fP option may be
+used to force all filename matches to be case-insensitive.  In the
+example above, all three files would then match ``\fCmakefile\fR''
+(or ``\fCmake*\fR'', or similar).  The \fB\-C\fP option affects
+file specs in both the normal file list and the excluded-file list (xlist).
+.IP
+Please note that the \fB\-C\fP option does neither affect the search for
+the zipfile(s) nor the matching of archive entries to existing files on
+the extraction path.  On a case-sensitive file system, \fIunzip\fP will
+never try to overwrite a file ``FOO'' when extracting an entry ``foo''!
+.TP
+.B \-D
+skip restoration of timestamps for extracted items.  Normally, \fIunzip\fP
+tries to restore all meta-information for extracted items that are supplied
+in the Zip archive (and do not require privileges or impose a security risk).
+By specifying \fB\-D\fP, \fIunzip\fP is told to suppress restoration of
+timestamps for directories explicitly created from Zip archive entries.
+This option only applies to ports that support setting timestamps for
+directories (currently ATheOS, BeOS, MacOS, OS/2, Unix, VMS, Win32, for other
+\fIunzip\fP ports, \fB\-D\fP has no effect).
+The duplicated option \fB\-DD\fP forces suppression of timestamp restoration
+for all extracted entries (files and directories).  This option results in
+setting the timestamps for all extracted entries to the current time.
+.IP
+On VMS, the default setting for this option is \fB\-D\fP for consistency
+with the behaviour of BACKUP: file timestamps are restored, timestamps of
+extracted directories are left at the current time.  To enable restoration
+of directory timestamps, the negated option \fB\--D\fP should be specified.
+On VMS, the option \fB\-D\fP disables timestamp restoration for all extracted
+Zip archive items.  (Here, a single \fB\-D\fP on the command line combines
+with the default \fB\-D\fP to do what an explicit \fB\-DD\fP does on other
+systems.)
+.TP
+.B \-E
+[MacOS only] display contents of MacOS extra field during restore operation.
+.TP
+.B \-F
+[Acorn only] suppress removal of NFS filetype extension from stored filenames.
+.TP
+.B \-F
+[non-Acorn systems supporting long filenames with embedded commas,
+and only if compiled with ACORN_FTYPE_NFS defined] translate
+filetype information from ACORN RISC OS extra field blocks into a
+NFS filetype extension and append it to the names of the extracted files.
+(When the stored filename appears to already have an appended NFS filetype
+extension, it is replaced by the info from the extra field.)
+.TP
+.B \-i
+[MacOS only] ignore filenames stored in MacOS extra fields. Instead, the
+most compatible filename stored in the generic part of the entry's header
+is used.
+.TP
+.B \-j
+junk paths.  The archive's directory structure is not recreated; all files
+are deposited in the extraction directory (by default, the current one).
+.TP
+.B \-J
+[BeOS only] junk file attributes.  The file's BeOS file attributes are not
+restored, just the file's data.
+.TP
+.B \-J
+[MacOS only] ignore MacOS extra fields.  All Macintosh specific info
+is skipped. Data-fork and resource-fork are restored as separate files.
+.TP
+.B \-K
+[AtheOS, BeOS, Unix only] retain SUID/SGID/Tacky file attributes.  Without
+this flag, these attribute bits are cleared for security reasons.
+.TP
+.B \-L
+convert to lowercase any filename originating on an uppercase-only operating
+system or file system.  (This was \fIunzip\fP's default behavior in releases
+prior to 5.11; the new default behavior is identical to the old behavior with
+the \fB\-U\fP option, which is now obsolete and will be removed in a future
+release.)  Depending on the archiver, files archived under single-case
+file systems (VMS, old MS-DOS FAT, etc.) may be stored as all-uppercase names;
+this can be ugly or inconvenient when extracting to a case-preserving
+file system such as OS/2 HPFS or a case-sensitive one such as under
+Unix.  By default \fIunzip\fP lists and extracts such filenames exactly as
+they're stored (excepting truncation, conversion of unsupported characters,
+etc.); this option causes the names of all files from certain systems to be
+converted to lowercase.  The \fB\-LL\fP option forces conversion of every
+filename to lowercase, regardless of the originating file system.
+.TP
+.B \-M
+pipe all output through an internal pager similar to the Unix \fImore\fP(1)
+command.  At the end of a screenful of output, \fIunzip\fP pauses with a
+``\-\-More\-\-'' prompt; the next screenful may be viewed by pressing the
+Enter (Return) key or the space bar.  \fIunzip\fP can be terminated by
+pressing the ``q'' key and, on some systems, the Enter/Return key.  Unlike
+Unix \fImore\fP(1), there is no forward-searching or editing capability.
+Also, \fIunzip\fP doesn't notice if long lines wrap at the edge of the screen,
+effectively resulting in the printing of two or more lines and the likelihood
+that some text will scroll off the top of the screen before being viewed.
+On some systems the number of available lines on the screen is not detected,
+in which case \fIunzip\fP assumes the height is 24 lines.
+.TP
+.B \-n
+never overwrite existing files.  If a file already exists, skip the extraction
+of that file without prompting.  By default \fIunzip\fP queries before
+extracting any file that already exists; the user may choose to overwrite
+only the current file, overwrite all files, skip extraction of the current
+file, skip extraction of all existing files, or rename the current file.
+.TP
+.B \-N
+[Amiga] extract file comments as Amiga filenotes.  File comments are created
+with the \-c option of \fIzip\fP(1L), or with the \-N option of the Amiga port
+of \fIzip\fP(1L), which stores filenotes as comments.
+.TP
+.B \-o
+overwrite existing files without prompting.  This is a dangerous option, so
+use it with care.  (It is often used with \fB\-f\fP, however, and is the only
+way to overwrite directory EAs under OS/2.)
+.IP \fB\-P\fP\ \fIpassword\fP
+use \fIpassword\fP to decrypt encrypted zipfile entries (if any).  \fBTHIS IS
+INSECURE!\fP  Many multi-user operating systems provide ways for any user to
+see the current command line of any other user; even on stand-alone systems
+there is always the threat of over-the-shoulder peeking.  Storing the plaintext
+password as part of a command line in an automated script is even worse.
+Whenever possible, use the non-echoing, interactive prompt to enter passwords.
+(And where security is truly important, use strong encryption such as Pretty
+Good Privacy instead of the relatively weak encryption provided by standard
+zipfile utilities.)
+.TP
+.B \-q
+perform operations quietly (\fB\-qq\fP = even quieter).  Ordinarily \fIunzip\fP
+prints the names of the files it's extracting or testing, the extraction
+methods, any file or zipfile comments that may be stored in the archive,
+and possibly a summary when finished with each archive.  The \fB\-q\fP[\fBq\fP]
+options suppress the printing of some or all of these messages.
+.TP
+.B \-s
+[OS/2, NT, MS-DOS] convert spaces in filenames to underscores.  Since all PC
+operating systems allow spaces in filenames, \fIunzip\fP by default extracts
+filenames with spaces intact (e.g., ``\fCEA\ DATA.\ SF\fR'').  This can be
+awkward, however, since MS-DOS in particular does not gracefully support
+spaces in filenames.  Conversion of spaces to underscores can eliminate the
+awkwardness in some cases.
+.TP
+.B \-S
+[VMS] convert text files (\fB\-a\fP, \fB\-aa\fP) into Stream_LF record format,
+instead of the text-file default, variable-length record format.
+(Stream_LF is the default record format of VMS \fIunzip\fP. It is applied
+unless conversion (\fB\-a\fP, \fB\-aa\fP and/or \fB\-b\fP, \fB\-bb\fP) is
+requested or a VMS-specific entry is processed.)
+.TP
+.B \-U
+[UNICODE_SUPPORT only] modify or disable UTF-8 handling.
+When UNICODE_SUPPORT is available, the option \fB\-U\fP forces \fIunzip\fP
+to escape all non-ASCII characters from UTF-8 coded filenames as ``#Uxxxx''
+(for UCS-2 characters, or ``#Lxxxxxx'' for unicode codepoints needing 3
+octets).  This option is mainly provided for debugging purpose when the
+fairly new UTF-8 support is suspected to mangle up extracted filenames.
+.IP
+The option \fB\-UU\fP allows to entirely disable the recognition of UTF-8
+encoded filenames.  The handling of filename codings within \fIunzip\fP falls
+back to the behaviour of previous versions.
+.IP
+[old, obsolete usage] leave filenames uppercase if
+created under MS-DOS, VMS, etc.  See \fB\-L\fP above.
+.TP
+.B \-V
+retain (VMS) file version numbers.  VMS files can be stored with a version
+number, in the format \fCfile.ext;##\fR.  By default the ``\fC;##\fR'' version
+numbers are stripped, but this option allows them to be retained.  (On
+file systems that limit filenames to particularly short lengths, the version
+numbers may be truncated or stripped regardless of this option.)
+.TP
+.B \-W
+[only when WILD_STOP_AT_DIR compile-time option enabled]
+modifies the pattern matching routine so that both `?' (single-char wildcard)
+and `*' (multi-char wildcard) do not match the directory separator character
+`/'.  (The two-character sequence ``**'' acts as a multi-char wildcard that
+includes the directory separator in its matched characters.)  Examples:
+.PP
+.EX
+    "*.c" matches "foo.c" but not "mydir/foo.c"
+    "**.c" matches both "foo.c" and "mydir/foo.c"
+    "*/*.c" matches "bar/foo.c" but not "baz/bar/foo.c"
+    "??*/*" matches "ab/foo" and "abc/foo"
+            but not "a/foo" or "a/b/foo"
+.EE
+.IP
+This modified behaviour is equivalent to the pattern matching style
+used by the shells of some of UnZip's supported target OSs (one
+example is Acorn RISC OS).  This option may not be available on systems
+where the Zip archive's internal directory separator character `/' is
+allowed as regular character in native operating system filenames.
+(Currently, UnZip uses the same pattern matching rules for both wildcard
+zipfile specifications and zip entry selection patterns in most ports.
+For systems allowing `/' as regular filename character, the -W option
+would not work as expected on a wildcard zipfile specification.)
+.TP
+.B \-X
+[VMS, Unix, OS/2, NT, Tandem] restore owner/protection info (UICs and ACL
+entries) under VMS, or user and group info (UID/GID) under Unix, or access
+control lists (ACLs) under certain network-enabled versions of OS/2
+(Warp Server with IBM LAN Server/Requester 3.0 to 5.0; Warp Connect with
+IBM Peer 1.0), or security ACLs under Windows NT.  In most cases this will
+require special system privileges, and doubling the option (\fB\-XX\fP)
+under NT instructs \fIunzip\fP to use privileges for extraction; but under
+Unix, for example, a user who belongs to several groups can restore files
+owned by any of those groups, as long as the user IDs match his or her own.
+Note that ordinary file attributes are always restored--this option applies
+only to optional, extra ownership info available on some operating systems.
+[NT's access control lists do not appear to be especially compatible with
+OS/2's, so no attempt is made at cross-platform portability of access
+privileges.  It is not clear under what conditions this would ever be
+useful anyway.]
+.TP
+.B \-Y
+[VMS] treat archived file name endings of ``.nnn'' (where ``nnn'' is a
+decimal  number) as if they were VMS version numbers (``;nnn'').
+(The default is to treat them as file types.)  Example:
+.EX
+     "a.b.3" -> "a.b;3".
+.EE
+.TP
+.B \-$
+.\" Amiga support possible eventually, but not yet
+[MS-DOS, OS/2, NT] restore the volume label if the extraction medium is
+removable (e.g., a diskette).  Doubling the option (\fB\-$$\fP) allows fixed
+media (hard disks) to be labeled as well.  By default, volume labels are
+ignored.
+.IP \fB\-/\fP\ \fIextensions\fP
+[Acorn only] overrides the extension list supplied by Unzip$Ext environment
+variable. During extraction, filename extensions that match one of the items
+in this extension list are swapped in front of the base name of the extracted
+file.
+.TP
+.B \-:
+[all but Acorn, VM/CMS, MVS, Tandem] allows to extract archive members into
+locations outside of the current `` extraction root folder''. For security
+reasons, \fIunzip\fP normally removes ``parent dir'' path components
+(``../'') from the names of extracted file.  This safety feature (new for
+version 5.50) prevents \fIunzip\fP from accidentally writing files to
+``sensitive'' areas outside the active extraction folder tree head.  The
+\fB\-:\fP option lets \fIunzip\fP switch back to its previous, more liberal
+behaviour, to allow exact extraction of (older) archives that used ``../''
+components to create multiple directory trees at the level of the current
+extraction folder.  This option does not enable writing explicitly to the
+root directory (``/'').  To achieve this, it is necessary to set the
+extraction target folder to root (e.g. \fB\-d / \fP).  However, when the
+\fB\-:\fP option is specified, it is still possible to implicitly write to
+the root directory by specifying enough ``../'' path components within the
+zip archive.
+Use this option with extreme caution.
+.TP
+.B \-^
+[Unix only] allow control characters in names of extracted ZIP archive
+entries.  On Unix, a file name may contain any (8-bit) character code with
+the two exception '/' (directory delimiter) and NUL (0x00, the C string
+termination indicator), unless the specific file system has more
+restrictive conventions.  Generally, this allows to embed ASCII control
+characters (or even sophisticated control sequences) in file names, at least
+on 'native' Unix file systems.  However, it may be highly suspicious to
+make use of this Unix "feature".  Embedded control characters in file names
+might have nasty side effects when displayed on screen by some listing code
+without sufficient filtering.  And, for ordinary users, it may be difficult
+to handle such file names (e.g. when trying to specify it for open, copy,
+move, or delete operations).  Therefore, \fIunzip\fP applies a filter by
+default that removes potentially dangerous control characters from the
+extracted file names. The \fB-^\fP option allows to override this filter
+in the rare case that embedded filename control characters are to be
+intentionally restored.
+.TP
+.B \-2
+[VMS] force unconditionally conversion of file names to ODS2-compatible
+names.  The default is to exploit the destination file system, preserving
+case and extended file name characters on an ODS5 destination file system;
+and applying the ODS2-compatibility file name filtering on an ODS2 destination
+file system.
+.PD
+.\" =========================================================================
+.SH "ENVIRONMENT OPTIONS"
+\fIunzip\fP's default behavior may be modified via options placed in
+an environment variable.  This can be done with any option, but it
+is probably most useful with the \fB\-a\fP, \fB\-L\fP, \fB\-C\fP, \fB\-q\fP,
+\fB\-o\fP, or \fB\-n\fP modifiers:  make \fIunzip\fP auto-convert text
+files by default, make it convert filenames from uppercase systems to
+lowercase, make it match names case-insensitively, make it quieter,
+or make it always overwrite or never overwrite files as it extracts
+them.  For example, to make \fIunzip\fP act as quietly as possible, only
+reporting errors, one would use one of the following commands:
+.TP
+  Unix Bourne shell:
+UNZIP=\-qq; export UNZIP
+.TP
+  Unix C shell:
+setenv UNZIP \-qq
+.TP
+  OS/2 or MS-DOS:
+set UNZIP=\-qq
+.TP
+  VMS (quotes for \fIlowercase\fP):
+define UNZIP_OPTS "\-qq"
+.PP
+Environment options are, in effect, considered to be just like any other
+command-line options, except that they are effectively the first options
+on the command line.  To override an environment option, one may use the
+``minus operator'' to remove it.  For instance, to override one of the
+quiet-flags in the example above, use the command
+.PP
+.EX
+unzip \-\-q[\fIother options\fP] zipfile
+.EE
+.PP
+The first hyphen is the normal
+switch character, and the second is a minus sign, acting on the q option.
+Thus the effect here is to cancel one quantum of quietness.  To cancel
+both quiet flags, two (or more) minuses may be used:
+.PP
+.EX
+unzip \-t\-\-q zipfile
+unzip \-\-\-qt zipfile
+.EE
+.PP
+(the two are equivalent).  This may seem awkward
+or confusing, but it is reasonably intuitive:  just ignore the first
+hyphen and go from there.  It is also consistent with the behavior of
+Unix \fInice\fP(1).
+.PP
+As suggested by the examples above, the default variable names are UNZIP_OPTS
+for VMS (where the symbol used to install \fIunzip\fP as a foreign command
+would otherwise be confused with the environment variable), and UNZIP
+for all other operating systems.  For compatibility with \fIzip\fP(1L),
+UNZIPOPT is also accepted (don't ask).  If both UNZIP and UNZIPOPT
+are defined, however, UNZIP takes precedence.  \fIunzip\fP's diagnostic
+option (\fB\-v\fP with no zipfile name) can be used to check the values
+of all four possible \fIunzip\fP and \fIzipinfo\fP environment variables.
+.PP
+The timezone variable (TZ) should be set according to the local timezone
+in order for the \fB\-f\fP and \fB\-u\fP to operate correctly.  See the
+description of \fB\-f\fP above for details.  This variable may also be
+necessary to get timestamps of extracted files to be set correctly.
+The WIN32 (Win9x/ME/NT4/2K/XP/2K3) port of \fIunzip\fP gets the timezone
+configuration from the registry, assuming it is correctly set in the
+Control Panel.  The TZ variable is ignored for this port.
+.PD
+.\" =========================================================================
+.SH DECRYPTION
+Encrypted archives are fully supported by Info-ZIP software, but due to
+United States export restrictions, de-/encryption support might be disabled
+in your compiled binary.  However, since spring 2000, US export restrictions
+have been liberated, and our source archives do now include full crypt code.
+In case you need binary distributions with crypt support enabled, see the
+file ``WHERE'' in any Info-ZIP source or binary distribution for locations
+both inside and outside the US.
+.PP
+Some compiled versions of \fIunzip\fP may not support decryption.
+To check a version for crypt support, either attempt to test or extract
+an encrypted archive, or else check \fIunzip\fP's diagnostic
+screen (see the \fB\-v\fP option above) for ``\fC[decryption]\fR'' as one
+of the special compilation options.
+.PP
+As noted above, the \fB\-P\fP option may be used to supply a password on
+the command line, but at a cost in security.  The preferred decryption
+method is simply to extract normally; if a zipfile member is encrypted,
+\fIunzip\fP will prompt for the password without echoing what is typed.
+\fIunzip\fP continues to use the same password as long as it appears to be
+valid, by testing a 12-byte header on each file.  The correct password will
+always check out against the header, but there is a 1-in-256 chance that an
+incorrect password will as well.  (This is a security feature of the PKWARE
+zipfile format; it helps prevent brute-force attacks that might otherwise
+gain a large speed advantage by testing only the header.)  In the case that
+an incorrect password is given but it passes the header test anyway, either
+an incorrect CRC will be generated for the extracted data or else \fIunzip\fP
+will fail during the extraction because the ``decrypted'' bytes do not
+constitute a valid compressed data stream.
+.PP
+If the first password fails the header check on some file, \fIunzip\fP will
+prompt for another password, and so on until all files are extracted.  If
+a password is not known, entering a null password (that is, just a carriage
+return or ``Enter'') is taken as a signal to skip all further prompting.
+Only unencrypted files in the archive(s) will thereafter be extracted.  (In
+fact, that's not quite true; older versions of \fIzip\fP(1L) and
+\fIzipcloak\fP(1L) allowed null passwords, so \fIunzip\fP checks each encrypted
+file to see if the null password works.  This may result in ``false positives''
+and extraction errors, as noted above.)
+.PP
+Archives encrypted with 8-bit passwords (for example, passwords with accented
+European characters) may not be portable across systems and/or other
+archivers.  This problem stems from the use of multiple encoding methods for
+such characters, including Latin-1 (ISO 8859-1) and OEM code page 850.
+DOS \fIPKZIP\fP 2.04g uses the OEM code page; Windows \fIPKZIP\fP 2.50
+uses Latin-1 (and is therefore incompatible with DOS \fIPKZIP\fP); Info-ZIP
+uses the OEM code page on DOS, OS/2 and Win3.x ports but ISO coding
+(Latin-1 etc.) everywhere else; and Nico Mak's \fIWinZip\fP 6.x does not
+allow 8-bit passwords at all.  \fIUnZip\fP 5.3 (or newer) attempts to use
+the default character set first (e.g., Latin-1), followed by the alternate
+one (e.g., OEM code page) to test passwords.  On EBCDIC systems, if both
+of these fail, EBCDIC encoding will be tested as a last resort.  (EBCDIC is
+not tested on non-EBCDIC systems, because there are no known archivers
+that encrypt using EBCDIC encoding.)  ISO character encodings other than
+Latin-1 are not supported.  The new addition of (partially) Unicode (resp.
+UTF-8) support in \fIUnZip\fP 6.0 has not yet been adapted to the encryption
+password handling in \fIunzip\fP.  On systems that use UTF-8 as native
+character encoding, \fIunzip\fP simply tries decryption with the native
+UTF-8 encoded password; the built-in attempts to check the password in
+translated encoding have not yet been adapted for UTF-8 support and
+will consequently fail.
+.PD
+.\" =========================================================================
+.SH EXAMPLES
+To use \fIunzip\fP to extract all members of the archive \fIletters.zip\fP
+into the current directory and subdirectories below it, creating any
+subdirectories as necessary:
+.PP
+.EX
+unzip letters
+.EE
+.PP
+To extract all members of \fIletters.zip\fP into the current directory only:
+.PP
+.EX
+unzip -j letters
+.EE
+.PP
+To test \fIletters.zip\fP, printing only a summary message indicating
+whether the archive is OK or not:
+.PP
+.EX
+unzip -tq letters
+.EE
+.PP
+To test \fIall\fP zipfiles in the current directory, printing only the
+summaries:
+.PP
+.EX
+unzip -tq \e*.zip
+.EE
+.PP
+(The backslash before the asterisk is only required if the shell expands
+wildcards, as in Unix; double quotes could have been used instead, as in
+the source examples below.)\ \ To extract to standard output all members of
+\fIletters.zip\fP whose names end in \fI.tex\fP, auto-converting to the
+local end-of-line convention and piping the output into \fImore\fP(1):
+.PP
+.EX
+unzip \-ca letters \e*.tex | more
+.EE
+.PP
+To extract the binary file \fIpaper1.dvi\fP to standard output and pipe it
+to a printing program:
+.PP
+.EX
+unzip \-p articles paper1.dvi | dvips
+.EE
+.PP
+To extract all FORTRAN and C source files--*.f, *.c, *.h, and Makefile--into
+the /tmp directory:
+.PP
+.EX
+unzip source.zip "*.[fch]" Makefile -d /tmp
+.EE
+.PP
+(the double quotes are necessary only in Unix and only if globbing is turned
+on).  To extract all FORTRAN and C source files, regardless of case (e.g.,
+both *.c and *.C, and any makefile, Makefile, MAKEFILE or similar):
+.PP
+.EX
+unzip \-C source.zip "*.[fch]" makefile -d /tmp
+.EE
+.PP
+To extract any such files but convert any uppercase MS-DOS or VMS names to
+lowercase and convert the line-endings of all of the files to the local
+standard (without respect to any files that might be marked ``binary''):
+.PP
+.EX
+unzip \-aaCL source.zip "*.[fch]" makefile -d /tmp
+.EE
+.PP
+To extract only newer versions of the files already in the current
+directory, without querying (NOTE:  be careful of unzipping in one timezone a
+zipfile created in another--ZIP archives other than those created by Zip 2.1
+or later contain no timezone information, and a ``newer'' file from an eastern
+timezone may, in fact, be older):
+.PP
+.EX
+unzip \-fo sources
+.EE
+.PP
+To extract newer versions of the files already in the current directory and
+to create any files not already there (same caveat as previous example):
+.PP
+.EX
+unzip \-uo sources
+.EE
+.PP
+To display a diagnostic screen showing which \fIunzip\fP and \fIzipinfo\fP
+options are stored in environment variables, whether decryption support was
+compiled in, the compiler with which \fIunzip\fP was compiled, etc.:
+.PP
+.EX
+unzip \-v
+.EE
+.PP
+In the last five examples, assume that UNZIP or UNZIP_OPTS is set to -q.
+To do a singly quiet listing:
+.PP
+.EX
+unzip \-l file.zip
+.EE
+.PP
+To do a doubly quiet listing:
+.PP
+.EX
+unzip \-ql file.zip
+.EE
+.PP
+(Note that the ``\fC.zip\fR'' is generally not necessary.)  To do a standard
+listing:
+.PP
+.EX
+unzip \-\-ql file.zip
+.EE
+or
+.EX
+unzip \-l\-q file.zip
+.EE
+or
+.EX
+unzip \-l\-\-q file.zip
+.EE
+\fR(Extra minuses in options don't hurt.)
+.PD
+.\" =========================================================================
+.SH TIPS
+The current maintainer, being a lazy sort, finds it very useful to define
+a pair of aliases:  \fCtt\fR for ``\fCunzip \-tq\fR'' and \fCii\fR for
+``\fCunzip \-Z\fR'' (or ``\fCzipinfo\fR'').  One may then simply type
+``\fCtt zipfile\fR'' to test an archive, something that is worth making a
+habit of doing.  With luck \fIunzip\fP will report ``\fCNo errors detected
+in compressed data of zipfile.zip\fR,'' after which one may breathe a sigh
+of relief.
+.PP
+The maintainer also finds it useful to set the UNZIP environment variable
+to ``\fC\-aL\fR'' and is tempted to add ``\fC\-C\fR'' as well.  His ZIPINFO
+variable is set to ``\fC\-z\fR''.
+.PD
+.\" =========================================================================
+.SH DIAGNOSTICS
+The exit status (or error level) approximates the exit codes defined by PKWARE
+and takes on the following values, except under VMS:
+.RS
+.IP 0
+normal; no errors or warnings detected.
+.IP 1
+one or more warning errors were encountered, but processing completed
+successfully anyway.  This includes zipfiles where one or more files
+was skipped due to unsupported compression method or encryption with an
+unknown password.
+.IP 2
+a generic error in the zipfile format was detected.  Processing may have
+completed successfully anyway; some broken zipfiles created by other
+archivers have simple work-arounds.
+.IP 3
+a severe error in the zipfile format was detected.  Processing probably
+failed immediately.
+.IP 4
+\fIunzip\fP was unable to allocate memory for one or more buffers during
+program initialization.
+.IP 5
+\fIunzip\fP was unable to allocate memory or unable to obtain a tty to read
+the decryption password(s).
+.IP 6
+\fIunzip\fP was unable to allocate memory during decompression to disk.
+.IP 7
+\fIunzip\fP was unable to allocate memory during in-memory decompression.
+.IP 8
+[currently not used]
+.IP 9
+the specified zipfiles were not found.
+.IP 10
+invalid options were specified on the command line.
+.IP 11
+no matching files were found.
+.IP 50
+the disk is (or was) full during extraction.
+.IP 51
+the end of the ZIP archive was encountered prematurely.
+.IP 80
+the user aborted \fIunzip\fP prematurely with control-C (or similar)
+.IP 81
+testing or extraction of one or more files failed due to unsupported
+compression methods or unsupported decryption.
+.IP 82
+no files were found due to bad decryption password(s).  (If even one file is
+successfully processed, however, the exit status is 1.)
+.RE
+.PP
+VMS interprets standard Unix (or PC) return values as other, scarier-looking
+things, so \fIunzip\fP instead maps them into VMS-style status codes.  The
+current mapping is as follows:   1 (success) for normal exit, 0x7fff0001
+for warning errors, and (0x7fff000? + 16*normal_unzip_exit_status) for all
+other errors, where the `?' is 2 (error) for \fIunzip\fP values 2, 9-11 and
+80-82, and 4 (fatal error) for the remaining ones (3-8, 50, 51).  In addition,
+there is a compilation option to expand upon this behavior:  defining
+RETURN_CODES results in a human-readable explanation of what the error
+status means.
+.PD
+.\" =========================================================================
+.SH BUGS
+Multi-part archives are not yet supported, except in conjunction with
+\fIzip\fP.  (All parts must be concatenated together in order, and then
+``\fCzip \-F\fR'' (for \fIzip 2.x\fP) or ``\fCzip \-FF\fR'' (for
+\fIzip 3.x\fP) must be performed on the concatenated archive in order to
+``fix'' it.  Also, \fIzip 3.0\fP and later can combine multi-part (split)
+archives into a combined single-file archive using ``\fCzip \-s\- inarchive
+-O outarchive\fR''.  See the \fIzip 3\fP manual page for more information.)
+This will definitely be corrected in the next major release.
+.PP
+Archives read from standard input are not yet supported, except with
+\fIfunzip\fP (and then only the first member of the archive can be extracted).
+.PP
+Archives encrypted with 8-bit passwords (e.g., passwords with accented
+European characters) may not be portable across systems and/or other
+archivers.  See the discussion in \fBDECRYPTION\fP above.
+.PP
+\fIunzip\fP's \fB\-M\fP (``more'') option tries to take into account automatic
+wrapping of long lines. However, the code may fail to detect the correct
+wrapping locations. First, TAB characters (and similar control sequences) are
+not taken into account, they are handled as ordinary printable characters.
+Second, depending on the actual system / OS port, \fIunzip\fP may not detect
+the true screen geometry but rather rely on "commonly used" default dimensions.
+The correct handling of tabs would require the implementation of a query for
+the actual tabulator setup on the output console.
+.PP
+Dates, times and permissions of stored directories are not restored except
+under Unix. (On Windows NT and successors, timestamps are now restored.)
+.PP
+[MS-DOS] When extracting or testing files from an archive on a defective
+floppy diskette, if the ``Fail'' option is chosen from DOS's ``Abort, Retry,
+Fail?'' message, older versions of \fIunzip\fP may hang the system, requiring
+a reboot.  This problem appears to be fixed, but control-C (or control-Break)
+can still be used to terminate \fIunzip\fP.
+.PP
+Under DEC Ultrix, \fIunzip\fP would sometimes fail on long zipfiles (bad CRC,
+not always reproducible).  This was apparently due either to a hardware bug
+(cache memory) or an operating system bug (improper handling of page faults?).
+Since Ultrix has been abandoned in favor of Digital Unix (OSF/1), this may not
+be an issue anymore.
+.PP
+[Unix] Unix special files such as FIFO buffers (named pipes), block devices
+and character devices are not restored even if they are somehow represented
+in the zipfile, nor are hard-linked files relinked.  Basically the only file
+types restored by \fIunzip\fP are regular files, directories and symbolic
+(soft) links.
+.PP
+[OS/2] Extended attributes for existing directories are only updated if the
+\fB\-o\fP (``overwrite all'') option is given.  This is a limitation of the
+operating system; because directories only have a creation time associated
+with them, \fIunzip\fP has no way to determine whether the stored attributes
+are newer or older than those on disk.  In practice this may mean a two-pass
+approach is required:  first unpack the archive normally (with or without
+freshening/updating existing files), then overwrite just the directory entries
+(e.g., ``\fCunzip -o foo */\fR'').
+.PP
+[VMS] When extracting to another directory, only the \fI[.foo]\fP syntax is
+accepted for the \fB\-d\fP option; the simple Unix \fIfoo\fP syntax is
+silently ignored (as is the less common VMS \fIfoo.dir\fP syntax).
+.PP
+[VMS] When the file being extracted already exists, \fIunzip\fP's query only
+allows skipping, overwriting or renaming; there should additionally be a
+choice for creating a new version of the file.  In fact, the ``overwrite''
+choice does create a new version; the old version is not overwritten or
+deleted.
+.PD
+.\" =========================================================================
+.SH "SEE ALSO"
+\fIfunzip\fP(1L), \fIzip\fP(1L), \fIzipcloak\fP(1L), \fIzipgrep\fP(1L),
+\fIzipinfo\fP(1L), \fIzipnote\fP(1L), \fIzipsplit\fP(1L)
+.PD
+.\" =========================================================================
+.SH URL
+The Info-ZIP home page is currently at
+.EX
+\fChttp://www.info-zip.org/pub/infozip/\fR
+.EE
+or
+.EX
+\fCftp://ftp.info-zip.org/pub/infozip/\fR .
+.EE
+.PD
+.\" =========================================================================
+.SH AUTHORS
+The primary Info-ZIP authors (current semi-active members of the Zip-Bugs
+workgroup) are:  Ed Gordon (Zip, general maintenance, shared code, Zip64,
+Win32, Unix, Unicode); Christian Spieler (UnZip maintenance coordination,
+VMS, MS-DOS, Win32, shared code, general Zip and UnZip integration and
+optimization); Onno van der Linden (Zip); Mike White (Win32, Windows GUI,
+Windows DLLs); Kai Uwe Rommel (OS/2, Win32); Steven M. Schweda (VMS, Unix,
+support of new features); Paul Kienitz (Amiga, Win32, Unicode); Chris
+Herborth (BeOS, QNX, Atari); Jonathan Hudson (SMS/QDOS); Sergio Monesi
+(Acorn RISC OS); Harald Denker (Atari, MVS); John Bush (Solaris, Amiga);
+Hunter Goatley (VMS, Info-ZIP Site maintenance); Steve Salisbury (Win32);
+Steve Miller (Windows CE GUI), Johnny Lee (MS-DOS, Win32, Zip64); and Dave
+Smith (Tandem NSK).
+.PP
+The following people were former members of the Info-ZIP development group
+and provided major contributions to key parts of the current code:
+Greg ``Cave Newt'' Roelofs (UnZip, unshrink decompression);
+Jean-loup Gailly (deflate compression);
+Mark Adler (inflate decompression, fUnZip).
+.PP
+The author of the original unzip code upon which Info-ZIP's was based
+is Samuel H. Smith; Carl Mascott did the first Unix port; and David P.
+Kirschbaum organized and led Info-ZIP in its early days with Keith Petersen
+hosting the original mailing list at WSMR-SimTel20.  The full list of
+contributors to UnZip has grown quite large; please refer to the CONTRIBS
+file in the UnZip source distribution for a relatively complete version.
+.PD
+.\" =========================================================================
+.SH VERSIONS
+.ta \w'vx.xxnn'u +\w'fall 1989'u+3n
+.PD 0
+.IP "v1.2\t15 Mar 89" \w'\t\t'u
+Samuel H. Smith
+.IP "v2.0\t\ 9 Sep 89"
+Samuel H. Smith
+.IP "v2.x\tfall 1989"
+many Usenet contributors
+.IP "v3.0\t\ 1 May 90"
+Info-ZIP (DPK, consolidator)
+.IP "v3.1\t15 Aug 90"
+Info-ZIP (DPK, consolidator)
+.IP "v4.0\t\ 1 Dec 90"
+Info-ZIP (GRR, maintainer)
+.IP "v4.1\t12 May 91"
+Info-ZIP
+.IP "v4.2\t20 Mar 92"
+Info-ZIP (Zip-Bugs subgroup, GRR)
+.IP "v5.0\t21 Aug 92"
+Info-ZIP (Zip-Bugs subgroup, GRR)
+.IP "v5.01\t15 Jan 93"
+Info-ZIP (Zip-Bugs subgroup, GRR)
+.IP "v5.1\t\ 7 Feb 94"
+Info-ZIP (Zip-Bugs subgroup, GRR)
+.IP "v5.11\t\ 2 Aug 94"
+Info-ZIP (Zip-Bugs subgroup, GRR)
+.IP "v5.12\t28 Aug 94"
+Info-ZIP (Zip-Bugs subgroup, GRR)
+.IP "v5.2\t30 Apr 96"
+Info-ZIP (Zip-Bugs subgroup, GRR)
+.IP "v5.3\t22 Apr 97"
+Info-ZIP (Zip-Bugs subgroup, GRR)
+.IP "v5.31\t31 May 97"
+Info-ZIP (Zip-Bugs subgroup, GRR)
+.IP "v5.32\t\ 3 Nov 97"
+Info-ZIP (Zip-Bugs subgroup, GRR)
+.IP "v5.4\t28 Nov 98"
+Info-ZIP (Zip-Bugs subgroup, SPC)
+.IP "v5.41\t16 Apr 00"
+Info-ZIP (Zip-Bugs subgroup, SPC)
+.IP "v5.42\t14 Jan 01"
+Info-ZIP (Zip-Bugs subgroup, SPC)
+.IP "v5.5\t17 Feb 02"
+Info-ZIP (Zip-Bugs subgroup, SPC)
+.IP "v5.51\t22 May 04"
+Info-ZIP (Zip-Bugs subgroup, SPC)
+.IP "v5.52\t28 Feb 05"
+Info-ZIP (Zip-Bugs subgroup, SPC)
+.IP "v6.0\t20 Apr 09"
+Info-ZIP (Zip-Bugs subgroup, SPC)
+.PD
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/man
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/man	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/man	(revision 5)

Property changes on: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/man
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/match.c
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/match.c	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/match.c	(revision 5)
@@ -0,0 +1,512 @@
+/*
+  Copyright (c) 1990-2005 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2000-Apr-09 or later
+  (the contents of which are also included in unzip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*---------------------------------------------------------------------------
+
+  match.c
+
+  The match() routine recursively compares a string to a "pattern" (regular
+  expression), returning TRUE if a match is found or FALSE if not.  This
+  version is specifically for use with unzip.c:  as did the previous match()
+  routines from SEA and J. Kercheval, it leaves the case (upper, lower, or
+  mixed) of the string alone, but converts any uppercase characters in the
+  pattern to lowercase if indicated by the global var pInfo->lcflag (which
+  is to say, string is assumed to have been converted to lowercase already,
+  if such was necessary).
+
+  GRR:  reversed order of text, pattern in matche() (now same as match());
+        added ignore_case/ic flags, Case() macro.
+
+  PaulK:  replaced matche() with recmatch() from Zip, modified to have an
+          ignore_case argument; replaced test frame with simpler one.
+
+  ---------------------------------------------------------------------------
+
+  Copyright on recmatch() from Zip's util.c
+	 Copyright (c) 1990-2005 Info-ZIP.  All rights reserved.
+
+	 See the accompanying file LICENSE, version 2004-May-22 or later
+	 for terms of use.
+	 If, for some reason, both of these files are missing, the Info-ZIP license
+	 also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html  
+
+
+  ---------------------------------------------------------------------------
+
+  Match the pattern (wildcard) against the string (fixed):
+
+     match(string, pattern, ignore_case, sepc);
+
+  returns TRUE if string matches pattern, FALSE otherwise.  In the pattern:
+
+     `*' matches any sequence of characters (zero or more)
+     `?' matches any single character
+     [SET] matches any character in the specified set,
+     [!SET] or [^SET] matches any character not in the specified set.
+
+  A set is composed of characters or ranges; a range looks like ``character
+  hyphen character'' (as in 0-9 or A-Z).  [0-9a-zA-Z_] is the minimal set of
+  characters ALlowed in the [..] pattern construct.  Other characters are
+  allowed (i.e., 8-bit characters) if your system will support them.
+
+  To suppress the special syntactic significance of any of ``[]*?!^-\'', in-
+  side or outside a [..] construct, and match the character exactly, precede
+  it with a ``\'' (backslash).
+
+  Note that "*.*" and "*." are treated specially under MS-DOS if DOSWILD is
+  defined.  See the DOSWILD section below for an explanation.  Note also
+  that with VMSWILD defined, '%' is used instead of '?', and sets (ranges)
+  are delimited by () instead of [].
+
+  ---------------------------------------------------------------------------*/
+
+
+#define __MATCH_C       /* identifies this source module */
+
+/* define ToLower() in here (for Unix, define ToLower to be macro (using
+ * isupper()); otherwise just use tolower() */
+#define UNZIP_INTERNAL
+#include "unzip.h"
+
+#ifndef THEOS   /* the Theos port defines its own variant of match() */
+
+#if 0  /* this is not useful until it matches Amiga names insensitively */
+#ifdef AMIGA        /* some other platforms might also want to use this */
+#  define ANSI_CHARSET       /* MOVE INTO UNZIP.H EVENTUALLY */
+#endif
+#endif /* 0 */
+
+#ifdef ANSI_CHARSET
+#  ifdef ToLower
+#    undef ToLower
+#  endif
+   /* uppercase letters are values 41 thru 5A, C0 thru D6, and D8 thru DE */
+#  define IsUpper(c) (c>=0xC0 ? c<=0xDE && c!=0xD7 : c>=0x41 && c<=0x5A)
+#  define ToLower(c) (IsUpper((uch) c) ? (unsigned) c | 0x20 : (unsigned) c)
+#endif
+#define Case(x)  (ic? ToLower(x) : (x))
+
+#ifdef VMSWILD
+#  define WILDCHAR   '%'
+#  define BEG_RANGE  '('
+#  define END_RANGE  ')'
+#else
+#  define WILDCHAR   '?'
+#  define BEG_RANGE  '['
+#  define END_RANGE  ']'
+#  define WILDCHR_SINGLE '?'
+#  define DIRSEP_CHR '/'
+#  define WILDCHR_MULTI '*'
+#endif
+
+#ifdef WILD_STOP_AT_DIR
+   int wild_stop_at_dir = 1; /* default wildcards do not include / in matches */
+#else
+   int wild_stop_at_dir = 0; /* default wildcards do include / in matches */
+#endif
+
+
+
+/*
+ * case mapping functions. case_map is used to ignore case in comparisons,
+ * to_up is used to force upper case even on Unix (for dosify option).
+ */
+#ifdef USE_CASE_MAP
+#  define case_map(c) upper[(c) & 0xff]
+#  define to_up(c)    upper[(c) & 0xff]
+#else
+#  define case_map(c) (c)
+#  define to_up(c)    ((c) >= 'a' && (c) <= 'z' ? (c)-'a'+'A' : (c))
+#endif /* USE_CASE_MAP */
+
+
+#if 0                /* GRR:  add this to unzip.h someday... */
+#if !(defined(MSDOS) && defined(DOSWILD))
+#ifdef WILD_STOP_AT_DIR
+#define match(s,p,ic,sc) (recmatch((ZCONST uch *)p,(ZCONST uch *)s,ic,sc) == 1)
+#else
+#define match(s,p,ic)    (recmatch((ZCONST uch *)p,(ZCONST uch *)s,ic) == 1)
+#endif
+int recmatch OF((ZCONST uch *pattern, ZCONST uch *string,
+                 int ignore_case __WDLPRO));
+#endif
+#endif /* 0 */
+static int recmatch OF((ZCONST char *, ZCONST char *, 
+                        int));
+static char *isshexp OF((ZCONST char *p));
+static int namecmp OF((ZCONST char *s1, ZCONST char *s2));
+
+
+/* match() is a shell to recmatch() to return only Boolean values. */
+
+int match(string, pattern, ignore_case __WDL)
+    ZCONST char *string, *pattern;
+    int ignore_case;
+    __WDLDEF
+{
+#if (defined(MSDOS) && defined(DOSWILD))
+    char *dospattern;
+    int j = strlen(pattern);
+
+/*---------------------------------------------------------------------------
+    Optional MS-DOS preprocessing section:  compare last three chars of the
+    wildcard to "*.*" and translate to "*" if found; else compare the last
+    two characters to "*." and, if found, scan the non-wild string for dots.
+    If in the latter case a dot is found, return failure; else translate the
+    "*." to "*".  In either case, continue with the normal (Unix-like) match
+    procedure after translation.  (If not enough memory, default to normal
+    match.)  This causes "a*.*" and "a*." to behave as MS-DOS users expect.
+  ---------------------------------------------------------------------------*/
+
+    if ((dospattern = (char *)malloc(j+1)) != NULL) {
+        strcpy(dospattern, pattern);
+        if (!strcmp(dospattern+j-3, "*.*")) {
+            dospattern[j-2] = '\0';                    /* nuke the ".*" */
+        } else if (!strcmp(dospattern+j-2, "*.")) {
+            char *p = MBSCHR(string, '.');
+
+            if (p) {   /* found a dot:  match fails */
+                free(dospattern);
+                return 0;
+            }
+            dospattern[j-1] = '\0';                    /* nuke the end "." */
+        }
+        j = recmatch(dospattern, string, ignore_case);
+        free(dospattern);
+        return j == 1;
+    } else
+#endif /* MSDOS && DOSWILD */
+    return recmatch(pattern, string, ignore_case) == 1;
+}
+
+#ifdef _MBCS
+
+char *___tmp_ptr;
+
+#endif
+
+static int recmatch(p, s, ci)
+ZCONST char *p;         /* sh pattern to match */
+ZCONST char *s;         /* string to match it to */
+int ci;                 /* flag: force case-insensitive matching */
+/* Recursively compare the sh pattern p with the string s and return 1 if
+   they match, and 0 or 2 if they don't or if there is a syntax error in the
+   pattern.  This routine recurses on itself no deeper than the number of
+   characters in the pattern. */
+{
+  int c;                /* pattern char or start of range in [-] loop */
+  /* Get first character, the pattern for new recmatch calls follows */
+ /* borrowed from Zip's global.c */
+ int no_wild = 0; 
+ int allow_regex=1;
+  /* This fix provided by akt@m5.dion.ne.jp for Japanese.
+     See 21 July 2006 mail.
+     It only applies when p is pointing to a doublebyte character and
+     things like / and wildcards are not doublebyte.  This probably
+     should not be needed. */
+
+#ifdef _MBCS
+  if (CLEN(p) == 2) {
+    if (CLEN(s) == 2) {
+      return (*p == *s && *(p+1) == *(s+1)) ?
+        recmatch(p + 2, s + 2, ci) : 0;
+    } else {
+      return 0;
+    }
+  }
+#endif /* ?_MBCS */
+
+  c = *POSTINCSTR(p);
+
+  /* If that was the end of the pattern, match if string empty too */
+  if (c == 0)
+    return *s == 0;
+
+  /* '?' (or '%' or '#') matches any character (but not an empty string) */
+  if (c == WILDCHR_SINGLE) {
+    if (wild_stop_at_dir)
+      return (*s && *s != DIRSEP_CHR) ? recmatch(p, s + CLEN(s), ci) : 0;
+    else
+      return *s ? recmatch(p, s + CLEN(s), ci) : 0;
+  }
+
+  /* WILDCHR_MULTI ('*') matches any number of characters, including zero */
+#ifdef AMIGA
+  if (!no_wild && c == '#' && *p == '?')            /* "#?" is Amiga-ese for "*" */
+    c = WILDCHR_MULTI, p++;
+#endif /* AMIGA */
+  if (!no_wild && c == WILDCHR_MULTI)
+  {
+    if (wild_stop_at_dir) {
+      /* Check for an immediately following WILDCHR_MULTI */
+# ifdef AMIGA
+      if ((c = p[0]) == '#' && p[1] == '?') /* "#?" is Amiga-ese for "*" */
+        c = WILDCHR_MULTI, p++;
+      if (c != WILDCHR_MULTI) {
+# else /* !AMIGA */
+      if (*p != WILDCHR_MULTI) {
+# endif /* ?AMIGA */
+        /* Single WILDCHR_MULTI ('*'): this doesn't match slashes */
+        for (; *s && *s != DIRSEP_CHR; INCSTR(s))
+          if ((c = recmatch(p, s, ci)) != 0)
+            return c;
+        /* end of pattern: matched if at end of string, else continue */
+        if (*p == 0)
+          return (*s == 0);
+        /* continue to match if at DIRSEP_CHR in pattern, else give up */
+        return (*p == DIRSEP_CHR || (*p == '\\' && p[1] == DIRSEP_CHR))
+               ? recmatch(p, s, ci) : 2;
+      }
+      /* Two consecutive WILDCHR_MULTI ("**"): this matches DIRSEP_CHR ('/') */
+      p++;        /* move p past the second WILDCHR_MULTI */
+      /* continue with the normal non-WILD_STOP_AT_DIR code */
+    } /* wild_stop_at_dir */
+
+    /* Not wild_stop_at_dir */
+    if (*p == 0)
+      return 1;
+    if (!isshexp((char *)p))
+    {
+      /* optimization for rest of pattern being a literal string */
+
+      /* optimization to handle patterns like *.txt */
+      /* if the first char in the pattern is '*' and there */
+      /* are no other shell expression chars, i.e. a literal string */
+      /* then just compare the literal string at the end */
+
+      ZCONST char *srest;
+
+      srest = s + (strlen(s) - strlen(p));
+      if (srest - s < 0)
+        /* remaining literal string from pattern is longer than rest of
+           test string, there can't be a match
+         */
+        return 0;
+      else
+        /* compare the remaining literal pattern string with the last bytes
+           of the test string to check for a match */
+#ifdef _MBCS
+      {
+        ZCONST char *q = s;
+
+        /* MBCS-aware code must not scan backwards into a string from
+         * the end.
+         * So, we have to move forward by character from our well-known
+         * character position s in the test string until we have advanced
+         * to the srest position.
+         */
+        while (q < srest)
+          INCSTR(q);
+        /* In case the byte *srest is a trailing byte of a multibyte
+         * character, we have actually advanced past the position (srest).
+         * For this case, the match has failed!
+         */
+        if (q != srest)
+          return 0;
+        return ((!ci ? strcmp(p, q) : namecmp(p, q)) == 0);
+      }
+#else /* !_MBCS */
+        return ((!ci ? strcmp(p, srest) : namecmp(p, srest)) == 0);
+#endif /* ?_MBCS */
+    }
+    else
+    {
+      /* pattern contains more wildcards, continue with recursion... */
+      for (; *s; INCSTR(s))
+        if ((c = recmatch(p, s, ci)) != 0)
+          return c;
+      return 2;           /* 2 means give up--shmatch will return false */
+    }
+  }
+
+#ifndef VMS             /* No bracket matching in VMS */
+  /* Parse and process the list of characters and ranges in brackets */
+  if (!no_wild && allow_regex && c == '[')
+  {
+    int e;              /* flag true if next char to be taken literally */
+    ZCONST char *q;     /* pointer to end of [-] group */
+    int r;              /* flag true to match anything but the range */
+
+    if (*s == 0)                        /* need a character to match */
+      return 0;
+    p += (r = (*p == '!' || *p == '^')); /* see if reverse */
+    for (q = p, e = 0; *q; q++)         /* find closing bracket */
+      if (e)
+        e = 0;
+      else
+        if (*q == '\\')
+          e = 1;
+        else if (*q == ']')
+          break;
+    if (*q != ']')                      /* nothing matches if bad syntax */
+      return 0;
+    for (c = 0, e = *p == '-'; p < q; p++)      /* go through the list */
+    {
+      if (e == 0 && *p == '\\')         /* set escape flag if \ */
+        e = 1;
+      else if (e == 0 && *p == '-')     /* set start of range if - */
+        c = *(p-1);
+      else
+      {
+        uch cc = (!ci ? (uch)*s : to_up((uch)*s));
+        uch uc = (uch) c;
+        if (*(p+1) != '-')
+          for (uc = uc ? uc : (uch)*p; uc <= (uch)*p; uc++)
+            /* compare range */
+            if ((!ci ? uc : to_up(uc)) == cc)
+              return r ? 0 : recmatch(q + CLEN(q), s + CLEN(s), ci);
+        c = e = 0;                      /* clear range, escape flags */
+      }
+    }
+    return r ? recmatch(q + CLEN(q), s + CLEN(s), ci) : 0;
+                                        /* bracket match failed */
+  }
+#endif /* !VMS */
+
+  /* If escape ('\'), just compare next character */
+  if (!no_wild && c == '\\')
+    if ((c = *p++) == '\0')             /* if \ at end, then syntax error */
+      return 0;
+
+#ifdef VMS
+  /* 2005-11-06 SMS.
+     Handle "..." wildcard in p with "." or "]" in s.
+  */
+  if ((c == '.') && (*p == '.') && (*(p+ CLEN( p)) == '.') &&
+   ((*s == '.') || (*s == ']')))
+  {
+    /* Match "...]" with "]".  Continue after "]" in both. */
+    if ((*(p+ 2* CLEN( p)) == ']') && (*s == ']'))
+      return recmatch( (p+ 3* CLEN( p)), (s+ CLEN( s)), ci);
+
+    /* Else, look for a reduced match in s, until "]" in or end of s. */
+    for (; *s && (*s != ']'); INCSTR(s))
+      if (*s == '.')
+        /* If reduced match, then continue after "..." in p, "." in s. */
+        if ((c = recmatch( (p+ CLEN( p)), s, ci)) != 0)
+          return (int)c;
+
+    /* Match "...]" with "]".  Continue after "]" in both. */
+    if ((*(p+ 2* CLEN( p)) == ']') && (*s == ']'))
+      return recmatch( (p+ 3* CLEN( p)), (s+ CLEN( s)), ci);
+
+    /* No reduced match.  Quit. */
+    return 2;
+  }
+
+#endif /* def VMS */
+
+  /* Just a character--compare it */
+  return (!ci ? c == *s : to_up((uch)c) == to_up((uch)*s)) ?
+          recmatch(p, s + CLEN(s), ci) : 0;
+}
+
+
+
+
+/*************************************************************************************************/
+static char *isshexp(p)
+ZCONST char *p;
+/* If p is a sh expression, a pointer to the first special character is
+   returned.  Otherwise, NULL is returned. */
+{
+    for (; *p; INCSTR(p))
+        if (*p == '\\' && *(p+1))
+            p++;
+        else if (*p == WILDCHAR || *p == '*' || *p == BEG_RANGE)
+            return (char *)p;
+    return NULL;
+} /* end function isshexp() */
+
+
+
+static int namecmp(s1, s2)
+    ZCONST char *s1, *s2;
+{
+    int d;
+
+    for (;;) {
+        d = (int)ToLower((uch)*s1)
+          - (int)ToLower((uch)*s2);
+
+        if (d || *s1 == 0 || *s2 == 0)
+            return d;
+
+        s1++;
+        s2++;
+    }
+} /* end function namecmp() */
+
+#endif /* !THEOS */
+
+
+
+
+int iswild(p)        /* originally only used for stat()-bug workaround in */
+    ZCONST char *p;  /*  VAX C, Turbo/Borland C, Watcom C, Atari MiNT libs; */
+{                    /*  now used in process_zipfiles() as well */
+    for (; *p; INCSTR(p))
+        if (*p == '\\' && *(p+1))
+            ++p;
+#ifdef THEOS
+        else if (*p == '?' || *p == '*' || *p=='#'|| *p == '@')
+#else /* !THEOS */
+#ifdef VMS
+        else if (*p == '%' || *p == '*')
+#else /* !VMS */
+#ifdef AMIGA
+        else if (*p == '?' || *p == '*' || (*p=='#' && p[1]=='?') || *p == '[')
+#else /* !AMIGA */
+        else if (*p == '?' || *p == '*' || *p == '[')
+#endif /* ?AMIGA */
+#endif /* ?VMS */
+#endif /* ?THEOS */
+#ifdef QDOS
+            return (int)p;
+#else
+            return TRUE;
+#endif
+
+    return FALSE;
+
+} /* end function iswild() */
+
+
+
+
+
+#ifdef TEST_MATCH
+
+#define put(s) {fputs(s,stdout); fflush(stdout);}
+#ifdef main
+#  undef main
+#endif
+
+int main(int argc, char **argv)
+{
+    char pat[256], str[256];
+
+    for (;;) {
+        put("Pattern (return to exit): ");
+        gets(pat);
+        if (!pat[0])
+            break;
+        for (;;) {
+            put("String (return for new pattern): ");
+            gets(str);
+            if (!str[0])
+                break;
+            printf("Case sensitive: %s  insensitive: %s\n",
+              match(str, pat, 0) ? "YES" : "NO",
+              match(str, pat, 1) ? "YES" : "NO");
+        }
+    }
+    EXIT(0);
+}
+
+#endif /* TEST_MATCH */
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/process.c
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/process.c	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/process.c	(revision 5)
@@ -0,0 +1,3170 @@
+/*
+  Copyright (c) 1990-2014 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2009-Jan-02 or later
+  (the contents of which are also included in unzip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*---------------------------------------------------------------------------
+
+  process.c
+
+  This file contains the top-level routines for processing multiple zipfiles.
+
+  Contains:  process_zipfiles()
+             free_G_buffers()
+             do_seekable()
+             file_size()
+             rec_find()
+             find_ecrec64()
+             find_ecrec()
+             process_zip_cmmnt()
+             process_cdir_file_hdr()
+             get_cdir_ent()
+             process_local_file_hdr()
+             getZip64Data()
+             ef_scan_for_izux()
+             getRISCOSexfield()
+
+  ---------------------------------------------------------------------------*/
+
+
+#define UNZIP_INTERNAL
+#include "unzip.h"
+#ifdef WINDLL
+#  ifdef POCKET_UNZIP
+#    include "wince/intrface.h"
+#  else
+#    include "windll/windll.h"
+#  endif
+#endif
+#if defined(DYNALLOC_CRCTAB) || defined(UNICODE_SUPPORT)
+#  include "crc32.h"
+#endif
+
+static int    do_seekable        OF((__GPRO__ int lastchance));
+#ifdef DO_SAFECHECK_2GB
+# ifdef USE_STRM_INPUT
+static zoff_t file_size          OF((FILE *file));
+# else
+static zoff_t file_size          OF((int fh));
+# endif
+#endif /* DO_SAFECHECK_2GB */
+static int    rec_find           OF((__GPRO__ zoff_t, char *, int));
+static int    find_ecrec64       OF((__GPRO__ zoff_t searchlen));
+static int    find_ecrec         OF((__GPRO__ zoff_t searchlen));
+static int    process_zip_cmmnt  OF((__GPRO));
+static int    get_cdir_ent       OF((__GPRO));
+#ifdef IZ_HAVE_UXUIDGID
+static int    read_ux3_value     OF((ZCONST uch *dbuf, unsigned uidgid_sz,
+                                     ulg *p_uidgid));
+#endif /* IZ_HAVE_UXUIDGID */
+
+
+static ZCONST char Far CannotAllocateBuffers[] =
+  "error:  cannot allocate unzip buffers\n";
+
+#ifdef SFX
+   static ZCONST char Far CannotFindMyself[] =
+     "unzipsfx:  cannot find myself! [%s]\n";
+# ifdef CHEAP_SFX_AUTORUN
+   static ZCONST char Far AutorunPrompt[] =
+     "\nAuto-run command: %s\nExecute this command? [y/n] ";
+   static ZCONST char Far NotAutoRunning[] =
+     "Not executing auto-run command.";
+# endif
+
+#else /* !SFX */
+   /* process_zipfiles() strings */
+# if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME))
+     static ZCONST char Far WarnInvalidTZ[] =
+       "Warning: TZ environment variable not found, cannot use UTC times!!\n";
+# endif
+# if !(defined(UNIX) || defined(AMIGA))
+   static ZCONST char Far CannotFindWildcardMatch[] =
+     "%s:  cannot find any matches for wildcard specification \"%s\".\n";
+# endif /* !(UNIX || AMIGA) */
+   static ZCONST char Far FilesProcessOK[] =
+     "%d archive%s successfully processed.\n";
+   static ZCONST char Far ArchiveWarning[] =
+     "%d archive%s had warnings but no fatal errors.\n";
+   static ZCONST char Far ArchiveFatalError[] =
+     "%d archive%s had fatal errors.\n";
+   static ZCONST char Far FileHadNoZipfileDir[] =
+     "%d file%s had no zipfile directory.\n";
+   static ZCONST char Far ZipfileWasDir[] = "1 \"zipfile\" was a directory.\n";
+   static ZCONST char Far ManyZipfilesWereDir[] =
+     "%d \"zipfiles\" were directories.\n";
+   static ZCONST char Far NoZipfileFound[] = "No zipfiles found.\n";
+
+   /* do_seekable() strings */
+# ifdef UNIX
+   static ZCONST char Far CannotFindZipfileDirMsg[] =
+     "%s:  cannot find zipfile directory in one of %s or\n\
+        %s%s.zip, and cannot find %s, period.\n";
+   static ZCONST char Far CannotFindEitherZipfile[] =
+     "%s:  cannot find or open %s, %s.zip or %s.\n";
+# else /* !UNIX */
+   static ZCONST char Far CannotFindZipfileDirMsg[] =
+     "%s:  cannot find zipfile directory in %s,\n\
+        %sand cannot find %s, period.\n";
+# ifdef VMS
+   static ZCONST char Far CannotFindEitherZipfile[] =
+     "%s:  cannot find %s (%s).\n";
+# else /* !VMS */
+   static ZCONST char Far CannotFindEitherZipfile[] =
+     "%s:  cannot find either %s or %s.\n";
+# endif /* ?VMS */
+# endif /* ?UNIX */
+   extern ZCONST char Far Zipnfo[];       /* in unzip.c */
+#ifndef WINDLL
+   static ZCONST char Far Unzip[] = "unzip";
+#else
+   static ZCONST char Far Unzip[] = "UnZip DLL";
+#endif
+#ifdef DO_SAFECHECK_2GB
+   static ZCONST char Far ZipfileTooBig[] =
+     "Trying to read large file (> 2 GiB) without large file support\n";
+#endif /* DO_SAFECHECK_2GB */
+   static ZCONST char Far MaybeExe[] =
+     "note:  %s may be a plain executable, not an archive\n";
+   static ZCONST char Far CentDirNotInZipMsg[] = "\n\
+   [%s]:\n\
+     Zipfile is disk %lu of a multi-disk archive, and this is not the disk on\n\
+     which the central zipfile directory begins (disk %lu).\n";
+   static ZCONST char Far EndCentDirBogus[] =
+     "\nwarning [%s]:  end-of-central-directory record claims this\n\
+  is disk %lu but that the central directory starts on disk %lu; this is a\n\
+  contradiction.  Attempting to process anyway.\n";
+# ifdef NO_MULTIPART
+   static ZCONST char Far NoMultiDiskArcSupport[] =
+     "\nerror [%s]:  zipfile is part of multi-disk archive\n\
+  (sorry, not yet supported).\n";
+   static ZCONST char Far MaybePakBug[] = "warning [%s]:\
+  zipfile claims to be 2nd disk of a 2-part archive;\n\
+  attempting to process anyway.  If no further errors occur, this archive\n\
+  was probably created by PAK v2.51 or earlier.  This bug was reported to\n\
+  NoGate in March 1991 and was supposed to have been fixed by mid-1991; as\n\
+  of mid-1992 it still hadn't been.  (If further errors do occur, archive\n\
+  was probably created by PKZIP 2.04c or later; UnZip does not yet support\n\
+  multi-part archives.)\n";
+# else
+   static ZCONST char Far MaybePakBug[] = "warning [%s]:\
+  zipfile claims to be last disk of a multi-part archive;\n\
+  attempting to process anyway, assuming all parts have been concatenated\n\
+  together in order.  Expect \"errors\" and warnings...true multi-part support\
+\n  doesn't exist yet (coming soon).\n";
+# endif
+   static ZCONST char Far ExtraBytesAtStart[] =
+     "warning [%s]:  %s extra byte%s at beginning or within zipfile\n\
+  (attempting to process anyway)\n";
+#endif /* ?SFX */
+
+#if ((!defined(WINDLL) && !defined(SFX)) || !defined(NO_ZIPINFO))
+   static ZCONST char Far LogInitline[] = "Archive:  %s\n";
+#endif
+
+static ZCONST char Far MissingBytes[] =
+  "error [%s]:  missing %s bytes in zipfile\n\
+  (attempting to process anyway)\n";
+static ZCONST char Far NullCentDirOffset[] =
+  "error [%s]:  NULL central directory offset\n\
+  (attempting to process anyway)\n";
+static ZCONST char Far ZipfileEmpty[] = "warning [%s]:  zipfile is empty\n";
+static ZCONST char Far CentDirStartNotFound[] =
+  "error [%s]:  start of central directory not found;\n\
+  zipfile corrupt.\n%s";
+static ZCONST char Far Cent64EndSigSearchErr[] =
+  "fatal error: read failure while seeking for End-of-centdir-64 signature.\n\
+  This zipfile is corrupt.\n";
+static ZCONST char Far Cent64EndSigSearchOff[] =
+  "error: End-of-centdir-64 signature not where expected (prepended bytes?)\n\
+  (attempting to process anyway)\n";
+#ifndef SFX
+   static ZCONST char Far CentDirTooLong[] =
+     "error [%s]:  reported length of central directory is\n\
+  %s bytes too long (Atari STZip zipfile?  J.H.Holm ZIPSPLIT 1.1\n\
+  zipfile?).  Compensating...\n";
+   static ZCONST char Far CentDirEndSigNotFound[] = "\
+  End-of-central-directory signature not found.  Either this file is not\n\
+  a zipfile, or it constitutes one disk of a multi-part archive.  In the\n\
+  latter case the central directory and zipfile comment will be found on\n\
+  the last disk(s) of this archive.\n";
+#else /* SFX */
+   static ZCONST char Far CentDirEndSigNotFound[] =
+     "  End-of-central-directory signature not found.\n";
+#endif /* ?SFX */
+#ifdef TIMESTAMP
+   static ZCONST char Far ZipTimeStampFailed[] =
+     "warning:  cannot set time for %s\n";
+   static ZCONST char Far ZipTimeStampSuccess[] =
+     "Updated time stamp for %s.\n";
+#endif
+static ZCONST char Far ZipfileCommTrunc1[] =
+  "\ncaution:  zipfile comment truncated\n";
+#ifndef NO_ZIPINFO
+   static ZCONST char Far NoZipfileComment[] =
+     "There is no zipfile comment.\n";
+   static ZCONST char Far ZipfileCommentDesc[] =
+     "The zipfile comment is %u bytes long and contains the following text:\n";
+   static ZCONST char Far ZipfileCommBegin[] =
+     "======================== zipfile comment begins\
+ ==========================\n";
+   static ZCONST char Far ZipfileCommEnd[] =
+     "========================= zipfile comment ends\
+ ===========================\n";
+   static ZCONST char Far ZipfileCommTrunc2[] =
+     "\n  The zipfile comment is truncated.\n";
+#endif /* !NO_ZIPINFO */
+#ifdef UNICODE_SUPPORT
+   static ZCONST char Far UnicodeVersionError[] =
+     "\nwarning:  Unicode Path version > 1\n";
+   static ZCONST char Far UnicodeMismatchError[] =
+     "\nwarning:  Unicode Path checksum invalid\n";
+   static ZCONST char Far UFilenameTooLongTrunc[] =
+     "warning:  filename too long (P1) -- truncating.\n";
+#endif
+
+
+
+
+/*******************************/
+/* Function process_zipfiles() */
+/*******************************/
+
+int process_zipfiles(__G)    /* return PK-type error code */
+    __GDEF
+{
+#ifndef SFX
+    char *lastzipfn = (char *)NULL;
+    int NumWinFiles, NumLoseFiles, NumWarnFiles;
+    int NumMissDirs, NumMissFiles;
+#endif
+    int error=0, error_in_archive=0;
+
+
+/*---------------------------------------------------------------------------
+    Start by allocating buffers and (re)constructing the various PK signature
+    strings.
+  ---------------------------------------------------------------------------*/
+
+    G.inbuf = (uch *)malloc(INBUFSIZ + 4);    /* 4 extra for hold[] (below) */
+    G.outbuf = (uch *)malloc(OUTBUFSIZ + 1);  /* 1 extra for string term. */
+
+    if ((G.inbuf == (uch *)NULL) || (G.outbuf == (uch *)NULL)) {
+        Info(slide, 0x401, ((char *)slide,
+          LoadFarString(CannotAllocateBuffers)));
+        return(PK_MEM);
+    }
+    G.hold = G.inbuf + INBUFSIZ;     /* to check for boundary-spanning sigs */
+#ifndef VMS     /* VMS uses its own buffer scheme for textmode flush(). */
+#ifdef SMALL_MEM
+    G.outbuf2 = G.outbuf+RAWBUFSIZ;  /* never changes */
+#endif
+#endif /* !VMS */
+
+#if 0 /* CRC_32_TAB has been NULLified by CONSTRUCTGLOBALS !!!! */
+    /* allocate the CRC table later when we know we can read zipfile data */
+    CRC_32_TAB = NULL;
+#endif /* 0 */
+
+    /* finish up initialization of magic signature strings */
+    local_hdr_sig[0]  /* = extd_local_sig[0] */ =       /* ASCII 'P', */
+      central_hdr_sig[0] = end_central_sig[0] =         /* not EBCDIC */
+      end_centloc64_sig[0] = end_central64_sig[0] = 0x50;
+
+    local_hdr_sig[1]  /* = extd_local_sig[1] */ =       /* ASCII 'K', */
+      central_hdr_sig[1] = end_central_sig[1] =         /* not EBCDIC */
+      end_centloc64_sig[1] = end_central64_sig[1] = 0x4B;
+
+/*---------------------------------------------------------------------------
+    Make sure timezone info is set correctly; localtime() returns GMT on some
+    OSes (e.g., Solaris 2.x) if this isn't done first.  The ifdefs around
+    tzset() were initially copied from dos_to_unix_time() in fileio.c.  They
+    may still be too strict; any listed OS that supplies tzset(), regardless
+    of whether the function does anything, should be removed from the ifdefs.
+  ---------------------------------------------------------------------------*/
+
+#if (defined(WIN32) && defined(USE_EF_UT_TIME))
+    /* For the Win32 environment, we may have to "prepare" the environment
+       prior to the tzset() call, to work around tzset() implementation bugs.
+     */
+    iz_w32_prepareTZenv();
+#endif
+
+#if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME))
+#  ifndef VALID_TIMEZONE
+#     define VALID_TIMEZONE(tmp) \
+             (((tmp = getenv("TZ")) != NULL) && (*tmp != '\0'))
+#  endif
+    {
+        char *p;
+        G.tz_is_valid = VALID_TIMEZONE(p);
+#  ifndef SFX
+        if (!G.tz_is_valid) {
+            Info(slide, 0x401, ((char *)slide, LoadFarString(WarnInvalidTZ)));
+            error_in_archive = error = PK_WARN;
+        }
+#  endif /* !SFX */
+    }
+#endif /* IZ_CHECK_TZ && USE_EF_UT_TIME */
+
+/* For systems that do not have tzset() but supply this function using another
+   name (_tzset() or something similar), an appropiate "#define tzset ..."
+   should be added to the system specifc configuration section.  */
+#if (!defined(T20_VMS) && !defined(MACOS) && !defined(RISCOS) && !defined(QDOS))
+#if (!defined(BSD) && !defined(MTS) && !defined(CMS_MVS) && !defined(TANDEM))
+    tzset();
+#endif
+#endif
+
+/* Initialize UnZip's built-in pseudo hard-coded "ISO <--> OEM" translation,
+   depending on the detected codepage setup.  */
+#ifdef NEED_ISO_OEM_INIT
+    prepare_ISO_OEM_translat(__G);
+#endif
+
+/*---------------------------------------------------------------------------
+    Initialize the internal flag holding the mode of processing "overwrite
+    existing file" cases.  We do not use the calling interface flags directly
+    because the overwrite mode may be changed by user interaction while
+    processing archive files.  Such a change should not affect the option
+    settings as passed through the DLL calling interface.
+    In case of conflicting options, the 'safer' flag uO.overwrite_none takes
+    precedence.
+  ---------------------------------------------------------------------------*/
+    G.overwrite_mode = (uO.overwrite_none ? OVERWRT_NEVER :
+                        (uO.overwrite_all ? OVERWRT_ALWAYS : OVERWRT_QUERY));
+
+/*---------------------------------------------------------------------------
+    Match (possible) wildcard zipfile specification with existing files and
+    attempt to process each.  If no hits, try again after appending ".zip"
+    suffix.  If still no luck, give up.
+  ---------------------------------------------------------------------------*/
+
+#ifdef SFX
+    if ((error = do_seekable(__G__ 0)) == PK_NOZIP) {
+#ifdef EXE_EXTENSION
+        int len=strlen(G.argv0);
+
+        /* append .exe if appropriate; also .sfx? */
+        if ( (G.zipfn = (char *)malloc(len+sizeof(EXE_EXTENSION))) !=
+             (char *)NULL ) {
+            strcpy(G.zipfn, G.argv0);
+            strcpy(G.zipfn+len, EXE_EXTENSION);
+            error = do_seekable(__G__ 0);
+            free(G.zipfn);
+            G.zipfn = G.argv0;  /* for "cannot find myself" message only */
+        }
+#endif /* EXE_EXTENSION */
+#ifdef WIN32
+        G.zipfn = G.argv0;  /* for "cannot find myself" message only */
+#endif
+    }
+    if (error) {
+        if (error == IZ_DIR)
+            error_in_archive = PK_NOZIP;
+        else
+            error_in_archive = error;
+        if (error == PK_NOZIP)
+            Info(slide, 1, ((char *)slide, LoadFarString(CannotFindMyself),
+              G.zipfn));
+    }
+#ifdef CHEAP_SFX_AUTORUN
+    if (G.autorun_command[0] && !uO.qflag) { /* NO autorun without prompt! */
+        Info(slide, 0x81, ((char *)slide, LoadFarString(AutorunPrompt),
+                      FnFilter1(G.autorun_command)));
+        if (fgets(G.answerbuf, 9, stdin) != (char *)NULL
+            && toupper(*G.answerbuf) == 'Y')
+            system(G.autorun_command);
+        else
+            Info(slide, 1, ((char *)slide, LoadFarString(NotAutoRunning)));
+    }
+#endif /* CHEAP_SFX_AUTORUN */
+
+#else /* !SFX */
+    NumWinFiles = NumLoseFiles = NumWarnFiles = 0;
+    NumMissDirs = NumMissFiles = 0;
+
+    while ((G.zipfn = do_wild(__G__ G.wildzipfn)) != (char *)NULL) {
+        Trace((stderr, "do_wild( %s ) returns %s\n", G.wildzipfn, G.zipfn));
+
+        lastzipfn = G.zipfn;
+
+        /* print a blank line between the output of different zipfiles */
+        if (!uO.qflag  &&  error != PK_NOZIP  &&  error != IZ_DIR
+#ifdef TIMESTAMP
+            && (!uO.T_flag || uO.zipinfo_mode)
+#endif
+            && (NumWinFiles+NumLoseFiles+NumWarnFiles+NumMissFiles) > 0)
+            (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0);
+
+        if ((error = do_seekable(__G__ 0)) == PK_WARN)
+            ++NumWarnFiles;
+        else if (error == IZ_DIR)
+            ++NumMissDirs;
+        else if (error == PK_NOZIP)
+            ++NumMissFiles;
+        else if (error != PK_OK)
+            ++NumLoseFiles;
+        else
+            ++NumWinFiles;
+
+        Trace((stderr, "do_seekable(0) returns %d\n", error));
+        if (error != IZ_DIR && error > error_in_archive)
+            error_in_archive = error;
+#ifdef WINDLL
+        if (error == IZ_CTRLC) {
+            free_G_buffers(__G);
+            return error;
+        }
+#endif
+
+    } /* end while-loop (wildcard zipfiles) */
+
+    if ((NumWinFiles + NumWarnFiles + NumLoseFiles) == 0  &&
+        (NumMissDirs + NumMissFiles) == 1  &&  lastzipfn != (char *)NULL)
+    {
+#if (!defined(UNIX) && !defined(AMIGA)) /* filenames with wildcard characters */
+        if (iswild(G.wildzipfn)) {
+            if (iswild(lastzipfn)) {
+                NumMissDirs = NumMissFiles = 0;
+                error_in_archive = PK_COOL;
+                if (uO.qflag < 3)
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarString(CannotFindWildcardMatch),
+                      LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)),
+                      G.wildzipfn));
+            }
+        } else
+#endif
+        {
+#ifndef VMS
+            /* 2004-11-24 SMS.
+             * VMS has already tried a default file type of ".zip" in
+             * do_wild(), so adding ZSUFX here only causes confusion by
+             * corrupting some valid (though nonexistent) file names.
+             * Complaining below about "fred;4.zip" is unlikely to be
+             * helpful to the victim.
+             */
+            /* 2005-08-14 Chr. Spieler
+             * Although we already "know" the failure result, we call
+             * do_seekable() again with the same zipfile name (and the
+             * lastchance flag set), just to trigger the error report...
+             */
+#if defined(UNIX) || defined(QDOS)
+            char *p =
+#endif
+              strcpy(lastzipfn + strlen(lastzipfn), ZSUFX);
+#endif /* !VMS */
+
+            G.zipfn = lastzipfn;
+
+            NumMissDirs = NumMissFiles = 0;
+            error_in_archive = PK_COOL;
+
+#if defined(UNIX) || defined(QDOS)
+   /* only Unix has case-sensitive filesystems */
+   /* Well FlexOS (sometimes) also has them,  but support is per media */
+   /* and a pig to code for,  so treat as case insensitive for now */
+   /* we do this under QDOS to check for .zip as well as _zip */
+            if ((error = do_seekable(__G__ 0)) == PK_NOZIP || error == IZ_DIR) {
+                if (error == IZ_DIR)
+                    ++NumMissDirs;
+                strcpy(p, ALT_ZSUFX);
+                error = do_seekable(__G__ 1);
+            }
+#else
+            error = do_seekable(__G__ 1);
+#endif
+            Trace((stderr, "do_seekable(1) returns %d\n", error));
+            switch (error) {
+              case PK_WARN:
+                ++NumWarnFiles;
+                break;
+              case IZ_DIR:
+                ++NumMissDirs;
+                error = PK_NOZIP;
+                break;
+              case PK_NOZIP:
+                /* increment again => bug:
+                   "1 file had no zipfile directory." */
+                /* ++NumMissFiles */ ;
+                break;
+              default:
+                if (error)
+                    ++NumLoseFiles;
+                else
+                    ++NumWinFiles;
+                break;
+            }
+
+            if (error > error_in_archive)
+                error_in_archive = error;
+#ifdef WINDLL
+            if (error == IZ_CTRLC) {
+                free_G_buffers(__G);
+                return error;
+            }
+#endif
+        }
+    }
+#endif /* ?SFX */
+
+/*---------------------------------------------------------------------------
+    Print summary of all zipfiles, assuming zipfile spec was a wildcard (no
+    need for a summary if just one zipfile).
+  ---------------------------------------------------------------------------*/
+
+#ifndef SFX
+    if (iswild(G.wildzipfn) && uO.qflag < 3
+#ifdef TIMESTAMP
+        && !(uO.T_flag && !uO.zipinfo_mode && uO.qflag > 1)
+#endif
+                                                    )
+    {
+        if ((NumMissFiles + NumLoseFiles + NumWarnFiles > 0 || NumWinFiles != 1)
+#ifdef TIMESTAMP
+            && !(uO.T_flag && !uO.zipinfo_mode && uO.qflag)
+#endif
+            && !(uO.tflag && uO.qflag > 1))
+            (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0x401);
+        if ((NumWinFiles > 1) ||
+            (NumWinFiles == 1 &&
+             NumMissDirs + NumMissFiles + NumLoseFiles + NumWarnFiles > 0))
+            Info(slide, 0x401, ((char *)slide, LoadFarString(FilesProcessOK),
+              NumWinFiles, (NumWinFiles == 1)? " was" : "s were"));
+        if (NumWarnFiles > 0)
+            Info(slide, 0x401, ((char *)slide, LoadFarString(ArchiveWarning),
+              NumWarnFiles, (NumWarnFiles == 1)? "" : "s"));
+        if (NumLoseFiles > 0)
+            Info(slide, 0x401, ((char *)slide, LoadFarString(ArchiveFatalError),
+              NumLoseFiles, (NumLoseFiles == 1)? "" : "s"));
+        if (NumMissFiles > 0)
+            Info(slide, 0x401, ((char *)slide,
+              LoadFarString(FileHadNoZipfileDir), NumMissFiles,
+              (NumMissFiles == 1)? "" : "s"));
+        if (NumMissDirs == 1)
+            Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileWasDir)));
+        else if (NumMissDirs > 0)
+            Info(slide, 0x401, ((char *)slide,
+              LoadFarString(ManyZipfilesWereDir), NumMissDirs));
+        if (NumWinFiles + NumLoseFiles + NumWarnFiles == 0)
+            Info(slide, 0x401, ((char *)slide, LoadFarString(NoZipfileFound)));
+    }
+#endif /* !SFX */
+
+    /* free allocated memory */
+    free_G_buffers(__G);
+
+    return error_in_archive;
+
+} /* end function process_zipfiles() */
+
+
+
+
+
+/*****************************/
+/* Function free_G_buffers() */
+/*****************************/
+
+void free_G_buffers(__G)     /* releases all memory allocated in global vars */
+    __GDEF
+{
+#ifndef SFX
+    unsigned i;
+#endif
+
+#ifdef SYSTEM_SPECIFIC_DTOR
+    SYSTEM_SPECIFIC_DTOR(__G);
+#endif
+
+    inflate_free(__G);
+    checkdir(__G__ (char *)NULL, END);
+
+#ifdef DYNALLOC_CRCTAB
+    if (CRC_32_TAB) {
+        free_crc_table();
+        CRC_32_TAB = NULL;
+    }
+#endif
+
+   if (G.key != (char *)NULL) {
+        free(G.key);
+        G.key = (char *)NULL;
+   }
+
+   if (G.extra_field != (uch *)NULL) {
+        free(G.extra_field);
+        G.extra_field = (uch *)NULL;
+   }
+
+#if (!defined(VMS) && !defined(SMALL_MEM))
+    /* VMS uses its own buffer scheme for textmode flush() */
+    if (G.outbuf2) {
+        free(G.outbuf2);   /* malloc'd ONLY if unshrink and -a */
+        G.outbuf2 = (uch *)NULL;
+    }
+#endif
+
+    if (G.outbuf)
+        free(G.outbuf);
+    if (G.inbuf)
+        free(G.inbuf);
+    G.inbuf = G.outbuf = (uch *)NULL;
+
+#ifdef UNICODE_SUPPORT
+    if (G.filename_full) {
+        free(G.filename_full);
+        G.filename_full = (char *)NULL;
+        G.fnfull_bufsize = 0;
+    }
+#endif /* UNICODE_SUPPORT */
+
+#ifndef SFX
+    for (i = 0; i < DIR_BLKSIZ; i++) {
+        if (G.info[i].cfilname != (char Far *)NULL) {
+            zffree(G.info[i].cfilname);
+            G.info[i].cfilname = (char Far *)NULL;
+        }
+    }
+#endif
+
+#ifdef MALLOC_WORK
+    if (G.area.Slide) {
+        free(G.area.Slide);
+        G.area.Slide = (uch *)NULL;
+    }
+#endif
+
+} /* end function free_G_buffers() */
+
+
+
+
+
+/**************************/
+/* Function do_seekable() */
+/**************************/
+
+static int do_seekable(__G__ lastchance)        /* return PK-type error code */
+    __GDEF
+    int lastchance;
+{
+#ifndef SFX
+    /* static int no_ecrec = FALSE;  SKM: moved to globals.h */
+    int maybe_exe=FALSE;
+    int too_weird_to_continue=FALSE;
+#ifdef TIMESTAMP
+    time_t uxstamp;
+    ulg nmember = 0L;
+#endif
+#endif
+    int error=0, error_in_archive;
+
+
+/*---------------------------------------------------------------------------
+    Open the zipfile for reading in BINARY mode to prevent CR/LF translation,
+    which would corrupt the bit streams.
+  ---------------------------------------------------------------------------*/
+
+    if (SSTAT(G.zipfn, &G.statbuf) ||
+#ifdef THEOS
+        (error = S_ISLIB(G.statbuf.st_mode)) != 0 ||
+#endif
+        (error = S_ISDIR(G.statbuf.st_mode)) != 0)
+    {
+#ifndef SFX
+        if (lastchance && (uO.qflag < 3)) {
+#if defined(UNIX) || defined(QDOS)
+            if (G.no_ecrec)
+                Info(slide, 1, ((char *)slide,
+                  LoadFarString(CannotFindZipfileDirMsg),
+                  LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)),
+                  G.wildzipfn, uO.zipinfo_mode? "  " : "", G.wildzipfn,
+                  G.zipfn));
+            else
+                Info(slide, 1, ((char *)slide,
+                  LoadFarString(CannotFindEitherZipfile),
+                  LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)),
+                  G.wildzipfn, G.wildzipfn, G.zipfn));
+#else /* !(UNIX || QDOS) */
+            if (G.no_ecrec)
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(CannotFindZipfileDirMsg),
+                  LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)),
+                  G.wildzipfn, uO.zipinfo_mode? "  " : "", G.zipfn));
+            else
+#ifdef VMS
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(CannotFindEitherZipfile),
+                  LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)),
+                  G.wildzipfn,
+                  (*G.zipfn ? G.zipfn : vms_msg_text())));
+#else /* !VMS */
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(CannotFindEitherZipfile),
+                  LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)),
+                  G.wildzipfn, G.zipfn));
+#endif /* ?VMS */
+#endif /* ?(UNIX || QDOS) */
+        }
+#endif /* !SFX */
+        return error? IZ_DIR : PK_NOZIP;
+    }
+    G.ziplen = G.statbuf.st_size;
+
+#ifndef SFX
+#if defined(UNIX) || defined(DOS_OS2_W32) || defined(THEOS)
+    if (G.statbuf.st_mode & S_IEXEC)   /* no extension on Unix exes:  might */
+        maybe_exe = TRUE;               /*  find unzip, not unzip.zip; etc. */
+#endif
+#endif /* !SFX */
+
+#ifdef VMS
+    if (check_format(__G))              /* check for variable-length format */
+        return PK_ERR;
+#endif
+
+    if (open_input_file(__G))   /* this should never happen, given */
+        return PK_NOZIP;        /*  the stat() test above, but... */
+
+#ifdef DO_SAFECHECK_2GB
+    /* Need more care: Do not trust the size returned by stat() but
+       determine it by reading beyond the end of the file. */
+    G.ziplen = file_size(G.zipfd);
+
+    if (G.ziplen == EOF) {
+        Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileTooBig)));
+        /*
+        printf(
+" We need a better error message for: 64-bit file, 32-bit program.\n");
+        */
+        CLOSE_INFILE();
+        return IZ_ERRBF;
+    }
+#endif /* DO_SAFECHECK_2GB */
+
+/*---------------------------------------------------------------------------
+    Find and process the end-of-central-directory header.  UnZip need only
+    check last 65557 bytes of zipfile:  comment may be up to 65535, end-of-
+    central-directory record is 18 bytes, and signature itself is 4 bytes;
+    add some to allow for appended garbage.  Since ZipInfo is often used as
+    a debugging tool, search the whole zipfile if zipinfo_mode is true.
+  ---------------------------------------------------------------------------*/
+
+    G.cur_zipfile_bufstart = 0;
+    G.inptr = G.inbuf;
+
+#if ((!defined(WINDLL) && !defined(SFX)) || !defined(NO_ZIPINFO))
+# if (!defined(WINDLL) && !defined(SFX))
+    if ( (!uO.zipinfo_mode && !uO.qflag
+#  ifdef TIMESTAMP
+          && !uO.T_flag
+#  endif
+         )
+#  ifndef NO_ZIPINFO
+         || (uO.zipinfo_mode && uO.hflag)
+#  endif
+       )
+# else /* not (!WINDLL && !SFX) ==> !NO_ZIPINFO !! */
+    if (uO.zipinfo_mode && uO.hflag)
+# endif /* if..else..: (!WINDLL && !SFX) */
+# ifdef WIN32   /* Win32 console may require codepage conversion for G.zipfn */
+        Info(slide, 0, ((char *)slide, LoadFarString(LogInitline),
+          FnFilter1(G.zipfn)));
+# else
+        Info(slide, 0, ((char *)slide, LoadFarString(LogInitline), G.zipfn));
+# endif
+#endif /* (!WINDLL && !SFX) || !NO_ZIPINFO */
+
+    if ( (error_in_archive = find_ecrec(__G__
+#ifndef NO_ZIPINFO
+                                        uO.zipinfo_mode ? G.ziplen :
+#endif
+                                        MIN(G.ziplen, 66000L)))
+         > PK_WARN )
+    {
+        CLOSE_INFILE();
+
+#ifdef SFX
+        ++lastchance;   /* avoid picky compiler warnings */
+        return error_in_archive;
+#else
+        if (maybe_exe)
+            Info(slide, 0x401, ((char *)slide, LoadFarString(MaybeExe),
+            G.zipfn));
+        if (lastchance)
+            return error_in_archive;
+        else {
+            G.no_ecrec = TRUE;    /* assume we found wrong file:  e.g., */
+            return PK_NOZIP;       /*  unzip instead of unzip.zip */
+        }
+#endif /* ?SFX */
+    }
+
+    if ((uO.zflag > 0) && !uO.zipinfo_mode) { /* unzip: zflag = comment ONLY */
+        CLOSE_INFILE();
+        return error_in_archive;
+    }
+
+/*---------------------------------------------------------------------------
+    Test the end-of-central-directory info for incompatibilities (multi-disk
+    archives) or inconsistencies (missing or extra bytes in zipfile).
+  ---------------------------------------------------------------------------*/
+
+#ifdef NO_MULTIPART
+    error = !uO.zipinfo_mode && (G.ecrec.number_this_disk == 1) &&
+            (G.ecrec.num_disk_start_cdir == 1);
+#else
+    error = !uO.zipinfo_mode && (G.ecrec.number_this_disk != 0);
+#endif
+
+#ifndef SFX
+    if (uO.zipinfo_mode &&
+        G.ecrec.number_this_disk != G.ecrec.num_disk_start_cdir)
+    {
+        if (G.ecrec.number_this_disk > G.ecrec.num_disk_start_cdir) {
+            Info(slide, 0x401, ((char *)slide,
+              LoadFarString(CentDirNotInZipMsg), G.zipfn,
+              (ulg)G.ecrec.number_this_disk,
+              (ulg)G.ecrec.num_disk_start_cdir));
+            error_in_archive = PK_FIND;
+            too_weird_to_continue = TRUE;
+        } else {
+            Info(slide, 0x401, ((char *)slide,
+              LoadFarString(EndCentDirBogus), G.zipfn,
+              (ulg)G.ecrec.number_this_disk,
+              (ulg)G.ecrec.num_disk_start_cdir));
+            error_in_archive = PK_WARN;
+        }
+#ifdef NO_MULTIPART   /* concatenation of multiple parts works in some cases */
+    } else if (!uO.zipinfo_mode && !error && G.ecrec.number_this_disk != 0) {
+        Info(slide, 0x401, ((char *)slide, LoadFarString(NoMultiDiskArcSupport),
+          G.zipfn));
+        error_in_archive = PK_FIND;
+        too_weird_to_continue = TRUE;
+#endif
+    }
+
+    if (!too_weird_to_continue) {  /* (relatively) normal zipfile:  go for it */
+        if (error) {
+            Info(slide, 0x401, ((char *)slide, LoadFarString(MaybePakBug),
+              G.zipfn));
+            error_in_archive = PK_WARN;
+        }
+#endif /* !SFX */
+        if ((G.extra_bytes = G.real_ecrec_offset-G.expect_ecrec_offset) <
+            (zoff_t)0)
+        {
+            Info(slide, 0x401, ((char *)slide, LoadFarString(MissingBytes),
+              G.zipfn, FmZofft((-G.extra_bytes), NULL, NULL)));
+            error_in_archive = PK_ERR;
+        } else if (G.extra_bytes > 0) {
+            if ((G.ecrec.offset_start_central_directory == 0) &&
+                (G.ecrec.size_central_directory != 0))   /* zip 1.5 -go bug */
+            {
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(NullCentDirOffset), G.zipfn));
+                G.ecrec.offset_start_central_directory = G.extra_bytes;
+                G.extra_bytes = 0;
+                error_in_archive = PK_ERR;
+            }
+#ifndef SFX
+            else {
+                Info(slide, 0x401, ((char *)slide,
+                  LoadFarString(ExtraBytesAtStart), G.zipfn,
+                  FmZofft(G.extra_bytes, NULL, NULL),
+                  (G.extra_bytes == 1)? "":"s"));
+                error_in_archive = PK_WARN;
+            }
+#endif /* !SFX */
+        }
+
+    /*-----------------------------------------------------------------------
+        Check for empty zipfile and exit now if so.
+      -----------------------------------------------------------------------*/
+
+        if (G.expect_ecrec_offset==0L && G.ecrec.size_central_directory==0) {
+            if (uO.zipinfo_mode)
+                Info(slide, 0, ((char *)slide, "%sEmpty zipfile.\n",
+                  uO.lflag>9? "\n  " : ""));
+            else
+                Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileEmpty),
+                                    G.zipfn));
+            CLOSE_INFILE();
+            return (error_in_archive > PK_WARN)? error_in_archive : PK_WARN;
+        }
+
+    /*-----------------------------------------------------------------------
+        Compensate for missing or extra bytes, and seek to where the start
+        of central directory should be.  If header not found, uncompensate
+        and try again (necessary for at least some Atari archives created
+        with STZip, as well as archives created by J.H. Holm's ZIPSPLIT 1.1).
+      -----------------------------------------------------------------------*/
+
+        error = seek_zipf(__G__ G.ecrec.offset_start_central_directory);
+        if (error == PK_BADERR) {
+            CLOSE_INFILE();
+            return PK_BADERR;
+        }
+#ifdef OLD_SEEK_TEST
+        if (error != PK_OK || readbuf(__G__ G.sig, 4) == 0) {
+            CLOSE_INFILE();
+            return PK_ERR;  /* file may be locked, or possibly disk error(?) */
+        }
+        if (memcmp(G.sig, central_hdr_sig, 4))
+#else
+        if ((error != PK_OK) || (readbuf(__G__ G.sig, 4) == 0) ||
+            memcmp(G.sig, central_hdr_sig, 4))
+#endif
+        {
+#ifndef SFX
+            zoff_t tmp = G.extra_bytes;
+#endif
+
+            G.extra_bytes = 0;
+            error = seek_zipf(__G__ G.ecrec.offset_start_central_directory);
+            if ((error != PK_OK) || (readbuf(__G__ G.sig, 4) == 0) ||
+                memcmp(G.sig, central_hdr_sig, 4))
+            {
+                if (error != PK_BADERR)
+                  Info(slide, 0x401, ((char *)slide,
+                    LoadFarString(CentDirStartNotFound), G.zipfn,
+                    LoadFarStringSmall(ReportMsg)));
+                CLOSE_INFILE();
+                return (error != PK_OK ? error : PK_BADERR);
+            }
+#ifndef SFX
+            Info(slide, 0x401, ((char *)slide, LoadFarString(CentDirTooLong),
+              G.zipfn, FmZofft((-tmp), NULL, NULL)));
+#endif
+            error_in_archive = PK_ERR;
+        }
+
+    /*-----------------------------------------------------------------------
+        Seek to the start of the central directory one last time, since we
+        have just read the first entry's signature bytes; then list, extract
+        or test member files as instructed, and close the zipfile.
+      -----------------------------------------------------------------------*/
+
+        error = seek_zipf(__G__ G.ecrec.offset_start_central_directory);
+        if (error != PK_OK) {
+            CLOSE_INFILE();
+            return error;
+        }
+
+        Trace((stderr, "about to extract/list files (error = %d)\n",
+          error_in_archive));
+
+#ifdef DLL
+        /* G.fValidate is used only to look at an archive to see if
+           it appears to be a valid archive.  There is no interest
+           in what the archive contains, nor in validating that the
+           entries in the archive are in good condition.  This is
+           currently used only in the Windows DLLs for purposes of
+           checking archives within an archive to determine whether
+           or not to display the inner archives.
+         */
+        if (!G.fValidate)
+#endif
+        {
+#ifndef NO_ZIPINFO
+            if (uO.zipinfo_mode)
+                error = zipinfo(__G);                 /* ZIPINFO 'EM */
+            else
+#endif
+#ifndef SFX
+#ifdef TIMESTAMP
+            if (uO.T_flag)
+                error = get_time_stamp(__G__ &uxstamp, &nmember);
+            else
+#endif
+            if (uO.vflag && !uO.tflag && !uO.cflag)
+                error = list_files(__G);              /* LIST 'EM */
+            else
+#endif /* !SFX */
+                error = extract_or_test_files(__G);   /* EXTRACT OR TEST 'EM */
+
+            Trace((stderr, "done with extract/list files (error = %d)\n",
+                   error));
+        }
+
+        if (error > error_in_archive)   /* don't overwrite stronger error */
+            error_in_archive = error;   /*  with (for example) a warning */
+#ifndef SFX
+    } /* end if (!too_weird_to_continue) */
+#endif
+
+    CLOSE_INFILE();
+
+#ifdef TIMESTAMP
+    if (uO.T_flag && !uO.zipinfo_mode && (nmember > 0L)) {
+# ifdef WIN32
+        if (stamp_file(__G__ G.zipfn, uxstamp)) {       /* TIME-STAMP 'EM */
+# else
+        if (stamp_file(G.zipfn, uxstamp)) {             /* TIME-STAMP 'EM */
+# endif
+            if (uO.qflag < 3)
+                Info(slide, 0x201, ((char *)slide,
+                  LoadFarString(ZipTimeStampFailed), G.zipfn));
+            if (error_in_archive < PK_WARN)
+                error_in_archive = PK_WARN;
+        } else {
+            if (!uO.qflag)
+                Info(slide, 0, ((char *)slide,
+                  LoadFarString(ZipTimeStampSuccess), G.zipfn));
+        }
+    }
+#endif
+    return error_in_archive;
+
+} /* end function do_seekable() */
+
+
+
+
+#ifdef DO_SAFECHECK_2GB
+/************************/
+/* Function file_size() */
+/************************/
+/* File size determination which does not mislead for large files in a
+   small-file program.  Probably should be somewhere else.
+   The file has to be opened previously
+*/
+#ifdef USE_STRM_INPUT
+static zoff_t file_size(file)
+    FILE *file;
+{
+    int sts;
+    size_t siz;
+#else /* !USE_STRM_INPUT */
+static zoff_t file_size(fh)
+    int fh;
+{
+    int siz;
+#endif /* ?USE_STRM_INPUT */
+    zoff_t ofs;
+    char waste[4];
+
+#ifdef USE_STRM_INPUT
+    /* Seek to actual EOF. */
+    sts = zfseeko(file, 0, SEEK_END);
+    if (sts != 0) {
+        /* fseeko() failed.  (Unlikely.) */
+        ofs = EOF;
+    } else {
+        /* Get apparent offset at EOF. */
+        ofs = zftello(file);
+        if (ofs < 0) {
+            /* Offset negative (overflow).  File too big. */
+            ofs = EOF;
+        } else {
+            /* Seek to apparent EOF offset.
+               Won't be at actual EOF if offset was truncated.
+            */
+            sts = zfseeko(file, ofs, SEEK_SET);
+            if (sts != 0) {
+                /* fseeko() failed.  (Unlikely.) */
+                ofs = EOF;
+            } else {
+                /* Read a byte at apparent EOF.  Should set EOF flag. */
+                siz = fread(waste, 1, 1, file);
+                if (feof(file) == 0) {
+                    /* Not at EOF, but should be.  File too big. */
+                    ofs = EOF;
+                }
+            }
+        }
+    }
+#else /* !USE_STRM_INPUT */
+    /* Seek to actual EOF. */
+    ofs = zlseek(fh, 0, SEEK_END);
+    if (ofs == (zoff_t) -1) {
+        /* zlseek() failed.  (Unlikely.) */
+        ofs = EOF;
+    } else if (ofs < 0) {
+        /* Offset negative (overflow).  File too big. */
+        ofs = EOF;
+    } else {
+        /* Seek to apparent EOF offset.
+           Won't be at actual EOF if offset was truncated.
+        */
+        ofs = zlseek(fh, ofs, SEEK_SET);
+        if (ofs == (zoff_t) -1) {
+            /* zlseek() failed.  (Unlikely.) */
+            ofs = EOF;
+        } else {
+            /* Read a byte at apparent EOF.  Should set EOF flag. */
+            siz = read(fh, waste, 1);
+            if (siz != 0) {
+                /* Not at EOF, but should be.  File too big. */
+                ofs = EOF;
+            }
+        }
+    }
+#endif /* ?USE_STRM_INPUT */
+    return ofs;
+} /* end function file_size() */
+#endif /* DO_SAFECHECK_2GB */
+
+
+
+
+/***********************/
+/* Function rec_find() */
+/***********************/
+
+static int rec_find(__G__ searchlen, signature, rec_size)
+    /* return 0 when rec found, 1 when not found, 2 in case of read error */
+    __GDEF
+    zoff_t searchlen;
+    char* signature;
+    int rec_size;
+{
+    int i, numblks, found=FALSE;
+    zoff_t tail_len;
+
+/*---------------------------------------------------------------------------
+    Zipfile is longer than INBUFSIZ:  may need to loop.  Start with short
+    block at end of zipfile (if not TOO short).
+  ---------------------------------------------------------------------------*/
+
+    if ((tail_len = G.ziplen % INBUFSIZ) > rec_size) {
+#ifdef USE_STRM_INPUT
+        zfseeko(G.zipfd, G.ziplen-tail_len, SEEK_SET);
+        G.cur_zipfile_bufstart = zftello(G.zipfd);
+#else /* !USE_STRM_INPUT */
+        G.cur_zipfile_bufstart = zlseek(G.zipfd, G.ziplen-tail_len, SEEK_SET);
+#endif /* ?USE_STRM_INPUT */
+        if ((G.incnt = read(G.zipfd, (char *)G.inbuf,
+            (unsigned int)tail_len)) != (int)tail_len)
+            return 2;      /* it's expedient... */
+
+        /* 'P' must be at least (rec_size+4) bytes from end of zipfile */
+        for (G.inptr = G.inbuf+(int)tail_len-(rec_size+4);
+             G.inptr >= G.inbuf;
+             --G.inptr) {
+            if ( (*G.inptr == (uch)0x50) &&         /* ASCII 'P' */
+                 !memcmp((char *)G.inptr, signature, 4) ) {
+                G.incnt -= (int)(G.inptr - G.inbuf);
+                found = TRUE;
+                break;
+            }
+        }
+        /* sig may span block boundary: */
+        memcpy((char *)G.hold, (char *)G.inbuf, 3);
+    } else
+        G.cur_zipfile_bufstart = G.ziplen - tail_len;
+
+/*-----------------------------------------------------------------------
+    Loop through blocks of zipfile data, starting at the end and going
+    toward the beginning.  In general, need not check whole zipfile for
+    signature, but may want to do so if testing.
+  -----------------------------------------------------------------------*/
+
+    numblks = (int)((searchlen - tail_len + (INBUFSIZ-1)) / INBUFSIZ);
+    /*               ==amount=   ==done==   ==rounding==    =blksiz=  */
+
+    for (i = 1;  !found && (i <= numblks);  ++i) {
+        G.cur_zipfile_bufstart -= INBUFSIZ;
+#ifdef USE_STRM_INPUT
+        zfseeko(G.zipfd, G.cur_zipfile_bufstart, SEEK_SET);
+#else /* !USE_STRM_INPUT */
+        zlseek(G.zipfd, G.cur_zipfile_bufstart, SEEK_SET);
+#endif /* ?USE_STRM_INPUT */
+        if ((G.incnt = read(G.zipfd,(char *)G.inbuf,INBUFSIZ))
+            != INBUFSIZ)
+            return 2;          /* read error is fatal failure */
+
+        for (G.inptr = G.inbuf+INBUFSIZ-1;  G.inptr >= G.inbuf; --G.inptr)
+            if ( (*G.inptr == (uch)0x50) &&         /* ASCII 'P' */
+                 !memcmp((char *)G.inptr, signature, 4) ) {
+                G.incnt -= (int)(G.inptr - G.inbuf);
+                found = TRUE;
+                break;
+            }
+        /* sig may span block boundary: */
+        memcpy((char *)G.hold, (char *)G.inbuf, 3);
+    }
+    return (found ? 0 : 1);
+} /* end function rec_find() */
+
+
+
+
+#if 0
+/********************************/
+/* Function check_ecrec_zip64() */
+/********************************/
+
+static int check_ecrec_zip64(__G)
+    __GDEF
+{
+    return G.ecrec.offset_start_central_directory  == 0xFFFFFFFFL
+        || G.ecrec.size_central_directory          == 0xFFFFFFFFL
+        || G.ecrec.total_entries_central_dir       == 0xFFFF
+        || G.ecrec.num_entries_centrl_dir_ths_disk == 0xFFFF
+        || G.ecrec.num_disk_start_cdir             == 0xFFFF
+        || G.ecrec.number_this_disk                == 0xFFFF;
+} /* end function check_ecrec_zip64() */
+#endif /* never */
+
+
+
+/***************************/
+/* Function find_ecrec64() */
+/***************************/
+
+static int find_ecrec64(__G__ searchlen)         /* return PK-class error */
+    __GDEF
+    zoff_t searchlen;
+{
+    ec_byte_rec64 byterec;          /* buf for ecrec64 */
+    ec_byte_loc64 byterecL;         /* buf for ecrec64 locator */
+    zoff_t ecloc64_start_offset;    /* start offset of ecrec64 locator */
+    zusz_t ecrec64_start_offset;    /* start offset of ecrec64 */
+    zuvl_t ecrec64_start_disk;      /* start disk of ecrec64 */
+    zuvl_t ecloc64_total_disks;     /* total disks */
+    zuvl_t ecrec64_disk_cdstart;    /* disk number of central dir start */
+    zucn_t ecrec64_this_entries;    /* entries on disk with ecrec64 */
+    zucn_t ecrec64_tot_entries;     /* total number of entries */
+    zusz_t ecrec64_cdirsize;        /* length of central dir */
+    zusz_t ecrec64_offs_cdstart;    /* offset of central dir start */
+
+    /* First, find the ecrec64 locator.  By definition, this must be before
+       ecrec with nothing in between.  We back up the size of the ecrec64
+       locator and check.  */
+
+    ecloc64_start_offset = G.real_ecrec_offset - (ECLOC64_SIZE+4);
+    if (ecloc64_start_offset < 0)
+      /* Seeking would go past beginning, so probably empty archive */
+      return PK_COOL;
+
+#ifdef USE_STRM_INPUT
+    zfseeko(G.zipfd, ecloc64_start_offset, SEEK_SET);
+    G.cur_zipfile_bufstart = zftello(G.zipfd);
+#else /* !USE_STRM_INPUT */
+    G.cur_zipfile_bufstart = zlseek(G.zipfd, ecloc64_start_offset, SEEK_SET);
+#endif /* ?USE_STRM_INPUT */
+
+    if ((G.incnt = read(G.zipfd, (char *)byterecL, ECLOC64_SIZE+4))
+        != (ECLOC64_SIZE+4)) {
+      if (uO.qflag || uO.zipinfo_mode)
+          Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn));
+      Info(slide, 0x401, ((char *)slide,
+        LoadFarString(Cent64EndSigSearchErr)));
+      return PK_ERR;
+    }
+
+    if (memcmp((char *)byterecL, end_centloc64_sig, 4) ) {
+      /* not found */
+      return PK_COOL;
+    }
+
+    /* Read the locator. */
+    ecrec64_start_disk = (zuvl_t)makelong(&byterecL[NUM_DISK_START_EOCDR64]);
+    ecrec64_start_offset = (zusz_t)makeint64(&byterecL[OFFSET_START_EOCDR64]);
+    ecloc64_total_disks = (zuvl_t)makelong(&byterecL[NUM_THIS_DISK_LOC64]);
+
+    /* Check for consistency */
+#ifdef TEST
+    fprintf(stdout,"\nnumber of disks (ECR) %u, (ECLOC64) %lu\n",
+            G.ecrec.number_this_disk, ecloc64_total_disks); fflush(stdout);
+#endif
+    if ((G.ecrec.number_this_disk != 0xFFFF) &&
+        (G.ecrec.number_this_disk != ecloc64_total_disks - 1)) {
+      /* Note: For some unknown reason, the developers at PKWARE decided to
+         store the "zip64 total disks" value as a counter starting from 1,
+         whereas all other "split/span volume" related fields use 0-based
+         volume numbers. Sigh... */
+      /* When the total number of disks as found in the traditional ecrec
+         is not 0xFFFF, the disk numbers in ecrec and ecloc64 must match.
+         When this is not the case, the found ecrec64 locator cannot be valid.
+         -> This is not a Zip64 archive.
+       */
+      Trace((stderr,
+             "\ninvalid ECLOC64, differing disk# (ECR %u, ECL64 %lu)\n",
+             G.ecrec.number_this_disk, ecloc64_total_disks - 1));
+      return PK_COOL;
+    }
+
+    /* If found locator, look for ecrec64 where the locator says it is. */
+
+    /* For now assume that ecrec64 is on the same disk as ecloc64 and ecrec,
+       which is usually the case and is how Zip writes it.  To do this right,
+       however, we should allow the ecrec64 to be on another disk since
+       the AppNote allows it and the ecrec64 can be large, especially if
+       Version 2 is used (AppNote uses 8 bytes for the size of this record). */
+
+    /* FIX BELOW IF ADD SUPPORT FOR MULTIPLE DISKS */
+
+    if (ecrec64_start_offset > (zusz_t)ecloc64_start_offset) {
+      /* ecrec64 has to be before ecrec64 locator */
+      if (uO.qflag || uO.zipinfo_mode)
+          Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn));
+      Info(slide, 0x401, ((char *)slide,
+        LoadFarString(Cent64EndSigSearchErr)));
+      return PK_ERR;
+    }
+
+#ifdef USE_STRM_INPUT
+    zfseeko(G.zipfd, ecrec64_start_offset, SEEK_SET);
+    G.cur_zipfile_bufstart = zftello(G.zipfd);
+#else /* !USE_STRM_INPUT */
+    G.cur_zipfile_bufstart = zlseek(G.zipfd, ecrec64_start_offset, SEEK_SET);
+#endif /* ?USE_STRM_INPUT */
+
+    if ((G.incnt = read(G.zipfd, (char *)byterec, ECREC64_SIZE+4))
+        != (ECREC64_SIZE+4)) {
+      if (uO.qflag || uO.zipinfo_mode)
+          Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn));
+      Info(slide, 0x401, ((char *)slide,
+        LoadFarString(Cent64EndSigSearchErr)));
+      return PK_ERR;
+    }
+
+    if (memcmp((char *)byterec, end_central64_sig, 4) ) {
+      /* Zip64 EOCD Record not found */
+      /* Since we already have seen the Zip64 EOCD Locator, it's
+         possible we got here because there are bytes prepended
+         to the archive, like the sfx prefix. */
+
+      /* Make a guess as to where the Zip64 EOCD Record might be */
+      ecrec64_start_offset = ecloc64_start_offset - ECREC64_SIZE - 4;
+
+#ifdef USE_STRM_INPUT
+      zfseeko(G.zipfd, ecrec64_start_offset, SEEK_SET);
+      G.cur_zipfile_bufstart = zftello(G.zipfd);
+#else /* !USE_STRM_INPUT */
+      G.cur_zipfile_bufstart = zlseek(G.zipfd, ecrec64_start_offset, SEEK_SET);
+#endif /* ?USE_STRM_INPUT */
+
+      if ((G.incnt = read(G.zipfd, (char *)byterec, ECREC64_SIZE+4))
+          != (ECREC64_SIZE+4)) {
+        if (uO.qflag || uO.zipinfo_mode)
+            Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn));
+        Info(slide, 0x401, ((char *)slide,
+          LoadFarString(Cent64EndSigSearchErr)));
+        return PK_ERR;
+      }
+
+      if (memcmp((char *)byterec, end_central64_sig, 4) ) {
+        /* Zip64 EOCD Record not found */
+        /* Probably something not so easy to handle so exit */
+        if (uO.qflag || uO.zipinfo_mode)
+            Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn));
+        Info(slide, 0x401, ((char *)slide,
+          LoadFarString(Cent64EndSigSearchErr)));
+        return PK_ERR;
+      }
+
+      if (uO.qflag || uO.zipinfo_mode)
+          Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn));
+      Info(slide, 0x401, ((char *)slide,
+        LoadFarString(Cent64EndSigSearchOff)));
+    }
+
+    /* Check consistency of found ecrec64 with ecloc64 (and ecrec): */
+    if ( (zuvl_t)makelong(&byterec[NUMBER_THIS_DSK_REC64])
+         != ecrec64_start_disk )
+        /* found ecrec64 does not match ecloc64 info -> no Zip64 archive */
+        return PK_COOL;
+    /* Read all relevant ecrec64 fields and compare them to the corresponding
+       ecrec fields unless those are set to "all-ones".
+     */
+    ecrec64_disk_cdstart =
+      (zuvl_t)makelong(&byterec[NUM_DISK_START_CEN_DIR64]);
+    if ( (G.ecrec.num_disk_start_cdir != 0xFFFF) &&
+         (G.ecrec.num_disk_start_cdir != ecrec64_disk_cdstart) )
+        return PK_COOL;
+    ecrec64_this_entries
+      = makeint64(&byterec[NUM_ENTRIES_CEN_DIR_THS_DISK64]);
+    if ( (G.ecrec.num_entries_centrl_dir_ths_disk != 0xFFFF) &&
+         (G.ecrec.num_entries_centrl_dir_ths_disk != ecrec64_this_entries) )
+        return PK_COOL;
+    ecrec64_tot_entries
+      = makeint64(&byterec[TOTAL_ENTRIES_CENTRAL_DIR64]);
+    if ( (G.ecrec.total_entries_central_dir != 0xFFFF) &&
+         (G.ecrec.total_entries_central_dir != ecrec64_tot_entries) )
+        return PK_COOL;
+    ecrec64_cdirsize
+      = makeint64(&byterec[SIZE_CENTRAL_DIRECTORY64]);
+    if ( (G.ecrec.size_central_directory != 0xFFFFFFFFL) &&
+         (G.ecrec.size_central_directory != ecrec64_cdirsize) )
+        return PK_COOL;
+    ecrec64_offs_cdstart
+      = makeint64(&byterec[OFFSET_START_CENTRAL_DIRECT64]);
+    if ( (G.ecrec.offset_start_central_directory != 0xFFFFFFFFL) &&
+         (G.ecrec.offset_start_central_directory != ecrec64_offs_cdstart) )
+        return PK_COOL;
+
+    /* Now, we are (almost) sure that we have a Zip64 archive. */
+    G.ecrec.have_ecr64 = 1;
+
+    /* Update the "end-of-central-dir offset" for later checks. */
+    G.real_ecrec_offset = ecrec64_start_offset;
+
+    /* Update all ecdir_rec data that are flagged to be invalid
+       in Zip64 mode.  Set the ecrec64-mandatory flag when such a
+       case is found. */
+    if (G.ecrec.number_this_disk == 0xFFFF) {
+      G.ecrec.number_this_disk = ecrec64_start_disk;
+      if (ecrec64_start_disk != 0xFFFF) G.ecrec.is_zip64_archive = TRUE;
+    }
+    if (G.ecrec.num_disk_start_cdir == 0xFFFF) {
+      G.ecrec.num_disk_start_cdir = ecrec64_disk_cdstart;
+      if (ecrec64_disk_cdstart != 0xFFFF) G.ecrec.is_zip64_archive = TRUE;
+    }
+    if (G.ecrec.num_entries_centrl_dir_ths_disk == 0xFFFF) {
+      G.ecrec.num_entries_centrl_dir_ths_disk = ecrec64_this_entries;
+      if (ecrec64_this_entries != 0xFFFF) G.ecrec.is_zip64_archive = TRUE;
+    }
+    if (G.ecrec.total_entries_central_dir == 0xFFFF) {
+      G.ecrec.total_entries_central_dir = ecrec64_tot_entries;
+      if (ecrec64_tot_entries != 0xFFFF) G.ecrec.is_zip64_archive = TRUE;
+    }
+    if (G.ecrec.size_central_directory == 0xFFFFFFFFL) {
+      G.ecrec.size_central_directory = ecrec64_cdirsize;
+      if (ecrec64_cdirsize != 0xFFFFFFFF) G.ecrec.is_zip64_archive = TRUE;
+    }
+    if (G.ecrec.offset_start_central_directory == 0xFFFFFFFFL) {
+      G.ecrec.offset_start_central_directory = ecrec64_offs_cdstart;
+      if (ecrec64_offs_cdstart != 0xFFFFFFFF) G.ecrec.is_zip64_archive = TRUE;
+    }
+
+    return PK_COOL;
+} /* end function find_ecrec64() */
+
+
+
+/*************************/
+/* Function find_ecrec() */
+/*************************/
+
+static int find_ecrec(__G__ searchlen)          /* return PK-class error */
+    __GDEF
+    zoff_t searchlen;
+{
+    int found = FALSE;
+    int error_in_archive;
+    int result;
+    ec_byte_rec byterec;
+
+/*---------------------------------------------------------------------------
+    Treat case of short zipfile separately.
+  ---------------------------------------------------------------------------*/
+
+    if (G.ziplen <= INBUFSIZ) {
+#ifdef USE_STRM_INPUT
+        zfseeko(G.zipfd, 0L, SEEK_SET);
+#else /* !USE_STRM_INPUT */
+        zlseek(G.zipfd, 0L, SEEK_SET);
+#endif /* ?USE_STRM_INPUT */
+        if ((G.incnt = read(G.zipfd,(char *)G.inbuf,(unsigned int)G.ziplen))
+            == (int)G.ziplen)
+
+            /* 'P' must be at least (ECREC_SIZE+4) bytes from end of zipfile */
+            for (G.inptr = G.inbuf+(int)G.ziplen-(ECREC_SIZE+4);
+                 G.inptr >= G.inbuf;
+                 --G.inptr) {
+                if ( (*G.inptr == (uch)0x50) &&         /* ASCII 'P' */
+                     !memcmp((char *)G.inptr, end_central_sig, 4)) {
+                    G.incnt -= (int)(G.inptr - G.inbuf);
+                    found = TRUE;
+                    break;
+                }
+            }
+
+/*---------------------------------------------------------------------------
+    Zipfile is longer than INBUFSIZ:
+
+    MB - this next block of code moved to rec_find so that same code can be
+    used to look for zip64 ec record.  No need to include code above since
+    a zip64 ec record will only be looked for if it is a BIG file.
+  ---------------------------------------------------------------------------*/
+
+    } else {
+        found =
+          (rec_find(__G__ searchlen, end_central_sig, ECREC_SIZE) == 0
+           ? TRUE : FALSE);
+    } /* end if (ziplen > INBUFSIZ) */
+
+/*---------------------------------------------------------------------------
+    Searched through whole region where signature should be without finding
+    it.  Print informational message and die a horrible death.
+  ---------------------------------------------------------------------------*/
+
+    if (!found) {
+        if (uO.qflag || uO.zipinfo_mode)
+            Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn));
+        Info(slide, 0x401, ((char *)slide,
+          LoadFarString(CentDirEndSigNotFound)));
+        return PK_ERR;   /* failed */
+    }
+
+/*---------------------------------------------------------------------------
+    Found the signature, so get the end-central data before returning.  Do
+    any necessary machine-type conversions (byte ordering, structure padding
+    compensation) by reading data into character array and copying to struct.
+  ---------------------------------------------------------------------------*/
+
+    G.real_ecrec_offset = G.cur_zipfile_bufstart + (G.inptr-G.inbuf);
+#ifdef TEST
+    printf("\n  found end-of-central-dir signature at offset %s (%sh)\n",
+      FmZofft(G.real_ecrec_offset, NULL, NULL),
+      FmZofft(G.real_ecrec_offset, FZOFFT_HEX_DOT_WID, "X"));
+    printf("    from beginning of file; offset %d (%.4Xh) within block\n",
+      G.inptr-G.inbuf, G.inptr-G.inbuf);
+#endif
+
+    if (readbuf(__G__ (char *)byterec, ECREC_SIZE+4) == 0)
+        return PK_EOF;
+
+    G.ecrec.number_this_disk =
+      makeword(&byterec[NUMBER_THIS_DISK]);
+    G.ecrec.num_disk_start_cdir =
+      makeword(&byterec[NUM_DISK_WITH_START_CEN_DIR]);
+    G.ecrec.num_entries_centrl_dir_ths_disk =
+      makeword(&byterec[NUM_ENTRIES_CEN_DIR_THS_DISK]);
+    G.ecrec.total_entries_central_dir =
+      makeword(&byterec[TOTAL_ENTRIES_CENTRAL_DIR]);
+    G.ecrec.size_central_directory =
+      makelong(&byterec[SIZE_CENTRAL_DIRECTORY]);
+    G.ecrec.offset_start_central_directory =
+      makelong(&byterec[OFFSET_START_CENTRAL_DIRECTORY]);
+    G.ecrec.zipfile_comment_length =
+      makeword(&byterec[ZIPFILE_COMMENT_LENGTH]);
+
+    /* Now, we have to read the archive comment, BEFORE the file pointer
+       is moved away backwards to seek for a Zip64 ECLOC64 structure.
+     */
+    if ( (error_in_archive = process_zip_cmmnt(__G)) > PK_WARN )
+        return error_in_archive;
+
+    /* Next: Check for existence of Zip64 end-of-cent-dir locator
+       ECLOC64. This structure must reside on the same volume as the
+       classic ECREC, at exactly (ECLOC64_SIZE+4) bytes in front
+       of the ECREC.
+       The ECLOC64 structure directs to the longer ECREC64 structure
+       A ECREC64 will ALWAYS exist for a proper Zip64 archive, as
+       the "Version Needed To Extract" field is required to be set
+       to 4.5 or higher whenever any Zip64 features are used anywhere
+       in the archive, so just check for that to see if this is a
+       Zip64 archive.
+     */
+    result = find_ecrec64(__G__ searchlen+76);
+        /* 76 bytes for zip64ec & zip64 locator */
+    if (result != PK_COOL) {
+        if (error_in_archive < result)
+            error_in_archive = result;
+        return error_in_archive;
+    }
+
+    G.expect_ecrec_offset = G.ecrec.offset_start_central_directory +
+                            G.ecrec.size_central_directory;
+
+#ifndef NO_ZIPINFO
+    if (uO.zipinfo_mode) {
+        /* In ZipInfo mode, additional info about the data found in the
+           end-of-central-directory areas is printed out.
+         */
+        zi_end_central(__G);
+    }
+#endif
+
+    return error_in_archive;
+
+} /* end function find_ecrec() */
+
+
+
+
+
+/********************************/
+/* Function process_zip_cmmnt() */
+/********************************/
+
+static int process_zip_cmmnt(__G)       /* return PK-type error code */
+    __GDEF
+{
+    int error = PK_COOL;
+
+
+/*---------------------------------------------------------------------------
+    Get the zipfile comment (up to 64KB long), if any, and print it out.
+  ---------------------------------------------------------------------------*/
+
+#ifdef WINDLL
+    /* for comment button: */
+    if ((!G.fValidate) && (G.lpUserFunctions != NULL))
+       G.lpUserFunctions->cchComment = G.ecrec.zipfile_comment_length;
+#endif /* WINDLL */
+
+#ifndef NO_ZIPINFO
+    /* ZipInfo, verbose format */
+    if (uO.zipinfo_mode && uO.lflag > 9) {
+        /*-------------------------------------------------------------------
+            Get the zipfile comment, if any, and print it out.
+            (Comment may be up to 64KB long.  May the fleas of a thousand
+            camels infest the arm-pits of anyone who actually takes advantage
+            of this fact.)
+          -------------------------------------------------------------------*/
+
+        if (!G.ecrec.zipfile_comment_length)
+            Info(slide, 0, ((char *)slide, LoadFarString(NoZipfileComment)));
+        else {
+            Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommentDesc),
+              G.ecrec.zipfile_comment_length));
+            Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommBegin)));
+            if (do_string(__G__ G.ecrec.zipfile_comment_length, DISPLAY))
+                error = PK_WARN;
+            Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommEnd)));
+            if (error)
+                Info(slide, 0, ((char *)slide,
+                  LoadFarString(ZipfileCommTrunc2)));
+        } /* endif (comment exists) */
+
+    /* ZipInfo, non-verbose mode:  print zipfile comment only if requested */
+    } else if (G.ecrec.zipfile_comment_length &&
+               (uO.zflag > 0) && uO.zipinfo_mode) {
+        if (do_string(__G__ G.ecrec.zipfile_comment_length, DISPLAY)) {
+            Info(slide, 0x401, ((char *)slide,
+              LoadFarString(ZipfileCommTrunc1)));
+            error = PK_WARN;
+        }
+    } else
+#endif /* !NO_ZIPINFO */
+    if ( G.ecrec.zipfile_comment_length &&
+         (uO.zflag > 0
+#ifndef WINDLL
+          || (uO.zflag == 0
+# ifndef NO_ZIPINFO
+              && !uO.zipinfo_mode
+# endif
+# ifdef TIMESTAMP
+              && !uO.T_flag
+# endif
+              && !uO.qflag)
+#endif /* !WINDLL */
+         ) )
+    {
+        if (do_string(__G__ G.ecrec.zipfile_comment_length,
+#if (defined(SFX) && defined(CHEAP_SFX_AUTORUN))
+# ifndef NO_ZIPINFO
+                      (oU.zipinfo_mode ? DISPLAY : CHECK_AUTORUN)
+# else
+                      CHECK_AUTORUN
+# endif
+#else
+                      DISPLAY
+#endif
+                     ))
+        {
+            Info(slide, 0x401, ((char *)slide,
+              LoadFarString(ZipfileCommTrunc1)));
+            error = PK_WARN;
+        }
+    }
+#if (defined(SFX) && defined(CHEAP_SFX_AUTORUN))
+    else if (G.ecrec.zipfile_comment_length) {
+        if (do_string(__G__ G.ecrec.zipfile_comment_length, CHECK_AUTORUN_Q))
+        {
+            Info(slide, 0x401, ((char *)slide,
+              LoadFarString(ZipfileCommTrunc1)));
+            error = PK_WARN;
+        }
+    }
+#endif
+    return error;
+
+} /* end function process_zip_cmmnt() */
+
+
+
+
+
+/************************************/
+/* Function process_cdir_file_hdr() */
+/************************************/
+
+int process_cdir_file_hdr(__G)    /* return PK-type error code */
+    __GDEF
+{
+    int error;
+
+
+/*---------------------------------------------------------------------------
+    Get central directory info, save host and method numbers, and set flag
+    for lowercase conversion of filename, depending on the OS from which the
+    file is coming.
+  ---------------------------------------------------------------------------*/
+
+    if ((error = get_cdir_ent(__G)) != 0)
+        return error;
+
+    G.pInfo->hostver = G.crec.version_made_by[0];
+    G.pInfo->hostnum = MIN(G.crec.version_made_by[1], NUM_HOSTS);
+/*  extnum = MIN(crec.version_needed_to_extract[1], NUM_HOSTS); */
+
+    G.pInfo->lcflag = 0;
+    if (uO.L_flag == 1)       /* name conversion for monocase systems */
+        switch (G.pInfo->hostnum) {
+            case FS_FAT_:     /* PKZIP and zip -k store in uppercase */
+            case CPM_:        /* like MS-DOS, right? */
+            case VM_CMS_:     /* all caps? */
+            case MVS_:        /* all caps? */
+            case TANDEM_:
+            case TOPS20_:
+            case VMS_:        /* our Zip uses lowercase, but ASi's doesn't */
+        /*  case Z_SYSTEM_:   ? */
+        /*  case QDOS_:       ? */
+                G.pInfo->lcflag = 1;   /* convert filename to lowercase */
+                break;
+
+            default:     /* AMIGA_, FS_HPFS_, FS_NTFS_, MAC_, UNIX_, ATARI_, */
+                break;   /*  FS_VFAT_, ATHEOS_, BEOS_ (Z_SYSTEM_), THEOS_: */
+                         /*  no conversion */
+        }
+    else if (uO.L_flag > 1)   /* let -LL force lower case for all names */
+        G.pInfo->lcflag = 1;
+
+    /* do Amigas (AMIGA_) also have volume labels? */
+    if (IS_VOLID(G.crec.external_file_attributes) &&
+        (G.pInfo->hostnum == FS_FAT_ || G.pInfo->hostnum == FS_HPFS_ ||
+         G.pInfo->hostnum == FS_NTFS_ || G.pInfo->hostnum == ATARI_))
+    {
+        G.pInfo->vollabel = TRUE;
+        G.pInfo->lcflag = 0;        /* preserve case of volume labels */
+    } else
+        G.pInfo->vollabel = FALSE;
+
+    /* this flag is needed to detect archives made by "PKZIP for Unix" when
+       deciding which kind of codepage conversion has to be applied to
+       strings (see do_string() function in fileio.c) */
+    G.pInfo->HasUxAtt = (G.crec.external_file_attributes & 0xffff0000L) != 0L;
+
+#ifdef UNICODE_SUPPORT
+    /* remember the state of GPB11 (General Purpuse Bit 11) which indicates
+       that the standard path and comment are UTF-8. */
+    G.pInfo->GPFIsUTF8
+        = (G.crec.general_purpose_bit_flag & (1 << 11)) == (1 << 11);
+#endif
+
+#ifdef SYMLINKS
+    /* Initialize the symlink flag, may be set by the platform-specific
+       mapattr function.  */
+    G.pInfo->symlink = 0;
+#endif
+
+    return PK_COOL;
+
+} /* end function process_cdir_file_hdr() */
+
+
+
+
+
+/***************************/
+/* Function get_cdir_ent() */
+/***************************/
+
+static int get_cdir_ent(__G)    /* return PK-type error code */
+    __GDEF
+{
+    cdir_byte_hdr byterec;
+
+
+/*---------------------------------------------------------------------------
+    Read the next central directory entry and do any necessary machine-type
+    conversions (byte ordering, structure padding compensation--do so by
+    copying the data from the array into which it was read (byterec) to the
+    usable struct (crec)).
+  ---------------------------------------------------------------------------*/
+
+    if (readbuf(__G__ (char *)byterec, CREC_SIZE) == 0)
+        return PK_EOF;
+
+    G.crec.version_made_by[0] = byterec[C_VERSION_MADE_BY_0];
+    G.crec.version_made_by[1] = byterec[C_VERSION_MADE_BY_1];
+    G.crec.version_needed_to_extract[0] =
+      byterec[C_VERSION_NEEDED_TO_EXTRACT_0];
+    G.crec.version_needed_to_extract[1] =
+      byterec[C_VERSION_NEEDED_TO_EXTRACT_1];
+
+    G.crec.general_purpose_bit_flag =
+      makeword(&byterec[C_GENERAL_PURPOSE_BIT_FLAG]);
+    G.crec.compression_method =
+      makeword(&byterec[C_COMPRESSION_METHOD]);
+    G.crec.last_mod_dos_datetime =
+      makelong(&byterec[C_LAST_MOD_DOS_DATETIME]);
+    G.crec.crc32 =
+      makelong(&byterec[C_CRC32]);
+    G.crec.csize =
+      makelong(&byterec[C_COMPRESSED_SIZE]);
+    G.crec.ucsize =
+      makelong(&byterec[C_UNCOMPRESSED_SIZE]);
+    G.crec.filename_length =
+      makeword(&byterec[C_FILENAME_LENGTH]);
+    G.crec.extra_field_length =
+      makeword(&byterec[C_EXTRA_FIELD_LENGTH]);
+    G.crec.file_comment_length =
+      makeword(&byterec[C_FILE_COMMENT_LENGTH]);
+    G.crec.disk_number_start =
+      makeword(&byterec[C_DISK_NUMBER_START]);
+    G.crec.internal_file_attributes =
+      makeword(&byterec[C_INTERNAL_FILE_ATTRIBUTES]);
+    G.crec.external_file_attributes =
+      makelong(&byterec[C_EXTERNAL_FILE_ATTRIBUTES]);  /* LONG, not word! */
+    G.crec.relative_offset_local_header =
+      makelong(&byterec[C_RELATIVE_OFFSET_LOCAL_HEADER]);
+
+    return PK_COOL;
+
+} /* end function get_cdir_ent() */
+
+
+
+
+
+/*************************************/
+/* Function process_local_file_hdr() */
+/*************************************/
+
+int process_local_file_hdr(__G)    /* return PK-type error code */
+    __GDEF
+{
+    local_byte_hdr byterec;
+
+
+/*---------------------------------------------------------------------------
+    Read the next local file header and do any necessary machine-type con-
+    versions (byte ordering, structure padding compensation--do so by copy-
+    ing the data from the array into which it was read (byterec) to the
+    usable struct (lrec)).
+  ---------------------------------------------------------------------------*/
+
+    if (readbuf(__G__ (char *)byterec, LREC_SIZE) == 0)
+        return PK_EOF;
+
+    G.lrec.version_needed_to_extract[0] =
+      byterec[L_VERSION_NEEDED_TO_EXTRACT_0];
+    G.lrec.version_needed_to_extract[1] =
+      byterec[L_VERSION_NEEDED_TO_EXTRACT_1];
+
+    G.lrec.general_purpose_bit_flag =
+      makeword(&byterec[L_GENERAL_PURPOSE_BIT_FLAG]);
+    G.lrec.compression_method = makeword(&byterec[L_COMPRESSION_METHOD]);
+    G.lrec.last_mod_dos_datetime = makelong(&byterec[L_LAST_MOD_DOS_DATETIME]);
+    G.lrec.crc32 = makelong(&byterec[L_CRC32]);
+    G.lrec.csize = makelong(&byterec[L_COMPRESSED_SIZE]);
+    G.lrec.ucsize = makelong(&byterec[L_UNCOMPRESSED_SIZE]);
+    G.lrec.filename_length = makeword(&byterec[L_FILENAME_LENGTH]);
+    G.lrec.extra_field_length = makeword(&byterec[L_EXTRA_FIELD_LENGTH]);
+
+    if ((G.lrec.general_purpose_bit_flag & 8) != 0) {
+        /* can't trust local header, use central directory: */
+        G.lrec.crc32 = G.pInfo->crc;
+        G.lrec.csize = G.pInfo->compr_size;
+        G.lrec.ucsize = G.pInfo->uncompr_size;
+    }
+
+    G.csize = G.lrec.csize;
+
+    return PK_COOL;
+
+} /* end function process_local_file_hdr() */
+
+
+/*******************************/
+/* Function getZip64Data() */
+/*******************************/
+
+int getZip64Data(__G__ ef_buf, ef_len)
+    __GDEF
+    ZCONST uch *ef_buf; /* buffer containing extra field */
+    unsigned ef_len;    /* total length of extra field */
+{
+    unsigned eb_id;
+    unsigned eb_len;
+
+/*---------------------------------------------------------------------------
+    This function scans the extra field for zip64 information, ie 8-byte
+    versions of compressed file size, uncompressed file size, relative offset
+    and a 4-byte version of disk start number.
+    Sets both local header and central header fields.  Not terribly clever,
+    but it means that this procedure is only called in one place.
+
+    2014-12-05 SMS.  (oCERT.org report.)  CVE-2014-8141.
+    Added checks to ensure that enough data are available before calling
+    makeint64() or makelong().  Replaced various sizeof() values with
+    simple ("4" or "8") constants.  (The Zip64 structures do not depend
+    on our variable sizes.)  Error handling is crude, but we should now
+    stay within the buffer.
+  ---------------------------------------------------------------------------*/
+
+#define Z64FLGS 0xffff
+#define Z64FLGL 0xffffffff
+
+    if (ef_len == 0 || ef_buf == NULL)
+        return PK_COOL;
+
+    Trace((stderr,"\ngetZip64Data: scanning extra field of length %u\n",
+      ef_len));
+
+    while (ef_len >= EB_HEADSIZE)
+    {
+        eb_id = makeword(EB_ID + ef_buf);
+        eb_len = makeword(EB_LEN + ef_buf);
+
+        if (eb_len > (ef_len - EB_HEADSIZE))
+        {
+            /* Extra block length exceeds remaining extra field length. */
+            Trace((stderr,
+              "getZip64Data: block length %u > rest ef_size %u\n", eb_len,
+              ef_len - EB_HEADSIZE));
+            break;
+        }
+
+        if (eb_id == EF_PKSZ64)
+        {
+          unsigned offset = EB_HEADSIZE;
+
+          if ((G.crec.ucsize == Z64FLGL) || (G.lrec.ucsize == Z64FLGL))
+          {
+            if (offset+ 8 > ef_len)
+              return PK_ERR;
+
+            G.crec.ucsize = G.lrec.ucsize = makeint64(offset + ef_buf);
+            offset += 8;
+          }
+
+          if ((G.crec.csize == Z64FLGL) || (G.lrec.csize == Z64FLGL))
+          {
+            if (offset+ 8 > ef_len)
+              return PK_ERR;
+
+            G.csize = G.crec.csize = G.lrec.csize = makeint64(offset + ef_buf);
+            offset += 8;
+          }
+
+          if (G.crec.relative_offset_local_header == Z64FLGL)
+          {
+            if (offset+ 8 > ef_len)
+              return PK_ERR;
+
+            G.crec.relative_offset_local_header = makeint64(offset + ef_buf);
+            offset += 8;
+          }
+
+          if (G.crec.disk_number_start == Z64FLGS)
+          {
+            if (offset+ 4 > ef_len)
+              return PK_ERR;
+
+            G.crec.disk_number_start = (zuvl_t)makelong(offset + ef_buf);
+            offset += 4;
+          }
+#if 0
+          break;                /* Expect only one EF_PKSZ64 block. */
+#endif /* 0 */
+        }
+
+        /* Skip this extra field block. */
+        ef_buf += (eb_len + EB_HEADSIZE);
+        ef_len -= (eb_len + EB_HEADSIZE);
+    }
+
+    return PK_COOL;
+} /* end function getZip64Data() */
+
+
+#ifdef UNICODE_SUPPORT
+
+/*******************************/
+/* Function getUnicodeData() */
+/*******************************/
+
+int getUnicodeData(__G__ ef_buf, ef_len)
+    __GDEF
+    ZCONST uch *ef_buf; /* buffer containing extra field */
+    unsigned ef_len;    /* total length of extra field */
+{
+    unsigned eb_id;
+    unsigned eb_len;
+
+/*---------------------------------------------------------------------------
+    This function scans the extra field for Unicode information, ie UTF-8
+    path extra fields.
+
+    On return, G.unipath_filename =
+        NULL, if no Unicode path extra field or error
+        "", if the standard path is UTF-8 (free when done)
+        null-terminated UTF-8 path (free when done)
+    Return PK_COOL if no error.
+  ---------------------------------------------------------------------------*/
+
+    G.unipath_filename = NULL;
+
+    if (ef_len == 0 || ef_buf == NULL)
+        return PK_COOL;
+
+    Trace((stderr,"\ngetUnicodeData: scanning extra field of length %u\n",
+      ef_len));
+
+    while (ef_len >= EB_HEADSIZE) {
+        eb_id = makeword(EB_ID + ef_buf);
+        eb_len = makeword(EB_LEN + ef_buf);
+
+        if (eb_len > (ef_len - EB_HEADSIZE)) {
+            /* discovered some extra field inconsistency! */
+            Trace((stderr,
+              "getUnicodeData: block length %u > rest ef_size %u\n", eb_len,
+              ef_len - EB_HEADSIZE));
+            break;
+        }
+        if (eb_id == EF_UNIPATH) {
+
+          unsigned offset = EB_HEADSIZE;
+          ush ULen = eb_len - 5;
+          ulg chksum = CRCVAL_INITIAL;
+
+          /* version */
+          G.unipath_version = (uch) *(offset + ef_buf);
+          offset += 1;
+          if (G.unipath_version > 1) {
+            /* can do only version 1 */
+            Info(slide, 0x401, ((char *)slide,
+              LoadFarString(UnicodeVersionError)));
+            return PK_ERR;
+          }
+
+          /* filename CRC */
+          G.unipath_checksum = makelong(offset + ef_buf);
+          offset += 4;
+
+          if (!G.filename_full) {
+            /* Check if we have a unicode extra section but no filename set */
+            return PK_ERR;
+          }
+
+          /*
+           * Compute 32-bit crc
+           */
+
+          chksum = crc32(chksum, (uch *)(G.filename_full),
+                         strlen(G.filename_full));
+
+          /* If the checksums's don't match then likely filename has been
+           * modified and the Unicode Path is no longer valid.
+           */
+          if (chksum != G.unipath_checksum) {
+            Info(slide, 0x401, ((char *)slide,
+              LoadFarString(UnicodeMismatchError)));
+            if (G.unicode_mismatch == 1) {
+              /* warn and continue */
+            } else if (G.unicode_mismatch == 2) {
+              /* ignore and continue */
+            } else if (G.unicode_mismatch == 0) {
+            }
+            return PK_ERR;
+          }
+
+          /* UTF-8 Path */
+          if ((G.unipath_filename = malloc(ULen + 1)) == NULL) {
+            return PK_ERR;
+          }
+          if (ULen == 0) {
+            /* standard path is UTF-8 so use that */
+            G.unipath_filename[0] = '\0';
+          } else {
+            /* UTF-8 path */
+            strncpy(G.unipath_filename,
+                    (ZCONST char *)(offset + ef_buf), ULen);
+            G.unipath_filename[ULen] = '\0';
+          }
+        }
+
+        /* Skip this extra field block */
+        ef_buf += (eb_len + EB_HEADSIZE);
+        ef_len -= (eb_len + EB_HEADSIZE);
+    }
+
+    return PK_COOL;
+} /* end function getUnicodeData() */
+
+
+
+
+#ifdef UNICODE_WCHAR
+  /*---------------------------------------------
+ * Unicode conversion functions
+ *
+ * Based on functions provided by Paul Kienitz
+ *
+ *---------------------------------------------
+ */
+
+/*
+   NOTES APPLICABLE TO ALL STRING FUNCTIONS:
+
+   All of the x_to_y functions take parameters for an output buffer and
+   its available length, and return an int.  The value returned is the
+   length of the string that the input produces, which may be larger than
+   the provided buffer length.  If the returned value is less than the
+   buffer length, then the contents of the buffer will be null-terminated;
+   otherwise, it will not be terminated and may be invalid, possibly
+   stopping in the middle of a multibyte sequence.
+
+   In all cases you may pass NULL as the buffer and/or 0 as the length, if
+   you just want to learn how much space the string is going to require.
+
+   The functions will return -1 if the input is invalid UTF-8 or cannot be
+   encoded as UTF-8.
+*/
+
+static int utf8_char_bytes OF((ZCONST char *utf8));
+static ulg ucs4_char_from_utf8 OF((ZCONST char **utf8));
+static int utf8_to_ucs4_string OF((ZCONST char *utf8, ulg *ucs4buf,
+                                   int buflen));
+
+/* utility functions for managing UTF-8 and UCS-4 strings */
+
+
+/* utf8_char_bytes
+ *
+ * Returns the number of bytes used by the first character in a UTF-8
+ * string, or -1 if the UTF-8 is invalid or null.
+ */
+static int utf8_char_bytes(utf8)
+  ZCONST char *utf8;
+{
+  int      t, r;
+  unsigned lead;
+
+  if (!utf8)
+    return -1;          /* no input */
+  lead = (unsigned char) *utf8;
+  if (lead < 0x80)
+    r = 1;              /* an ascii-7 character */
+  else if (lead < 0xC0)
+    return -1;          /* error: trailing byte without lead byte */
+  else if (lead < 0xE0)
+    r = 2;              /* an 11 bit character */
+  else if (lead < 0xF0)
+    r = 3;              /* a 16 bit character */
+  else if (lead < 0xF8)
+    r = 4;              /* a 21 bit character (the most currently used) */
+  else if (lead < 0xFC)
+    r = 5;              /* a 26 bit character (shouldn't happen) */
+  else if (lead < 0xFE)
+    r = 6;              /* a 31 bit character (shouldn't happen) */
+  else
+    return -1;          /* error: invalid lead byte */
+  for (t = 1; t < r; t++)
+    if ((unsigned char) utf8[t] < 0x80 || (unsigned char) utf8[t] >= 0xC0)
+      return -1;        /* error: not enough valid trailing bytes */
+  return r;
+}
+
+
+/* ucs4_char_from_utf8
+ *
+ * Given a reference to a pointer into a UTF-8 string, returns the next
+ * UCS-4 character and advances the pointer to the next character sequence.
+ * Returns ~0 (= -1 in twos-complement notation) and does not advance the
+ * pointer when input is ill-formed.
+ */
+static ulg ucs4_char_from_utf8(utf8)
+  ZCONST char **utf8;
+{
+  ulg  ret;
+  int  t, bytes;
+
+  if (!utf8)
+    return ~0L;                         /* no input */
+  bytes = utf8_char_bytes(*utf8);
+  if (bytes <= 0)
+    return ~0L;                         /* invalid input */
+  if (bytes == 1)
+    ret = **utf8;                       /* ascii-7 */
+  else
+    ret = **utf8 & (0x7F >> bytes);     /* lead byte of a multibyte sequence */
+  (*utf8)++;
+  for (t = 1; t < bytes; t++)           /* consume trailing bytes */
+    ret = (ret << 6) | (*((*utf8)++) & 0x3F);
+  return (zwchar) ret;
+}
+
+
+#if 0 /* currently unused */
+/* utf8_from_ucs4_char - Convert UCS char to UTF-8
+ *
+ * Returns the number of bytes put into utf8buf to represent ch, from 1 to 6,
+ * or -1 if ch is too large to represent.  utf8buf must have room for 6 bytes.
+ */
+static int utf8_from_ucs4_char(utf8buf, ch)
+  char *utf8buf;
+  ulg ch;
+{
+  int trailing = 0;
+  int leadmask = 0x80;
+  int leadbits = 0x3F;
+  int tch = ch;
+  int ret;
+
+  if (ch > 0x7FFFFFFFL)
+    return -1;                /* UTF-8 can represent 31 bits */
+  if (ch < 0x7F)
+  {
+    *utf8buf++ = (char) ch;   /* ascii-7 */
+    return 1;
+  }
+  do {
+    trailing++;
+    leadmask = (leadmask >> 1) | 0x80;
+    leadbits >>= 1;
+    tch >>= 6;
+  } while (tch & ~leadbits);
+  ret = trailing + 1;
+  /* produce lead byte */
+  *utf8buf++ = (char) (leadmask | (ch >> (6 * trailing)));
+  while (--trailing >= 0)
+    /* produce trailing bytes */
+    *utf8buf++ = (char) (0x80 | ((ch >> (6 * trailing)) & 0x3F));
+  return ret;
+}
+#endif /* unused */
+
+
+/*===================================================================*/
+
+/* utf8_to_ucs4_string - convert UTF-8 string to UCS string
+ *
+ * Return UCS count.  Now returns int so can return -1.
+ */
+static int utf8_to_ucs4_string(utf8, ucs4buf, buflen)
+  ZCONST char *utf8;
+  ulg *ucs4buf;
+  int buflen;
+{
+  int count = 0;
+
+  for (;;)
+  {
+    ulg ch = ucs4_char_from_utf8(&utf8);
+    if (ch == ~0L)
+      return -1;
+    else
+    {
+      if (ucs4buf && count < buflen)
+        ucs4buf[count] = ch;
+      if (ch == 0)
+        return count;
+      count++;
+    }
+  }
+}
+
+
+#if 0 /* currently unused */
+/* ucs4_string_to_utf8
+ *
+ *
+ */
+static int ucs4_string_to_utf8(ucs4, utf8buf, buflen)
+  ZCONST ulg *ucs4;
+  char *utf8buf;
+  int buflen;
+{
+  char mb[6];
+  int  count = 0;
+
+  if (!ucs4)
+    return -1;
+  for (;;)
+  {
+    int mbl = utf8_from_ucs4_char(mb, *ucs4++);
+    int c;
+    if (mbl <= 0)
+      return -1;
+    /* We could optimize this a bit by passing utf8buf + count */
+    /* directly to utf8_from_ucs4_char when buflen >= count + 6... */
+    c = buflen - count;
+    if (mbl < c)
+      c = mbl;
+    if (utf8buf && count < buflen)
+      strncpy(utf8buf + count, mb, c);
+    if (mbl == 1 && !mb[0])
+      return count;           /* terminating nul */
+    count += mbl;
+  }
+}
+
+
+/* utf8_chars
+ *
+ * Wrapper: counts the actual unicode characters in a UTF-8 string.
+ */
+static int utf8_chars(utf8)
+  ZCONST char *utf8;
+{
+  return utf8_to_ucs4_string(utf8, NULL, 0);
+}
+#endif /* unused */
+
+/* --------------------------------------------------- */
+/* Unicode Support
+ *
+ * These functions common for all Unicode ports.
+ *
+ * These functions should allocate and return strings that can be
+ * freed with free().
+ *
+ * 8/27/05 EG
+ *
+ * Use zwchar for wide char which is unsigned long
+ * in zip.h and 32 bits.  This avoids problems with
+ * different sizes of wchar_t.
+ */
+
+#if 0 /* currently unused */
+/* is_ascii_string
+ * Checks if a string is all ascii
+ */
+int is_ascii_string(mbstring)
+  ZCONST char *mbstring;
+{
+  char *p;
+  uch c;
+
+  for (p = mbstring; c = (uch)*p; p++) {
+    if (c > 0x7F) {
+      return 0;
+    }
+  }
+  return 1;
+}
+
+/* local to UTF-8 */
+char *local_to_utf8_string(local_string)
+  ZCONST char *local_string;
+{
+  return wide_to_utf8_string(local_to_wide_string(local_string));
+}
+# endif /* unused */
+
+/* wide_to_escape_string
+   provides a string that represents a wide char not in local char set
+
+   An initial try at an algorithm.  Suggestions welcome.
+
+   According to the standard, Unicode character points are restricted to
+   the number range from 0 to 0x10FFFF, respective 21 bits.
+   For a hexadecimal notation, 2 octets are sufficient for the mostly
+   used characters from the "Basic Multilingual Plane", all other
+   Unicode characters can be represented by 3 octets (= 6 hex digits).
+   The Unicode standard suggests to write Unicode character points
+   as 4 resp. 6 hex digits, preprended by "U+".
+   (e.g.: U+10FFFF for the highest character point, or U+0030 for the ASCII
+   digit "0")
+
+   However, for the purpose of escaping non-ASCII chars in an ASCII character
+   stream, the "U" is not a very good escape initializer. Therefore, we
+   use the following convention within our Info-ZIP code:
+
+   If not an ASCII char probably need 2 bytes at least.  So if
+   a 2-byte wide encode it as 4 hex digits with a leading #U.  If
+   needs 3 bytes then prefix the string with #L.  So
+   #U1234
+   is a 2-byte wide character with bytes 0x12 and 0x34 while
+   #L123456
+   is a 3-byte wide character with bytes 0x12, 0x34, 0x56.
+   On Windows, wide that need two wide characters need to be converted
+   to a single number.
+  */
+
+ /* set this to the max bytes an escape can be */
+#define MAX_ESCAPE_BYTES 8
+
+char *wide_to_escape_string(wide_char)
+  zwchar wide_char;
+{
+  int i;
+  zwchar w = wide_char;
+  uch b[sizeof(zwchar)];
+  char d[3];
+  char e[11];
+  int len;
+  char *r;
+
+  /* fill byte array with zeros */
+  memzero(b, sizeof(zwchar));
+  /* get bytes in right to left order */
+  for (len = 0; w; len++) {
+    b[len] = (char)(w % 0x100);
+    w /= 0x100;
+  }
+  strcpy(e, "#");
+  /* either 2 bytes or 3 bytes */
+  if (len <= 2) {
+    len = 2;
+    strcat(e, "U");
+  } else {
+    strcat(e, "L");
+  }
+  for (i = len - 1; i >= 0; i--) {
+    sprintf(d, "%02x", b[i]);
+    strcat(e, d);
+  }
+  if ((r = malloc(strlen(e) + 1)) == NULL) {
+    return NULL;
+  }
+  strcpy(r, e);
+  return r;
+}
+
+#if 0 /* currently unused */
+/* returns the wide character represented by the escape string */
+zwchar escape_string_to_wide(escape_string)
+  ZCONST char *escape_string;
+{
+  int i;
+  zwchar w;
+  char c;
+  int len;
+  ZCONST char *e = escape_string;
+
+  if (e == NULL) {
+    return 0;
+  }
+  if (e[0] != '#') {
+    /* no leading # */
+    return 0;
+  }
+  len = strlen(e);
+  /* either #U1234 or #L123456 format */
+  if (len != 6 && len != 8) {
+    return 0;
+  }
+  w = 0;
+  if (e[1] == 'L') {
+    if (len != 8) {
+      return 0;
+    }
+    /* 3 bytes */
+    for (i = 2; i < 8; i++) {
+      c = e[i];
+      if (c < '0' || c > '9') {
+        return 0;
+      }
+      w = w * 0x10 + (zwchar)(c - '0');
+    }
+  } else if (e[1] == 'U') {
+    /* 2 bytes */
+    for (i = 2; i < 6; i++) {
+      c = e[i];
+      if (c < '0' || c > '9') {
+        return 0;
+      }
+      w = w * 0x10 + (zwchar)(c - '0');
+    }
+  }
+  return w;
+}
+#endif /* unused */
+
+#ifndef WIN32  /* WIN32 supplies a special variant of this function */
+/* convert wide character string to multi-byte character string */
+char *wide_to_local_string(wide_string, escape_all)
+  ZCONST zwchar *wide_string;
+  int escape_all;
+{
+  int i;
+  wchar_t wc;
+  int b;
+  int state_dependent;
+  int wsize = 0;
+  int max_bytes = MB_CUR_MAX;
+  char buf[ MB_CUR_MAX + 1];  /* ("+1" not really needed?) */
+  char *buffer = NULL;
+  char *local_string = NULL;
+  size_t buffer_size;         /* CVE-2022-0529 */
+
+  for (wsize = 0; wide_string[wsize]; wsize++) ;
+
+  if (max_bytes < MAX_ESCAPE_BYTES)
+    max_bytes = MAX_ESCAPE_BYTES;
+
+  buffer_size = wsize * max_bytes + 1; /* Reused below. */
+  if ((buffer = (char *)malloc(buffer_size)) == NULL) {
+    return NULL;
+  }
+
+  /* convert it */
+  buffer[0] = '\0';
+  /* set initial state if state-dependent encoding */
+  wc = (wchar_t)'a';
+  b = wctomb(NULL, wc);
+  if (b == 0)
+    state_dependent = 0;
+  else
+    state_dependent = 1;
+  for (i = 0; i < wsize; i++) {
+    if (sizeof(wchar_t) < 4 && wide_string[i] > 0xFFFF) {
+      /* wchar_t probably 2 bytes */
+      /* could do surrogates if state_dependent and wctomb can do */
+      wc = zwchar_to_wchar_t_default_char;
+    } else {
+      wc = (wchar_t)wide_string[i];
+    }
+    b = wctomb(buf, wc);
+    if (escape_all) {
+      if (b == 1 && (uch)buf[0] <= 0x7f) {
+        /* ASCII */
+        strncat(buffer, buf, b);
+      } else {
+        /* use escape for wide character */
+        char *escape_string = wide_to_escape_string(wide_string[i]);
+        strcat(buffer, escape_string);
+        free(escape_string);
+      }
+    } else if (b > 0) {
+      /* multi-byte char */
+      strncat(buffer, buf, b);
+    } else {
+      /* no MB for this wide */
+        /* use escape for wide character */
+        size_t buffer_len;
+        size_t escape_string_len;
+        char *escape_string;
+        int err_msg = 0;
+
+        escape_string = wide_to_escape_string(wide_string[i]);
+        buffer_len = strlen( buffer);
+        escape_string_len = strlen( escape_string);
+
+        /* Append escape string, as space allows. */
+        /* 2022-07-18 SMS, et al.  CVE-2022-0529 */
+        if (escape_string_len > buffer_size- buffer_len- 1)
+        {
+            escape_string_len = buffer_size- buffer_len- 1;
+            if (err_msg == 0)
+            {
+                err_msg = 1;
+                Info(slide, 0x401, ((char *)slide,
+                 LoadFarString( UFilenameTooLongTrunc)));
+            }
+        }
+        strncat( buffer, escape_string, escape_string_len);
+        free(escape_string);
+    }
+  }
+  if ((local_string = (char *)malloc(strlen(buffer) + 1)) != NULL) {
+    strcpy(local_string, buffer);
+  }
+  free(buffer);
+
+  return local_string;
+}
+#endif /* !WIN32 */
+
+#if 0 /* currently unused */
+/* convert local string to display character set string */
+char *local_to_display_string(local_string)
+  ZCONST char *local_string;
+{
+  char *display_string;
+
+  /* For Windows, OEM string should never be bigger than ANSI string, says
+     CharToOem description.
+     For all other ports, just make a copy of local_string.
+  */
+  if ((display_string = (char *)malloc(strlen(local_string) + 1)) == NULL) {
+    return NULL;
+  }
+
+  strcpy(display_string, local_string);
+
+#ifdef EBCDIC
+  {
+    char *ebc;
+
+    if ((ebc = malloc(strlen(display_string) + 1)) ==  NULL) {
+      return NULL;
+    }
+    strtoebc(ebc, display_string);
+    free(display_string);
+    display_string = ebc;
+  }
+#endif
+
+  return display_string;
+}
+#endif /* unused */
+
+/* UTF-8 to local */
+char *utf8_to_local_string(utf8_string, escape_all)
+  ZCONST char *utf8_string;
+  int escape_all;
+{
+  zwchar *wide;
+  char *loc = NULL;
+
+  wide = utf8_to_wide_string( utf8_string);
+
+  /* 2022-07-25 SMS, et al.  CVE-2022-0530 */
+  if (wide != NULL)
+  {
+    loc = wide_to_local_string( wide, escape_all);
+    free( wide);
+  }
+
+  return loc;
+}
+
+#if 0 /* currently unused */
+/* convert multi-byte character string to wide character string */
+zwchar *local_to_wide_string(local_string)
+  ZCONST char *local_string;
+{
+  int wsize;
+  wchar_t *wc_string;
+  zwchar *wide_string;
+
+  /* for now try to convert as string - fails if a bad char in string */
+  wsize = mbstowcs(NULL, local_string, strlen(local_string) + 1);
+  if (wsize == (size_t)-1) {
+    /* could not convert */
+    return NULL;
+  }
+
+  /* convert it */
+  if ((wc_string = (wchar_t *)malloc((wsize + 1) * sizeof(wchar_t))) == NULL) {
+    return NULL;
+  }
+  wsize = mbstowcs(wc_string, local_string, strlen(local_string) + 1);
+  wc_string[wsize] = (wchar_t) 0;
+
+  /* in case wchar_t is not zwchar */
+  if ((wide_string = (zwchar *)malloc((wsize + 1) * sizeof(zwchar))) == NULL) {
+    return NULL;
+  }
+  for (wsize = 0; wide_string[wsize] = (zwchar)wc_string[wsize]; wsize++) ;
+  wide_string[wsize] = (zwchar) 0;
+  free(wc_string);
+
+  return wide_string;
+}
+
+
+/* convert wide string to UTF-8 */
+char *wide_to_utf8_string(wide_string)
+  ZCONST zwchar *wide_string;
+{
+  int mbcount;
+  char *utf8_string;
+
+  /* get size of utf8 string */
+  mbcount = ucs4_string_to_utf8(wide_string, NULL, 0);
+  if (mbcount == -1)
+    return NULL;
+  if ((utf8_string = (char *) malloc(mbcount + 1)) == NULL) {
+    return NULL;
+  }
+  mbcount = ucs4_string_to_utf8(wide_string, utf8_string, mbcount + 1);
+  if (mbcount == -1)
+    return NULL;
+
+  return utf8_string;
+}
+#endif /* unused */
+
+/* convert UTF-8 string to wide string */
+zwchar *utf8_to_wide_string(utf8_string)
+  ZCONST char *utf8_string;
+{
+  int wcount;
+  zwchar *wide_string;
+
+  wcount = utf8_to_ucs4_string(utf8_string, NULL, 0);
+  if (wcount == -1)
+    return NULL;
+  if ((wide_string = (zwchar *) malloc((wcount + 1) * sizeof(zwchar)))
+      == NULL) {
+    return NULL;
+  }
+  wcount = utf8_to_ucs4_string(utf8_string, wide_string, wcount + 1);
+
+  return wide_string;
+}
+
+#endif /* UNICODE_WCHAR */
+#endif /* UNICODE_SUPPORT */
+
+
+
+
+
+#ifdef USE_EF_UT_TIME
+
+#ifdef IZ_HAVE_UXUIDGID
+static int read_ux3_value(dbuf, uidgid_sz, p_uidgid)
+    ZCONST uch *dbuf;   /* buffer a uid or gid value */
+    unsigned uidgid_sz; /* size of uid/gid value */
+    ulg *p_uidgid;      /* return storage: uid or gid value */
+{
+    zusz_t uidgid64;
+
+    switch (uidgid_sz) {
+      case 2:
+        *p_uidgid = (ulg)makeword(dbuf);
+        break;
+      case 4:
+        *p_uidgid = (ulg)makelong(dbuf);
+        break;
+      case 8:
+        uidgid64 = makeint64(dbuf);
+#ifndef LARGE_FILE_SUPPORT
+        if (uidgid64 == (zusz_t)0xffffffffL)
+            return FALSE;
+#endif
+        *p_uidgid = (ulg)uidgid64;
+        if ((zusz_t)(*p_uidgid) != uidgid64)
+            return FALSE;
+        break;
+    }
+    return TRUE;
+}
+#endif /* IZ_HAVE_UXUIDGID */
+
+
+/*******************************/
+/* Function ef_scan_for_izux() */
+/*******************************/
+
+unsigned ef_scan_for_izux(ef_buf, ef_len, ef_is_c, dos_mdatetime,
+                          z_utim, z_uidgid)
+    ZCONST uch *ef_buf; /* buffer containing extra field */
+    unsigned ef_len;    /* total length of extra field */
+    int ef_is_c;        /* flag indicating "is central extra field" */
+    ulg dos_mdatetime;  /* last_mod_file_date_time in DOS format */
+    iztimes *z_utim;    /* return storage: atime, mtime, ctime */
+    ulg *z_uidgid;      /* return storage: uid and gid */
+{
+    unsigned flags = 0;
+    unsigned eb_id;
+    unsigned eb_len;
+    int have_new_type_eb = 0;
+    long i_time;        /* buffer for Unix style 32-bit integer time value */
+#ifdef TIME_T_TYPE_DOUBLE
+    int ut_in_archive_sgn = 0;
+#else
+    int ut_zip_unzip_compatible = FALSE;
+#endif
+
+/*---------------------------------------------------------------------------
+    This function scans the extra field for EF_TIME, EF_IZUNIX2, EF_IZUNIX, or
+    EF_PKUNIX blocks containing Unix-style time_t (GMT) values for the entry's
+    access, creation, and modification time.
+    If a valid block is found, the time stamps are copied to the iztimes
+    structure (provided the z_utim pointer is not NULL).
+    If a IZUNIX2 block is found or the IZUNIX block contains UID/GID fields,
+    and the z_uidgid array pointer is valid (!= NULL), the owner info is
+    transfered as well.
+    The presence of an EF_TIME or EF_IZUNIX2 block results in ignoring all
+    data from probably present obsolete EF_IZUNIX blocks.
+    If multiple blocks of the same type are found, only the information from
+    the last block is used.
+    The return value is a combination of the EF_TIME Flags field with an
+    additional flag bit indicating the presence of valid UID/GID info,
+    or 0 in case of failure.
+  ---------------------------------------------------------------------------*/
+
+    if (ef_len == 0 || ef_buf == NULL || (z_utim == 0 && z_uidgid == NULL))
+        return 0;
+
+    TTrace((stderr,"\nef_scan_for_izux: scanning extra field of length %u\n",
+      ef_len));
+
+    while (ef_len >= EB_HEADSIZE) {
+        eb_id = makeword(EB_ID + ef_buf);
+        eb_len = makeword(EB_LEN + ef_buf);
+
+        if (eb_len > (ef_len - EB_HEADSIZE)) {
+            /* discovered some extra field inconsistency! */
+            TTrace((stderr,
+              "ef_scan_for_izux: block length %u > rest ef_size %u\n", eb_len,
+              ef_len - EB_HEADSIZE));
+            break;
+        }
+
+        switch (eb_id) {
+          case EF_TIME:
+            flags &= ~0x0ff;    /* ignore previous IZUNIX or EF_TIME fields */
+            have_new_type_eb = 1;
+            if ( eb_len >= EB_UT_MINLEN && z_utim != NULL) {
+                unsigned eb_idx = EB_UT_TIME1;
+                TTrace((stderr,"ef_scan_for_izux: found TIME extra field\n"));
+                flags |= (ef_buf[EB_HEADSIZE+EB_UT_FLAGS] & 0x0ff);
+                if ((flags & EB_UT_FL_MTIME)) {
+                    if ((eb_idx+4) <= eb_len) {
+                        i_time = (long)makelong((EB_HEADSIZE+eb_idx) + ef_buf);
+                        eb_idx += 4;
+                        TTrace((stderr,"  UT e.f. modification time = %ld\n",
+                                i_time));
+
+#ifdef TIME_T_TYPE_DOUBLE
+                        if ((ulg)(i_time) & (ulg)(0x80000000L)) {
+                            if (dos_mdatetime == DOSTIME_MINIMUM) {
+                              ut_in_archive_sgn = -1;
+                              z_utim->mtime =
+                                (time_t)((long)i_time | (~(long)0x7fffffffL));
+                            } else if (dos_mdatetime >= DOSTIME_2038_01_18) {
+                              ut_in_archive_sgn = 1;
+                              z_utim->mtime =
+                                (time_t)((ulg)i_time & (ulg)0xffffffffL);
+                            } else {
+                              ut_in_archive_sgn = 0;
+                              /* cannot determine sign of mtime;
+                                 without modtime: ignore complete UT field */
+                              flags &= ~0x0ff;  /* no time_t times available */
+                              TTrace((stderr,
+                                "  UT modtime range error; ignore e.f.!\n"));
+                              break;            /* stop scanning this field */
+                            }
+                        } else {
+                            /* cannot determine, safe assumption is FALSE */
+                            ut_in_archive_sgn = 0;
+                            z_utim->mtime = (time_t)i_time;
+                        }
+#else /* !TIME_T_TYPE_DOUBLE */
+                        if ((ulg)(i_time) & (ulg)(0x80000000L)) {
+                            ut_zip_unzip_compatible =
+                              ((time_t)0x80000000L < (time_t)0L)
+                              ? (dos_mdatetime == DOSTIME_MINIMUM)
+                              : (dos_mdatetime >= DOSTIME_2038_01_18);
+                            if (!ut_zip_unzip_compatible) {
+                              /* UnZip interprets mtime differently than Zip;
+                                 without modtime: ignore complete UT field */
+                              flags &= ~0x0ff;  /* no time_t times available */
+                              TTrace((stderr,
+                                "  UT modtime range error; ignore e.f.!\n"));
+                              break;            /* stop scanning this field */
+                            }
+                        } else {
+                            /* cannot determine, safe assumption is FALSE */
+                            ut_zip_unzip_compatible = FALSE;
+                        }
+                        z_utim->mtime = (time_t)i_time;
+#endif /* ?TIME_T_TYPE_DOUBLE */
+                    } else {
+                        flags &= ~EB_UT_FL_MTIME;
+                        TTrace((stderr,"  UT e.f. truncated; no modtime\n"));
+                    }
+                }
+                if (ef_is_c) {
+                    break;      /* central version of TIME field ends here */
+                }
+
+                if (flags & EB_UT_FL_ATIME) {
+                    if ((eb_idx+4) <= eb_len) {
+                        i_time = (long)makelong((EB_HEADSIZE+eb_idx) + ef_buf);
+                        eb_idx += 4;
+                        TTrace((stderr,"  UT e.f. access time = %ld\n",
+                                i_time));
+#ifdef TIME_T_TYPE_DOUBLE
+                        if ((ulg)(i_time) & (ulg)(0x80000000L)) {
+                            if (ut_in_archive_sgn == -1)
+                              z_utim->atime =
+                                (time_t)((long)i_time | (~(long)0x7fffffffL));
+                            } else if (ut_in_archive_sgn == 1) {
+                              z_utim->atime =
+                                (time_t)((ulg)i_time & (ulg)0xffffffffL);
+                            } else {
+                              /* sign of 32-bit time is unknown -> ignore it */
+                              flags &= ~EB_UT_FL_ATIME;
+                              TTrace((stderr,
+                                "  UT access time range error: skip time!\n"));
+                            }
+                        } else {
+                            z_utim->atime = (time_t)i_time;
+                        }
+#else /* !TIME_T_TYPE_DOUBLE */
+                        if (((ulg)(i_time) & (ulg)(0x80000000L)) &&
+                            !ut_zip_unzip_compatible) {
+                            flags &= ~EB_UT_FL_ATIME;
+                            TTrace((stderr,
+                              "  UT access time range error: skip time!\n"));
+                        } else {
+                            z_utim->atime = (time_t)i_time;
+                        }
+#endif /* ?TIME_T_TYPE_DOUBLE */
+                    } else {
+                        flags &= ~EB_UT_FL_ATIME;
+                    }
+                }
+                if (flags & EB_UT_FL_CTIME) {
+                    if ((eb_idx+4) <= eb_len) {
+                        i_time = (long)makelong((EB_HEADSIZE+eb_idx) + ef_buf);
+                        TTrace((stderr,"  UT e.f. creation time = %ld\n",
+                                i_time));
+#ifdef TIME_T_TYPE_DOUBLE
+                        if ((ulg)(i_time) & (ulg)(0x80000000L)) {
+                            if (ut_in_archive_sgn == -1)
+                              z_utim->ctime =
+                                (time_t)((long)i_time | (~(long)0x7fffffffL));
+                            } else if (ut_in_archive_sgn == 1) {
+                              z_utim->ctime =
+                                (time_t)((ulg)i_time & (ulg)0xffffffffL);
+                            } else {
+                              /* sign of 32-bit time is unknown -> ignore it */
+                              flags &= ~EB_UT_FL_CTIME;
+                              TTrace((stderr,
+                              "  UT creation time range error: skip time!\n"));
+                            }
+                        } else {
+                            z_utim->ctime = (time_t)i_time;
+                        }
+#else /* !TIME_T_TYPE_DOUBLE */
+                        if (((ulg)(i_time) & (ulg)(0x80000000L)) &&
+                            !ut_zip_unzip_compatible) {
+                            flags &= ~EB_UT_FL_CTIME;
+                            TTrace((stderr,
+                              "  UT creation time range error: skip time!\n"));
+                        } else {
+                            z_utim->ctime = (time_t)i_time;
+                        }
+#endif /* ?TIME_T_TYPE_DOUBLE */
+                    } else {
+                        flags &= ~EB_UT_FL_CTIME;
+                    }
+                }
+            }
+            break;
+
+          case EF_IZUNIX2:
+            if (have_new_type_eb == 0) {        /* (< 1) */
+                have_new_type_eb = 1;
+            }
+            if (have_new_type_eb <= 1) {
+                /* Ignore any prior (EF_IZUNIX/EF_PKUNIX) UID/GID. */
+                flags &= 0x0ff;
+            }
+#ifdef IZ_HAVE_UXUIDGID
+            if (have_new_type_eb > 1)
+                break;          /* IZUNIX3 overrides IZUNIX2 e.f. block ! */
+            if (eb_len == EB_UX2_MINLEN && z_uidgid != NULL) {
+                z_uidgid[0] = (ulg)makeword((EB_HEADSIZE+EB_UX2_UID) + ef_buf);
+                z_uidgid[1] = (ulg)makeword((EB_HEADSIZE+EB_UX2_GID) + ef_buf);
+                flags |= EB_UX2_VALID;   /* signal success */
+            }
+#endif
+            break;
+
+          case EF_IZUNIX3:
+            /* new 3rd generation Unix ef */
+            have_new_type_eb = 2;
+
+            /* Ignore any prior EF_IZUNIX/EF_PKUNIX/EF_IZUNIX2 UID/GID. */
+            flags &= 0x0ff;
+        /*
+          Version       1 byte      version of this extra field, currently 1
+          UIDSize       1 byte      Size of UID field
+          UID           Variable    UID for this entry
+          GIDSize       1 byte      Size of GID field
+          GID           Variable    GID for this entry
+        */
+
+#ifdef IZ_HAVE_UXUIDGID
+            if ((eb_len >= EB_UX3_MINLEN)
+                && (z_uidgid != NULL)
+                && ((*((EB_HEADSIZE + 0) + ef_buf) == 1)))
+                    /* only know about version 1 */
+            {
+                uch uid_size;
+                uch gid_size;
+
+                uid_size = *((EB_HEADSIZE + 1) + ef_buf);
+                gid_size = *((EB_HEADSIZE + uid_size + 2) + ef_buf);
+
+                if ( read_ux3_value((EB_HEADSIZE + 2) + ef_buf,
+                                    uid_size, &z_uidgid[0])
+                    &&
+                     read_ux3_value((EB_HEADSIZE + uid_size + 3) + ef_buf,
+                                    gid_size, &z_uidgid[1]) )
+                {
+                    flags |= EB_UX2_VALID;   /* signal success */
+                }
+            }
+#endif /* IZ_HAVE_UXUIDGID */
+            break;
+
+          case EF_IZUNIX:
+          case EF_PKUNIX:       /* PKUNIX e.f. layout is identical to IZUNIX */
+            if (eb_len >= EB_UX_MINLEN) {
+                TTrace((stderr,"ef_scan_for_izux: found %s extra field\n",
+                        (eb_id == EF_IZUNIX ? "IZUNIX" : "PKUNIX")));
+                if (have_new_type_eb > 0) {
+                    break;      /* Ignore IZUNIX extra field block ! */
+                }
+                if (z_utim != NULL) {
+                    flags |= (EB_UT_FL_MTIME | EB_UT_FL_ATIME);
+                    i_time = (long)makelong((EB_HEADSIZE+EB_UX_MTIME)+ef_buf);
+                    TTrace((stderr,"  Unix EF modtime = %ld\n", i_time));
+#ifdef TIME_T_TYPE_DOUBLE
+                    if ((ulg)(i_time) & (ulg)(0x80000000L)) {
+                        if (dos_mdatetime == DOSTIME_MINIMUM) {
+                            ut_in_archive_sgn = -1;
+                            z_utim->mtime =
+                              (time_t)((long)i_time | (~(long)0x7fffffffL));
+                        } else if (dos_mdatetime >= DOSTIME_2038_01_18) {
+                            ut_in_archive_sgn = 1;
+                            z_utim->mtime =
+                              (time_t)((ulg)i_time & (ulg)0xffffffffL);
+                        } else {
+                            ut_in_archive_sgn = 0;
+                            /* cannot determine sign of mtime;
+                               without modtime: ignore complete UT field */
+                            flags &= ~0x0ff;    /* no time_t times available */
+                            TTrace((stderr,
+                                  "  UX modtime range error: ignore e.f.!\n"));
+                        }
+                    } else {
+                        /* cannot determine, safe assumption is FALSE */
+                        ut_in_archive_sgn = 0;
+                        z_utim->mtime = (time_t)i_time;
+                    }
+#else /* !TIME_T_TYPE_DOUBLE */
+                    if ((ulg)(i_time) & (ulg)(0x80000000L)) {
+                        ut_zip_unzip_compatible =
+                          ((time_t)0x80000000L < (time_t)0L)
+                          ? (dos_mdatetime == DOSTIME_MINIMUM)
+                          : (dos_mdatetime >= DOSTIME_2038_01_18);
+                        if (!ut_zip_unzip_compatible) {
+                            /* UnZip interpretes mtime differently than Zip;
+                               without modtime: ignore complete UT field */
+                            flags &= ~0x0ff;    /* no time_t times available */
+                            TTrace((stderr,
+                                  "  UX modtime range error: ignore e.f.!\n"));
+                        }
+                    } else {
+                        /* cannot determine, safe assumption is FALSE */
+                        ut_zip_unzip_compatible = FALSE;
+                    }
+                    z_utim->mtime = (time_t)i_time;
+#endif /* ?TIME_T_TYPE_DOUBLE */
+                    i_time = (long)makelong((EB_HEADSIZE+EB_UX_ATIME)+ef_buf);
+                    TTrace((stderr,"  Unix EF actime = %ld\n", i_time));
+#ifdef TIME_T_TYPE_DOUBLE
+                    if ((ulg)(i_time) & (ulg)(0x80000000L)) {
+                        if (ut_in_archive_sgn == -1)
+                            z_utim->atime =
+                              (time_t)((long)i_time | (~(long)0x7fffffffL));
+                        } else if (ut_in_archive_sgn == 1) {
+                            z_utim->atime =
+                              (time_t)((ulg)i_time & (ulg)0xffffffffL);
+                        } else if (flags & 0x0ff) {
+                            /* sign of 32-bit time is unknown -> ignore it */
+                            flags &= ~EB_UT_FL_ATIME;
+                            TTrace((stderr,
+                                "  UX access time range error: skip time!\n"));
+                        }
+                    } else {
+                        z_utim->atime = (time_t)i_time;
+                    }
+#else /* !TIME_T_TYPE_DOUBLE */
+                    if (((ulg)(i_time) & (ulg)(0x80000000L)) &&
+                        !ut_zip_unzip_compatible && (flags & 0x0ff)) {
+                        /* atime not in range of UnZip's time_t */
+                        flags &= ~EB_UT_FL_ATIME;
+                        TTrace((stderr,
+                                "  UX access time range error: skip time!\n"));
+                    } else {
+                        z_utim->atime = (time_t)i_time;
+                    }
+#endif /* ?TIME_T_TYPE_DOUBLE */
+                }
+#ifdef IZ_HAVE_UXUIDGID
+                if (eb_len >= EB_UX_FULLSIZE && z_uidgid != NULL) {
+                    z_uidgid[0] = makeword((EB_HEADSIZE+EB_UX_UID) + ef_buf);
+                    z_uidgid[1] = makeword((EB_HEADSIZE+EB_UX_GID) + ef_buf);
+                    flags |= EB_UX2_VALID;
+                }
+#endif /* IZ_HAVE_UXUIDGID */
+            }
+            break;
+
+          default:
+            break;
+        }
+
+        /* Skip this extra field block */
+        ef_buf += (eb_len + EB_HEADSIZE);
+        ef_len -= (eb_len + EB_HEADSIZE);
+    }
+
+    return flags;
+}
+
+#endif /* USE_EF_UT_TIME */
+
+
+#if (defined(RISCOS) || defined(ACORN_FTYPE_NFS))
+
+#define SPARKID_2 0x30435241    /* = "ARC0" */
+
+/*******************************/
+/* Function getRISCOSexfield() */
+/*******************************/
+
+zvoid *getRISCOSexfield(ef_buf, ef_len)
+    ZCONST uch *ef_buf; /* buffer containing extra field */
+    unsigned ef_len;    /* total length of extra field */
+{
+    unsigned eb_id;
+    unsigned eb_len;
+
+/*---------------------------------------------------------------------------
+    This function scans the extra field for a Acorn SPARK filetype ef-block.
+    If a valid block is found, the function returns a pointer to the start
+    of the SPARK_EF block in the extra field buffer.  Otherwise, a NULL
+    pointer is returned.
+  ---------------------------------------------------------------------------*/
+
+    if (ef_len == 0 || ef_buf == NULL)
+        return NULL;
+
+    Trace((stderr,"\ngetRISCOSexfield: scanning extra field of length %u\n",
+      ef_len));
+
+    while (ef_len >= EB_HEADSIZE) {
+        eb_id = makeword(EB_ID + ef_buf);
+        eb_len = makeword(EB_LEN + ef_buf);
+
+        if (eb_len > (ef_len - EB_HEADSIZE)) {
+            /* discovered some extra field inconsistency! */
+            Trace((stderr,
+              "getRISCOSexfield: block length %u > rest ef_size %u\n", eb_len,
+              ef_len - EB_HEADSIZE));
+            break;
+        }
+
+        if (eb_id == EF_SPARK && (eb_len == 24 || eb_len == 20)) {
+            if (makelong(EB_HEADSIZE + ef_buf) == SPARKID_2) {
+                /* Return a pointer to the valid SPARK filetype ef block */
+                return (zvoid *)ef_buf;
+            }
+        }
+
+        /* Skip this extra field block */
+        ef_buf += (eb_len + EB_HEADSIZE);
+        ef_len -= (eb_len + EB_HEADSIZE);
+    }
+
+    return NULL;
+}
+
+#endif /* (RISCOS || ACORN_FTYPE_NFS) */
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix/configure
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix/configure	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix/configure	(revision 5)
@@ -0,0 +1,669 @@
+:
+#!/bin/sh -x
+# The above : is necessary on some buggy systems.
+
+# configure: Guess values for system-dependent variables
+# Output the flag definitions to the file "flags".
+# Parameters: $1 = $(CC), $2 = $(CFLAGS), $3 = $(IZ_BZIP2)
+# To construct unzip automatically using this file, type
+# "make -f unix/Makefile generic".
+# If this fails, then type "make list" to get a list of special targets.
+
+trap "rm -f conftest* core a.out; exit 1" 1 2 3 15
+
+CC=${1-cc}
+CFLAGS=${2}
+CFLAGSR=${CFLAGS}
+IZ_BZIP2=${3}
+CFLAGS="${CFLAGS} -I. -DUNIX"
+LFLAGS1=""
+LFLAGS2="-s"
+LN="ln -s"
+
+CFLAGS_OPT=''
+CFLAGS_BZ=''
+BZLF=''
+
+echo "Check C compiler operation"
+cat > conftest.c << _EOF_
+int main()
+{
+   return 0;
+}
+_EOF_
+$CC $CFLAGS -c conftest.c
+status=$?
+if test $status -ne 0; then
+  echo ''
+  echo "C compiler \"${CC}\" does not work as expected."
+  echo "Failing command was: $CC $CFLAGS -c conftest.c"
+  exit $status
+else
+  echo '  Ok'
+fi
+
+echo 'Check C compiler type (optimization options)'
+# Sun C?
+cat > conftest.c << _EOF_
+int main()
+{
+#ifndef __SUNPRO_C
+   bad code
+#endif
+   return 0;
+}
+_EOF_
+$CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
+if test $? -eq 0; then
+  CFLAGS_OPT='-xO3'
+  echo "  Sun C ($CFLAGS_OPT)"
+else
+  # Tru64 DEC/Compaq/HP C?
+  cat > conftest.c << _EOF_
+int main()
+{
+#ifndef __DECC
+   bad code
+#endif
+   return 0;
+}
+_EOF_
+  $CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
+  if test $? -eq 0; then
+    CFLAGS_OPT='-O3'
+    echo "  DEC C ($CFLAGS_OPT)"
+  else
+    # HP-UX HP C?
+    cat > conftest.c << _EOF_
+int main()
+{
+#ifdef __GNUC__
+   bad code
+#endif
+#ifndef __hpux
+   bad code
+#endif
+   return 0;
+}
+_EOF_
+    $CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
+    if test $? -eq 0; then
+      # HP-UX, not GCC.  Lame bundled or real ANSI compiler?
+      CFLAGS_OPT_TRY="+O3 +Onolimit"
+      $CC $CFLAGS $CFLAGS_OPT_TRY -c conftest.c 2>&1 | \
+       grep '(Bundled)' > /dev/null
+      if test $? -ne 0; then
+        CFLAGS_OPT="$CFLAGS_OPT_TRY"
+        echo "  HP-UX ANSI C ($CFLAGS_OPT)"
+      else
+        echo '  HP-UX Bundled C (no opt)'
+      fi
+    else
+      # GNU C?
+      cat > conftest.c << _EOF_
+int main()
+{
+#ifndef __GNUC__
+   bad code
+#endif
+   return 0;
+}
+_EOF_
+      $CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
+      if test $? -eq 0; then
+        CFLAGS_OPT='-O3'
+        echo "  GNU C ($CFLAGS_OPT)"
+	# Special Mac OS X shared library "ld" option?
+        if test ` uname -s 2> /dev/null ` = 'Darwin'; then
+          lf='-Wl,-search_paths_first'
+          $CC $CFLAGS $lf conftest.c > /dev/null 2>/dev/null
+          if test $? -eq 0; then
+            BZLF=${lf}
+          fi
+          rm -f conftest
+        fi
+      else
+        CFLAGS_OPT='-O'
+        echo "  Other-unknown C ($CFLAGS_OPT)"
+      fi
+    fi
+  fi
+fi
+
+# optimization flags
+if test -n "${CFLAGS_OPT}"; then
+  CFLAGSR="${CFLAGSR} ${CFLAGS_OPT}"
+  CFLAGS_BZ="${CFLAGS_BZ} ${CFLAGS_OPT}"
+fi
+
+echo Check for the C preprocessor
+# on SVR4, cc -E does not produce correct assembler files. Need /lib/cpp.
+CPP="${CC} -E"
+# solaris as(1) needs -P, maybe others as well ?
+[ -f /usr/ccs/lib/cpp ] && CPP="/usr/ccs/lib/cpp -P"
+[ -f /usr/lib/cpp ] && CPP=/usr/lib/cpp
+[ -f /lib/cpp ] && CPP=/lib/cpp
+[ -f /usr/bin/cpp ] && CPP=/usr/bin/cpp
+[ -f /xenix ] && CPP="${CC} -E"
+[ -f /lynx.os ] && CPP="${CC} -E"
+
+echo "#include <stdio.h>" > conftest.c
+$CPP conftest.c >/dev/null 2>/dev/null || CPP="${CC} -E"
+
+echo Check if we can use asm code
+CRC32OA=""
+if eval "$CPP crc_i386.S > _crc_i386.s 2>/dev/null"; then
+  if test ! -s _crc_i386.s || grep error < _crc_i386.s > /dev/null; then
+    :
+  elif eval "$CC -c _crc_i386.s >/dev/null 2>/dev/null" && [ -f _crc_i386.o ]; then
+    CFLAGSR="${CFLAGSR} -DASM_CRC"
+    CRC32OA="crc_gcc.o"
+    echo "int foo() { return 0;}" > conftest.c
+    $CC -c conftest.c >/dev/null 2>/dev/null
+    echo Check if compiler generates underlines
+    nm conftest.o | grep "(^|[^_])foo" >/dev/null 2>/dev/null
+    [ $? -eq 0 ] && CPP="${CPP} -DNO_UNDERLINE"
+  fi
+fi
+rm -f _crc_i386.s _crc_i386.o
+
+# ANSI options for compilers that don't have __STDC__ defined by default
+# Currently HPUX, pyramid, Dynix, AIX, OSF/1 and ultrix
+
+echo Check for ANSI options
+cat > conftest.c << _EOF_
+int main()
+{
+#ifndef __STDC__
+   forget it
+#endif
+   return 0;
+}
+_EOF_
+$CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
+if [ $? -ne 0 ]; then
+  for OPT in "-Aa -D_HPUX_SOURCE" -Xa -qlanglvl=ansi -std1 -std
+  do
+    $CC $CFLAGS $OPT -c conftest.c > /dev/null 2>/dev/null
+    [ $? -eq 0 ] && CFLAGSR="${CFLAGSR} ${OPT}" && break
+  done
+fi
+
+echo Check for prototypes
+echo "int main(int argc, char *argv[]) { return 0; }" > conftest.c
+$CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
+[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_PROTO"
+
+# const check currently handles mips cc and non ANSI compilers.
+# does it need more ?
+echo Check the handling of const
+cat > conftest.c << _EOF_
+typedef int charset[2];
+int main()
+{
+  const charset x;
+  const char *foo;
+  return 0;
+}
+_EOF_
+$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
+[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_CONST"
+
+echo Check for time_t
+cat > conftest.c << _EOF_
+#include <sys/types.h>
+#include <time.h>
+int main()
+{
+  time_t t;
+  return 0;
+}
+_EOF_
+$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
+[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_TIME_T"
+
+echo Check for size_t
+cat > conftest.c << _EOF_
+#include <sys/types.h>
+int main()
+{
+  size_t s;
+  return 0;
+}
+_EOF_
+$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
+[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_SIZE_T"
+
+echo Check for off_t
+cat > conftest.c << _EOF_
+#include <sys/types.h>
+int main()
+{
+  off_t s;
+  return 0;
+}
+_EOF_
+$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
+[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_OFF_T"
+
+# Added 11/4/2003 EG
+# Revised 8/12/04 EG
+# Now we set the 64-bit file environment and check the size of off_t
+echo Check for Large File Support
+cat > conftest.c << _EOF_
+# define _LARGEFILE_SOURCE       /* some OSes need this for fseeko */
+# define _LARGEFILE64_SOURCE
+# define _FILE_OFFSET_BITS 64       /* select default interface as 64 bit */
+# define _LARGE_FILES        /* some OSes need this for 64-bit off_t */
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <stdio.h>
+int main()
+{
+  off_t offset;
+  struct stat s;
+  /* see if have 64-bit off_t */
+  if (sizeof(offset) < 8)
+    return 1;
+  printf("  off_t is %d bytes\n", sizeof(off_t));
+  /* see if have 64-bit stat */
+  if (sizeof(s.st_size) < 8) {
+    printf("  s.st_size is %d bytes\n", sizeof(s.st_size));
+    return 2;
+  }
+  return 3;
+}
+_EOF_
+# compile it
+$CC -o conftest conftest.c >/dev/null 2>/dev/null
+if [ $? -ne 0 ]; then
+  echo -- no Large File Support
+else
+# run it
+  ./conftest
+  r=$?
+  if [ $r -eq 1 ]; then
+    echo -- no Large File Support - no 64-bit off_t
+  elif [ $r -eq 2 ]; then
+    echo -- no Large File Support - no 64-bit stat
+  elif [ $r -eq 3 ]; then
+    echo -- yes we have Large File Support!
+    CFLAGSR="${CFLAGSR} -DLARGE_FILE_SUPPORT"
+  else
+    echo -- no Large File Support - conftest returned $r
+  fi
+fi
+
+# Added 11/24/2005 EG
+# Check for wide char for Unicode support
+echo Check for wide char support
+cat > conftest.c << _EOF_
+#include <stdlib.h>
+#include <stdio.h>
+#include <wchar.h>
+int main()
+{
+  size_t wsize;
+  wchar_t *wide_string;
+
+  if ((wide_string = (wchar_t *)malloc(4 * sizeof(wchar_t))) == NULL) {
+    return 0;
+  }
+  /* get wide string */
+  wsize = mbstowcs(wide_string, "foo", 3);
+  wide_string[wsize] = (wchar_t) NULL;
+#ifndef __STDC_ISO_10646__
+  return 1;
+#else
+  printf("  __STDC_ISO_10646__ = %d\n", __STDC_ISO_10646__);
+  return 2;
+#endif
+}
+_EOF_
+# compile it
+$CC -o conftest conftest.c >/dev/null 2>/dev/null
+if [ $? -ne 0 ]; then
+  echo "-- no Unicode (wchar_t) support"
+else
+# have wide char support
+# run it
+  ./conftest
+  r=$?
+  if [ $r -eq 0 ]; then
+    echo -- no Unicode wchar_t support - wchar_t allocation error
+  elif [ $r -eq 1 ]; then
+    echo -- no Unicode support - wchar_t encoding unspecified
+  elif [ $r -eq 2 ]; then
+    echo -- have wchar_t with known UCS encoding - enabling Unicode support!
+    CFLAGSR="${CFLAGSR} -DUNICODE_SUPPORT -DUNICODE_WCHAR"
+  else
+    echo "-- no Unicode (wchar_t) support - conftest returned $r"
+  fi
+fi
+
+echo "Check for setlocale support (needed for UNICODE Native check)"
+cat > conftest.c << _EOF_
+#include <locale.h>
+int main()
+{
+  char *loc = setlocale(LC_CTYPE, "");
+  return 0;
+}
+_EOF_
+$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
+if [ $? -eq 0 ]; then
+  echo "-- have setlocale, can check for charset type"
+  echo "--  - enabling UTF8-native support!"
+  CFLAGSR="${CFLAGSR} -DUNICODE_SUPPORT -DUTF8_MAYBE_NATIVE"
+else
+  echo "-- no Unicode (UTF-8 native) support!"
+  CFLAGSR="${CFLAGSR} -DNO_SETLOCALE"
+fi
+
+# from configure 2.4i (Onno) 12/5/04
+echo Check for gcc no-builtin flag
+# -fno-builtin since version 2
+cat > conftest.c << _EOF_
+int main()
+{
+#if __GNUC__ >= 2
+   return 0;
+#else
+   forget it
+#endif
+}
+_EOF_
+$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
+[ $? -eq 0 ] && BFLAG="-fno-builtin"
+
+# Check for missing functions
+# add NO_'function_name' to flags if missing
+for func in fchmod fchown lchown nl_langinfo
+do
+  echo Check for $func
+  echo "int main(){ $func(); return 0; }" > conftest.c
+  $CC $BFLAG -o conftest conftest.c >/dev/null 2>/dev/null
+  [ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_`echo $func | tr '[a-z]' '[A-Z]'`"
+done
+
+# Check (seriously) for a working lchmod.
+echo 'Check for lchmod'
+temp_file="/tmp/unzip_test_$$"
+temp_link="link_$$"
+( echo '#include <unistd.h>' ; \
+  echo "int main() { lchmod(\"${temp_file}\", 0666); }" \
+) > conftest.c
+ln -s "${temp_link}" "${temp_file}" && \
+ $CC $BFLAG -o conftest conftest.c >/dev/null 2>/dev/null && \
+ ./conftest
+[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_LCHMOD"
+rm -f "${temp_file}"
+
+echo Check for memset
+echo "int main(){ char k; memset(&k,0,0); return 0; }" > conftest.c
+$CC -o conftest conftest.c >/dev/null 2>/dev/null
+[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DZMEM"
+
+echo Check for errno declaration
+cat > conftest.c << _EOF_
+#include <errno.h>
+main()
+{
+  errno = 0;
+  return 0;
+}
+_EOF_
+$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
+[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_ERRNO"
+
+echo Check for directory libraries
+cat > conftest.c << _EOF_
+int main() { return closedir(opendir(".")); }
+_EOF_
+
+$CC -o conftest conftest.c >/dev/null 2>/dev/null
+if [ $? -ne 0 ]; then
+  OPT=""
+  for lib in ndir dir ucb bsd BSD PW x dirent
+  do
+    $CC -o conftest conftest.c -l$lib >/dev/null 2>/dev/null
+    [ $? -eq 0 ] && OPT=-l$lib && break
+  done
+  if [ ${OPT} ]; then
+    LFLAGS2="${LFLAGS2} ${OPT}"
+  else
+    CFLAGSR="${CFLAGSR} -DNO_DIR"
+  fi
+fi
+
+# Dynix/ptx 1.3 needed this
+echo Check for readlink
+echo "int main(){ return readlink(); }" > conftest.c
+$CC -o conftest conftest.c >/dev/null 2>/dev/null
+if [ $? -ne 0 ]; then
+  $CC -o conftest conftest.c -lseq >/dev/null 2>/dev/null
+  [ $? -eq 0 ] && LFLAGS2="${LFLAGS2} -lseq"
+fi
+
+echo Check for directory include file
+OPT=""
+for inc in dirent.h sys/ndir.h ndir.h sys/dir.h
+do
+   echo "#include <$inc>" > conftest.c
+   $CPP conftest.c > /dev/null 2>/dev/null
+   [ $? -eq 0 ] && OPT="-DHAVE_`echo $inc | tr '[a-z]./' '[A-Z]__'`" && break
+done
+CFLAGSR="${CFLAGSR} ${OPT}"
+
+echo Check for non existent include files
+for inc in stdlib.h stddef.h unistd.h fcntl.h string.h langinfo.h
+do
+   echo "#include <$inc>" > conftest.c
+   $CPP conftest.c >/dev/null 2>/dev/null
+   [ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_`echo $inc | tr '[a-z]./' '[A-Z]__'`"
+done
+
+echo Check for term I/O include file
+OPT=""
+for inc in termios.h termio.h sgtty.h
+do
+   echo "#include <$inc>" > conftest.c
+   $CPP conftest.c > /dev/null 2>/dev/null
+   [ $? -eq 0 ] && OPT="-DHAVE_`echo $inc | tr '[a-z]./' '[A-Z]__'`" && break
+done
+CFLAGSR="${CFLAGSR} ${OPT}"
+
+echo Check for MBCS include files
+OPT=""
+for inc in mbstring.h mbctype.h
+do
+   echo "#include <$inc>" > conftest.c
+   $CPP conftest.c > /dev/null 2>/dev/null
+   [ $? -eq 0 ] && OPT="-DHAVE_`echo $inc | tr '[a-z]./' '[A-Z]__'`" && break
+done
+CFLAGSR="${CFLAGSR} ${OPT}"
+
+# Check for MBCS support
+echo Check for MBCS support
+cat > conftest.c << _EOF_
+#include <stdlib.h>
+#include <stdio.h>
+#include <wchar.h>
+#ifdef HAVE_MBSTRING_H
+#  include <mbstring.h>
+#endif
+int main()
+{
+  char *tst;
+  tst = "Hallo";
+  return mblen(tst, MB_CUR_MAX);
+}
+_EOF_
+# compile it
+$CC ${CFLAGS} ${CFLAGSR} -o conftest conftest.c >/dev/null 2>/dev/null
+if [ $? -ne 0 ]; then
+  echo "-- no MBCS support"
+  CFLAGSR="${CFLAGSR} -DNO_MBCS"
+else
+#
+  echo "-- have MBCS support"
+  CFLAGSR="${CFLAGSR} -D_MBCS"
+# check for library-supplied functions
+# add FUNCTION_NAME='function_name' to flags if found
+  for func in mbschr mbsrchr
+  do
+    echo Check for MBCS $func
+    echo "int main() { $func(); return 0; }" > conftest.c
+    $CC $BFLAG -o conftest conftest.c >/dev/null 2>/dev/null
+    [ $? -eq 0 ] && CFLAGSR="${CFLAGSR} -D`echo $func | tr '[a-z]' '[A-Z]'`=$func"
+  done
+fi
+
+# needed for AIX (and others ?) when mmap is used
+echo Check for valloc
+cat > conftest.c << _EOF_
+main()
+{
+#ifdef MMAP
+    valloc();
+#endif
+}
+_EOF_
+$CC ${CFLAGS} -c conftest.c > /dev/null 2>/dev/null
+[ $? -ne 0 ] && CFLAGSR="${CFLAGSR} -DNO_VALLOC"
+
+echo Check for /usr/local/bin and /usr/local/man
+BINDIR=$HOME/bin
+[ -d /usr/local/bin ] && BINDIR=/usr/local/bin
+
+MANDIR=manl
+[ -d /usr/man/manl ]       && MANDIR=/usr/man/manl
+[ -d /usr/local/man/manl ] && MANDIR=/usr/local/man/manl
+[ -d /usr/local/man/man1 ] && MANDIR=/usr/local/man/man1
+
+echo Checking for OS specialties
+if [ -f /usr/bin/hostinfo ]; then
+  if /usr/bin/hostinfo | grep NeXT > /dev/null; then
+    CFLAGSR="${CFLAGSR} -posix"
+    LFLAGS1="${LFLAGS1} -posix -object"
+  fi
+# XXX ATT6300, Cray
+elif [ -f /xenix ]; then
+  if uname -p | grep 286 > /dev/null; then
+    CFLAGSR="${CFLAGSR} -LARGE -Mel2 -DMEDIUM_MEM -DWSIZE=16384 -DNO_VOID"
+    LFLAGS1="${LFLAGS1} -LARGE -Mel2"
+  fi
+elif uname -X >/dev/null 2>/dev/null; then
+# SCO shared library check
+  echo "int main() { return 0;}" > conftest.c
+  $CC -o conftest conftest.c -lc_s -nointl >/dev/null 2> /dev/null
+  [ $? -eq 0 ] && LFLAGS2="-lc_s -nointl"
+else
+  SYSTEM=`uname -s 2>/dev/null` || SYSTEM="unknown"
+  echo "int main() { return 0;}" > conftest.c
+  case $SYSTEM in
+     OSF1|ULTRIX)
+        echo Check for -Olimit option
+        $CC ${CFLAGS} -Olimit 1000 -o conftest conftest.c >/dev/null 2>/dev/null
+        [ $? -eq 0 ] && CFLAGSR="${CFLAGSR} -Olimit 1000"
+        ;;
+###     HP-UX)
+###        echo Check for +Onolimit option
+###        $CC ${CFLAGS} +Onolimit -o conftest conftest.c >/dev/null 2>/dev/null
+###        [ $? -eq 0 ] && CFLAGSR="${CFLAGSR} +Onolimit"
+###        ;;
+###     SunOS)
+###        CFLAGSR="${CFLAGSR} -D_FILE_OFFSET_BITS=64"
+###        ;;
+  esac
+fi
+
+echo Check for symbolic links
+ln -s /dev/null null > /dev/null 2>/dev/null || LN=ln
+
+rm -f a.out conftest.c conftest.o conftest null
+
+
+# bzip2
+
+echo "Check bzip2 support"
+D_USE_BZ2=""
+LIBBZ2=""
+L_BZ2=""
+CC_BZ="${CC}"
+
+if test -n "${IZ_BZIP2}" -a "${IZ_BZIP2}" != "bzip2" ; then
+  echo "  Check for bzip2 compiled library in IZ_BZIP2 (${IZ_BZIP2})"
+  if test -f "${IZ_BZIP2}/libbz2.a"; then
+#
+#   A bzip2 library built with BZ_NO_STDIO should have an
+#   unresolved external, "bz_internal_error".  The default,
+#   full-function library will not mention it.
+#
+    nm ${IZ_BZIP2}/libbz2.a | grep bz_internal_error > /dev/null
+    if test $? -eq 0; then
+      echo "    Found bzip2 BZ_NO_STDIO library, ${IZ_BZIP2}/libbz2.a"
+      if test -f "${IZ_BZIP2}/bzlib.h"; then
+        LIBBZ2="${IZ_BZIP2}/libbz2.a"
+        D_USE_BZ2="-DUSE_BZIP2"
+        L_BZ2="${BZLF} -lbz2"
+        echo "-- Found bzip2 library - linking in bzip2"
+      else
+        echo "    ${IZ_BZIP2}/bzlib.h not found"
+        echo "-- Since IZ_BZIP2 defined (!= \"bzip2\"),"
+        echo "-- => skipping OS and bzip2 dir checks."
+        echo "-- NO bzip2 support !"
+      fi
+    else
+      echo "    Found bzip2 library, ${IZ_BZIP2}/libbz2.a,"
+      echo "      but library not compiled with BZ_NO_STDIO."
+      echo "    ERROR: This (default) variant of bzip2 library is NOT"
+      echo "      supported with UnZip because of its incompatible"
+      echo "      error handling!"
+      echo "      Please see the UnZip installation instructions in"
+      echo "      the INSTALL text file."
+      echo "    Skipping bzip2 support..."
+    fi
+  else
+    echo "    ${IZ_BZIP2}/libbz2.a not found"
+    echo "-- Since IZ_BZIP2 defined (!= \"bzip2\"),"
+    echo "-- => skipping OS and bzip2 dir checks."
+    echo "-- NO bzip2 support !"
+  fi
+else
+  echo "  Check for bzip2 sources in unzip's bzip2 subdirectory"
+  if test -f "${IZ_BZIP2}/bzlib.c" -a -f "${IZ_BZIP2}/bzlib.h"; then
+    echo "-- Found bzip2 source in ${IZ_BZIP2}/ directory"
+    echo "-- Will try to build bzip2 library from source and link in"
+    LIBBZ2="${IZ_BZIP2}/libbz2.a"
+    D_USE_BZ2="-DUSE_BZIP2"
+    L_BZ2="${BZLF} -lbz2"
+  else
+    echo "  Check if OS already has bzip2 library installed"
+    cat > conftest.c << _EOF_
+#include "bzlib.h"
+int main()
+{
+  bz_stream strm;
+  BZ2_bzCompressEnd(&strm);
+  return 0;
+}
+_EOF_
+    $CC $CFLAGS -o conftest conftest.c -lbz2 > /dev/null 2>/dev/null
+    if test $? -eq 0; then
+      echo "-- OS supports bzip2 - linking in bzip2"
+      D_USE_BZ2="-DUSE_BZIP2"
+      L_BZ2="${BZLF} -lbz2"
+    else
+      echo "-- Either bzlib.h or libbz2.a not found - no bzip2"
+    fi
+  fi
+fi
+
+
+echo CC=\"${CC}\" CF=\"${CFLAGSR} ${D_USE_BZ2}\" CRCA_O=\"${CRC32OA}\" \
+       AS=\"${CC} -c\" LFLAGS1=\"${LFLAGS1}\" LF2=\"${LFLAGS2}\" \
+       CC_BZ=\"${CC_BZ}\" CFLAGS_BZ=\"${CFLAGS_BZ}\" \
+       IZ_BZIP2=\"${IZ_BZIP2}\" D_USE_BZ2=\"${D_USE_BZ2}\" \
+       L_BZ2=\"${L_BZ2}\" LIBBZ2=\"${LIBBZ2}\"  > flags

Property changes on: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix/configure
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix/unix.c
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix/unix.c	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix/unix.c	(revision 5)
@@ -0,0 +1,2013 @@
+/*
+  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2009-Jan-02 or later
+  (the contents of which are also included in unzip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*---------------------------------------------------------------------------
+
+  unix.c
+
+  Unix-specific routines for use with Info-ZIP's UnZip 5.41 and later.
+
+  Contains:  readdir()
+             do_wild()           <-- generic enough to put in fileio.c?
+             mapattr()
+             mapname()
+             checkdir()
+             mkdir()
+             close_outfile()
+             defer_dir_attribs()
+             set_direc_attribs()
+             stamp_file()
+             version()
+
+  ---------------------------------------------------------------------------*/
+
+
+#define UNZIP_INTERNAL
+#include "unzip.h"
+
+#include <iconv.h>
+#include <langinfo.h>
+
+#ifdef SCO_XENIX
+#  define SYSNDIR
+#else  /* SCO Unix, AIX, DNIX, TI SysV, Coherent 4.x, ... */
+#  if defined(__convexc__) || defined(SYSV) || defined(CRAY) || defined(BSD4_4)
+#    define DIRENT
+#  endif
+#endif
+#if defined(_AIX) || defined(__mpexl)
+#  define DIRENT
+#endif
+#ifdef COHERENT
+#  if defined(_I386) || (defined(__COHERENT__) && (__COHERENT__ >= 0x420))
+#    define DIRENT
+#  endif
+#endif
+
+#ifdef _POSIX_VERSION
+#  ifndef DIRENT
+#    define DIRENT
+#  endif
+#endif
+
+#ifdef DIRENT
+#  include <dirent.h>
+#else
+#  ifdef SYSV
+#    ifdef SYSNDIR
+#      include <sys/ndir.h>
+#    else
+#      include <ndir.h>
+#    endif
+#  else /* !SYSV */
+#    ifndef NO_SYSDIR
+#      include <sys/dir.h>
+#    endif
+#  endif /* ?SYSV */
+#  ifndef dirent
+#    define dirent direct
+#  endif
+#endif /* ?DIRENT */
+
+#ifdef SET_DIR_ATTRIB
+typedef struct uxdirattr {      /* struct for holding unix style directory */
+    struct uxdirattr *next;     /*  info until can be sorted and set at end */
+    char *fn;                   /* filename of directory */
+    union {
+        iztimes t3;             /* mtime, atime, ctime */
+        ztimbuf t2;             /* modtime, actime */
+    } u;
+    unsigned perms;             /* same as min_info.file_attr */
+    int have_uidgid;            /* flag */
+    ulg uidgid[2];
+    char fnbuf[1];              /* buffer stub for directory name */
+} uxdirattr;
+#define UxAtt(d)  ((uxdirattr *)d)    /* typecast shortcut */
+#endif /* SET_DIR_ATTRIB */
+
+#ifdef ACORN_FTYPE_NFS
+/* Acorn bits for NFS filetyping */
+typedef struct {
+  uch ID[2];
+  uch size[2];
+  uch ID_2[4];
+  uch loadaddr[4];
+  uch execaddr[4];
+  uch attr[4];
+} RO_extra_block;
+
+#endif /* ACORN_FTYPE_NFS */
+
+/* static int created_dir;      */      /* used in mapname(), checkdir() */
+/* static int renamed_fullpath; */      /* ditto */
+
+static unsigned filtattr OF((__GPRO__ unsigned perms));
+
+
+/*****************************/
+/* Strings used multiple     */
+/* times in unix.c           */
+/*****************************/
+
+#ifndef MTS
+/* messages of code for setting file/directory attributes */
+static ZCONST char CannotSetItemUidGid[] =
+  "warning:  cannot set UID %lu and/or GID %lu for %s\n          %s\n";
+static ZCONST char CannotSetUidGid[] =
+  " (warning) cannot set UID %lu and/or GID %lu\n          %s";
+static ZCONST char CannotSetItemTimestamps[] =
+  "warning:  cannot set modif./access times for %s\n          %s\n";
+static ZCONST char CannotSetTimestamps[] =
+  " (warning) cannot set modif./access times\n          %s";
+#endif /* !MTS */
+
+
+#ifndef SFX
+#ifdef NO_DIR                  /* for AT&T 3B1 */
+
+#define opendir(path) fopen(path,"r")
+#define closedir(dir) fclose(dir)
+typedef FILE DIR;
+typedef struct zdir {
+    FILE *dirhandle;
+    struct dirent *entry;
+} DIR
+DIR *opendir OF((ZCONST char *dirspec));
+void closedir OF((DIR *dirp));
+struct dirent *readdir OF((DIR *dirp));
+
+DIR *opendir(dirspec)
+    ZCONST char *dirspec;
+{
+    DIR *dirp;
+
+    if ((dirp = malloc(sizeof(DIR)) != NULL) {
+        if ((dirp->dirhandle = fopen(dirspec, "r")) == NULL) {
+            free(dirp);
+            dirp = NULL;
+        }
+    }
+    return dirp;
+}
+
+void closedir(dirp)
+    DIR *dirp;
+{
+    fclose(dirp->dirhandle);
+    free(dirp);
+}
+
+/*
+ *  Apparently originally by Rich Salz.
+ *  Cleaned up and modified by James W. Birdsall.
+ */
+struct dirent *readdir(dirp)
+    DIR *dirp;
+{
+
+    if (dirp == NULL)
+        return NULL;
+
+    for (;;)
+        if (fread(&(dirp->entry), sizeof (struct dirent), 1,
+                  dirp->dirhandle) == 0)
+            return (struct dirent *)NULL;
+        else if ((dirp->entry).d_ino)
+            return &(dirp->entry);
+
+} /* end function readdir() */
+
+#endif /* NO_DIR */
+
+
+/**********************/
+/* Function do_wild() */   /* for porting: dir separator; match(ignore_case) */
+/**********************/
+
+char *do_wild(__G__ wildspec)
+    __GDEF
+    ZCONST char *wildspec;  /* only used first time on a given dir */
+{
+/* these statics are now declared in SYSTEM_SPECIFIC_GLOBALS in unxcfg.h:
+    static DIR *wild_dir = (DIR *)NULL;
+    static ZCONST char *wildname;
+    static char *dirname, matchname[FILNAMSIZ];
+    static int notfirstcall=FALSE, have_dirname, dirnamelen;
+*/
+    struct dirent *file;
+
+    /* Even when we're just returning wildspec, we *always* do so in
+     * matchname[]--calling routine is allowed to append four characters
+     * to the returned string, and wildspec may be a pointer to argv[].
+     */
+    if (!G.notfirstcall) {  /* first call:  must initialize everything */
+        G.notfirstcall = TRUE;
+
+        if (!iswild(wildspec)) {
+            strncpy(G.matchname, wildspec, FILNAMSIZ);
+            G.matchname[FILNAMSIZ-1] = '\0';
+            G.have_dirname = FALSE;
+            G.wild_dir = NULL;
+            return G.matchname;
+        }
+
+        /* break the wildspec into a directory part and a wildcard filename */
+        if ((G.wildname = (ZCONST char *)strrchr(wildspec, '/')) == NULL) {
+            G.dirname = ".";
+            G.dirnamelen = 1;
+            G.have_dirname = FALSE;
+            G.wildname = wildspec;
+        } else {
+            ++G.wildname;     /* point at character after '/' */
+            G.dirnamelen = G.wildname - wildspec;
+            if ((G.dirname = (char *)malloc(G.dirnamelen+1)) == (char *)NULL) {
+                Info(slide, 0x201, ((char *)slide,
+                  "warning:  cannot allocate wildcard buffers\n"));
+                strncpy(G.matchname, wildspec, FILNAMSIZ);
+                G.matchname[FILNAMSIZ-1] = '\0';
+                return G.matchname; /* but maybe filespec was not a wildcard */
+            }
+            strncpy(G.dirname, wildspec, G.dirnamelen);
+            G.dirname[G.dirnamelen] = '\0';   /* terminate for strcpy below */
+            G.have_dirname = TRUE;
+        }
+
+        if ((G.wild_dir = (zvoid *)opendir(G.dirname)) != (zvoid *)NULL) {
+            while ((file = readdir((DIR *)G.wild_dir)) !=
+                   (struct dirent *)NULL) {
+                Trace((stderr, "do_wild:  readdir returns %s\n",
+                  FnFilter1(file->d_name)));
+                if (file->d_name[0] == '.' && G.wildname[0] != '.')
+                    continue; /* Unix:  '*' and '?' do not match leading dot */
+                if (match(file->d_name, G.wildname, 0 WISEP) &&/*0=case sens.*/
+                    /* skip "." and ".." directory entries */
+                    strcmp(file->d_name, ".") && strcmp(file->d_name, "..")) {
+                    Trace((stderr, "do_wild:  match() succeeds\n"));
+                    if (G.have_dirname) {
+                        strcpy(G.matchname, G.dirname);
+                        strcpy(G.matchname+G.dirnamelen, file->d_name);
+                    } else
+                        strcpy(G.matchname, file->d_name);
+                    return G.matchname;
+                }
+            }
+            /* if we get to here directory is exhausted, so close it */
+            closedir((DIR *)G.wild_dir);
+            G.wild_dir = (zvoid *)NULL;
+        }
+        Trace((stderr, "do_wild:  opendir(%s) returns NULL\n",
+          FnFilter1(G.dirname)));
+
+        /* return the raw wildspec in case that works (e.g., directory not
+         * searchable, but filespec was not wild and file is readable) */
+        strncpy(G.matchname, wildspec, FILNAMSIZ);
+        G.matchname[FILNAMSIZ-1] = '\0';
+        return G.matchname;
+    }
+
+    /* last time through, might have failed opendir but returned raw wildspec */
+    if ((DIR *)G.wild_dir == (DIR *)NULL) {
+        G.notfirstcall = FALSE; /* nothing left--reset for new wildspec */
+        if (G.have_dirname)
+            free(G.dirname);
+        return (char *)NULL;
+    }
+
+    /* If we've gotten this far, we've read and matched at least one entry
+     * successfully (in a previous call), so dirname has been copied into
+     * matchname already.
+     */
+    while ((file = readdir((DIR *)G.wild_dir)) != (struct dirent *)NULL) {
+        Trace((stderr, "do_wild:  readdir returns %s\n",
+          FnFilter1(file->d_name)));
+        if (file->d_name[0] == '.' && G.wildname[0] != '.')
+            continue;   /* Unix:  '*' and '?' do not match leading dot */
+        if (match(file->d_name, G.wildname, 0 WISEP)) { /* 0 == case sens. */
+            Trace((stderr, "do_wild:  match() succeeds\n"));
+            if (G.have_dirname) {
+                /* strcpy(G.matchname, G.dirname); */
+                strcpy(G.matchname+G.dirnamelen, file->d_name);
+            } else
+                strcpy(G.matchname, file->d_name);
+            return G.matchname;
+        }
+    }
+
+    closedir((DIR *)G.wild_dir);  /* at least one entry read; nothing left */
+    G.wild_dir = (zvoid *)NULL;
+    G.notfirstcall = FALSE;       /* reset for new wildspec */
+    if (G.have_dirname)
+        free(G.dirname);
+    return (char *)NULL;
+
+} /* end function do_wild() */
+
+#endif /* !SFX */
+
+
+
+
+#ifndef S_ISUID
+# define S_ISUID        0004000 /* set user id on execution */
+#endif
+#ifndef S_ISGID
+# define S_ISGID        0002000 /* set group id on execution */
+#endif
+#ifndef S_ISVTX
+# define S_ISVTX        0001000 /* save swapped text even after use */
+#endif
+
+/************************/
+/*  Function filtattr() */
+/************************/
+/* This is used to clear or keep the SUID and SGID bits on file permissions.
+ * It's possible that a file in an archive could have one of these bits set
+ * and, unknown to the person unzipping, could allow others to execute the
+ * file as the user or group.  The new option -K bypasses this check.
+ */
+
+static unsigned filtattr(__G__ perms)
+    __GDEF
+    unsigned perms;
+{
+    /* keep setuid/setgid/tacky perms? */
+    if (!uO.K_flag)
+        perms &= ~(S_ISUID | S_ISGID | S_ISVTX);
+
+    return (0xffff & perms);
+} /* end function filtattr() */
+
+
+
+
+
+/**********************/
+/* Function mapattr() */
+/**********************/
+
+int mapattr(__G)
+    __GDEF
+{
+    int r;
+    ulg tmp = G.crec.external_file_attributes;
+
+    G.pInfo->file_attr = 0;
+    /* initialized to 0 for check in "default" branch below... */
+
+    switch (G.pInfo->hostnum) {
+        case AMIGA_:
+            tmp = (unsigned)(tmp>>17 & 7);   /* Amiga RWE bits */
+            G.pInfo->file_attr = (unsigned)(tmp<<6 | tmp<<3 | tmp);
+            break;
+        case THEOS_:
+            tmp &= 0xF1FFFFFFL;
+            if ((tmp & 0xF0000000L) != 0x40000000L)
+                tmp &= 0x01FFFFFFL;     /* not a dir, mask all ftype bits */
+            else
+                tmp &= 0x41FFFFFFL;     /* leave directory bit as set */
+            /* fall through! */
+        case UNIX_:
+        case VMS_:
+        case ACORN_:
+        case ATARI_:
+        case ATHEOS_:
+        case BEOS_:
+        case QDOS_:
+        case TANDEM_:
+            r = FALSE;
+            G.pInfo->file_attr = (unsigned)(tmp >> 16);
+            if (G.pInfo->file_attr == 0 && G.extra_field) {
+                /* Some (non-Info-ZIP) implementations of Zip for Unix and
+                 * VMS (and probably others ??) leave 0 in the upper 16-bit
+                 * part of the external_file_attributes field. Instead, they
+                 * store file permission attributes in some extra field.
+                 * As a work-around, we search for the presence of one of
+                 * these extra fields and fall back to the MSDOS compatible
+                 * part of external_file_attributes if one of the known
+                 * e.f. types has been detected.
+                 * Later, we might implement extraction of the permission
+                 * bits from the VMS extra field. But for now, the work-around
+                 * should be sufficient to provide "readable" extracted files.
+                 * (For ASI Unix e.f., an experimental remap of the e.f.
+                 * mode value IS already provided!)
+                 */
+                ush ebID;
+                unsigned ebLen;
+                uch *ef = G.extra_field;
+                unsigned ef_len = G.crec.extra_field_length;
+
+                while (!r && ef_len >= EB_HEADSIZE) {
+                    ebID = makeword(ef);
+                    ebLen = (unsigned)makeword(ef+EB_LEN);
+                    if (ebLen > (ef_len - EB_HEADSIZE))
+                        /* discoverd some e.f. inconsistency! */
+                        break;
+                    switch (ebID) {
+                      case EF_ASIUNIX:
+                        if (ebLen >= (EB_ASI_MODE+2)) {
+                            G.pInfo->file_attr =
+                              (unsigned)makeword(ef+(EB_HEADSIZE+EB_ASI_MODE));
+                            /* force stop of loop: */
+                            ef_len = (ebLen + EB_HEADSIZE);
+                            break;
+                        }
+                        /* else: fall through! */
+                      case EF_PKVMS:
+                        /* "found nondecypherable e.f. with perm. attr" */
+                        r = TRUE;
+                      default:
+                        break;
+                    }
+                    ef_len -= (ebLen + EB_HEADSIZE);
+                    ef += (ebLen + EB_HEADSIZE);
+                }
+            }
+            if (!r) {
+#ifdef SYMLINKS
+                /* Check if the file is a (POSIX-compatible) symbolic link.
+                 * We restrict symlink support to those "made-by" hosts that
+                 * are known to support symbolic links.
+                 */
+                G.pInfo->symlink = S_ISLNK(G.pInfo->file_attr) &&
+                                   SYMLINK_HOST(G.pInfo->hostnum);
+#endif
+                return 0;
+            }
+            /* fall through! */
+        /* all remaining cases:  expand MSDOS read-only bit into write perms */
+        case FS_FAT_:
+            /* PKWARE's PKZip for Unix marks entries as FS_FAT_, but stores the
+             * Unix attributes in the upper 16 bits of the external attributes
+             * field, just like Info-ZIP's Zip for Unix.  We try to use that
+             * value, after a check for consistency with the MSDOS attribute
+             * bits (see below).
+             */
+            G.pInfo->file_attr = (unsigned)(tmp >> 16);
+            /* fall through! */
+        case FS_HPFS_:
+        case FS_NTFS_:
+        case MAC_:
+        case TOPS20_:
+        default:
+            /* Ensure that DOS subdir bit is set when the entry's name ends
+             * in a '/'.  Some third-party Zip programs fail to set the subdir
+             * bit for directory entries.
+             */
+            if ((tmp & 0x10) == 0) {
+                extent fnlen = strlen(G.filename);
+                if (fnlen > 0 && G.filename[fnlen-1] == '/')
+                    tmp |= 0x10;
+            }
+            /* read-only bit --> write perms; subdir bit --> dir exec bit */
+            tmp = !(tmp & 1) << 1  |  (tmp & 0x10) >> 4;
+            if ((G.pInfo->file_attr & 0700) == (unsigned)(0400 | tmp<<6)) {
+                /* keep previous G.pInfo->file_attr setting, when its "owner"
+                 * part appears to be consistent with DOS attribute flags!
+                 */
+#ifdef SYMLINKS
+                /* Entries "made by FS_FAT_" could have been zipped on a
+                 * system that supports POSIX-style symbolic links.
+                 */
+                G.pInfo->symlink = S_ISLNK(G.pInfo->file_attr) &&
+                                   (G.pInfo->hostnum == FS_FAT_);
+#endif
+                return 0;
+            }
+            G.pInfo->file_attr = (unsigned)(0444 | tmp<<6 | tmp<<3 | tmp);
+            break;
+    } /* end switch (host-OS-created-by) */
+
+    /* for originating systems with no concept of "group," "other," "system": */
+    umask( (int)(tmp=umask(0)) );    /* apply mask to expanded r/w(/x) perms */
+    G.pInfo->file_attr &= ~tmp;
+
+    return 0;
+
+} /* end function mapattr() */
+
+
+
+
+
+/************************/
+/*  Function mapname()  */
+/************************/
+
+int mapname(__G__ renamed)
+    __GDEF
+    int renamed;
+/*
+ * returns:
+ *  MPN_OK          - no problem detected
+ *  MPN_INF_TRUNC   - caution (truncated filename)
+ *  MPN_INF_SKIP    - info "skip entry" (dir doesn't exist)
+ *  MPN_ERR_SKIP    - error -> skip entry
+ *  MPN_ERR_TOOLONG - error -> path is too long
+ *  MPN_NOMEM       - error (memory allocation failed) -> skip entry
+ *  [also MPN_VOL_LABEL, MPN_CREATED_DIR]
+ */
+{
+    char pathcomp[FILNAMSIZ];      /* path-component buffer */
+    char *pp, *cp=(char *)NULL;    /* character pointers */
+    char *lastsemi=(char *)NULL;   /* pointer to last semi-colon in pathcomp */
+#ifdef ACORN_FTYPE_NFS
+    char *lastcomma=(char *)NULL;  /* pointer to last comma in pathcomp */
+    RO_extra_block *ef_spark;      /* pointer Acorn FTYPE ef block */
+#endif
+    int killed_ddot = FALSE;       /* is set when skipping "../" pathcomp */
+    int error = MPN_OK;
+    register unsigned workch;      /* hold the character being tested */
+
+
+/*---------------------------------------------------------------------------
+    Initialize various pointers and counters and stuff.
+  ---------------------------------------------------------------------------*/
+
+    if (G.pInfo->vollabel)
+        return MPN_VOL_LABEL;   /* can't set disk volume labels in Unix */
+
+    /* can create path as long as not just freshening, or if user told us */
+    G.create_dirs = (!uO.fflag || renamed);
+
+    G.created_dir = FALSE;      /* not yet */
+
+    /* user gave full pathname:  don't prepend rootpath */
+    G.renamed_fullpath = (renamed && (*G.filename == '/'));
+
+    if (checkdir(__G__ (char *)NULL, INIT) == MPN_NOMEM)
+        return MPN_NOMEM;       /* initialize path buffer, unless no memory */
+
+    *pathcomp = '\0';           /* initialize translation buffer */
+    pp = pathcomp;              /* point to translation buffer */
+    if (uO.jflag)               /* junking directories */
+        cp = (char *)strrchr(G.filename, '/');
+    if (cp == (char *)NULL)     /* no '/' or not junking dirs */
+        cp = G.filename;        /* point to internal zipfile-member pathname */
+    else
+        ++cp;                   /* point to start of last component of path */
+
+/*---------------------------------------------------------------------------
+    Begin main loop through characters in filename.
+  ---------------------------------------------------------------------------*/
+
+    while ((workch = (uch)*cp++) != 0) {
+
+        switch (workch) {
+            case '/':             /* can assume -j flag not given */
+                *pp = '\0';
+                if (strcmp(pathcomp, ".") == 0) {
+                    /* don't bother appending "./" to the path */
+                    *pathcomp = '\0';
+                } else if (!uO.ddotflag && strcmp(pathcomp, "..") == 0) {
+                    /* "../" dir traversal detected, skip over it */
+                    *pathcomp = '\0';
+                    killed_ddot = TRUE;     /* set "show message" flag */
+                }
+                /* when path component is not empty, append it now */
+                if (*pathcomp != '\0' &&
+                    ((error = checkdir(__G__ pathcomp, APPEND_DIR))
+                     & MPN_MASK) > MPN_INF_TRUNC)
+                    return error;
+                pp = pathcomp;    /* reset conversion buffer for next piece */
+                lastsemi = (char *)NULL; /* leave direct. semi-colons alone */
+                break;
+
+#ifdef __CYGWIN__   /* Cygwin runs on Win32, apply FAT/NTFS filename rules */
+            case ':':         /* drive spec not stored, so no colon allowed */
+            case '\\':        /* '\\' may come as normal filename char (not */
+            case '<':         /*  dir sep char!) from unix-like file system */
+            case '>':         /* no redirection symbols allowed either */
+            case '|':         /* no pipe signs allowed */
+            case '"':         /* no double quotes allowed */
+            case '?':         /* no wildcards allowed */
+            case '*':
+                *pp++ = '_';  /* these rules apply equally to FAT and NTFS */
+                break;
+#endif
+
+            case ';':             /* VMS version (or DEC-20 attrib?) */
+                lastsemi = pp;
+                *pp++ = ';';      /* keep for now; remove VMS ";##" */
+                break;            /*  later, if requested */
+
+#ifdef ACORN_FTYPE_NFS
+            case ',':             /* NFS filetype extension */
+                lastcomma = pp;
+                *pp++ = ',';      /* keep for now; may need to remove */
+                break;            /*  later, if requested */
+#endif
+
+#ifdef MTS
+            case ' ':             /* change spaces to underscore under */
+                *pp++ = '_';      /*  MTS; leave as spaces under Unix */
+                break;
+#endif
+
+            default:
+                /* disable control character filter when requested,
+                 * else allow 8-bit characters (e.g. UTF-8) in filenames:
+                 */
+                if (uO.cflxflag ||
+                    (isprint(workch) || (128 <= workch && workch <= 254)))
+                    *pp++ = (char)workch;
+        } /* end switch */
+
+    } /* end while loop */
+
+    /* Show warning when stripping insecure "parent dir" path components */
+    if (killed_ddot && QCOND2) {
+        Info(slide, 0, ((char *)slide,
+          "warning:  skipped \"../\" path component(s) in %s\n",
+          FnFilter1(G.filename)));
+        if (!(error & ~MPN_MASK))
+            error = (error & MPN_MASK) | PK_WARN;
+    }
+
+/*---------------------------------------------------------------------------
+    Report if directory was created (and no file to create:  filename ended
+    in '/'), check name to be sure it exists, and combine path and name be-
+    fore exiting.
+  ---------------------------------------------------------------------------*/
+
+    if (G.filename[strlen(G.filename) - 1] == '/') {
+        checkdir(__G__ G.filename, GETPATH);
+        if (G.created_dir) {
+            if (QCOND2) {
+                Info(slide, 0, ((char *)slide, "   creating: %s\n",
+                  FnFilter1(G.filename)));
+            }
+#ifndef NO_CHMOD
+            /* Filter out security-relevant attributes bits. */
+            G.pInfo->file_attr = filtattr(__G__ G.pInfo->file_attr);
+            /* When extracting non-UNIX directories or when extracting
+             * without UID/GID restoration or SGID preservation, any
+             * SGID flag inherited from the parent directory should be
+             * maintained to allow files extracted into this new folder
+             * to inherit the GID setting from the parent directory.
+             */
+            if (G.pInfo->hostnum != UNIX_ || !(uO.X_flag || uO.K_flag)) {
+                /* preserve SGID bit when inherited from parent dir */
+                if (!SSTAT(G.filename, &G.statbuf)) {
+                    G.pInfo->file_attr |= G.statbuf.st_mode & S_ISGID;
+                } else {
+                    perror("Could not read directory attributes");
+                }
+            }
+
+            /* set approx. dir perms (make sure can still read/write in dir) */
+            if (chmod(G.filename, G.pInfo->file_attr | 0700))
+                perror("chmod (directory attributes) error");
+#endif
+            /* set dir time (note trailing '/') */
+            return (error & ~MPN_MASK) | MPN_CREATED_DIR;
+        }
+        /* dir existed already; don't look for data to extract */
+        return (error & ~MPN_MASK) | MPN_INF_SKIP;
+    }
+
+    *pp = '\0';                   /* done with pathcomp:  terminate it */
+
+    /* if not saving them, remove VMS version numbers (appended ";###") */
+    if (!uO.V_flag && lastsemi) {
+        pp = lastsemi + 1;
+        while (isdigit((uch)(*pp)))
+            ++pp;
+        if (*pp == '\0')          /* only digits between ';' and end:  nuke */
+            *lastsemi = '\0';
+    }
+
+    /* On UNIX (and compatible systems), "." and ".." are reserved for
+     * directory navigation and cannot be used as regular file names.
+     * These reserved one-dot and two-dot names are mapped to "_" and "__".
+     */
+    if (strcmp(pathcomp, ".") == 0)
+        *pathcomp = '_';
+    else if (strcmp(pathcomp, "..") == 0)
+        strcpy(pathcomp, "__");
+
+#ifdef ACORN_FTYPE_NFS
+    /* translate Acorn filetype information if asked to do so */
+    if (uO.acorn_nfs_ext &&
+        (ef_spark = (RO_extra_block *)
+                    getRISCOSexfield(G.extra_field, G.lrec.extra_field_length))
+        != (RO_extra_block *)NULL)
+    {
+        /* file *must* have a RISC OS extra field */
+        long ft = (long)makelong(ef_spark->loadaddr);
+        /*32-bit*/
+        if (lastcomma) {
+            pp = lastcomma + 1;
+            while (isxdigit((uch)(*pp))) ++pp;
+            if (pp == lastcomma+4 && *pp == '\0') *lastcomma='\0'; /* nuke */
+        }
+        if ((ft & 1<<31)==0) ft=0x000FFD00;
+        sprintf(pathcomp+strlen(pathcomp), ",%03x", (int)(ft>>8) & 0xFFF);
+    }
+#endif /* ACORN_FTYPE_NFS */
+
+    if (*pathcomp == '\0') {
+        Info(slide, 1, ((char *)slide, "mapname:  conversion of %s failed\n",
+          FnFilter1(G.filename)));
+        return (error & ~MPN_MASK) | MPN_ERR_SKIP;
+    }
+
+    checkdir(__G__ pathcomp, APPEND_NAME);  /* returns 1 if truncated: care? */
+    checkdir(__G__ G.filename, GETPATH);
+
+    return error;
+
+} /* end function mapname() */
+
+
+
+
+#if 0  /*========== NOTES ==========*/
+
+  extract-to dir:      a:path/
+  buildpath:           path1/path2/ ...   (NULL-terminated)
+  pathcomp:                filename
+
+  mapname():
+    loop over chars in zipfile member name
+      checkdir(path component, COMPONENT | CREATEDIR) --> map as required?
+        (d:/tmp/unzip/)                    (disk:[tmp.unzip.)
+        (d:/tmp/unzip/jj/)                 (disk:[tmp.unzip.jj.)
+        (d:/tmp/unzip/jj/temp/)            (disk:[tmp.unzip.jj.temp.)
+    finally add filename itself and check for existence? (could use with rename)
+        (d:/tmp/unzip/jj/temp/msg.outdir)  (disk:[tmp.unzip.jj.temp]msg.outdir)
+    checkdir(name, GETPATH)     -->  copy path to name and free space
+
+#endif /* 0 */
+
+
+
+
+/***********************/
+/* Function checkdir() */
+/***********************/
+
+int checkdir(__G__ pathcomp, flag)
+    __GDEF
+    char *pathcomp;
+    int flag;
+/*
+ * returns:
+ *  MPN_OK          - no problem detected
+ *  MPN_INF_TRUNC   - (on APPEND_NAME) truncated filename
+ *  MPN_INF_SKIP    - path doesn't exist, not allowed to create
+ *  MPN_ERR_SKIP    - path doesn't exist, tried to create and failed; or path
+ *                    exists and is not a directory, but is supposed to be
+ *  MPN_ERR_TOOLONG - path is too long
+ *  MPN_NOMEM       - can't allocate memory for filename buffers
+ */
+{
+ /* static int rootlen = 0; */  /* length of rootpath */
+ /* static char *rootpath;  */  /* user's "extract-to" directory */
+ /* static char *buildpath; */  /* full path (so far) to extracted file */
+ /* static char *end;       */  /* pointer to end of buildpath ('\0') */
+
+#   define FN_MASK   7
+#   define FUNCTION  (flag & FN_MASK)
+
+
+
+/*---------------------------------------------------------------------------
+    APPEND_DIR:  append the path component to the path being built and check
+    for its existence.  If doesn't exist and we are creating directories, do
+    so for this one; else signal success or error as appropriate.
+  ---------------------------------------------------------------------------*/
+
+    if (FUNCTION == APPEND_DIR) {
+        int too_long = FALSE;
+#ifdef SHORT_NAMES
+        char *old_end = end;
+#endif
+
+        Trace((stderr, "appending dir segment [%s]\n", FnFilter1(pathcomp)));
+        while ((*G.end = *pathcomp++) != '\0')
+            ++G.end;
+#ifdef SHORT_NAMES   /* path components restricted to 14 chars, typically */
+        if ((G.end-old_end) > FILENAME_MAX)  /* GRR:  proper constant? */
+            *(G.end = old_end + FILENAME_MAX) = '\0';
+#endif
+
+        /* GRR:  could do better check, see if overrunning buffer as we go:
+         * check end-buildpath after each append, set warning variable if
+         * within 20 of FILNAMSIZ; then if var set, do careful check when
+         * appending.  Clear variable when begin new path. */
+
+        /* next check: need to append '/', at least one-char name, '\0' */
+        if ((G.end-G.buildpath) > FILNAMSIZ-3)
+            too_long = TRUE;                    /* check if extracting dir? */
+        if (SSTAT(G.buildpath, &G.statbuf)) {   /* path doesn't exist */
+            if (!G.create_dirs) { /* told not to create (freshening) */
+                free(G.buildpath);
+                return MPN_INF_SKIP;    /* path doesn't exist: nothing to do */
+            }
+            if (too_long) {
+                Info(slide, 1, ((char *)slide,
+                  "checkdir error:  path too long: %s\n",
+                  FnFilter1(G.buildpath)));
+                free(G.buildpath);
+                /* no room for filenames:  fatal */
+                return MPN_ERR_TOOLONG;
+            }
+            if (mkdir(G.buildpath, 0777) == -1) {   /* create the directory */
+                Info(slide, 1, ((char *)slide,
+                  "checkdir error:  cannot create %s\n\
+                 %s\n\
+                 unable to process %s.\n",
+                  FnFilter2(G.buildpath),
+                  strerror(errno),
+                  FnFilter1(G.filename)));
+                free(G.buildpath);
+                /* path didn't exist, tried to create, failed */
+                return MPN_ERR_SKIP;
+            }
+            G.created_dir = TRUE;
+        } else if (!S_ISDIR(G.statbuf.st_mode)) {
+            Info(slide, 1, ((char *)slide,
+              "checkdir error:  %s exists but is not directory\n\
+                 unable to process %s.\n",
+              FnFilter2(G.buildpath), FnFilter1(G.filename)));
+            free(G.buildpath);
+            /* path existed but wasn't dir */
+            return MPN_ERR_SKIP;
+        }
+        if (too_long) {
+            Info(slide, 1, ((char *)slide,
+              "checkdir error:  path too long: %s\n", FnFilter1(G.buildpath)));
+            free(G.buildpath);
+            /* no room for filenames:  fatal */
+            return MPN_ERR_TOOLONG;
+        }
+        *G.end++ = '/';
+        *G.end = '\0';
+        Trace((stderr, "buildpath now = [%s]\n", FnFilter1(G.buildpath)));
+        return MPN_OK;
+
+    } /* end if (FUNCTION == APPEND_DIR) */
+
+/*---------------------------------------------------------------------------
+    GETPATH:  copy full path to the string pointed at by pathcomp, and free
+    G.buildpath.
+  ---------------------------------------------------------------------------*/
+
+    if (FUNCTION == GETPATH) {
+        strcpy(pathcomp, G.buildpath);
+        Trace((stderr, "getting and freeing path [%s]\n",
+          FnFilter1(pathcomp)));
+        free(G.buildpath);
+        G.buildpath = G.end = (char *)NULL;
+        return MPN_OK;
+    }
+
+/*---------------------------------------------------------------------------
+    APPEND_NAME:  assume the path component is the filename; append it and
+    return without checking for existence.
+  ---------------------------------------------------------------------------*/
+
+    if (FUNCTION == APPEND_NAME) {
+#ifdef SHORT_NAMES
+        char *old_end = end;
+#endif
+
+        Trace((stderr, "appending filename [%s]\n", FnFilter1(pathcomp)));
+        while ((*G.end = *pathcomp++) != '\0') {
+            ++G.end;
+#ifdef SHORT_NAMES  /* truncate name at 14 characters, typically */
+            if ((G.end-old_end) > FILENAME_MAX)    /* GRR:  proper constant? */
+                *(G.end = old_end + FILENAME_MAX) = '\0';
+#endif
+            if ((G.end-G.buildpath) >= FILNAMSIZ) {
+                *--G.end = '\0';
+                Info(slide, 0x201, ((char *)slide,
+                  "checkdir warning:  path too long; truncating\n\
+                   %s\n                -> %s\n",
+                  FnFilter1(G.filename), FnFilter2(G.buildpath)));
+                return MPN_INF_TRUNC;   /* filename truncated */
+            }
+        }
+        Trace((stderr, "buildpath now = [%s]\n", FnFilter1(G.buildpath)));
+        /* could check for existence here, prompt for new name... */
+        return MPN_OK;
+    }
+
+/*---------------------------------------------------------------------------
+    INIT:  allocate and initialize buffer space for the file currently being
+    extracted.  If file was renamed with an absolute path, don't prepend the
+    extract-to path.
+  ---------------------------------------------------------------------------*/
+
+/* GRR:  for VMS and TOPS-20, add up to 13 to strlen */
+
+    if (FUNCTION == INIT) {
+        Trace((stderr, "initializing buildpath to "));
+#ifdef ACORN_FTYPE_NFS
+        if ((G.buildpath = (char *)malloc(strlen(G.filename)+G.rootlen+
+                                          (uO.acorn_nfs_ext ? 5 : 1)))
+#else
+        if ((G.buildpath = (char *)malloc(strlen(G.filename)+G.rootlen+1))
+#endif
+            == (char *)NULL)
+            return MPN_NOMEM;
+        if ((G.rootlen > 0) && !G.renamed_fullpath) {
+            strcpy(G.buildpath, G.rootpath);
+            G.end = G.buildpath + G.rootlen;
+        } else {
+            *G.buildpath = '\0';
+            G.end = G.buildpath;
+        }
+        Trace((stderr, "[%s]\n", FnFilter1(G.buildpath)));
+        return MPN_OK;
+    }
+
+/*---------------------------------------------------------------------------
+    ROOT:  if appropriate, store the path in rootpath and create it if
+    necessary; else assume it's a zipfile member and return.  This path
+    segment gets used in extracting all members from every zipfile specified
+    on the command line.
+  ---------------------------------------------------------------------------*/
+
+#if (!defined(SFX) || defined(SFX_EXDIR))
+    if (FUNCTION == ROOT) {
+        Trace((stderr, "initializing root path to [%s]\n",
+          FnFilter1(pathcomp)));
+        if (pathcomp == (char *)NULL) {
+            G.rootlen = 0;
+            return MPN_OK;
+        }
+        if (G.rootlen > 0)      /* rootpath was already set, nothing to do */
+            return MPN_OK;
+        if ((G.rootlen = strlen(pathcomp)) > 0) {
+            char *tmproot;
+
+            if ((tmproot = (char *)malloc(G.rootlen+2)) == (char *)NULL) {
+                G.rootlen = 0;
+                return MPN_NOMEM;
+            }
+            strcpy(tmproot, pathcomp);
+            if (tmproot[G.rootlen-1] == '/') {
+                tmproot[--G.rootlen] = '\0';
+            }
+            if (G.rootlen > 0 && (SSTAT(tmproot, &G.statbuf) ||
+                                  !S_ISDIR(G.statbuf.st_mode)))
+            {   /* path does not exist */
+                if (!G.create_dirs /* || iswild(tmproot) */ ) {
+                    free(tmproot);
+                    G.rootlen = 0;
+                    /* skip (or treat as stored file) */
+                    return MPN_INF_SKIP;
+                }
+                /* create the directory (could add loop here scanning tmproot
+                 * to create more than one level, but why really necessary?) */
+                if (mkdir(tmproot, 0777) == -1) {
+                    Info(slide, 1, ((char *)slide,
+                      "checkdir:  cannot create extraction directory: %s\n\
+           %s\n",
+                      FnFilter1(tmproot), strerror(errno)));
+                    free(tmproot);
+                    G.rootlen = 0;
+                    /* path didn't exist, tried to create, and failed: */
+                    /* file exists, or 2+ subdir levels required */
+                    return MPN_ERR_SKIP;
+                }
+            }
+            tmproot[G.rootlen++] = '/';
+            tmproot[G.rootlen] = '\0';
+            if ((G.rootpath = (char *)realloc(tmproot, G.rootlen+1)) == NULL) {
+                free(tmproot);
+                G.rootlen = 0;
+                return MPN_NOMEM;
+            }
+            Trace((stderr, "rootpath now = [%s]\n", FnFilter1(G.rootpath)));
+        }
+        return MPN_OK;
+    }
+#endif /* !SFX || SFX_EXDIR */
+
+/*---------------------------------------------------------------------------
+    END:  free rootpath, immediately prior to program exit.
+  ---------------------------------------------------------------------------*/
+
+    if (FUNCTION == END) {
+        Trace((stderr, "freeing rootpath\n"));
+        if (G.rootlen > 0) {
+            free(G.rootpath);
+            G.rootlen = 0;
+        }
+        return MPN_OK;
+    }
+
+    return MPN_INVALID; /* should never reach */
+
+} /* end function checkdir() */
+
+
+
+
+
+#ifdef NO_MKDIR
+
+/********************/
+/* Function mkdir() */
+/********************/
+
+int mkdir(path, mode)
+    ZCONST char *path;
+    int mode;   /* ignored */
+/*
+ * returns:   0 - successful
+ *           -1 - failed (errno not set, however)
+ */
+{
+    char command[FILNAMSIZ+40]; /* buffer for system() call */
+
+    /* GRR 930416:  added single quotes around path to avoid bug with
+     * creating directories with ampersands in name; not yet tested */
+    sprintf(command, "IFS=\" \t\n\" /bin/mkdir '%s' 2>/dev/null", path);
+    if (system(command))
+        return -1;
+    return 0;
+}
+
+#endif /* NO_MKDIR */
+
+
+
+
+#if (!defined(MTS) || defined(SET_DIR_ATTRIB))
+static int get_extattribs OF((__GPRO__ iztimes *pzt, ulg z_uidgid[2]));
+
+static int get_extattribs(__G__ pzt, z_uidgid)
+    __GDEF
+    iztimes *pzt;
+    ulg z_uidgid[2];
+{
+/*---------------------------------------------------------------------------
+    Convert from MSDOS-format local time and date to Unix-format 32-bit GMT
+    time:  adjust base year from 1980 to 1970, do usual conversions from
+    yy/mm/dd hh:mm:ss to elapsed seconds, and account for timezone and day-
+    light savings time differences.  If we have a Unix extra field, however,
+    we're laughing:  both mtime and atime are ours.  On the other hand, we
+    then have to check for restoration of UID/GID.
+  ---------------------------------------------------------------------------*/
+    int have_uidgid_flg;
+    unsigned eb_izux_flg;
+
+    eb_izux_flg = (G.extra_field ? ef_scan_for_izux(G.extra_field,
+                   G.lrec.extra_field_length, 0, G.lrec.last_mod_dos_datetime,
+#ifdef IZ_CHECK_TZ
+                   (G.tz_is_valid ? pzt : NULL),
+#else
+                   pzt,
+#endif
+                   z_uidgid) : 0);
+    if (eb_izux_flg & EB_UT_FL_MTIME) {
+        TTrace((stderr, "\nget_extattribs:  Unix e.f. modif. time = %ld\n",
+          pzt->mtime));
+    } else {
+        pzt->mtime = dos_to_unix_time(G.lrec.last_mod_dos_datetime);
+    }
+    if (eb_izux_flg & EB_UT_FL_ATIME) {
+        TTrace((stderr, "get_extattribs:  Unix e.f. access time = %ld\n",
+          pzt->atime));
+    } else {
+        pzt->atime = pzt->mtime;
+        TTrace((stderr, "\nget_extattribs:  modification/access times = %ld\n",
+          pzt->mtime));
+    }
+
+    /* if -X option was specified and we have UID/GID info, restore it */
+    have_uidgid_flg =
+#ifdef RESTORE_UIDGID
+            (uO.X_flag && (eb_izux_flg & EB_UX2_VALID));
+#else
+            0;
+#endif
+    return have_uidgid_flg;
+}
+#endif /* !MTS || SET_DIR_ATTRIB */
+
+
+
+#ifndef MTS
+
+/****************************/
+/* Function CloseError()    */
+/***************************/
+
+int CloseError(__G)
+    __GDEF
+{
+    int errval = PK_OK;
+    
+    if (fclose(G.outfile) < 0) {
+          switch (errno) {
+                case ENOSPC:
+                    /* Do we need this on fileio.c? */
+                    Info(slide, 0x4a1, ((char *)slide, "%s: write error (disk full?).   Continue? (y/n/^C) ",
+                          FnFilter1(G.filename)));
+                    fgets(G.answerbuf, 9, stdin);
+                    if (*G.answerbuf == 'y')     /* stop writing to this file */
+                        G.disk_full = 1;         /* pass to next */
+                    else
+                        G.disk_full = 2;         /* no: exit program */
+          
+                    errval = PK_DISK;
+                    break;
+
+                default:
+                    errval = PK_WARN;
+          }
+     }
+     return errval;
+} /* End of CloseError() */
+
+/****************************/
+/* Function close_outfile() */
+/****************************/
+
+int close_outfile(__G) 
+    __GDEF
+{
+    union {
+        iztimes t3;             /* mtime, atime, ctime */
+        ztimbuf t2;             /* modtime, actime */
+    } zt;
+    ulg z_uidgid[2];
+    int have_uidgid_flg;
+    int errval = PK_OK;
+
+    have_uidgid_flg = get_extattribs(__G__ &(zt.t3), z_uidgid);
+
+/*---------------------------------------------------------------------------
+    If symbolic links are supported, allocate storage for a symlink control
+    structure, put the uncompressed "data" and other required info in it, and
+    add the structure to the "deferred symlinks" chain.  Since we know it's a
+    symbolic link to start with, we shouldn't have to worry about overflowing
+    unsigned ints with unsigned longs.
+  ---------------------------------------------------------------------------*/
+
+#ifdef SYMLINKS
+    if (G.symlnk) {
+        extent ucsize = (extent)G.lrec.ucsize;
+# ifdef SET_SYMLINK_ATTRIBS
+        extent attribsize = sizeof(unsigned) +
+                            (have_uidgid_flg ? sizeof(z_uidgid) : 0);
+# else
+        extent attribsize = 0;
+# endif
+        /* size of the symlink entry is the sum of
+         *  (struct size (includes 1st '\0') + 1 additional trailing '\0'),
+         *  system specific attribute data size (might be 0),
+         *  and the lengths of name and link target.
+         */
+        extent slnk_entrysize = (sizeof(slinkentry) + 1) + attribsize +
+                                ucsize + strlen(G.filename);
+        slinkentry *slnk_entry;
+
+        if (slnk_entrysize < ucsize) {
+            Info(slide, 0x201, ((char *)slide,
+              "warning:  symbolic link (%s) failed: mem alloc overflow\n",
+              FnFilter1(G.filename)));
+            errval = CloseError(G.outfile, G.filename);
+            return errval ? errval : PK_WARN;
+        }
+
+        if ((slnk_entry = (slinkentry *)malloc(slnk_entrysize)) == NULL) {
+            Info(slide, 0x201, ((char *)slide,
+              "warning:  symbolic link (%s) failed: no mem\n",
+              FnFilter1(G.filename)));
+            errval = CloseError(G.outfile, G.filename);
+            return errval ? errval : PK_WARN;
+        }
+        slnk_entry->next = NULL;
+        slnk_entry->targetlen = ucsize;
+        slnk_entry->attriblen = attribsize;
+# ifdef SET_SYMLINK_ATTRIBS
+        memcpy(slnk_entry->buf, &(G.pInfo->file_attr),
+               sizeof(unsigned));
+        if (have_uidgid_flg)
+            memcpy(slnk_entry->buf + 4, z_uidgid, sizeof(z_uidgid));
+# endif
+        slnk_entry->target = slnk_entry->buf + slnk_entry->attriblen;
+        slnk_entry->fname = slnk_entry->target + ucsize + 1;
+        strcpy(slnk_entry->fname, G.filename);
+
+        /* move back to the start of the file to re-read the "link data" */
+        rewind(G.outfile);
+
+        if (fread(slnk_entry->target, 1, ucsize, G.outfile) != ucsize)
+        {
+            Info(slide, 0x201, ((char *)slide,
+              "warning:  symbolic link (%s) failed\n",
+              FnFilter1(G.filename)));
+            free(slnk_entry);
+            errval = CloseError(G.outfile, G.filename);
+            return errval ? errval : PK_WARN;
+        }
+        errval = CloseError(G.outfile, G.filename); /* close "link" file for good... */
+        slnk_entry->target[ucsize] = '\0';
+        if (QCOND2)
+            Info(slide, 0, ((char *)slide, "-> %s ",
+              FnFilter1(slnk_entry->target)));
+        /* add this symlink record to the list of deferred symlinks */
+        if (G.slink_last != NULL)
+            G.slink_last->next = slnk_entry;
+        else
+            G.slink_head = slnk_entry;
+        G.slink_last = slnk_entry;
+        return errval;
+    }
+#endif /* SYMLINKS */
+
+#ifdef QLZIP
+    if (G.extra_field) {
+        static void qlfix OF((__GPRO__ uch *ef_ptr, unsigned ef_len));
+
+        qlfix(__G__ G.extra_field, G.lrec.extra_field_length);
+    }
+#endif
+
+#if (defined(NO_FCHOWN))
+    errval = CloseError(G.outfile, G.filename);
+#endif
+
+    /* if -X option was specified and we have UID/GID info, restore it */
+    if (have_uidgid_flg
+        /* check that both uid and gid values fit into their data sizes */
+        && ((ulg)(uid_t)(z_uidgid[0]) == z_uidgid[0])
+        && ((ulg)(gid_t)(z_uidgid[1]) == z_uidgid[1])) {
+        TTrace((stderr, "close_outfile:  restoring Unix UID/GID info\n"));
+#if (defined(NO_FCHOWN))
+        if (chown(G.filename, (uid_t)z_uidgid[0], (gid_t)z_uidgid[1]))
+#else
+        if (fchown(fileno(G.outfile), (uid_t)z_uidgid[0], (gid_t)z_uidgid[1]))
+#endif
+        {
+            if (uO.qflag)
+                Info(slide, 0x201, ((char *)slide, CannotSetItemUidGid,
+                  z_uidgid[0], z_uidgid[1], FnFilter1(G.filename),
+                  strerror(errno)));
+            else
+                Info(slide, 0x201, ((char *)slide, CannotSetUidGid,
+                  z_uidgid[0], z_uidgid[1], strerror(errno)));
+        }
+    }
+
+#if (!defined(NO_FCHOWN) && defined(NO_FCHMOD))
+    errval = CloseError(G.outfile, G.filename);
+#endif
+
+#if (!defined(NO_FCHOWN) && !defined(NO_FCHMOD))
+/*---------------------------------------------------------------------------
+    Change the file permissions from default ones to those stored in the
+    zipfile.
+  ---------------------------------------------------------------------------*/
+
+    if (fchmod(fileno(G.outfile), filtattr(__G__ G.pInfo->file_attr)))
+        perror("fchmod (file attributes) error");
+
+    errval = CloseError(G.outfile, G.filename);
+#endif /* !NO_FCHOWN && !NO_FCHMOD */
+
+    /* skip restoring time stamps on user's request */
+    if (uO.D_flag <= 1) {
+        /* set the file's access and modification times */
+        if (utime(G.filename, &(zt.t2))) {
+            if (uO.qflag)
+                Info(slide, 0x201, ((char *)slide, CannotSetItemTimestamps,
+                  FnFilter1(G.filename), strerror(errno)));
+            else
+                Info(slide, 0x201, ((char *)slide, CannotSetTimestamps,
+                  strerror(errno)));
+        }
+    }
+
+#if (defined(NO_FCHOWN) || defined(NO_FCHMOD))
+/*---------------------------------------------------------------------------
+    Change the file permissions from default ones to those stored in the
+    zipfile.
+  ---------------------------------------------------------------------------*/
+
+#ifndef NO_CHMOD
+    if (chmod(G.filename, filtattr(__G__ G.pInfo->file_attr)))
+        perror("chmod (file attributes) error");
+#endif
+#endif /* NO_FCHOWN || NO_FCHMOD */
+
+    return errval;
+} /* end function close_outfile() */
+
+#endif /* !MTS */
+
+
+#if (defined(SYMLINKS) && defined(SET_SYMLINK_ATTRIBS))
+int set_symlnk_attribs(__G__ slnk_entry)
+    __GDEF
+    slinkentry *slnk_entry;
+{
+    if (slnk_entry->attriblen > 0) {
+# if (!defined(NO_LCHOWN))
+      if (slnk_entry->attriblen > sizeof(unsigned)) {
+        ulg *z_uidgid_p = (zvoid *)(slnk_entry->buf + sizeof(unsigned));
+        /* check that both uid and gid values fit into their data sizes */
+        if (((ulg)(uid_t)(z_uidgid_p[0]) == z_uidgid_p[0]) &&
+            ((ulg)(gid_t)(z_uidgid_p[1]) == z_uidgid_p[1])) {
+          TTrace((stderr,
+            "set_symlnk_attribs:  restoring Unix UID/GID info for\n\
+        %s\n",
+            FnFilter1(slnk_entry->fname)));
+          if (lchown(slnk_entry->fname,
+                     (uid_t)z_uidgid_p[0], (gid_t)z_uidgid_p[1]))
+          {
+            Info(slide, 0x201, ((char *)slide, CannotSetItemUidGid,
+              z_uidgid_p[0], z_uidgid_p[1], FnFilter1(slnk_entry->fname),
+              strerror(errno)));
+          }
+        }
+      }
+# endif /* !NO_LCHOWN */
+# if (!defined(NO_LCHMOD))
+      TTrace((stderr,
+        "set_symlnk_attribs:  restoring Unix attributes for\n        %s\n",
+        FnFilter1(slnk_entry->fname)));
+      if (lchmod(slnk_entry->fname,
+                 filtattr(__G__ *(unsigned *)(zvoid *)slnk_entry->buf)))
+          perror("lchmod (file attributes) error");
+# endif /* !NO_LCHMOD */
+    }
+    /* currently, no error propagation... */
+    return PK_OK;
+} /* end function set_symlnk_attribs() */
+#endif /* SYMLINKS && SET_SYMLINK_ATTRIBS */
+
+
+#ifdef SET_DIR_ATTRIB
+/* messages of code for setting directory attributes */
+#  ifndef NO_CHMOD
+  static ZCONST char DirlistChmodFailed[] =
+    "warning:  cannot set permissions for %s\n          %s\n";
+#  endif
+
+
+int defer_dir_attribs(__G__ pd)
+    __GDEF
+    direntry **pd;
+{
+    uxdirattr *d_entry;
+
+    d_entry = (uxdirattr *)malloc(sizeof(uxdirattr) + strlen(G.filename));
+    *pd = (direntry *)d_entry;
+    if (d_entry == (uxdirattr *)NULL) {
+        return PK_MEM;
+    }
+    d_entry->fn = d_entry->fnbuf;
+    strcpy(d_entry->fn, G.filename);
+
+    d_entry->perms = G.pInfo->file_attr;
+
+    d_entry->have_uidgid = get_extattribs(__G__ &(d_entry->u.t3),
+                                          d_entry->uidgid);
+    return PK_OK;
+} /* end function defer_dir_attribs() */
+
+
+int set_direc_attribs(__G__ d)
+    __GDEF
+    direntry *d;
+{
+    int errval = PK_OK;
+
+    if (UxAtt(d)->have_uidgid &&
+        /* check that both uid and gid values fit into their data sizes */
+        ((ulg)(uid_t)(UxAtt(d)->uidgid[0]) == UxAtt(d)->uidgid[0]) &&
+        ((ulg)(gid_t)(UxAtt(d)->uidgid[1]) == UxAtt(d)->uidgid[1]) &&
+        chown(UxAtt(d)->fn, (uid_t)UxAtt(d)->uidgid[0],
+              (gid_t)UxAtt(d)->uidgid[1]))
+    {
+        Info(slide, 0x201, ((char *)slide, CannotSetItemUidGid,
+          UxAtt(d)->uidgid[0], UxAtt(d)->uidgid[1], FnFilter1(d->fn),
+          strerror(errno)));
+        if (!errval)
+            errval = PK_WARN;
+    }
+    /* Skip restoring directory time stamps on user' request. */
+    if (uO.D_flag <= 0) {
+        /* restore directory timestamps */
+        if (utime(d->fn, &UxAtt(d)->u.t2)) {
+            Info(slide, 0x201, ((char *)slide, CannotSetItemTimestamps,
+              FnFilter1(d->fn), strerror(errno)));
+            if (!errval)
+                errval = PK_WARN;
+        }
+    }
+#ifndef NO_CHMOD
+    if (chmod(d->fn, UxAtt(d)->perms)) {
+        Info(slide, 0x201, ((char *)slide, DirlistChmodFailed,
+          FnFilter1(d->fn), strerror(errno)));
+        if (!errval)
+            errval = PK_WARN;
+    }
+#endif /* !NO_CHMOD */
+    return errval;
+} /* end function set_direc_attribs() */
+
+#endif /* SET_DIR_ATTRIB */
+
+
+
+
+#ifdef TIMESTAMP
+
+/***************************/
+/*  Function stamp_file()  */
+/***************************/
+
+int stamp_file(fname, modtime)
+    ZCONST char *fname;
+    time_t modtime;
+{
+    ztimbuf tp;
+
+    tp.modtime = tp.actime = modtime;
+    return (utime(fname, &tp));
+
+} /* end function stamp_file() */
+
+#endif /* TIMESTAMP */
+
+
+
+
+#ifndef SFX
+
+/************************/
+/*  Function version()  */
+/************************/
+
+void version(__G)
+    __GDEF
+{
+#if (defined(__GNUC__) && defined(NX_CURRENT_COMPILER_RELEASE))
+    char cc_namebuf[40];
+    char cc_versbuf[40];
+#else
+#if (defined(__SUNPRO_C))
+    char cc_versbuf[17];
+#else
+#if (defined(__HP_cc) || defined(__IBMC__))
+    char cc_versbuf[25];
+#else
+#if (defined(__DECC_VER))
+    char cc_versbuf[17];
+    int cc_verstyp;
+#else
+#if (defined(CRAY) && defined(_RELEASE))
+    char cc_versbuf[40];
+#endif /* (CRAY && _RELEASE) */
+#endif /* __DECC_VER */
+#endif /* __HP_cc || __IBMC__ */
+#endif /* __SUNPRO_C */
+#endif /* (__GNUC__ && NX_CURRENT_COMPILER_RELEASE) */
+
+#if ((defined(CRAY) || defined(cray)) && defined(_UNICOS))
+    char os_namebuf[40];
+#else
+#if defined(__NetBSD__)
+    char os_namebuf[40];
+#endif
+#endif
+
+    /* Pyramid, NeXT have problems with huge macro expansion, too:  no Info() */
+    sprintf((char *)slide, LoadFarString(CompiledWith),
+
+#ifdef __GNUC__
+#  ifdef NX_CURRENT_COMPILER_RELEASE
+      (sprintf(cc_namebuf, "NeXT DevKit %d.%02d ",
+        NX_CURRENT_COMPILER_RELEASE/100, NX_CURRENT_COMPILER_RELEASE%100),
+       cc_namebuf),
+      (strlen(__VERSION__) > 8)? "(gcc)" :
+        (sprintf(cc_versbuf, "(gcc %s)", __VERSION__), cc_versbuf),
+#  else
+      "gcc ", __VERSION__,
+#  endif
+#else
+#if defined(__SUNPRO_C)
+      "Sun C ", (sprintf(cc_versbuf, "version %x", __SUNPRO_C), cc_versbuf),
+#else
+#if (defined(__HP_cc))
+      "HP C ",
+      (((__HP_cc% 100) == 0) ?
+      (sprintf(cc_versbuf, "version A.%02d.%02d",
+      (__HP_cc/ 10000), ((__HP_cc% 10000)/ 100))) :
+      (sprintf(cc_versbuf, "version A.%02d.%02d.%02d",
+      (__HP_cc/ 10000), ((__HP_cc% 10000)/ 100), (__HP_cc% 100))),
+      cc_versbuf),
+#else
+#if (defined(__DECC_VER))
+      "DEC C ",
+      (sprintf(cc_versbuf, "%c%d.%d-%03d",
+               ((cc_verstyp = (__DECC_VER / 10000) % 10) == 6 ? 'T' :
+                (cc_verstyp == 8 ? 'S' : 'V')),
+               __DECC_VER / 10000000,
+               (__DECC_VER % 10000000) / 100000, __DECC_VER % 1000),
+               cc_versbuf),
+#else
+#if defined(CRAY) && defined(_RELEASE)
+      "cc ", (sprintf(cc_versbuf, "version %d", _RELEASE), cc_versbuf),
+#else
+#ifdef __IBMC__
+      "IBM C ",
+      (sprintf(cc_versbuf, "version %d.%d.%d",
+               (__IBMC__ / 100), ((__IBMC__ / 10) % 10), (__IBMC__ % 10)),
+               cc_versbuf),
+#else
+#ifdef __VERSION__
+#   ifndef IZ_CC_NAME
+#    define IZ_CC_NAME "cc "
+#   endif
+      IZ_CC_NAME, __VERSION__
+#else
+#   ifndef IZ_CC_NAME
+#    define IZ_CC_NAME "cc"
+#   endif
+      IZ_CC_NAME, "",
+#endif /* ?__VERSION__ */
+#endif /* ?__IBMC__ */
+#endif /* ?(CRAY && _RELEASE) */
+#endif /* ?__DECC_VER */
+#endif /* ?__HP_cc */
+#endif /* ?__SUNPRO_C */
+#endif /* ?__GNUC__ */
+
+#ifndef IZ_OS_NAME
+#  define IZ_OS_NAME "Unix"
+#endif
+      IZ_OS_NAME,
+
+#if defined(sgi) || defined(__sgi)
+      " (Silicon Graphics IRIX)",
+#else
+#ifdef sun
+#  ifdef sparc
+#    ifdef __SVR4
+      " (Sun SPARC/Solaris)",
+#    else /* may or may not be SunOS */
+      " (Sun SPARC)",
+#    endif
+#  else
+#  if defined(sun386) || defined(i386)
+      " (Sun 386i)",
+#  else
+#  if defined(mc68020) || defined(__mc68020__)
+      " (Sun 3)",
+#  else /* mc68010 or mc68000:  Sun 2 or earlier */
+      " (Sun 2)",
+#  endif
+#  endif
+#  endif
+#else
+#ifdef __hpux
+      " (HP-UX)",
+#else
+#ifdef __osf__
+      " (DEC OSF/1)",
+#else
+#ifdef _AIX
+      " (IBM AIX)",
+#else
+#ifdef aiws
+      " (IBM RT/AIX)",
+#else
+#if defined(CRAY) || defined(cray)
+#  ifdef _UNICOS
+      (sprintf(os_namebuf, " (Cray UNICOS release %d)", _UNICOS), os_namebuf),
+#  else
+      " (Cray UNICOS)",
+#  endif
+#else
+#if defined(uts) || defined(UTS)
+      " (Amdahl UTS)",
+#else
+#ifdef NeXT
+#  ifdef mc68000
+      " (NeXTStep/black)",
+#  else
+      " (NeXTStep for Intel)",
+#  endif
+#else              /* the next dozen or so are somewhat order-dependent */
+#ifdef LINUX
+#  ifdef __ELF__
+      " (Linux ELF)",
+#  else
+      " (Linux a.out)",
+#  endif
+#else
+#ifdef MINIX
+      " (Minix)",
+#else
+#ifdef M_UNIX
+      " (SCO Unix)",
+#else
+#ifdef M_XENIX
+      " (SCO Xenix)",
+#else
+#ifdef __NetBSD__
+#  ifdef NetBSD0_8
+      (sprintf(os_namebuf, " (NetBSD 0.8%c)", (char)(NetBSD0_8 - 1 + 'A')),
+       os_namebuf),
+#  else
+#  ifdef NetBSD0_9
+      (sprintf(os_namebuf, " (NetBSD 0.9%c)", (char)(NetBSD0_9 - 1 + 'A')),
+       os_namebuf),
+#  else
+#  ifdef NetBSD1_0
+      (sprintf(os_namebuf, " (NetBSD 1.0%c)", (char)(NetBSD1_0 - 1 + 'A')),
+       os_namebuf),
+#  else
+      (BSD4_4 == 0.5)? " (NetBSD before 0.9)" : " (NetBSD 1.1 or later)",
+#  endif
+#  endif
+#  endif
+#else
+#ifdef __FreeBSD__
+      (BSD4_4 == 0.5)? " (FreeBSD 1.x)" : " (FreeBSD 2.0 or later)",
+#else
+#ifdef __bsdi__
+      (BSD4_4 == 0.5)? " (BSD/386 1.0)" : " (BSD/386 1.1 or later)",
+#else
+#ifdef __386BSD__
+      (BSD4_4 == 1)? " (386BSD, post-4.4 release)" : " (386BSD)",
+#else
+#ifdef __CYGWIN__
+      " (Cygwin)",
+#else
+#if defined(i686) || defined(__i686) || defined(__i686__)
+      " (Intel 686)",
+#else
+#if defined(i586) || defined(__i586) || defined(__i586__)
+      " (Intel 586)",
+#else
+#if defined(i486) || defined(__i486) || defined(__i486__)
+      " (Intel 486)",
+#else
+#if defined(i386) || defined(__i386) || defined(__i386__)
+      " (Intel 386)",
+#else
+#ifdef pyr
+      " (Pyramid)",
+#else
+#ifdef ultrix
+#  ifdef mips
+      " (DEC/MIPS)",
+#  else
+#  ifdef vax
+      " (DEC/VAX)",
+#  else /* __alpha? */
+      " (DEC/Alpha)",
+#  endif
+#  endif
+#else
+#ifdef gould
+      " (Gould)",
+#else
+#ifdef MTS
+      " (MTS)",
+#else
+#ifdef __convexc__
+      " (Convex)",
+#else
+#ifdef __QNX__
+      " (QNX 4)",
+#else
+#ifdef __QNXNTO__
+      " (QNX Neutrino)",
+#else
+#ifdef Lynx
+      " (LynxOS)",
+#else
+#ifdef __APPLE__
+#  ifdef __i386__
+      " Mac OS X Intel i32",
+#  else
+#  ifdef __ppc__
+      " Mac OS X PowerPC",
+#  else
+#  ifdef __ppc64__
+      " Mac OS X PowerPC64",
+#  else
+      " Mac OS X",
+#  endif /* __ppc64__ */
+#  endif /* __ppc__ */
+#  endif /* __i386__ */
+#else
+      "",
+#endif /* Apple */
+#endif /* Lynx */
+#endif /* QNX Neutrino */
+#endif /* QNX 4 */
+#endif /* Convex */
+#endif /* MTS */
+#endif /* Gould */
+#endif /* DEC */
+#endif /* Pyramid */
+#endif /* 386 */
+#endif /* 486 */
+#endif /* 586 */
+#endif /* 686 */
+#endif /* Cygwin */
+#endif /* 386BSD */
+#endif /* BSDI BSD/386 */
+#endif /* NetBSD */
+#endif /* FreeBSD */
+#endif /* SCO Xenix */
+#endif /* SCO Unix */
+#endif /* Minix */
+#endif /* Linux */
+#endif /* NeXT */
+#endif /* Amdahl */
+#endif /* Cray */
+#endif /* RT/AIX */
+#endif /* AIX */
+#endif /* OSF/1 */
+#endif /* HP-UX */
+#endif /* Sun */
+#endif /* SGI */
+
+#ifdef __DATE__
+      " on ", __DATE__
+#else
+      "", ""
+#endif
+    );
+
+    (*G.message)((zvoid *)&G, slide, (ulg)strlen((char *)slide), 0);
+
+} /* end function version() */
+
+#endif /* !SFX */
+
+
+
+
+#ifdef QLZIP
+
+struct qdirect  {
+    long            d_length __attribute__ ((packed));  /* file length */
+    unsigned char   d_access __attribute__ ((packed));  /* file access type */
+    unsigned char   d_type __attribute__ ((packed));    /* file type */
+    long            d_datalen __attribute__ ((packed)); /* data length */
+    long            d_reserved __attribute__ ((packed));/* Unused */
+    short           d_szname __attribute__ ((packed));  /* size of name */
+    char            d_name[36] __attribute__ ((packed));/* name area */
+    long            d_update __attribute__ ((packed));  /* last update */
+    long            d_refdate __attribute__ ((packed));
+    long            d_backup __attribute__ ((packed));   /* EOD */
+};
+
+#define LONGID  "QDOS02"
+#define EXTRALEN (sizeof(struct qdirect) + 8)
+#define JBLONGID    "QZHD"
+#define JBEXTRALEN  (sizeof(jbextra)  - 4 * sizeof(char))
+
+typedef struct {
+    char        eb_header[4] __attribute__ ((packed));  /* place_holder */
+    char        longid[8] __attribute__ ((packed));
+    struct      qdirect     header __attribute__ ((packed));
+} qdosextra;
+
+typedef struct {
+    char        eb_header[4];                           /* place_holder */
+    char        longid[4];
+    struct      qdirect     header;
+} jbextra;
+
+
+
+/*  The following two functions SH() and LG() convert big-endian short
+ *  and long numbers into native byte order.  They are some kind of
+ *  counterpart to the generic UnZip's makeword() and makelong() functions.
+ */
+static ush SH(ush val)
+{
+    uch swapbuf[2];
+
+    swapbuf[1] = (uch)(val & 0xff);
+    swapbuf[0] = (uch)(val >> 8);
+    return (*(ush *)swapbuf);
+}
+
+
+
+static ulg LG(ulg val)
+{
+    /*  convert the big-endian unsigned long number `val' to the machine
+     *  dependent representation
+     */
+    ush swapbuf[2];
+
+    swapbuf[1] = SH((ush)(val & 0xffff));
+    swapbuf[0] = SH((ush)(val >> 16));
+    return (*(ulg *)swapbuf);
+}
+
+
+
+static void qlfix(__G__ ef_ptr, ef_len)
+    __GDEF
+    uch *ef_ptr;
+    unsigned ef_len;
+{
+    while (ef_len >= EB_HEADSIZE)
+    {
+        unsigned    eb_id  = makeword(EB_ID + ef_ptr);
+        unsigned    eb_len = makeword(EB_LEN + ef_ptr);
+
+        if (eb_len > (ef_len - EB_HEADSIZE)) {
+            /* discovered some extra field inconsistency! */
+            Trace((stderr,
+              "qlfix: block length %u > rest ef_size %u\n", eb_len,
+              ef_len - EB_HEADSIZE));
+            break;
+        }
+
+        switch (eb_id) {
+          case EF_QDOS:
+          {
+            struct _ntc_
+            {
+                long id;
+                long dlen;
+            } ntc;
+            long dlen = 0;
+
+            qdosextra   *extra = (qdosextra *)ef_ptr;
+            jbextra     *jbp   = (jbextra   *)ef_ptr;
+
+            if (!strncmp(extra->longid, LONGID, strlen(LONGID)))
+            {
+                if (eb_len != EXTRALEN)
+                    if (uO.qflag)
+                        Info(slide, 0x201, ((char *)slide,
+                          "warning:  invalid length in Qdos field for %s\n",
+                          FnFilter1(G.filename)));
+                    else
+                        Info(slide, 0x201, ((char *)slide,
+                          "warning:  invalid length in Qdos field"));
+
+                if (extra->header.d_type)
+                {
+                    dlen = extra->header.d_datalen;
+                }
+            }
+
+            if (!strncmp(jbp->longid, JBLONGID, strlen(JBLONGID)))
+            {
+                if (eb_len != JBEXTRALEN)
+                    if (uO.qflag)
+                        Info(slide, 0x201, ((char *)slide,
+                          "warning:  invalid length in QZ field for %s\n",
+                          FnFilter1(G.filename)));
+                    else
+                        Info(slide, 0x201, ((char *)slide,
+                          "warning:  invalid length in QZ field"));
+                if (jbp->header.d_type)
+                {
+                    dlen = jbp->header.d_datalen;
+                }
+            }
+
+            if ((long)LG(dlen) > 0)
+            {
+                zfseeko(G.outfile, -8, SEEK_END);
+                fread(&ntc, 8, 1, G.outfile);
+                if (ntc.id != *(long *)"XTcc")
+                {
+                    ntc.id = *(long *)"XTcc";
+                    ntc.dlen = dlen;
+                    fwrite (&ntc, 8, 1, G.outfile);
+                }
+                Info(slide, 0x201, ((char *)slide, "QData = %d", LG(dlen)));
+            }
+            return;     /* finished, cancel further extra field scanning */
+          }
+
+          default:
+            Trace((stderr,"qlfix: unknown extra field block, ID=%d\n",
+               eb_id));
+        }
+
+        /* Skip this extra field block */
+        ef_ptr += (eb_len + EB_HEADSIZE);
+        ef_len -= (eb_len + EB_HEADSIZE);
+    }
+}
+#endif /* QLZIP */
+
+
+typedef struct {
+    char *local_charset;
+    char *archive_charset;
+} CHARSET_MAP;
+
+/* A mapping of local <-> archive charsets used by default to convert filenames
+ * of DOS/Windows Zip archives. Currently very basic. */
+static CHARSET_MAP dos_charset_map[] = {
+    { "ANSI_X3.4-1968", "CP850" },
+    { "ISO-8859-1", "CP850" },
+    { "CP1252", "CP850" },
+    { "UTF-8", "CP866" },
+    { "KOI8-R", "CP866" },
+    { "KOI8-U", "CP866" },
+    { "ISO-8859-5", "CP866" }
+};
+
+char OEM_CP[MAX_CP_NAME] = "";
+char ISO_CP[MAX_CP_NAME] = "";
+
+/* Try to guess the default value of OEM_CP based on the current locale.
+ * ISO_CP is left alone for now. */
+void init_conversion_charsets()
+{
+    const char *local_charset;
+    int i;
+
+    /* Make a guess only if OEM_CP not already set. */ 
+    if(*OEM_CP == '\0') {
+    	local_charset = nl_langinfo(CODESET);
+    	for(i = 0; i < sizeof(dos_charset_map)/sizeof(CHARSET_MAP); i++)
+    		if(!strcasecmp(local_charset, dos_charset_map[i].local_charset)) {
+    			strncpy(OEM_CP, dos_charset_map[i].archive_charset,
+    					MAX_CP_NAME - 1);
+
+			OEM_CP[MAX_CP_NAME - 1] = '\0';
+    			break;
+    		}
+    }
+}
+
+/* Convert a string from one encoding to the current locale using iconv().
+ * Be as non-intrusive as possible. If error is encountered during covertion
+ * just leave the string intact. */
+static void charset_to_intern(char *string, char *from_charset)
+{
+    iconv_t cd;
+    char *s,*d, *buf;
+    size_t slen, dlen, buflen;
+    const char *local_charset;
+
+    if(*from_charset == '\0')
+    	return;
+
+    buf = NULL;
+    local_charset = nl_langinfo(CODESET);
+
+    if((cd = iconv_open(local_charset, from_charset)) == (iconv_t)-1)
+        return;
+
+    slen = strlen(string);
+    s = string;
+
+    /*  Make sure OUTBUFSIZ + 1 never ends up smaller than FILNAMSIZ
+     *  as this function also gets called with G.outbuf in fileio.c
+     */
+    buflen = FILNAMSIZ;
+    if (OUTBUFSIZ + 1 < FILNAMSIZ)
+    {
+        buflen = OUTBUFSIZ + 1;
+    }
+
+    d = buf = malloc(buflen);
+    if(!d)
+    	goto cleanup;
+
+    bzero(buf,buflen);
+    dlen = buflen - 1;
+
+    if(iconv(cd, &s, &slen, &d, &dlen) == (size_t)-1)
+    	goto cleanup;
+    strncpy(string, buf, buflen);
+
+    cleanup:
+    free(buf);
+    iconv_close(cd);
+}
+
+/* Convert a string from OEM_CP to the current locale charset. */
+inline void oem_intern(char *string)
+{
+    charset_to_intern(string, OEM_CP);
+}
+
+/* Convert a string from ISO_CP to the current locale charset. */
+inline void iso_intern(char *string)
+{
+    charset_to_intern(string, ISO_CP);
+}
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix/unxcfg.h
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix/unxcfg.h	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix/unxcfg.h	(revision 5)
@@ -0,0 +1,256 @@
+/*
+  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2009-Jan-02 or later
+  (the contents of which are also included in unzip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*---------------------------------------------------------------------------
+    Unix specific configuration section:
+  ---------------------------------------------------------------------------*/
+
+#ifndef __unxcfg_h
+#define __unxcfg_h
+
+
+/* LARGE FILE SUPPORT - 10/6/04 EG */
+/* This needs to be set before the includes so they set the right sizes */
+
+#if (defined(NO_LARGE_FILE_SUPPORT) && defined(LARGE_FILE_SUPPORT))
+#  undef LARGE_FILE_SUPPORT
+#endif
+
+/* Automatically set ZIP64_SUPPORT if LFS */
+#ifdef LARGE_FILE_SUPPORT
+# if (!defined(NO_ZIP64_SUPPORT) && !defined(ZIP64_SUPPORT))
+#   define ZIP64_SUPPORT
+# endif
+#endif
+
+/* NO_ZIP64_SUPPORT takes preceedence over ZIP64_SUPPORT */
+#if defined(NO_ZIP64_SUPPORT) && defined(ZIP64_SUPPORT)
+#  undef ZIP64_SUPPORT
+#endif
+
+#ifdef LARGE_FILE_SUPPORT
+  /* 64-bit Large File Support */
+
+  /* The following Large File Summit (LFS) defines turn on large file support
+     on Linux (probably 2.4 or later kernel) and many other unixen */
+
+  /* These have to be before any include that sets types so the large file
+     versions of the types are set in the includes */
+
+# define _LARGEFILE_SOURCE      /* some OSes need this for fseeko */
+# define _LARGEFILE64_SOURCE
+# define _FILE_OFFSET_BITS 64   /* select default interface as 64 bit */
+# define _LARGE_FILES           /* some OSes need this for 64-bit off_t */
+# define __USE_LARGEFILE64
+#endif /* LARGE_FILE_SUPPORT */
+
+
+#include <sys/types.h>          /* off_t, time_t, dev_t, ... */
+#include <sys/stat.h>
+
+#ifdef NO_OFF_T
+  typedef long zoff_t;
+#else
+  typedef off_t zoff_t;
+#endif
+#define ZOFF_T_DEFINED
+typedef struct stat z_stat;
+#define Z_STAT_DEFINED
+
+#ifndef COHERENT
+#  include <fcntl.h>            /* O_BINARY for open() w/o CR/LF translation */
+#else /* COHERENT */
+#  ifdef _I386
+#    include <fcntl.h>          /* Coherent 4.0.x, Mark Williams C */
+#  else
+#    include <sys/fcntl.h>      /* Coherent 3.10, Mark Williams C */
+#  endif
+#  define SHORT_SYMS
+#  ifndef __COHERENT__          /* Coherent 4.2 has tzset() */
+#    define tzset  settz
+#  endif
+#endif /* ?COHERENT */
+
+#ifndef NO_PARAM_H
+#  ifdef NGROUPS_MAX
+#    undef NGROUPS_MAX      /* SCO bug:  defined again in <sys/param.h> */
+#  endif
+#  ifdef BSD
+#    define TEMP_BSD        /* may be defined again in <sys/param.h> */
+#    undef BSD
+#  endif
+#  include <sys/param.h>    /* conflict with <sys/types.h>, some systems? */
+#  ifdef TEMP_BSD
+#    undef TEMP_BSD
+#    ifndef BSD
+#      define BSD
+#    endif
+#  endif
+#endif /* !NO_PARAM_H */
+
+#ifdef __osf__
+#  define DIRENT
+#  ifdef BSD
+#    undef BSD
+#  endif
+#endif /* __osf__ */
+
+#ifdef __CYGWIN__
+#  include <unistd.h>
+#  define DIRENT
+#  define HAVE_TERMIOS_H
+#  ifndef timezone
+#    define timezone _timezone
+#  endif
+#endif
+
+#ifdef BSD
+#  include <sys/time.h>
+#  include <sys/timeb.h>
+#  if (defined(_AIX) || defined(__GLIBC__) || defined(__GNU__))
+#    include <time.h>
+#  endif
+#else
+#  include <time.h>
+   struct tm *gmtime(), *localtime();
+#endif
+
+#if (defined(BSD4_4) || (defined(SYSV) && defined(MODERN)))
+#  include <unistd.h>           /* this includes utime.h on SGIs */
+#  if (defined(BSD4_4) || defined(linux) || defined(__GLIBC__))
+#    include <utime.h>
+#    define GOT_UTIMBUF
+#  endif
+#  if (!defined(GOT_UTIMBUF) && (defined(__hpux) || defined(__SUNPRO_C)))
+#    include <utime.h>
+#    define GOT_UTIMBUF
+#  endif
+#  if (!defined(GOT_UTIMBUF) && defined(__GNU__))
+#    include <utime.h>
+#    define GOT_UTIMBUF
+#  endif
+#endif
+#if (defined(__DGUX__) && !defined(GOT_UTIMBUF))
+   /* DG/UX requires this because of a non-standard struct utimebuf */
+#  include <utime.h>
+#  define GOT_UTIMBUF
+#endif
+
+#if (defined(V7) || defined(pyr_bsd))
+#  define strchr   index
+#  define strrchr  rindex
+#endif
+#ifdef V7
+#  define O_RDONLY 0
+#  define O_WRONLY 1
+#  define O_RDWR   2
+#endif
+
+#if defined(NO_UNICODE_SUPPORT) && defined(UNICODE_SUPPORT)
+   /* disable Unicode (UTF-8) support when requested */
+#  undef UNICODE_SUPPORT
+#endif
+
+#if (defined(_MBCS) && defined(NO_MBCS))
+   /* disable MBCS support when requested */
+#  undef _MBCS
+#endif
+
+#if (!defined(NO_SETLOCALE) && !defined(_MBCS))
+# if (!defined(UNICODE_SUPPORT) || !defined(UTF8_MAYBE_NATIVE))
+   /* enable setlocale here, unless this happens later for UTF-8 and/or
+    * MBCS support */
+#  include <locale.h>
+#  ifndef SETLOCALE
+#    define SETLOCALE(category, locale) setlocale(category, locale)
+#  endif
+# endif
+#endif
+#ifndef NO_SETLOCALE
+# if (!defined(NO_WORKING_ISPRINT) && !defined(HAVE_WORKING_ISPRINT))
+   /* enable "enhanced" unprintable chars detection in fnfilter() */
+#  define HAVE_WORKING_ISPRINT
+# endif
+#endif
+
+#ifdef MINIX
+#  include <stdio.h>
+#endif
+#if (!defined(HAVE_STRNICMP) & !defined(NO_STRNICMP))
+#  define NO_STRNICMP
+#endif
+#ifndef DATE_FORMAT
+#  define DATE_FORMAT DF_MDY    /* GRR:  customize with locale.h somehow? */
+#endif
+#define lenEOL          1
+#ifdef EBCDIC
+#  define PutNativeEOL  *q++ = '\n';
+#else
+#  define PutNativeEOL  *q++ = native(LF);
+#endif
+#define SCREENSIZE(ttrows, ttcols)  screensize(ttrows, ttcols)
+#define SCREENWIDTH     80
+#define SCREENLWRAP     1
+#define USE_EF_UT_TIME
+#if (!defined(NO_LCHOWN) || !defined(NO_LCHMOD))
+#  define SET_SYMLINK_ATTRIBS
+#endif
+#ifdef MTS
+#  ifdef SET_DIR_ATTRIB
+#    undef SET_DIR_ATTRIB
+#  endif
+#else /* !MTS */
+#  define SET_DIR_ATTRIB
+#  if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP))   /* GRR 970513 */
+#    define TIMESTAMP
+#  endif
+#  define RESTORE_UIDGID
+#endif /* ?MTS */
+
+/* Static variables that we have to add to Uz_Globs: */
+#define SYSTEM_SPECIFIC_GLOBALS \
+    int created_dir, renamed_fullpath;\
+    char *rootpath, *buildpath, *end;\
+    ZCONST char *wildname;\
+    char *dirname, matchname[FILNAMSIZ];\
+    int rootlen, have_dirname, dirnamelen, notfirstcall;\
+    zvoid *wild_dir;
+
+/* created_dir, and renamed_fullpath are used by both mapname() and    */
+/*    checkdir().                                                      */
+/* rootlen, rootpath, buildpath and end are used by checkdir().        */
+/* wild_dir, dirname, wildname, matchname[], dirnamelen, have_dirname, */
+/*    and notfirstcall are used by do_wild().                          */
+
+
+#define MAX_CP_NAME 25 + 1 
+   
+#ifdef SETLOCALE
+#  undef SETLOCALE
+#endif
+#define SETLOCALE(category, locale) setlocale(category, locale)
+#include <locale.h>
+   
+#ifdef _ISO_INTERN
+#  undef _ISO_INTERN
+#endif
+#define _ISO_INTERN(str1) iso_intern(str1)
+
+#ifdef _OEM_INTERN
+#  undef _OEM_INTERN
+#endif
+#ifndef IZ_OEM2ISO_ARRAY
+#  define IZ_OEM2ISO_ARRAY
+#endif
+#define _OEM_INTERN(str1) oem_intern(str1)
+
+void iso_intern(char *);
+void oem_intern(char *);
+void init_conversion_charsets(void);
+   
+#endif /* !__unxcfg_h */
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix	(revision 5)

Property changes on: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unix
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unzip.c
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unzip.c	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unzip.c	(revision 5)
@@ -0,0 +1,2747 @@
+/*
+  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2009-Jan-02 or later
+  (the contents of which are also included in unzip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*---------------------------------------------------------------------------
+
+  unzip.c
+
+  UnZip - a zipfile extraction utility.  See below for make instructions, or
+  read the comments in Makefile and the various Contents files for more de-
+  tailed explanations.  To report a bug, submit a *complete* description via
+  //www.info-zip.org/zip-bug.html; include machine type, operating system and
+  version, compiler and version, and reasonably detailed error messages or
+  problem report.  To join Info-ZIP, see the instructions in README.
+
+  UnZip 5.x is a greatly expanded and partially rewritten successor to 4.x,
+  which in turn was almost a complete rewrite of version 3.x.  For a detailed
+  revision history, see UnzpHist.zip at quest.jpl.nasa.gov.  For a list of
+  the many (near infinite) contributors, see "CONTRIBS" in the UnZip source
+  distribution.
+
+  UnZip 6.0 adds support for archives larger than 4 GiB using the Zip64
+  extensions as well as support for Unicode information embedded per the
+  latest zip standard additions.
+
+  ---------------------------------------------------------------------------
+
+  [from original zipinfo.c]
+
+  This program reads great gobs of totally nifty information, including the
+  central directory stuff, from ZIP archives ("zipfiles" for short).  It
+  started as just a testbed for fooling with zipfiles, but at this point it
+  is actually a useful utility.  It also became the basis for the rewrite of
+  UnZip (3.16 -> 4.0), using the central directory for processing rather than
+  the individual (local) file headers.
+
+  As of ZipInfo v2.0 and UnZip v5.1, the two programs are combined into one.
+  If the executable is named "unzip" (or "unzip.exe", depending), it behaves
+  like UnZip by default; if it is named "zipinfo" or "ii", it behaves like
+  ZipInfo.  The ZipInfo behavior may also be triggered by use of unzip's -Z
+  option; for example, "unzip -Z [zipinfo_options] archive.zip".
+
+  Another dandy product from your buddies at Newtware!
+
+  Author:  Greg Roelofs, newt@pobox.com, http://pobox.com/~newt/
+           23 August 1990 -> April 1997
+
+  ---------------------------------------------------------------------------
+
+  Version:  unzip5??.{tar.Z | tar.gz | zip} for Unix, VMS, OS/2, MS-DOS, Amiga,
+              Atari, Windows 3.x/95/NT/CE, Macintosh, Human68K, Acorn RISC OS,
+              AtheOS, BeOS, SMS/QDOS, VM/CMS, MVS, AOS/VS, Tandem NSK, Theos
+              and TOPS-20.
+
+  Copyrights:  see accompanying file "LICENSE" in UnZip source distribution.
+               (This software is free but NOT IN THE PUBLIC DOMAIN.)
+
+  ---------------------------------------------------------------------------*/
+
+
+
+#define __UNZIP_C       /* identifies this source module */
+#define UNZIP_INTERNAL
+#include "unzip.h"      /* includes, typedefs, macros, prototypes, etc. */
+#include "crypt.h"
+#include "unzvers.h"
+
+#ifndef WINDLL          /* The WINDLL port uses windll/windll.c instead... */
+
+/***************************/
+/* Local type declarations */
+/***************************/
+
+#if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS))
+typedef struct _sign_info
+    {
+        struct _sign_info *previous;
+        void (*sighandler)(int);
+        int sigtype;
+    } savsigs_info;
+#endif
+
+/*******************/
+/* Local Functions */
+/*******************/
+
+#if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS))
+static int setsignalhandler OF((__GPRO__ savsigs_info **p_savedhandler_chain,
+                                int signal_type, void (*newhandler)(int)));
+#endif
+#ifndef SFX
+static void  help_extended      OF((__GPRO));
+static void  show_version_info  OF((__GPRO));
+#endif
+
+
+/*************/
+/* Constants */
+/*************/
+
+#include "consts.h"  /* all constant global variables are in here */
+                     /* (non-constant globals were moved to globals.c) */
+
+/* constant local variables: */
+
+#ifndef SFX
+#ifndef _WIN32_WCE /* Win CE does not support environment variables */
+   static ZCONST char Far EnvUnZip[] = ENV_UNZIP;
+   static ZCONST char Far EnvUnZip2[] = ENV_UNZIP2;
+   static ZCONST char Far EnvZipInfo[] = ENV_ZIPINFO;
+   static ZCONST char Far EnvZipInfo2[] = ENV_ZIPINFO2;
+#ifdef RISCOS
+   static ZCONST char Far EnvUnZipExts[] = ENV_UNZIPEXTS;
+#endif /* RISCOS */
+  static ZCONST char Far NoMemEnvArguments[] =
+    "envargs:  cannot get memory for arguments";
+#endif /* !_WIN32_WCE */
+  static ZCONST char Far CmdLineParamTooLong[] =
+    "error:  command line parameter #%d exceeds internal size limit\n";
+#endif /* !SFX */
+
+#if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS))
+  static ZCONST char Far CantSaveSigHandler[] =
+    "error:  cannot save signal handler settings\n";
+#endif
+
+#if (!defined(SFX) || defined(SFX_EXDIR))
+   static ZCONST char Far NotExtracting[] =
+     "caution:  not extracting; -d ignored\n";
+   static ZCONST char Far MustGiveExdir[] =
+     "error:  must specify directory to which to extract with -d option\n";
+   static ZCONST char Far OnlyOneExdir[] =
+     "error:  -d option used more than once (only one exdir allowed)\n";
+#endif
+#if (defined(UNICODE_SUPPORT) && !defined(UNICODE_WCHAR))
+  static ZCONST char Far UTF8EscapeUnSupp[] =
+    "warning:  -U \"escape all non-ASCII UTF-8 chars\" is not supported\n";
+#endif
+
+#if CRYPT
+   static ZCONST char Far MustGivePasswd[] =
+     "error:  must give decryption password with -P option\n";
+#endif
+
+#ifndef SFX
+   static ZCONST char Far Zfirst[] =
+   "error:  -Z must be first option for ZipInfo mode (check UNZIP variable?)\n";
+#endif
+static ZCONST char Far InvalidOptionsMsg[] = "error:\
+  -fn or any combination of -c, -l, -p, -t, -u and -v options invalid\n";
+static ZCONST char Far IgnoreOOptionMsg[] =
+  "caution:  both -n and -o specified; ignoring -o\n";
+
+/* usage() strings */
+#ifndef SFX
+#ifdef VMS
+   static ZCONST char Far Example3[] = "vms.c";
+   static ZCONST char Far Example2[] = "  unzip \"-V\" foo \"Bar\"\
+ (Quote names to preserve case, unless SET PROC/PARS=EXT)\n";
+#else /* !VMS */
+   static ZCONST char Far Example3[] = "ReadMe";
+#ifdef RISCOS
+   static ZCONST char Far Example2[] =
+"  unzip foo -d RAM:$   => extract all files from foo into RAMDisc\n";
+#else /* !RISCOS */
+#if (defined(OS2) || (defined(DOS_FLX_OS2_W32) && defined(MORE)))
+   static ZCONST char Far Example2[] =
+     "";                /* no room:  too many local3[] items */
+#else /* !OS2 */
+#ifdef MACOS
+   static ZCONST char Far Example2[] = ""; /* not needed */
+#else /* !MACOS */
+   static ZCONST char Far Example2[] = " \
+ unzip -p foo | more  => send contents of foo.zip via pipe into program more\n";
+#endif /* ?MACOS */
+#endif /* ?OS2 */
+#endif /* ?RISCOS */
+#endif /* ?VMS */
+
+/* local1[]:  command options */
+#if defined(TIMESTAMP)
+   static ZCONST char Far local1[] =
+     "  -T  timestamp archive to latest";
+#else /* !TIMESTAMP */
+   static ZCONST char Far local1[] = "";
+#endif /* ?TIMESTAMP */
+
+/* local2[] and local3[]:  modifier options */
+#ifdef DOS_FLX_H68_OS2_W32
+#ifdef FLEXOS
+   static ZCONST char Far local2[] = "";
+#else
+   static ZCONST char Far local2[] =
+     " -$  label removables (-$$ => fixed disks)";
+#endif
+#ifdef OS2
+#ifdef MORE
+   static ZCONST char Far local3[] = "\
+  -X  restore ACLs if supported              -s  spaces in filenames => '_'\n\
+                                             -M  pipe through \"more\" pager\n";
+#else
+   static ZCONST char Far local3[] = " \
+ -X  restore ACLs if supported              -s  spaces in filenames => '_'\n\n";
+#endif /* ?MORE */
+#else /* !OS2 */
+#ifdef WIN32
+#ifdef NTSD_EAS
+#ifdef MORE
+   static ZCONST char Far local3[] = "\
+  -X  restore ACLs (-XX => use privileges)   -s  spaces in filenames => '_'\n\
+                                             -M  pipe through \"more\" pager\n";
+#else
+   static ZCONST char Far local3[] = " \
+ -X  restore ACLs (-XX => use privileges)   -s  spaces in filenames => '_'\n\n";
+#endif /* ?MORE */
+#else /* !NTSD_EAS */
+#ifdef MORE
+   static ZCONST char Far local3[] = "\
+  -M  pipe through \"more\" pager            \
+  -s  spaces in filenames => '_'\n\n";
+#else
+   static ZCONST char Far local3[] = " \
+                                            -s  spaces in filenames => '_'\n\n";
+#endif /* ?MORE */
+#endif /* ?NTSD_EAS */
+#else /* !WIN32 */
+#ifdef MORE
+   static ZCONST char Far local3[] = "  -\
+M  pipe through \"more\" pager              -s  spaces in filenames => '_'\n\n";
+#else
+   static ZCONST char Far local3[] = "\
+                                             -s  spaces in filenames => '_'\n";
+#endif
+#endif /* ?WIN32 */
+#endif /* ?OS2 || ?WIN32 */
+#else /* !DOS_FLX_OS2_W32 */
+#ifdef VMS
+   static ZCONST char Far local2[] = " -X  restore owner/ACL protection info";
+#ifdef MORE
+   static ZCONST char Far local3[] = "\
+  -Y  treat \".nnn\" as \";nnn\" version         -2  force ODS2 names\n\
+  --D restore dir (-D: no) timestamps        -M  pipe through \"more\" pager\n\
+  (Must quote upper-case options, like \"-V\", unless SET PROC/PARSE=EXTEND.)\
+\n\n";
+#else
+   static ZCONST char Far local3[] = "\n\
+  -Y  treat \".nnn\" as \";nnn\" version         -2  force ODS2 names\n\
+  --D restore dir (-D: no) timestamps\n\
+  (Must quote upper-case options, like \"-V\", unless SET PROC/PARSE=EXTEND.)\
+\n\n";
+#endif
+#else /* !VMS */
+#ifdef ATH_BEO_UNX
+   static ZCONST char Far local2[] = " -X  restore UID/GID info";
+#ifdef MORE
+   static ZCONST char Far local3[] = "\
+  -K  keep setuid/setgid/tacky permissions   -M  pipe through \"more\" pager\n";
+#else
+   static ZCONST char Far local3[] = "\
+  -K  keep setuid/setgid/tacky permissions\n";
+#endif
+#else /* !ATH_BEO_UNX */
+#ifdef TANDEM
+   static ZCONST char Far local2[] = "\
+ -X  restore Tandem User ID                 -r  remove file extensions\n\
+  -b  create 'C' (180) text files          ";
+#ifdef MORE
+   static ZCONST char Far local3[] = " \
+                                            -M  pipe through \"more\" pager\n";
+#else
+   static ZCONST char Far local3[] = "\n";
+#endif
+#else /* !TANDEM */
+#ifdef AMIGA
+   static ZCONST char Far local2[] = " -N  restore comments as filenotes";
+#ifdef MORE
+   static ZCONST char Far local3[] = " \
+                                            -M  pipe through \"more\" pager\n";
+#else
+   static ZCONST char Far local3[] = "\n";
+#endif
+#else /* !AMIGA */
+#ifdef MACOS
+   static ZCONST char Far local2[] = " -E  show Mac info during extraction";
+   static ZCONST char Far local3[] = " \
+ -i  ignore filenames in mac extra info     -J  junk (ignore) Mac extra info\n\
+\n";
+#else /* !MACOS */
+#ifdef MORE
+   static ZCONST char Far local2[] = " -M  pipe through \"more\" pager";
+   static ZCONST char Far local3[] = "\n";
+#else
+   static ZCONST char Far local2[] = "";   /* Atari, Mac, CMS/MVS etc. */
+   static ZCONST char Far local3[] = "";
+#endif
+#endif /* ?MACOS */
+#endif /* ?AMIGA */
+#endif /* ?TANDEM */
+#endif /* ?ATH_BEO_UNX */
+#endif /* ?VMS */
+#endif /* ?DOS_FLX_OS2_W32 */
+#endif /* !SFX */
+
+#ifndef NO_ZIPINFO
+#ifdef VMS
+   static ZCONST char Far ZipInfoExample[] = "* or % (e.g., \"*font-%.zip\")";
+#else
+   static ZCONST char Far ZipInfoExample[] = "*, ?, [] (e.g., \"[a-j]*.zip\")";
+#endif
+
+static ZCONST char Far ZipInfoUsageLine1[] = "\
+ZipInfo %d.%d%d%s of %s, by Greg Roelofs and the Info-ZIP group.\n\
+\n\
+List name, date/time, attribute, size, compression method, etc., about files\n\
+in list (excluding those in xlist) contained in the specified .zip archive(s).\
+\n\"file[.zip]\" may be a wildcard name containing %s.\n\n\
+   usage:  zipinfo [-12smlvChMtTz] file[.zip] [list...] [-x xlist...]\n\
+      or:  unzip %s-Z%s [-12smlvChMtTz] file[.zip] [list...] [-x xlist...]\n";
+
+static ZCONST char Far ZipInfoUsageLine2[] = "\nmain\
+ listing-format options:             -s  short Unix \"ls -l\" format (def.)\n\
+  -1  filenames ONLY, one per line       -m  medium Unix \"ls -l\" format\n\
+  -2  just filenames but allow -h/-t/-z  -l  long Unix \"ls -l\" format\n\
+                                         -v  verbose, multi-page format\n";
+
+#ifndef UNIX
+static ZCONST char Far ZipInfoUsageLine3[] = "miscellaneous options:\n\
+  -h  print header line       -t  print totals for listed files or for all\n\
+  -z  print zipfile comment   -T  print file times in sortable decimal format\
+\n  -C  be case-insensitive   %s\
+  -x  exclude filenames that follow from listing\n";
+#else /* UNIX */
+static ZCONST char Far ZipInfoUsageLine3[] = "miscellaneous options:\n\
+  -h  print header line       -t  print totals for listed files or for all\n\
+  -z  print zipfile comment  %c-T%c print file times in sortable decimal format\
+\n %c-C%c be case-insensitive   %s\
+  -x  exclude filenames that follow from listing\n\
+  -O CHARSET  specify a character encoding for DOS, Windows and OS/2 archives\n\
+  -I CHARSET  specify a character encoding for UNIX and other archives\n";
+#endif /* !UNIX */
+#ifdef MORE
+   static ZCONST char Far ZipInfoUsageLine4[] =
+     "  -M  page output through built-in \"more\"\n";
+#else /* !MORE */
+   static ZCONST char Far ZipInfoUsageLine4[] = "";
+#endif /* ?MORE */
+#endif /* !NO_ZIPINFO */
+
+#ifdef BETA
+#  ifdef VMSCLI
+   /* BetaVersion[] is also used in vms/cmdline.c:  do not make it static */
+     ZCONST char Far BetaVersion[] = "%s\
+        THIS IS STILL A BETA VERSION OF UNZIP%s -- DO NOT DISTRIBUTE.\n\n";
+#  else
+     static ZCONST char Far BetaVersion[] = "%s\
+        THIS IS STILL A BETA VERSION OF UNZIP%s -- DO NOT DISTRIBUTE.\n\n";
+#  endif
+#endif
+
+#ifdef SFX
+#  ifdef VMSCLI
+   /* UnzipSFXBanner[] is also used in vms/cmdline.c:  do not make it static */
+     ZCONST char Far UnzipSFXBanner[] =
+#  else
+     static ZCONST char Far UnzipSFXBanner[] =
+#  endif
+     "UnZipSFX %d.%d%d%s of %s, by Info-ZIP (http://www.info-zip.org).\n";
+#  ifdef SFX_EXDIR
+     static ZCONST char Far UnzipSFXOpts[] =
+    "Valid options are -tfupcz and -d <exdir>; modifiers are -abjnoqCL%sV%s.\n";
+#  else
+     static ZCONST char Far UnzipSFXOpts[] =
+       "Valid options are -tfupcz; modifiers are -abjnoqCL%sV%s.\n";
+#  endif
+#else /* !SFX */
+   static ZCONST char Far CompileOptions[] =
+     "UnZip special compilation options:\n";
+   static ZCONST char Far CompileOptFormat[] = "        %s\n";
+#ifndef _WIN32_WCE /* Win CE does not support environment variables */
+   static ZCONST char Far EnvOptions[] =
+     "\nUnZip and ZipInfo environment options:\n";
+   static ZCONST char Far EnvOptFormat[] = "%16s:  %.1024s\n";
+#endif
+   static ZCONST char Far None[] = "[none]";
+#  ifdef ACORN_FTYPE_NFS
+     static ZCONST char Far AcornFtypeNFS[] = "ACORN_FTYPE_NFS";
+#  endif
+#  ifdef ASM_CRC
+     static ZCONST char Far AsmCRC[] = "ASM_CRC";
+#  endif
+#  ifdef ASM_INFLATECODES
+     static ZCONST char Far AsmInflateCodes[] = "ASM_INFLATECODES";
+#  endif
+#  ifdef CHECK_VERSIONS
+     static ZCONST char Far Check_Versions[] = "CHECK_VERSIONS";
+#  endif
+#  ifdef COPYRIGHT_CLEAN
+     static ZCONST char Far Copyright_Clean[] =
+     "COPYRIGHT_CLEAN (PKZIP 0.9x unreducing method not supported)";
+#  endif
+#  ifdef DEBUG
+     static ZCONST char Far UDebug[] = "DEBUG";
+#  endif
+#  ifdef DEBUG_TIME
+     static ZCONST char Far DebugTime[] = "DEBUG_TIME";
+#  endif
+#  ifdef DLL
+     static ZCONST char Far Dll[] = "DLL";
+#  endif
+#  ifdef DOSWILD
+     static ZCONST char Far DosWild[] = "DOSWILD";
+#  endif
+#  ifdef LZW_CLEAN
+     static ZCONST char Far LZW_Clean[] =
+     "LZW_CLEAN (PKZIP/Zip 1.x unshrinking method not supported)";
+#  endif
+#  ifndef MORE
+     static ZCONST char Far No_More[] = "NO_MORE";
+#  endif
+#  ifdef NO_ZIPINFO
+     static ZCONST char Far No_ZipInfo[] = "NO_ZIPINFO";
+#  endif
+#  ifdef NTSD_EAS
+     static ZCONST char Far NTSDExtAttrib[] = "NTSD_EAS";
+#  endif
+#  if defined(WIN32) && defined(NO_W32TIMES_IZFIX)
+     static ZCONST char Far W32NoIZTimeFix[] = "NO_W32TIMES_IZFIX";
+#  endif
+#  ifdef OLD_THEOS_EXTRA
+     static ZCONST char Far OldTheosExtra[] =
+     "OLD_THEOS_EXTRA (handle also old Theos port extra field)";
+#  endif
+#  ifdef OS2_EAS
+     static ZCONST char Far OS2ExtAttrib[] = "OS2_EAS";
+#  endif
+#  ifdef QLZIP
+     static ZCONST char Far SMSExFldOnUnix[] = "QLZIP";
+#  endif
+#  ifdef REENTRANT
+     static ZCONST char Far Reentrant[] = "REENTRANT";
+#  endif
+#  ifdef REGARGS
+     static ZCONST char Far RegArgs[] = "REGARGS";
+#  endif
+#  ifdef RETURN_CODES
+     static ZCONST char Far Return_Codes[] = "RETURN_CODES";
+#  endif
+#  ifdef SET_DIR_ATTRIB
+     static ZCONST char Far SetDirAttrib[] = "SET_DIR_ATTRIB";
+#  endif
+#  ifdef SYMLINKS
+     static ZCONST char Far SymLinkSupport[] =
+     "SYMLINKS (symbolic links supported, if RTL and file system permit)";
+#  endif
+#  ifdef TIMESTAMP
+     static ZCONST char Far TimeStamp[] = "TIMESTAMP";
+#  endif
+#  ifdef UNIXBACKUP
+     static ZCONST char Far UnixBackup[] = "UNIXBACKUP";
+#  endif
+#  ifdef USE_EF_UT_TIME
+     static ZCONST char Far Use_EF_UT_time[] = "USE_EF_UT_TIME";
+#  endif
+#  ifndef LZW_CLEAN
+     static ZCONST char Far Use_Unshrink[] =
+     "USE_UNSHRINK (PKZIP/Zip 1.x unshrinking method supported)";
+#  endif
+#  ifndef COPYRIGHT_CLEAN
+     static ZCONST char Far Use_Smith_Code[] =
+     "USE_SMITH_CODE (PKZIP 0.9x unreducing method supported)";
+#  endif
+#  ifdef USE_DEFLATE64
+     static ZCONST char Far Use_Deflate64[] =
+     "USE_DEFLATE64 (PKZIP 4.x Deflate64(tm) supported)";
+#  endif
+#  ifdef UNICODE_SUPPORT
+#   ifdef UTF8_MAYBE_NATIVE
+#    ifdef UNICODE_WCHAR
+       /* direct native UTF-8 check AND charset transform via wchar_t */
+       static ZCONST char Far Use_Unicode[] =
+       "UNICODE_SUPPORT [wide-chars, char coding: %s] (handle UTF-8 paths)";
+#    else
+       /* direct native UTF-8 check, only */
+       static ZCONST char Far Use_Unicode[] =
+       "UNICODE_SUPPORT [char coding: %s] (handle UTF-8 paths)";
+#    endif
+       static ZCONST char Far SysChUTF8[] = "UTF-8";
+       static ZCONST char Far SysChOther[] = "other";
+#   else /* !UTF8_MAYBE_NATIVE */
+       /* charset transform via wchar_t, no native UTF-8 support */
+       static ZCONST char Far Use_Unicode[] =
+       "UNICODE_SUPPORT [wide-chars] (handle UTF-8 paths)";
+#   endif /* ?UTF8_MAYBE_NATIVE */
+#  endif /* UNICODE_SUPPORT */
+#  ifdef _MBCS
+     static ZCONST char Far Have_MBCS_Support[] =
+     "MBCS-support (multibyte character support, MB_CUR_MAX = %u)";
+#  endif
+#  ifdef MULT_VOLUME
+     static ZCONST char Far Use_MultiVol[] =
+     "MULT_VOLUME (multi-volume archives supported)";
+#  endif
+#  ifdef LARGE_FILE_SUPPORT
+     static ZCONST char Far Use_LFS[] =
+     "LARGE_FILE_SUPPORT (large files over 2 GiB supported)";
+#  endif
+#  ifdef ZIP64_SUPPORT
+     static ZCONST char Far Use_Zip64[] =
+     "ZIP64_SUPPORT (archives using Zip64 for large files supported)";
+#  endif
+#  if (defined(__DJGPP__) && (__DJGPP__ >= 2))
+#    ifdef USE_DJGPP_ENV
+       static ZCONST char Far Use_DJGPP_Env[] = "USE_DJGPP_ENV";
+#    endif
+#    ifdef USE_DJGPP_GLOB
+       static ZCONST char Far Use_DJGPP_Glob[] = "USE_DJGPP_GLOB";
+#    endif
+#  endif /* __DJGPP__ && (__DJGPP__ >= 2) */
+#  ifdef USE_VFAT
+     static ZCONST char Far Use_VFAT_support[] = "USE_VFAT";
+#  endif
+#  ifdef USE_ZLIB
+     static ZCONST char Far UseZlib[] =
+     "USE_ZLIB (compiled with version %s; using version %s)";
+#  endif
+#  ifdef USE_BZIP2
+     static ZCONST char Far UseBZip2[] =
+     "USE_BZIP2 (PKZIP 4.6+, using bzip2 lib version %s)";
+#  endif
+#  ifdef VMS_TEXT_CONV
+     static ZCONST char Far VmsTextConv[] = "VMS_TEXT_CONV";
+#  endif
+#  ifdef VMSCLI
+     static ZCONST char Far VmsCLI[] = "VMSCLI";
+#  endif
+#  ifdef VMSWILD
+     static ZCONST char Far VmsWild[] = "VMSWILD";
+#  endif
+#  ifdef WILD_STOP_AT_DIR
+     static ZCONST char Far WildStopAtDir[] = "WILD_STOP_AT_DIR";
+#  endif
+#  if CRYPT
+#    ifdef PASSWD_FROM_STDIN
+       static ZCONST char Far PasswdStdin[] = "PASSWD_FROM_STDIN";
+#    endif
+     static ZCONST char Far Decryption[] =
+       "        [decryption, version %d.%d%s of %s]\n";
+     static ZCONST char Far CryptDate[] = CR_VERSION_DATE;
+#  endif
+#  ifndef __RSXNT__
+#    ifdef __EMX__
+       static ZCONST char Far EnvEMX[] = "EMX";
+       static ZCONST char Far EnvEMXOPT[] = "EMXOPT";
+#    endif
+#    if (defined(__GO32__) && (!defined(__DJGPP__) || (__DJGPP__ < 2)))
+       static ZCONST char Far EnvGO32[] = "GO32";
+       static ZCONST char Far EnvGO32TMP[] = "GO32TMP";
+#    endif
+#  endif /* !__RSXNT__ */
+
+#ifdef VMS
+/* UnzipUsageLine1[] is also used in vms/cmdline.c:  do not make it static */
+   ZCONST char Far UnzipUsageLine1[] = "\
+UnZip %d.%d%d%s of %s, by Info-ZIP.  For more details see: unzip -v.\n\n";
+# ifdef COPYRIGHT_CLEAN
+   static ZCONST char Far UnzipUsageLine1v[] = "\
+UnZip %d.%d%d%s of %s, by Info-ZIP.  Maintained by C. Spieler.  Send\n\
+bug reports using http://www.info-zip.org/zip-bug.html; see README for details.\
+\n\n";
+# else
+   static ZCONST char Far UnzipUsageLine1v[] = "\
+UnZip %d.%d%d%s of %s, by Info-ZIP.  UnReduce (c) 1989 by S. H. Smith.\n\
+Send bug reports using //www.info-zip.org/zip-bug.html; see README for details.\
+\n\n";
+# endif /* ?COPYRIGHT_CLEAN */
+#else /* !VMS */
+# ifdef COPYRIGHT_CLEAN
+   static ZCONST char Far UnzipUsageLine1[] = "\
+UnZip %d.%d%d%s of %s, by Info-ZIP.  Maintained by C. Spieler.  Send\n\
+bug reports using http://www.info-zip.org/zip-bug.html; see README for details.\
+\n\n";
+# else
+   static ZCONST char Far UnzipUsageLine1[] = "\
+UnZip %d.%d%d%s of %s, by Info-ZIP.  UnReduce (c) 1989 by S. H. Smith.\n\
+Send bug reports using //www.info-zip.org/zip-bug.html; see README for details.\
+\n\n";
+# endif /* ?COPYRIGHT_CLEAN */
+# define UnzipUsageLine1v       UnzipUsageLine1
+#endif /* ?VMS */
+
+static ZCONST char Far UnzipUsageLine2v[] = "\
+Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip/ ;\
+\nsee ftp://ftp.info-zip.org/pub/infozip/UnZip.html for other sites.\
+\n\n";
+
+#ifdef MACOS
+static ZCONST char Far UnzipUsageLine2[] = "\
+Usage: unzip %s[-opts[modifiers]] file[.zip] [list] [-d exdir]\n \
+ Default action is to extract files in list, to exdir;\n\
+  file[.zip] may be a wildcard.  %s\n";
+#else /* !MACOS */
+#ifdef VM_CMS
+static ZCONST char Far UnzipUsageLine2[] = "\
+Usage: unzip %s[-opts[modifiers]] file[.zip] [list] [-x xlist] [-d fm]\n \
+ Default action is to extract files in list, except those in xlist, to disk fm;\
+\n  file[.zip] may be a wildcard.  %s\n";
+#else /* !VM_CMS */
+static ZCONST char Far UnzipUsageLine2[] = "\
+Usage: unzip %s[-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]\n \
+ Default action is to extract files in list, except those in xlist, to exdir;\n\
+  file[.zip] may be a wildcard.  %s\n";
+#endif /* ?VM_CMS */
+#endif /* ?MACOS */
+
+#ifdef NO_ZIPINFO
+#  define ZIPINFO_MODE_OPTION  ""
+   static ZCONST char Far ZipInfoMode[] =
+     "(ZipInfo mode is disabled in this version.)";
+#else
+#  define ZIPINFO_MODE_OPTION  "[-Z] "
+   static ZCONST char Far ZipInfoMode[] =
+     "-Z => ZipInfo mode (\"unzip -Z\" for usage).";
+#endif /* ?NO_ZIPINFO */
+
+#ifdef VMS
+   static ZCONST char Far VMSusageLine2b[] = "\
+=> define foreign command symbol in LOGIN.COM:  $ unzip :== $dev:[dir]unzip.exe\
+\n";
+#endif
+
+#ifdef MACOS
+static ZCONST char Far UnzipUsageLine3[] = "\n\
+  -d  extract files into exdir               -l  list files (short format)\n\
+  -f  freshen existing files, create none    -t  test compressed archive data\n\
+  -u  update files, create if necessary      -z  display archive comment only\n\
+  -v  list verbosely/show version info     %s\n";
+#else /* !MACOS */
+#ifdef VM_CMS
+static ZCONST char Far UnzipUsageLine3[] = "\n\
+  -p  extract files to pipe, no messages     -l  list files (short format)\n\
+  -f  freshen existing files, create none    -t  test compressed archive data\n\
+  -u  update files, create if necessary      -z  display archive comment only\n\
+  -v  list verbosely/show version info     %s\n\
+  -x  exclude files that follow (in xlist)   -d  extract files onto disk fm\n";
+#else /* !VM_CMS */
+static ZCONST char Far UnzipUsageLine3[] = "\n\
+  -p  extract files to pipe, no messages     -l  list files (short format)\n\
+  -f  freshen existing files, create none    -t  test compressed archive data\n\
+  -u  update files, create if necessary      -z  display archive comment only\n\
+  -v  list verbosely/show version info     %s\n\
+  -x  exclude files that follow (in xlist)   -d  extract files into exdir\n";
+#endif /* ?VM_CMS */
+#endif /* ?MACOS */
+
+/* There is not enough space on a standard 80x25 Windows console screen for
+ * the additional line advertising the UTF-8 debugging options. This may
+ * eventually also be the case for other ports. Probably, the -U option need
+ * not be shown on the introductory screen at all. [Chr. Spieler, 2008-02-09]
+ *
+ * Likely, other advanced options should be moved to an extended help page and
+ * the option to list that page put here.  [E. Gordon, 2008-3-16]
+ */
+#if (defined(UNICODE_SUPPORT) && !defined(WIN32))
+#ifdef VMS
+static ZCONST char Far UnzipUsageLine4[] = "\
+modifiers:\n\
+  -n  never overwrite or make a new version of an existing file\n\
+  -o  always make a new version (-oo: overwrite original) of an existing file\n\
+  -q  quiet mode (-qq => quieter)            -a  auto-convert any text files\n\
+  -j  junk paths (do not make directories)   -aa treat ALL files as text\n\
+  -U  use escapes for all non-ASCII Unicode  -UU ignore any Unicode fields\n\
+  -C  match filenames case-insensitively     -L  make (some) names \
+lowercase\n %-42s  -V  retain VMS version numbers\n%s";
+#elif (defined UNIX)
+static ZCONST char Far UnzipUsageLine4[] = "\
+modifiers:\n\
+  -n  never overwrite existing files         -q  quiet mode (-qq => quieter)\n\
+  -o  overwrite files WITHOUT prompting      -a  auto-convert any text files\n\
+  -j  junk paths (do not make directories)   -aa treat ALL files as text\n\
+  -U  use escapes for all non-ASCII Unicode  -UU ignore any Unicode fields\n\
+  -C  match filenames case-insensitively     -L  make (some) names \
+lowercase\n %-42s  -V  retain VMS version numbers\n%s\
+  -O CHARSET  specify a character encoding for DOS, Windows and OS/2 archives\n\
+  -I CHARSET  specify a character encoding for UNIX and other archives\n\n";
+#else /* !VMS */
+static ZCONST char Far UnzipUsageLine4[] = "\
+modifiers:\n\
+  -n  never overwrite existing files         -q  quiet mode (-qq => quieter)\n\
+  -o  overwrite files WITHOUT prompting      -a  auto-convert any text files\n\
+  -j  junk paths (do not make directories)   -aa treat ALL files as text\n\
+  -U  use escapes for all non-ASCII Unicode  -UU ignore any Unicode fields\n\
+  -C  match filenames case-insensitively     -L  make (some) names \
+lowercase\n %-42s  -V  retain VMS version numbers\n%s";
+#endif /* ?VMS */
+#else /* !UNICODE_SUPPORT */
+#ifdef VMS
+static ZCONST char Far UnzipUsageLine4[] = "\
+modifiers:\n\
+  -n  never overwrite or make a new version of an existing file\n\
+  -o  always make a new version (-oo: overwrite original) of an existing file\n\
+  -q  quiet mode (-qq => quieter)            -a  auto-convert any text files\n\
+  -j  junk paths (do not make directories)   -aa treat ALL files as text\n\
+  -C  match filenames case-insensitively     -L  make (some) names \
+lowercase\n %-42s  -V  retain VMS version numbers\n%s";
+#else /* !VMS */
+static ZCONST char Far UnzipUsageLine4[] = "\
+modifiers:\n\
+  -n  never overwrite existing files         -q  quiet mode (-qq => quieter)\n\
+  -o  overwrite files WITHOUT prompting      -a  auto-convert any text files\n\
+  -j  junk paths (do not make directories)   -aa treat ALL files as text\n\
+  -C  match filenames case-insensitively     -L  make (some) names \
+lowercase\n %-42s  -V  retain VMS version numbers\n%s";
+#endif /* ?VMS */
+#endif /* ?UNICODE_SUPPORT */
+
+static ZCONST char Far UnzipUsageLine5[] = "\
+See \"unzip -hh\" or unzip.txt for more help.  Examples:\n\
+  unzip data1 -x joe   => extract all files except joe from zipfile data1.zip\n\
+%s\
+  unzip -fo foo %-6s => quietly replace existing %s if archive file newer\n";
+#endif /* ?SFX */
+
+
+
+
+
+/*****************************/
+/*  main() / UzpMain() stub  */
+/*****************************/
+
+int MAIN(argc, argv)   /* return PK-type error code (except under VMS) */
+    int argc;
+    char *argv[];
+{
+    int r;
+
+    CONSTRUCTGLOBALS();
+    r = unzip(__G__ argc, argv);
+    DESTROYGLOBALS();
+    RETURN(r);
+}
+
+
+
+
+/*******************************/
+/*  Primary UnZip entry point  */
+/*******************************/
+
+int unzip(__G__ argc, argv)
+    __GDEF
+    int argc;
+    char *argv[];
+{
+#ifndef NO_ZIPINFO
+    char *p;
+#endif
+#if (defined(DOS_FLX_H68_NLM_OS2_W32) || !defined(SFX))
+    int i;
+#endif
+    int retcode, error=FALSE;
+#ifndef NO_EXCEPT_SIGNALS
+#ifdef REENTRANT
+    savsigs_info *oldsighandlers = NULL;
+#   define SET_SIGHANDLER(sigtype, newsighandler) \
+      if ((retcode = setsignalhandler(__G__ &oldsighandlers, (sigtype), \
+                                      (newsighandler))) > PK_WARN) \
+          goto cleanup_and_exit
+#else
+#   define SET_SIGHANDLER(sigtype, newsighandler) \
+      signal((sigtype), (newsighandler))
+#endif
+#endif /* NO_EXCEPT_SIGNALS */
+
+    /* initialize international char support to the current environment */
+    SETLOCALE(LC_CTYPE, "");
+
+#ifdef UNICODE_SUPPORT
+    /* see if can use UTF-8 Unicode locale */
+# ifdef UTF8_MAYBE_NATIVE
+    {
+        char *codeset;
+#  if !(defined(NO_NL_LANGINFO) || defined(NO_LANGINFO_H))
+        /* get the codeset (character set encoding) currently used */
+#       include <langinfo.h>
+
+        codeset = nl_langinfo(CODESET);
+#  else /* NO_NL_LANGINFO || NO_LANGINFO_H */
+        /* query the current locale setting for character classification */
+        codeset = setlocale(LC_CTYPE, NULL);
+        if (codeset != NULL) {
+            /* extract the codeset portion of the locale name */
+            codeset = strchr(codeset, '.');
+            if (codeset != NULL) ++codeset;
+        }
+#  endif /* ?(NO_NL_LANGINFO || NO_LANGINFO_H) */
+        /* is the current codeset UTF-8 ? */
+        if ((codeset != NULL) && (strcmp(codeset, "UTF-8") == 0)) {
+            /* successfully found UTF-8 char coding */
+            G.native_is_utf8 = TRUE;
+        } else {
+            /* Current codeset is not UTF-8 or cannot be determined. */
+            G.native_is_utf8 = FALSE;
+        }
+        /* Note: At least for UnZip, trying to change the process codeset to
+         *       UTF-8 does not work.  For the example Linux setup of the
+         *       UnZip maintainer, a successful switch to "en-US.UTF-8"
+         *       resulted in garbage display of all non-basic ASCII characters.
+         */
+    }
+# endif /* UTF8_MAYBE_NATIVE */
+
+    /* initialize Unicode */
+    G.unicode_escape_all = 0;
+    G.unicode_mismatch = 0;
+
+    G.unipath_version = 0;
+    G.unipath_checksum = 0;
+    G.unipath_filename = NULL;
+#endif /* UNICODE_SUPPORT */
+
+
+#ifdef UNIX
+    init_conversion_charsets();
+#endif
+
+#if (defined(__IBMC__) && defined(__DEBUG_ALLOC__))
+    extern void DebugMalloc(void);
+
+    atexit(DebugMalloc);
+#endif
+
+#ifdef MALLOC_WORK
+    /* The following (rather complex) expression determines the allocation
+       size of the decompression work area.  It simulates what the
+       combined "union" and "struct" declaration of the "static" work
+       area reservation achieves automatically at compile time.
+       Any decent compiler should evaluate this expression completely at
+       compile time and provide constants to the zcalloc() call.
+       (For better readability, some subexpressions are encapsulated
+       in temporarly defined macros.)
+     */
+#   define UZ_SLIDE_CHUNK (sizeof(shrint)+sizeof(uch)+sizeof(uch))
+#   define UZ_NUMOF_CHUNKS \
+      (unsigned)(((WSIZE+UZ_SLIDE_CHUNK-1)/UZ_SLIDE_CHUNK > HSIZE) ? \
+                 (WSIZE+UZ_SLIDE_CHUNK-1)/UZ_SLIDE_CHUNK : HSIZE)
+    G.area.Slide = (uch *)zcalloc(UZ_NUMOF_CHUNKS, UZ_SLIDE_CHUNK);
+#   undef UZ_SLIDE_CHUNK
+#   undef UZ_NUMOF_CHUNKS
+    G.area.shrink.Parent = (shrint *)G.area.Slide;
+    G.area.shrink.value = G.area.Slide + (sizeof(shrint)*(HSIZE));
+    G.area.shrink.Stack = G.area.Slide +
+                           (sizeof(shrint) + sizeof(uch))*(HSIZE);
+#endif
+
+/*---------------------------------------------------------------------------
+    Set signal handler for restoring echo, warn of zipfile corruption, etc.
+  ---------------------------------------------------------------------------*/
+#ifndef NO_EXCEPT_SIGNALS
+#ifdef SIGINT
+    SET_SIGHANDLER(SIGINT, handler);
+#endif
+#ifdef SIGTERM                 /* some systems really have no SIGTERM */
+    SET_SIGHANDLER(SIGTERM, handler);
+#endif
+#if defined(SIGABRT) && !(defined(AMIGA) && defined(__SASC))
+    SET_SIGHANDLER(SIGABRT, handler);
+#endif
+#ifdef SIGBREAK
+    SET_SIGHANDLER(SIGBREAK, handler);
+#endif
+#ifdef SIGBUS
+    SET_SIGHANDLER(SIGBUS, handler);
+#endif
+#ifdef SIGILL
+    SET_SIGHANDLER(SIGILL, handler);
+#endif
+#ifdef SIGSEGV
+    SET_SIGHANDLER(SIGSEGV, handler);
+#endif
+#endif /* NO_EXCEPT_SIGNALS */
+
+#if (defined(WIN32) && defined(__RSXNT__))
+    for (i = 0 ; i < argc; i++) {
+        _ISO_INTERN(argv[i]);
+    }
+#endif
+
+/*---------------------------------------------------------------------------
+    Macintosh initialization code.
+  ---------------------------------------------------------------------------*/
+
+#ifdef MACOS
+    {
+        int a;
+
+        for (a = 0;  a < 4;  ++a)
+            G.rghCursor[a] = GetCursor(a+128);
+        G.giCursor = 0;
+    }
+#endif
+
+/*---------------------------------------------------------------------------
+    NetWare initialization code.
+  ---------------------------------------------------------------------------*/
+
+#ifdef NLM
+    InitUnZipConsole();
+#endif
+
+/*---------------------------------------------------------------------------
+    Acorn RISC OS initialization code.
+  ---------------------------------------------------------------------------*/
+
+#ifdef RISCOS
+    set_prefix();
+#endif
+
+/*---------------------------------------------------------------------------
+    Theos initialization code.
+  ---------------------------------------------------------------------------*/
+
+#ifdef THEOS
+    /* The easiest way found to force creation of libraries when selected
+     * members are to be unzipped. Explicitly add libraries names to the
+     * arguments list before the first member of the library.
+     */
+    if (! _setargv(&argc, &argv)) {
+        Info(slide, 0x401, ((char *)slide, "cannot process argv\n"));
+        retcode = PK_MEM;
+        goto cleanup_and_exit;
+    }
+#endif
+
+/*---------------------------------------------------------------------------
+    Sanity checks.  Commentary by Otis B. Driftwood and Fiorello:
+
+    D:  It's all right.  That's in every contract.  That's what they
+        call a sanity clause.
+
+    F:  Ha-ha-ha-ha-ha.  You can't fool me.  There ain't no Sanity
+        Claus.
+  ---------------------------------------------------------------------------*/
+
+#ifdef DEBUG
+# ifdef LARGE_FILE_SUPPORT
+  /* test if we can support large files - 10/6/04 EG */
+    if (sizeof(zoff_t) < 8) {
+        Info(slide, 0x401, ((char *)slide, "LARGE_FILE_SUPPORT set but not supported\n"));
+        retcode = PK_BADERR;
+        goto cleanup_and_exit;
+    }
+    /* test if we can show 64-bit values */
+    {
+        zoff_t z = ~(zoff_t)0;  /* z should be all 1s now */
+        char *sz;
+
+        sz = FmZofft(z, FZOFFT_HEX_DOT_WID, "X");
+        if ((sz[0] != 'F') || (strlen(sz) != 16))
+        {
+            z = 0;
+        }
+
+        /* shift z so only MSB is set */
+        z <<= 63;
+        sz = FmZofft(z, FZOFFT_HEX_DOT_WID, "X");
+        if ((sz[0] != '8') || (strlen(sz) != 16))
+        {
+            Info(slide, 0x401, ((char *)slide,
+              "Can't show 64-bit values correctly\n"));
+            retcode = PK_BADERR;
+            goto cleanup_and_exit;
+        }
+    }
+# endif /* LARGE_FILE_SUPPORT */
+
+    /* 2004-11-30 SMS.
+       Test the NEXTBYTE macro for proper operation.
+    */
+    {
+        int test_char;
+        static uch test_buf[2] = { 'a', 'b' };
+
+        G.inptr = test_buf;
+        G.incnt = 1;
+
+        test_char = NEXTBYTE;           /* Should get 'a'. */
+        if (test_char == 'a')
+        {
+            test_char = NEXTBYTE;       /* Should get EOF, not 'b'. */
+        }
+        if (test_char != EOF)
+        {
+            Info(slide, 0x401, ((char *)slide,
+ "NEXTBYTE macro failed.  Try compiling with ALT_NEXTBYTE defined?"));
+
+            retcode = PK_BADERR;
+            goto cleanup_and_exit;
+        }
+    }
+#endif /* DEBUG */
+
+/*---------------------------------------------------------------------------
+    First figure out if we're running in UnZip mode or ZipInfo mode, and put
+    the appropriate environment-variable options into the queue.  Then rip
+    through any command-line options lurking about...
+  ---------------------------------------------------------------------------*/
+
+#ifdef SFX
+    G.argv0 = argv[0];
+#if (defined(OS2) || defined(WIN32))
+    G.zipfn = GetLoadPath(__G);/* non-MSC NT puts path into G.filename[] */
+#else
+    G.zipfn = G.argv0;
+#endif
+
+#ifdef VMSCLI
+    {
+        ulg status = vms_unzip_cmdline(&argc, &argv);
+        if (!(status & 1)) {
+            retcode = (int)status;
+            goto cleanup_and_exit;
+        }
+    }
+#endif /* VMSCLI */
+
+    uO.zipinfo_mode = FALSE;
+    error = uz_opts(__G__ &argc, &argv);   /* UnZipSFX call only */
+
+#else /* !SFX */
+
+#ifdef RISCOS
+    /* get the extensions to swap from environment */
+    getRISCOSexts(ENV_UNZIPEXTS);
+#endif
+
+#ifdef MSDOS
+    /* extract MKS extended argument list from environment (before envargs!) */
+    mksargs(&argc, &argv);
+#endif
+
+#ifdef VMSCLI
+    {
+        ulg status = vms_unzip_cmdline(&argc, &argv);
+        if (!(status & 1)) {
+            retcode = (int)status;
+            goto cleanup_and_exit;
+        }
+    }
+#endif /* VMSCLI */
+
+    G.noargs = (argc == 1);   /* no options, no zipfile, no anything */
+
+#ifndef NO_ZIPINFO
+    for (p = argv[0] + strlen(argv[0]); p >= argv[0]; --p) {
+        if (*p == DIR_END
+#ifdef DIR_END2
+            || *p == DIR_END2
+#endif
+           )
+            break;
+    }
+    ++p;
+
+#ifdef THEOS
+    if (strncmp(p, "ZIPINFO.",8) == 0 || strstr(p, ".ZIPINFO:") != NULL ||
+        strncmp(p, "II.",3) == 0 || strstr(p, ".II:") != NULL ||
+#else
+    if (STRNICMP(p, LoadFarStringSmall(Zipnfo), 7) == 0 ||
+        STRNICMP(p, "ii", 2) == 0 ||
+#endif
+        (argc > 1 && strncmp(argv[1], "-Z", 2) == 0))
+    {
+        uO.zipinfo_mode = TRUE;
+#ifndef _WIN32_WCE /* Win CE does not support environment variables */
+        if ((error = envargs(&argc, &argv, LoadFarStringSmall(EnvZipInfo),
+                             LoadFarStringSmall2(EnvZipInfo2))) != PK_OK)
+            perror(LoadFarString(NoMemEnvArguments));
+#endif
+    } else
+#endif /* !NO_ZIPINFO */
+    {
+        uO.zipinfo_mode = FALSE;
+#ifndef _WIN32_WCE /* Win CE does not support environment variables */
+        if ((error = envargs(&argc, &argv, LoadFarStringSmall(EnvUnZip),
+                             LoadFarStringSmall2(EnvUnZip2))) != PK_OK)
+            perror(LoadFarString(NoMemEnvArguments));
+#endif
+    }
+
+    if (!error) {
+        /* Check the length of all passed command line parameters.
+         * Command arguments might get sent through the Info() message
+         * system, which uses the sliding window area as string buffer.
+         * As arguments may additionally get fed through one of the FnFilter
+         * macros, we require all command line arguments to be shorter than
+         * WSIZE/4 (and ca. 2 standard line widths for fixed message text).
+         */
+        for (i = 1 ; i < argc; i++) {
+           if (strlen(argv[i]) > ((WSIZE>>2) - 160)) {
+               Info(slide, 0x401, ((char *)slide,
+                 LoadFarString(CmdLineParamTooLong), i));
+               retcode = PK_PARAM;
+               goto cleanup_and_exit;
+           }
+        }
+#ifndef NO_ZIPINFO
+        if (uO.zipinfo_mode)
+            error = zi_opts(__G__ &argc, &argv);
+        else
+#endif /* !NO_ZIPINFO */
+            error = uz_opts(__G__ &argc, &argv);
+    }
+
+#endif /* ?SFX */
+
+    if ((argc < 0) || error) {
+        retcode = error;
+        goto cleanup_and_exit;
+    }
+
+/*---------------------------------------------------------------------------
+    Now get the zipfile name from the command line and then process any re-
+    maining options and file specifications.
+  ---------------------------------------------------------------------------*/
+
+#ifdef DOS_FLX_H68_NLM_OS2_W32
+    /* convert MSDOS-style 'backward slash' directory separators to Unix-style
+     * 'forward slashes' for user's convenience (include zipfile name itself)
+     */
+#ifdef SFX
+    for (G.pfnames = argv, i = argc;  i > 0;  --i) {
+#else
+    /* argc does not include the zipfile specification */
+    for (G.pfnames = argv, i = argc+1;  i > 0;  --i) {
+#endif
+#ifdef __human68k__
+        extern char *_toslash(char *);
+        _toslash(*G.pfnames);
+#else /* !__human68k__ */
+        char *q = *G.pfnames;
+
+        while (*q != '\0') {
+            if (*q == '\\')
+                *q = '/';
+            INCSTR(q);
+        }
+#endif /* ?__human68k__ */
+        ++G.pfnames;
+    }
+#endif /* DOS_FLX_H68_NLM_OS2_W32 */
+
+#ifndef SFX
+    G.wildzipfn = *argv++;
+#endif
+
+#if (defined(SFX) && !defined(SFX_EXDIR)) /* only check for -x */
+
+    G.filespecs = argc;
+    G.xfilespecs = 0;
+
+    if (argc > 0) {
+        char **pp = argv-1;
+
+        G.pfnames = argv;
+        while (*++pp)
+            if (strcmp(*pp, "-x") == 0) {
+                if (pp > argv) {
+                    *pp = 0;              /* terminate G.pfnames */
+                    G.filespecs = pp - G.pfnames;
+                } else {
+                    G.pfnames = (char **)fnames;  /* defaults */
+                    G.filespecs = 0;
+                }
+                G.pxnames = pp + 1;      /* excluded-names ptr: _after_ -x */
+                G.xfilespecs = argc - G.filespecs - 1;
+                break;                    /* skip rest of args */
+            }
+        G.process_all_files = FALSE;
+    } else
+        G.process_all_files = TRUE;      /* for speed */
+
+#else /* !SFX || SFX_EXDIR */             /* check for -x or -d */
+
+    G.filespecs = argc;
+    G.xfilespecs = 0;
+
+    if (argc > 0) {
+        int in_files=FALSE, in_xfiles=FALSE;
+        char **pp = argv-1;
+
+        G.process_all_files = FALSE;
+        G.pfnames = argv;
+        while (*++pp) {
+            Trace((stderr, "pp - argv = %d\n", pp-argv));
+#ifdef CMS_MVS
+            if (!uO.exdir && STRNICMP(*pp, "-d", 2) == 0) {
+#else
+            if (!uO.exdir && strncmp(*pp, "-d", 2) == 0) {
+#endif
+                int firstarg = (pp == argv);
+
+                uO.exdir = (*pp) + 2;
+                if (in_files) {      /* ... zipfile ... -d exdir ... */
+                    *pp = (char *)NULL;         /* terminate G.pfnames */
+                    G.filespecs = pp - G.pfnames;
+                    in_files = FALSE;
+                } else if (in_xfiles) {
+                    *pp = (char *)NULL;         /* terminate G.pxnames */
+                    G.xfilespecs = pp - G.pxnames;
+                    /* "... -x xlist -d exdir":  nothing left */
+                }
+                /* first check for "-dexdir", then for "-d exdir" */
+                if (*uO.exdir == '\0') {
+                    if (*++pp)
+                        uO.exdir = *pp;
+                    else {
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarString(MustGiveExdir)));
+                        /* don't extract here by accident */
+                        retcode = PK_PARAM;
+                        goto cleanup_and_exit;
+                    }
+                }
+                if (firstarg) { /* ... zipfile -d exdir ... */
+                    if (pp[1]) {
+                        G.pfnames = pp + 1;  /* argv+2 */
+                        G.filespecs = argc - (G.pfnames-argv);  /* for now... */
+                    } else {
+                        G.process_all_files = TRUE;
+                        G.pfnames = (char **)fnames;  /* GRR: necessary? */
+                        G.filespecs = 0;     /* GRR: necessary? */
+                        break;
+                    }
+                }
+            } else if (!in_xfiles) {
+                if (strcmp(*pp, "-x") == 0) {
+                    in_xfiles = TRUE;
+                    if (pp == G.pfnames) {
+                        G.pfnames = (char **)fnames;  /* defaults */
+                        G.filespecs = 0;
+                    } else if (in_files) {
+                        *pp = 0;                   /* terminate G.pfnames */
+                        G.filespecs = pp - G.pfnames;  /* adjust count */
+                        in_files = FALSE;
+                    }
+                    G.pxnames = pp + 1; /* excluded-names ptr starts after -x */
+                    G.xfilespecs = argc - (G.pxnames-argv);  /* anything left */
+                } else
+                    in_files = TRUE;
+            }
+        }
+    } else
+        G.process_all_files = TRUE;      /* for speed */
+
+    if (uO.exdir != (char *)NULL && !G.extract_flag)    /* -d ignored */
+        Info(slide, 0x401, ((char *)slide, LoadFarString(NotExtracting)));
+#endif /* ?(SFX && !SFX_EXDIR) */
+
+#ifdef UNICODE_SUPPORT
+    /* set Unicode-escape-all if option -U used */
+    if (uO.U_flag == 1)
+# ifdef UNICODE_WCHAR
+        G.unicode_escape_all = TRUE;
+# else
+        Info(slide, 0x401, ((char *)slide, LoadFarString(UTF8EscapeUnSupp)));
+# endif
+#endif
+
+
+/*---------------------------------------------------------------------------
+    Okey dokey, we have everything we need to get started.  Let's roll.
+  ---------------------------------------------------------------------------*/
+
+    retcode = process_zipfiles(__G);
+
+cleanup_and_exit:
+#if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS))
+    /* restore all signal handlers back to their state at function entry */
+    while (oldsighandlers != NULL) {
+        savsigs_info *thissigsav = oldsighandlers;
+
+        signal(thissigsav->sigtype, thissigsav->sighandler);
+        oldsighandlers = thissigsav->previous;
+        free(thissigsav);
+    }
+#endif
+#if (defined(MALLOC_WORK) && !defined(REENTRANT))
+    if (G.area.Slide != (uch *)NULL) {
+        free(G.area.Slide);
+        G.area.Slide = (uch *)NULL;
+    }
+#endif
+#if (defined(MSDOS) && !defined(SFX) && !defined(WINDLL))
+    if (retcode != PK_OK)
+        check_for_windows("UnZip");
+#endif
+    return(retcode);
+
+} /* end main()/unzip() */
+
+
+
+
+
+#if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS))
+/*******************************/
+/* Function setsignalhandler() */
+/*******************************/
+
+static int setsignalhandler(__G__ p_savedhandler_chain, signal_type,
+                            newhandler)
+    __GDEF
+    savsigs_info **p_savedhandler_chain;
+    int signal_type;
+    void (*newhandler)(int);
+{
+    savsigs_info *savsig;
+
+    savsig = malloc(sizeof(savsigs_info));
+    if (savsig == NULL) {
+        /* error message and break */
+        Info(slide, 0x401, ((char *)slide, LoadFarString(CantSaveSigHandler)));
+        return PK_MEM;
+    }
+    savsig->sigtype = signal_type;
+    savsig->sighandler = signal(SIGINT, newhandler);
+    if (savsig->sighandler == SIG_ERR) {
+        free(savsig);
+    } else {
+        savsig->previous = *p_savedhandler_chain;
+        *p_savedhandler_chain = savsig;
+    }
+    return PK_OK;
+
+} /* end function setsignalhandler() */
+
+#endif /* REENTRANT && !NO_EXCEPT_SIGNALS */
+
+
+
+
+
+/**********************/
+/* Function uz_opts() */
+/**********************/
+
+int uz_opts(__G__ pargc, pargv)
+    __GDEF
+    int *pargc;
+    char ***pargv;
+{
+    char **argv, *s;
+    int argc, c, error=FALSE, negative=0, showhelp=0;
+
+
+    argc = *pargc;
+    argv = *pargv;
+
+#ifdef UNIX
+    extern char OEM_CP[MAX_CP_NAME];
+    extern char ISO_CP[MAX_CP_NAME];
+#endif
+    
+    while (++argv, (--argc > 0 && *argv != NULL && **argv == '-')) {
+        s = *argv + 1;
+        while ((c = *s++) != 0) {    /* "!= 0":  prevent Turbo C warning */
+#ifdef CMS_MVS
+            switch (tolower(c))
+#else
+            switch (c)
+#endif
+            {
+                case ('-'):
+                    ++negative;
+                    break;
+#ifdef RISCOS
+                case ('/'):
+                    if (negative) {   /* negative not allowed with -/ swap */
+                        Info(slide, 0x401, ((char *)slide,
+                          "error:  must give extensions list"));
+                        return(PK_PARAM);  /* don't extract here by accident */
+                    }
+                    exts2swap = s; /* override Unzip$Exts */
+                    s += strlen(s);
+                    break;
+#endif
+                case ('a'):
+                    if (negative) {
+                        uO.aflag = MAX(uO.aflag-negative,0);
+                        negative = 0;
+                    } else
+                        ++uO.aflag;
+                    break;
+#if (defined(DLL) && defined(API_DOC))
+                case ('A'):    /* extended help for API */
+                    APIhelp(__G__ argc, argv);
+                    *pargc = -1;  /* signal to exit successfully */
+                    return 0;
+#endif
+                case ('b'):
+                    if (negative) {
+#if (defined(TANDEM) || defined(VMS))
+                        uO.bflag = MAX(uO.bflag-negative,0);
+#endif
+                        negative = 0;   /* do nothing:  "-b" is default */
+                    } else {
+#ifdef VMS
+                        if (uO.aflag == 0)
+                           ++uO.bflag;
+#endif
+#ifdef TANDEM
+                        ++uO.bflag;
+#endif
+                        uO.aflag = 0;
+                    }
+                    break;
+#ifdef UNIXBACKUP
+                case ('B'): /* -B: back up existing files */
+                    if (negative)
+                        uO.B_flag = FALSE, negative = 0;
+                    else
+                        uO.B_flag = TRUE;
+                    break;
+#endif
+                case ('c'):
+                    if (negative) {
+                        uO.cflag = FALSE, negative = 0;
+#ifdef NATIVE
+                        uO.aflag = 0;
+#endif
+                    } else {
+                        uO.cflag = TRUE;
+#ifdef NATIVE
+                        uO.aflag = 2;   /* so you can read it on the screen */
+#endif
+#ifdef DLL
+                        if (G.redirect_text)
+                            G.redirect_data = 2;
+#endif
+                    }
+                    break;
+#ifndef CMS_MVS
+                case ('C'):    /* -C:  match filenames case-insensitively */
+                    if (negative)
+                        uO.C_flag = FALSE, negative = 0;
+                    else
+                        uO.C_flag = TRUE;
+                    break;
+#endif /* !CMS_MVS */
+#if (!defined(SFX) || defined(SFX_EXDIR))
+                case ('d'):
+                    if (negative) {   /* negative not allowed with -d exdir */
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarString(MustGiveExdir)));
+                        return(PK_PARAM);  /* don't extract here by accident */
+                    }
+                    if (uO.exdir != (char *)NULL) {
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarString(OnlyOneExdir)));
+                        return(PK_PARAM);    /* GRR:  stupid restriction? */
+                    } else {
+                        /* first check for "-dexdir", then for "-d exdir" */
+                        uO.exdir = s;
+                        if (*uO.exdir == '\0') {
+                            if (argc > 1) {
+                                --argc;
+                                uO.exdir = *++argv;
+                                if (*uO.exdir == '-') {
+                                    Info(slide, 0x401, ((char *)slide,
+                                      LoadFarString(MustGiveExdir)));
+                                    return(PK_PARAM);
+                                }
+                                /* else uO.exdir points at extraction dir */
+                            } else {
+                                Info(slide, 0x401, ((char *)slide,
+                                  LoadFarString(MustGiveExdir)));
+                                return(PK_PARAM);
+                            }
+                        }
+                        /* uO.exdir now points at extraction dir (-dexdir or
+                         *  -d exdir); point s at end of exdir to avoid mis-
+                         *  interpretation of exdir characters as more options
+                         */
+                        if (*s != 0)
+                            while (*++s != 0)
+                                ;
+                    }
+                    break;
+#endif /* !SFX || SFX_EXDIR */
+#if (!defined(NO_TIMESTAMPS))
+                case ('D'):    /* -D: Skip restoring dir (or any) timestamp. */
+                    if (negative) {
+                        uO.D_flag = MAX(uO.D_flag-negative,0);
+                        negative = 0;
+                    } else
+                        uO.D_flag++;
+                    break;
+#endif /* (!NO_TIMESTAMPS) */
+                case ('e'):    /* just ignore -e, -x options (extract) */
+                    break;
+#ifdef MACOS
+                case ('E'): /* -E [MacOS] display Mac e.f. when restoring */
+                    if( negative ) {
+                        uO.E_flag = FALSE, negative = 0;
+                    } else {
+                        uO.E_flag = TRUE;
+                    }
+                    break;
+#endif /* MACOS */
+                case ('f'):    /* "freshen" (extract only newer files) */
+                    if (negative)
+                        uO.fflag = uO.uflag = FALSE, negative = 0;
+                    else
+                        uO.fflag = uO.uflag = TRUE;
+                    break;
+#if (defined(RISCOS) || defined(ACORN_FTYPE_NFS))
+                case ('F'):    /* Acorn filetype & NFS extension handling */
+                    if (negative)
+                        uO.acorn_nfs_ext = FALSE, negative = 0;
+                    else
+                        uO.acorn_nfs_ext = TRUE;
+                    break;
+#endif /* RISCOS || ACORN_FTYPE_NFS */
+                case ('h'):    /* just print help message and quit */
+                    if (showhelp == 0) {
+#ifndef SFX
+                        if (*s == 'h')
+                            showhelp = 2;
+                        else
+#endif /* !SFX */
+                        {
+                            showhelp = 1;
+                        }
+                    }
+                    break;
+#ifdef MACOS
+                case ('i'): /* -i [MacOS] ignore filenames stored in Mac ef */
+                    if( negative ) {
+                        uO.i_flag = FALSE, negative = 0;
+                    } else {
+                        uO.i_flag = TRUE;
+                    }
+                    break;
+#endif  /* MACOS */
+#ifdef UNIX
+    			case ('I'):
+                    if (negative) {
+                        Info(slide, 0x401, ((char *)slide,
+                          "error:  encodings can't be negated"));
+                        return(PK_PARAM);
+    				} else {
+    					if(*s) { /* Handle the -Icharset case */
+    						/* Assume that charsets can't start with a dash to spot arguments misuse */
+    						if(*s == '-') { 
+    	                        Info(slide, 0x401, ((char *)slide,
+        		                  "error:  a valid character encoding should follow the -I argument"));
+    	                        return(PK_PARAM); 
+    						}
+    						strncpy(ISO_CP, s, MAX_CP_NAME - 1);
+                ISO_CP[MAX_CP_NAME - 1] = '\0';
+    					} else { /* -I charset */
+    						++argv;
+    						if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
+    	                        Info(slide, 0x401, ((char *)slide,
+        		                  "error:  a valid character encoding should follow the -I argument"));
+    	                        return(PK_PARAM); 
+    						}
+    						s = *argv;
+    						strncpy(ISO_CP, s, MAX_CP_NAME - 1);
+                ISO_CP[MAX_CP_NAME - 1] = '\0';
+    					}
+    					while(*(++s)); /* No params straight after charset name */
+    				}
+    				break;
+#endif /* ?UNIX */
+                case ('j'):    /* junk pathnames/directory structure */
+                    if (negative)
+                        uO.jflag = FALSE, negative = 0;
+                    else
+                        uO.jflag = TRUE;
+                    break;
+#if (defined(ATH_BEO) || defined(MACOS))
+                case ('J'):    /* Junk AtheOS, BeOS or MacOS file attributes */
+                    if( negative ) {
+                        uO.J_flag = FALSE, negative = 0;
+                    } else {
+                        uO.J_flag = TRUE;
+                    }
+                    break;
+#endif /* ATH_BEO || MACOS */
+#ifdef ATH_BEO_UNX
+                case ('K'):
+                    if (negative) {
+                        uO.K_flag = FALSE, negative = 0;
+                    } else {
+                        uO.K_flag = TRUE;
+                    }
+                    break;
+#endif /* ATH_BEO_UNX */
+#ifndef SFX
+                case ('l'):
+                    if (negative) {
+                        uO.vflag = MAX(uO.vflag-negative,0);
+                        negative = 0;
+                    } else
+                        ++uO.vflag;
+                    break;
+#endif /* !SFX */
+#ifndef CMS_MVS
+                case ('L'):    /* convert (some) filenames to lowercase */
+                    if (negative) {
+                        uO.L_flag = MAX(uO.L_flag-negative,0);
+                        negative = 0;
+                    } else
+                        ++uO.L_flag;
+                    break;
+#endif /* !CMS_MVS */
+#ifdef MORE
+#ifdef CMS_MVS
+                case ('m'):
+#endif
+                case ('M'):    /* send all screen output through "more" fn. */
+/* GRR:  eventually check for numerical argument => height */
+                    if (negative)
+                        G.M_flag = FALSE, negative = 0;
+                    else
+                        G.M_flag = TRUE;
+                    break;
+#endif /* MORE */
+                case ('n'):    /* don't overwrite any files */
+                    if (negative)
+                        uO.overwrite_none = FALSE, negative = 0;
+                    else
+                        uO.overwrite_none = TRUE;
+                    break;
+#ifdef AMIGA
+                case ('N'):    /* restore comments as filenotes */
+                    if (negative)
+                        uO.N_flag = FALSE, negative = 0;
+                    else
+                        uO.N_flag = TRUE;
+                    break;
+#endif /* AMIGA */
+                case ('o'):    /* OK to overwrite files without prompting */
+                    if (negative) {
+                        uO.overwrite_all = MAX(uO.overwrite_all-negative,0);
+                        negative = 0;
+                    } else
+                        ++uO.overwrite_all;
+                    break;
+#ifdef UNIX
+    			case ('O'):
+                    if (negative) {
+                        Info(slide, 0x401, ((char *)slide,
+                          "error:  encodings can't be negated"));
+                        return(PK_PARAM);
+    				} else {
+    					if(*s) { /* Handle the -Ocharset case */
+    						/* Assume that charsets can't start with a dash to spot arguments misuse */
+    						if(*s == '-') { 
+    	                        Info(slide, 0x401, ((char *)slide,
+        		                  "error:  a valid character encoding should follow the -I argument"));
+    	                        return(PK_PARAM); 
+    						}
+    						strncpy(OEM_CP, s, MAX_CP_NAME - 1);
+                OEM_CP[MAX_CP_NAME - 1] = '\0';
+    					} else { /* -O charset */
+    						++argv;
+    						if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
+    	                        Info(slide, 0x401, ((char *)slide,
+        		                  "error:  a valid character encoding should follow the -O argument"));
+    	                        return(PK_PARAM); 
+    						}
+    						s = *argv;
+    						strncpy(OEM_CP, s, MAX_CP_NAME - 1);
+                OEM_CP[MAX_CP_NAME - 1] = '\0';
+    					}
+    					while(*(++s)); /* No params straight after charset name */
+    				}
+    				break;
+#endif /* ?UNIX */
+                case ('p'):    /* pipes:  extract to stdout, no messages */
+                    if (negative) {
+                        uO.cflag = FALSE;
+                        uO.qflag = MAX(uO.qflag-999,0);
+                        negative = 0;
+                    } else {
+                        uO.cflag = TRUE;
+                        uO.qflag += 999;
+                    }
+                    break;
+#if CRYPT
+                /* GRR:  yes, this is highly insecure, but dozens of people
+                 * have pestered us for this, so here we go... */
+                case ('P'):
+                    if (negative) {   /* negative not allowed with -P passwd */
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarString(MustGivePasswd)));
+                        return(PK_PARAM);  /* don't extract here by accident */
+                    }
+                    if (uO.pwdarg != (char *)NULL) {
+/*
+                        GRR:  eventually support multiple passwords?
+                        Info(slide, 0x401, ((char *)slide,
+                          LoadFarString(OnlyOnePasswd)));
+                        return(PK_PARAM);
+ */
+                    } else {
+                        /* first check for "-Ppasswd", then for "-P passwd" */
+                        uO.pwdarg = s;
+                        if (*uO.pwdarg == '\0') {
+                            if (argc > 1) {
+                                --argc;
+                                uO.pwdarg = *++argv;
+                                if (*uO.pwdarg == '-') {
+                                    Info(slide, 0x401, ((char *)slide,
+                                      LoadFarString(MustGivePasswd)));
+                                    return(PK_PARAM);
+                                }
+                                /* else pwdarg points at decryption password */
+                            } else {
+                                Info(slide, 0x401, ((char *)slide,
+                                  LoadFarString(MustGivePasswd)));
+                                return(PK_PARAM);
+                            }
+                        }
+                        /* pwdarg now points at decryption password (-Ppasswd or
+                         *  -P passwd); point s at end of passwd to avoid mis-
+                         *  interpretation of passwd characters as more options
+                         */
+                        if (*s != 0)
+                            while (*++s != 0)
+                                ;
+                    }
+                    break;
+#endif /* CRYPT */
+                case ('q'):    /* quiet:  fewer comments/messages */
+                    if (negative) {
+                        uO.qflag = MAX(uO.qflag-negative,0);
+                        negative = 0;
+                    } else
+                        ++uO.qflag;
+                    break;
+#ifdef QDOS
+                case ('Q'):   /* QDOS flags */
+                    qlflag ^= strtol(s, &s, 10);
+                    break;    /* we XOR this as we can config qlflags */
+#endif
+#ifdef TANDEM
+                case ('r'):    /* remove file extensions */
+                    if (negative)
+                        uO.rflag = FALSE, negative = 0;
+                    else
+                        uO.rflag = TRUE;
+                    break;
+#endif /* TANDEM */
+#ifdef DOS_FLX_NLM_OS2_W32
+                case ('s'):    /* spaces in filenames:  allow by default */
+                    if (negative)
+                        uO.sflag = FALSE, negative = 0;
+                    else
+                        uO.sflag = TRUE;
+                    break;
+#endif /* DOS_FLX_NLM_OS2_W32 */
+#ifdef VMS
+                /* VMS:  extract "text" files in Stream_LF format (-a[a]) */
+                case ('S'):
+                    if (negative)
+                        uO.S_flag = FALSE, negative = 0;
+                    else
+                        uO.S_flag = TRUE;
+                    break;
+#endif /* VMS */
+                case ('t'):
+                    if (negative)
+                        uO.tflag = FALSE, negative = 0;
+                    else
+                        uO.tflag = TRUE;
+                    break;
+#ifdef TIMESTAMP
+                case ('T'):
+                    if (negative)
+                        uO.T_flag = FALSE, negative = 0;
+                    else
+                        uO.T_flag = TRUE;
+                    break;
+#endif
+                case ('u'):    /* update (extract only new and newer files) */
+                    if (negative)
+                        uO.uflag = FALSE, negative = 0;
+                    else
+                        uO.uflag = TRUE;
+                    break;
+#ifdef UNICODE_SUPPORT
+                case ('U'):    /* escape UTF-8, or disable UTF-8 support */
+                    if (negative) {
+                        uO.U_flag = MAX(uO.U_flag-negative,0);
+                        negative = 0;
+                    } else
+                        uO.U_flag++;
+                    break;
+#else /* !UNICODE_SUPPORT */
+#ifndef CMS_MVS
+                case ('U'):    /* obsolete; to be removed in version 6.0 */
+                    if (negative)
+                        uO.L_flag = TRUE, negative = 0;
+                    else
+                        uO.L_flag = FALSE;
+                    break;
+#endif /* !CMS_MVS */
+#endif /* ?UNICODE_SUPPORT */
+#ifndef SFX
+                case ('v'):    /* verbose */
+                    if (negative) {
+                        uO.vflag = MAX(uO.vflag-negative,0);
+                        negative = 0;
+                    } else if (uO.vflag)
+                        ++uO.vflag;
+                    else
+                        uO.vflag = 2;
+                    break;
+#endif /* !SFX */
+#ifndef CMS_MVS
+                case ('V'):    /* Version (retain VMS/DEC-20 file versions) */
+                    if (negative)
+                        uO.V_flag = FALSE, negative = 0;
+                    else
+                        uO.V_flag = TRUE;
+                    break;
+#endif /* !CMS_MVS */
+#ifdef WILD_STOP_AT_DIR
+                case ('W'):    /* Wildcard interpretation (stop at '/'?) */
+                    if (negative)
+                        uO.W_flag = FALSE, negative = 0;
+                    else
+                        uO.W_flag = TRUE;
+                    break;
+#endif /* WILD_STOP_AT_DIR */
+                case ('x'):    /* extract:  default */
+#ifdef SFX
+                    /* when 'x' is the only option in this argument, and the
+                     * next arg is not an option, assume this initiates an
+                     * exclusion list (-x xlist):  terminate option-scanning
+                     * and leave uz_opts with argv still pointing to "-x";
+                     * the xlist is processed later
+                     */
+                    if (s - argv[0] == 2 && *s == '\0' &&
+                        argc > 1 && argv[1][0] != '-') {
+                        /* break out of nested loops without "++argv;--argc" */
+                        goto opts_done;
+                    }
+#endif /* SFX */
+                    break;
+#if (defined(RESTORE_UIDGID) || defined(RESTORE_ACL))
+                case ('X'):   /* restore owner/protection info (need privs?) */
+                    if (negative) {
+                        uO.X_flag = MAX(uO.X_flag-negative,0);
+                        negative = 0;
+                    } else
+                        ++uO.X_flag;
+                    break;
+#endif /* RESTORE_UIDGID || RESTORE_ACL */
+#ifdef VMS
+                case ('Y'):    /* Treat ".nnn" as ";nnn" version. */
+                    if (negative)
+                        uO.Y_flag = FALSE, negative = 0;
+                    else
+                        uO.Y_flag = TRUE;
+                    break;
+#endif /* VMS */
+                case ('z'):    /* display only the archive comment */
+                    if (negative) {
+                        uO.zflag = MAX(uO.zflag-negative,0);
+                        negative = 0;
+                    } else
+                        ++uO.zflag;
+                    break;
+#ifndef SFX
+                case ('Z'):    /* should have been first option (ZipInfo) */
+                    Info(slide, 0x401, ((char *)slide, LoadFarString(Zfirst)));
+                    error = TRUE;
+                    break;
+#endif /* !SFX */
+#ifdef VMS
+                case ('2'):    /* Force ODS2-compliant names. */
+                    if (negative)
+                        uO.ods2_flag = FALSE, negative = 0;
+                    else
+                        uO.ods2_flag = TRUE;
+                    break;
+#endif /* VMS */
+#ifdef DOS_H68_OS2_W32
+                case ('$'):
+                    if (negative) {
+                        uO.volflag = MAX(uO.volflag-negative,0);
+                        negative = 0;
+                    } else
+                        ++uO.volflag;
+                    break;
+#endif /* DOS_H68_OS2_W32 */
+#if (!defined(RISCOS) && !defined(CMS_MVS) && !defined(TANDEM))
+                case (':'):    /* allow "parent dir" path components */
+                    if (negative) {
+                        uO.ddotflag = MAX(uO.ddotflag-negative,0);
+                        negative = 0;
+                    } else
+                        ++uO.ddotflag;
+                    break;
+#endif /* !RISCOS && !CMS_MVS && !TANDEM */
+#ifdef UNIX
+                case ('^'):    /* allow control chars in filenames */
+                    if (negative) {
+                        uO.cflxflag = MAX(uO.cflxflag-negative,0);
+                        negative = 0;
+                    } else
+                        ++uO.cflxflag;
+                    break;
+#endif /* UNIX */
+                default:
+                    error = TRUE;
+                    break;
+
+            } /* end switch */
+        } /* end while (not end of argument string) */
+    } /* end while (not done with switches) */
+
+/*---------------------------------------------------------------------------
+    Check for nonsensical combinations of options.
+  ---------------------------------------------------------------------------*/
+
+#ifdef SFX
+opts_done:  /* yes, very ugly...but only used by UnZipSFX with -x xlist */
+#endif
+
+    if (showhelp > 0) {         /* just print help message and quit */
+        *pargc = -1;
+#ifndef SFX
+        if (showhelp == 2) {
+            help_extended(__G);
+            return PK_OK;
+        } else
+#endif /* !SFX */
+        {
+            return USAGE(PK_OK);
+        }
+    }
+
+    if ((uO.cflag && (uO.tflag || uO.uflag)) ||
+        (uO.tflag && uO.uflag) || (uO.fflag && uO.overwrite_none))
+    {
+        Info(slide, 0x401, ((char *)slide, LoadFarString(InvalidOptionsMsg)));
+        error = TRUE;
+    }
+    if (uO.aflag > 2)
+        uO.aflag = 2;
+#ifdef VMS
+    if (uO.bflag > 2)
+        uO.bflag = 2;
+    /* Clear -s flag when converting text files. */
+    if (uO.aflag <= 0)
+        uO.S_flag = 0;
+#endif /* VMS */
+    if (uO.overwrite_all && uO.overwrite_none) {
+        Info(slide, 0x401, ((char *)slide, LoadFarString(IgnoreOOptionMsg)));
+        uO.overwrite_all = FALSE;
+    }
+#ifdef MORE
+    if (G.M_flag && !isatty(1))  /* stdout redirected: "more" func. useless */
+        G.M_flag = 0;
+#endif
+
+#ifdef SFX
+    if (error)
+#else
+    if ((argc-- == 0) || error)
+#endif
+    {
+        *pargc = argc;
+        *pargv = argv;
+#ifndef SFX
+        if (uO.vflag >= 2 && argc == -1) {              /* "unzip -v" */
+            show_version_info(__G);
+            return PK_OK;
+        }
+        if (!G.noargs && !error)
+            error = TRUE;       /* had options (not -h or -v) but no zipfile */
+#endif /* !SFX */
+        return USAGE(error);
+    }
+
+#ifdef SFX
+    /* print our banner unless we're being fairly quiet */
+    if (uO.qflag < 2)
+        Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(UnzipSFXBanner),
+          UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL,
+          LoadFarStringSmall(VersionDate)));
+#ifdef BETA
+    /* always print the beta warning:  no unauthorized distribution!! */
+    Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(BetaVersion), "\n",
+      "SFX"));
+#endif
+#endif /* SFX */
+
+    if (uO.cflag || uO.tflag || uO.vflag || uO.zflag
+#ifdef TIMESTAMP
+                                                     || uO.T_flag
+#endif
+                                                                 )
+        G.extract_flag = FALSE;
+    else
+        G.extract_flag = TRUE;
+
+    *pargc = argc;
+    *pargv = argv;
+    return PK_OK;
+
+} /* end function uz_opts() */
+
+
+
+
+/********************/
+/* Function usage() */
+/********************/
+
+#ifdef SFX
+#  ifdef VMS
+#    define LOCAL "X.\n\
+(Must quote upper-case options, like \"-V\", unless SET PROC/PARSE=EXTEND.)"
+#  endif
+#  ifdef UNIX
+#    define LOCAL "X"
+#  endif
+#  ifdef DOS_OS2_W32
+#    define LOCAL "s$"
+#  endif
+#  if (defined(FLEXOS) || defined(NLM))
+#    define LOCAL "s"
+#  endif
+#  ifdef AMIGA
+#    define LOCAL "N"
+#  endif
+   /* Default for all other systems: */
+#  ifndef LOCAL
+#    define LOCAL ""
+#  endif
+
+#  ifndef NO_TIMESTAMP
+#    ifdef MORE
+#      define SFXOPT1 "DM"
+#    else
+#      define SFXOPT1 "D"
+#    endif
+#  else
+#    ifdef MORE
+#      define SFXOPT1 "M"
+#    else
+#      define SFXOPT1 ""
+#    endif
+#  endif
+
+int usage(__G__ error)   /* return PK-type error code */
+    __GDEF
+    int error;
+{
+    Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(UnzipSFXBanner),
+      UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL,
+      LoadFarStringSmall(VersionDate)));
+    Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(UnzipSFXOpts),
+      SFXOPT1, LOCAL));
+#ifdef BETA
+    Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(BetaVersion), "\n",
+      "SFX"));
+#endif
+
+    if (error)
+        return PK_PARAM;
+    else
+        return PK_COOL;     /* just wanted usage screen: no error */
+
+} /* end function usage() */
+
+
+
+
+
+#else /* !SFX */
+#  ifdef VMS
+#    define QUOT '\"'
+#    define QUOTS "\""
+#  else
+#    define QUOT ' '
+#    define QUOTS ""
+#  endif
+
+int usage(__G__ error)   /* return PK-type error code */
+    __GDEF
+    int error;
+{
+    int flag = (error? 1 : 0);
+
+
+/*---------------------------------------------------------------------------
+    Print either ZipInfo usage or UnZip usage, depending on incantation.
+    (Strings must be no longer than 512 bytes for Turbo C, apparently.)
+  ---------------------------------------------------------------------------*/
+
+    if (uO.zipinfo_mode) {
+
+#ifndef NO_ZIPINFO
+
+        Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine1),
+          ZI_MAJORVER, ZI_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL,
+          LoadFarStringSmall(VersionDate),
+          LoadFarStringSmall2(ZipInfoExample), QUOTS,QUOTS));
+        Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine2)));
+        Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine3),
+          LoadFarStringSmall(ZipInfoUsageLine4)));
+#ifdef VMS
+        Info(slide, flag, ((char *)slide, "\n\
+You must quote non-lowercase options and filespecs, unless SET PROC/PARSE=EXT.\
+\n"));
+#endif
+
+#endif /* !NO_ZIPINFO */
+
+    } else {   /* UnZip mode */
+
+        Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine1),
+          UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL,
+          LoadFarStringSmall(VersionDate)));
+#ifdef BETA
+        Info(slide, flag, ((char *)slide, LoadFarString(BetaVersion), "", ""));
+#endif
+
+        Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine2),
+          ZIPINFO_MODE_OPTION, LoadFarStringSmall(ZipInfoMode)));
+#ifdef VMS
+        if (!error)  /* maybe no command-line tail found; show extra help */
+            Info(slide, flag, ((char *)slide, LoadFarString(VMSusageLine2b)));
+#endif
+
+        Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine3),
+          LoadFarStringSmall(local1)));
+
+        Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine4),
+          LoadFarStringSmall(local2), LoadFarStringSmall2(local3)));
+
+        /* This is extra work for SMALL_MEM, but it will work since
+         * LoadFarStringSmall2 uses the same buffer.  Remember, this
+         * is a hack. */
+        Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine5),
+          LoadFarStringSmall(Example2), LoadFarStringSmall2(Example3),
+          LoadFarStringSmall2(Example3)));
+
+    } /* end if (uO.zipinfo_mode) */
+
+    if (error)
+        return PK_PARAM;
+    else
+        return PK_COOL;     /* just wanted usage screen: no error */
+
+} /* end function usage() */
+
+#endif /* ?SFX */
+
+
+
+
+#ifndef SFX
+
+/* Print extended help to stdout. */
+static void help_extended(__G)
+    __GDEF
+{
+    extent i;             /* counter for help array */
+
+    /* help array */
+    static ZCONST char *text[] = {
+  "",
+  "Extended Help for UnZip",
+  "",
+  "See the UnZip Manual for more detailed help",
+  "",
+  "",
+  "UnZip lists and extracts files in zip archives.  The default action is to",
+  "extract zipfile entries to the current directory, creating directories as",
+  "needed.  With appropriate options, UnZip lists the contents of archives",
+  "instead.",
+  "",
+  "Basic unzip command line:",
+  "  unzip [-Z] options archive[.zip] [file ...] [-x xfile ...] [-d exdir]",
+  "",
+  "Some examples:",
+  "  unzip -l foo.zip        - list files in short format in archive foo.zip",
+  "",
+  "  unzip -t foo            - test the files in archive foo",
+  "",
+  "  unzip -Z foo            - list files using more detailed zipinfo format",
+  "",
+  "  unzip foo               - unzip the contents of foo in current dir",
+  "",
+  "  unzip -a foo            - unzip foo and convert text files to local OS",
+  "",
+  "If unzip is run in zipinfo mode, a more detailed list of archive contents",
+  "is provided.  The -Z option sets zipinfo mode and changes the available",
+  "options.",
+  "",
+  "Basic zipinfo command line:",
+  "  zipinfo options archive[.zip] [file ...] [-x xfile ...]",
+  "  unzip -Z options archive[.zip] [file ...] [-x xfile ...]",
+  "",
+  "Below, Mac OS refers to Mac OS before Mac OS X.  Mac OS X is a Unix based",
+  "port and is referred to as Unix Apple.",
+  "",
+  "",
+  "unzip options:",
+  "  -Z   Switch to zipinfo mode.  Must be first option.",
+  "  -hh  Display extended help.",
+  "  -A   [OS/2, Unix DLL] Print extended help for DLL.",
+  "  -c   Extract files to stdout/screen.  As -p but include names.  Also,",
+  "         -a allowed and EBCDIC conversions done if needed.",
+  "  -f   Freshen by extracting only if older file on disk.",
+  "  -l   List files using short form.",
+  "  -p   Extract files to pipe (stdout).  Only file data is output and all",
+  "         files extracted in binary mode (as stored).",
+  "  -t   Test archive files.",
+  "  -T   Set timestamp on archive(s) to that of newest file.  Similar to",
+  "       zip -o but faster.",
+  "  -u   Update existing older files on disk as -f and extract new files.",
+  "  -v   Use verbose list format.  If given alone as unzip -v show version",
+  "         information.  Also can be added to other list commands for more",
+  "         verbose output.",
+  "  -z   Display only archive comment.",
+  "",
+  "unzip modifiers:",
+  "  -a   Convert text files to local OS format.  Convert line ends, EOF",
+  "         marker, and from or to EBCDIC character set as needed.",
+  "  -b   Treat all files as binary.  [Tandem] Force filecode 180 ('C').",
+  "         [VMS] Autoconvert binary files.  -bb forces convert of all files.",
+  "  -B   [UNIXBACKUP compile option enabled] Save a backup copy of each",
+  "         overwritten file in foo~ or foo~99999 format.",
+  "  -C   Use case-insensitive matching.",
+  "  -D   Skip restoration of timestamps for extracted directories.  On VMS this",
+  "         is on by default and -D essentially becames -DD.",
+  "  -DD  Skip restoration of timestamps for all entries.",
+  "  -E   [MacOS (not Unix Apple)]  Display contents of MacOS extra field during",
+  "         restore.",
+  "  -F   [Acorn] Suppress removal of NFS filetype extension.  [Non-Acorn if",
+  "         ACORN_FTYPE_NFS] Translate filetype and append to name.",
+  "  -i   [MacOS] Ignore filenames in MacOS extra field.  Instead, use name in",
+  "         standard header.",
+  "  -j   Junk paths and deposit all files in extraction directory.",
+  "  -J   [BeOS] Junk file attributes.  [MacOS] Ignore MacOS specific info.",
+  "  -K   [AtheOS, BeOS, Unix] Restore SUID/SGID/Tacky file attributes.",
+  "  -L   Convert to lowercase any names from uppercase only file system.",
+  "  -LL  Convert all files to lowercase.",
+  "  -M   Pipe all output through internal pager similar to Unix more(1).",
+  "  -n   Never overwrite existing files.  Skip extracting that file, no prompt.",
+  "  -N   [Amiga] Extract file comments as Amiga filenotes.",
+  "  -o   Overwrite existing files without prompting.  Useful with -f.  Use with",
+  "         care.",
+  "  -P p Use password p to decrypt files.  THIS IS INSECURE!  Some OS show",
+  "         command line to other users.",
+  "  -q   Perform operations quietly.  The more q (as in -qq) the quieter.",
+  "  -s   [OS/2, NT, MS-DOS] Convert spaces in filenames to underscores.",
+  "  -S   [VMS] Convert text files (-a, -aa) into Stream_LF format.",
+  "  -U   [UNICODE enabled] Show non-local characters as #Uxxxx or #Lxxxxxx ASCII",
+  "         text escapes where x is hex digit.  [Old] -U used to leave names",
+  "         uppercase if created on MS-DOS, VMS, etc.  See -L.",
+  "  -UU  [UNICODE enabled] Disable use of stored UTF-8 paths.  Note that UTF-8",
+  "         paths stored as native local paths are still processed as Unicode.",
+  "  -V   Retain VMS file version numbers.",
+  "  -W   [Only if WILD_STOP_AT_DIR] Modify pattern matching so ? and * do not",
+  "         match directory separator /, but ** does.  Allows matching at specific",
+  "         directory levels.",
+  "  -X   [VMS, Unix, OS/2, NT, Tandem] Restore UICs and ACL entries under VMS,",
+  "         or UIDs/GIDs under Unix, or ACLs under certain network-enabled",
+  "         versions of OS/2, or security ACLs under Windows NT.  Can require",
+  "         user privileges.",
+  "  -XX  [NT] Extract NT security ACLs after trying to enable additional",
+  "         system privileges.",
+  "  -Y   [VMS] Treat archived name endings of .nnn as VMS version numbers.",
+  "  -$   [MS-DOS, OS/2, NT] Restore volume label if extraction medium is",
+  "         removable.  -$$ allows fixed media (hard drives) to be labeled.",
+  "  -/ e [Acorn] Use e as extension list.",
+  "  -:   [All but Acorn, VM/CMS, MVS, Tandem] Allow extract archive members into",
+  "         locations outside of current extraction root folder.  This allows",
+  "         paths such as ../foo to be extracted above the current extraction",
+  "         directory, which can be a security problem.",
+  "  -^   [Unix] Allow control characters in names of extracted entries.  Usually",
+  "         this is not a good thing and should be avoided.",
+  "  -2   [VMS] Force unconditional conversion of names to ODS-compatible names.",
+  "         Default is to exploit destination file system, preserving cases and",
+  "         extended name characters on ODS5 and applying ODS2 filtering on ODS2.",
+  "",
+  "",
+  "Wildcards:",
+  "  Internally unzip supports the following wildcards:",
+  "    ?       (or %% or #, depending on OS) matches any single character",
+  "    *       matches any number of characters, including zero",
+  "    [list]  matches char in list (regex), can do range [ac-f], all but [!bf]",
+  "  If port supports [], must escape [ as [[]",
+  "  For shells that expand wildcards, escape (\\* or \"*\") so unzip can recurse.",
+  "",
+  "Include and Exclude:",
+  "  -i pattern pattern ...   include files that match a pattern",
+  "  -x pattern pattern ...   exclude files that match a pattern",
+  "  Patterns are paths with optional wildcards and match paths as stored in",
+  "  archive.  Exclude and include lists end at next option or end of line.",
+  "    unzip archive -x pattern pattern ...",
+  "",
+  "Multi-part (split) archives (archives created as a set of split files):",
+  "  Currently split archives are not readable by unzip.  A workaround is",
+  "  to use zip to convert the split archive to a single-file archive and",
+  "  use unzip on that.  See the manual page for Zip 3.0 or later.",
+  "",
+  "Streaming (piping into unzip):",
+  "  Currently unzip does not support streaming.  The funzip utility can be",
+  "  used to process the first entry in a stream.",
+  "    cat archive | funzip",
+  "",
+  "Testing archives:",
+  "  -t        test contents of archive",
+  "  This can be modified using -q for quieter operation, and -qq for even",
+  "  quieter operation.",
+  "",
+  "Unicode:",
+  "  If compiled with Unicode support, unzip automatically handles archives",
+  "  with Unicode entries.  Currently Unicode on Win32 systems is limited.",
+  "  Characters not in the current character set are shown as ASCII escapes",
+  "  in the form #Uxxxx where the Unicode character number fits in 16 bits,",
+  "  or #Lxxxxxx where it doesn't, where x is the ASCII character for a hex",
+  "  digit.",
+  "",
+  "",
+  "zipinfo options (these are used in zipinfo mode (unzip -Z ...)):",
+  "  -1  List names only, one per line.  No headers/trailers.  Good for scripts.",
+  "  -2  List names only as -1, but include headers, trailers, and comments.",
+  "  -s  List archive entries in short Unix ls -l format.  Default list format.",
+  "  -m  List in long Unix ls -l format.  As -s, but includes compression %.",
+  "  -l  List in long Unix ls -l format.  As -m, but compression in bytes.",
+  "  -v  List zipfile information in verbose, multi-page format.",
+  "  -h  List header line.  Includes archive name, actual size, total files.",
+  "  -M  Pipe all output through internal pager similar to Unix more(1) command.",
+  "  -t  List totals for files listed or for all files.  Includes uncompressed",
+  "        and compressed sizes, and compression factors.",
+  "  -T  Print file dates and times in a sortable decimal format (yymmdd.hhmmss)",
+  "        Default date and time format is a more human-readable version.",
+  "  -U  [UNICODE] If entry has a UTF-8 Unicode path, display any characters",
+  "        not in current character set as text #Uxxxx and #Lxxxxxx escapes",
+  "        representing the Unicode character number of the character in hex.",
+  "  -UU [UNICODE]  Disable use of any UTF-8 path information.",
+  "  -z  Include archive comment if any in listing.",
+  "",
+  "",
+  "funzip stream extractor:",
+  "  funzip extracts the first member in an archive to stdout.  Typically",
+  "  used to unzip the first member of a stream or pipe.  If a file argument",
+  "  is given, read from that file instead of stdin.",
+  "",
+  "funzip command line:",
+  "  funzip [-password] [input[.zip|.gz]]",
+  "",
+  "",
+  "unzipsfx self extractor:",
+  "  Self-extracting archives made with unzipsfx are no more (or less)",
+  "  portable across different operating systems than unzip executables.",
+  "  In general, a self-extracting archive made on a particular Unix system,",
+  "  for example, will only self-extract under the same flavor of Unix.",
+  "  Regular unzip may still be used to extract embedded archive however.",
+  "",
+  "unzipsfx command line:",
+  "  <unzipsfx+archive_filename>  [-options] [file(s) ... [-x xfile(s) ...]]",
+  "",
+  "unzipsfx options:",
+  "  -c, -p - Output to pipe.  (See above for unzip.)",
+  "  -f, -u - Freshen and Update, as for unzip.",
+  "  -t     - Test embedded archive.  (Can be used to list contents.)",
+  "  -z     - Print archive comment.  (See unzip above.)",
+  "",
+  "unzipsfx modifiers:",
+  "  Most unzip modifiers are supported.  These include",
+  "  -a     - Convert text files.",
+  "  -n     - Never overwrite.",
+  "  -o     - Overwrite without prompting.",
+  "  -q     - Quiet operation.",
+  "  -C     - Match names case-insensitively.",
+  "  -j     - Junk paths.",
+  "  -V     - Keep version numbers.",
+  "  -s     - Convert spaces to underscores.",
+  "  -$     - Restore volume label.",
+  "",
+  "If unzipsfx compiled with SFX_EXDIR defined, -d option also available:",
+  "  -d exd - Extract to directory exd.",
+  "By default, all files extracted to current directory.  This option",
+  "forces extraction to specified directory.",
+  "",
+  "See unzipsfx manual page for more information.",
+  ""
+    };
+
+    for (i = 0; i < sizeof(text)/sizeof(char *); i++)
+    {
+        Info(slide, 0, ((char *)slide, "%s\n", text[i]));
+    }
+} /* end function help_extended() */
+
+
+
+
+#ifndef _WIN32_WCE /* Win CE does not support environment variables */
+#if (!defined(MODERN) || defined(NO_STDLIB_H))
+/* Declare getenv() to be sure (might be missing in some environments) */
+extern char *getenv();
+#endif
+#endif
+
+/********************************/
+/* Function show_version_info() */
+/********************************/
+
+static void show_version_info(__G)
+    __GDEF
+{
+    if (uO.qflag > 3)                           /* "unzip -vqqqq" */
+        Info(slide, 0, ((char *)slide, "%d\n",
+          (UZ_MAJORVER*100 + UZ_MINORVER*10 + UZ_PATCHLEVEL)));
+    else {
+#ifndef _WIN32_WCE /* Win CE does not support environment variables */
+        char *envptr;
+#endif
+        int numopts = 0;
+
+        Info(slide, 0, ((char *)slide, LoadFarString(UnzipUsageLine1v),
+          UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL,
+          LoadFarStringSmall(VersionDate)));
+        Info(slide, 0, ((char *)slide,
+          LoadFarString(UnzipUsageLine2v)));
+        version(__G);
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptions)));
+#ifdef ACORN_FTYPE_NFS
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(AcornFtypeNFS)));
+        ++numopts;
+#endif
+#ifdef ASM_CRC
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(AsmCRC)));
+        ++numopts;
+#endif
+#ifdef ASM_INFLATECODES
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(AsmInflateCodes)));
+        ++numopts;
+#endif
+#ifdef CHECK_VERSIONS
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Check_Versions)));
+        ++numopts;
+#endif
+#ifdef COPYRIGHT_CLEAN
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Copyright_Clean)));
+        ++numopts;
+#endif
+#ifdef DEBUG
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(UDebug)));
+        ++numopts;
+#endif
+#ifdef DEBUG_TIME
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(DebugTime)));
+        ++numopts;
+#endif
+#ifdef DLL
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Dll)));
+        ++numopts;
+#endif
+#ifdef DOSWILD
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(DosWild)));
+        ++numopts;
+#endif
+#ifdef LZW_CLEAN
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(LZW_Clean)));
+        ++numopts;
+#endif
+#ifndef MORE
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(No_More)));
+        ++numopts;
+#endif
+#ifdef NO_ZIPINFO
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(No_ZipInfo)));
+        ++numopts;
+#endif
+#ifdef NTSD_EAS
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(NTSDExtAttrib)));
+        ++numopts;
+#endif
+#if defined(WIN32) && defined(NO_W32TIMES_IZFIX)
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(W32NoIZTimeFix)));
+        ++numopts;
+#endif
+#ifdef OLD_THEOS_EXTRA
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(OldTheosExtra)));
+        ++numopts;
+#endif
+#ifdef OS2_EAS
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(OS2ExtAttrib)));
+        ++numopts;
+#endif
+#ifdef QLZIP
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(SMSExFldOnUnix)));
+        ++numopts;
+#endif
+#ifdef REENTRANT
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Reentrant)));
+        ++numopts;
+#endif
+#ifdef REGARGS
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(RegArgs)));
+        ++numopts;
+#endif
+#ifdef RETURN_CODES
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Return_Codes)));
+        ++numopts;
+#endif
+#ifdef SET_DIR_ATTRIB
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(SetDirAttrib)));
+        ++numopts;
+#endif
+#ifdef SYMLINKS
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(SymLinkSupport)));
+        ++numopts;
+#endif
+#ifdef TIMESTAMP
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(TimeStamp)));
+        ++numopts;
+#endif
+#ifdef UNIXBACKUP
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(UnixBackup)));
+        ++numopts;
+#endif
+#ifdef USE_EF_UT_TIME
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Use_EF_UT_time)));
+        ++numopts;
+#endif
+#ifndef COPYRIGHT_CLEAN
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Use_Smith_Code)));
+        ++numopts;
+#endif
+#ifndef LZW_CLEAN
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Use_Unshrink)));
+        ++numopts;
+#endif
+#ifdef USE_DEFLATE64
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Use_Deflate64)));
+        ++numopts;
+#endif
+#ifdef UNICODE_SUPPORT
+# ifdef UTF8_MAYBE_NATIVE
+        sprintf((char *)(slide+256), LoadFarStringSmall(Use_Unicode),
+          LoadFarStringSmall2(G.native_is_utf8 ? SysChUTF8 : SysChOther));
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          (char *)(slide+256)));
+# else
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Use_Unicode)));
+# endif
+        ++numopts;
+#endif
+#ifdef _MBCS
+        sprintf((char *)(slide+256), LoadFarStringSmall(Have_MBCS_Support),
+          (unsigned int)MB_CUR_MAX);
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          (char *)(slide+256)));
+        ++numopts;
+#endif
+#ifdef MULT_VOLUME
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Use_MultiVol)));
+        ++numopts;
+#endif
+#ifdef LARGE_FILE_SUPPORT
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Use_LFS)));
+        ++numopts;
+#endif
+#ifdef ZIP64_SUPPORT
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Use_Zip64)));
+        ++numopts;
+#endif
+#if (defined(__DJGPP__) && (__DJGPP__ >= 2))
+#  ifdef USE_DJGPP_ENV
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Use_DJGPP_Env)));
+        ++numopts;
+#  endif
+#  ifdef USE_DJGPP_GLOB
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Use_DJGPP_Glob)));
+        ++numopts;
+#  endif
+#endif /* __DJGPP__ && (__DJGPP__ >= 2) */
+#ifdef USE_VFAT
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(Use_VFAT_support)));
+        ++numopts;
+#endif
+#ifdef USE_ZLIB
+        sprintf((char *)(slide+256), LoadFarStringSmall(UseZlib),
+          ZLIB_VERSION, zlibVersion());
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          (char *)(slide+256)));
+        ++numopts;
+#endif
+#ifdef USE_BZIP2
+        sprintf((char *)(slide+256), LoadFarStringSmall(UseBZip2),
+          BZ2_bzlibVersion());
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          (char *)(slide+256)));
+        ++numopts;
+#endif
+#ifdef VMS_TEXT_CONV
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(VmsTextConv)));
+        ++numopts;
+#endif
+#ifdef VMSCLI
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(VmsCLI)));
+        ++numopts;
+#endif
+#ifdef VMSWILD
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(VmsWild)));
+        ++numopts;
+#endif
+#ifdef WILD_STOP_AT_DIR
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(WildStopAtDir)));
+        ++numopts;
+#endif
+#if CRYPT
+# ifdef PASSWD_FROM_STDIN
+        Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat),
+          LoadFarStringSmall(PasswdStdin)));
+# endif
+        Info(slide, 0, ((char *)slide, LoadFarString(Decryption),
+          CR_MAJORVER, CR_MINORVER, CR_BETA_VER,
+          LoadFarStringSmall(CryptDate)));
+        ++numopts;
+#endif /* CRYPT */
+        if (numopts == 0)
+            Info(slide, 0, ((char *)slide,
+              LoadFarString(CompileOptFormat),
+              LoadFarStringSmall(None)));
+
+#ifndef _WIN32_WCE /* Win CE does not support environment variables */
+        Info(slide, 0, ((char *)slide, LoadFarString(EnvOptions)));
+        envptr = getenv(LoadFarStringSmall(EnvUnZip));
+        Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
+          LoadFarStringSmall(EnvUnZip),
+          (envptr == (char *)NULL || *envptr == 0)?
+          LoadFarStringSmall2(None) : envptr));
+        envptr = getenv(LoadFarStringSmall(EnvUnZip2));
+        Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
+          LoadFarStringSmall(EnvUnZip2),
+          (envptr == (char *)NULL || *envptr == 0)?
+          LoadFarStringSmall2(None) : envptr));
+        envptr = getenv(LoadFarStringSmall(EnvZipInfo));
+        Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
+          LoadFarStringSmall(EnvZipInfo),
+          (envptr == (char *)NULL || *envptr == 0)?
+          LoadFarStringSmall2(None) : envptr));
+        envptr = getenv(LoadFarStringSmall(EnvZipInfo2));
+        Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
+          LoadFarStringSmall(EnvZipInfo2),
+          (envptr == (char *)NULL || *envptr == 0)?
+          LoadFarStringSmall2(None) : envptr));
+#ifndef __RSXNT__
+#ifdef __EMX__
+        envptr = getenv(LoadFarStringSmall(EnvEMX));
+        Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
+          LoadFarStringSmall(EnvEMX),
+          (envptr == (char *)NULL || *envptr == 0)?
+          LoadFarStringSmall2(None) : envptr));
+        envptr = getenv(LoadFarStringSmall(EnvEMXOPT));
+        Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
+          LoadFarStringSmall(EnvEMXOPT),
+          (envptr == (char *)NULL || *envptr == 0)?
+          LoadFarStringSmall2(None) : envptr));
+#endif /* __EMX__ */
+#if (defined(__GO32__) && (!defined(__DJGPP__) || (__DJGPP__ < 2)))
+        envptr = getenv(LoadFarStringSmall(EnvGO32));
+        Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
+          LoadFarStringSmall(EnvGO32),
+          (envptr == (char *)NULL || *envptr == 0)?
+          LoadFarStringSmall2(None) : envptr));
+        envptr = getenv(LoadFarStringSmall(EnvGO32TMP));
+        Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
+          LoadFarStringSmall(EnvGO32TMP),
+          (envptr == (char *)NULL || *envptr == 0)?
+          LoadFarStringSmall2(None) : envptr));
+#endif /* __GO32__ && !(__DJGPP__ >= 2) */
+#endif /* !__RSXNT__ */
+#ifdef RISCOS
+        envptr = getenv(LoadFarStringSmall(EnvUnZipExts));
+        Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat),
+          LoadFarStringSmall(EnvUnZipExts),
+          (envptr == (char *)NULL || *envptr == 0)?
+          LoadFarStringSmall2(None) : envptr));
+#endif /* RISCOS */
+#endif /* !_WIN32_WCE */
+    }
+} /* end function show_version() */
+
+#endif /* !SFX */
+#endif /* !WINDLL */
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unzpriv.h
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unzpriv.h	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/unzpriv.h	(revision 5)
@@ -0,0 +1,3132 @@
+/*
+  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2009-Jan-02 or later
+  (the contents of which are also included in unzip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*---------------------------------------------------------------------------
+
+  unzpriv.h
+
+  This header file contains private (internal) macros, typedefs, prototypes
+  and global-variable declarations used by all of the UnZip source files.
+  In a prior life it was part of the main unzip.h header, but now it is only
+  included by that header if UNZIP_INTERNAL is defined.
+
+  ---------------------------------------------------------------------------*/
+
+
+
+#ifndef __unzpriv_h   /* prevent multiple inclusions */
+#define __unzpriv_h
+
+/* First thing: Signal all following code that we compile UnZip utilities! */
+#ifndef UNZIP
+#  define UNZIP
+#endif
+
+/* GRR 960204:  MORE defined here in preparation for removal altogether */
+#ifndef MORE
+# ifndef RISCOS
+#  define MORE
+# endif
+#endif
+
+/* fUnZip should never need to be reentrant */
+#ifdef FUNZIP
+#  ifdef REENTRANT
+#    undef REENTRANT
+#  endif
+#  ifdef DLL
+#    undef DLL
+#  endif
+#  ifdef SFX            /* fUnZip is NOT the sfx stub! */
+#    undef SFX
+#  endif
+#  ifdef USE_BZIP2      /* fUnZip does not support bzip2 decompression */
+#    undef USE_BZIP2
+#  endif
+#endif
+
+#if (defined(USE_ZLIB) && !defined(HAVE_ZL_INFLAT64) && !defined(NO_DEFLATE64))
+   /* zlib does not (yet?) provide Deflate64(tm) support */
+#  define NO_DEFLATE64
+#endif
+
+#ifdef NO_DEFLATE64
+   /* disable support for Deflate64(tm) */
+#  ifdef USE_DEFLATE64
+#    undef USE_DEFLATE64
+#  endif
+#else
+   /* enable Deflate64(tm) support unless compiling for SFX stub */
+#  if (!defined(USE_DEFLATE64) && !defined(SFX))
+#    define USE_DEFLATE64
+#  endif
+#endif
+
+/* disable bzip2 support for SFX stub, unless explicitly requested */
+#if (defined(SFX) && !defined(BZIP2_SFX) && defined(USE_BZIP2))
+#  undef USE_BZIP2
+#endif
+
+#if (defined(NO_VMS_TEXT_CONV) || defined(VMS))
+#  ifdef VMS_TEXT_CONV
+#    undef VMS_TEXT_CONV
+#  endif
+#else
+#  if (!defined(VMS_TEXT_CONV) && !defined(SFX))
+#    define VMS_TEXT_CONV
+#  endif
+#endif
+
+/* Enable -B option per default on specific systems, to allow backing up
+ * files that would be overwritten.
+ * (This list of systems must be kept in sync with the list of systems
+ * that add the B_flag to the UzpOpts structure, see unzip.h.)
+ */
+#if (!defined(NO_UNIXBACKUP) && !defined(UNIXBACKUP))
+#  if defined(UNIX) || defined(OS2) || defined(WIN32)
+#    define UNIXBACKUP
+#  endif
+#endif
+
+#if (defined(DLL) && !defined(REENTRANT))
+#  define REENTRANT
+#endif
+
+#if (!defined(DYNAMIC_CRC_TABLE) && !defined(FUNZIP))
+#  define DYNAMIC_CRC_TABLE
+#endif
+
+#if (defined(DYNAMIC_CRC_TABLE) && !defined(REENTRANT))
+#  ifndef DYNALLOC_CRCTAB
+#    define DYNALLOC_CRCTAB
+#  endif
+#endif
+
+/*---------------------------------------------------------------------------
+    OS-dependent configuration for UnZip internals
+  ---------------------------------------------------------------------------*/
+
+/* Some compiler distributions for Win32/i386 systems try to emulate
+ * a Unix (POSIX-compatible) environment.
+ */
+#if (defined(WIN32) && defined(UNIX))
+   /* UnZip does not support merging both ports in a single executable. */
+#  if (defined(FORCE_WIN32_OVER_UNIX) && defined(FORCE_UNIX_OVER_WIN32))
+     /* conflicting choice requests -> we prefer the Win32 environment */
+#    undef FORCE_UNIX_OVER_WIN32
+#  endif
+#  ifdef FORCE_WIN32_OVER_UNIX
+     /* native Win32 support was explicitly requested... */
+#    undef UNIX
+#  else
+     /* use the POSIX (Unix) emulation features by default... */
+#    undef WIN32
+#  endif
+#endif
+
+/* bad or (occasionally?) missing stddef.h: */
+#if (defined(M_XENIX) || defined(DNIX))
+#  define NO_STDDEF_H
+#endif
+
+#if (defined(M_XENIX) && !defined(M_UNIX))   /* SCO Xenix only, not SCO Unix */
+#  define SCO_XENIX
+#  define NO_LIMITS_H        /* no limits.h, but MODERN defined */
+#  define NO_UID_GID         /* no uid_t/gid_t */
+#  define size_t int
+#endif
+
+#ifdef realix   /* Modcomp Real/IX, real-time SysV.3 variant */
+#  define SYSV
+#  define NO_UID_GID         /* no uid_t/gid_t */
+#endif
+
+#if (defined(_AIX) && !defined(_ALL_SOURCE))
+#  define _ALL_SOURCE
+#endif
+
+#if defined(apollo)          /* defines __STDC__ */
+#    define NO_STDLIB_H
+#endif
+
+#ifdef DNIX
+#  define SYSV
+#  define SHORT_NAMES         /* 14-char limitation on path components */
+/* #  define FILENAME_MAX  14 */
+#  define FILENAME_MAX  NAME_MAX    /* GRR:  experiment */
+#endif
+
+#if (defined(SYSTEM_FIVE) || defined(__SYSTEM_FIVE))
+#  ifndef SYSV
+#    define SYSV
+#  endif
+#endif /* SYSTEM_FIVE || __SYSTEM_FIVE */
+#if (defined(M_SYSV) || defined(M_SYS5))
+#  ifndef SYSV
+#    define SYSV
+#  endif
+#endif /* M_SYSV || M_SYS5 */
+/* __SVR4 and __svr4__ catch Solaris on at least some combos of compiler+OS */
+#if (defined(__SVR4) || defined(__svr4__) || defined(sgi) || defined(__hpux))
+#  ifndef SYSV
+#    define SYSV
+#  endif
+#endif /* __SVR4 || __svr4__ || sgi || __hpux */
+#if (defined(LINUX) || defined(__QNX__))
+#  ifndef SYSV
+#    define SYSV
+#  endif
+#endif /* LINUX || __QNX__ */
+
+#if (defined(ultrix) || defined(__ultrix) || defined(bsd4_2))
+#  if (!defined(BSD) && !defined(SYSV))
+#    define BSD
+#  endif
+#endif /* ultrix || __ultrix || bsd4_2 */
+#if (defined(sun) || defined(pyr) || defined(CONVEX))
+#  if (!defined(BSD) && !defined(SYSV))
+#    define BSD
+#  endif
+#endif /* sun || pyr || CONVEX */
+
+#ifdef pyr  /* Pyramid:  has BSD and AT&T "universes" */
+#  ifdef BSD
+#    define pyr_bsd
+#    define USE_STRINGS_H  /* instead of more common string.h */
+#    define ZMEM           /* ZMEM now uses bcopy/bzero: not in AT&T universe */
+#  endif                   /* (AT&T memcpy claimed to be very slow, though) */
+#  define DECLARE_ERRNO
+#endif /* pyr */
+
+/* stat() bug for Borland, VAX C RTL, and Atari ST MiNT on TOS
+ * filesystems:  returns 0 for wildcards!  (returns 0xffffffff on Minix
+ * filesystem or `U:' drive under Atari MiNT.)  Watcom C was previously
+ * included on this list; it would be good to know what version the problem
+ * was fixed at, if it did exist.  */
+#if (defined(__TURBOC__) && !defined(WIN32))
+/*#  define WILD_STAT_BUG*/
+#endif
+#if (defined(VMS) || defined(__MINT__))
+#  define WILD_STAT_BUG
+#endif
+
+/*---------------------------------------------------------------------------
+    OS-dependent includes
+  ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+    API (DLL) section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef DLL
+#  define MAIN   UZ_EXP UzpMain   /* was UzpUnzip */
+#  ifdef OS2DLL
+#    undef Info
+#    define REDIRECTC(c)             varputchar(__G__ c)
+#    define REDIRECTPRINT(buf,size)  varmessage(__G__ buf, size)
+#    define FINISH_REDIRECT()        finish_REXX_redirect(__G)
+#  else
+#    define REDIRECTC(c)
+#    define REDIRECTPRINT(buf,size)  0
+#    define FINISH_REDIRECT()        close_redirect(__G)
+#  endif
+#endif
+
+/*---------------------------------------------------------------------------
+    Acorn RISCOS section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef RISCOS
+#  include "acorn/riscos.h"
+#endif
+
+/*---------------------------------------------------------------------------
+    Amiga section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef AMIGA
+#  include "amiga/amiga.h"
+#endif
+
+/*---------------------------------------------------------------------------
+    AOS/VS section (somewhat similar to Unix, apparently):
+  ---------------------------------------------------------------------------*/
+
+#ifdef AOS_VS
+#  ifdef __FILEIO_C
+#    include "aosvs/aosvs.h"
+#  endif
+#endif
+
+/*---------------------------------------------------------------------------
+    Atari ST section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef ATARI
+#  include <time.h>
+#  include <stat.h>
+#  include <fcntl.h>
+#  include <limits.h>
+#  define SYMLINKS
+#  define EXE_EXTENSION  ".tos"
+#  ifndef DATE_FORMAT
+#    define DATE_FORMAT  DF_DMY
+#  endif
+#  define DIR_END        '/'
+#  define INT_SPRINTF
+#  define timezone      _timezone
+#  define lenEOL        2
+#  define PutNativeEOL  {*q++ = native(CR); *q++ = native(LF);}
+#  undef SHORT_NAMES
+#  if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP))
+#    define TIMESTAMP
+#  endif
+#endif
+
+/*---------------------------------------------------------------------------
+    AtheOS section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef __ATHEOS__
+#  include "atheos/athcfg.h"
+#endif
+
+/*---------------------------------------------------------------------------
+    BeOS section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef __BEOS__
+#  include "beos/beocfg.h"
+#endif
+
+/*---------------------------------------------------------------------------
+    Human68k/X680x0 section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef __human68k__
+   /* DO NOT DEFINE DOS_OS2 HERE!  If Human68k is so much */
+   /*  like MS-DOS and/or OS/2, create DOS_H68_OS2 macro. */
+#  if (!defined(_MBCS) && !defined(NO_MBCS))
+     /* enable MBCS support by default for this system */
+#    define _MBCS
+#  endif
+#  if (defined(_MBCS) && defined(NO_MBCS))
+     /* disable MBCS support when explicitely requested */
+#    undef _MBCS
+#  endif
+#  include <time.h>
+#  include <fcntl.h>
+#  include <io.h>
+#  include <conio.h>
+#  include <sys/stat.h>
+#  ifdef HAVE_MBSTRING_H
+#    include <mbstring.h>
+#  endif
+#  ifdef HAVE_MBCTYPE_H
+#    include <mbctype.h>
+#  else
+#    ifndef _ismbblead
+#      define _ismbblead(c) (0x80 <= (c) && ((c) < 0xa0 || 0xe0 <= (c)))
+#    endif
+#  endif
+#  ifndef DATE_FORMAT
+#    define DATE_FORMAT DF_YMD   /* Japanese standard */
+#  endif
+#  define lenEOL        1
+#  define PutNativeEOL  *q++ = native(LF);
+#  define INT_SPRINTF
+#  define SYMLINKS
+#  ifdef SFX
+#    define MAIN main_sfx
+#  endif
+#endif
+
+/*---------------------------------------------------------------------------
+    Mac section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef MACOS
+#  include "maccfg.h"
+#endif /* MACOS */
+
+/*---------------------------------------------------------------------------
+    MS-DOS, OS/2, FLEXOS section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef WINDLL
+#  ifdef MORE
+#    undef MORE
+#  endif
+#  ifdef OS2_EAS
+#    undef OS2_EAS
+#  endif
+#endif
+
+#if (defined(_MSC_VER) || (defined(M_I86) && !defined(__WATCOMC__)))
+#  ifndef MSC
+#    define MSC               /* This should work for older MSC, too!  */
+#  endif
+#endif
+
+#if (defined(MSDOS) || defined(OS2) || defined(FLEXOS))
+#  include <sys/types.h>      /* off_t, time_t, dev_t, ... */
+#  include <sys/stat.h>
+#  include <io.h>             /* lseek(), open(), setftime(), dup(), creat() */
+#  include <time.h>           /* localtime() */
+#  include <fcntl.h>          /* O_BINARY for open() w/o CR/LF translation */
+
+#  ifdef OS2                  /* defined for all OS/2 compilers */
+#    include "os2/os2cfg.h"
+#  else
+#    ifdef FLEXOS
+#      include "flexos/flxcfg.h"
+#    else
+#      include "msdos/doscfg.h"
+#    endif
+#  endif
+
+#  if (defined(_MSC_VER) && (_MSC_VER == 700) && !defined(GRR))
+    /*
+     * ARGH.  MSC 7.0 libraries think times are based on 1899 Dec 31 00:00, not
+     *  1970 Jan 1 00:00.  So we have to diddle time_t's appropriately:  add or
+     *  subtract 70 years' worth of seconds; i.e., number of days times 86400;
+     *  i.e., (70*365 regular days + 17 leap days + 1 1899 day) * 86400 ==
+     *  (25550 + 17 + 1) * 86400 == 2209075200 seconds.  We know time_t is an
+     *  unsigned long (ulg) on the only system with this bug.
+     */
+#    define TIMET_TO_NATIVE(x)  (x) += (ulg)2209075200L;
+#    define NATIVE_TO_TIMET(x)  (x) -= (ulg)2209075200L;
+#  endif
+#  if (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0450))
+#    define timezone      _timezone
+#  endif
+#  if (defined(__GO32__) || defined(FLEXOS))
+#    define DIR_END       '/'
+#  else
+#    define DIR_END       '\\'  /* OS uses '\\' as directory separator */
+#    define DIR_END2      '/'   /* also check for '/' (RTL may convert) */
+#  endif
+#  ifdef DATE_FORMAT
+#    undef DATE_FORMAT
+#  endif
+#  define DATE_FORMAT     dateformat()
+#  define lenEOL          2
+#  define PutNativeEOL    {*q++ = native(CR); *q++ = native(LF);}
+#  if (!defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME))
+#    define USE_EF_UT_TIME
+#  endif
+#endif /* MSDOS || OS2 || FLEXOS */
+
+/*---------------------------------------------------------------------------
+    MTS section (piggybacks UNIX, I think):
+  ---------------------------------------------------------------------------*/
+
+#ifdef MTS
+#  include <sys/types.h>      /* off_t, time_t, dev_t, ... */
+#  include <sys/stat.h>
+#  include <sys/file.h>       /* MTS uses this instead of fcntl.h */
+#  include <timeb.h>
+#  include <time.h>
+#  include <unix.h>           /* some important non-ANSI routines */
+#  define mkdir(s,n) (-1)     /* no "make directory" capability */
+#  define EBCDIC              /* set EBCDIC conversion on */
+#  define NO_STRNICMP         /* unzip's is as good the one in MTS */
+#  define USE_FWRITE
+#  define close_outfile()  fclose(G.outfile)   /* can't set time on files */
+#  define umask(n)            /* don't have umask() on MTS */
+#  define FOPWT         "w"   /* open file for writing in TEXT mode */
+#  ifndef DATE_FORMAT
+#    define DATE_FORMAT DF_MDY
+#  endif
+#  define lenEOL        1
+#  define PutNativeEOL  *q++ = native(LF);
+#endif /* MTS */
+
+ /*---------------------------------------------------------------------------
+    Novell Netware NLM section
+  ---------------------------------------------------------------------------*/
+
+#ifdef NLM
+#  include "netware/nlmcfg.h"
+#endif
+
+ /*---------------------------------------------------------------------------
+    QDOS section
+  ---------------------------------------------------------------------------*/
+
+#ifdef QDOS
+#  define DIRENT
+#  include <fcntl.h>
+#  include <unistd.h>
+#  include <sys/stat.h>
+#  include <time.h>
+#  include "qdos/izqdos.h"
+#  ifndef DATE_FORMAT
+#    define DATE_FORMAT DF_MDY
+#  endif
+#  define lenEOL        1
+#  define PutNativeEOL  *q++ = native(LF);
+#  define DIR_END       '_'
+#  define RETURN        QReturn
+#  undef PATH_MAX
+#  define PATH_MAX      36
+#  if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP))
+#    define TIMESTAMP
+#  endif
+#  define SCREENSIZE(ttrows, ttcols)  screensize(ttrows, ttcols)
+#  define SCREENWIDTH 80
+#endif
+
+/*---------------------------------------------------------------------------
+    Tandem NSK section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef TANDEM
+#  include "tandem.h"
+#  include <fcntl.h>
+#  ifndef __INT32
+     /* We are compiling with non-WIDE memory model, int = 16 bits */
+#    ifndef INT_16BIT
+#      define INT_16BIT   /* report "int" size is 16-bit to inflate setup */
+#    endif
+#    ifdef USE_DEFLATE64
+       /* Following required for 64k WSIZE of Deflate64 support */
+#      define MED_MEM     /* else OUTBUFSIZ is 64K and fails in do_string */
+#      define INBUFSIZ  8192  /* but larger buffer for real OSes */
+#    endif
+#  endif
+   /* use a single LF delimiter so that writes to 101 text files work */
+#  define PutNativeEOL  *q++ = native(LF);
+#  define lenEOL        1
+#  ifndef DATE_FORMAT
+#    define DATE_FORMAT  DF_DMY
+#  endif
+#  define SCREENLINES   25
+   /* USE_EF_UT_TIME is set in tandem.h */
+#  define RESTORE_UIDGID
+#  define NO_STRNICMP
+#endif
+
+/*---------------------------------------------------------------------------
+    THEOS section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef THEOS
+#  include "theos/thscfg.h"
+#endif
+
+/*---------------------------------------------------------------------------
+    TOPS-20 section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef TOPS20
+#  include <sys/types.h>        /* off_t, time_t, dev_t, ... */
+#  include <sys/stat.h>
+#  include <sys/param.h>
+#  include <sys/time.h>
+#  include <sys/timeb.h>
+#  include <sys/file.h>
+#  include <timex.h>
+#  include <monsym.h>           /* get amazing monsym() macro */
+   extern int open(), close(), read();
+   extern int stat(), unlink(), jsys(), fcntl();
+   extern long lseek(), dup(), creat();
+#  define strchr    index       /* GRR: necessary? */
+#  define strrchr   rindex
+#  define REALLY_SHORT_SYMS
+#  define NO_MKDIR
+#  ifndef HAVE_STRNICMP
+#    define NO_STRNICMP           /* probably not provided by TOPS20 C RTL  */
+#  endif
+#  define DIR_BEG       '<'
+#  define DIR_END       '>'
+#  define DIR_EXT       ".directory"
+#  ifndef DATE_FORMAT
+#    define DATE_FORMAT DF_MDY
+#  endif
+#  define EXE_EXTENSION ".exe"  /* just a guess... */
+#endif /* TOPS20 */
+
+/*---------------------------------------------------------------------------
+    Unix section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef UNIX
+#  include "unix/unxcfg.h"
+#endif /* UNIX */
+
+/*---------------------------------------------------------------------------
+    VM/CMS and MVS section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef CMS_MVS
+#  include "vmmvs.h"
+#  define CLOSE_INFILE()  close_infile(__G)
+#endif
+
+/*---------------------------------------------------------------------------
+    VMS section:
+  ---------------------------------------------------------------------------*/
+
+#ifdef VMS
+#  include "vms/vmscfg.h"
+#endif /* VMS */
+
+/*---------------------------------------------------------------------------
+    Win32 (Windows 95/NT) section:
+  ---------------------------------------------------------------------------*/
+
+#if (defined(WIN32) && !defined(POCKET_UNZIP) && !defined(_WIN32_WCE))
+#  include "win32/w32cfg.h"
+#endif
+
+/*---------------------------------------------------------------------------
+    Win32 Windows CE section (also POCKET_UNZIP)
+  ---------------------------------------------------------------------------*/
+
+#if (defined(_WIN32_WCE) || defined(POCKET_UNZIP))
+#  include "wince/wcecfg.h"
+#endif
+
+
+
+/* ----------------------------------------------------------------------------
+   MUST BE AFTER LARGE FILE INCLUDES
+   ---------------------------------------------------------------------------- */
+/* This stuff calls in types and messes up large file includes.  It needs to
+   go after large file defines in local includes.
+   I am guessing that moving them here probably broke some ports, but hey.
+   10/31/2004 EG */
+/* ----------------------------------------------------------------------------
+   Common includes
+   ---------------------------------------------------------------------------- */
+
+/* Some ports apply specific adjustments which must be in effect before
+   reading the "standard" include headers.
+ */
+
+#ifdef EFT
+#  define Z_OFF_T off_t  /* Amdahl UTS nonsense ("extended file types") */
+#else
+#if (defined(UNIX) && defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64))
+#  define Z_OFF_T off_t /* 64bit offsets to support 2GB < zipfile size < 4GB */
+#else
+#  define Z_OFF_T long
+#endif
+#endif
+
+#ifndef ZOFF_T_DEFINED
+   typedef Z_OFF_T zoff_t;
+#  define ZOFF_T_DEFINED
+#endif
+#ifndef Z_STAT_DEFINED
+   typedef struct stat z_stat;
+#  define Z_STAT_DEFINED
+#endif
+
+#ifndef MINIX            /* Minix needs it after all the other includes (?) */
+#  include <stdio.h>
+#endif
+
+#include <ctype.h>       /* skip for VMS, to use tolower() function? */
+#include <errno.h>       /* used in mapname() */
+#ifdef USE_STRINGS_H
+#  include <strings.h>   /* strcpy, strcmp, memcpy, index/rindex, etc. */
+#else
+#  include <string.h>    /* strcpy, strcmp, memcpy, strchr/strrchr, etc. */
+#endif
+#if (defined(MODERN) && !defined(NO_LIMITS_H))
+#  include <limits.h>    /* MAX/MIN constant symbols for system types... */
+#endif
+
+/* this include must be down here for SysV.4, for some reason... */
+#include <signal.h>      /* used in unzip.c, fileio.c */
+
+
+#ifdef MODERN
+#  ifndef NO_STDDEF_H
+#    include <stddef.h>
+#  endif
+#  ifndef NO_STDLIB_H
+#    include <stdlib.h>  /* standard library prototypes, malloc(), etc. */
+#  endif
+   typedef size_t extent;
+#else /* !MODERN */
+#  ifndef AOS_VS         /* mostly modern? */
+     Z_OFF_T lseek();
+#    ifdef VAXC          /* not fully modern, but has stdlib.h and void */
+#      include <stdlib.h>
+#    else
+       char *malloc();
+#    endif /* ?VAXC */
+#  endif /* !AOS_VS */
+   typedef unsigned int extent;
+#endif /* ?MODERN */
+
+
+
+
+/*************/
+/*  Defines  */
+/*************/
+
+#define UNZIP_BZ2VERS   46
+#ifdef ZIP64_SUPPORT
+# ifdef USE_BZIP2
+#  define UNZIP_VERSION   UNZIP_BZ2VERS
+# else
+#  define UNZIP_VERSION   45
+# endif
+#else
+#ifdef USE_DEFLATE64
+#  define UNZIP_VERSION   21   /* compatible with PKUNZIP 4.0 */
+#else
+#  define UNZIP_VERSION   20   /* compatible with PKUNZIP 2.0 */
+#endif
+#endif
+#define VMS_UNZIP_VERSION 42   /* if OS-needed-to-extract is VMS:  can do */
+
+#if (defined(MSDOS) || defined(OS2))
+#  define DOS_OS2
+#endif
+
+#if (defined(OS2) || defined(WIN32))
+#  define OS2_W32
+#endif
+
+#if (defined(DOS_OS2) || defined(WIN32))
+#  define DOS_OS2_W32
+#  define DOS_W32_OS2          /* historical:  don't use */
+#endif
+
+#if (defined(DOS_OS2_W32) || defined(__human68k__))
+#  define DOS_H68_OS2_W32
+#endif
+
+#if (defined(DOS_OS2) || defined(FLEXOS))
+#  define DOS_FLX_OS2
+#endif
+
+#if (defined(DOS_OS2_W32) || defined(FLEXOS))
+#  define DOS_FLX_OS2_W32
+#endif
+
+#if (defined(DOS_H68_OS2_W32) || defined(FLEXOS))
+#  define DOS_FLX_H68_OS2_W32
+#endif
+
+#if (defined(DOS_FLX_OS2) || defined(NLM))
+#  define DOS_FLX_NLM_OS2
+#endif
+
+#if (defined(DOS_FLX_OS2_W32) || defined(NLM))
+#  define DOS_FLX_NLM_OS2_W32
+#endif
+
+#if (defined(DOS_FLX_H68_OS2_W32) || defined(NLM))
+#  define DOS_FLX_H68_NLM_OS2_W32
+#endif
+
+#if (defined(TOPS20) || defined(VMS))
+#  define T20_VMS
+#endif
+
+#if (defined(MSDOS) || defined(T20_VMS))
+#  define DOS_T20_VMS
+#endif
+
+#if (defined(__ATHEOS__) || defined(__BEOS__))
+#  define ATH_BEO
+#endif
+
+#if (defined(ATH_BEO) || defined(UNIX))
+#  define ATH_BEO_UNX
+#endif
+
+#if (defined(ATH_BEO_UNX) || defined(THEOS))
+#  define ATH_BEO_THS_UNX
+#endif
+
+/* clean up with a few defaults */
+#ifndef DIR_END
+#  define DIR_END       '/'     /* last char before program name or filename */
+#endif
+#ifndef DATE_FORMAT
+# ifdef DATEFMT_ISO_DEFAULT
+#  define DATE_FORMAT   DF_YMD  /* defaults to invariant ISO-style */
+# else
+#  define DATE_FORMAT   DF_MDY  /* defaults to US convention */
+# endif
+#endif
+#ifndef DATE_SEPCHAR
+#  define DATE_SEPCHAR  '-'
+#endif
+#ifndef CLOSE_INFILE
+#  define CLOSE_INFILE()  close(G.zipfd)
+#endif
+#ifndef RETURN
+#  define RETURN        return  /* only used in main() */
+#endif
+#ifndef EXIT
+#  define EXIT          exit
+#endif
+#ifndef USAGE
+#  define USAGE(ret)    usage(__G__ (ret))    /* used in unzip.c, zipinfo.c */
+#endif
+#ifndef TIMET_TO_NATIVE         /* everybody but MSC 7.0 and Macintosh */
+#  define TIMET_TO_NATIVE(x)
+#  define NATIVE_TO_TIMET(x)
+#endif
+#ifndef STRNICMP
+#  ifdef NO_STRNICMP
+#    define STRNICMP zstrnicmp
+#  else
+#    define STRNICMP strnicmp
+#  endif
+#endif
+
+
+#if (defined(DOS_FLX_NLM_OS2_W32) || defined(ATH_BEO_UNX) || defined(RISCOS))
+#  ifndef HAVE_UNLINK
+#    define HAVE_UNLINK
+#  endif
+#endif
+#if (defined(AOS_VS) || defined(ATARI)) /* GRR: others? */
+#  ifndef HAVE_UNLINK
+#    define HAVE_UNLINK
+#  endif
+#endif
+
+/* OS-specific exceptions to the "ANSI <--> INT_SPRINTF" rule */
+
+#if (!defined(PCHAR_SPRINTF) && !defined(INT_SPRINTF))
+#  if (defined(SYSV) || defined(CONVEX) || defined(NeXT) || defined(BSD4_4))
+#    define INT_SPRINTF      /* sprintf() returns int:  SysVish/Posix */
+#  endif
+#  if (defined(DOS_FLX_NLM_OS2_W32) || defined(VMS) || defined(AMIGA))
+#    define INT_SPRINTF      /* sprintf() returns int:  ANSI */
+#  endif
+#  if (defined(ultrix) || defined(__ultrix)) /* Ultrix 4.3 and newer */
+#    if (defined(POSIX) || defined(__POSIX))
+#      define INT_SPRINTF    /* sprintf() returns int:  ANSI/Posix */
+#    endif
+#    ifdef __GNUC__
+#      define PCHAR_SPRINTF  /* undetermined actual return value */
+#    endif
+#  endif
+#  if (defined(__osf__) || defined(_AIX) || defined(CMS_MVS) || defined(THEOS))
+#    define INT_SPRINTF      /* sprintf() returns int:  ANSI/Posix */
+#  endif
+#  if defined(sun)
+#    define PCHAR_SPRINTF    /* sprintf() returns char *:  SunOS cc *and* gcc */
+#  endif
+#endif
+
+/* defaults that we hope will take care of most machines in the future */
+
+#if (!defined(PCHAR_SPRINTF) && !defined(INT_SPRINTF))
+#  ifdef __STDC__
+#    define INT_SPRINTF      /* sprintf() returns int:  ANSI */
+#  endif
+#  ifndef INT_SPRINTF
+#    define PCHAR_SPRINTF    /* sprintf() returns char *:  BSDish */
+#  endif
+#endif
+
+#define MSG_STDERR(f)  (f & 1)        /* bit 0:  0 = stdout, 1 = stderr */
+#define MSG_INFO(f)    ((f & 6) == 0) /* bits 1 and 2:  0 = info */
+#define MSG_WARN(f)    ((f & 6) == 2) /* bits 1 and 2:  1 = warning */
+#define MSG_ERROR(f)   ((f & 6) == 4) /* bits 1 and 2:  2 = error */
+#define MSG_FATAL(f)   ((f & 6) == 6) /* bits 1 and 2:  (3 = fatal error) */
+#define MSG_ZFN(f)     (f & 0x0008)   /* bit 3:  1 = print zipfile name */
+#define MSG_FN(f)      (f & 0x0010)   /* bit 4:  1 = print filename */
+#define MSG_LNEWLN(f)  (f & 0x0020)   /* bit 5:  1 = leading newline if !SOL */
+#define MSG_TNEWLN(f)  (f & 0x0040)   /* bit 6:  1 = trailing newline if !SOL */
+#define MSG_MNEWLN(f)  (f & 0x0080)   /* bit 7:  1 = trailing NL for prompts */
+/* the following are subject to change */
+#define MSG_NO_WGUI(f) (f & 0x0100)   /* bit 8:  1 = skip if Windows GUI */
+#define MSG_NO_AGUI(f) (f & 0x0200)   /* bit 9:  1 = skip if Acorn GUI */
+#define MSG_NO_DLL2(f) (f & 0x0400)   /* bit 10:  1 = skip if OS/2 DLL */
+#define MSG_NO_NDLL(f) (f & 0x0800)   /* bit 11:  1 = skip if WIN32 DLL */
+#define MSG_NO_WDLL(f) (f & 0x1000)   /* bit 12:  1 = skip if Windows DLL */
+
+#if (defined(MORE) && !defined(SCREENLINES))
+#  ifdef DOS_FLX_NLM_OS2_W32
+#    define SCREENLINES 25  /* can be (should be) a function instead */
+#  else
+#    define SCREENLINES 24  /* VT-100s are assumed to be minimal hardware */
+#  endif
+#endif
+#if (defined(MORE) && !defined(SCREENSIZE))
+#  ifndef SCREENWIDTH
+#    define SCREENSIZE(scrrows, scrcols) { \
+          if ((scrrows) != NULL) *(scrrows) = SCREENLINES; }
+#  else
+#    define SCREENSIZE(scrrows, scrcols) { \
+          if ((scrrows) != NULL) *(scrrows) = SCREENLINES; \
+          if ((scrcols) != NULL) *(scrcols) = SCREENWIDTH; }
+#  endif
+#endif
+
+#if (defined(__16BIT__) || defined(MED_MEM) || defined(SMALL_MEM))
+# define DIR_BLKSIZ  64     /* number of directory entries per block
+                             *  (should fit in 4096 bytes, usually) */
+#else
+# define DIR_BLKSIZ 16384   /* use more memory, to reduce long-range seeks */
+#endif
+
+#ifndef WSIZE
+#  ifdef USE_DEFLATE64
+#    define WSIZE   65536L  /* window size--must be a power of two, and */
+#  else                     /*  at least 64K for PKZip's deflate64 method */
+#    define WSIZE   0x8000  /* window size--must be a power of two, and */
+#  endif                    /*  at least 32K for zip's deflate method */
+#endif
+
+#ifdef __16BIT__
+#  ifndef INT_16BIT
+#    define INT_16BIT       /* on 16-bit systems int size is 16 bits */
+#  endif
+#else
+#  define nearmalloc  malloc
+#  define nearfree    free
+#  if (!defined(__IBMC__) || !defined(OS2))
+#    ifndef near
+#      define near
+#    endif
+#    ifndef far
+#      define far
+#    endif
+#  endif
+#endif
+
+#if (defined(DYNALLOC_CRCTAB) && !defined(DYNAMIC_CRC_TABLE))
+#  undef DYNALLOC_CRCTAB
+#endif
+
+#if (defined(DYNALLOC_CRCTAB) && defined(REENTRANT))
+#  undef DYNALLOC_CRCTAB   /* not safe with reentrant code */
+#endif
+
+#if (defined(USE_ZLIB) && !defined(USE_OWN_CRCTAB))
+#  ifdef DYNALLOC_CRCTAB
+#    undef DYNALLOC_CRCTAB
+#  endif
+#endif
+
+#if (defined(USE_ZLIB) && defined(ASM_CRC))
+#  undef ASM_CRC
+#endif
+
+#ifdef USE_ZLIB
+#  ifdef IZ_CRC_BE_OPTIMIZ
+#    undef IZ_CRC_BE_OPTIMIZ
+#  endif
+#  ifdef IZ_CRC_LE_OPTIMIZ
+#    undef IZ_CRC_LE_OPTIMIZ
+#  endif
+#endif
+#if (!defined(IZ_CRC_BE_OPTIMIZ) && !defined(IZ_CRC_LE_OPTIMIZ))
+#  ifdef IZ_CRCOPTIM_UNFOLDTBL
+#    undef IZ_CRCOPTIM_UNFOLDTBL
+#  endif
+#endif
+
+#ifndef INBUFSIZ
+#  if (defined(MED_MEM) || defined(SMALL_MEM))
+#    define INBUFSIZ  2048  /* works for MS-DOS small model */
+#  else
+#    define INBUFSIZ  8192  /* larger buffers for real OSes */
+#  endif
+#endif
+
+#if (defined(INT_16BIT) && (defined(USE_DEFLATE64) || lenEOL > 1))
+   /* For environments using 16-bit integers OUTBUFSIZ must be limited to
+    * less than 64k (do_string() uses "unsigned" in calculations involving
+    * OUTBUFSIZ).  This is achieved by defining MED_MEM when WSIZE = 64k (aka
+    * Deflate64 support enabled) or EOL markers contain multiple characters.
+    * (The rule gets applied AFTER the default rule for INBUFSIZ because it
+    * is not neccessary to reduce INBUFSIZE in this case.)
+    */
+#  if (!defined(SMALL_MEM) && !defined(MED_MEM))
+#    define MED_MEM
+#  endif
+#endif
+
+/* Logic for case of small memory, length of EOL > 1:  if OUTBUFSIZ == 2048,
+ * OUTBUFSIZ>>1 == 1024 and OUTBUFSIZ>>7 == 16; therefore rawbuf is 1008 bytes
+ * and transbuf 1040 bytes.  Have room for 32 extra EOL chars; 1008/32 == 31.5
+ * chars/line, smaller than estimated 35-70 characters per line for C source
+ * and normal text.  Hence difference is sufficient for most "average" files.
+ * (Argument scales for larger OUTBUFSIZ.)
+ */
+#ifdef SMALL_MEM          /* i.e., 16-bit OSes:  MS-DOS, OS/2 1.x, etc. */
+#  define LoadFarString(x)       fLoadFarString(__G__ (x))
+#  define LoadFarStringSmall(x)  fLoadFarStringSmall(__G__ (x))
+#  define LoadFarStringSmall2(x) fLoadFarStringSmall2(__G__ (x))
+#  if (defined(_MSC_VER) && (_MSC_VER >= 600))
+#    define zfstrcpy(dest, src)  _fstrcpy((dest), (src))
+#    define zfstrcmp(s1, s2)     _fstrcmp((s1), (s2))
+#  endif
+#  if !(defined(SFX) || defined(FUNZIP))
+#    if (defined(_MSC_VER))
+#      define zfmalloc(sz)       _fmalloc((sz))
+#      define zffree(x)          _ffree(x)
+#    endif
+#    if (defined(__TURBOC__))
+#      include <alloc.h>
+#      define zfmalloc(sz)       farmalloc((unsigned long)(sz))
+#      define zffree(x)          farfree(x)
+#    endif
+#  endif /* !(SFX || FUNZIP) */
+#  ifndef Far
+#    define Far far  /* __far only works for MSC 6.00, not 6.0a or Borland */
+#  endif
+#  define OUTBUFSIZ INBUFSIZ
+#  if (lenEOL == 1)
+#    define RAWBUFSIZ (OUTBUFSIZ>>1)
+#  else
+#    define RAWBUFSIZ ((OUTBUFSIZ>>1) - (OUTBUFSIZ>>7))
+#  endif
+#  define TRANSBUFSIZ (OUTBUFSIZ-RAWBUFSIZ)
+   typedef short  shrint;            /* short/int or "shrink int" (unshrink) */
+#else
+#  define zfstrcpy(dest, src)       strcpy((dest), (src))
+#  define zfstrcmp(s1, s2)          strcmp((s1), (s2))
+#  define zfmalloc                  malloc
+#  define zffree(x)                 free(x)
+#  ifdef QDOS
+#    define LoadFarString(x)        Qstrfix(x)   /* fix up _ for '.' */
+#    define LoadFarStringSmall(x)   Qstrfix(x)
+#    define LoadFarStringSmall2(x)  Qstrfix(x)
+#  else
+#    define LoadFarString(x)        (char *)(x)
+#    define LoadFarStringSmall(x)   (char *)(x)
+#    define LoadFarStringSmall2(x)  (char *)(x)
+#  endif
+#  ifdef MED_MEM
+#    define OUTBUFSIZ 0xFF80         /* can't malloc arrays of 0xFFE8 or more */
+#    define TRANSBUFSIZ 0xFF80
+     typedef short  shrint;
+#  else
+#    define OUTBUFSIZ (lenEOL*WSIZE) /* more efficient text conversion */
+#    define TRANSBUFSIZ (lenEOL*OUTBUFSIZ)
+#    ifdef AMIGA
+       typedef short shrint;
+#    else
+       typedef int  shrint;          /* for efficiency/speed, we hope... */
+#    endif
+#  endif /* ?MED_MEM */
+#  define RAWBUFSIZ OUTBUFSIZ
+#endif /* ?SMALL_MEM */
+
+#ifndef Far
+#  define Far
+#endif
+
+#ifndef Cdecl
+#  define Cdecl
+#endif
+
+#ifndef MAIN
+#  define MAIN  main
+#endif
+
+#ifdef SFX      /* disable some unused features for SFX executables */
+#  ifndef NO_ZIPINFO
+#    define NO_ZIPINFO
+#  endif
+#  ifdef TIMESTAMP
+#    undef TIMESTAMP
+#  endif
+#endif
+
+#ifdef SFX
+#  ifdef CHEAP_SFX_AUTORUN
+#    ifndef NO_SFX_EXDIR
+#      define NO_SFX_EXDIR
+#    endif
+#  endif
+#  ifndef NO_SFX_EXDIR
+#    ifndef SFX_EXDIR
+#      define SFX_EXDIR
+#    endif
+#  else
+#    ifdef SFX_EXDIR
+#      undef SFX_EXDIR
+#    endif
+#  endif
+#endif
+
+/* user may have defined both by accident...  NOTIMESTAMP takes precedence */
+#if (defined(TIMESTAMP) && defined(NOTIMESTAMP))
+#  undef TIMESTAMP
+#endif
+
+#if (!defined(COPYRIGHT_CLEAN) && !defined(USE_SMITH_CODE))
+#  define COPYRIGHT_CLEAN
+#endif
+
+/* The LZW patent is expired worldwide since 2004-Jul-07, so USE_UNSHRINK
+ * is now enabled by default.  See unshrink.c.
+ */
+#if (!defined(LZW_CLEAN) && !defined(USE_UNSHRINK))
+#  define USE_UNSHRINK
+#endif
+
+#ifndef O_BINARY
+#  define O_BINARY  0
+#endif
+
+#ifndef PIPE_ERROR
+#  ifndef EPIPE
+#    define EPIPE -1
+#  endif
+#  define PIPE_ERROR (errno == EPIPE)
+#endif
+
+/* File operations--use "b" for binary if allowed or fixed length 512 on VMS */
+#ifdef VMS
+#  define FOPR  "r","ctx=stm"
+#  define FOPM  "r+","ctx=stm","rfm=fix","mrs=512"
+#  define FOPW  "w","ctx=stm","rfm=fix","mrs=512"
+#  define FOPWR "w+","ctx=stm","rfm=fix","mrs=512"
+#endif /* VMS */
+
+#ifdef CMS_MVS
+/* Binary files must be RECFM=F,LRECL=1 for ftell() to get correct pos */
+/* ...unless byteseek is used.  Let's try that for a while.            */
+#  define FOPR "rb,byteseek"
+#  define FOPM "r+b,byteseek"
+#  ifdef MVS
+#    define FOPW "wb,recfm=u,lrecl=32760,byteseek" /* New binary files */
+#    define FOPWE "wb"                             /* Existing binary files */
+#    define FOPWT "w,lrecl=133"                    /* New text files */
+#    define FOPWTE "w"                             /* Existing text files */
+#  else
+#    define FOPW "wb,recfm=v,lrecl=32760"
+#    define FOPWT "w"
+#  endif
+#endif /* CMS_MVS */
+
+#ifdef TOPS20          /* TOPS-20 MODERN?  You kidding? */
+#  define FOPW "w8"
+#endif /* TOPS20 */
+
+/* Defaults when nothing special has been defined previously. */
+#ifdef MODERN
+#  ifndef FOPR
+#    define FOPR "rb"
+#  endif
+#  ifndef FOPM
+#    define FOPM "r+b"
+#  endif
+#  ifndef FOPW
+#    define FOPW "wb"
+#  endif
+#  ifndef FOPWT
+#    define FOPWT "wt"
+#  endif
+#  ifndef FOPWR
+#    define FOPWR "w+b"
+#  endif
+#else /* !MODERN */
+#  ifndef FOPR
+#    define FOPR "r"
+#  endif
+#  ifndef FOPM
+#    define FOPM "r+"
+#  endif
+#  ifndef FOPW
+#    define FOPW "w"
+#  endif
+#  ifndef FOPWT
+#    define FOPWT "w"
+#  endif
+#  ifndef FOPWR
+#    define FOPWR "w+"
+#  endif
+#endif /* ?MODERN */
+
+/*
+ * If <limits.h> exists on most systems, should include that, since it may
+ * define some or all of the following:  NAME_MAX, PATH_MAX, _POSIX_NAME_MAX,
+ * _POSIX_PATH_MAX.
+ */
+#ifdef DOS_FLX_NLM_OS2_W32
+#  include <limits.h>
+#endif
+
+/* 2008-07-22 SMS.
+ * Unfortunately, on VMS, <limits.h> exists, and is included by <stdlib.h>
+ * (so it's pretty much unavoidable), and it defines PATH_MAX to a fixed
+ * short value (256, correct only for older systems without ODS-5 support),
+ * rather than one based on the real RMS NAM[L] situation.  So, we
+ * artificially undefine it here, to allow our better-defined _MAX_PATH
+ * (see vms/vmscfg.h) to be used.
+ */
+#ifdef VMS
+#  undef PATH_MAX
+#endif
+
+#ifndef PATH_MAX
+#  ifdef MAXPATHLEN
+#    define PATH_MAX      MAXPATHLEN    /* in <sys/param.h> on some systems */
+#  else
+#    ifdef _MAX_PATH
+#      define PATH_MAX    _MAX_PATH
+#    else
+#      if FILENAME_MAX > 255
+#        define PATH_MAX  FILENAME_MAX  /* used like PATH_MAX on some systems */
+#      else
+#        define PATH_MAX  1024
+#      endif
+#    endif /* ?_MAX_PATH */
+#  endif /* ?MAXPATHLEN */
+#endif /* !PATH_MAX */
+
+/*
+ * buffer size required to hold the longest legal local filepath
+ * (including the trailing '\0')
+ */
+#define FILNAMSIZ  PATH_MAX
+
+#ifdef UNICODE_SUPPORT
+# if !(defined(UTF8_MAYBE_NATIVE) || defined(UNICODE_WCHAR))
+#  undef UNICODE_SUPPORT
+# endif
+#endif
+/* 2007-09-18 SMS.
+ * Include <locale.h> here if it will be needed later for Unicode.
+ * Otherwise, SETLOCALE may be defined here, and then defined again
+ * (differently) when <locale.h> is read later.
+ */
+#ifdef UNICODE_SUPPORT
+# ifdef UNICODE_WCHAR
+#  if !(defined(_WIN32_WCE) || defined(POCKET_UNZIP))
+#   include <wchar.h>
+#   include <wctype.h>
+#  endif
+# endif
+# ifndef _MBCS  /* no need to include <locale.h> twice, see below */
+#   include <locale.h>
+#   ifndef SETLOCALE
+#     define SETLOCALE(category, locale) setlocale(category, locale)
+#   endif
+# endif
+#endif /* UNICODE_SUPPORT */
+
+/* DBCS support for Info-ZIP  (mainly for japanese (-: )
+ * by Yoshioka Tsuneo (QWF00133@nifty.ne.jp,tsuneo-y@is.aist-nara.ac.jp)
+ */
+#ifdef _MBCS
+#  include <locale.h>
+   /* Multi Byte Character Set */
+#  define ___MBS_TMP_DEF  char *___tmp_ptr;
+#  define ___TMP_PTR      ___tmp_ptr
+#  ifndef CLEN
+#    define NEED_UZMBCLEN
+#    define CLEN(ptr) (int)uzmbclen((ZCONST unsigned char *)(ptr))
+#  endif
+#  ifndef PREINCSTR
+#    define PREINCSTR(ptr) (ptr += CLEN(ptr))
+#  endif
+#  define POSTINCSTR(ptr) (___TMP_PTR=(char *)(ptr), PREINCSTR(ptr),___TMP_PTR)
+   char *plastchar OF((ZCONST char *ptr, extent len));
+#  define lastchar(ptr, len) ((int)(unsigned)*plastchar(ptr, len))
+#  ifndef MBSCHR
+#    define NEED_UZMBSCHR
+#    define MBSCHR(str,c) (char *)uzmbschr((ZCONST unsigned char *)(str), c)
+#  endif
+#  ifndef MBSRCHR
+#    define NEED_UZMBSRCHR
+#    define MBSRCHR(str,c) (char *)uzmbsrchr((ZCONST unsigned char *)(str), c)
+#  endif
+#  ifndef SETLOCALE
+#    define SETLOCALE(category, locale) setlocale(category, locale)
+#  endif
+#else /* !_MBCS */
+#  define ___MBS_TMP_DEF
+#  define ___TMP_PTR
+#  define CLEN(ptr) 1
+#  define PREINCSTR(ptr) (++(ptr))
+#  define POSTINCSTR(ptr) ((ptr)++)
+#  define plastchar(ptr, len) (&ptr[(len)-1])
+#  define lastchar(ptr, len) (ptr[(len)-1])
+#  define MBSCHR(str, c) strchr(str, c)
+#  define MBSRCHR(str, c) strrchr(str, c)
+#  ifndef SETLOCALE
+#    define SETLOCALE(category, locale)
+#  endif
+#endif /* ?_MBCS */
+#define INCSTR(ptr) PREINCSTR(ptr)
+
+
+#if (defined(MALLOC_WORK) && !defined(MY_ZCALLOC))
+   /* Any system without a special calloc function */
+# ifndef zcalloc
+#  define zcalloc(items, size) \
+          (zvoid far *)calloc((unsigned)(items), (unsigned)(size))
+# endif
+# ifndef zcfree
+#  define zcfree    free
+# endif
+#endif /* MALLOC_WORK && !MY_ZCALLOC */
+
+#if (defined(CRAY) && defined(ZMEM))
+#  undef ZMEM
+#endif
+
+#ifdef ZMEM
+#  undef ZMEM
+#  define memcmp(b1,b2,len)      bcmp(b2,b1,len)
+#  define memcpy(dest,src,len)   bcopy(src,dest,len)
+#  define memzero                bzero
+#else
+#  define memzero(dest,len)      memset(dest,0,len)
+#endif
+
+#ifndef TRUE
+#  define TRUE      1   /* sort of obvious */
+#endif
+#ifndef FALSE
+#  define FALSE     0
+#endif
+
+#ifndef SEEK_SET
+#  define SEEK_SET  0
+#  define SEEK_CUR  1
+#  define SEEK_END  2
+#endif
+
+#if (!defined(S_IEXEC) && defined(S_IXUSR))
+#  define S_IEXEC   S_IXUSR
+#endif
+
+#if (defined(UNIX) && defined(S_IFLNK) && !defined(MTS))
+#  define SYMLINKS
+#  ifndef S_ISLNK
+#    define S_ISLNK(m)  (((m) & S_IFMT) == S_IFLNK)
+#  endif
+#endif /* UNIX && S_IFLNK && !MTS */
+
+#ifndef S_ISDIR
+#  ifdef CMS_MVS
+#    define S_ISDIR(m)  (FALSE)
+#  else
+#    define S_ISDIR(m)  (((m) & S_IFMT) == S_IFDIR)
+# endif
+#endif
+
+#ifndef IS_VOLID
+#  define IS_VOLID(m)  ((m) & 0x08)
+#endif
+
+/***********************************/
+/*  LARGE_FILE_SUPPORT             */
+/***********************************/
+/* This whole section lifted from Zip 3b tailor.h
+
+ * Types are in OS dependent headers (eg, w32cfg.h)
+ *
+ * LARGE_FILE_SUPPORT and ZIP64_SUPPORT are automatically
+ * set in OS dependent headers (for some ports) based on the port and compiler.
+ *
+ * Function prototypes are below as OF is defined earlier in this file
+ * but after OS dependent header is included.
+ *
+ * E. Gordon 9/21/2003
+ * Updated 1/28/2004
+ * Lifted and placed here 6/7/2004 - Myles Bennett
+ */
+#ifdef LARGE_FILE_SUPPORT
+  /* 64-bit Large File Support */
+
+/* ---------------------------- */
+
+# if defined(UNIX) || defined(VMS)
+
+    /* 64-bit stat functions */
+#   define zstat stat
+#   define zfstat fstat
+
+    /* 64-bit fseeko */
+#   define zlseek lseek
+#   define zfseeko fseeko
+
+    /* 64-bit ftello */
+#   define zftello ftello
+
+    /* 64-bit fopen */
+#   define zfopen fopen
+#   define zfdopen fdopen
+
+# endif /* UNIX || VMS */
+
+/* ---------------------------- */
+
+# ifdef WIN32
+
+#   if defined(_MSC_VER) || defined(__MINGW32__) || defined(__LCC__)
+    /* MS C (VC), MinGW GCC port and LCC-32 use the MS C Runtime lib */
+
+      /* 64-bit stat functions */
+#     define zstat _stati64
+#     define zfstat _fstati64
+
+      /* 64-bit lseek */
+#     define zlseek _lseeki64
+
+#     if defined(_MSC_VER) && (_MSC_VER >= 1400)
+        /* Beginning with VS 8.0 (Visual Studio 2005, MSC 14), the Microsoft
+           C rtl publishes its (previously internal) implmentations of
+           "fseeko" and "ftello" for 64-bit file offsets. */
+        /* 64-bit fseeko */
+#       define zfseeko _fseeki64
+        /* 64-bit ftello */
+#       define zftello _ftelli64
+
+#     else /* not (defined(_MSC_VER) && (_MSC_VER >= 1400)) */
+
+#     if defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ >= 0x800)
+        /* Up-to-date versions of MinGW define the macro __MSVCRT_VERSION__
+           to denote the version of the MS C rtl dll used for linking.  When
+           configured to link against the runtime of MS Visual Studio 8 (or
+           newer), the built-in 64-bit fseek/ftell functions are available. */
+        /* 64-bit fseeko */
+#       define zfseeko _fseeki64
+        /* 64-bit ftello */
+#       define zftello _ftelli64
+
+#     else /* !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__>=0x800)) */
+        /* The version of the C runtime is lower than MSC 14 or unknown. */
+
+        /* The newest MinGW port contains built-in extensions to the MSC rtl
+           that provide fseeko and ftello, but our implementations will do
+           for now. */
+       /* 64-bit fseeko */
+       int zfseeko OF((FILE *, zoff_t, int));
+
+       /* 64-bit ftello */
+       zoff_t zftello OF((FILE *));
+
+#     endif /* ? (__MSVCRT_VERSION__ >= 0x800) */
+#     endif /* ? (_MSC_VER >= 1400) */
+
+      /* 64-bit fopen */
+#     define zfopen fopen
+#     define zfdopen fdopen
+
+#   endif /* _MSC_VER || __MINGW__ || __LCC__ */
+
+#   ifdef __CYGWIN__
+    /* CYGWIN GCC Posix emulator on Windows
+       (configuration not yet finished/tested)  */
+
+      /* 64-bit stat functions */
+#     define zstat _stati64
+#     define zfstat _fstati64
+
+      /* 64-bit lseek */
+#     define zlseek _lseeki64
+
+      /* 64-bit fseeko */
+#     define zfseeko fseeko
+
+      /* 64-bit ftello */
+#     define zftello ftello
+
+      /* 64-bit fopen */
+#     define zfopen fopen
+#     define zfdopen fdopen
+
+#   endif
+#   if defined(__WATCOMC__) || defined(__BORLANDC__)
+    /* WATCOM C and Borland C provide their own C runtime libraries,
+       but they are sufficiently compatible with MS CRTL. */
+
+      /* 64-bit stat functions */
+#     define zstat _stati64
+#     define zfstat _fstati64
+
+#   ifdef __WATCOMC__
+      /* 64-bit lseek */
+#     define zlseek _lseeki64
+#   endif
+
+      /* 64-bit fseeko */
+      int zfseeko OF((FILE *, zoff_t, int));
+
+      /* 64-bit ftello */
+      zoff_t zftello OF((FILE *));
+
+      /* 64-bit fopen */
+#     define zfopen fopen
+#     define zfdopen fdopen
+
+#   endif
+#   ifdef __IBMC__
+      /* IBM C */
+
+      /* 64-bit stat functions */
+
+      /* 64-bit fseeko */
+
+      /* 64-bit ftello */
+
+      /* 64-bit fopen */
+
+#   endif
+
+# endif /* WIN32 */
+
+#else
+  /* No Large File Support */
+
+# ifndef REGULUS  /* returns the inode number on success(!)...argh argh argh */
+#   define zstat stat
+# endif
+# define zfstat fstat
+# define zlseek lseek
+# define zfseeko fseek
+# define zftello ftell
+# define zfopen fopen
+# define zfdopen fdopen
+
+# if defined(UNIX) || defined(VMS) || defined(WIN32)
+    /* For these systems, implement "64bit file vs. 32bit prog" check  */
+#   ifndef DO_SAFECHECK_2GB
+#     define DO_SAFECHECK_2GB
+#   endif
+# endif
+
+#endif
+
+/* No "64bit file vs. 32bit prog" check for SFX stub, to save space */
+#if (defined(DO_SAFECHECK_2GB) && defined(SFX))
+#  undef DO_SAFECHECK_2GB
+#endif
+
+#ifndef SSTAT
+#  ifdef WILD_STAT_BUG
+#    define SSTAT(path,pbuf) (iswild(path) || zstat(path,pbuf))
+#  else
+#    define SSTAT    zstat
+#  endif
+#endif
+
+
+/* Default fzofft() format selection. */
+
+#ifndef FZOFFT_FMT
+
+#  ifdef LARGE_FILE_SUPPORT
+#    define FZOFFT_FMT "ll"
+#    define FZOFFT_HEX_WID_VALUE "16"
+#  else /* def LARGE_FILE_SUPPORT */
+#    define FZOFFT_FMT "l"
+#    define FZOFFT_HEX_WID_VALUE "8"
+#  endif /* def LARGE_FILE_SUPPORT */
+
+#endif /* ndef FZOFFT_FMT */
+
+#define FZOFFT_HEX_WID ((char *) -1)
+#define FZOFFT_HEX_DOT_WID ((char *) -2)
+
+#define FZOFFT_NUM 4            /* Number of chambers. */
+#define FZOFFT_LEN 24           /* Number of characters/chamber. */
+
+
+#ifdef SHORT_SYMS                   /* Mark Williams C, ...? */
+#  define extract_or_test_files     xtr_or_tst_files
+#  define extract_or_test_member    xtr_or_tst_member
+#endif
+
+#ifdef REALLY_SHORT_SYMS            /* TOPS-20 linker:  first 6 chars */
+#  define process_cdir_file_hdr     XXpcdfh
+#  define process_local_file_hdr    XXplfh
+#  define extract_or_test_files     XXxotf  /* necessary? */
+#  define extract_or_test_member    XXxotm  /* necessary? */
+#  define check_for_newer           XXcfn
+#  define overwrite_all             XXoa
+#  define process_all_files         XXpaf
+#  define extra_field               XXef
+#  define explode_lit8              XXel8
+#  define explode_lit4              XXel4
+#  define explode_nolit8            XXnl8
+#  define explode_nolit4            XXnl4
+#  define cpdist8                   XXcpdist8
+#  define inflate_codes             XXic
+#  define inflate_stored            XXis
+#  define inflate_fixed             XXif
+#  define inflate_dynamic           XXid
+#  define inflate_block             XXib
+#  define maxcodemax                XXmax
+#endif
+
+#ifndef S_TIME_T_MAX            /* max value of signed (>= 32-bit) time_t */
+#  define S_TIME_T_MAX  ((time_t)(ulg)0x7fffffffL)
+#endif
+#ifndef U_TIME_T_MAX            /* max value of unsigned (>= 32-bit) time_t */
+#  define U_TIME_T_MAX  ((time_t)(ulg)0xffffffffL)
+#endif
+#ifdef DOSTIME_MINIMUM          /* min DOSTIME value (1980-01-01) */
+#  undef DOSTIME_MINIMUM
+#endif
+#define DOSTIME_MINIMUM ((ulg)0x00210000L)
+#ifdef DOSTIME_2038_01_18       /* approximate DOSTIME equivalent of */
+#  undef DOSTIME_2038_01_18     /*  the signed-32-bit time_t limit */
+#endif
+#define DOSTIME_2038_01_18 ((ulg)0x74320000L)
+
+#ifdef QDOS
+#  define ZSUFX         "_zip"
+#  define ALT_ZSUFX     ".zip"
+#else
+#  ifdef RISCOS
+#    define ZSUFX       "/zip"
+#  else
+#    define ZSUFX       ".zip"
+#  endif
+#  define ALT_ZSUFX     ".ZIP"   /* Unix-only so far (only case-sensitive fs) */
+#endif
+
+#define CENTRAL_HDR_SIG   "\001\002"   /* the infamous "PK" signature bytes, */
+#define LOCAL_HDR_SIG     "\003\004"   /*  w/o "PK" (so unzip executable not */
+#define END_CENTRAL_SIG   "\005\006"   /*  mistaken for zipfile itself) */
+#define EXTD_LOCAL_SIG    "\007\010"   /* [ASCII "\113" == EBCDIC "\080" ??] */
+
+/** internal-only return codes **/
+#define IZ_DIR            76   /* potential zipfile is a directory */
+/* special return codes for mapname() */
+#define MPN_OK            0      /* mapname successful */
+#define MPN_INF_TRUNC    (1<<8)  /* caution - filename truncated */
+#define MPN_INF_SKIP     (2<<8)  /* info  - skipped because nothing to do */
+#define MPN_ERR_SKIP     (3<<8)  /* error - entry skipped */
+#define MPN_ERR_TOOLONG  (4<<8)  /* error - path too long */
+#define MPN_NOMEM        (10<<8) /* error - out of memory, file skipped */
+#define MPN_CREATED_DIR  (16<<8) /* directory created: set time & permission */
+#define MPN_VOL_LABEL    (17<<8) /* volume label, but can't set on hard disk */
+#define MPN_INVALID      (99<<8) /* internal logic error, should never reach */
+/* mask for internal mapname&checkdir return codes */
+#define MPN_MASK          0x7F00
+/* error code for extracting/testing extra field blocks */
+#define IZ_EF_TRUNC       79   /* local extra field truncated (PKZIP'd) */
+
+/* choice of activities for do_string() */
+#define SKIP              0             /* skip header block */
+#define DISPLAY           1             /* display archive comment (ASCII) */
+#define DISPL_8           5             /* display file comment (ext. ASCII) */
+#define DS_FN             2             /* read filename (ext. ASCII, chead) */
+#define DS_FN_C           2             /* read filename from central header */
+#define DS_FN_L           6             /* read filename from local header */
+#define EXTRA_FIELD       3             /* copy extra field into buffer */
+#define DS_EF             3
+#ifdef AMIGA
+#  define FILENOTE        4             /* convert file comment to filenote */
+#endif
+#if (defined(SFX) && defined(CHEAP_SFX_AUTORUN))
+#  define CHECK_AUTORUN   7             /* copy command, display remainder */
+#  define CHECK_AUTORUN_Q 8             /* copy command, skip remainder */
+#endif
+
+#define DOES_NOT_EXIST    -1   /* return values for check_for_newer() */
+#define EXISTS_AND_OLDER  0
+#define EXISTS_AND_NEWER  1
+
+#define OVERWRT_QUERY     0    /* status values for G.overwrite_mode */
+#define OVERWRT_ALWAYS    1
+#define OVERWRT_NEVER     2
+
+#define IS_OVERWRT_ALL    (G.overwrite_mode == OVERWRT_ALWAYS)
+#define IS_OVERWRT_NONE   (G.overwrite_mode == OVERWRT_NEVER)
+
+#ifdef VMS
+  /* return codes for VMS-specific open_outfile() function */
+# define OPENOUT_OK       0   /* file openend normally */
+# define OPENOUT_FAILED   1   /* file open failed */
+# define OPENOUT_SKIPOK   2   /* file not opened, skip at error level OK */
+# define OPENOUT_SKIPWARN 3   /* file not opened, skip at error level WARN */
+#endif /* VMS */
+
+#define ROOT              0    /* checkdir() extract-to path:  called once */
+#define INIT              1    /* allocate buildpath:  called once per member */
+#define APPEND_DIR        2    /* append a dir comp.:  many times per member */
+#define APPEND_NAME       3    /* append actual filename:  once per member */
+#define GETPATH           4    /* retrieve the complete path and free it */
+#define END               5    /* free root path prior to exiting program */
+
+/* version_made_by codes (central dir):  make sure these */
+/*  are not defined on their respective systems!! */
+#define FS_FAT_           0    /* filesystem used by MS-DOS, OS/2, Win32 */
+#define AMIGA_            1
+#define VMS_              2
+#define UNIX_             3
+#define VM_CMS_           4
+#define ATARI_            5    /* what if it's a minix filesystem? [cjh] */
+#define FS_HPFS_          6    /* filesystem used by OS/2 (and NT 3.x) */
+#define MAC_              7    /* HFS filesystem used by MacOS */
+#define Z_SYSTEM_         8
+#define CPM_              9
+#define TOPS20_           10
+#define FS_NTFS_          11   /* filesystem used by Windows NT */
+#define QDOS_             12
+#define ACORN_            13   /* Archimedes Acorn RISC OS */
+#define FS_VFAT_          14   /* filesystem used by Windows 95, NT */
+#define MVS_              15
+#define BEOS_             16   /* hybrid POSIX/database filesystem */
+#define TANDEM_           17   /* Tandem NSK */
+#define THEOS_            18   /* THEOS */
+#define MAC_OSX_          19   /* Mac OS/X (Darwin) */
+#define ATHEOS_           30   /* AtheOS */
+#define NUM_HOSTS         31   /* index of last system + 1 */
+/* don't forget to update zipinfo.c appropiately if NUM_HOSTS changes! */
+
+#define STORED            0    /* compression methods */
+#define SHRUNK            1
+#define REDUCED1          2
+#define REDUCED2          3
+#define REDUCED3          4
+#define REDUCED4          5
+#define IMPLODED          6
+#define TOKENIZED         7
+#define DEFLATED          8
+#define ENHDEFLATED       9
+#define DCLIMPLODED      10
+#define BZIPPED          12
+#define LZMAED           14
+#define IBMTERSED        18
+#define IBMLZ77ED        19
+#define WAVPACKED        97
+#define PPMDED           98
+#define NUM_METHODS      17     /* number of known method IDs */
+/* don't forget to update list.c (list_files()), extract.c and zipinfo.c
+ * appropriately if NUM_METHODS changes */
+
+/* (the PK-class error codes are public and have been moved into unzip.h) */
+
+#define DF_MDY            0    /* date format 10/26/91 (USA only) */
+#define DF_DMY            1    /* date format 26/10/91 (most of the world) */
+#define DF_YMD            2    /* date format 91/10/26 (a few countries) */
+
+/*---------------------------------------------------------------------------
+    Extra-field block ID values and offset info.
+  ---------------------------------------------------------------------------*/
+/* extra-field ID values, all little-endian: */
+#define EF_PKSZ64    0x0001    /* PKWARE's 64-bit filesize extensions */
+#define EF_AV        0x0007    /* PKWARE's authenticity verification */
+#define EF_EFS       0x0008    /* PKWARE's extended language encoding */
+#define EF_OS2       0x0009    /* OS/2 extended attributes */
+#define EF_PKW32     0x000a    /* PKWARE's Win95/98/WinNT filetimes */
+#define EF_PKVMS     0x000c    /* PKWARE's VMS */
+#define EF_PKUNIX    0x000d    /* PKWARE's Unix */
+#define EF_PKFORK    0x000e    /* PKWARE's future stream/fork descriptors */
+#define EF_PKPATCH   0x000f    /* PKWARE's patch descriptor */
+#define EF_PKPKCS7   0x0014    /* PKWARE's PKCS#7 store for X.509 Certs */
+#define EF_PKFX509   0x0015    /* PKWARE's file X.509 Cert&Signature ID */
+#define EF_PKCX509   0x0016    /* PKWARE's central dir X.509 Cert ID */
+#define EF_PKENCRHD  0x0017    /* PKWARE's Strong Encryption header */
+#define EF_PKRMCTL   0x0018    /* PKWARE's Record Management Controls*/
+#define EF_PKLSTCS7  0x0019    /* PKWARE's PKCS#7 Encr. Recipient Cert List */
+#define EF_PKIBM     0x0065    /* PKWARE's IBM S/390 & AS/400 attributes */
+#define EF_PKIBM2    0x0066    /* PKWARE's IBM S/390 & AS/400 compr. attribs */
+#define EF_IZVMS     0x4d49    /* Info-ZIP's VMS ("IM") */
+#define EF_IZUNIX    0x5855    /* Info-ZIP's first Unix[1] ("UX") */
+#define EF_IZUNIX2   0x7855    /* Info-ZIP's second Unix[2] ("Ux") */
+#define EF_IZUNIX3   0x7875    /* Info-ZIP's newest Unix[3] ("ux") */
+#define EF_TIME      0x5455    /* universal timestamp ("UT") */
+#define EF_UNIPATH   0x7075    /* Info-ZIP Unicode Path ("up") */
+#define EF_UNICOMNT  0x6375    /* Info-ZIP Unicode Comment ("uc") */
+#define EF_MAC3      0x334d    /* Info-ZIP's new Macintosh (= "M3") */
+#define EF_JLMAC     0x07c8    /* Johnny Lee's old Macintosh (= 1992) */
+#define EF_ZIPIT     0x2605    /* Thomas Brown's Macintosh (ZipIt) */
+#define EF_ZIPIT2    0x2705    /* T. Brown's Mac (ZipIt) v 1.3.8 and newer ? */
+#define EF_SMARTZIP  0x4d63    /* Mac SmartZip by Marco Bambini */
+#define EF_VMCMS     0x4704    /* Info-ZIP's VM/CMS ("\004G") */
+#define EF_MVS       0x470f    /* Info-ZIP's MVS ("\017G") */
+#define EF_ACL       0x4c41    /* (OS/2) access control list ("AL") */
+#define EF_NTSD      0x4453    /* NT security descriptor ("SD") */
+#define EF_ATHEOS    0x7441    /* AtheOS ("At") */
+#define EF_BEOS      0x6542    /* BeOS ("Be") */
+#define EF_QDOS      0xfb4a    /* SMS/QDOS ("J\373") */
+#define EF_AOSVS     0x5356    /* AOS/VS ("VS") */
+#define EF_SPARK     0x4341    /* David Pilling's Acorn/SparkFS ("AC") */
+#define EF_TANDEM    0x4154    /* Tandem NSK ("TA") */
+#define EF_THEOS     0x6854    /* Jean-Michel Dubois' Theos "Th" */
+#define EF_THEOSO    0x4854    /* old Theos port */
+#define EF_MD5       0x4b46    /* Fred Kantor's MD5 ("FK") */
+#define EF_ASIUNIX   0x756e    /* ASi's Unix ("nu") */
+
+#define EB_HEADSIZE       4    /* length of extra field block header */
+#define EB_ID             0    /* offset of block ID in header */
+#define EB_LEN            2    /* offset of data length field in header */
+#define EB_UCSIZE_P       0    /* offset of ucsize field in compr. data */
+#define EB_CMPRHEADLEN    6    /* lenght of compression header */
+
+#define EB_UX_MINLEN      8    /* minimal "UX" field contains atime, mtime */
+#define EB_UX_FULLSIZE    12   /* full "UX" field (atime, mtime, uid, gid) */
+#define EB_UX_ATIME       0    /* offset of atime in "UX" extra field data */
+#define EB_UX_MTIME       4    /* offset of mtime in "UX" extra field data */
+#define EB_UX_UID         8    /* byte offset of UID in "UX" field data */
+#define EB_UX_GID         10   /* byte offset of GID in "UX" field data */
+
+#define EB_UX2_MINLEN     4    /* minimal "Ux" field contains UID/GID */
+#define EB_UX2_UID        0    /* byte offset of UID in "Ux" field data */
+#define EB_UX2_GID        2    /* byte offset of GID in "Ux" field data */
+#define EB_UX2_VALID      (1 << 8)      /* UID/GID present */
+
+#define EB_UX3_MINLEN     7    /* minimal "ux" field size (2-byte UID/GID) */
+
+#define EB_UT_MINLEN      1    /* minimal UT field contains Flags byte */
+#define EB_UT_FLAGS       0    /* byte offset of Flags field */
+#define EB_UT_TIME1       1    /* byte offset of 1st time value */
+#define EB_UT_FL_MTIME    (1 << 0)      /* mtime present */
+#define EB_UT_FL_ATIME    (1 << 1)      /* atime present */
+#define EB_UT_FL_CTIME    (1 << 2)      /* ctime present */
+
+#define EB_FLGS_OFFS      4    /* offset of flags area in generic compressed
+                                  extra field blocks (BEOS, MAC, and others) */
+#define EB_OS2_HLEN       4    /* size of OS2/ACL compressed data header */
+#define EB_BEOS_HLEN      5    /* length of BeOS&AtheOS e.f attribute header */
+#define EB_BE_FL_UNCMPR   0x01 /* "BeOS&AtheOS attribs uncompr." bit flag */
+#define EB_MAC3_HLEN      14   /* length of Mac3 attribute block header */
+#define EB_SMARTZIP_HLEN  64   /* fixed length of the SmartZip extra field */
+#define EB_M3_FL_DATFRK   0x01 /* "this entry is data fork" flag */
+#define EB_M3_FL_UNCMPR   0x04 /* "Mac3 attributes uncompressed" bit flag */
+#define EB_M3_FL_TIME64   0x08 /* "Mac3 time fields are 64 bit wide" flag */
+#define EB_M3_FL_NOUTC    0x10 /* "Mac3 timezone offset fields missing" flag */
+
+#define EB_NTSD_C_LEN     4    /* length of central NT security data */
+#define EB_NTSD_L_LEN     5    /* length of minimal local NT security data */
+#define EB_NTSD_VERSION   4    /* offset of NTSD version byte */
+#define EB_NTSD_MAX_VER   (0)  /* maximum version # we know how to handle */
+
+#define EB_PKVMS_MINLEN   4    /* minimum data length of PKVMS extra block */
+
+#define EB_ASI_CRC32      0    /* offset of ASI Unix field's crc32 checksum */
+#define EB_ASI_MODE       4    /* offset of ASI Unix permission mode field */
+
+#define EB_IZVMS_HLEN     12   /* length of IZVMS attribute block header */
+#define EB_IZVMS_FLGS     4    /* offset of compression type flag */
+#define EB_IZVMS_UCSIZ    6    /* offset of ucsize field in IZVMS header */
+#define EB_IZVMS_BCMASK   07   /* 3 bits for compression type */
+#define EB_IZVMS_BCSTOR   0    /*  Stored */
+#define EB_IZVMS_BC00     1    /*  0byte -> 0bit compression */
+#define EB_IZVMS_BCDEFL   2    /*  Deflated */
+
+
+/*---------------------------------------------------------------------------
+    True sizes of the various headers (excluding their 4-byte signatures),
+    as defined by PKWARE--so it is not likely that these will ever change.
+    But if they do, make sure both these defines AND the typedefs below get
+    updated accordingly.
+
+    12/27/2006
+    The Zip64 End Of Central Directory record is variable size and now
+    comes in two flavors, version 1 and the new version 2 that supports
+    central directory encryption.  We only use the old fields at the
+    top of the Zip64 EOCDR, and this block is a fixed size still, but
+    need to be aware of the stuff following.
+  ---------------------------------------------------------------------------*/
+#define LREC_SIZE    26   /* lengths of local file headers, central */
+#define CREC_SIZE    42   /*  directory headers, end-of-central-dir */
+#define ECREC_SIZE   18   /*  record, zip64 end-of-cent-dir locator */
+#define ECLOC64_SIZE 16   /*  and zip64 end-of-central-dir record,  */
+#define ECREC64_SIZE 52   /*  respectively                          */
+
+#define MAX_BITS    13                 /* used in unshrink() */
+#define HSIZE       (1 << MAX_BITS)    /* size of global work area */
+
+#define LF     10        /* '\n' on ASCII machines; must be 10 due to EBCDIC */
+#define CR     13        /* '\r' on ASCII machines; must be 13 due to EBCDIC */
+#define CTRLZ  26        /* DOS & OS/2 EOF marker (used in fileio.c, vms.c) */
+
+#ifdef EBCDIC
+#  define foreign(c)    ascii[(uch)(c)]
+#  define native(c)     ebcdic[(uch)(c)]
+#  define NATIVE        "EBCDIC"
+#  define NOANSIFILT
+#endif
+
+#ifdef VMS
+#  define ENV_UNZIP       "UNZIP_OPTS"     /* names of environment variables */
+#  define ENV_ZIPINFO     "ZIPINFO_OPTS"
+#endif /* VMS */
+#ifdef RISCOS
+#  define ENV_UNZIP       "Unzip$Options"
+#  define ENV_ZIPINFO     "Zipinfo$Options"
+#  define ENV_UNZIPEXTS   "Unzip$Exts"
+#endif /* RISCOS */
+#ifndef ENV_UNZIP
+#  define ENV_UNZIP       "UNZIP"          /* the standard names */
+#  define ENV_ZIPINFO     "ZIPINFO"
+#endif
+#define ENV_UNZIP2        "UNZIPOPT"     /* alternate names, for zip compat. */
+#define ENV_ZIPINFO2      "ZIPINFOOPT"
+
+#if (!defined(QQ) && !defined(NOQQ))
+#  define QQ
+#endif
+
+#ifdef QQ                         /* Newtware version:  no file */
+#  define QCOND     (!uO.qflag)   /*  comments with -vq or -vqq */
+#else                             /* Bill Davidsen version:  no way to */
+#  define QCOND     (longhdr)     /*  kill file comments when listing */
+#endif
+
+#ifdef OLD_QQ
+#  define QCOND2    (uO.qflag < 2)
+#else
+#  define QCOND2    (!uO.qflag)
+#endif
+
+#ifdef WILD_STOP_AT_DIR
+#  define __WDLPRO  , int sepc
+#  define __WDL     , sepc
+#  define __WDLDEF  int sepc;
+#  define WISEP     , (uO.W_flag ? '/' : '\0')
+#else
+#  define __WDLPRO
+#  define __WDL
+#  define __WDLDEF
+#  define WISEP
+#endif
+
+
+
+
+/**************/
+/*  Typedefs  */
+/**************/
+
+#ifdef ZIP64_SUPPORT
+# ifndef Z_UINT8_DEFINED
+#   if (defined(__GNUC__) || defined(__hpux) || defined(__SUNPRO_C))
+  typedef unsigned long long    z_uint8;
+#   else
+  typedef unsigned __int64      z_uint8;
+#   endif
+#   define Z_UINT8_DEFINED
+# endif
+#endif
+#ifndef Z_UINT4_DEFINED
+# if (defined(MODERN) && !defined(NO_LIMITS_H))
+#  if (defined(UINT_MAX) && (UINT_MAX == 0xffffffffUL))
+     typedef unsigned int       z_uint4;
+#    define Z_UINT4_DEFINED
+#  else
+#  if (defined(ULONG_MAX) && (ULONG_MAX == 0xffffffffUL))
+     typedef unsigned long      z_uint4;
+#    define Z_UINT4_DEFINED
+#  else
+#  if (defined(USHRT_MAX) && (USHRT_MAX == 0xffffffffUL))
+     typedef unsigned short     z_uint4;
+#    define Z_UINT4_DEFINED
+#  endif
+#  endif
+#  endif
+# endif /* MODERN && !NO_LIMITS_H */
+#endif /* !Z_UINT4_DEFINED */
+#ifndef Z_UINT4_DEFINED
+  typedef ulg                   z_uint4;
+# define Z_UINT4_DEFINED
+#endif
+
+/* The following three user-defined unsigned integer types are used for
+   holding zipfile entities (required widths without / with Zip64 support):
+   a) sizes and offset of zipfile entries
+      (4 bytes / 8 bytes)
+   b) enumeration and counts of zipfile entries
+      (2 bytes / 8 bytes)
+      Remark: internally, we use 4 bytes for archive member counting in the
+              No-Zip64 case, because UnZip supports more than 64k entries for
+              classic Zip archives without Zip64 extensions.
+   c) enumeration and counts of zipfile volumes of multivolume archives
+      (2 bytes / 4 bytes)
+ */
+#ifdef ZIP64_SUPPORT
+  typedef  z_uint8              zusz_t;     /* zipentry sizes & offsets */
+  typedef  z_uint8              zucn_t;     /* archive entry counts */
+  typedef  z_uint4              zuvl_t;     /* multivolume numbers */
+# define MASK_ZUCN64            (~(zucn_t)0)
+/* In case we ever get to support an environment where z_uint8 may be WIDER
+   than 64 bit wide, we will have to apply a construct similar to
+     #define MASK_ZUCN64        (~(zucn_t)0 & (zucn_t)0xffffffffffffffffULL)
+   for the 64-bit mask.
+ */
+#else
+  typedef  ulg                  zusz_t;     /* zipentry sizes & offsets */
+  typedef  unsigned int         zucn_t;     /* archive entry counts */
+  typedef  unsigned short       zuvl_t;     /* multivolume numbers */
+# define MASK_ZUCN64            (~(zucn_t)0)
+#endif
+#define MASK_ZUCN16             ((zucn_t)0xFFFF)
+
+#ifdef NO_UID_GID
+#  ifdef UID_USHORT
+     typedef unsigned short  uid_t;    /* TI SysV.3 */
+     typedef unsigned short  gid_t;
+#  else
+     typedef unsigned int    uid_t;    /* SCO Xenix */
+     typedef unsigned int    gid_t;
+#  endif
+#endif
+
+#if (defined(GOT_UTIMBUF) || defined(sgi) || defined(ATARI))
+   typedef struct utimbuf ztimbuf;
+#else
+   typedef struct ztimbuf {
+       time_t actime;        /* new access time */
+       time_t modtime;       /* new modification time */
+   } ztimbuf;
+#endif
+
+typedef struct iztimes {
+   time_t atime;             /* new access time */
+   time_t mtime;             /* new modification time */
+   time_t ctime;             /* used for creation time; NOT same as st_ctime */
+} iztimes;
+
+#ifdef SET_DIR_ATTRIB
+   typedef struct direntry {    /* head of system-specific struct holding */
+       struct direntry *next;   /*  defered directory attributes info */
+       char *fn;                /* filename of directory */
+       char buf[1];             /* start of system-specific internal data */
+   } direntry;
+#endif /* SET_DIR_ATTRIB */
+
+#ifdef SYMLINKS
+   typedef struct slinkentry {  /* info for deferred symlink creation */
+       struct slinkentry *next; /* pointer to next entry in chain */
+       extent targetlen;        /* length of target filespec */
+       extent attriblen;        /* length of system-specific attrib data */
+       char *target;            /* pointer to target filespec */
+       char *fname;             /* pointer to name of link */
+       char buf[1];             /* data/name/link buffer */
+   } slinkentry;
+#endif /* SYMLINKS */
+
+typedef struct min_info {
+    zoff_t offset;
+    zusz_t compr_size;       /* compressed size (needed if extended header) */
+    zusz_t uncompr_size;     /* uncompressed size (needed if extended header) */
+    ulg crc;                 /* crc (needed if extended header) */
+    zuvl_t diskstart;        /* no of volume where this entry starts */
+    uch hostver;
+    uch hostnum;
+    unsigned file_attr;      /* local flavor, as used by creat(), chmod()... */
+    unsigned encrypted : 1;  /* file encrypted: decrypt before uncompressing */
+    unsigned ExtLocHdr : 1;  /* use time instead of CRC for decrypt check */
+    unsigned textfile : 1;   /* file is text (according to zip) */
+    unsigned textmode : 1;   /* file is to be extracted as text */
+    unsigned lcflag : 1;     /* convert filename to lowercase */
+    unsigned vollabel : 1;   /* "file" is an MS-DOS volume (disk) label */
+#ifdef SYMLINKS
+    unsigned symlink : 1;    /* file is a symbolic link */
+#endif
+    unsigned HasUxAtt : 1;   /* crec ext_file_attr has Unix style mode bits */
+#ifdef UNICODE_SUPPORT
+    unsigned GPFIsUTF8: 1;   /* crec gen_purpose_flag UTF-8 bit 11 is set */
+#endif
+#ifndef SFX
+    char Far *cfilname;      /* central header version of filename */
+#endif
+} min_info;
+
+typedef struct VMStimbuf {
+    char *revdate;    /* (both roughly correspond to Unix modtime/st_mtime) */
+    char *credate;
+} VMStimbuf;
+
+/*---------------------------------------------------------------------------
+    Zipfile work area declarations.
+  ---------------------------------------------------------------------------*/
+
+#ifdef MALLOC_WORK
+   union work {
+     struct {                 /* unshrink(): */
+       shrint *Parent;          /* pointer to (8192 * sizeof(shrint)) */
+       uch *value;              /* pointer to 8KB char buffer */
+       uch *Stack;              /* pointer to another 8KB char buffer */
+     } shrink;
+     uch *Slide;              /* explode(), inflate(), unreduce() */
+   };
+#else /* !MALLOC_WORK */
+   union work {
+     struct {                 /* unshrink(): */
+       shrint Parent[HSIZE];    /* (8192 * sizeof(shrint)) == 16KB minimum */
+       uch value[HSIZE];        /* 8KB */
+       uch Stack[HSIZE];        /* 8KB */
+     } shrink;                  /* total = 32KB minimum; 80KB on Cray/Alpha */
+     uch Slide[WSIZE];        /* explode(), inflate(), unreduce() */
+   };
+#endif /* ?MALLOC_WORK */
+
+#define slide  G.area.Slide
+
+#if (defined(DLL) && !defined(NO_SLIDE_REDIR))
+#  define redirSlide G.redirect_sldptr
+#else
+#  define redirSlide G.area.Slide
+#endif
+
+/*---------------------------------------------------------------------------
+    Zipfile layout declarations.  If these headers ever change, make sure the
+    xxREC_SIZE defines (above) change with them!
+  ---------------------------------------------------------------------------*/
+
+   typedef uch   local_byte_hdr[ LREC_SIZE ];
+#      define L_VERSION_NEEDED_TO_EXTRACT_0     0
+#      define L_VERSION_NEEDED_TO_EXTRACT_1     1
+#      define L_GENERAL_PURPOSE_BIT_FLAG        2
+#      define L_COMPRESSION_METHOD              4
+#      define L_LAST_MOD_DOS_DATETIME           6
+#      define L_CRC32                           10
+#      define L_COMPRESSED_SIZE                 14
+#      define L_UNCOMPRESSED_SIZE               18
+#      define L_FILENAME_LENGTH                 22
+#      define L_EXTRA_FIELD_LENGTH              24
+
+   typedef uch   cdir_byte_hdr[ CREC_SIZE ];
+#      define C_VERSION_MADE_BY_0               0
+#      define C_VERSION_MADE_BY_1               1
+#      define C_VERSION_NEEDED_TO_EXTRACT_0     2
+#      define C_VERSION_NEEDED_TO_EXTRACT_1     3
+#      define C_GENERAL_PURPOSE_BIT_FLAG        4
+#      define C_COMPRESSION_METHOD              6
+#      define C_LAST_MOD_DOS_DATETIME           8
+#      define C_CRC32                           12
+#      define C_COMPRESSED_SIZE                 16
+#      define C_UNCOMPRESSED_SIZE               20
+#      define C_FILENAME_LENGTH                 24
+#      define C_EXTRA_FIELD_LENGTH              26
+#      define C_FILE_COMMENT_LENGTH             28
+#      define C_DISK_NUMBER_START               30
+#      define C_INTERNAL_FILE_ATTRIBUTES        32
+#      define C_EXTERNAL_FILE_ATTRIBUTES        34
+#      define C_RELATIVE_OFFSET_LOCAL_HEADER    38
+
+   typedef uch   ec_byte_rec[ ECREC_SIZE+4 ];
+/*     define SIGNATURE                         0   space-holder only */
+#      define NUMBER_THIS_DISK                  4
+#      define NUM_DISK_WITH_START_CEN_DIR       6
+#      define NUM_ENTRIES_CEN_DIR_THS_DISK      8
+#      define TOTAL_ENTRIES_CENTRAL_DIR         10
+#      define SIZE_CENTRAL_DIRECTORY            12
+#      define OFFSET_START_CENTRAL_DIRECTORY    16
+#      define ZIPFILE_COMMENT_LENGTH            20
+
+   typedef uch   ec_byte_loc64[ ECLOC64_SIZE+4 ];
+#      define NUM_DISK_START_EOCDR64            4
+#      define OFFSET_START_EOCDR64              8
+#      define NUM_THIS_DISK_LOC64               16
+
+   typedef uch   ec_byte_rec64[ ECREC64_SIZE+4 ];
+#      define ECREC64_LENGTH                    4
+#      define EC_VERSION_MADE_BY_0              12
+#      define EC_VERSION_NEEDED_0               14
+#      define NUMBER_THIS_DSK_REC64             16
+#      define NUM_DISK_START_CEN_DIR64          20
+#      define NUM_ENTRIES_CEN_DIR_THS_DISK64    24
+#      define TOTAL_ENTRIES_CENTRAL_DIR64       32
+#      define SIZE_CENTRAL_DIRECTORY64          40
+#      define OFFSET_START_CENTRAL_DIRECT64     48
+
+
+/* The following structs are used to hold all header data of a zip entry.
+   Traditionally, the structs' layouts followed the data layout of the
+   corresponding zipfile header structures.  However, the zipfile header
+   layouts were designed in the old ages of 16-bit CPUs, they are subject
+   to structure padding and/or alignment issues on newer systems with a
+   "natural word width" of more than 2 bytes.
+   Please note that the structure members are now reordered by size
+   (top-down), to prevent internal padding and optimize memory usage!
+ */
+   typedef struct local_file_header {                 /* LOCAL */
+       zusz_t csize;
+       zusz_t ucsize;
+       ulg last_mod_dos_datetime;
+       ulg crc32;
+       uch version_needed_to_extract[2];
+       ush general_purpose_bit_flag;
+       ush compression_method;
+       ush filename_length;
+       ush extra_field_length;
+   } local_file_hdr;
+
+   typedef struct central_directory_file_header {     /* CENTRAL */
+       zusz_t csize;
+       zusz_t ucsize;
+       zusz_t relative_offset_local_header;
+       ulg last_mod_dos_datetime;
+       ulg crc32;
+       ulg external_file_attributes;
+       zuvl_t disk_number_start;
+       ush internal_file_attributes;
+       uch version_made_by[2];
+       uch version_needed_to_extract[2];
+       ush general_purpose_bit_flag;
+       ush compression_method;
+       ush filename_length;
+       ush extra_field_length;
+       ush file_comment_length;
+   } cdir_file_hdr;
+
+   typedef struct end_central_dir_record {            /* END CENTRAL */
+       zusz_t size_central_directory;
+       zusz_t offset_start_central_directory;
+       zucn_t num_entries_centrl_dir_ths_disk;
+       zucn_t total_entries_central_dir;
+       zuvl_t number_this_disk;
+       zuvl_t num_disk_start_cdir;
+       int have_ecr64;                  /* valid Zip64 ecdir-record exists */
+       int is_zip64_archive;            /* Zip64 ecdir-record is mandatory */
+       ush zipfile_comment_length;
+   } ecdir_rec;
+
+
+/* Huffman code lookup table entry--this entry is four bytes for machines
+   that have 16-bit pointers (e.g. PC's in the small or medium model).
+   Valid extra bits are 0..16.  e == 31 is EOB (end of block), e == 32
+   means that v is a literal, 32 < e < 64 means that v is a pointer to
+   the next table, which codes (e & 31)  bits, and lastly e == 99 indicates
+   an unused code.  If a code with e == 99 is looked up, this implies an
+   error in the data. */
+
+struct huft {
+    uch e;                /* number of extra bits or operation */
+    uch b;                /* number of bits in this code or subcode */
+    union {
+        ush n;            /* literal, length base, or distance base */
+        struct huft *t;   /* pointer to next level of table */
+    } v;
+};
+
+
+typedef struct _APIDocStruct {
+    char *compare;
+    char *function;
+    char *syntax;
+    char *purpose;
+} APIDocStruct;
+
+
+
+
+/*************/
+/*  Globals  */
+/*************/
+
+#if (defined(OS2) && !defined(FUNZIP))
+#  include "os2/os2data.h"
+#endif
+
+#include "globals.h"
+
+
+
+/*************************/
+/*  Function Prototypes  */
+/*************************/
+
+/*---------------------------------------------------------------------------
+    Functions in unzip.c (initialization routines):
+  ---------------------------------------------------------------------------*/
+
+#ifndef WINDLL
+   int    MAIN                   OF((int argc, char **argv));
+   int    unzip                  OF((__GPRO__ int argc, char **argv));
+   int    uz_opts                OF((__GPRO__ int *pargc, char ***pargv));
+   int    usage                  OF((__GPRO__ int error));
+#endif /* !WINDLL */
+
+/*---------------------------------------------------------------------------
+    Functions in process.c (main driver routines):
+  ---------------------------------------------------------------------------*/
+
+int      process_zipfiles        OF((__GPRO));
+void     free_G_buffers          OF((__GPRO));
+/* static int    do_seekable     OF((__GPRO__ int lastchance)); */
+/* static int    find_ecrec      OF((__GPRO__ long searchlen)); */
+/* static int    process_central_comment OF((__GPRO)); */
+int      process_cdir_file_hdr   OF((__GPRO));
+int      process_local_file_hdr  OF((__GPRO));
+int      getZip64Data            OF((__GPRO__ ZCONST uch *ef_buf,
+                                     unsigned ef_len));
+#ifdef UNICODE_SUPPORT
+  int    getUnicodeData          OF((__GPRO__ ZCONST uch *ef_buf,
+                                     unsigned ef_len));
+#endif
+unsigned ef_scan_for_izux        OF((ZCONST uch *ef_buf, unsigned ef_len,
+                                     int ef_is_c, ulg dos_mdatetime,
+                                     iztimes *z_utim, ulg *z_uidgid));
+#if (defined(RISCOS) || defined(ACORN_FTYPE_NFS))
+   zvoid *getRISCOSexfield       OF((ZCONST uch *ef_buf, unsigned ef_len));
+#endif
+
+#ifndef SFX
+
+/*---------------------------------------------------------------------------
+    Functions in zipinfo.c (`zipinfo-style' listing routines):
+  ---------------------------------------------------------------------------*/
+
+#ifndef NO_ZIPINFO
+#ifndef WINDLL
+   int   zi_opts                 OF((__GPRO__ int *pargc, char ***pargv));
+#endif
+void     zi_end_central          OF((__GPRO));
+int      zipinfo                 OF((__GPRO));
+/* static int      zi_long       OF((__GPRO__ zusz_t *pEndprev)); */
+/* static int      zi_short      OF((__GPRO)); */
+/* static char    *zi_time       OF((__GPRO__ ZCONST ulg *datetimez,
+                                     ZCONST time_t *modtimez, char *d_t_str));*/
+#endif /* !NO_ZIPINFO */
+
+/*---------------------------------------------------------------------------
+    Functions in list.c (generic zipfile-listing routines):
+  ---------------------------------------------------------------------------*/
+
+int      list_files              OF((__GPRO));
+#ifdef TIMESTAMP
+   int   get_time_stamp          OF((__GPRO__  time_t *last_modtime,
+                                     ulg *nmember));
+#endif
+int      ratio                   OF((zusz_t uc, zusz_t c));
+void     fnprint                 OF((__GPRO));
+
+#endif /* !SFX */
+
+/*---------------------------------------------------------------------------
+    Functions in fileio.c:
+  ---------------------------------------------------------------------------*/
+
+int      open_input_file      OF((__GPRO));
+int      open_outfile         OF((__GPRO));                    /* also vms.c */
+void     undefer_input        OF((__GPRO));
+void     defer_leftover_input OF((__GPRO));
+unsigned readbuf              OF((__GPRO__ char *buf, register unsigned len));
+int      readbyte             OF((__GPRO));
+int      fillinbuf            OF((__GPRO));
+int      seek_zipf            OF((__GPRO__ zoff_t abs_offset));
+#ifdef FUNZIP
+   int   flush                OF((__GPRO__ ulg size));  /* actually funzip.c */
+#else
+   int   flush                OF((__GPRO__ uch *buf, ulg size, int unshrink));
+#endif
+/* static int  disk_error     OF((__GPRO)); */
+void     handler              OF((int signal));
+time_t   dos_to_unix_time     OF((ulg dos_datetime));
+int      check_for_newer      OF((__GPRO__ char *filename)); /* os2,vmcms,vms */
+int      do_string            OF((__GPRO__ unsigned int length, int option));
+ush      makeword             OF((ZCONST uch *b));
+ulg      makelong             OF((ZCONST uch *sig));
+zusz_t   makeint64            OF((ZCONST uch *sig));
+char    *fzofft               OF((__GPRO__ zoff_t val,
+                                  ZCONST char *pre, ZCONST char *post));
+#if (!defined(STR_TO_ISO) || defined(NEED_STR2ISO))
+   char *str2iso              OF((char *dst, ZCONST char *src));
+#endif
+#if (!defined(STR_TO_OEM) || defined(NEED_STR2OEM))
+   char *str2oem              OF((char *dst, ZCONST char *src));
+#endif
+#ifdef NO_STRNICMP
+   int   zstrnicmp            OF((register ZCONST char *s1,
+                                  register ZCONST char *s2,
+                                  register unsigned n));
+#endif
+#ifdef REGULUS
+   int   zstat                OF((ZCONST char *p, struct stat *s));
+#endif
+#ifdef ZMEM   /* MUST be ifdef'd because of conflicts with the standard def. */
+   zvoid *memset OF((register zvoid *, register int, register unsigned int));
+   int    memcmp OF((register ZCONST zvoid*, register ZCONST zvoid *,
+                     register unsigned int));
+   zvoid *memcpy OF((register zvoid *, register ZCONST zvoid *,
+                     register unsigned int));
+#endif
+#ifdef NEED_UZMBCLEN
+   extent uzmbclen          OF((ZCONST unsigned char *ptr));
+#endif
+#ifdef NEED_UZMBSCHR
+   unsigned char *uzmbschr  OF((ZCONST unsigned char *str, unsigned int c));
+#endif
+#ifdef NEED_UZMBSRCHR
+   unsigned char *uzmbsrchr OF((ZCONST unsigned char *str, unsigned int c));
+#endif
+#ifdef SMALL_MEM
+   char *fLoadFarString       OF((__GPRO__ const char Far *sz));
+   char *fLoadFarStringSmall  OF((__GPRO__ const char Far *sz));
+   char *fLoadFarStringSmall2 OF((__GPRO__ const char Far *sz));
+   #ifndef zfstrcpy
+     char Far * Far zfstrcpy  OF((char Far *s1, const char Far *s2));
+   #endif
+   #if (!defined(SFX) && !defined(zfstrcmp))
+     int Far zfstrcmp         OF((const char Far *s1, const char Far *s2));
+   #endif
+#endif
+
+
+/*---------------------------------------------------------------------------
+    Functions in extract.c:
+  ---------------------------------------------------------------------------*/
+
+int    extract_or_test_files     OF((__GPRO));
+/* static int   store_info          OF((void)); */
+/* static int   extract_or_test_member   OF((__GPRO)); */
+/* static int   TestExtraField   OF((__GPRO__ uch *ef, unsigned ef_len)); */
+/* static int   test_OS2         OF((__GPRO__ uch *eb, unsigned eb_size)); */
+/* static int   test_NT          OF((__GPRO__ uch *eb, unsigned eb_size)); */
+#ifndef SFX
+  unsigned find_compr_idx        OF((unsigned compr_methodnum));
+#endif
+int    memextract                OF((__GPRO__ uch *tgt, ulg tgtsize,
+                                     ZCONST uch *src, ulg srcsize));
+int    memflush                  OF((__GPRO__ ZCONST uch *rawbuf, ulg size));
+#if (defined(VMS) || defined(VMS_TEXT_CONV))
+   uch   *extract_izvms_block    OF((__GPRO__ ZCONST uch *ebdata,
+                                     unsigned size, unsigned *retlen,
+                                     ZCONST uch *init, unsigned needlen));
+#endif
+char  *fnfilter                  OF((ZCONST char *raw, uch *space,
+                                     extent size));
+
+# if defined( UNICODE_SUPPORT) && defined( _MBCS)
+wchar_t *fnfilterw               OF((ZCONST wchar_t *src, wchar_t *dst,
+                                     extent siz));
+#endif
+
+
+/*---------------------------------------------------------------------------
+    Decompression functions:
+  ---------------------------------------------------------------------------*/
+
+#if (!defined(SFX) && !defined(FUNZIP))
+int    explode                   OF((__GPRO));                  /* explode.c */
+#endif
+int    huft_free                 OF((struct huft *t));          /* inflate.c */
+int    huft_build                OF((__GPRO__ ZCONST unsigned *b, unsigned n,
+                                     unsigned s, ZCONST ush *d, ZCONST uch *e,
+                                     struct huft **t, unsigned *m));
+#ifdef USE_ZLIB
+   int    UZinflate              OF((__GPRO__ int is_defl64));  /* inflate.c */
+#  define inflate_free(x)        inflateEnd(&((Uz_Globs *)(&G))->dstrm)
+#else
+   int    inflate                OF((__GPRO__ int is_defl64));  /* inflate.c */
+   int    inflate_free           OF((__GPRO));                  /* inflate.c */
+#endif /* ?USE_ZLIB */
+#if (!defined(SFX) && !defined(FUNZIP))
+#ifndef COPYRIGHT_CLEAN
+   int    unreduce               OF((__GPRO));                 /* unreduce.c */
+/* static void  LoadFollowers    OF((__GPRO__ f_array *follower, uch *Slen));
+                                                                * unreduce.c */
+#endif /* !COPYRIGHT_CLEAN */
+#ifndef LZW_CLEAN
+   int    unshrink               OF((__GPRO));                 /* unshrink.c */
+/* static void  partial_clear    OF((__GPRO));                  * unshrink.c */
+#endif /* !LZW_CLEAN */
+#endif /* !SFX && !FUNZIP */
+#ifdef USE_BZIP2
+   int    UZbunzip2              OF((__GPRO));                  /* extract.c */
+   void   bz_internal_error      OF((int bzerrcode));           /* ubz2err.c */
+#endif
+
+/*---------------------------------------------------------------------------
+    Internal API functions (only included in DLL versions):
+  ---------------------------------------------------------------------------*/
+
+#ifdef DLL
+   void     setFileNotFound       OF((__GPRO));                     /* api.c */
+   int      unzipToMemory         OF((__GPRO__ char *zip, char *file,
+                                      UzpBuffer *retstr));          /* api.c */
+   int      redirect_outfile      OF((__GPRO));                     /* api.c */
+   int      writeToMemory         OF((__GPRO__ ZCONST uch *rawbuf,
+                                      extent size));                /* api.c */
+   int      close_redirect        OF((__GPRO));                     /* api.c */
+   /* this obsolescent entry point kept for compatibility: */
+   int      UzpUnzip              OF((int argc, char **argv));/* use UzpMain */
+#ifdef OS2DLL
+   int      varmessage            OF((__GPRO__ ZCONST uch *buf, ulg size));
+   int      varputchar            OF((__GPRO__ int c));         /* rexxapi.c */
+   int      finish_REXX_redirect  OF((__GPRO));                 /* rexxapi.c */
+#endif
+#ifdef API_DOC
+   void     APIhelp               OF((__GPRO__ int argc, char **argv));
+#endif                                                          /* apihelp.c */
+#endif /* DLL */
+
+/*---------------------------------------------------------------------------
+    MSDOS-only functions:
+  ---------------------------------------------------------------------------*/
+
+#ifdef MSDOS
+#if (!defined(FUNZIP) && !defined(SFX) && !defined(WINDLL))
+   void     check_for_windows     OF((ZCONST char *app));         /* msdos.c */
+#endif
+#if (defined(__GO32__) || defined(__EMX__))
+   unsigned _dos_getcountryinfo(void *);                          /* msdos.c */
+#if (!defined(__DJGPP__) || (__DJGPP__ < 2))
+   unsigned _dos_setftime(int, unsigned, unsigned);               /* msdos.c */
+   unsigned _dos_setfileattr(const char *, unsigned);             /* msdos.c */
+   unsigned _dos_creat(const char *, unsigned, int *);            /* msdos.c */
+   void _dos_getdrive(unsigned *);                                /* msdos.c */
+   unsigned _dos_close(int);                                      /* msdos.c */
+#endif /* !__DJGPP__ || (__DJGPP__ < 2) */
+#endif /* __GO32__ || __EMX__ */
+#endif
+
+/*---------------------------------------------------------------------------
+    OS/2-only functions:
+  ---------------------------------------------------------------------------*/
+
+#ifdef OS2   /* GetFileTime conflicts with something in Win32 header files */
+#if (defined(REENTRANT) && defined(USETHREADID))
+   ulg   GetThreadId          OF((void));
+#endif
+   int   GetCountryInfo       OF((void));                           /* os2.c */
+   long  GetFileTime          OF((ZCONST char *name));              /* os2.c */
+/* static void  SetPathAttrTimes OF((__GPRO__ int flags, int dir));    os2.c */
+/* static int   SetEAs        OF((__GPRO__ const char *path,
+                                  void *eablock));                     os2.c */
+/* static int   SetACL        OF((__GPRO__ const char *path,
+                                  void *eablock));                     os2.c */
+/* static int   IsFileNameValid OF((const char *name));                os2.c */
+/* static void  map2fat       OF((char *pathcomp, char **pEndFAT));    os2.c */
+/* static int   SetLongNameEA OF((char *name, char *longname));        os2.c */
+/* static void  InitNLS       OF((void));                              os2.c */
+   int   IsUpperNLS           OF((int nChr));                       /* os2.c */
+   int   ToLowerNLS           OF((int nChr));                       /* os2.c */
+   void  DebugMalloc          OF((void));                           /* os2.c */
+#endif
+
+/*---------------------------------------------------------------------------
+    QDOS-only functions:
+  ---------------------------------------------------------------------------*/
+
+#ifdef QDOS
+   int    QMatch              (uch, uch);
+   void   QFilename           (__GPRO__ char *);
+   char  *Qstrfix             (char *);
+   int    QReturn             (int zip_error);
+#endif
+
+/*---------------------------------------------------------------------------
+    TOPS20-only functions:
+  ---------------------------------------------------------------------------*/
+
+#ifdef TOPS20
+   int    upper               OF((char *s));                     /* tops20.c */
+   int    enquote             OF((char *s));                     /* tops20.c */
+   int    dequote             OF((char *s));                     /* tops20.c */
+   int    fnlegal             OF(()); /* error if prototyped? */ /* tops20.c */
+#endif
+
+/*---------------------------------------------------------------------------
+    VM/CMS- and MVS-only functions:
+  ---------------------------------------------------------------------------*/
+
+#ifdef CMS_MVS
+   extent getVMMVSexfield     OF((char *type, uch *ef_block, unsigned datalen));
+   FILE  *vmmvs_open_infile   OF((__GPRO));                       /* vmmvs.c */
+   void   close_infile        OF((__GPRO));                       /* vmmvs.c */
+#endif
+
+/*---------------------------------------------------------------------------
+    VMS-only functions:
+  ---------------------------------------------------------------------------*/
+
+#ifdef VMS
+   int    check_format        OF((__GPRO));                         /* vms.c */
+/* int    open_outfile        OF((__GPRO));           * (see fileio.c) vms.c */
+/* int    flush               OF((__GPRO__ uch *rawbuf, unsigned size,
+                                  int final_flag));   * (see fileio.c) vms.c */
+   char  *vms_msg_text        OF((void));                           /* vms.c */
+#ifdef RETURN_CODES
+   void   return_VMS          OF((__GPRO__ int zip_error));         /* vms.c */
+#else
+   void   return_VMS          OF((int zip_error));                  /* vms.c */
+#endif
+#ifdef VMSCLI
+   ulg    vms_unzip_cmdline   OF((int *, char ***));            /* cmdline.c */
+   int    VMSCLI_usage        OF((__GPRO__ int error));         /* cmdline.c */
+#endif
+#endif
+
+/*---------------------------------------------------------------------------
+    WIN32-only functions:
+  ---------------------------------------------------------------------------*/
+
+#ifdef WIN32
+   int   IsWinNT        OF((void));                               /* win32.c */
+#ifdef NTSD_EAS
+   void  process_defer_NT     OF((__GPRO));                       /* win32.c */
+   int   test_NTSD      OF((__GPRO__ uch *eb, unsigned eb_size,
+                            uch *eb_ucptr, ulg eb_ucsize));       /* win32.c */
+#  define TEST_NTSD     test_NTSD
+#endif
+#ifdef W32_STAT_BANDAID
+   int   zstat_win32    OF((__W32STAT_GLOBALS__
+                            const char *path, z_stat *buf));      /* win32.c */
+#endif
+#endif
+
+/*---------------------------------------------------------------------------
+    Miscellaneous/shared functions:
+  ---------------------------------------------------------------------------*/
+
+Uz_Globs *globalsCtor    OF((void));                            /* globals.c */
+
+int      envargs         OF((int *Pargc, char ***Pargv,
+                             ZCONST char *envstr, ZCONST char *envstr2));
+                                                                /* envargs.c */
+void     mksargs         OF((int *argcp, char ***argvp));       /* envargs.c */
+
+int      match           OF((ZCONST char *s, ZCONST char *p,
+                             int ic __WDLPRO));                   /* match.c */
+int      iswild          OF((ZCONST char *p));                    /* match.c */
+
+/* declarations of public CRC-32 functions have been moved into crc32.h
+   (free_crc_table(), get_crc_table(), crc32())                      crc32.c */
+
+int      dateformat      OF((void));                                /* local */
+char     dateseparator   OF((void));                                /* local */
+#ifndef WINDLL
+   void  version         OF((__GPRO));                              /* local */
+#endif
+int      mapattr         OF((__GPRO));                              /* local */
+int      mapname         OF((__GPRO__ int renamed));                /* local */
+int      checkdir        OF((__GPRO__ char *pathcomp, int flag));   /* local */
+char    *do_wild         OF((__GPRO__ ZCONST char *wildzipfn));     /* local */
+char    *GetLoadPath     OF((__GPRO));                              /* local */
+#if (defined(MORE) && (defined(ATH_BEO_UNX) || defined(QDOS) || defined(VMS)))
+   int screensize        OF((int *tt_rows, int *tt_cols));          /* local */
+# if defined(VMS)
+   int screenlinewrap    OF((void));                                /* local */
+# endif
+#endif /* MORE && (ATH_BEO_UNX || QDOS || VMS) */
+#ifdef OS2_W32
+   int   SetFileSize     OF((FILE *file, zusz_t filesize));         /* local */
+#endif
+#ifndef MTS /* macro in MTS */
+   int  close_outfile   OF((__GPRO));                              /* local */
+#endif
+#ifdef SET_SYMLINK_ATTRIBS
+   int  set_symlnk_attribs  OF((__GPRO__ slinkentry *slnk_entry));  /* local */
+#endif
+#ifdef SET_DIR_ATTRIB
+   int   defer_dir_attribs  OF((__GPRO__ direntry **pd));           /* local */
+   int   set_direc_attribs  OF((__GPRO__ direntry *d));             /* local */
+#endif
+#ifdef TIMESTAMP
+# ifdef WIN32
+   int   stamp_file      OF((__GPRO__
+                             ZCONST char *fname, time_t modtime));  /* local */
+# else
+   int   stamp_file      OF((ZCONST char *fname, time_t modtime));  /* local */
+# endif
+#endif
+#ifdef NEED_ISO_OEM_INIT
+   void  prepare_ISO_OEM_translat   OF((__GPRO));                   /* local */
+#endif
+#if (defined(MALLOC_WORK) && defined(MY_ZCALLOC))
+   zvoid far *zcalloc    OF((unsigned int, unsigned int));
+   zvoid zcfree          OF((zvoid far *));
+#endif /* MALLOC_WORK && MY_ZCALLOC */
+#ifdef SYSTEM_SPECIFIC_CTOR
+   void  SYSTEM_SPECIFIC_CTOR   OF((__GPRO));                       /* local */
+#endif
+#ifdef SYSTEM_SPECIFIC_DTOR
+   void  SYSTEM_SPECIFIC_DTOR   OF((__GPRO));                       /* local */
+#endif
+
+
+
+
+
+/************/
+/*  Macros  */
+/************/
+
+#ifndef MAX
+#  define MAX(a,b)   ((a) > (b) ? (a) : (b))
+#endif
+#ifndef MIN
+#  define MIN(a,b)   ((a) < (b) ? (a) : (b))
+#endif
+
+#ifdef DEBUG
+#  if (defined(THEOS) && defined(NO_BOGUS_SPC))
+#    define NO_DEBUG_IN_MACROS
+#    define Trace(x)   _fprintf x
+#  else
+#    define Trace(x)   fprintf x
+#  endif
+#else
+#  define Trace(x)
+#endif
+
+#ifdef DEBUG_TIME
+#  define TTrace(x)  fprintf x
+#else
+#  define TTrace(x)
+#endif
+
+#ifdef NO_DEBUG_IN_MACROS
+#  define MTrace(x)
+#else
+#  define MTrace(x)  Trace(x)
+#endif
+
+#if (defined(UNIX) || defined(T20_VMS)) /* generally old systems */
+#  define ToLower(x)   ((char)(isupper((int)x)? tolower((int)x) : x))
+#else
+#  define ToLower      tolower          /* assumed "smart"; used in match() */
+#endif
+
+#ifdef USE_STRM_INPUT
+   /* ``Replace'' the unbuffered UNIX style I/O function with similar
+    * standard C functions from <stdio.h>.
+    */
+#  define read(fd,buf,n) fread((buf),1,(n),(FILE *)(fd))
+#  ifdef zlseek
+#    undef zlseek
+#  endif
+#  define zlseek(fd,o,w) zfseeko((FILE *)(fd),(o),(w))
+#  define close(fd) fclose((FILE *)(fd))
+#endif /* USE_STRM_INPUT */
+
+/* The return value of the Info() "macro function" is never checked in
+ * UnZip. Otherwise, to get the same behaviour as for (*G.message)(), the
+ * Info() definition for "FUNZIP" would have to be corrected:
+ * #define Info(buf,flag,sprf_arg) \
+ *      (fputs((char *)(sprintf sprf_arg, (buf)), \
+ *             (flag)&1? stderr : stdout) < 0)
+ */
+#ifndef Info   /* may already have been defined for redirection */
+#  ifdef FUNZIP
+#    define Info(buf,flag,sprf_arg) \
+     fputs((char *)(sprintf sprf_arg, (buf)), (flag)&1? stderr : stdout)
+#  else
+#    ifdef INT_SPRINTF  /* optimized version for "int sprintf()" flavour */
+#      define Info(buf,flag,sprf_arg) \
+       (*G.message)((zvoid *)&G, (uch *)(buf), (ulg)sprintf sprf_arg, (flag))
+#    else          /* generic version, does not use sprintf() return value */
+#      define Info(buf,flag,sprf_arg) \
+       (*G.message)((zvoid *)&G, (uch *)(buf), \
+                     (ulg)(sprintf sprf_arg, strlen((char *)(buf))), (flag))
+#    endif
+#  endif
+#endif /* !Info */
+
+/*  This wrapper macro around fzofft() is just defined to "hide" the
+ *  argument needed to reference the global storage buffers.
+ */
+#define FmZofft(val, pre, post) fzofft(__G__ val, pre, post)
+
+/*  The following macro wrappers around the fnfilter function are used many
+ *  times to prepare archive entry names or name components for displaying
+ *  listings and (warning/error) messages. They use sections in the upper half
+ *  of 'slide' as buffer, since their output is normally fed through the
+ *  Info() macro with 'slide' (the start of this area) as message buffer.
+ */
+#define FnFilter1(fname) \
+        fnfilter((fname), slide + (extent)(WSIZE>>1), (extent)(WSIZE>>2))
+#define FnFilter2(fname) \
+        fnfilter((fname), slide + (extent)((WSIZE>>1) + (WSIZE>>2)),\
+                 (extent)(WSIZE>>2))
+
+#ifndef FUNZIP   /* used only in inflate.c */
+#  define MESSAGE(str,len,flag)  (*G.message)((zvoid *)&G,(str),(len),(flag))
+#endif
+
+#if 0            /* Optimization: use the (const) result of crc32(0L,NULL,0) */
+#  define CRCVAL_INITIAL  crc32(0L, NULL, 0)
+#else
+#  define CRCVAL_INITIAL  0L
+#endif
+
+#ifdef SYMLINKS
+   /* This macro defines the Zip "made by" hosts that are considered
+      to support storing symbolic link entries. */
+#  define SYMLINK_HOST(hn) ((hn) == UNIX_ || (hn) == ATARI_ || \
+      (hn) == ATHEOS_ || (hn) == BEOS_ || (hn) == VMS_)
+#endif
+
+#ifndef TEST_NTSD               /* "NTSD valid?" checking function */
+#  define TEST_NTSD     NULL    /*   ... is not available */
+#endif
+
+#define SKIP_(length) if(length&&((error=do_string(__G__ length,SKIP))!=0))\
+  {error_in_archive=error; if(error>1) return error;}
+
+/*
+ *  Skip a variable-length field, and report any errors.  Used in zipinfo.c
+ *  and unzip.c in several functions.
+ *
+ *  macro SKIP_(length)
+ *      ush length;
+ *  {
+ *      if (length && ((error = do_string(length, SKIP)) != 0)) {
+ *          error_in_archive = error;   /-* might be warning *-/
+ *          if (error > 1)              /-* fatal *-/
+ *              return (error);
+ *      }
+ *  }
+ *
+ */
+
+
+#ifdef FUNZIP
+#  define FLUSH(w)  flush(__G__ (ulg)(w))
+#  define NEXTBYTE  getc(G.in)   /* redefined in crypt.h if full version */
+#else
+#  define FLUSH(w)  ((G.mem_mode) ? memflush(__G__ redirSlide,(ulg)(w)) \
+                                  : flush(__G__ redirSlide,(ulg)(w),0))
+#  define NEXTBYTE  (G.incnt-- > 0 ? (int)(*G.inptr++) : readbyte(__G))
+#endif
+
+
+#define READBITS(nbits,zdest) {if(nbits>G.bits_left) {int temp; G.zipeof=1;\
+  while (G.bits_left<=8*(int)(sizeof(G.bitbuf)-1) && (temp=NEXTBYTE)!=EOF) {\
+  G.bitbuf|=(ulg)temp<<G.bits_left; G.bits_left+=8; G.zipeof=0;}}\
+  zdest=(shrint)((unsigned)G.bitbuf&mask_bits[nbits]);G.bitbuf>>=nbits;\
+  G.bits_left-=nbits;}
+
+/*
+ * macro READBITS(nbits,zdest)    * only used by unreduce and unshrink *
+ *  {
+ *      if (nbits > G.bits_left) {  * fill G.bitbuf, 8*sizeof(ulg) bits *
+ *          int temp;
+ *
+ *          G.zipeof = 1;
+ *          while (G.bits_left <= 8*(int)(sizeof(G.bitbuf)-1) &&
+ *                 (temp = NEXTBYTE) != EOF) {
+ *              G.bitbuf |= (ulg)temp << G.bits_left;
+ *              G.bits_left += 8;
+ *              G.zipeof = 0;
+ *          }
+ *      }
+ *      zdest = (shrint)((unsigned)G.bitbuf & mask_bits[nbits]);
+ *      G.bitbuf >>= nbits;
+ *      G.bits_left -= nbits;
+ *  }
+ *
+ */
+
+
+/* GRR:  should use StringLower for STRLOWER macro if possible */
+
+/*
+ *  Copy the zero-terminated string in str1 into str2, converting any
+ *  uppercase letters to lowercase as we go.  str2 gets zero-terminated
+ *  as well, of course.  str1 and str2 may be the same character array.
+ */
+#ifdef _MBCS
+#  define STRLOWER(str1, str2) \
+   { \
+       char  *p, *q, c; unsigned i; \
+       p = (char *)(str1); \
+       q = (char *)(str2); \
+       while ((c = *p) != '\0') { \
+           if ((i = CLEN(p)) > 1) { \
+               while (i--) *q++ = *p++; \
+           } else { \
+               *q++ = (char)(isupper((int)(c))? tolower((int)(c)) : c); \
+               p++; \
+           } \
+       } \
+       *q = '\0'; \
+   }
+#else
+#  define STRLOWER(str1, str2) \
+   { \
+       char  *p, *q; \
+       p = (char *)(str1) - 1; \
+       q = (char *)(str2); \
+       while (*++p) \
+           *q++ = (char)(isupper((int)(*p))? tolower((int)(*p)) : *p); \
+       *q = '\0'; \
+   }
+#endif
+/*
+ *  NOTES:  This macro makes no assumptions about the characteristics of
+ *    the tolower() function or macro (beyond its existence), nor does it
+ *    make assumptions about the structure of the character set (i.e., it
+ *    should work on EBCDIC machines, too).  The fact that either or both
+ *    of isupper() and tolower() may be macros has been taken into account;
+ *    watch out for "side effects" (in the C sense) when modifying this
+ *    macro.
+ */
+
+#ifndef foreign
+#  define foreign(c)  (c)
+#endif
+
+#ifndef native
+#  define native(c)   (c)
+#  define A_TO_N(str1)
+#else
+#  ifndef NATIVE
+#    define NATIVE     "native chars"
+#  endif
+#  define A_TO_N(str1) {register uch *p;\
+     for (p=(uch *)(str1); *p; p++) *p=native(*p);}
+#endif
+/*
+ *  Translate the zero-terminated string in str1 from ASCII to the native
+ *  character set. The translation is performed in-place and uses the
+ *  "native" macro to translate each character.
+ *
+ *  NOTE:  Using the "native" macro means that is it the only part of unzip
+ *    which knows which translation table (if any) is actually in use to
+ *    produce the native character set.  This makes adding new character set
+ *    translation tables easy, insofar as all that is needed is an appropriate
+ *    "native" macro definition and the translation table itself.  Currently,
+ *    the only non-ASCII native character set implemented is EBCDIC, but this
+ *    may not always be so.
+ */
+
+
+/* default setup for internal codepage: assume ISO 8859-1 compatibility!! */
+#if (!defined(NATIVE) && !defined(CRTL_CP_IS_ISO) && !defined(CRTL_CP_IS_OEM))
+#  define CRTL_CP_IS_ISO
+#endif
+
+
+/*  Translate "extended ASCII" chars (OEM coding for DOS and OS/2; else
+ *  ISO-8859-1 [ISO Latin 1, Win Ansi,...]) into the internal "native"
+ *  code page.  As with A_TO_N(), conversion is done in place.
+ */
+#ifndef _ISO_INTERN
+#  ifdef CRTL_CP_IS_OEM
+#    ifndef IZ_ISO2OEM_ARRAY
+#      define IZ_ISO2OEM_ARRAY
+#    endif
+#    define _ISO_INTERN(str1) if (iso2oem) {register uch *p;\
+       for (p=(uch *)(str1); *p; p++)\
+         *p = native((*p & 0x80) ? iso2oem[*p & 0x7f] : *p);}
+#  else
+#    define _ISO_INTERN(str1)   A_TO_N(str1)
+#  endif
+#endif
+
+#ifndef _OEM_INTERN
+#  ifdef CRTL_CP_IS_OEM
+#    define _OEM_INTERN(str1)   A_TO_N(str1)
+#  else
+#    ifndef IZ_OEM2ISO_ARRAY
+#      define IZ_OEM2ISO_ARRAY
+#    endif
+#    define _OEM_INTERN(str1) if (oem2iso) {register uch *p;\
+       for (p=(uch *)(str1); *p; p++)\
+         *p = native((*p & 0x80) ? oem2iso[*p & 0x7f] : *p);}
+#  endif
+#endif
+
+#ifndef STR_TO_ISO
+#  ifdef CRTL_CP_IS_ISO
+#    define STR_TO_ISO          strcpy
+#  else
+#    define STR_TO_ISO          str2iso
+#    define NEED_STR2ISO
+#  endif
+#endif
+
+#ifndef STR_TO_OEM
+#  ifdef CRTL_CP_IS_OEM
+#    define STR_TO_OEM          strcpy
+#  else
+#    define STR_TO_OEM          str2oem
+#    define NEED_STR2OEM
+#  endif
+#endif
+
+#if (!defined(INTERN_TO_ISO) && !defined(ASCII2ISO))
+#  ifdef CRTL_CP_IS_OEM
+     /* know: "ASCII" is "OEM" */
+#    define ASCII2ISO(c) \
+       ((((c) & 0x80) && oem2iso) ? oem2iso[(c) & 0x7f] : (c))
+#    if (defined(NEED_STR2ISO) && !defined(CRYP_USES_OEM2ISO))
+#      define CRYP_USES_OEM2ISO
+#    endif
+#  else
+     /* assume: "ASCII" is "ISO-ANSI" */
+#    define ASCII2ISO(c) (c)
+#  endif
+#endif
+
+#if (!defined(INTERN_TO_OEM) && !defined(ASCII2OEM))
+#  ifdef CRTL_CP_IS_OEM
+     /* know: "ASCII" is "OEM" */
+#    define ASCII2OEM(c) (c)
+#  else
+     /* assume: "ASCII" is "ISO-ANSI" */
+#    define ASCII2OEM(c) \
+       ((((c) & 0x80) && iso2oem) ? iso2oem[(c) & 0x7f] : (c))
+#    if (defined(NEED_STR2OEM) && !defined(CRYP_USES_ISO2OEM))
+#      define CRYP_USES_ISO2OEM
+#    endif
+#  endif
+#endif
+
+/* codepage conversion setup for testp() in crypt.c */
+#ifdef CRTL_CP_IS_ISO
+#  ifndef STR_TO_CP2
+#    define STR_TO_CP2  STR_TO_OEM
+#  endif
+#else
+#  ifdef CRTL_CP_IS_OEM
+#    ifndef STR_TO_CP2
+#      define STR_TO_CP2  STR_TO_ISO
+#    endif
+#  else /* native internal CP is neither ISO nor OEM */
+#    ifndef STR_TO_CP1
+#      define STR_TO_CP1  STR_TO_ISO
+#    endif
+#    ifndef STR_TO_CP2
+#      define STR_TO_CP2  STR_TO_OEM
+#    endif
+#  endif
+#endif
+
+
+/* Convert filename (and file comment string) into "internal" charset.
+ * This macro assumes that Zip entry filenames are coded in OEM (IBM DOS)
+ * codepage when made on
+ *  -> DOS (this includes 16-bit Windows 3.1)  (FS_FAT_)
+ *  -> OS/2                                    (FS_HPFS_)
+ *  -> Win95/WinNT with Nico Mak's WinZip      (FS_NTFS_ && hostver == "5.0")
+ * EXCEPTIONS:
+ *  PKZIP for Windows 2.5, 2.6, and 4.0 flag their entries as "FS_FAT_", but
+ *  the filename stored in the local header is coded in Windows ANSI (CP 1252
+ *  resp. ISO 8859-1 on US and western Europe locale settings).
+ *  Likewise, PKZIP for UNIX 2.51 flags its entries as "FS_FAT_", but the
+ *  filenames stored in BOTH the local and the central header are coded
+ *  in the local system's codepage (usually ANSI codings like ISO 8859-1).
+ *
+ * All other ports are assumed to code zip entry filenames in ISO 8859-1.
+ */
+#ifndef Ext_ASCII_TO_Native
+#  define Ext_ASCII_TO_Native(string, hostnum, hostver, isuxatt, islochdr) \
+    if (((hostnum) == FS_FAT_ && \
+         !(((islochdr) || (isuxatt)) && \
+           ((hostver) == 25 || (hostver) == 26 || (hostver) == 40))) || \
+        (hostnum) == FS_HPFS_ || \
+        ((hostnum) == FS_NTFS_ /* && (hostver) == 50 */ )) { \
+        _OEM_INTERN((string)); \
+    } else { \
+        _ISO_INTERN((string)); \
+    }
+#endif
+
+
+
+/**********************/
+/*  Global constants  */
+/**********************/
+
+   extern ZCONST unsigned near mask_bits[17];
+   extern ZCONST char *fnames[2];
+
+#ifdef EBCDIC
+   extern ZCONST uch ebcdic[];
+#endif
+#ifdef IZ_ISO2OEM_ARRAY
+   extern ZCONST uch Far *iso2oem;
+   extern ZCONST uch Far iso2oem_850[];
+#endif
+#ifdef IZ_OEM2ISO_ARRAY
+   extern ZCONST uch Far *oem2iso;
+   extern ZCONST uch Far oem2iso_850[];
+#endif
+
+   extern ZCONST char Far  VersionDate[];
+   extern ZCONST char Far  CentSigMsg[];
+#ifndef SFX
+   extern ZCONST char Far  EndSigMsg[];
+#endif
+   extern ZCONST char Far  SeekMsg[];
+   extern ZCONST char Far  FilenameNotMatched[];
+   extern ZCONST char Far  ExclFilenameNotMatched[];
+   extern ZCONST char Far  ReportMsg[];
+
+#ifndef SFX
+   extern ZCONST char Far  Zipnfo[];
+   extern ZCONST char Far  CompiledWith[];
+#endif /* !SFX */
+
+
+
+/***********************************/
+/*  Global (shared?) RTL variables */
+/***********************************/
+
+#ifdef DECLARE_ERRNO
+   extern int             errno;
+#endif
+
+/*---------------------------------------------------------------------
+    Unicode Support
+    28 August 2005
+  ---------------------------------------------------------------------*/
+#if (defined(UNICODE_SUPPORT) && defined(UNICODE_WCHAR))
+
+  /* Default character when a zwchar too big for wchar_t */
+# define zwchar_to_wchar_t_default_char '_'
+
+  /* Default character string when wchar_t does not convert to mb */
+# define wide_to_mb_default_string "_"
+
+  /* wide character type */
+  typedef unsigned long zwchar;
+
+  /* UTF-8 related conversion functions, currently found in process.c */
+
+# if 0 /* currently unused */
+  /* check if string is all ASCII */
+  int is_ascii_string OF((ZCONST char *mbstring));
+# endif /* unused */
+
+  /* convert UTF-8 string to multi-byte string */
+  char *utf8_to_local_string OF((ZCONST char *utf8_string, int escape_all));
+
+  /* convert UTF-8 string to wide string */
+  zwchar *utf8_to_wide_string OF((ZCONST char *utf8_string));
+
+  /* convert wide string to multi-byte string */
+  char *wide_to_local_string OF((ZCONST zwchar *wide_string, int escape_all));
+
+# if 0 /* currently unused */
+  /* convert local string to multi-byte display string */
+  char *local_to_display_string OF((ZCONST char *local_string));
+# endif /* unused */
+
+  /* convert wide character to escape string */
+  char *wide_to_escape_string OF((unsigned long));
+
+# define utf8_to_escaped_string(utf8_string) \
+         utf8_to_local_string(utf8_string, TRUE)
+
+# if 0 /* currently unused */
+  /* convert escape string to wide character */
+  unsigned long escape_string_to_wide OF((ZCONST char *escape_string));
+
+  /* convert local to UTF-8 */
+  char *local_to_utf8_string OF ((ZCONST char *local_string));
+
+  /* convert local to wide string */
+  zwchar *local_to_wide_string OF ((ZCONST char *local_string));
+
+  /* convert wide string to UTF-8 */
+  char *wide_to_utf8_string OF((ZCONST zwchar *wide_string));
+# endif /* unused */
+
+#endif /* UNICODE_SUPPORT && UNICODE_WCHAR */
+
+
+#endif /* !__unzpriv_h */
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/zipinfo.c
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/zipinfo.c	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new/zipinfo.c	(revision 5)
@@ -0,0 +1,2394 @@
+/*
+  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2009-Jan-02 or later
+  (the contents of which are also included in unzip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*---------------------------------------------------------------------------
+
+  zipinfo.c                                              Greg Roelofs et al.
+
+  This file contains all of the ZipInfo-specific listing routines for UnZip.
+
+  Contains:  zi_opts()
+             zi_end_central()
+             zipinfo()
+             zi_long()
+             zi_short()
+             zi_time()
+
+  ---------------------------------------------------------------------------*/
+
+
+#define UNZIP_INTERNAL
+#include "unzip.h"
+
+
+#ifndef NO_ZIPINFO  /* strings use up too much space in small-memory systems */
+
+/* Define OS-specific attributes for use on ALL platforms--the S_xxxx
+ * versions of these are defined differently (or not defined) by different
+ * compilers and operating systems. */
+
+#define UNX_IFMT       0170000     /* Unix file type mask */
+#define UNX_IFREG      0100000     /* Unix regular file */
+#define UNX_IFSOCK     0140000     /* Unix socket (BSD, not SysV or Amiga) */
+#define UNX_IFLNK      0120000     /* Unix symbolic link (not SysV, Amiga) */
+#define UNX_IFBLK      0060000     /* Unix block special       (not Amiga) */
+#define UNX_IFDIR      0040000     /* Unix directory */
+#define UNX_IFCHR      0020000     /* Unix character special   (not Amiga) */
+#define UNX_IFIFO      0010000     /* Unix fifo    (BCC, not MSC or Amiga) */
+#define UNX_ISUID      04000       /* Unix set user id on execution */
+#define UNX_ISGID      02000       /* Unix set group id on execution */
+#define UNX_ISVTX      01000       /* Unix directory permissions control */
+#define UNX_ENFMT      UNX_ISGID   /* Unix record locking enforcement flag */
+#define UNX_IRWXU      00700       /* Unix read, write, execute: owner */
+#define UNX_IRUSR      00400       /* Unix read permission: owner */
+#define UNX_IWUSR      00200       /* Unix write permission: owner */
+#define UNX_IXUSR      00100       /* Unix execute permission: owner */
+#define UNX_IRWXG      00070       /* Unix read, write, execute: group */
+#define UNX_IRGRP      00040       /* Unix read permission: group */
+#define UNX_IWGRP      00020       /* Unix write permission: group */
+#define UNX_IXGRP      00010       /* Unix execute permission: group */
+#define UNX_IRWXO      00007       /* Unix read, write, execute: other */
+#define UNX_IROTH      00004       /* Unix read permission: other */
+#define UNX_IWOTH      00002       /* Unix write permission: other */
+#define UNX_IXOTH      00001       /* Unix execute permission: other */
+
+#define VMS_IRUSR      UNX_IRUSR   /* VMS read/owner */
+#define VMS_IWUSR      UNX_IWUSR   /* VMS write/owner */
+#define VMS_IXUSR      UNX_IXUSR   /* VMS execute/owner */
+#define VMS_IRGRP      UNX_IRGRP   /* VMS read/group */
+#define VMS_IWGRP      UNX_IWGRP   /* VMS write/group */
+#define VMS_IXGRP      UNX_IXGRP   /* VMS execute/group */
+#define VMS_IROTH      UNX_IROTH   /* VMS read/other */
+#define VMS_IWOTH      UNX_IWOTH   /* VMS write/other */
+#define VMS_IXOTH      UNX_IXOTH   /* VMS execute/other */
+
+#define AMI_IFMT       06000       /* Amiga file type mask */
+#define AMI_IFDIR      04000       /* Amiga directory */
+#define AMI_IFREG      02000       /* Amiga regular file */
+#define AMI_IHIDDEN    00200       /* to be supported in AmigaDOS 3.x */
+#define AMI_ISCRIPT    00100       /* executable script (text command file) */
+#define AMI_IPURE      00040       /* allow loading into resident memory */
+#define AMI_IARCHIVE   00020       /* not modified since bit was last set */
+#define AMI_IREAD      00010       /* can be opened for reading */
+#define AMI_IWRITE     00004       /* can be opened for writing */
+#define AMI_IEXECUTE   00002       /* executable image, a loadable runfile */
+#define AMI_IDELETE    00001       /* can be deleted */
+
+#define THS_IFMT    0xF000         /* Theos file type mask */
+#define THS_IFIFO   0x1000         /* pipe */
+#define THS_IFCHR   0x2000         /* char device */
+#define THS_IFSOCK  0x3000         /* socket */
+#define THS_IFDIR   0x4000         /* directory */
+#define THS_IFLIB   0x5000         /* library */
+#define THS_IFBLK   0x6000         /* block device */
+#define THS_IFREG   0x8000         /* regular file */
+#define THS_IFREL   0x9000         /* relative (direct) */
+#define THS_IFKEY   0xA000         /* keyed */
+#define THS_IFIND   0xB000         /* indexed */
+#define THS_IFRND   0xC000         /* ???? */
+#define THS_IFR16   0xD000         /* 16 bit real mode program */
+#define THS_IFP16   0xE000         /* 16 bit protected mode prog */
+#define THS_IFP32   0xF000         /* 32 bit protected mode prog */
+#define THS_IMODF   0x0800         /* modified */
+#define THS_INHID   0x0400         /* not hidden */
+#define THS_IEUSR   0x0200         /* erase permission: owner */
+#define THS_IRUSR   0x0100         /* read permission: owner */
+#define THS_IWUSR   0x0080         /* write permission: owner */
+#define THS_IXUSR   0x0040         /* execute permission: owner */
+#define THS_IROTH   0x0004         /* read permission: other */
+#define THS_IWOTH   0x0002         /* write permission: other */
+#define THS_IXOTH   0x0001         /* execute permission: other */
+
+#ifdef OLD_THEOS_EXTRA
+#  include "theos/oldstat.h"
+#endif
+
+#ifndef NSK_UNSTRUCTURED
+# define NSK_UNSTRUCTURED   0
+#endif
+#ifndef NSK_OBJECTFILECODE
+# define NSK_OBJECTFILECODE 100
+#endif
+#ifndef NSK_EDITFILECODE
+# define NSK_EDITFILECODE   101
+#endif
+
+#define LFLAG  3   /* short "ls -l" type listing */
+
+static int   zi_long   OF((__GPRO__ zusz_t *pEndprev, int error_in_archive));
+static int   zi_short  OF((__GPRO));
+static void  zi_showMacTypeCreator
+                       OF((__GPRO__ uch *ebfield));
+static char *zi_time   OF((__GPRO__ ZCONST ulg *datetimez,
+                           ZCONST time_t *modtimez, char *d_t_str));
+
+
+/**********************************************/
+/*  Strings used in zipinfo.c (ZipInfo half)  */
+/**********************************************/
+
+static ZCONST char nullStr[] = "";
+static ZCONST char PlurSufx[] = "s";
+
+static ZCONST char Far ZipInfHeader2[] =
+  "Zip file size: %s bytes, number of entries: %s\n";
+static ZCONST char Far EndCentDirRec[] = "\nEnd-of-central-directory record:\n";
+static ZCONST char Far LineSeparators[] = "-------------------------------\n\n";
+static ZCONST char Far ZipFSizeVerbose[] = "\
+  Zip archive file size:               %s (%sh)\n";
+static ZCONST char Far ActOffsetCentDir[] = "\
+  Actual end-cent-dir record offset:   %s (%sh)\n\
+  Expected end-cent-dir record offset: %s (%sh)\n\
+  (based on the length of the central directory and its expected offset)\n\n";
+static ZCONST char Far SinglePartArchive1[] = "\
+  This zipfile constitutes the sole disk of a single-part archive; its\n\
+  central directory contains %s %s.\n\
+  The central directory is %s (%sh) bytes long,\n";
+static ZCONST char Far SinglePartArchive2[] = "\
+  and its (expected) offset in bytes from the beginning of the zipfile\n\
+  is %s (%sh).\n\n";
+static ZCONST char Far MultiPartArchive1[] = "\
+  This zipfile constitutes disk %lu of a multi-part archive.  The central\n\
+  directory starts on disk %lu at an offset within that archive part\n";
+static ZCONST char Far MultiPartArchive2[] = "\
+  of %s (%sh) bytes.  The entire\n\
+  central directory is %s (%sh) bytes long.\n";
+static ZCONST char Far MultiPartArchive3[] = "\
+  %s of the archive entries %s contained within this zipfile volume,\n\
+  out of a total of %s %s.\n\n";
+
+static ZCONST char Far CentralDirEntry[] =
+  "\nCentral directory entry #%lu:\n---------------------------\n\n";
+static ZCONST char Far ZipfileStats[] =
+  "%lu file%s, %s bytes uncompressed, %s bytes compressed:  %s%d.%d%%\n";
+
+/* zi_long() strings */
+static ZCONST char Far OS_FAT[] = "MS-DOS, OS/2 or NT FAT";
+static ZCONST char Far OS_Amiga[] = "Amiga";
+static ZCONST char Far OS_VMS[] = "VMS";
+static ZCONST char Far OS_Unix[] = "Unix";
+static ZCONST char Far OS_VMCMS[] = "VM/CMS";
+static ZCONST char Far OS_AtariST[] = "Atari ST";
+static ZCONST char Far OS_HPFS[] = "OS/2 or NT HPFS";
+static ZCONST char Far OS_Macintosh[] = "Macintosh HFS";
+static ZCONST char Far OS_ZSystem[] = "Z-System";
+static ZCONST char Far OS_CPM[] = "CP/M";
+static ZCONST char Far OS_TOPS20[] = "TOPS-20";
+static ZCONST char Far OS_NTFS[] = "NTFS";
+static ZCONST char Far OS_QDOS[] = "SMS/QDOS";
+static ZCONST char Far OS_Acorn[] = "Acorn RISC OS";
+static ZCONST char Far OS_MVS[] = "MVS";
+static ZCONST char Far OS_VFAT[] = "Win32 VFAT";
+static ZCONST char Far OS_AtheOS[] = "AtheOS";
+static ZCONST char Far OS_BeOS[] = "BeOS";
+static ZCONST char Far OS_Tandem[] = "Tandem NSK";
+static ZCONST char Far OS_Theos[] = "Theos";
+static ZCONST char Far OS_MacDarwin[] = "Mac OS/X (Darwin)";
+#ifdef OLD_THEOS_EXTRA
+  static ZCONST char Far OS_TheosOld[] = "Theos (Old)";
+#endif /* OLD_THEOS_EXTRA */
+
+static ZCONST char Far MthdNone[] = "none (stored)";
+static ZCONST char Far MthdShrunk[] = "shrunk";
+static ZCONST char Far MthdRedF1[] = "reduced (factor 1)";
+static ZCONST char Far MthdRedF2[] = "reduced (factor 2)";
+static ZCONST char Far MthdRedF3[] = "reduced (factor 3)";
+static ZCONST char Far MthdRedF4[] = "reduced (factor 4)";
+static ZCONST char Far MthdImplode[] = "imploded";
+static ZCONST char Far MthdToken[] = "tokenized";
+static ZCONST char Far MthdDeflate[] = "deflated";
+static ZCONST char Far MthdDeflat64[] = "deflated (enhanced-64k)";
+static ZCONST char Far MthdDCLImplode[] = "imploded (PK DCL)";
+static ZCONST char Far MthdBZip2[] = "bzipped";
+static ZCONST char Far MthdLZMA[] = "LZMA-ed";
+static ZCONST char Far MthdTerse[] = "tersed (IBM)";
+static ZCONST char Far MthdLZ77[] = "LZ77-compressed (IBM)";
+static ZCONST char Far MthdWavPack[] = "WavPacked";
+static ZCONST char Far MthdPPMd[] = "PPMd-ed";
+
+static ZCONST char Far DeflNorm[] = "normal";
+static ZCONST char Far DeflMax[] = "maximum";
+static ZCONST char Far DeflFast[] = "fast";
+static ZCONST char Far DeflSFast[] = "superfast";
+
+static ZCONST char Far ExtraBytesPreceding[] =
+  "  There are an extra %s bytes preceding this file.\n\n";
+
+static ZCONST char Far UnknownNo[] = "unknown (%d)";
+
+#ifdef ZIP64_SUPPORT
+  static ZCONST char Far LocalHeaderOffset[] =
+    "\n  offset of local header from start of archive:   %s\n\
+                                                  (%sh) bytes\n";
+#else
+  static ZCONST char Far LocalHeaderOffset[] =
+    "\n  offset of local header from start of archive:   %s (%sh) bytes\n";
+#endif
+static ZCONST char Far HostOS[] =
+  "  file system or operating system of origin:      %s\n";
+static ZCONST char Far EncodeSWVer[] =
+  "  version of encoding software:                   %u.%u\n";
+static ZCONST char Far MinOSCompReq[] =
+  "  minimum file system compatibility required:     %s\n";
+static ZCONST char Far MinSWVerReq[] =
+  "  minimum software version required to extract:   %u.%u\n";
+static ZCONST char Far CompressMethod[] =
+  "  compression method:                             %s\n";
+static ZCONST char Far SlideWindowSizeImplode[] =
+  "  size of sliding dictionary (implosion):         %cK\n";
+static ZCONST char Far ShannonFanoTrees[] =
+  "  number of Shannon-Fano trees (implosion):       %c\n";
+static ZCONST char Far CompressSubtype[] =
+  "  compression sub-type (deflation):               %s\n";
+static ZCONST char Far FileSecurity[] =
+  "  file security status:                           %sencrypted\n";
+static ZCONST char Far ExtendedLocalHdr[] =
+  "  extended local header:                          %s\n";
+static ZCONST char Far FileModDate[] =
+  "  file last modified on (DOS date/time):          %s\n";
+#ifdef USE_EF_UT_TIME
+  static ZCONST char Far UT_FileModDate[] =
+    "  file last modified on (UT extra field modtime): %s %s\n";
+  static ZCONST char Far LocalTime[] = "local";
+#ifndef NO_GMTIME
+  static ZCONST char Far GMTime[] = "UTC";
+#endif
+#endif /* USE_EF_UT_TIME */
+static ZCONST char Far CRC32Value[] =
+  "  32-bit CRC value (hex):                         %.8lx\n";
+static ZCONST char Far CompressedFileSize[] =
+  "  compressed size:                                %s bytes\n";
+static ZCONST char Far UncompressedFileSize[] =
+  "  uncompressed size:                              %s bytes\n";
+static ZCONST char Far FilenameLength[] =
+  "  length of filename:                             %u characters\n";
+static ZCONST char Far ExtraFieldLength[] =
+  "  length of extra field:                          %u bytes\n";
+static ZCONST char Far FileCommentLength[] =
+  "  length of file comment:                         %u characters\n";
+static ZCONST char Far FileDiskNum[] =
+  "  disk number on which file begins:               disk %lu\n";
+static ZCONST char Far ApparentFileType[] =
+  "  apparent file type:                             %s\n";
+static ZCONST char Far VMSFileAttributes[] =
+  "  VMS file attributes (%06o octal):             %s\n";
+static ZCONST char Far AmigaFileAttributes[] =
+  "  Amiga file attributes (%06o octal):           %s\n";
+static ZCONST char Far UnixFileAttributes[] =
+  "  Unix file attributes (%06o octal):            %s\n";
+static ZCONST char Far NonMSDOSFileAttributes[] =
+  "  non-MSDOS external file attributes:             %06lX hex\n";
+static ZCONST char Far MSDOSFileAttributes[] =
+  "  MS-DOS file attributes (%02X hex):                none\n";
+static ZCONST char Far MSDOSFileAttributesRO[] =
+  "  MS-DOS file attributes (%02X hex):                read-only\n";
+static ZCONST char Far MSDOSFileAttributesAlpha[] =
+  "  MS-DOS file attributes (%02X hex):                %s%s%s%s%s%s%s%s\n";
+static ZCONST char Far TheosFileAttributes[] =
+  "  Theos file attributes (%04X hex):               %s\n";
+
+static ZCONST char Far TheosFTypLib[] = "Library     ";
+static ZCONST char Far TheosFTypDir[] = "Directory   ";
+static ZCONST char Far TheosFTypReg[] = "Sequential  ";
+static ZCONST char Far TheosFTypRel[] = "Direct      ";
+static ZCONST char Far TheosFTypKey[] = "Keyed       ";
+static ZCONST char Far TheosFTypInd[] = "Indexed     ";
+static ZCONST char Far TheosFTypR16[] = " 86 program ";
+static ZCONST char Far TheosFTypP16[] = "286 program ";
+static ZCONST char Far TheosFTypP32[] = "386 program ";
+static ZCONST char Far TheosFTypUkn[] = "???         ";
+
+static ZCONST char Far ExtraFieldTrunc[] = "\n\
+  error: EF data block (type 0x%04x) size %u exceeds remaining extra field\n\
+         space %u; block length has been truncated.\n";
+static ZCONST char Far ExtraFields[] = "\n\
+  The central-directory extra field contains:";
+static ZCONST char Far ExtraFieldType[] = "\n\
+  - A subfield with ID 0x%04x (%s) and %u data bytes";
+static ZCONST char Far efPKSZ64[] = "PKWARE 64-bit sizes";
+static ZCONST char Far efAV[] = "PKWARE AV";
+static ZCONST char Far efOS2[] = "OS/2";
+static ZCONST char Far efPKVMS[] = "PKWARE VMS";
+static ZCONST char Far efPKWin32[] = "PKWARE Win32";
+static ZCONST char Far efPKUnix[] = "PKWARE Unix";
+static ZCONST char Far efIZVMS[] = "Info-ZIP VMS";
+static ZCONST char Far efIZUnix[] = "old Info-ZIP Unix/OS2/NT";
+static ZCONST char Far efIZUnix2[] = "Unix UID/GID (16-bit)";
+static ZCONST char Far efIZUnix3[] = "Unix UID/GID (any size)";
+static ZCONST char Far efTime[] = "universal time";
+static ZCONST char Far efU8Path[] = "UTF8 path name";
+static ZCONST char Far efU8Commnt[] = "UTF8 entry comment";
+static ZCONST char Far efJLMac[] = "old Info-ZIP Macintosh";
+static ZCONST char Far efMac3[] = "new Info-ZIP Macintosh";
+static ZCONST char Far efZipIt[] = "ZipIt Macintosh";
+static ZCONST char Far efSmartZip[] = "SmartZip Macintosh";
+static ZCONST char Far efZipIt2[] = "ZipIt Macintosh (short)";
+static ZCONST char Far efVMCMS[] = "VM/CMS";
+static ZCONST char Far efMVS[] = "MVS";
+static ZCONST char Far efACL[] = "OS/2 ACL";
+static ZCONST char Far efNTSD[] = "Security Descriptor";
+static ZCONST char Far efAtheOS[] = "AtheOS";
+static ZCONST char Far efBeOS[] = "BeOS";
+static ZCONST char Far efQDOS[] = "SMS/QDOS";
+static ZCONST char Far efAOSVS[] = "AOS/VS";
+static ZCONST char Far efSpark[] = "Acorn SparkFS";
+static ZCONST char Far efMD5[] = "Fred Kantor MD5";
+static ZCONST char Far efASiUnix[] = "ASi Unix";
+static ZCONST char Far efTandem[] = "Tandem NSK";
+static ZCONST char Far efTheos[] = "Theos";
+static ZCONST char Far efUnknown[] = "unknown";
+
+static ZCONST char Far OS2EAs[] = ".\n\
+    The local extra field has %lu bytes of OS/2 extended attributes.\n\
+    (May not match OS/2 \"dir\" amount due to storage method)";
+static ZCONST char Far izVMSdata[] = ".  The extra\n\
+    field is %s and has %u bytes of VMS %s information%s";
+static ZCONST char Far izVMSstored[] = "stored";
+static ZCONST char Far izVMSrleenc[] = "run-length encoded";
+static ZCONST char Far izVMSdeflat[] = "deflated";
+static ZCONST char Far izVMScunknw[] = "compressed(?)";
+static ZCONST char Far *izVMScomp[4] =
+  {izVMSstored, izVMSrleenc, izVMSdeflat, izVMScunknw};
+static ZCONST char Far ACLdata[] = ".\n\
+    The local extra field has %lu bytes of access control list information";
+static ZCONST char Far NTSDData[] = ".\n\
+    The local extra field has %lu bytes of NT security descriptor data";
+static ZCONST char Far UTdata[] = ".\n\
+    The local extra field has UTC/GMT %s time%s";
+static ZCONST char Far UTmodification[] = "modification";
+static ZCONST char Far UTaccess[] = "access";
+static ZCONST char Far UTcreation[] = "creation";
+static ZCONST char Far U8PthCmnComplete[] = ".\n\
+    The UTF8 data of the extra field (V%u, ASCII name CRC `%.8lx') are:\n   ";
+static ZCONST char Far U8PthCmnF24[] = ". The first\n\
+    24 UTF8 bytes in the extra field (V%u, ASCII name CRC `%.8lx') are:\n   ";
+static ZCONST char Far ZipItFname[] = ".\n\
+    The Mac long filename is %s";
+static ZCONST char Far Mac3data[] = ".\n\
+    The local extra field has %lu bytes of %scompressed Macintosh\n\
+    finder attributes";
+ /* MacOSdata[] is used by EF_MAC3, EF_ZIPIT, EF_ZIPIT2 and EF_JLEE e. f. */
+static ZCONST char Far MacOSdata[] = ".\n\
+    The associated file has type code `%c%c%c%c' and creator code `%c%c%c%c'";
+static ZCONST char Far MacOSdata1[] = ".\n\
+    The associated file has type code `0x%lx' and creator code `0x%lx'";
+static ZCONST char Far MacOSJLEEflags[] = ".\n    File is marked as %s";
+static ZCONST char Far MacOS_RF[] = "Resource-fork";
+static ZCONST char Far MacOS_DF[] = "Data-fork";
+static ZCONST char Far MacOSMAC3flags[] = ".\n\
+    File is marked as %s, File Dates are in %d Bit";
+static ZCONST char Far AtheOSdata[] = ".\n\
+    The local extra field has %lu bytes of %scompressed AtheOS file attributes";
+static ZCONST char Far BeOSdata[] = ".\n\
+    The local extra field has %lu bytes of %scompressed BeOS file attributes";
+ /* The associated file has type code `%c%c%c%c' and creator code `%c%c%c%c'" */
+static ZCONST char Far QDOSdata[] = ".\n\
+    The QDOS extra field subtype is `%c%c%c%c'";
+static ZCONST char Far AOSVSdata[] = ".\n\
+    The AOS/VS extra field revision is %d.%d";
+static ZCONST char Far TandemUnstr[] = "Unstructured";
+static ZCONST char Far TandemRel[]   = "Relative";
+static ZCONST char Far TandemEntry[] = "Entry Sequenced";
+static ZCONST char Far TandemKey[]   = "Key Sequenced";
+static ZCONST char Far TandemEdit[]  = "Edit";
+static ZCONST char Far TandemObj[]  = "Object";
+static ZCONST char Far *TandemFileformat[6] =
+  {TandemUnstr, TandemRel, TandemEntry, TandemKey, TandemEdit, TandemObj};
+static ZCONST char Far Tandemdata[] = ".\n\
+    The file was originally a Tandem %s file, with file code %u";
+static ZCONST char Far MD5data[] = ".\n\
+    The 128-bit MD5 signature is %s";
+#ifdef CMS_MVS
+   static ZCONST char Far VmMvsExtraField[] = ".\n\
+    The stored file open mode (FLDATA TYPE) is \"%s\"";
+   static ZCONST char Far VmMvsInvalid[] = "[invalid]";
+#endif /* CMS_MVS */
+
+static ZCONST char Far First20[] = ".  The first\n    20 are:  ";
+static ZCONST char Far ColonIndent[] = ":\n   ";
+static ZCONST char Far efFormat[] = " %02x";
+
+static ZCONST char Far lExtraFieldType[] = "\n\
+  There %s a local extra field with ID 0x%04x (%s) and\n\
+  %u data bytes (%s).\n";
+static ZCONST char Far efIZuid[] =
+  "GMT modification/access times and Unix UID/GID";
+static ZCONST char Far efIZnouid[] = "GMT modification/access times only";
+
+
+static ZCONST char Far NoFileComment[] = "\n  There is no file comment.\n";
+static ZCONST char Far FileCommBegin[] = "\n\
+------------------------- file comment begins ----------------------------\n";
+static ZCONST char Far FileCommEnd[] = "\
+-------------------------- file comment ends -----------------------------\n";
+
+/* zi_time() strings */
+static ZCONST char Far BogusFmt[] = "%03d";
+static ZCONST char Far shtYMDHMTime[] = "%02u-%s-%02u %02u:%02u";
+static ZCONST char Far lngYMDHMSTime[] = "%u %s %u %02u:%02u:%02u";
+static ZCONST char Far DecimalTime[] = "%04u%02u%02u.%02u%02u%02u";
+#ifdef USE_EF_UT_TIME
+  static ZCONST char Far lngYMDHMSTimeError[] = "???? ??? ?? ??:??:??";
+#endif
+
+
+
+
+
+#ifndef WINDLL
+
+/************************/
+/*  Function zi_opts()  */
+/************************/
+
+int zi_opts(__G__ pargc, pargv)
+    int *pargc;
+    char ***pargv;
+    __GDEF
+{
+    char   **argv, *s;
+    int    argc, c, error=FALSE, negative=0;
+    int    hflag_slmv=TRUE, hflag_2=FALSE;  /* diff options => diff defaults */
+    int    tflag_slm=TRUE, tflag_2v=FALSE;
+    int    explicit_h=FALSE, explicit_t=FALSE;
+
+#ifdef UNIX
+    extern char OEM_CP[MAX_CP_NAME];
+    extern char ISO_CP[MAX_CP_NAME];
+#endif
+
+#ifdef MACOS
+    uO.lflag = LFLAG;         /* reset default on each call */
+#endif
+    G.extract_flag = FALSE;   /* zipinfo does not extract to disk */
+    argc = *pargc;
+    argv = *pargv;
+
+    while (--argc > 0 && (*++argv)[0] == '-') {
+        s = argv[0] + 1;
+        while ((c = *s++) != 0) {    /* "!= 0":  prevent Turbo C warning */
+            switch (c) {
+                case '-':
+                    ++negative;
+                    break;
+                case '1':      /* shortest listing:  JUST filenames */
+                    if (negative)
+                        uO.lflag = -2, negative = 0;
+                    else
+                        uO.lflag = 1;
+                    break;
+                case '2':      /* just filenames, plus headers if specified */
+                    if (negative)
+                        uO.lflag = -2, negative = 0;
+                    else
+                        uO.lflag = 2;
+                    break;
+#ifndef CMS_MVS
+                case ('C'):    /* -C:  match filenames case-insensitively */
+                    if (negative)
+                        uO.C_flag = FALSE, negative = 0;
+                    else
+                        uO.C_flag = TRUE;
+                    break;
+#endif /* !CMS_MVS */
+                case 'h':      /* header line */
+                    if (negative)
+                        hflag_2 = hflag_slmv = FALSE, negative = 0;
+                    else {
+                        hflag_2 = hflag_slmv = explicit_h = TRUE;
+                        if (uO.lflag == -1)
+                            uO.lflag = 0;
+                    }
+                    break;
+#ifdef UNIX
+    			case ('I'):
+                    if (negative) {
+                        Info(slide, 0x401, ((char *)slide,
+                          "error:  encodings can't be negated"));
+                        return(PK_PARAM);
+    				} else {
+    					if(*s) { /* Handle the -Icharset case */
+    						/* Assume that charsets can't start with a dash to spot arguments misuse */
+    						if(*s == '-') { 
+    	                        Info(slide, 0x401, ((char *)slide,
+        		                  "error:  a valid character encoding should follow the -I argument"));
+    	                        return(PK_PARAM); 
+    						}
+    						strncpy(ISO_CP, s, MAX_CP_NAME - 1);
+                ISO_CP[MAX_CP_NAME - 1] = '\0';
+    					} else { /* -I charset */
+    						++argv;
+    						if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
+    	                        Info(slide, 0x401, ((char *)slide,
+        		                  "error:  a valid character encoding should follow the -I argument"));
+    	                        return(PK_PARAM); 
+    						}
+    						s = *argv;
+    						strncpy(ISO_CP, s, MAX_CP_NAME - 1);
+                ISO_CP[MAX_CP_NAME - 1] = '\0';
+    					}
+    					while(*(++s)); /* No params straight after charset name */
+    				}
+    				break;
+#endif /* ?UNIX */
+                case 'l':      /* longer form of "ls -l" type listing */
+                    if (negative)
+                        uO.lflag = -2, negative = 0;
+                    else
+                        uO.lflag = 5;
+                    break;
+                case 'm':      /* medium form of "ls -l" type listing */
+                    if (negative)
+                        uO.lflag = -2, negative = 0;
+                    else
+                        uO.lflag = 4;
+                    break;
+#ifdef MORE
+                case 'M':      /* send output through built-in "more" */
+                    if (negative)
+                        G.M_flag = FALSE, negative = 0;
+                    else
+                        G.M_flag = TRUE;
+                    break;
+#endif
+#ifdef UNIX
+    			case ('O'):
+                    if (negative) {
+                        Info(slide, 0x401, ((char *)slide,
+                          "error:  encodings can't be negated"));
+                        return(PK_PARAM);
+    				} else {
+    					if(*s) { /* Handle the -Ocharset case */
+    						/* Assume that charsets can't start with a dash to spot arguments misuse */
+    						if(*s == '-') { 
+    	                        Info(slide, 0x401, ((char *)slide,
+        		                  "error:  a valid character encoding should follow the -I argument"));
+    	                        return(PK_PARAM); 
+    						}
+    						strncpy(OEM_CP, s, MAX_CP_NAME - 1);
+                OEM_CP[MAX_CP_NAME - 1] = '\0';
+    					} else { /* -O charset */
+    						++argv;
+    						if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
+    	                        Info(slide, 0x401, ((char *)slide,
+        		                  "error:  a valid character encoding should follow the -O argument"));
+    	                        return(PK_PARAM); 
+    						}
+    						s = *argv;
+    						strncpy(OEM_CP, s, MAX_CP_NAME - 1);
+                OEM_CP[MAX_CP_NAME - 1] = '\0';
+    					}
+    					while(*(++s)); /* No params straight after charset name */
+    				}
+    				break;
+#endif /* ?UNIX */
+                case 's':      /* default:  shorter "ls -l" type listing */
+                    if (negative)
+                        uO.lflag = -2, negative = 0;
+                    else
+                        uO.lflag = 3;
+                    break;
+                case 't':      /* totals line */
+                    if (negative)
+                        tflag_2v = tflag_slm = FALSE, negative = 0;
+                    else {
+                        tflag_2v = tflag_slm = explicit_t = TRUE;
+                        if (uO.lflag == -1)
+                            uO.lflag = 0;
+                    }
+                    break;
+                case ('T'):    /* use (sortable) decimal time format */
+                    if (negative)
+                        uO.T_flag = FALSE, negative = 0;
+                    else
+                        uO.T_flag = TRUE;
+                    break;
+#ifdef UNICODE_SUPPORT
+                case ('U'):    /* escape UTF-8, or disable UTF-8 support */
+                    if (negative) {
+                        uO.U_flag = MAX(uO.U_flag-negative,0);
+                        negative = 0;
+                    } else
+                        uO.U_flag++;
+                    break;
+#endif /* UNICODE_SUPPORT */
+                case 'v':      /* turbo-verbose listing */
+                    if (negative)
+                        uO.lflag = -2, negative = 0;
+                    else
+                        uO.lflag = 10;
+                    break;
+#ifdef WILD_STOP_AT_DIR
+                case ('W'):    /* Wildcard interpretation (stop at '/'?) */
+                    if (negative)
+                        uO.W_flag = FALSE, negative = 0;
+                    else
+                        uO.W_flag = TRUE;
+                    break;
+#endif /* WILD_STOP_AT_DIR */
+                case 'z':      /* print zipfile comment */
+                    if (negative)
+                        uO.zflag = negative = 0;
+                    else
+                        uO.zflag = 1;
+                    break;
+                case 'Z':      /* ZipInfo mode:  ignore */
+                    break;
+                default:
+                    error = TRUE;
+                    break;
+            }
+        }
+    }
+    if ((argc-- == 0) || error) {
+        *pargc = argc;
+        *pargv = argv;
+        return USAGE(error);
+    }
+
+#ifdef MORE
+    if (G.M_flag && !isatty(1))  /* stdout redirected: "more" func useless */
+        G.M_flag = 0;
+#endif
+
+    /* if no listing options given (or all negated), or if only -h/-t given
+     * with individual files specified, use default listing format */
+    if ((uO.lflag < 0) || ((argc > 0) && (uO.lflag == 0)))
+        uO.lflag = LFLAG;
+
+    /* set header and totals flags to default or specified values */
+    switch (uO.lflag) {
+        case 0:   /* 0:  can only occur if either -t or -h explicitly given; */
+        case 2:   /*  therefore set both flags equal to normally false value */
+            uO.hflag = hflag_2;
+            uO.tflag = tflag_2v;
+            break;
+        case 1:   /* only filenames, *always* */
+            uO.hflag = FALSE;
+            uO.tflag = FALSE;
+            uO.zflag = FALSE;
+            break;
+        case 3:
+        case 4:
+        case 5:
+            uO.hflag = ((argc > 0) && !explicit_h)? FALSE : hflag_slmv;
+            uO.tflag = ((argc > 0) && !explicit_t)? FALSE : tflag_slm;
+            break;
+        case 10:
+            uO.hflag = hflag_slmv;
+            uO.tflag = tflag_2v;
+            break;
+    }
+
+    *pargc = argc;
+    *pargv = argv;
+    return 0;
+
+} /* end function zi_opts() */
+
+#endif /* !WINDLL */
+
+
+
+
+
+/*******************************/
+/*  Function zi_end_central()  */
+/*******************************/
+
+void zi_end_central(__G)
+    __GDEF
+{
+/*---------------------------------------------------------------------------
+    Print out various interesting things about the zipfile.
+  ---------------------------------------------------------------------------*/
+
+    if (uO.lflag > 9) {
+        /* verbose format */
+        Info(slide, 0, ((char *)slide, LoadFarString(EndCentDirRec)));
+        Info(slide, 0, ((char *)slide, LoadFarString(LineSeparators)));
+
+        Info(slide, 0, ((char *)slide, LoadFarString(ZipFSizeVerbose),
+          FmZofft(G.ziplen, "11", NULL),
+          FmZofft(G.ziplen, FZOFFT_HEX_DOT_WID, "X")));
+        Info(slide, 0, ((char *)slide, LoadFarString(ActOffsetCentDir),
+          FmZofft(G.real_ecrec_offset, "11", "u"),
+          FmZofft(G.real_ecrec_offset, FZOFFT_HEX_DOT_WID, "X"),
+          FmZofft(G.expect_ecrec_offset, "11", "u"),
+          FmZofft(G.expect_ecrec_offset, FZOFFT_HEX_DOT_WID, "X")));
+
+        if (G.ecrec.number_this_disk == 0) {
+            Info(slide, 0, ((char *)slide, LoadFarString(SinglePartArchive1),
+              FmZofft(G.ecrec.total_entries_central_dir, NULL, "u"),
+              (G.ecrec.total_entries_central_dir == 1)? "entry" : "entries",
+              FmZofft(G.ecrec.size_central_directory, NULL, "u"),
+              FmZofft(G.ecrec.size_central_directory,
+                      FZOFFT_HEX_DOT_WID, "X")));
+            Info(slide, 0, ((char *)slide, LoadFarString(SinglePartArchive2),
+              FmZofft(G.ecrec.offset_start_central_directory, NULL, "u"),
+              FmZofft(G.ecrec.offset_start_central_directory,
+                      FZOFFT_HEX_DOT_WID, "X")));
+        } else {
+            Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive1),
+              (ulg)(G.ecrec.number_this_disk + 1),
+              (ulg)(G.ecrec.num_disk_start_cdir + 1)));
+            Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive2),
+              FmZofft(G.ecrec.offset_start_central_directory, NULL, "u"),
+              FmZofft(G.ecrec.offset_start_central_directory,
+                      FZOFFT_HEX_DOT_WID, "X"),
+              FmZofft(G.ecrec.size_central_directory, NULL, "u"),
+              FmZofft(G.ecrec.size_central_directory,
+                      FZOFFT_HEX_DOT_WID, "X")));
+            Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive3),
+              FmZofft(G.ecrec.num_entries_centrl_dir_ths_disk, NULL, "u"),
+              (G.ecrec.num_entries_centrl_dir_ths_disk == 1)? "is" : "are",
+              FmZofft(G.ecrec.total_entries_central_dir, NULL, "u"),
+              (G.ecrec.total_entries_central_dir == 1) ? "entry" : "entries"));
+        }
+    }
+    else if (uO.hflag) {
+        /* print zip file size and number of contained entries: */
+        Info(slide, 0, ((char *)slide, LoadFarString(ZipInfHeader2),
+          FmZofft(G.ziplen, NULL, NULL),
+          FmZofft(G.ecrec.total_entries_central_dir, NULL, "u")));
+    }
+
+} /* end function zi_end_central() */
+
+
+
+
+
+/************************/
+/*  Function zipinfo()  */
+/************************/
+
+int zipinfo(__G)   /* return PK-type error code */
+    __GDEF
+{
+    int do_this_file=FALSE, error, error_in_archive=PK_COOL;
+    int *fn_matched=NULL, *xn_matched=NULL;
+    ulg j, members=0L;
+    zusz_t tot_csize=0L, tot_ucsize=0L;
+    zusz_t endprev;   /* buffers end of previous entry for zi_long()'s check
+                       *  of extra bytes */
+
+
+/*---------------------------------------------------------------------------
+    Malloc space for check on unmatched filespecs (no big deal if one or both
+    are NULL).
+  ---------------------------------------------------------------------------*/
+
+    if (G.filespecs > 0  &&
+        (fn_matched=(int *)malloc(G.filespecs*sizeof(int))) != NULL)
+        for (j = 0;  j < G.filespecs;  ++j)
+            fn_matched[j] = FALSE;
+
+    if (G.xfilespecs > 0  &&
+        (xn_matched=(int *)malloc(G.xfilespecs*sizeof(int))) != NULL)
+        for (j = 0;  j < G.xfilespecs;  ++j)
+            xn_matched[j] = FALSE;
+
+/*---------------------------------------------------------------------------
+    Set file pointer to start of central directory, then loop through cen-
+    tral directory entries.  Check that directory-entry signature bytes are
+    actually there (just a precaution), then process the entry.  We know
+    the entire central directory is on this disk:  we wouldn't have any of
+    this information unless the end-of-central-directory record was on this
+    disk, and we wouldn't have gotten to this routine unless this is also
+    the disk on which the central directory starts.  In practice, this had
+    better be the *only* disk in the archive, but maybe someday we'll add
+    multi-disk support.
+  ---------------------------------------------------------------------------*/
+
+    uO.L_flag = FALSE;      /* zipinfo mode: never convert name to lowercase */
+    G.pInfo = G.info;       /* (re-)initialize, (just to make sure) */
+    G.pInfo->textmode = 0;  /* so one can read on screen (is this ever used?) */
+
+    /* reset endprev for new zipfile; account for multi-part archives (?) */
+    endprev = (G.crec.relative_offset_local_header == 4L)? 4L : 0L;
+
+
+    for (j = 1L;; j++) {
+        if (readbuf(__G__ G.sig, 4) == 0) {
+            error_in_archive = PK_EOF;
+            break;
+        }
+        if (memcmp(G.sig, central_hdr_sig, 4)) {  /* is it a CentDir entry? */
+            /* no new central directory entry
+             * -> is the number of processed entries compatible with the
+             *    number of entries as stored in the end_central record?
+             */
+            if (((j - 1) &
+                 (ulg)(G.ecrec.have_ecr64 ? MASK_ZUCN64 : MASK_ZUCN16))
+                == (ulg)G.ecrec.total_entries_central_dir)
+            {
+                /* "j modulus 4T/64k" matches the reported 64/16-bit-unsigned
+                 * number of directory entries -> probably, the regular
+                 * end of the central directory has been reached
+                 */
+                break;
+            } else {
+                Info(slide, 0x401,
+                     ((char *)slide, LoadFarString(CentSigMsg), j));
+                Info(slide, 0x401,
+                     ((char *)slide,"%s", LoadFarString(ReportMsg)));
+                error_in_archive = PK_BADERR;   /* sig not found */
+                break;
+            }
+        }
+        /* process_cdir_file_hdr() sets pInfo->hostnum, pInfo->lcflag, ...: */
+        if ((error = process_cdir_file_hdr(__G)) != PK_COOL) {
+            error_in_archive = error;   /* only PK_EOF defined */
+            break;
+        }
+
+        if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) !=
+             PK_COOL)
+        {
+          if (error > error_in_archive)
+              error_in_archive = error;
+          if (error > PK_WARN)        /* fatal */
+              break;
+        }
+
+        if (!G.process_all_files) {   /* check if specified on command line */
+            unsigned i;
+
+            if (G.filespecs == 0)
+                do_this_file = TRUE;
+            else {  /* check if this entry matches an `include' argument */
+                do_this_file = FALSE;
+                for (i = 0; i < G.filespecs; i++)
+                    if (match(G.filename, G.pfnames[i], uO.C_flag WISEP)) {
+                        do_this_file = TRUE;
+                        if (fn_matched)
+                            fn_matched[i] = TRUE;
+                        break;       /* found match, so stop looping */
+                    }
+            }
+            if (do_this_file) {  /* check if this is an excluded file */
+                for (i = 0; i < G.xfilespecs; i++)
+                    if (match(G.filename, G.pxnames[i], uO.C_flag WISEP)) {
+                        do_this_file = FALSE;  /* ^-- ignore case in match */
+                        if (xn_matched)
+                            xn_matched[i] = TRUE;
+                        break;
+                    }
+            }
+        }
+
+    /*-----------------------------------------------------------------------
+        If current file was specified on command line, or if no names were
+        specified, do the listing for this file.  Otherwise, get rid of the
+        file comment and go back for the next file.
+      -----------------------------------------------------------------------*/
+
+        if (G.process_all_files || do_this_file) {
+
+            /* Read the extra field, if any.  The extra field info is required
+             * for resolving the Zip64 sizes/offsets and may be used in more
+             * analysis of the entry below.
+             */
+            if ((error = do_string(__G__ G.crec.extra_field_length,
+                                   EXTRA_FIELD)) != 0)
+            {
+                if (G.extra_field != NULL) {
+                    free(G.extra_field);
+                    G.extra_field = NULL;
+                }
+                error_in_archive = error;
+                /* The premature return in case of a "fatal" error (PK_EOF) is
+                 * delayed until we analyze the extra field contents.
+                 * This allows us to display all the other info that has been
+                 * successfully read in.
+                 */
+            }
+
+            switch (uO.lflag) {
+                case 1:
+                case 2:
+                    fnprint(__G);
+                    SKIP_(G.crec.file_comment_length)
+                    break;
+
+                case 3:
+                case 4:
+                case 5:
+                    if ((error = zi_short(__G)) != PK_COOL) {
+                        error_in_archive = error;   /* might be warning */
+                    }
+                    break;
+
+                case 10:
+                    Info(slide, 0, ((char *)slide,
+                      LoadFarString(CentralDirEntry), j));
+                    if ((error = zi_long(__G__ &endprev,
+                                         error_in_archive)) != PK_COOL) {
+                        error_in_archive = error;   /* might be warning */
+                    }
+                    break;
+
+                default:
+                    SKIP_(G.crec.file_comment_length)
+                    break;
+
+            } /* end switch (lflag) */
+            if (error > PK_WARN)        /* fatal */
+                break;
+
+            tot_csize += G.crec.csize;
+            tot_ucsize += G.crec.ucsize;
+            if (G.crec.general_purpose_bit_flag & 1)
+                tot_csize -= 12;   /* don't count encryption header */
+            ++members;
+
+#ifdef DLL
+            if ((G.statreportcb != NULL) &&
+                (*G.statreportcb)(__G__ UZ_ST_FINISH_MEMBER, G.zipfn,
+                                  G.filename, (zvoid *)&G.crec.ucsize)) {
+                /* cancel operation by user request */
+                error_in_archive = IZ_CTRLC;
+                break;
+            }
+#endif
+#ifdef MACOS  /* MacOS is no preemptive OS, thus call event-handling by hand */
+            UserStop();
+#endif
+
+        } else {        /* not listing this file */
+            SKIP_(G.crec.extra_field_length)
+            SKIP_(G.crec.file_comment_length)
+            if (endprev != 0) endprev = 0;
+
+        } /* end if (list member?) */
+
+    } /* end for-loop (j: member files) */
+
+/*---------------------------------------------------------------------------
+    Check that we actually found requested files; if so, print totals.
+  ---------------------------------------------------------------------------*/
+
+    if ((error_in_archive <= PK_WARN) && uO.tflag) {
+        char *sgn = "";
+        int cfactor = ratio(tot_ucsize, tot_csize);
+
+        if (cfactor < 0) {
+            sgn = "-";
+            cfactor = -cfactor;
+        }
+        Info(slide, 0, ((char *)slide, LoadFarString(ZipfileStats),
+          members, (members==1L)? nullStr:PlurSufx,
+          FmZofft(tot_ucsize, NULL, "u"),
+          FmZofft(tot_csize, NULL, "u"),
+          sgn, cfactor/10, cfactor%10));
+    }
+
+/*---------------------------------------------------------------------------
+    Check for unmatched filespecs on command line and print warning if any
+    found.
+  ---------------------------------------------------------------------------*/
+
+    if (fn_matched) {
+        if (error_in_archive <= PK_WARN)
+            for (j = 0;  j < G.filespecs;  ++j)
+                if (!fn_matched[j])
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarString(FilenameNotMatched), G.pfnames[j]));
+        free((zvoid *)fn_matched);
+    }
+    if (xn_matched) {
+        if (error_in_archive <= PK_WARN)
+            for (j = 0;  j < G.xfilespecs;  ++j)
+                if (!xn_matched[j])
+                    Info(slide, 0x401, ((char *)slide,
+                      LoadFarString(ExclFilenameNotMatched), G.pxnames[j]));
+        free((zvoid *)xn_matched);
+    }
+
+
+    /* Skip the following checks in case of a premature listing break. */
+    if (error_in_archive <= PK_WARN) {
+
+/*---------------------------------------------------------------------------
+    Double check that we're back at the end-of-central-directory record.
+  ---------------------------------------------------------------------------*/
+
+        if ( (memcmp(G.sig,
+                     (G.ecrec.have_ecr64 ?
+                      end_central64_sig : end_central_sig),
+                     4) != 0)
+            && (!G.ecrec.is_zip64_archive)
+            && (memcmp(G.sig, end_central_sig, 4) != 0)
+           ) {          /* just to make sure again */
+            Info(slide, 0x401, 
+                 ((char *)slide,"%s", LoadFarString(EndSigMsg)));
+            error_in_archive = PK_WARN;   /* didn't find sig */
+        }
+
+        /* Set specific return code when no files have been found. */
+        if (members == 0L && error_in_archive <= PK_WARN)
+            error_in_archive = PK_FIND;
+
+        if (uO.lflag >= 10)
+            (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0);
+    }
+
+    return error_in_archive;
+
+} /* end function zipinfo() */
+
+
+
+
+
+/************************/
+/*  Function zi_long()  */
+/************************/
+
+static int zi_long(__G__ pEndprev, error_in_archive)
+    /* return PK-type error code */
+    __GDEF
+    zusz_t *pEndprev;                /* for zi_long() check of extra bytes */
+    int error_in_archive;            /* may signal premature return */
+{
+#ifdef USE_EF_UT_TIME
+    iztimes z_utime;
+#endif
+    int  error;
+    unsigned  hostnum, hostver, extnum, extver, methid, methnum, xattr;
+    char workspace[12], attribs[22];
+    ZCONST char *varmsg_str;
+    char unkn[16];
+    static ZCONST char Far *os[NUM_HOSTS] = {
+        OS_FAT, OS_Amiga, OS_VMS, OS_Unix, OS_VMCMS, OS_AtariST, OS_HPFS,
+        OS_Macintosh, OS_ZSystem, OS_CPM, OS_TOPS20, OS_NTFS, OS_QDOS,
+        OS_Acorn, OS_VFAT, OS_MVS, OS_BeOS, OS_Tandem, OS_Theos, OS_MacDarwin,
+        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+        OS_AtheOS
+    };
+    static ZCONST char Far *method[NUM_METHODS] = {
+        MthdNone, MthdShrunk, MthdRedF1, MthdRedF2, MthdRedF3, MthdRedF4,
+        MthdImplode, MthdToken, MthdDeflate, MthdDeflat64, MthdDCLImplode,
+        MthdBZip2, MthdLZMA, MthdTerse, MthdLZ77, MthdWavPack, MthdPPMd
+    };
+    static ZCONST char Far *dtypelng[4] = {
+        DeflNorm, DeflMax, DeflFast, DeflSFast
+    };
+
+
+/*---------------------------------------------------------------------------
+    Check whether there's any extra space inside the zipfile.  If *pEndprev is
+    zero, it's probably a signal that OS/2 extra fields are involved (with
+    unknown compressed size).  We won't worry about prepended junk here...
+  ---------------------------------------------------------------------------*/
+
+    if (G.crec.relative_offset_local_header != *pEndprev && *pEndprev > 0L) {
+        /*  GRR DEBUG
+        Info(slide, 0, ((char *)slide,
+          "  [crec.relative_offset_local_header = %lu, endprev = %lu]\n",
+          G.crec.relative_offset_local_header, *pEndprev));
+         */
+        Info(slide, 0, ((char *)slide, LoadFarString(ExtraBytesPreceding),
+          FmZofft((G.crec.relative_offset_local_header - (*pEndprev)),
+          NULL, NULL)));
+    }
+
+    /* calculate endprev for next time around (problem:  extra fields may
+     * differ in length between local and central-directory records) */
+    *pEndprev = G.crec.relative_offset_local_header + (4L + LREC_SIZE) +
+      G.crec.filename_length + G.crec.extra_field_length + G.crec.csize;
+
+/*---------------------------------------------------------------------------
+    Print out various interesting things about the compressed file.
+  ---------------------------------------------------------------------------*/
+
+    hostnum = (unsigned)(G.pInfo->hostnum);
+    hostver = (unsigned)(G.pInfo->hostver);
+    extnum = (unsigned)MIN(G.crec.version_needed_to_extract[1], NUM_HOSTS);
+    extver = (unsigned)G.crec.version_needed_to_extract[0];
+    methid = (unsigned)G.crec.compression_method;
+    methnum = find_compr_idx(G.crec.compression_method);
+
+    (*G.message)((zvoid *)&G, (uch *)"  ", 2L, 0);  fnprint(__G);
+
+    Info(slide, 0, ((char *)slide, LoadFarString(LocalHeaderOffset),
+      FmZofft(G.crec.relative_offset_local_header, NULL, "u"),
+      FmZofft(G.crec.relative_offset_local_header, FZOFFT_HEX_DOT_WID, "X")));
+
+    if (hostnum >= NUM_HOSTS) {
+        sprintf(unkn, LoadFarString(UnknownNo),
+                (int)G.crec.version_made_by[1]);
+        varmsg_str = unkn;
+    } else {
+        varmsg_str = LoadFarStringSmall(os[hostnum]);
+#ifdef OLD_THEOS_EXTRA
+        if (hostnum == FS_VFAT_ && hostver == 20) {
+            /* entry made by old non-official THEOS port zip archive */
+            varmsg_str = LoadFarStringSmall(OS_TheosOld);
+        }
+#endif /* OLD_THEOS_EXTRA */
+    }
+    Info(slide, 0, ((char *)slide, LoadFarString(HostOS), varmsg_str));
+    Info(slide, 0, ((char *)slide, LoadFarString(EncodeSWVer), hostver/10,
+      hostver%10));
+
+    if ((extnum >= NUM_HOSTS) || (os[extnum] == NULL)) {
+        sprintf(unkn, LoadFarString(UnknownNo),
+                (int)G.crec.version_needed_to_extract[1]);
+        varmsg_str = unkn;
+    } else {
+        varmsg_str = LoadFarStringSmall(os[extnum]);
+    }
+    Info(slide, 0, ((char *)slide, LoadFarString(MinOSCompReq), varmsg_str));
+    Info(slide, 0, ((char *)slide, LoadFarString(MinSWVerReq), extver/10,
+      extver%10));
+
+    if (methnum >= NUM_METHODS) {
+        sprintf(unkn, LoadFarString(UnknownNo), G.crec.compression_method);
+        varmsg_str = unkn;
+    } else {
+        varmsg_str = LoadFarStringSmall(method[methnum]);
+    }
+    Info(slide, 0, ((char *)slide, LoadFarString(CompressMethod), varmsg_str));
+    if (methid == IMPLODED) {
+        Info(slide, 0, ((char *)slide, LoadFarString(SlideWindowSizeImplode),
+          (G.crec.general_purpose_bit_flag & 2)? '8' : '4'));
+        Info(slide, 0, ((char *)slide, LoadFarString(ShannonFanoTrees),
+          (G.crec.general_purpose_bit_flag & 4)? '3' : '2'));
+    } else if (methid == DEFLATED || methid == ENHDEFLATED) {
+        ush  dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3);
+
+        Info(slide, 0, ((char *)slide, LoadFarString(CompressSubtype),
+          LoadFarStringSmall(dtypelng[dnum])));
+    }
+
+    Info(slide, 0, ((char *)slide, LoadFarString(FileSecurity),
+      (G.crec.general_purpose_bit_flag & 1) ? nullStr : "not "));
+    Info(slide, 0, ((char *)slide, LoadFarString(ExtendedLocalHdr),
+      (G.crec.general_purpose_bit_flag & 8) ? "yes" : "no"));
+    /* print upper 3 bits for amusement? */
+
+    /* For printing of date & time, a "char d_t_buf[21]" is required.
+     * To save stack space, we reuse the "char attribs[22]" buffer which
+     * is not used yet.
+     */
+#   define d_t_buf attribs
+
+    zi_time(__G__ &G.crec.last_mod_dos_datetime, NULL, d_t_buf);
+    Info(slide, 0, ((char *)slide, LoadFarString(FileModDate), d_t_buf));
+#ifdef USE_EF_UT_TIME
+    if (G.extra_field &&
+#ifdef IZ_CHECK_TZ
+        G.tz_is_valid &&
+#endif
+        (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1,
+                          G.crec.last_mod_dos_datetime, &z_utime, NULL)
+         & EB_UT_FL_MTIME))
+    {
+        TIMET_TO_NATIVE(z_utime.mtime)   /* NOP unless MSC 7.0 or Macintosh */
+        d_t_buf[0] = (char)0;               /* signal "show local time" */
+        zi_time(__G__ &G.crec.last_mod_dos_datetime, &(z_utime.mtime), d_t_buf);
+        Info(slide, 0, ((char *)slide, LoadFarString(UT_FileModDate),
+          d_t_buf, LoadFarStringSmall(LocalTime)));
+#ifndef NO_GMTIME
+        d_t_buf[0] = (char)1;           /* signal "show UTC (GMT) time" */
+        zi_time(__G__ &G.crec.last_mod_dos_datetime, &(z_utime.mtime), d_t_buf);
+        Info(slide, 0, ((char *)slide, LoadFarString(UT_FileModDate),
+          d_t_buf, LoadFarStringSmall(GMTime)));
+#endif /* !NO_GMTIME */
+    }
+#endif /* USE_EF_UT_TIME */
+
+    Info(slide, 0, ((char *)slide, LoadFarString(CRC32Value), G.crec.crc32));
+    Info(slide, 0, ((char *)slide, LoadFarString(CompressedFileSize),
+      FmZofft(G.crec.csize, NULL, "u")));
+    Info(slide, 0, ((char *)slide, LoadFarString(UncompressedFileSize),
+      FmZofft(G.crec.ucsize, NULL, "u")));
+    Info(slide, 0, ((char *)slide, LoadFarString(FilenameLength),
+      G.crec.filename_length));
+    Info(slide, 0, ((char *)slide, LoadFarString(ExtraFieldLength),
+      G.crec.extra_field_length));
+    Info(slide, 0, ((char *)slide, LoadFarString(FileCommentLength),
+      G.crec.file_comment_length));
+    Info(slide, 0, ((char *)slide, LoadFarString(FileDiskNum),
+      (ulg)(G.crec.disk_number_start + 1)));
+    Info(slide, 0, ((char *)slide, LoadFarString(ApparentFileType),
+      (G.crec.internal_file_attributes & 1)? "text"
+         : (G.crec.internal_file_attributes & 2)? "ebcdic"
+              : "binary"));             /* changed to accept EBCDIC */
+#ifdef ATARI
+    printf("  external file attributes (hex):                   %.8lx\n",
+      G.crec.external_file_attributes);
+#endif
+    xattr = (unsigned)((G.crec.external_file_attributes >> 16) & 0xFFFF);
+    if (hostnum == VMS_) {
+        char   *p=attribs, *q=attribs+1;
+        int    i, j, k;
+
+        for (k = 0;  k < 12;  ++k)
+            workspace[k] = 0;
+        if (xattr & VMS_IRUSR)
+            workspace[0] = 'R';
+        if (xattr & VMS_IWUSR) {
+            workspace[1] = 'W';
+            workspace[3] = 'D';
+        }
+        if (xattr & VMS_IXUSR)
+            workspace[2] = 'E';
+        if (xattr & VMS_IRGRP)
+            workspace[4] = 'R';
+        if (xattr & VMS_IWGRP) {
+            workspace[5] = 'W';
+            workspace[7] = 'D';
+        }
+        if (xattr & VMS_IXGRP)
+            workspace[6] = 'E';
+        if (xattr & VMS_IROTH)
+            workspace[8] = 'R';
+        if (xattr & VMS_IWOTH) {
+            workspace[9] = 'W';
+            workspace[11] = 'D';
+        }
+        if (xattr & VMS_IXOTH)
+            workspace[10] = 'E';
+
+        *p++ = '(';
+        for (k = j = 0;  j < 3;  ++j) {    /* loop over groups of permissions */
+            for (i = 0;  i < 4;  ++i, ++k)  /* loop over perms within a group */
+                if (workspace[k])
+                    *p++ = workspace[k];
+            *p++ = ',';                       /* group separator */
+            if (j == 0)
+                while ((*p++ = *q++) != ',')
+                    ;                         /* system, owner perms are same */
+        }
+        *p-- = '\0';
+        *p = ')';   /* overwrite last comma */
+        Info(slide, 0, ((char *)slide, LoadFarString(VMSFileAttributes), xattr,
+          attribs));
+
+    } else if (hostnum == AMIGA_) {
+        switch (xattr & AMI_IFMT) {
+            case AMI_IFDIR:  attribs[0] = 'd';  break;
+            case AMI_IFREG:  attribs[0] = '-';  break;
+            default:         attribs[0] = '?';  break;
+        }
+        attribs[1] = (xattr & AMI_IHIDDEN)?   'h' : '-';
+        attribs[2] = (xattr & AMI_ISCRIPT)?   's' : '-';
+        attribs[3] = (xattr & AMI_IPURE)?     'p' : '-';
+        attribs[4] = (xattr & AMI_IARCHIVE)?  'a' : '-';
+        attribs[5] = (xattr & AMI_IREAD)?     'r' : '-';
+        attribs[6] = (xattr & AMI_IWRITE)?    'w' : '-';
+        attribs[7] = (xattr & AMI_IEXECUTE)?  'e' : '-';
+        attribs[8] = (xattr & AMI_IDELETE)?   'd' : '-';
+        attribs[9] = 0;   /* better dlm the string */
+        Info(slide, 0, ((char *)slide, LoadFarString(AmigaFileAttributes),
+          xattr, attribs));
+
+    } else if (hostnum == THEOS_) {
+        ZCONST char Far *fpFtyp;
+
+        switch (xattr & THS_IFMT) {
+            case THS_IFLIB:  fpFtyp = TheosFTypLib;  break;
+            case THS_IFDIR:  fpFtyp = TheosFTypDir;  break;
+            case THS_IFREG:  fpFtyp = TheosFTypReg;  break;
+            case THS_IFREL:  fpFtyp = TheosFTypRel;  break;
+            case THS_IFKEY:  fpFtyp = TheosFTypKey;  break;
+            case THS_IFIND:  fpFtyp = TheosFTypInd;  break;
+            case THS_IFR16:  fpFtyp = TheosFTypR16;  break;
+            case THS_IFP16:  fpFtyp = TheosFTypP16;  break;
+            case THS_IFP32:  fpFtyp = TheosFTypP32;  break;
+            default:         fpFtyp = TheosFTypUkn;  break;
+        }
+        strcpy(attribs, LoadFarStringSmall(fpFtyp));
+        attribs[12] = (xattr & THS_INHID) ? '.' : 'H';
+        attribs[13] = (xattr & THS_IMODF) ? '.' : 'M';
+        attribs[14] = (xattr & THS_IWOTH) ? '.' : 'W';
+        attribs[15] = (xattr & THS_IROTH) ? '.' : 'R';
+        attribs[16] = (xattr & THS_IEUSR) ? '.' : 'E';
+        attribs[17] = (xattr & THS_IXUSR) ? '.' : 'X';
+        attribs[18] = (xattr & THS_IWUSR) ? '.' : 'W';
+        attribs[19] = (xattr & THS_IRUSR) ? '.' : 'R';
+        attribs[20] = 0;
+        Info(slide, 0, ((char *)slide, LoadFarString(TheosFileAttributes),
+          xattr, attribs));
+
+#ifdef OLD_THEOS_EXTRA
+    } else if (hostnum == FS_VFAT_ && hostver == 20) {
+        /* process old non-official THEOS port zip archive */
+        ZCONST char Far *fpFtyp;
+
+        switch (xattr & _THS_IFMT) {
+            case _THS_IFLIB:  fpFtyp = TheosFTypLib;  break;
+            case _THS_IFDIR:  fpFtyp = TheosFTypDir;  break;
+            case _THS_IFREG:  fpFtyp = TheosFTypReg;  break;
+            case _THS_IODRC:  fpFtyp = TheosFTypRel;  break;
+            case _THS_IOKEY:  fpFtyp = TheosFTypKey;  break;
+            case _THS_IOIND:  fpFtyp = TheosFTypInd;  break;
+            case _THS_IOPRG:  fpFtyp = TheosFTypR16;  break;
+            case _THS_IO286:  fpFtyp = TheosFTypP16;  break;
+            case _THS_IO386:  fpFtyp = TheosFTypP32;  break;
+            default:         fpFtyp = TheosFTypUkn;  break;
+        }
+        strcpy(attribs, LoadFarStringSmall(fpFtyp));
+        attribs[12] = (xattr & _THS_HIDDN) ? 'H' : '.';
+        attribs[13] = (xattr & _THS_IXOTH) ? '.' : 'X';
+        attribs[14] = (xattr & _THS_IWOTH) ? '.' : 'W';
+        attribs[15] = (xattr & _THS_IROTH) ? '.' : 'R';
+        attribs[16] = (xattr & _THS_IEUSR) ? '.' : 'E';
+        attribs[17] = (xattr & _THS_IXUSR) ? '.' : 'X';
+        attribs[18] = (xattr & _THS_IWUSR) ? '.' : 'W';
+        attribs[19] = (xattr & _THS_IRUSR) ? '.' : 'R';
+        attribs[20] = 0;
+        Info(slide, 0, ((char *)slide, LoadFarString(TheosFileAttributes),
+          xattr, attribs));
+#endif /* OLD_THEOS_EXTRA */
+
+    } else if ((hostnum != FS_FAT_) && (hostnum != FS_HPFS_) &&
+               (hostnum != FS_NTFS_) && (hostnum != FS_VFAT_) &&
+               (hostnum != ACORN_) &&
+               (hostnum != VM_CMS_) && (hostnum != MVS_))
+    {                                 /* assume Unix-like */
+        switch ((unsigned)(xattr & UNX_IFMT)) {
+            case (unsigned)UNX_IFDIR:   attribs[0] = 'd';  break;
+            case (unsigned)UNX_IFREG:   attribs[0] = '-';  break;
+            case (unsigned)UNX_IFLNK:   attribs[0] = 'l';  break;
+            case (unsigned)UNX_IFBLK:   attribs[0] = 'b';  break;
+            case (unsigned)UNX_IFCHR:   attribs[0] = 'c';  break;
+            case (unsigned)UNX_IFIFO:   attribs[0] = 'p';  break;
+            case (unsigned)UNX_IFSOCK:  attribs[0] = 's';  break;
+            default:          attribs[0] = '?';  break;
+        }
+        attribs[1] = (xattr & UNX_IRUSR)? 'r' : '-';
+        attribs[4] = (xattr & UNX_IRGRP)? 'r' : '-';
+        attribs[7] = (xattr & UNX_IROTH)? 'r' : '-';
+
+        attribs[2] = (xattr & UNX_IWUSR)? 'w' : '-';
+        attribs[5] = (xattr & UNX_IWGRP)? 'w' : '-';
+        attribs[8] = (xattr & UNX_IWOTH)? 'w' : '-';
+
+        if (xattr & UNX_IXUSR)
+            attribs[3] = (xattr & UNX_ISUID)? 's' : 'x';
+        else
+            attribs[3] = (xattr & UNX_ISUID)? 'S' : '-';   /* S = undefined */
+        if (xattr & UNX_IXGRP)
+            attribs[6] = (xattr & UNX_ISGID)? 's' : 'x';   /* == UNX_ENFMT */
+        else
+            attribs[6] = (xattr & UNX_ISGID)? 'l' : '-';
+        if (xattr & UNX_IXOTH)
+            attribs[9] = (xattr & UNX_ISVTX)? 't' : 'x';   /* "sticky bit" */
+        else
+            attribs[9] = (xattr & UNX_ISVTX)? 'T' : '-';   /* T = undefined */
+        attribs[10] = 0;
+
+        Info(slide, 0, ((char *)slide, LoadFarString(UnixFileAttributes), xattr,
+          attribs));
+
+    } else {
+        Info(slide, 0, ((char *)slide, LoadFarString(NonMSDOSFileAttributes),
+            G.crec.external_file_attributes >> 8));
+
+    } /* endif (hostnum: external attributes format) */
+
+    if ((xattr=(unsigned)(G.crec.external_file_attributes & 0xFF)) == 0)
+        Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributes),
+          xattr));
+    else if (xattr == 1)
+        Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributesRO),
+          xattr));
+    else
+        Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributesAlpha),
+          xattr, (xattr&1)? "rdo " : nullStr,
+          (xattr&2)? "hid " : nullStr,
+          (xattr&4)? "sys " : nullStr,
+          (xattr&8)? "lab " : nullStr,
+          (xattr&16)? "dir " : nullStr,
+          (xattr&32)? "arc " : nullStr,
+          (xattr&64)? "lnk " : nullStr,
+          (xattr&128)? "exe" : nullStr));
+
+/*---------------------------------------------------------------------------
+    Analyze the extra field, if any, and print the file comment, if any (the
+    filename has already been printed, above).  That finishes up this file
+    entry...
+  ---------------------------------------------------------------------------*/
+
+    if (G.crec.extra_field_length > 0) {
+        uch *ef_ptr = G.extra_field;
+        ush ef_len = G.crec.extra_field_length;
+        ush eb_id, eb_datalen;
+        ZCONST char Far *ef_fieldname;
+
+        if (error_in_archive > PK_WARN)   /* fatal:  can't continue */
+            /* delayed "fatal error" return from extra field reading */
+            return error_in_archive;
+        if (G.extra_field == (uch *)NULL)
+            return PK_ERR;   /* not consistent with crec length */
+
+        Info(slide, 0, ((char *)slide, LoadFarString(ExtraFields)));
+
+        while (ef_len >= EB_HEADSIZE) {
+            eb_id = makeword(&ef_ptr[EB_ID]);
+            eb_datalen = makeword(&ef_ptr[EB_LEN]);
+            ef_ptr += EB_HEADSIZE;
+            ef_len -= EB_HEADSIZE;
+
+            if (eb_datalen > (ush)ef_len) {
+                Info(slide, 0x421, ((char *)slide,
+                  LoadFarString(ExtraFieldTrunc), eb_id, eb_datalen, ef_len));
+                eb_datalen = ef_len;
+            }
+
+            switch (eb_id) {
+                case EF_PKSZ64:
+                    ef_fieldname = efPKSZ64;
+                    if ((G.crec.relative_offset_local_header
+                         & (~(zusz_t)0xFFFFFFFFL)) != 0) {
+                        /* Subtract the size of the 64bit local offset from
+                           the local e.f. size, local Z64 e.f. block has no
+                           offset; when only local offset present, the entire
+                           local PKSZ64 block is missing. */
+                        *pEndprev -= (eb_datalen == 8 ? 12 : 8);
+                    }
+                    break;
+                case EF_AV:
+                    ef_fieldname = efAV;
+                    break;
+                case EF_OS2:
+                    ef_fieldname = efOS2;
+                    break;
+                case EF_ACL:
+                    ef_fieldname = efACL;
+                    break;
+                case EF_NTSD:
+                    ef_fieldname = efNTSD;
+                    break;
+                case EF_PKVMS:
+                    ef_fieldname = efPKVMS;
+                    break;
+                case EF_IZVMS:
+                    ef_fieldname = efIZVMS;
+                    break;
+                case EF_PKW32:
+                    ef_fieldname = efPKWin32;
+                    break;
+                case EF_PKUNIX:
+                    ef_fieldname = efPKUnix;
+                    break;
+                case EF_IZUNIX:
+                    ef_fieldname = efIZUnix;
+                    if (hostnum == UNIX_ && *pEndprev > 0L)
+                        *pEndprev += 4L;  /* also have UID/GID in local copy */
+                    break;
+                case EF_IZUNIX2:
+                    ef_fieldname = efIZUnix2;
+                    if (*pEndprev > 0L)
+                        *pEndprev += 4L;  /* 4 byte UID/GID in local copy */
+                    break;
+                case EF_IZUNIX3:
+                    ef_fieldname = efIZUnix3;
+#if 0
+                    if (*pEndprev > 0L)
+                        *pEndprev += 4L;  /* 4 byte UID/GID in local copy */
+#endif
+                    break;
+                case EF_TIME:
+                    ef_fieldname = efTime;
+                    break;
+                case EF_UNIPATH:
+                    ef_fieldname = efU8Path;
+                    break;
+                case EF_UNICOMNT:
+                    ef_fieldname = efU8Commnt;
+                    break;
+                case EF_MAC3:
+                    ef_fieldname = efMac3;
+                    break;
+                case EF_JLMAC:
+                    ef_fieldname = efJLMac;
+                    break;
+                case EF_ZIPIT:
+                    ef_fieldname = efZipIt;
+                    break;
+                case EF_ZIPIT2:
+                    ef_fieldname = efZipIt2;
+                    break;
+                case EF_VMCMS:
+                    ef_fieldname = efVMCMS;
+                    break;
+                case EF_MVS:
+                    ef_fieldname = efMVS;
+                    break;
+                case EF_ATHEOS:
+                    ef_fieldname = efAtheOS;
+                    break;
+                case EF_BEOS:
+                    ef_fieldname = efBeOS;
+                    break;
+                case EF_QDOS:
+                    ef_fieldname = efQDOS;
+                    break;
+                case EF_AOSVS:
+                    ef_fieldname = efAOSVS;
+                    break;
+                case EF_SPARK:   /* from RISC OS */
+                    ef_fieldname = efSpark;
+                    break;
+                case EF_MD5:
+                    ef_fieldname = efMD5;
+                    break;
+                case EF_ASIUNIX:
+                    ef_fieldname = efASiUnix;
+                    break;
+                case EF_TANDEM:
+                    ef_fieldname = efTandem;
+                    break;
+                case EF_SMARTZIP:
+                    ef_fieldname = efSmartZip;
+                    break;
+                case EF_THEOS:
+#ifdef OLD_THEOS_EXTRA
+                case EF_THEOSO:
+#endif
+                    ef_fieldname = efTheos;
+                    break;
+                default:
+                    ef_fieldname = efUnknown;
+                    break;
+            }
+            Info(slide, 0, ((char *)slide, LoadFarString(ExtraFieldType),
+                 eb_id, LoadFarStringSmall(ef_fieldname), eb_datalen));
+
+            /* additional, field-specific information: */
+            switch (eb_id) {
+                case EF_OS2:
+                case EF_ACL:
+                    if (eb_datalen >= EB_OS2_HLEN) {
+                        if (eb_id == EF_OS2)
+                            ef_fieldname = OS2EAs;
+                        else
+                            ef_fieldname = ACLdata;
+                        Info(slide, 0, ((char *)slide,
+                          LoadFarString(ef_fieldname), makelong(ef_ptr)));
+                        *pEndprev = 0L;   /* no clue about csize of local */
+                    } else {
+                        goto ef_default_display;
+                    }
+                    break;
+                case EF_NTSD:
+                    if (eb_datalen >= EB_NTSD_C_LEN) {
+                        Info(slide, 0, ((char *)slide, LoadFarString(NTSDData),
+                          makelong(ef_ptr)));
+                        *pEndprev = 0L;   /* no clue about csize of local */
+                    } else {
+                        goto ef_default_display;
+                    }
+                    break;
+                case EF_IZVMS:
+                    if (eb_datalen >= 8) {
+                        char *p, q[8];
+                        unsigned compr = makeword(ef_ptr+EB_IZVMS_FLGS)
+                                        & EB_IZVMS_BCMASK;
+
+                        *q = '\0';
+                        if (compr > 3)
+                            compr = 3;
+                        switch (makelong(ef_ptr)) {
+                            case 0x42414656: /* "VFAB" */
+                                p = "FAB"; break;
+                            case 0x4C4C4156: /* "VALL" */
+                                p = "XABALL"; break;
+                            case 0x43484656: /* "VFHC" */
+                                p = "XABFHC"; break;
+                            case 0x54414456: /* "VDAT" */
+                                p = "XABDAT"; break;
+                            case 0x54445256: /* "VRDT" */
+                                p = "XABRDT"; break;
+                            case 0x4F525056: /* "VPRO" */
+                                p = "XABPRO"; break;
+                            case 0x59454B56: /* "VKEY" */
+                                p = "XABKEY"; break;
+                            case 0x56534D56: /* "VMSV" */
+                                p = "version";
+                                if (eb_datalen >= 16) {
+                                    /* put termitation first, for A_TO_N() */
+                                    q[7] = '\0';
+                                    q[0] = ' ';
+                                    q[1] = '(';
+                                    strncpy(q+2,
+                                            (char *)ef_ptr+EB_IZVMS_HLEN, 4);
+                                    A_TO_N(q+2);
+                                    q[6] = ')';
+                                }
+                                break;
+                            default:
+                                p = "unknown";
+                        }
+                        Info(slide, 0, ((char *)slide,
+                          LoadFarString(izVMSdata),
+                          LoadFarStringSmall(izVMScomp[compr]),
+                          makeword(ef_ptr+EB_IZVMS_UCSIZ), p, q));
+                    } else {
+                        goto ef_default_display;
+                    }
+                    break;
+                case EF_TIME:
+                    if (eb_datalen > 0) {
+                        char types[80];
+                        int num = 0, len;
+
+                        *types = '\0';
+                        if (*ef_ptr & 1) {
+                            strcpy(types, LoadFarString(UTmodification));
+                            ++num;
+                        }
+                        if (*ef_ptr & 2) {
+                            len = strlen(types);
+                            if (num)
+                                types[len++] = '/';
+                            strcpy(types+len, LoadFarString(UTaccess));
+                            ++num;
+                            if (*pEndprev > 0L)
+                                *pEndprev += 4L;
+                        }
+                        if (*ef_ptr & 4) {
+                            len = strlen(types);
+                            if (num)
+                                types[len++] = '/';
+                            strcpy(types+len, LoadFarString(UTcreation));
+                            ++num;
+                            if (*pEndprev > 0L)
+                                *pEndprev += 4L;
+                        }
+                        if (num > 0)
+                            Info(slide, 0, ((char *)slide,
+                              LoadFarString(UTdata), types,
+                              num == 1? nullStr : PlurSufx));
+                    }
+                    break;
+                case EF_UNIPATH:
+                case EF_UNICOMNT:
+                    if (eb_datalen >= 5) {
+                        unsigned i, n;
+                        ulg name_crc = makelong(ef_ptr+1);
+
+                        if (eb_datalen <= 29) {
+                            Info(slide, 0, ((char *)slide,
+                                 LoadFarString(U8PthCmnComplete),
+                                 (unsigned)ef_ptr[0], name_crc));
+                            n = eb_datalen;
+                        } else {
+                            Info(slide, 0, ((char *)slide,
+                                 LoadFarString(U8PthCmnF24),
+                                 (unsigned)ef_ptr[0], name_crc));
+                            n = 29;
+                        }
+                        for (i = 5;  i < n;  ++i)
+                            Info(slide, 0, ((char *)slide,
+                                 LoadFarString(efFormat), ef_ptr[i]));
+                    } else {
+                        goto ef_default_display;
+                    }
+                    break;
+                case EF_MAC3:
+                    if (eb_datalen >= EB_MAC3_HLEN) {
+                        ulg eb_uc = makelong(ef_ptr);
+                        unsigned mac3_flgs = makeword(ef_ptr+EB_FLGS_OFFS);
+                        unsigned eb_is_uc = mac3_flgs & EB_M3_FL_UNCMPR;
+
+                        Info(slide, 0, ((char *)slide, LoadFarString(Mac3data),
+                          eb_uc, eb_is_uc ? "un" : nullStr));
+                        if (eb_is_uc) {
+                            if (*pEndprev > 0L)
+                                *pEndprev += makelong(ef_ptr);
+                        } else {
+                            *pEndprev = 0L; /* no clue about csize of local */
+                        }
+
+                        Info(slide, 0, ((char *)slide,
+                          LoadFarString(MacOSMAC3flags),
+                          LoadFarStringSmall(mac3_flgs & EB_M3_FL_DATFRK ?
+                                             MacOS_DF : MacOS_RF),
+                          (mac3_flgs & EB_M3_FL_TIME64 ? 64 : 32)));
+                        zi_showMacTypeCreator(__G__ &ef_ptr[6]);
+                    } else {
+                        goto ef_default_display;
+                    }
+                    break;
+                case EF_ZIPIT2:
+                    if (eb_datalen >= 5 &&
+                        makelong(ef_ptr) == 0x5449505A /* "ZPIT" */) {
+
+                        if (eb_datalen >= 12) {
+                            zi_showMacTypeCreator(__G__ &ef_ptr[4]);
+                        }
+                    } else {
+                        goto ef_default_display;
+                    }
+                    break;
+                case EF_ZIPIT:
+                    if (eb_datalen >= 5 &&
+                        makelong(ef_ptr) == 0x5449505A /* "ZPIT" */) {
+                        unsigned fnlen = ef_ptr[4];
+
+                        if ((unsigned)eb_datalen >= fnlen + (5 + 8)) {
+                            uch nullchar = ef_ptr[fnlen+5];
+
+                            ef_ptr[fnlen+5] = '\0'; /* terminate filename */
+                            A_TO_N(ef_ptr+5);
+                            Info(slide, 0, ((char *)slide,
+                              LoadFarString(ZipItFname), (char *)ef_ptr+5));
+                            ef_ptr[fnlen+5] = nullchar;
+                            zi_showMacTypeCreator(__G__ &ef_ptr[fnlen+5]);
+                        }
+                    } else {
+                        goto ef_default_display;
+                    }
+                    break;
+                case EF_JLMAC:
+                    if (eb_datalen >= 40 &&
+                        makelong(ef_ptr) == 0x45454C4A /* "JLEE" */)
+                    {
+                        zi_showMacTypeCreator(__G__ &ef_ptr[4]);
+
+                        Info(slide, 0, ((char *)slide,
+                          LoadFarString(MacOSJLEEflags),
+                          LoadFarStringSmall(ef_ptr[31] & 1 ?
+                                             MacOS_DF : MacOS_RF)));
+                    } else {
+                        goto ef_default_display;
+                    }
+                    break;
+                case EF_SMARTZIP:
+                    if ((eb_datalen == EB_SMARTZIP_HLEN) &&
+                        makelong(ef_ptr) == 0x70695A64 /* "dZip" */) {
+                        char filenameBuf[32];
+                        zi_showMacTypeCreator(__G__ &ef_ptr[4]);
+                        memcpy(filenameBuf, &ef_ptr[33], 31);
+                        filenameBuf[ef_ptr[32]] = '\0';
+                        A_TO_N(filenameBuf);
+                        Info(slide, 0, ((char *)slide,
+                             LoadFarString(ZipItFname), filenameBuf));
+                    } else {
+                        goto ef_default_display;
+                    }
+                    break;
+#ifdef CMS_MVS
+                case EF_VMCMS:
+                case EF_MVS:
+                    {
+                        char type[100];
+
+                        Info(slide, 0, ((char *)slide,
+                             LoadFarString(VmMvsExtraField),
+                             (getVMMVSexfield(type, ef_ptr-EB_HEADSIZE,
+                             (unsigned)eb_datalen) > 0)?
+                             type : LoadFarStringSmall(VmMvsInvalid)));
+                    }
+                    break;
+#endif /* CMS_MVS */
+                case EF_ATHEOS:
+                case EF_BEOS:
+                    if (eb_datalen >= EB_BEOS_HLEN) {
+                        ulg eb_uc = makelong(ef_ptr);
+                        unsigned eb_is_uc =
+                          *(ef_ptr+EB_FLGS_OFFS) & EB_BE_FL_UNCMPR;
+
+                        if (eb_id == EF_ATHEOS)
+                            ef_fieldname = AtheOSdata;
+                        else
+                            ef_fieldname = BeOSdata;
+                        Info(slide, 0, ((char *)slide,
+                          LoadFarString(ef_fieldname),
+                          eb_uc, eb_is_uc ? "un" : nullStr));
+                        if (eb_is_uc) {
+                            if (*pEndprev > 0L)
+                                *pEndprev += makelong(ef_ptr);
+                        } else {
+                            *pEndprev = 0L; /* no clue about csize of local */
+                        }
+                    } else {
+                        goto ef_default_display;
+                    }
+                    break;
+                case EF_QDOS:
+                    if (eb_datalen >= 4) {
+                        Info(slide, 0, ((char *)slide, LoadFarString(QDOSdata),
+                          ef_ptr[0], ef_ptr[1], ef_ptr[2], ef_ptr[3]));
+                    } else {
+                        goto ef_default_display;
+                    }
+                    break;
+                case EF_AOSVS:
+                    if (eb_datalen >= 5) {
+                        Info(slide, 0, ((char *)slide, LoadFarString(AOSVSdata),
+                          ((int)(uch)ef_ptr[4])/10, ((int)(uch)ef_ptr[4])%10));
+                    } else {
+                        goto ef_default_display;
+                    }
+                    break;
+                case EF_TANDEM:
+                    if (eb_datalen == 20) {
+                        unsigned type, code;
+
+                        type = (ef_ptr[18] & 0x60) >> 5;
+                        code = makeword(ef_ptr);
+                        /* Arrg..., Tandem e.f. uses BigEndian byte-order */
+                        code = ((code << 8) & 0xff00) | ((code >> 8) & 0x00ff);
+                        if (type == NSK_UNSTRUCTURED) {
+                            if (code == NSK_EDITFILECODE)
+                                type = 4;
+                            else if (code == NSK_OBJECTFILECODE)
+                                type = 5;
+                        }
+                        Info(slide, 0, ((char *)slide,
+                          LoadFarString(Tandemdata),
+                          LoadFarStringSmall(TandemFileformat[type]),
+                          code));
+                    } else {
+                        goto ef_default_display;
+                    }
+                    break;
+                case EF_MD5:
+                    if (eb_datalen >= 19) {
+                        char md5[33];
+                        int i;
+
+                        for (i = 0;  i < 16;  ++i)
+                            sprintf(&md5[i<<1], "%02x", ef_ptr[15-i]);
+                        md5[32] = '\0';
+                        Info(slide, 0, ((char *)slide, LoadFarString(MD5data),
+                          md5));
+                        break;
+                    }   /* else: fall through !! */
+                default:
+ef_default_display:
+                    if (eb_datalen > 0) {
+                        unsigned i, n;
+
+                        if (eb_datalen <= 24) {
+                            Info(slide, 0, ((char *)slide,
+                                 LoadFarString(ColonIndent)));
+                            n = eb_datalen;
+                        } else {
+                            Info(slide, 0, ((char *)slide,
+                                 LoadFarString(First20)));
+                            n = 20;
+                        }
+                        for (i = 0;  i < n;  ++i)
+                            Info(slide, 0, ((char *)slide,
+                                 LoadFarString(efFormat), ef_ptr[i]));
+                    }
+                    break;
+            }
+            (*G.message)((zvoid *)&G, (uch *)".", 1L, 0);
+
+            ef_ptr += eb_datalen;
+            ef_len -= eb_datalen;
+        }
+        (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0);
+    }
+
+    /* high bit == Unix/OS2/NT GMT times (mtime, atime); next bit == UID/GID */
+    if ((xattr = (unsigned)((G.crec.external_file_attributes & 0xC000) >> 12))
+        & 8)
+    {
+        if (hostnum == UNIX_ || hostnum == FS_HPFS_ || hostnum == FS_NTFS_)
+        {
+            Info(slide, 0, ((char *)slide, LoadFarString(lExtraFieldType),
+              "is", EF_IZUNIX, LoadFarStringSmall(efIZUnix),
+              (unsigned)(xattr&12), (xattr&4)? efIZuid : efIZnouid));
+            if (*pEndprev > 0L)
+                *pEndprev += (ulg)(xattr&12);
+        }
+        else if (hostnum == FS_FAT_ && !(xattr&4))
+            Info(slide, 0, ((char *)slide, LoadFarString(lExtraFieldType),
+              "may be", EF_IZUNIX, LoadFarStringSmall(efIZUnix), 8,
+              efIZnouid));
+    }
+
+    if (!G.crec.file_comment_length)
+        Info(slide, 0, ((char *)slide, LoadFarString(NoFileComment)));
+    else {
+        Info(slide, 0, ((char *)slide, LoadFarString(FileCommBegin)));
+        if ((error = do_string(__G__ G.crec.file_comment_length, DISPL_8)) !=
+            PK_COOL)
+        {
+            error_in_archive = error;   /* might be warning */
+            if (error > PK_WARN)   /* fatal */
+                return error;
+        }
+        Info(slide, 0, ((char *)slide, LoadFarString(FileCommEnd)));
+    }
+
+    return error_in_archive;
+
+} /* end function zi_long() */
+
+
+
+
+
+/*************************/
+/*  Function zi_short()  */
+/*************************/
+
+static int zi_short(__G)   /* return PK-type error code */
+    __GDEF
+{
+#ifdef USE_EF_UT_TIME
+    iztimes     z_utime;
+    time_t      *z_modtim;
+#endif
+    int         k, error, error_in_archive=PK_COOL;
+    unsigned    hostnum, hostver, methid, methnum, xattr;
+    char        *p, workspace[12], attribs[17];
+    char        methbuf[5];
+    static ZCONST char dtype[5]="NXFS"; /* normal, maximum, fast, superfast */
+    static ZCONST char Far os[NUM_HOSTS+1][4] = {
+        "fat", "ami", "vms", "unx", "cms", "atr", "hpf", "mac", "zzz",
+        "cpm", "t20", "ntf", "qds", "aco", "vft", "mvs", "be ", "nsk",
+        "ths", "osx", "???", "???", "???", "???", "???", "???", "???",
+        "???", "???", "???", "ath", "???"
+    };
+#ifdef OLD_THEOS_EXTRA
+    static ZCONST char Far os_TheosOld[] = "tho";
+#endif
+    static ZCONST char Far method[NUM_METHODS+1][5] = {
+        "stor", "shrk", "re:1", "re:2", "re:3", "re:4", "i#:#", "tokn",
+        "def#", "d64#", "dcli", "bzp2", "lzma", "ters", "lz77", "wavp",
+        "ppmd", "u###"
+    };
+
+
+/*---------------------------------------------------------------------------
+    Print out various interesting things about the compressed file.
+  ---------------------------------------------------------------------------*/
+
+    methid = (unsigned)(G.crec.compression_method);
+    methnum = find_compr_idx(G.crec.compression_method);
+    hostnum = (unsigned)(G.pInfo->hostnum);
+    hostver = (unsigned)(G.pInfo->hostver);
+/*
+    extnum = (unsigned)MIN(G.crec.version_needed_to_extract[1], NUM_HOSTS);
+    extver = (unsigned)G.crec.version_needed_to_extract[0];
+ */
+
+    zfstrcpy(methbuf, method[methnum]);
+    if (methid == IMPLODED) {
+        methbuf[1] = (char)((G.crec.general_purpose_bit_flag & 2)? '8' : '4');
+        methbuf[3] = (char)((G.crec.general_purpose_bit_flag & 4)? '3' : '2');
+    } else if (methid == DEFLATED || methid == ENHDEFLATED) {
+        ush  dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3);
+        methbuf[3] = dtype[dnum];
+    } else if (methnum >= NUM_METHODS) {   /* unknown */
+        /* 2016-12-05 SMS.
+         * https://launchpad.net/bugs/1643750
+         * Unexpectedly large compression methods overflow
+         * &methbuf[].  Use the old, three-digit decimal format
+         * for values which fit.  Otherwise, sacrifice the "u",
+         * and use four-digit hexadecimal.
+         */
+        if (G.crec.compression_method <= 999) {
+              sprintf( &methbuf[ 1], "%03u", G.crec.compression_method);
+        } else {
+              sprintf( &methbuf[ 0], "%04X", G.crec.compression_method);
+        }
+
+    }
+
+    for (k = 0;  k < 15;  ++k)
+        attribs[k] = ' ';
+    attribs[15] = 0;
+
+    xattr = (unsigned)((G.crec.external_file_attributes >> 16) & 0xFFFF);
+    switch (hostnum) {
+        case VMS_:
+            {   int    i, j;
+
+                for (k = 0;  k < 12;  ++k)
+                    workspace[k] = 0;
+                if (xattr & VMS_IRUSR)
+                    workspace[0] = 'R';
+                if (xattr & VMS_IWUSR) {
+                    workspace[1] = 'W';
+                    workspace[3] = 'D';
+                }
+                if (xattr & VMS_IXUSR)
+                    workspace[2] = 'E';
+                if (xattr & VMS_IRGRP)
+                    workspace[4] = 'R';
+                if (xattr & VMS_IWGRP) {
+                    workspace[5] = 'W';
+                    workspace[7] = 'D';
+                }
+                if (xattr & VMS_IXGRP)
+                  workspace[6] = 'E';
+                if (xattr & VMS_IROTH)
+                    workspace[8] = 'R';
+                if (xattr & VMS_IWOTH) {
+                    workspace[9] = 'W';
+                    workspace[11] = 'D';
+                }
+                if (xattr & VMS_IXOTH)
+                    workspace[10] = 'E';
+
+                p = attribs;
+                for (k = j = 0;  j < 3;  ++j) {     /* groups of permissions */
+                    for (i = 0;  i < 4;  ++i, ++k)  /* perms within a group */
+                        if (workspace[k])
+                            *p++ = workspace[k];
+                    *p++ = ',';                     /* group separator */
+                }
+                *--p = ' ';   /* overwrite last comma */
+                if ((p - attribs) < 12)
+                    sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10);
+            }
+            break;
+
+        case AMIGA_:
+            switch (xattr & AMI_IFMT) {
+                case AMI_IFDIR:  attribs[0] = 'd';  break;
+                case AMI_IFREG:  attribs[0] = '-';  break;
+                default:         attribs[0] = '?';  break;
+            }
+            attribs[1] = (xattr & AMI_IHIDDEN)?   'h' : '-';
+            attribs[2] = (xattr & AMI_ISCRIPT)?   's' : '-';
+            attribs[3] = (xattr & AMI_IPURE)?     'p' : '-';
+            attribs[4] = (xattr & AMI_IARCHIVE)?  'a' : '-';
+            attribs[5] = (xattr & AMI_IREAD)?     'r' : '-';
+            attribs[6] = (xattr & AMI_IWRITE)?    'w' : '-';
+            attribs[7] = (xattr & AMI_IEXECUTE)?  'e' : '-';
+            attribs[8] = (xattr & AMI_IDELETE)?   'd' : '-';
+            sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10);
+            break;
+
+        case THEOS_:
+            switch (xattr & THS_IFMT) {
+                case THS_IFLIB: *attribs = 'L'; break;
+                case THS_IFDIR: *attribs = 'D'; break;
+                case THS_IFCHR: *attribs = 'C'; break;
+                case THS_IFREG: *attribs = 'S'; break;
+                case THS_IFREL: *attribs = 'R'; break;
+                case THS_IFKEY: *attribs = 'K'; break;
+                case THS_IFIND: *attribs = 'I'; break;
+                case THS_IFR16: *attribs = 'P'; break;
+                case THS_IFP16: *attribs = '2'; break;
+                case THS_IFP32: *attribs = '3'; break;
+                default:        *attribs = '?'; break;
+            }
+            attribs[1] = (xattr & THS_INHID) ? '.' : 'H';
+            attribs[2] = (xattr & THS_IMODF) ? '.' : 'M';
+            attribs[3] = (xattr & THS_IWOTH) ? '.' : 'W';
+            attribs[4] = (xattr & THS_IROTH) ? '.' : 'R';
+            attribs[5] = (xattr & THS_IEUSR) ? '.' : 'E';
+            attribs[6] = (xattr & THS_IXUSR) ? '.' : 'X';
+            attribs[7] = (xattr & THS_IWUSR) ? '.' : 'W';
+            attribs[8] = (xattr & THS_IRUSR) ? '.' : 'R';
+            sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10);
+            break;
+
+        case FS_VFAT_:
+#ifdef OLD_THEOS_EXTRA
+            if (hostver == 20) {
+                switch (xattr & _THS_IFMT) {
+                    case _THS_IFLIB: *attribs = 'L'; break;
+                    case _THS_IFDIR: *attribs = 'd'; break;
+                    case _THS_IFCHR: *attribs = 'c'; break;
+                    case _THS_IFREG: *attribs = 'S'; break;
+                    case _THS_IODRC: *attribs = 'D'; break;
+                    case _THS_IOKEY: *attribs = 'K'; break;
+                    case _THS_IOIND: *attribs = 'I'; break;
+                    case _THS_IOPRG: *attribs = 'P'; break;
+                    case _THS_IO286: *attribs = '2'; break;
+                    case _THS_IO386: *attribs = '3'; break;
+                    default:         *attribs = '?'; break;
+                }
+                attribs[1] = (xattr & _THS_HIDDN) ? 'H' : '.';
+                attribs[2] = (xattr & _THS_IXOTH) ? '.' : 'X';
+                attribs[3] = (xattr & _THS_IWOTH) ? '.' : 'W';
+                attribs[4] = (xattr & _THS_IROTH) ? '.' : 'R';
+                attribs[5] = (xattr & _THS_IEUSR) ? '.' : 'E';
+                attribs[6] = (xattr & _THS_IXUSR) ? '.' : 'X';
+                attribs[7] = (xattr & _THS_IWUSR) ? '.' : 'W';
+                attribs[8] = (xattr & _THS_IRUSR) ? '.' : 'R';
+                sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10);
+                break;
+            } /* else: fall through! */
+#endif /* OLD_THEOS_EXTRA */
+
+        case FS_FAT_:
+        case FS_HPFS_:
+        case FS_NTFS_:
+        case VM_CMS_:
+        case MVS_:
+        case ACORN_:
+            if (hostnum != FS_FAT_ ||
+                (unsigned)(xattr & 0700) !=
+                 ((unsigned)0400 |
+                  ((unsigned)!(G.crec.external_file_attributes & 1) << 7) |
+                  ((unsigned)(G.crec.external_file_attributes & 0x10) << 2))
+               )
+            {
+                xattr = (unsigned)(G.crec.external_file_attributes & 0xFF);
+                sprintf(attribs, ".r.-...     %u.%u", hostver/10, hostver%10);
+                attribs[2] = (xattr & 0x01)? '-' : 'w';
+                attribs[5] = (xattr & 0x02)? 'h' : '-';
+                attribs[6] = (xattr & 0x04)? 's' : '-';
+                attribs[4] = (xattr & 0x20)? 'a' : '-';
+                if (xattr & 0x10) {
+                    attribs[0] = 'd';
+                    attribs[3] = 'x';
+                } else
+                    attribs[0] = '-';
+                if (IS_VOLID(xattr))
+                    attribs[0] = 'V';
+                else if ((p = MBSRCHR(G.filename, '.')) != (char *)NULL) {
+                    ++p;
+                    if (STRNICMP(p, "com", 3) == 0 ||
+                        STRNICMP(p, "exe", 3) == 0 ||
+                        STRNICMP(p, "btm", 3) == 0 ||
+                        STRNICMP(p, "cmd", 3) == 0 ||
+                        STRNICMP(p, "bat", 3) == 0)
+                        attribs[3] = 'x';
+                }
+                break;
+            } /* else: fall through! */
+
+        default:   /* assume Unix-like */
+            switch ((unsigned)(xattr & UNX_IFMT)) {
+                case (unsigned)UNX_IFDIR:   attribs[0] = 'd';  break;
+                case (unsigned)UNX_IFREG:   attribs[0] = '-';  break;
+                case (unsigned)UNX_IFLNK:   attribs[0] = 'l';  break;
+                case (unsigned)UNX_IFBLK:   attribs[0] = 'b';  break;
+                case (unsigned)UNX_IFCHR:   attribs[0] = 'c';  break;
+                case (unsigned)UNX_IFIFO:   attribs[0] = 'p';  break;
+                case (unsigned)UNX_IFSOCK:  attribs[0] = 's';  break;
+                default:          attribs[0] = '?';  break;
+            }
+            attribs[1] = (xattr & UNX_IRUSR)? 'r' : '-';
+            attribs[4] = (xattr & UNX_IRGRP)? 'r' : '-';
+            attribs[7] = (xattr & UNX_IROTH)? 'r' : '-';
+            attribs[2] = (xattr & UNX_IWUSR)? 'w' : '-';
+            attribs[5] = (xattr & UNX_IWGRP)? 'w' : '-';
+            attribs[8] = (xattr & UNX_IWOTH)? 'w' : '-';
+
+            if (xattr & UNX_IXUSR)
+                attribs[3] = (xattr & UNX_ISUID)? 's' : 'x';
+            else
+                attribs[3] = (xattr & UNX_ISUID)? 'S' : '-';  /* S==undefined */
+            if (xattr & UNX_IXGRP)
+                attribs[6] = (xattr & UNX_ISGID)? 's' : 'x';  /* == UNX_ENFMT */
+            else
+                /* attribs[6] = (xattr & UNX_ISGID)? 'l' : '-';  real 4.3BSD */
+                attribs[6] = (xattr & UNX_ISGID)? 'S' : '-';  /* SunOS 4.1.x */
+            if (xattr & UNX_IXOTH)
+                attribs[9] = (xattr & UNX_ISVTX)? 't' : 'x';  /* "sticky bit" */
+            else
+                attribs[9] = (xattr & UNX_ISVTX)? 'T' : '-';  /* T==undefined */
+
+            sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10);
+            break;
+
+    } /* end switch (hostnum: external attributes format) */
+
+#ifdef OLD_THEOS_EXTRA
+    Info(slide, 0, ((char *)slide, "%s %s %s ", attribs,
+      LoadFarStringSmall(((hostnum == FS_VFAT_ && hostver == 20) ?
+                          os_TheosOld :
+                          os[hostnum])),
+      FmZofft(G.crec.ucsize, "8", "u")));
+#else
+    Info(slide, 0, ((char *)slide, "%s %s %s ", attribs,
+      LoadFarStringSmall(os[hostnum]),
+      FmZofft(G.crec.ucsize, "8", "u")));
+#endif
+    Info(slide, 0, ((char *)slide, "%c",
+      (G.crec.general_purpose_bit_flag & 1)?
+      ((G.crec.internal_file_attributes & 1)? 'T' : 'B') :  /* encrypted */
+      ((G.crec.internal_file_attributes & 1)? 't' : 'b'))); /* plaintext */
+    k = (G.crec.extra_field_length ||
+         /* a local-only "UX" (old Unix/OS2/NT GMT times "IZUNIX") e.f.? */
+         ((G.crec.external_file_attributes & 0x8000) &&
+          (hostnum == UNIX_ || hostnum == FS_HPFS_ || hostnum == FS_NTFS_)));
+    Info(slide, 0, ((char *)slide, "%c", k?
+      ((G.crec.general_purpose_bit_flag & 8)? 'X' : 'x') :  /* extra field */
+      ((G.crec.general_purpose_bit_flag & 8)? 'l' : '-'))); /* no extra field */
+      /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ extended local header or not */
+
+    if (uO.lflag == 4) {
+        zusz_t csiz = G.crec.csize;
+
+        if (G.crec.general_purpose_bit_flag & 1)
+            csiz -= 12;    /* if encrypted, don't count encryption header */
+        Info(slide, 0, ((char *)slide, "%3d%%",
+          (ratio(G.crec.ucsize,csiz)+5)/10));
+    } else if (uO.lflag == 5)
+        Info(slide, 0, ((char *)slide, " %s",
+          FmZofft(G.crec.csize, "8", "u")));
+
+    /* For printing of date & time, a "char d_t_buf[16]" is required.
+     * To save stack space, we reuse the "char attribs[16]" buffer whose
+     * content is no longer needed.
+     */
+#   define d_t_buf attribs
+#ifdef USE_EF_UT_TIME
+    z_modtim = G.extra_field &&
+#ifdef IZ_CHECK_TZ
+               G.tz_is_valid &&
+#endif
+               (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1,
+                                 G.crec.last_mod_dos_datetime, &z_utime, NULL)
+                & EB_UT_FL_MTIME)
+              ? &z_utime.mtime : NULL;
+    TIMET_TO_NATIVE(z_utime.mtime)     /* NOP unless MSC 7.0 or Macintosh */
+    d_t_buf[0] = (char)0;              /* signal "show local time" */
+#else
+#   define z_modtim NULL
+#endif
+    Info(slide, 0, ((char *)slide, " %s %s ", methbuf,
+      zi_time(__G__ &G.crec.last_mod_dos_datetime, z_modtim, d_t_buf)));
+    fnprint(__G);
+
+/*---------------------------------------------------------------------------
+    Skip the file comment, if any (the filename has already been printed,
+    above).  That finishes up this file entry...
+  ---------------------------------------------------------------------------*/
+
+    SKIP_(G.crec.file_comment_length)
+
+    return error_in_archive;
+
+} /* end function zi_short() */
+
+
+
+
+
+/**************************************/
+/*  Function zi_showMacTypeCreator()  */
+/**************************************/
+
+static void zi_showMacTypeCreator(__G__ ebfield)
+    __GDEF
+    uch *ebfield;
+{
+    /* not every Type / Creator character is printable */
+    if (isprint(native(ebfield[0])) && isprint(native(ebfield[1])) &&
+        isprint(native(ebfield[2])) && isprint(native(ebfield[3])) &&
+        isprint(native(ebfield[4])) && isprint(native(ebfield[5])) &&
+        isprint(native(ebfield[6])) && isprint(native(ebfield[7]))) {
+       Info(slide, 0, ((char *)slide, LoadFarString(MacOSdata),
+            native(ebfield[0]), native(ebfield[1]),
+            native(ebfield[2]), native(ebfield[3]),
+            native(ebfield[4]), native(ebfield[5]),
+            native(ebfield[6]), native(ebfield[7])));
+    } else {
+       Info(slide, 0, ((char *)slide, LoadFarString(MacOSdata1),
+            (((ulg)ebfield[0]) << 24) +
+            (((ulg)ebfield[1]) << 16) +
+            (((ulg)ebfield[2]) << 8)  +
+            ((ulg)ebfield[3]),
+            (((ulg)ebfield[4]) << 24) +
+            (((ulg)ebfield[5]) << 16) +
+            (((ulg)ebfield[6]) << 8)  +
+            ((ulg)ebfield[7])));
+    }
+} /* end function zi_showMacTypeCreator() */
+
+
+
+
+
+/************************/
+/*  Function zi_time()  */
+/************************/
+
+static char *zi_time(__G__ datetimez, modtimez, d_t_str)
+    __GDEF
+    ZCONST ulg *datetimez;
+    ZCONST time_t *modtimez;
+    char *d_t_str;
+{
+    unsigned yr, mo, dy, hh, mm, ss;
+    char monthbuf[4];
+    ZCONST char *monthstr;
+    static ZCONST char Far month[12][4] = {
+        "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+    };
+#ifdef USE_EF_UT_TIME
+    struct tm *t;
+#endif
+
+
+
+/*---------------------------------------------------------------------------
+    Convert the file-modification date and time info to a string of the form
+    "1991 Feb 23 17:15:00", "23-Feb-91 17:15" or "19910223.171500", depending
+    on values of lflag and T_flag.  If using Unix-time extra fields, convert
+    to local time or not, depending on value of first character in d_t_str[].
+  ---------------------------------------------------------------------------*/
+
+#ifdef USE_EF_UT_TIME
+    if (modtimez != NULL) {
+#ifndef NO_GMTIME
+        /* check for our secret message from above... */
+        t = (d_t_str[0] == (char)1)? gmtime(modtimez) : localtime(modtimez);
+#else
+        t = localtime(modtimez);
+#endif
+        if (uO.lflag > 9 && t == (struct tm *)NULL)
+            /* time conversion error in verbose listing format,
+             * return string with '?' instead of data
+             */
+            return (strcpy(d_t_str, LoadFarString(lngYMDHMSTimeError)));
+    } else
+        t = (struct tm *)NULL;
+    if (t != (struct tm *)NULL) {
+        mo = (unsigned)(t->tm_mon + 1);
+        dy = (unsigned)(t->tm_mday);
+        yr = (unsigned)(t->tm_year);
+
+        hh = (unsigned)(t->tm_hour);
+        mm = (unsigned)(t->tm_min);
+        ss = (unsigned)(t->tm_sec);
+    } else
+#endif /* USE_EF_UT_TIME */
+    {
+        yr = ((unsigned)(*datetimez >> 25) & 0x7f) + 80;
+        mo = ((unsigned)(*datetimez >> 21) & 0x0f);
+        dy = ((unsigned)(*datetimez >> 16) & 0x1f);
+
+        hh = (((unsigned)*datetimez >> 11) & 0x1f);
+        mm = (((unsigned)*datetimez >> 5) & 0x3f);
+        ss = (((unsigned)*datetimez << 1) & 0x3e);
+    }
+
+    if (mo == 0 || mo > 12) {
+        sprintf(monthbuf, LoadFarString(BogusFmt), mo);
+        monthstr = monthbuf;
+    } else
+        monthstr = LoadFarStringSmall(month[mo-1]);
+
+    if (uO.lflag > 9)   /* verbose listing format */
+        sprintf(d_t_str, LoadFarString(lngYMDHMSTime), yr+1900, monthstr, dy,
+          hh, mm, ss);
+    else if (uO.T_flag)
+        sprintf(d_t_str, LoadFarString(DecimalTime), yr+1900, mo, dy,
+          hh, mm, ss);
+    else   /* was:  if ((uO.lflag >= 3) && (uO.lflag <= 5)) */
+        sprintf(d_t_str, LoadFarString(shtYMDHMTime), yr%100, monthstr, dy,
+          hh, mm);
+
+    return d_t_str;
+
+} /* end function zi_time() */
+
+#endif /* !NO_ZIPINFO */
Index: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch/unzip60-new	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch/unzip60-new	(revision 5)

Property changes on: a/infozip/unzip/create-6.0-slackware-patch/unzip60-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/unzip/create-6.0-slackware-patch
===================================================================
--- a/infozip/unzip/create-6.0-slackware-patch	(nonexistent)
+++ a/infozip/unzip/create-6.0-slackware-patch	(revision 5)

Property changes on: a/infozip/unzip/create-6.0-slackware-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/unzip/patches/README
===================================================================
--- a/infozip/unzip/patches/README	(nonexistent)
+++ a/infozip/unzip/patches/README	(revision 5)
@@ -0,0 +1,59 @@
+
+/* begin *
+
+   Patches from Slackware:
+   ======================
+
+     Various patches:
+     ---------------
+       unzip-6.0-bzip2-configure.patch.gz
+       unzip-6.0-exec-shield.patch.gz
+       unzip-6.0-close.patch.gz
+       unzip-6.0-attribs-overflow.patch.gz
+
+     RH specific:
+     -----------
+       unzip-6.0-manpage-fix.patch.gz
+       unzip-6.0-fix-recmatch.patch.gz
+       unzip-6.0-symlink.patch.gz
+       unzip-6.0-caseinsensitive.patch.gz
+       unzip-6.0-format-secure.patch.gz
+       unzip-6.0-valgrind.patch.gz
+       unzip-6.0-x-option.patch.gz
+       unzip-6.0-overflow.patch.gz
+       unzip-6.0-cve-2014-8139.patch.gz
+       unzip-6.0-cve-2014-8140.patch.gz
+       unzip-6.0-cve-2014-8141.patch.gz
+       unzip-6.0-overflow-long-fsize.patch.gz
+       unzip-6.0-heap-overflow-infloop.patch.gz
+       unzip-6.0-alt-iconv-utf8.patch.gz
+       unzip-6.0-alt-iconv-utf8-print.patch.gz
+       0001-Fix-CVE-2016-9844-rhbz-1404283.patch.gz
+       unzip-6.0-timestamp.patch.gz
+       unzip-6.0-cve-2018-1000035-heap-based-overflow.patch.gz
+       unzip-6.0-cve-2018-18384.patch.gz
+       unzip-6.0-COVSCAN-fix-unterminated-string.patch.gz
+
+     Arch Linux:
+     -----------
+       unzip-6.0_CVE-2021-4217.patch
+       28-cve-2022-0529-and-cve-2022-0530.patch
+
+     Changed files:
+     =============
+       unzip60/crc_i386.S
+       unzip60/crypt.c
+       unzip60/extract.c
+       unzip60/fileio.c
+       unzip60/list.c
+       unzip60/man/unzip.1
+       unzip60/match.c
+       unzip60/process.c
+       unzip60/unix/configure
+       unzip60/unix/unix.c
+       unzip60/unix/unxcfg.h
+       unzip60/unzip.c
+       unzip60/unzpriv.h
+       unzip60/zipinfo.c
+
+ * end */
Index: a/infozip/unzip/patches
===================================================================
--- a/infozip/unzip/patches	(nonexistent)
+++ a/infozip/unzip/patches	(revision 5)

Property changes on: a/infozip/unzip/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/unzip
===================================================================
--- a/infozip/unzip	(nonexistent)
+++ a/infozip/unzip	(revision 5)

Property changes on: a/infozip/unzip
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/zip/Makefile
===================================================================
--- a/infozip/zip/Makefile	(nonexistent)
+++ a/infozip/zip/Makefile	(revision 5)
@@ -0,0 +1,65 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/infozip/zip30
+
+versions    = 30
+pkgname     = zip
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname), $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+patches     = $(CURDIR)/patches/zip-3.0-curdir.patch
+patches    += $(CURDIR)/patches/zip-3.0-exec-shield.patch
+patches    += $(CURDIR)/patches/zip-3.0-format-security.patch
+patches    += $(CURDIR)/patches/zip-3.0-man-pages.patch
+patches    += $(CURDIR)/patches/zip-3.0-zipnote.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-3.0-curdir-patch          ; ./create.patch.sh ) ; \
+	 ( cd create-3.0-exec-shield-patch     ; ./create.patch.sh ) ; \
+	 ( cd create-3.0-format-security-patch ; ./create.patch.sh ) ; \
+	 ( cd create-3.0-man-pages-patch       ; ./create.patch.sh ) ; \
+	 ( cd create-3.0-zipnote-patch         ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/infozip/zip/create-3.0-curdir-patch/create.patch.sh
===================================================================
--- a/infozip/zip/create-3.0-curdir-patch/create.patch.sh	(nonexistent)
+++ a/infozip/zip/create-3.0-curdir-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+VERSION=3.0
+
+version=${VERSION/./}
+
+tar --files-from=file.list -xzvf ../zip${version}.tar.gz
+mv zip${version} zip${version}-orig
+
+cp -rf ./zip${version}-new ./zip${version}
+
+diff --unified -Nr  zip${version}-orig  zip${version} > zip-${VERSION}-curdir.patch
+
+mv zip-${VERSION}-curdir.patch ../patches
+
+rm -rf ./zip${version}
+rm -rf ./zip${version}-orig

Property changes on: a/infozip/zip/create-3.0-curdir-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/infozip/zip/create-3.0-curdir-patch/file.list
===================================================================
--- a/infozip/zip/create-3.0-curdir-patch/file.list	(nonexistent)
+++ a/infozip/zip/create-3.0-curdir-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+zip30/util.c
Index: a/infozip/zip/create-3.0-curdir-patch/zip30-new/util.c
===================================================================
--- a/infozip/zip/create-3.0-curdir-patch/zip30-new/util.c	(nonexistent)
+++ a/infozip/zip/create-3.0-curdir-patch/zip30-new/util.c	(revision 5)
@@ -0,0 +1,1452 @@
+/*
+  util.c
+
+  Copyright (c) 1990-2008 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2007-Mar-4 or later
+  (the contents of which are also included in zip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*
+ *  util.c by Mark Adler.
+ */
+#define __UTIL_C
+
+#include "zip.h"
+#include "ebcdic.h"
+#include <ctype.h>
+
+#ifdef MSDOS16
+#  include <dos.h>
+#endif
+
+#ifdef NO_MKTIME
+#  ifndef IZ_MKTIME_ONLY
+#    define IZ_MKTIME_ONLY      /* only mktime() related code is pulled in */
+#  endif
+#  include "timezone.c"
+#endif
+
+uch upper[256], lower[256];
+/* Country-dependent case map table */
+
+
+#ifndef UTIL /* UTIL picks out namecmp code (all utils) */
+
+/* RISC OS uses # as its single-character wildcard */
+#ifdef RISCOS
+#  define WILDCHR_SINGLE '#'
+#  define WILDCHR_MULTI  '*'
+#  define DIRSEP_CHR '.'
+#endif
+
+#ifdef VMS
+#  define WILDCHR_SINGLE '%'
+#  define WILDCHR_MULTI  '*'
+#  define DIRSEP_CHR '.'
+#endif
+
+#ifndef WILDCHR_SINGLE
+#  define WILDCHR_SINGLE '?'
+#endif
+#ifndef WILDCHR_MULTI
+#  define WILDCHR_MULTI '*'
+#endif
+#ifndef DIRSEP_CHR
+#  define DIRSEP_CHR '/'
+#endif
+
+/* Local functions */
+local int recmatch OF((ZCONST char *, ZCONST char *, int));
+#if defined(UNICODE_SUPPORT) && defined(WIN32)
+  local long recmatchw OF((ZCONST wchar_t *, ZCONST wchar_t *, int));
+#endif
+local int count_args OF((char *s));
+
+#ifdef MSDOS16
+  local unsigned ident OF((unsigned chr));
+#endif
+
+#ifndef HAVE_FSEEKABLE
+
+/* 2004-11-12 SMS.
+   Changed to use z*o() functions, and ftell() test from >= 0 to != -1.
+   This solves problems with negative 32-bit offsets, even on small-file
+   products.
+*/
+int fseekable( fp)
+FILE *fp;
+{
+    zoff_t x;
+
+    return (fp == NULL ||
+     ((zfseeko( fp, ((zoff_t) -1), SEEK_CUR) == 0) &&   /* Seek ok. */
+     ((x = zftello( fp)) != ((zoff_t) -1)) &&           /* Tell ok. */
+     (zfseeko( fp, ((zoff_t) 1), SEEK_CUR) == 0) &&     /* Seek ok. */
+     (zftello( fp) == x+ 1)));                          /* Tells agree. */
+}
+#endif /* HAVE_FSEEKABLE */
+
+
+char *isshexp(p)
+char *p;                /* candidate sh expression */
+/* If p is a sh expression, a pointer to the first special character is
+   returned.  Otherwise, NULL is returned. */
+{
+  for (; *p; INCSTR(p))
+    if (*p == '\\' && *(p+1))
+      p++;
+#ifdef VMS
+    else if (*p == WILDCHR_SINGLE || *p == WILDCHR_MULTI)
+#else /* !VMS */
+    else if (*p == WILDCHR_SINGLE || *p == WILDCHR_MULTI || *p == '[')
+#endif /* ?VMS */
+      return p;
+  return NULL;
+}
+
+#ifdef UNICODE_SUPPORT
+# ifdef WIN32
+
+wchar_t *isshexpw(pw)
+  wchar_t *pw;          /* candidate sh expression */
+/* If pw is a sh expression, a pointer to the first special character is
+   returned.  Otherwise, NULL is returned. */
+{
+  for (; *pw; pw++)
+    if (*pw == (wchar_t)'\\' && *(pw+1))
+      pw++;
+    else if (*pw == (wchar_t)WILDCHR_SINGLE || *pw == (wchar_t)WILDCHR_MULTI ||
+             *pw == (wchar_t)'[')
+      return pw;
+  return NULL;
+}
+
+# endif
+#endif
+
+
+#ifdef UNICODE_SUPPORT
+# ifdef WIN32
+
+local long recmatchw(pw, sw, cs)
+ZCONST wchar_t *pw;     /* sh pattern to match */
+ZCONST wchar_t *sw;     /* string to match it to */
+int cs;                 /* flag: force case-sensitive matching */
+/* Recursively compare the sh pattern p with the string s and return 1 if
+   they match, and 0 or 2 if they don't or if there is a syntax error in the
+   pattern.  This routine recurses on itself no deeper than the number of
+   characters in the pattern. */
+{
+  long c;               /* pattern char or start of range in [-] loop */
+  /* Get first character, the pattern for new recmatch calls follows */
+
+  c = (long)*(pw++);
+
+  /* If that was the end of the pattern, match if string empty too */
+  if (c == 0)
+    return *sw == 0;
+
+  /* '?' matches any character (but not an empty string) */
+  if ((wchar_t)c == (wchar_t)WILDCHR_SINGLE) {
+    if (wild_stop_at_dir)
+      return (*sw && *sw != (wchar_t)DIRSEP_CHR) ? recmatchw(pw, sw + 1, cs) : 0;
+    else
+      return *sw ? recmatchw(pw, sw + 1, cs) : 0;
+  }
+
+  /* WILDCHR_MULTI ('*') matches any number of characters, including zero */
+  if (!no_wild && (wchar_t)c == (wchar_t)WILDCHR_MULTI)
+  {
+    if (wild_stop_at_dir) {
+      /* Check for an immediately following WILDCHR_MULTI */
+      if (*pw != (wchar_t)WILDCHR_MULTI) {
+        /* Single WILDCHR_MULTI ('*'): this doesn't match slashes */
+        for (; *sw && *sw != (wchar_t)DIRSEP_CHR; sw++)
+          if ((c = recmatchw(pw, sw, cs)) != 0)
+            return c;
+        /* end of pattern: matched if at end of string, else continue */
+        if (*pw == 0)
+          return (*sw == 0);
+        /* continue to match if at DIRSEP_CHR in pattern, else give up */
+        return (*pw == (wchar_t)DIRSEP_CHR || (*pw == (wchar_t)'\\' &&
+                pw[1] == (wchar_t)DIRSEP_CHR))
+               ? recmatchw(pw, sw, cs) : 2;
+      }
+      /* Two consecutive WILDCHR_MULTI ("**"): this matches DIRSEP_CHR ('/') */
+      pw++;        /* move p past the second WILDCHR_MULTI */
+      /* continue with the normal non-WILD_STOP_AT_DIR code */
+    } /* wild_stop_at_dir */
+
+    /* Not wild_stop_at_dir */
+    if (*pw == 0)
+      return 1;
+    if (!isshexpw((wchar_t *)pw))
+    {
+      /* optimization for rest of pattern being a literal string */
+
+      /* optimization to handle patterns like *.txt */
+      /* if the first char in the pattern is '*' and there */
+      /* are no other shell expression chars, i.e. a literal string */
+      /* then just compare the literal string at the end */
+
+      ZCONST wchar_t *swrest;
+
+      swrest = sw + (wcslen(sw) - wcslen(pw));
+      if (swrest - sw < 0)
+        /* remaining literal string from pattern is longer than rest of
+           test string, there can't be a match
+         */
+        return 0;
+      else
+        /* compare the remaining literal pattern string with the last bytes
+           of the test string to check for a match */
+        return ((cs ? wcscmp(pw, swrest) : _wcsicmp(pw, swrest)) == 0);
+    }
+    else
+    {
+      /* pattern contains more wildcards, continue with recursion... */
+      for (; *sw; sw++)
+        if ((c = recmatchw(pw, sw, cs)) != 0)
+          return c;
+      return 2;           /* 2 means give up--shmatch will return false */
+    }
+  }
+
+  /* Parse and process the list of characters and ranges in brackets */
+  if (!no_wild && allow_regex && (wchar_t)c == '[')
+  {
+    int e;              /* flag true if next char to be taken literally */
+    ZCONST wchar_t *qw; /* pointer to end of [-] group */
+    int r;              /* flag true to match anything but the range */
+
+    if (*sw == 0)                        /* need a character to match */
+      return 0;
+    pw += (r = (*pw == (wchar_t)'!' || *pw == (wchar_t)'^')); /* see if reverse */
+    for (qw = pw, e = 0; *qw; qw++)         /* find closing bracket */
+      if (e)
+        e = 0;
+      else
+        if (*qw == (wchar_t)'\\')
+          e = 1;
+        else if (*qw == (wchar_t)']')
+          break;
+    if (*qw != (wchar_t)']')                      /* nothing matches if bad syntax */
+      return 0;
+    for (c = 0, e = *pw == (wchar_t)'-'; pw < qw; pw++)      /* go through the list */
+    {
+      if (e == 0 && *pw == (wchar_t)'\\')         /* set escape flag if \ */
+        e = 1;
+      else if (e == 0 && *pw == (wchar_t)'-')     /* set start of range if - */
+        c = *(pw-1);
+      else
+      {
+        wchar_t cc = (cs ? *sw : towupper(*sw));
+        wchar_t uc = (wchar_t) c;
+
+        if (*(pw+1) != (wchar_t)'-')
+          for (uc = uc ? uc : *pw; cc <= *pw; uc++)
+            /* compare range */
+            if ((cs ? uc : towupper(uc)) == cc)
+              return r ? 0 : recmatchw(qw + 1, sw + 1, cs);
+        c = e = 0;                      /* clear range, escape flags */
+      }
+    }
+    return r ? recmatchw(qw + 1, sw + 1, cs) : 0;
+                                        /* bracket match failed */
+  }
+
+  /* If escape ('\'), just compare next character */
+  if (!no_wild && (wchar_t)c == (wchar_t)'\\')
+    if ((c = *pw++) == '\0')            /* if \ at end, then syntax error */
+      return 0;
+
+  /* Just a character--compare it */
+  return (cs ? (wchar_t)c == *sw : towupper((wchar_t)c) == towupper(*sw)) ?
+          recmatchw(pw, sw + 1, cs) : 0;
+}
+
+# endif
+#endif
+
+
+local int recmatch(p, s, cs)
+ZCONST char *p;         /* sh pattern to match */
+ZCONST char *s;         /* string to match it to */
+int cs;                 /* flag: force case-sensitive matching */
+/* Recursively compare the sh pattern p with the string s and return 1 if
+   they match, and 0 or 2 if they don't or if there is a syntax error in the
+   pattern.  This routine recurses on itself no deeper than the number of
+   characters in the pattern. */
+{
+  int c;                /* pattern char or start of range in [-] loop */
+  /* Get first character, the pattern for new recmatch calls follows */
+
+  /* This fix provided by akt@m5.dion.ne.jp for Japanese.
+     See 21 July 2006 mail.
+     It only applies when p is pointing to a doublebyte character and
+     things like / and wildcards are not doublebyte.  This probably
+     should not be needed. */
+
+#ifdef _MBCS
+  if (CLEN(p) == 2) {
+    if (CLEN(s) == 2) {
+      return (*p == *s && *(p+1) == *(s+1)) ?
+        recmatch(p + 2, s + 2, cs) : 0;
+    } else {
+      return 0;
+    }
+  }
+#endif /* ?_MBCS */
+
+  c = *POSTINCSTR(p);
+
+  /* If that was the end of the pattern, match if string empty too */
+  if (c == 0)
+    return *s == 0;
+
+  /* '?' (or '%' or '#') matches any character (but not an empty string) */
+  if (c == WILDCHR_SINGLE) {
+    if (wild_stop_at_dir)
+      return (*s && *s != DIRSEP_CHR) ? recmatch(p, s + CLEN(s), cs) : 0;
+    else
+      return *s ? recmatch(p, s + CLEN(s), cs) : 0;
+  }
+
+  /* WILDCHR_MULTI ('*') matches any number of characters, including zero */
+#ifdef AMIGA
+  if (!no_wild && c == '#' && *p == '?')            /* "#?" is Amiga-ese for "*" */
+    c = WILDCHR_MULTI, p++;
+#endif /* AMIGA */
+  if (!no_wild && c == WILDCHR_MULTI)
+  {
+    if (wild_stop_at_dir) {
+      /* Check for an immediately following WILDCHR_MULTI */
+# ifdef AMIGA
+      if ((c = p[0]) == '#' && p[1] == '?') /* "#?" is Amiga-ese for "*" */
+        c = WILDCHR_MULTI, p++;
+      if (c != WILDCHR_MULTI) {
+# else /* !AMIGA */
+      if (*p != WILDCHR_MULTI) {
+# endif /* ?AMIGA */
+        /* Single WILDCHR_MULTI ('*'): this doesn't match slashes */
+        for (; *s && *s != DIRSEP_CHR; INCSTR(s))
+          if ((c = recmatch(p, s, cs)) != 0)
+            return c;
+        /* end of pattern: matched if at end of string, else continue */
+        if (*p == 0)
+          return (*s == 0);
+        /* continue to match if at DIRSEP_CHR in pattern, else give up */
+        return (*p == DIRSEP_CHR || (*p == '\\' && p[1] == DIRSEP_CHR))
+               ? recmatch(p, s, cs) : 2;
+      }
+      /* Two consecutive WILDCHR_MULTI ("**"): this matches DIRSEP_CHR ('/') */
+      p++;        /* move p past the second WILDCHR_MULTI */
+      /* continue with the normal non-WILD_STOP_AT_DIR code */
+    } /* wild_stop_at_dir */
+
+    /* Not wild_stop_at_dir */
+    if (*p == 0)
+      return 1;
+    if (!isshexp((char *)p))
+    {
+      /* optimization for rest of pattern being a literal string */
+
+      /* optimization to handle patterns like *.txt */
+      /* if the first char in the pattern is '*' and there */
+      /* are no other shell expression chars, i.e. a literal string */
+      /* then just compare the literal string at the end */
+
+      ZCONST char *srest;
+
+      srest = s + (strlen(s) - strlen(p));
+      if (srest - s < 0)
+        /* remaining literal string from pattern is longer than rest of
+           test string, there can't be a match
+         */
+        return 0;
+      else
+        /* compare the remaining literal pattern string with the last bytes
+           of the test string to check for a match */
+#ifdef _MBCS
+      {
+        ZCONST char *q = s;
+
+        /* MBCS-aware code must not scan backwards into a string from
+         * the end.
+         * So, we have to move forward by character from our well-known
+         * character position s in the test string until we have advanced
+         * to the srest position.
+         */
+        while (q < srest)
+          INCSTR(q);
+        /* In case the byte *srest is a trailing byte of a multibyte
+         * character, we have actually advanced past the position (srest).
+         * For this case, the match has failed!
+         */
+        if (q != srest)
+          return 0;
+        return ((cs ? strcmp(p, q) : namecmp(p, q)) == 0);
+      }
+#else /* !_MBCS */
+        return ((cs ? strcmp(p, srest) : namecmp(p, srest)) == 0);
+#endif /* ?_MBCS */
+    }
+    else
+    {
+      /* pattern contains more wildcards, continue with recursion... */
+      for (; *s; INCSTR(s))
+        if ((c = recmatch(p, s, cs)) != 0)
+          return c;
+      return 2;           /* 2 means give up--shmatch will return false */
+    }
+  }
+
+#ifndef VMS             /* No bracket matching in VMS */
+  /* Parse and process the list of characters and ranges in brackets */
+  if (!no_wild && allow_regex && c == '[')
+  {
+    int e;              /* flag true if next char to be taken literally */
+    ZCONST char *q;     /* pointer to end of [-] group */
+    int r;              /* flag true to match anything but the range */
+
+    if (*s == 0)                        /* need a character to match */
+      return 0;
+    p += (r = (*p == '!' || *p == '^')); /* see if reverse */
+    for (q = p, e = 0; *q; q++)         /* find closing bracket */
+      if (e)
+        e = 0;
+      else
+        if (*q == '\\')
+          e = 1;
+        else if (*q == ']')
+          break;
+    if (*q != ']')                      /* nothing matches if bad syntax */
+      return 0;
+    for (c = 0, e = *p == '-'; p < q; p++)      /* go through the list */
+    {
+      if (e == 0 && *p == '\\')         /* set escape flag if \ */
+        e = 1;
+      else if (e == 0 && *p == '-')     /* set start of range if - */
+        c = *(p-1);
+      else
+      {
+        uch cc = (cs ? (uch)*s : case_map((uch)*s));
+        uch uc = (uch) c;
+        if (*(p+1) != '-')
+          for (uc = uc ? uc : (uch)*p; uc <= (uch)*p; uc++)
+            /* compare range */
+            if ((cs ? uc : case_map(uc)) == cc)
+              return r ? 0 : recmatch(q + CLEN(q), s + CLEN(s), cs);
+        c = e = 0;                      /* clear range, escape flags */
+      }
+    }
+    return r ? recmatch(q + CLEN(q), s + CLEN(s), cs) : 0;
+                                        /* bracket match failed */
+  }
+#endif /* !VMS */
+
+  /* If escape ('\'), just compare next character */
+  if (!no_wild && c == '\\')
+    if ((c = *p++) == '\0')             /* if \ at end, then syntax error */
+      return 0;
+
+#ifdef VMS
+  /* 2005-11-06 SMS.
+     Handle "..." wildcard in p with "." or "]" in s.
+  */
+  if ((c == '.') && (*p == '.') && (*(p+ CLEN( p)) == '.') &&
+   ((*s == '.') || (*s == ']')))
+  {
+    /* Match "...]" with "]".  Continue after "]" in both. */
+    if ((*(p+ 2* CLEN( p)) == ']') && (*s == ']'))
+      return recmatch( (p+ 3* CLEN( p)), (s+ CLEN( s)), cs);
+
+    /* Else, look for a reduced match in s, until "]" in or end of s. */
+    for (; *s && (*s != ']'); INCSTR(s))
+      if (*s == '.')
+        /* If reduced match, then continue after "..." in p, "." in s. */
+        if ((c = recmatch( (p+ CLEN( p)), s, cs)) != 0)
+          return (int)c;
+
+    /* Match "...]" with "]".  Continue after "]" in both. */
+    if ((*(p+ 2* CLEN( p)) == ']') && (*s == ']'))
+      return recmatch( (p+ 3* CLEN( p)), (s+ CLEN( s)), cs);
+
+    /* No reduced match.  Quit. */
+    return 2;
+  }
+
+#endif /* def VMS */
+
+  /* Just a character--compare it */
+  return (cs ? c == *s : case_map((uch)c) == case_map((uch)*s)) ?
+          recmatch(p, s + CLEN(s), cs) : 0;
+}
+
+
+int shmatch(p, s, cs)
+ZCONST char *p;         /* sh pattern to match */
+ZCONST char *s;         /* string to match it to */
+int cs;                 /* force case-sensitive match if TRUE */
+/* Compare the sh pattern p with the string s and return true if they match,
+   false if they don't or if there is a syntax error in the pattern. */
+{
+  while (s[0] == '.' && s[1] == '/') 
+    s += 2;                /* strip redundant leading "./" sections */
+  return recmatch(p, s, cs) == 1;
+}
+
+
+#if defined(DOS) || defined(WIN32)
+
+#ifdef UNICODE_SUPPORT
+
+int dosmatchw(pw, sw, cs)
+ZCONST wchar_t *pw;     /* dos pattern to match    */
+ZCONST wchar_t *sw;     /* string to match it to   */
+int cs;                 /* force case-sensitive match if TRUE */
+/* Treat filenames without periods as having an implicit trailing period */
+{
+  wchar_t *sw1;         /* revised string to match */
+  int r;                /* result */
+
+  if (wcschr(pw, (wchar_t)'.') && !wcschr(sw, (wchar_t)'.') &&
+      ((sw1 = (wchar_t *)malloc((wcslen(sw) + 2) * sizeof(wchar_t))) != NULL))
+  {
+    wcscpy(sw1, sw);
+    wcscat(sw1, L".");
+  }
+  else
+  {
+    /* will usually be OK */
+    sw1 = (wchar_t *)sw;
+  }
+
+  r = recmatchw(pw, sw1, cs) == 1;
+  if (sw != sw1)
+    free((zvoid *)sw1);
+  return r == 1;
+}
+
+#endif
+
+/* XXX  also suitable for OS2?  Atari?  Human68K?  TOPS-20?? */
+
+int dosmatch(p, s, cs)
+ZCONST char *p;         /* dos pattern to match    */
+ZCONST char *s;         /* string to match it to   */
+int cs;                 /* force case-sensitive match if TRUE */
+/* Treat filenames without periods as having an implicit trailing period */
+{
+  char *s1;             /* revised string to match */
+  int r;                /* result */
+
+  if (strchr(p, '.') && !strchr(s, '.') &&
+      ((s1 = malloc(strlen(s) + 2)) != NULL))
+  {
+    strcpy(s1, s);
+    strcat(s1, ".");
+  }
+  else
+  {
+    /* will usually be OK */
+    s1 = (char *)s;
+  }
+
+  r = recmatch(p, s1, cs) == 1;
+  if (s != s1)
+    free((zvoid *)s1);
+  return r == 1;
+}
+
+#endif /* DOS || WIN32 */
+
+zvoid far **search(b, a, n, cmp)
+ZCONST zvoid *b;        /* pointer to value to search for */
+ZCONST zvoid far **a;   /* table of pointers to values, sorted */
+extent n;               /* number of pointers in a[] */
+int (*cmp) OF((ZCONST zvoid *, ZCONST zvoid far *)); /* comparison function */
+
+/* Search for b in the pointer list a[0..n-1] using the compare function
+   cmp(b, c) where c is an element of a[i] and cmp() returns negative if
+   *b < *c, zero if *b == *c, or positive if *b > *c.  If *b is found,
+   search returns a pointer to the entry in a[], else search() returns
+   NULL.  The nature and size of *b and *c (they can be different) are
+   left up to the cmp() function.  A binary search is used, and it is
+   assumed that the list is sorted in ascending order. */
+{
+  ZCONST zvoid far **i; /* pointer to midpoint of current range */
+  ZCONST zvoid far **l; /* pointer to lower end of current range */
+  int r;                /* result of (*cmp)() call */
+  ZCONST zvoid far **u; /* pointer to upper end of current range */
+
+  l = (ZCONST zvoid far **)a;  u = l + (n-1);
+  while (u >= l) {
+    i = l + ((unsigned)(u - l) >> 1);
+    if ((r = (*cmp)(b, (ZCONST char far *)*(struct zlist far **)i)) < 0)
+      u = i - 1;
+    else if (r > 0)
+      l = i + 1;
+    else
+      return (zvoid far **)i;
+  }
+  return NULL;          /* If b were in list, it would belong at l */
+}
+
+#endif /* !UTIL */
+
+#ifdef MSDOS16
+
+local unsigned ident(unsigned chr)
+{
+   return chr; /* in al */
+}
+
+void init_upper()
+{
+  static struct country {
+    uch ignore[18];
+    int (far *casemap)(int);
+    uch filler[16];
+  } country_info;
+
+  struct country far *info = &country_info;
+  union REGS regs;
+  struct SREGS sregs;
+  unsigned int c;
+
+  regs.x.ax = 0x3800; /* get country info */
+  regs.x.dx = FP_OFF(info);
+  sregs.ds  = FP_SEG(info);
+  intdosx(&regs, &regs, &sregs);
+  for (c = 0; c < 128; c++) {
+    upper[c] = (uch) toupper(c);
+    lower[c] = (uch) c;
+  }
+  for (; c < sizeof(upper); c++) {
+    upper[c] = (uch) (*country_info.casemap)(ident(c));
+    /* ident() required because casemap takes its parameter in al */
+    lower[c] = (uch) c;
+  }
+  for (c = 0; c < sizeof(upper); c++ ) {
+    unsigned int u = upper[c];
+    if (u != c && lower[u] == (uch) u) {
+      lower[u] = (uch)c;
+    }
+  }
+  for (c = 'A'; c <= 'Z'; c++) {
+    lower[c] = (uch) (c - 'A' + 'a');
+  }
+}
+#else /* !MSDOS16 */
+#  ifndef OS2
+
+void init_upper()
+{
+  unsigned int c;
+#if defined(ATARI) || defined(CMS_MVS)
+#include <ctype.h>
+/* this should be valid for all other platforms too.   (HD 11/11/95) */
+  for (c = 0; c< sizeof(upper); c++) {
+    upper[c] = islower(c) ? toupper(c) : c;
+    lower[c] = isupper(c) ? tolower(c) : c;
+  }
+#else
+  for (c = 0; c < sizeof(upper); c++) upper[c] = lower[c] = (uch)c;
+  for (c = 'a'; c <= 'z';        c++) upper[c] = (uch)(c - 'a' + 'A');
+  for (c = 'A'; c <= 'Z';        c++) lower[c] = (uch)(c - 'A' + 'a');
+#endif
+}
+#  endif /* !OS2 */
+
+#endif /* ?MSDOS16 */
+
+int namecmp(string1, string2)
+  ZCONST char *string1, *string2;
+/* Compare the two strings ignoring case, and correctly taking into
+ * account national language characters. For operating systems with
+ * case sensitive file names, this function is equivalent to strcmp.
+ */
+{
+  int d;
+
+  for (;;)
+  {
+    d = (int) (uch) case_map(*string1)
+      - (int) (uch) case_map(*string2);
+
+    if (d || *string1 == 0 || *string2 == 0)
+      return d;
+
+    string1++;
+    string2++;
+  }
+}
+
+#ifdef EBCDIC
+char *strtoasc(char *str1, ZCONST char *str2)
+{
+  char *old;
+  old = str1;
+  while (*str1++ = (char)ascii[(uch)(*str2++)]);
+  return old;
+}
+
+char *strtoebc(char *str1, ZCONST char *str2)
+{
+  char *old;
+  old = str1;
+  while (*str1++ = (char)ebcdic[(uch)(*str2++)]);
+  return old;
+}
+
+char *memtoasc(char *mem1, ZCONST char *mem2, unsigned len)
+{
+  char *old;
+  old = mem1;
+  while (len--)
+     *mem1++ = (char)ascii[(uch)(*mem2++)];
+  return old;
+}
+
+char *memtoebc(char *mem1, ZCONST char *mem2, unsigned len)
+{
+  char *old;
+  old = mem1;
+  while (len--)
+     *mem1++ = (char)ebcdic[(uch)(*mem2++)];
+  return old;
+}
+#endif /* EBCDIC */
+
+#ifdef IZ_ISO2OEM_ARRAY
+char *str_iso_to_oem(dst, src)
+  ZCONST char *src;
+  char *dst;
+{
+  char *dest_start = dst;
+  while (*dst++ = (char)iso2oem[(uch)(*src++)]);
+  return dest_start;
+}
+#endif
+
+#ifdef IZ_OEM2ISO_ARRAY
+char *str_oem_to_iso(dst, src)
+  ZCONST char *src;
+  char *dst;
+{
+  char *dest_start = dst;
+  while (*dst++ = (char)oem2iso[(uch)(*src++)]);
+  return dest_start;
+}
+#endif
+
+
+
+/* DBCS support for Info-ZIP's zip  (mainly for japanese (-: )
+ * by Yoshioka Tsuneo (QWF00133@nifty.ne.jp,tsuneo-y@is.aist-nara.ac.jp)
+ * This code is public domain!   Date: 1998/12/20
+ */
+#ifdef _MBCS
+
+char *___tmp_ptr;
+
+int lastchar(ptr)
+    ZCONST char *ptr;
+{
+    ZCONST char *oldptr = ptr;
+    while(*ptr != '\0'){
+        oldptr = ptr;
+        INCSTR(ptr);
+    }
+    return (int)(unsigned)*oldptr;
+}
+
+unsigned char *zmbschr(str, c)
+    ZCONST unsigned char *str;
+    unsigned int c;
+{
+    while(*str != '\0'){
+        if (*str == c) {return (unsigned char *)str;}
+        INCSTR(str);
+    }
+    return NULL;
+}
+
+unsigned char *zmbsrchr(str, c)
+    ZCONST unsigned char *str;
+    unsigned int c;
+{
+    unsigned char *match = NULL;
+    while(*str != '\0'){
+        if (*str == c) {match = (unsigned char*)str;}
+        INCSTR(str);
+    }
+    return match;
+}
+#endif /* _MBCS */
+
+
+
+#ifndef UTIL
+
+/*****************************************************************
+ | envargs - add default options from environment to command line
+ |----------------------------------------------------------------
+ | Author: Bill Davidsen, original 10/13/91, revised 23 Oct 1991.
+ | This program is in the public domain.
+ |----------------------------------------------------------------
+ | Minor program notes:
+ |  1. Yes, the indirection is a tad complex
+ |  2. Parenthesis were added where not needed in some cases
+ |     to make the action of the code less obscure.
+ ****************************************************************/
+
+void envargs(Pargc, Pargv, envstr, envstr2)
+    int *Pargc;
+    char ***Pargv;
+    char *envstr;
+    char *envstr2;
+{
+    char *envptr;                     /* value returned by getenv */
+    char *bufptr;                     /* copy of env info */
+    int argc;                         /* internal arg count */
+    register int ch;                  /* spare temp value */
+    char **argv;                      /* internal arg vector */
+    char **argvect;                   /* copy of vector address */
+
+    /* see if anything in the environment */
+    envptr = getenv(envstr);
+    if (envptr != NULL)                                /* usual var */
+        while (isspace((uch)*envptr))      /* we must discard leading spaces */
+            envptr++;
+    if (envptr == NULL || *envptr == '\0')
+        if ((envptr = getenv(envstr2)) != NULL)                 /* alternate */
+            while (isspace((uch)*envptr))
+                envptr++;
+    if (envptr == NULL || *envptr == '\0')
+        return;
+
+    /* count the args so we can allocate room for them */
+    argc = count_args(envptr);
+    bufptr = malloc(1 + strlen(envptr));
+    if (bufptr == NULL)
+        ziperr(ZE_MEM, "Can't get memory for arguments");
+    strcpy(bufptr, envptr);
+
+    /* allocate a vector large enough for all args */
+    argv = (char **)malloc((argc + *Pargc + 1) * sizeof(char *));
+    if (argv == NULL) {
+        free(bufptr);
+        ziperr(ZE_MEM, "Can't get memory for arguments");
+    }
+    argvect = argv;
+
+    /* copy the program name first, that's always true */
+    *(argv++) = *((*Pargv)++);
+
+    /* copy the environment args first, may be changed */
+    do {
+#if defined(AMIGA) || defined(UNIX)
+        if (*bufptr == '"') {
+            char *argstart = ++bufptr;
+            *(argv++) = argstart;
+            for (ch = *bufptr; ch != '\0' && ch != '\"';
+                 ch = *PREINCSTR(bufptr))
+                if (ch == '\\' && bufptr[1] != '\0')
+                    ++bufptr;               /* skip to char after backslash */
+            if (ch != '\0')                       /* overwrite trailing '"' */
+                *(bufptr++) = '\0';
+
+            /* remove escape characters */
+            while ((argstart = MBSCHR(argstart, '\\')) != NULL) {
+                strcpy(argstart, argstart + 1);
+                if (*argstart)
+                    ++argstart;
+            }
+        } else {
+            *(argv++) = bufptr;
+            while ((ch = *bufptr) != '\0' && !isspace((uch)ch)) INCSTR(bufptr);
+            if (ch != '\0') *(bufptr++) = '\0';
+        }
+#else
+#  ifdef WIN32
+        /* We do not support backslash-quoting of quotes in quoted */
+        /* strings under Win32, because backslashes are directory  */
+        /* separators and double quotes are illegal in filenames.  */
+        if (*bufptr == '"') {
+            *(argv++) = ++bufptr;
+            while ((ch = *bufptr) != '\0' && ch != '\"') INCSTR(bufptr);
+            if (ch != '\0') *(bufptr++) = '\0';
+        } else {
+            *(argv++) = bufptr;
+            while ((ch = *bufptr) != '\0' && !isspace((uch)ch)) INCSTR(bufptr);
+            if (ch != '\0') *(bufptr++) = '\0';
+        }
+#  else
+        *(argv++) = bufptr;
+        while ((ch = *bufptr) != '\0' && !isspace((uch)ch)) INCSTR(bufptr);
+        if (ch != '\0') *(bufptr++) = '\0';
+#  endif
+#endif /* ?(AMIGA || UNIX) */
+        while ((ch = *bufptr) != '\0' && isspace((uch)ch)) INCSTR(bufptr);
+    } while (ch);
+
+    /* now save old argc and copy in the old args */
+    argc += *Pargc;
+    while (--(*Pargc)) *(argv++) = *((*Pargv)++);
+
+    /* finally, add a NULL after the last arg, like UNIX */
+    *argv = NULL;
+
+    /* save the values and return */
+    *Pargv = argvect;
+    *Pargc = argc;
+}
+
+local int count_args(s)
+char *s;
+{
+    int count = 0;
+    char ch;
+
+    do {
+        /* count and skip args */
+        ++count;
+#if defined(AMIGA) || defined(UNIX)
+        if (*s == '\"') {
+            for (ch = *PREINCSTR(s); ch != '\0' && ch != '\"';
+                 ch = *PREINCSTR(s))
+                if (ch == '\\' && s[1] != '\0')
+                    INCSTR(s);
+            if (*s) INCSTR(s);  /* trailing quote */
+        } else
+            while ((ch = *s) != '\0' && !isspace((uch)ch)) INCSTR(s);
+#else
+#  ifdef WIN32
+        if (*s == '\"') {
+            ++s;                /* leading quote */
+            while ((ch = *s) != '\0' && ch != '\"') INCSTR(s);
+            if (*s) INCSTR(s);  /* trailing quote */
+        } else
+            while ((ch = *s) != '\0' && !isspace((uch)ch)) INCSTR(s);
+#  else
+        while ((ch = *s) != '\0' && !isspace((uch)ch)) INCSTR(s);
+#  endif
+#endif /* ?(AMIGA || UNIX) */
+        while ((ch = *s) != '\0' && isspace((uch)ch)) INCSTR(s);
+    } while (ch);
+
+    return(count);
+}
+
+
+
+/* Extended argument processing -- by Rich Wales
+ * This function currently deals only with the MKS shell, but could be
+ * extended later to understand other conventions.
+ *
+ * void expand_args(int *argcp, char ***argvp)
+ *
+ *    Substitutes the extended command line argument list produced by
+ *    the MKS Korn Shell in place of the command line info from DOS.
+ *
+ *    The MKS shell gets around DOS's 128-byte limit on the length of
+ *    a command line by passing the "real" command line in the envi-
+ *    ronment.  The "real" arguments are flagged by prepending a tilde
+ *    (~) to each one.
+ *
+ *    This "expand_args" routine creates a new argument list by scanning
+ *    the environment from the beginning, looking for strings begin-
+ *    ning with a tilde character.  The new list replaces the original
+ *    "argv" (pointed to by "argvp"), and the number of arguments
+ *    in the new list replaces the original "argc" (pointed to by
+ *    "argcp").
+ */
+void expand_args(argcp, argvp)
+      int *argcp;
+      char ***argvp;
+{
+#ifdef DOS
+
+/* Do NEVER include (re)definiton of `environ' variable with any version
+   of MSC or BORLAND/Turbo C. These compilers supply an incompatible
+   definition in <stdlib.h>.  */
+#if defined(__GO32__) || defined(__EMX__)
+      extern char **environ;          /* environment */
+#endif /* __GO32__ || __EMX__ */
+      char        **envp;             /* pointer into environment */
+      char        **newargv;          /* new argument list */
+      char        **argp;             /* pointer into new arg list */
+      int           newargc;          /* new argument count */
+
+      /* sanity check */
+      if (environ == NULL
+          || argcp == NULL
+          || argvp == NULL || *argvp == NULL)
+              return;
+      /* find out how many environment arguments there are */
+      for (envp = environ, newargc = 0;
+           *envp != NULL && (*envp)[0] == '~';
+           envp++, newargc++) ;
+      if (newargc == 0)
+              return;                 /* no environment arguments */
+      /* set up new argument list */
+      newargv = (char **) malloc(sizeof(char **) * (newargc+1));
+      if (newargv == NULL)
+              return;                 /* malloc failed */
+      for (argp = newargv, envp = environ;
+           *envp != NULL && (*envp)[0] == '~';
+           *argp++ = &(*envp++)[1]) ;
+      *argp = NULL;                   /* null-terminate the list */
+      /* substitute new argument list in place of old one */
+      *argcp = newargc;
+      *argvp = newargv;
+#else /* !DOS */
+      if (argcp || argvp) return;
+#endif /* ?DOS */
+}
+
+
+/* Fast routine for detection of plain text
+ * (ASCII or an ASCII-compatible extension such as ISO-8859, UTF-8, etc.)
+ * Author: Cosmin Truta.
+ * See "proginfo/txtvsbin.txt" for more information.
+ *
+ * This function returns the same result as set_file_type() in "trees.c".
+ * Unlike in set_file_type(), however, the speed depends on the buffer size,
+ * so the optimal implementation is different.
+ */
+int is_text_buf(buf_ptr, buf_size)
+    ZCONST char *buf_ptr;
+    unsigned buf_size;
+{
+    int result = 0;
+    unsigned i;
+    unsigned char c;
+
+    for (i = 0; i < buf_size; ++i)
+    {
+        c = (unsigned char)buf_ptr[i];
+        if (c >= 32)    /* speed up the loop by checking this first */
+            result = 1; /* white-listed character found; keep looping */
+        else            /* speed up the loop by inlining the following check */
+        if ((c <= 6) || (c >= 14 && c <= 25) || (c >= 28 && c <= 31))
+            return 0;   /* black-listed character found; stop */
+    }
+
+    return result;
+}
+
+#endif /* UTIL */
+
+
+#ifdef DEBUGNAMES
+#undef free
+int Free(x)
+void *x;
+{
+    if (x == (void *) 0xdeadbeef)
+        exit(-1);
+    free(x);
+    return 0;
+}
+
+int printnames()
+{
+     struct zlist far *z;
+
+     for (z = zfiles; z != NULL; z = z->nxt)
+           fprintf(mesg, "%s %s %s %p %p %p %08x %08x %08x\n",
+                            z->name, z->zname, z->iname,
+                            z->name, z->zname, z->iname,
+                            *((int *) z->name), *((int *) z->zname),
+                            *((int *) z->iname));
+     return 0;
+}
+
+#endif /* DEBUGNAMES */
+
+
+/* Below is used to format zoff_t values, which can be either long or long long
+   depending on if LARGE FILES are supported.  Function provided by SMS.
+   10/17/04 EG */
+
+/* 2004-12-01 SMS.
+ * Brought in fancy fzofft() from UnZip.
+ */
+
+/* This implementation assumes that no more than FZOFF_NUM values will be
+   needed in any printf using it.  */
+
+/* zip_fzofft(): Format a zoff_t value in a cylindrical buffer set.
+   This version renamed from fzofft because of name conflict in unzip
+   when combined in WiZ. */
+
+/* 2004-12-19 SMS.
+ * I still claim than the smart move would have been to disable one or
+ * the other instance with #if for Wiz.  But fine.  We'll change the
+ * name.
+ */
+
+/* This is likely not thread safe.  Needs to be done without static storage.
+   12/29/04 EG */
+
+/* zip_fzofft(): Format a zoff_t value in a cylindrical buffer set. */
+
+#define FZOFFT_NUM 4            /* Number of chambers. */
+#define FZOFFT_LEN 24           /* Number of characters/chamber. */
+
+
+/* Format a zoff_t value in a cylindrical buffer set. */
+
+char *zip_fzofft( val, pre, post)
+  zoff_t val;
+  char *pre;
+  char *post;
+{
+    /* Storage cylinder. */
+    static char fzofft_buf[ FZOFFT_NUM][ FZOFFT_LEN];
+    static int fzofft_index = 0;
+
+    /* Temporary format string storage. */
+    static char fmt[ 16] = "%";
+
+    /* Assemble the format string. */
+    fmt[ 1] = '\0';             /* Start after initial "%". */
+    if (pre == FZOFFT_HEX_WID)  /* Special hex width. */
+    {
+        strcat( fmt, FZOFFT_HEX_WID_VALUE);
+    }
+    else if (pre == FZOFFT_HEX_DOT_WID) /* Special hex ".width". */
+    {
+        strcat( fmt, ".");
+        strcat( fmt, FZOFFT_HEX_WID_VALUE);
+    }
+    else if (pre != NULL)       /* Caller's prefix (width). */
+    {
+        strcat( fmt, pre);
+    }
+
+    strcat( fmt, FZOFFT_FMT);   /* Long or long-long or whatever. */
+
+    if (post == NULL)
+        strcat( fmt, "d");      /* Default radix = decimal. */
+    else
+        strcat( fmt, post);     /* Caller's radix. */
+
+    /* Advance the cylinder. */
+    fzofft_index = (fzofft_index+ 1)% FZOFFT_NUM;
+
+    /* Write into the current chamber. */
+    sprintf( fzofft_buf[ fzofft_index], fmt, val);
+
+    /* Return a pointer to this chamber. */
+    return fzofft_buf[ fzofft_index];
+}
+
+
+/* Format a uzoff_t value in a cylindrical buffer set. */
+/* Added to support uzoff_t type.  12/29/04 */
+
+char *zip_fuzofft( val, pre, post)
+  uzoff_t val;
+  char *pre;
+  char *post;
+{
+    /* Storage cylinder. */
+    static char fuzofft_buf[ FZOFFT_NUM][ FZOFFT_LEN];
+    static int fuzofft_index = 0;
+
+    /* Temporary format string storage. */
+    static char fmt[ 16] = "%";
+
+    /* Assemble the format string. */
+    fmt[ 1] = '\0';             /* Start after initial "%". */
+    if (pre == FZOFFT_HEX_WID)  /* Special hex width. */
+    {
+        strcat( fmt, FZOFFT_HEX_WID_VALUE);
+    }
+    else if (pre == FZOFFT_HEX_DOT_WID) /* Special hex ".width". */
+    {
+        strcat( fmt, ".");
+        strcat( fmt, FZOFFT_HEX_WID_VALUE);
+    }
+    else if (pre != NULL)       /* Caller's prefix (width). */
+    {
+        strcat( fmt, pre);
+    }
+
+    strcat( fmt, FZOFFT_FMT);   /* Long or long-long or whatever. */
+
+    if (post == NULL)
+        strcat( fmt, "u");      /* Default radix = decimal. */
+    else
+        strcat( fmt, post);     /* Caller's radix. */
+
+    /* Advance the cylinder. */
+    fuzofft_index = (fuzofft_index+ 1)% FZOFFT_NUM;
+
+    /* Write into the current chamber. */
+    sprintf( fuzofft_buf[ fuzofft_index], fmt, val);
+
+    /* Return a pointer to this chamber. */
+    return fuzofft_buf[ fuzofft_index];
+}
+
+
+/* Display number to mesg stream
+   5/15/05 EG */
+
+int DisplayNumString(file, i)
+  FILE *file;
+  uzoff_t i;
+{
+  char tempstrg[100];
+  int j;
+  char *s = tempstrg;
+
+  WriteNumString(i, tempstrg);
+  /* skip spaces */
+  for (j = 0; j < 3; j++) {
+    if (*s != ' ') break;
+    s++;
+  }
+  fprintf(file, "%s", s);
+
+  return 0;
+}
+
+/* Read numbers with trailing size multiplier (like 10M) and return number.
+   10/30/04 EG */
+
+uzoff_t ReadNumString( numstring )
+  char *numstring;
+{
+  zoff_t num = 0;
+  char multchar = ' ';
+  int i;
+  uzoff_t mult = 1;
+
+  /* check if valid number (currently no negatives) */
+  if (numstring == NULL) {
+    zipwarn("Unable to read empty number in ReadNumString", "");
+    return (uzoff_t)-1;
+  }
+  if (numstring[0] < '0' || numstring[0] > '9') {
+    zipwarn("Unable to read number (must start with digit): ", numstring);
+    return (uzoff_t)-1;
+  }
+  if (strlen(numstring) > 8) {
+    zipwarn("Number too long to read (8 characters max): ", numstring);
+    return (uzoff_t)-1;
+  }
+
+  /* get the number part */
+  num = atoi(numstring);
+
+  /* find trailing multiplier */
+  for (i = 0; numstring[i] && isdigit(numstring[i]); i++) ;
+
+  /* return if no multiplier */
+  if (numstring[i] == '\0') {
+    return (uzoff_t)num;
+  }
+
+  /* nothing follows multiplier */
+  if (numstring[i + 1]) {
+    return (uzoff_t)-1;
+  }
+
+  /* get multiplier */
+  multchar = toupper(numstring[i]);
+
+  if (multchar == 'K') {
+    mult <<= 10;
+  } else if (multchar == 'M') {
+    mult <<= 20;
+  } else if (multchar == 'G') {
+    mult <<= 30;
+#ifdef LARGE_FILE_SUPPORT
+  } else if (multchar == 'T') {
+    mult <<= 40;
+#endif
+  } else {
+    return (uzoff_t)-1;
+  }
+
+  return (uzoff_t)num * mult;
+}
+
+
+/* Write the number as a string with a multiplier (like 10M) to outstring.
+   Always writes no more than 3 digits followed maybe by a multiplier and
+   returns the characters written or -1 if error.
+   10/30/04 EG */
+
+int WriteNumString( num, outstring )
+  uzoff_t num;
+  char *outstring;
+{
+  int mult;
+  int written = 0;
+  int i;
+  int j;
+  char digits[4];
+  int dig;
+
+  *outstring = '\0';
+
+  /* shift number 1 K until less than 10000 */
+  for (mult = 0; num >= 10240; mult++) {
+    num >>= 10;
+  }
+
+  /* write digits as "    0" */
+  for (i = 1; i < 4; i++) {
+    digits[i] = ' ';
+  }
+  digits[0] = '0';
+
+  if (num >= 1000) {
+    i = 3;
+    num *= 10;
+    num >>= 10;
+    mult++;
+    digits[0] = (char) (num % 10) + '0';
+    digits[1] = '.';
+    digits[2] = (char) (num / 10) + '0';
+  } else {
+    for (i = 0; num; i++) {
+      dig = (int) (num % 10);
+      num /= 10;
+      digits[i] = dig + '0';
+    }
+  }
+  if (i == 0) i = 1;
+  for (j = i; j > 0; j--) {
+    *outstring = digits[j - 1];
+    outstring++;
+    written++;
+  }
+
+  /* output multiplier */
+  if (mult == 0) {
+  } else if (mult == 1) {
+    *outstring = 'K';
+    outstring++;
+    written++;
+  } else if (mult == 2) {
+    *outstring = 'M';
+    outstring++;
+    written++;
+  } else if (mult == 3) {
+    *outstring = 'G';
+    outstring++;
+    written++;
+  } else if (mult == 4) {
+    *outstring = 'T';
+    outstring++;
+    written++;
+  } else {
+    *outstring = '?';
+    outstring++;
+    written++;
+  }
+
+  *outstring = '\0';
+
+  return written;
+}
+
+
+#if 0 /* not used anywhere, should get removed by next release... */
+
+/* Apply the Adler-16 checksum to a set of bytes.
+ * Use this function as you would use crc32():
+ * - First call this function by passing a NULL pointer instead of buf
+ *   OR initialize the checksum register with ADLERVAL_INITIAL.
+ * - Iteratively call this function for each buffer fragment.
+ * This function returns the updated checksum.
+ *
+ * IN assertion: chksum is a valid Adler-16 checksum:
+ *    (chksum & 0xffU) < ADLER16_BASE && ((chksum >> 8) & 0xffU) < ADLER16_BASE
+ *
+ * Author: Cosmin Truta.
+ * See "proginfo/adler16.txt" for more information.
+ */
+
+#define ADLER16_BASE 251        /* The largest prime smaller than 256 */
+
+unsigned int adler16(chksum, buf, len)
+    unsigned int chksum;
+    ZCONST uch *buf;
+    extent len;
+{
+    unsigned int sum1 = chksum & 0xff;
+    unsigned int sum2 = (chksum >> 8) & 0xff;
+    extent i;
+
+    Assert((sum1 < ADLER16_BASE) && (sum2 < ADLER16_BASE),
+           "adler16: invalid checksum");
+
+    if (buf == NULL)
+        return 1;
+
+    for (i = 0; i < len; ++i)
+    {
+        sum1 += buf[i];
+        if (sum1 >= ADLER16_BASE) /* this is faster than modulo ADLER16_BASE */
+            sum1 -= ADLER16_BASE;
+        sum2 += sum1;
+        if (sum2 >= ADLER16_BASE) /* ditto */
+            sum2 -= ADLER16_BASE;
+    }
+
+    return (sum2 << 8) | sum1;
+}
+
+#endif /* 0, not used anywhere */
+
+
+/* returns true if abbrev is abbreviation for matchstring */
+int abbrevmatch (matchstring, abbrev, case_sensitive, minmatch)
+  char *matchstring;
+  char *abbrev;
+  int case_sensitive;
+  int minmatch;
+{
+  int cnt = 0;
+  char *m;
+  char *a;
+
+  m = matchstring;
+  a = abbrev;
+
+  for (; *m && *a; m++, a++) {
+    cnt++;
+    if (case_sensitive) {
+      if (*m != *a) {
+        /* mismatch */
+        return 0;
+      }
+    } else {
+      if (toupper(*m) != toupper(*a)) {
+        /* mismatch */
+        return 0;
+      }
+    }
+  }
+  if (cnt < minmatch) {
+    /* not big enough string */
+    return 0;
+  }
+  if (*a != '\0') {
+    /* abbreviation longer than match string */
+    return 0;
+  }
+  /* either abbreviation or match */
+  return 1;
+}
Index: a/infozip/zip/create-3.0-curdir-patch/zip30-new
===================================================================
--- a/infozip/zip/create-3.0-curdir-patch/zip30-new	(nonexistent)
+++ a/infozip/zip/create-3.0-curdir-patch/zip30-new	(revision 5)

Property changes on: a/infozip/zip/create-3.0-curdir-patch/zip30-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/zip/create-3.0-curdir-patch
===================================================================
--- a/infozip/zip/create-3.0-curdir-patch	(nonexistent)
+++ a/infozip/zip/create-3.0-curdir-patch	(revision 5)

Property changes on: a/infozip/zip/create-3.0-curdir-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/zip/create-3.0-exec-shield-patch/create.patch.sh
===================================================================
--- a/infozip/zip/create-3.0-exec-shield-patch/create.patch.sh	(nonexistent)
+++ a/infozip/zip/create-3.0-exec-shield-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+VERSION=3.0
+
+version=${VERSION/./}
+
+tar --files-from=file.list -xzvf ../zip${version}.tar.gz
+mv zip${version} zip${version}-orig
+
+cp -rf ./zip${version}-new ./zip${version}
+
+diff --unified -Nr  zip${version}-orig  zip${version} > zip-${VERSION}-exec-shield.patch
+
+mv zip-${VERSION}-exec-shield.patch ../patches
+
+rm -rf ./zip${version}
+rm -rf ./zip${version}-orig

Property changes on: a/infozip/zip/create-3.0-exec-shield-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/infozip/zip/create-3.0-exec-shield-patch/file.list
===================================================================
--- a/infozip/zip/create-3.0-exec-shield-patch/file.list	(nonexistent)
+++ a/infozip/zip/create-3.0-exec-shield-patch/file.list	(revision 5)
@@ -0,0 +1,2 @@
+zip30/crc_i386.S
+zip30/match.S
Index: a/infozip/zip/create-3.0-exec-shield-patch/zip30-new/crc_i386.S
===================================================================
--- a/infozip/zip/create-3.0-exec-shield-patch/zip30-new/crc_i386.S	(nonexistent)
+++ a/infozip/zip/create-3.0-exec-shield-patch/zip30-new/crc_i386.S	(revision 5)
@@ -0,0 +1,307 @@
+/*
+  Copyright (c) 1990-2007 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2000-Apr-09 or later
+  (the contents of which are also included in zip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*
+ * crc_i386.S, optimized CRC calculation function for Zip and UnZip,
+ * created by Paul Kienitz and Christian Spieler.  Last revised 07 Jan 2007.
+ *
+ * GRR 961110:  incorporated Scott Field optimizations from win32/crc_i386.asm
+ *              => overall 6% speedup in "unzip -tq" on 9MB zipfile (486-66)
+ *
+ * SPC 970402:  revised for Rodney Brown's optimizations (32-bit-wide
+ *              aligned reads for most of the data from buffer), can be
+ *              disabled by defining the macro NO_32_BIT_LOADS
+ *
+ * SPC 971012:  added Rodney Brown's additional tweaks for 32-bit-optimized
+ *              CPUs (like the Pentium Pro, Pentium II, and probably some
+ *              Pentium clones). This optimization is controlled by the
+ *              preprocessor switch "__686" and is disabled by default.
+ *              (This default is based on the assumption that most users
+ *              do not yet work on a Pentium Pro or Pentium II machine ...)
+ *
+ * COS 050116:  Enabled the 686 build by default, because there are hardly any
+ *              pre-686 CPUs in serious use nowadays. (See SPC 970402 above.)
+ *
+ * SPC 060103:  Updated code to incorporate newer optimizations found in zlib.
+ *
+ * SPC 070107:  Added conditional switch to deactivate crc32() compilation.
+ *
+ * FLAT memory model assumed.  Calling interface:
+ *   - args are pushed onto the stack from right to left,
+ *   - return value is given in the EAX register,
+ *   - all other registers (with exception of EFLAGS) are preserved. (With
+ *     GNU C 2.7.x, %edx and %ecx are `scratch' registers, but preserving
+ *     them nevertheless adds only 4 single byte instructions.)
+ *
+ * This source generates the function
+ * ulg crc32(ulg crc, ZCONST uch *buf, extent len).
+ *
+ * Loop unrolling can be disabled by defining the macro NO_UNROLLED_LOOPS.
+ * This results in shorter code at the expense of reduced performance.
+ */
+
+/* This file is NOT used in conjunction with zlib, or when only creation of
+ * the basic CRC_32_Table (for other purpose) is requested.
+ */
+#if !defined(USE_ZLIB) && !defined(CRC_TABLE_ONLY)
+
+/* Preprocess with -DNO_UNDERLINE if your C compiler does not prefix
+ * external symbols with an underline character '_'.
+ */
+#if defined(NO_UNDERLINE) || defined(__ELF__)
+#  define _crc32            crc32
+#  define _get_crc_table    get_crc_table
+#endif
+/* Use 16-byte alignment if your assembler supports it. Warning: gas
+ * uses a log(x) parameter (.align 4 means 16-byte alignment). On SVR4
+ * the parameter is a number of bytes.
+ */
+#ifndef ALIGNMENT
+#  define ALIGNMENT .align 4,0x90
+#endif
+
+#if defined(i386) || defined(_i386) || defined(_I386) || defined(__i386)
+
+/* This version is for 386 Unix, OS/2, MSDOS in 32 bit mode (gcc & gas).
+ * Warning: it uses the AT&T syntax: mov source,dest
+ * This file is only optional. If you want to use the C version,
+ * remove -DASM_CRC from CFLAGS in Makefile and set OBJA to an empty string.
+ */
+
+                .file   "crc_i386.S"
+
+#if !defined(PRE_686) && !defined(__686)
+   /* Optimize for Pentium Pro and compatible CPUs by default. */
+#  define __686
+#endif
+
+#if defined(NO_STD_STACKFRAME) && defined(USE_STD_STACKFRAME)
+#  undef USE_STACKFRAME
+#else
+   /* The default is to use standard stack frame entry, because it
+    * results in smaller code!
+    */
+#  ifndef USE_STD_STACKFRAME
+#    define USE_STD_STACKFRAME
+#  endif
+#endif
+
+#ifdef USE_STD_STACKFRAME
+#  define _STD_ENTRY    pushl   %ebp ; movl   %esp,%ebp
+#  define arg1  8(%ebp)
+#  define arg2  12(%ebp)
+#  define arg3  16(%ebp)
+#  define _STD_LEAVE    popl    %ebp
+#else /* !USE_STD_STACKFRAME */
+#  define _STD_ENTRY
+#  define arg1  24(%esp)
+#  define arg2  28(%esp)
+#  define arg3  32(%esp)
+#  define _STD_LEAVE
+#endif /* ?USE_STD_STACKFRAME */
+
+/*
+ * These two (three) macros make up the loop body of the CRC32 cruncher.
+ * registers modified:
+ *   eax  : crc value "c"
+ *   esi  : pointer to next data byte (or lword) "buf++"
+ * registers read:
+ *   edi  : pointer to base of crc_table array
+ * scratch registers:
+ *   ebx  : index into crc_table array
+ *          (requires upper three bytes = 0 when __686 is undefined)
+ */
+#ifndef __686   /* optimize for 386, 486, Pentium */
+#define Do_CRC          /* c = (c >> 8) ^ table[c & 0xFF] */\
+                movb    %al, %bl                ;/* tmp = c & 0xFF  */\
+                shrl    $8, %eax                ;/* c = (c >> 8)    */\
+                xorl    (%edi, %ebx, 4), %eax   ;/* c ^= table[tmp] */
+#else   /* __686 : optimize for Pentium Pro and compatible CPUs */
+#define Do_CRC          /* c = (c >> 8) ^ table[c & 0xFF] */\
+                movzbl  %al, %ebx               ;/* tmp = c & 0xFF  */\
+                shrl    $8, %eax                ;/* c = (c >> 8)    */\
+                xorl    (%edi, %ebx, 4), %eax   ;/* c ^=table[tmp]  */
+#endif  /* ?__686 */
+
+#define Do_CRC_byte             /* c = (c >> 8) ^ table[(c^*buf++)&0xFF] */\
+                xorb    (%esi), %al     ;/* c ^= *buf  */\
+                incl    %esi            ;/* buf++      */\
+                Do_CRC
+
+#define Do_CRC_byteof(ofs)      /* c = (c >> 8) ^ table[(c^*buf++)&0xFF] */\
+                xorb    ofs(%esi), %al  ;/* c ^= *buf  */\
+                incl    %esi            ;/* buf++      */\
+                Do_CRC
+
+#ifndef  NO_32_BIT_LOADS
+# ifdef IZ_CRCOPTIM_UNFOLDTBL
+   /* the edx register is needed in crc calculation */
+#  define SavLen arg3
+#  define UpdCRC_lword \
+                movzbl  %al, %ebx               ; \
+                movl    3072(%edi,%ebx,4), %edx ; \
+                movzbl  %ah, %ebx               ; \
+                shrl    $16, %eax               ; \
+                xor     2048(%edi,%ebx,4), %edx ; \
+                movzbl  %al, %ebx               ; \
+                shrl    $8,%eax                 ; \
+                xorl    1024(%edi,%ebx,4), %edx ; \
+                movl    (%edi,%eax,4), %eax     ; \
+                xorl    %edx,%eax               ;
+#  define UpdCRC_lword_sh(dwPtrIncr) \
+                movzbl  %al, %ebx               ; \
+                movl    3072(%edi,%ebx,4), %edx ; \
+                movzbl  %ah, %ebx               ; \
+                shrl    $16, %eax               ; \
+                xor     2048(%edi,%ebx,4), %edx ; \
+                movzbl  %al, %ebx               ; \
+                addl    $4*(dwPtrIncr), %esi    ;/* ((ulg *)buf)+=dwPtrIncr */\
+                shrl    $8,%eax                 ; \
+                xorl    1024(%edi,%ebx,4), %edx ; \
+                movl    (%edi,%eax,4),%eax      ; \
+                xorl    %edx,%eax               ;
+# else /* !IZ_CRCOPTIM_UNFOLDTBL */
+   /* the edx register is not needed anywhere else */
+#  define SavLen %edx
+#  define UpdCRC_lword \
+                Do_CRC \
+                Do_CRC \
+                Do_CRC \
+                Do_CRC
+#  define UpdCRC_lword_sh(dwPtrIncr) \
+                Do_CRC \
+                Do_CRC \
+                addl    $4*(dwPtrIncr), %esi    ;/* ((ulg *)buf)++   */\
+                Do_CRC \
+                Do_CRC
+# endif /* ?IZ_CRCOPTIM_UNFOLDTBL */
+#define Do_CRC_lword \
+                xorl    (%esi), %eax           ;/* c ^= *(ulg *)buf */\
+                UpdCRC_lword_sh(1)              /* ... ((ulg *)buf)++ */
+#define Do_CRC_4lword \
+                xorl    (%esi), %eax           ;/* c ^= *(ulg *)buf */\
+                UpdCRC_lword \
+                xorl    4(%esi), %eax          ;/* c ^= *((ulg *)buf+1) */\
+                UpdCRC_lword \
+                xorl    8(%esi), %eax          ;/* c ^= *((ulg *)buf+2) */\
+                UpdCRC_lword \
+                xorl    12(%esi), %eax         ;/* c ^= *((ulg *)buf]+3 */\
+                UpdCRC_lword_sh(4)              /* ... ((ulg *)buf)+=4 */
+#endif  /* !NO_32_BIT_LOADS */
+
+
+                .text
+
+                .globl  _crc32
+
+_crc32:                         /* ulg crc32(ulg crc, uch *buf, extent len) */
+                _STD_ENTRY
+                pushl   %edi
+                pushl   %esi
+                pushl   %ebx
+                pushl   %edx
+                pushl   %ecx
+
+                movl    arg2, %esi           /* 2nd arg: uch *buf            */
+                subl    %eax, %eax           /* > if (!buf)                  */
+                testl   %esi, %esi           /* >   return 0;                */
+                jz      .L_fine              /* > else {                     */
+                call    _get_crc_table
+                movl    %eax, %edi
+                movl    arg1, %eax           /* 1st arg: ulg crc             */
+#ifndef __686
+                subl    %ebx, %ebx           /* ebx=0; bl usable as dword    */
+#endif
+                movl    arg3, %ecx           /* 3rd arg: extent len          */
+                notl    %eax                 /* >   c = ~crc;                */
+
+                testl   %ecx, %ecx
+#ifndef  NO_UNROLLED_LOOPS
+                jz      .L_bail
+#  ifndef  NO_32_BIT_LOADS
+                /* Assert now have positive length */
+.L_align_loop:
+                testl   $3, %esi        /* Align buf on lword boundary */
+                jz      .L_aligned_now
+                Do_CRC_byte
+                decl    %ecx
+                jnz     .L_align_loop
+.L_aligned_now:
+#  endif  /* !NO_32_BIT_LOADS */
+                movl    %ecx, SavLen         /* save current value of len */
+                shrl    $4, %ecx             /* ecx = len / 16   */
+                jz      .L_No_Sixteens
+/*  align loop head at start of 486 internal cache line !! */
+                ALIGNMENT
+.L_Next_Sixteen:
+#  ifndef NO_32_BIT_LOADS
+                 Do_CRC_4lword
+#  else   /* NO_32_BIT_LOADS */
+                 Do_CRC_byteof(0)
+                 Do_CRC_byteof(1)
+                 Do_CRC_byteof(2)
+                 Do_CRC_byteof(3)
+                 Do_CRC_byteof(4)
+                 Do_CRC_byteof(5)
+                 Do_CRC_byteof(6)
+                 Do_CRC_byteof(7)
+                 Do_CRC_byteof(8)
+                 Do_CRC_byteof(9)
+                 Do_CRC_byteof(10)
+                 Do_CRC_byteof(11)
+                 Do_CRC_byteof(12)
+                 Do_CRC_byteof(13)
+                 Do_CRC_byteof(14)
+                 Do_CRC_byteof(15)
+                 addl    $16,%esi        ;/* buf += 16 */
+#  endif  /* ?NO_32_BIT_LOADS */
+                decl    %ecx
+                jnz     .L_Next_Sixteen
+
+.L_No_Sixteens:
+                movl    SavLen, %ecx
+                andl    $15, %ecx         /* ecx = len % 16   */
+# ifndef NO_32_BIT_LOADS
+                shrl    $2,%ecx           /* ecx = len / 4    */
+                jz      .L_No_Fours
+.L_Next_Four:
+                Do_CRC_lword
+                decl    %ecx
+                jnz     .L_Next_Four
+.L_No_Fours:
+                movl    SavLen,%ecx
+                andl    $3,%ecx          /* ecx = len % 4 */
+# endif /* !NO_32_BIT_LOADS */
+#endif /* !NO_UNROLLED_LOOPS */
+                jz      .L_bail          /* > if (len)                       */
+/* align loop head at start of 486 internal cache line !! */
+                ALIGNMENT
+.L_loupe:                                /* >   do {                         */
+                 Do_CRC_byte             /*       c = CRC32(c,*buf++,crctab);*/
+                decl    %ecx             /* >   } while (--len);             */
+                jnz     .L_loupe
+
+.L_bail:                                 /* > }                              */
+                notl    %eax             /* > return ~c;                     */
+.L_fine:
+                popl    %ecx
+                popl    %edx
+                popl    %ebx
+                popl    %esi
+                popl    %edi
+                _STD_LEAVE
+                ret
+
+#else
+ error: this asm version is for 386 only
+#endif /* i386 || _i386 || _I386 || __i386 */
+
+#endif /* !USE_ZLIB && !CRC_TABLE_ONLY */
+
+.section .note.GNU-stack, "", @progbits
+.previous
Index: a/infozip/zip/create-3.0-exec-shield-patch/zip30-new/match.S
===================================================================
--- a/infozip/zip/create-3.0-exec-shield-patch/zip30-new/match.S	(nonexistent)
+++ a/infozip/zip/create-3.0-exec-shield-patch/zip30-new/match.S	(revision 5)
@@ -0,0 +1,410 @@
+/*
+  Copyright (c) 1990-2005 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2004-May-22 or later
+  (the contents of which are also included in zip.h) for terms of use.
+  If, for some reason, both of these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+
+/*
+ * match.s by Jean-loup Gailly. Translated to 32 bit code by Kai Uwe Rommel.
+ * The 68020 version has been written by Francesco Potorti` <pot@cnuce.cnr.it>
+ * with adaptations by Carsten Steger <stegerc@informatik.tu-muenchen.de>,
+ * Andreas Schwab <schwab@lamothe.informatik.uni-dortmund.de> and
+ * Kristoffer Eriksson <ske@pkmab.se>
+ */
+
+/* This file is NOT used in conjunction with zlib. */
+#ifndef USE_ZLIB
+
+/* Preprocess with -DNO_UNDERLINE if your C compiler does not prefix
+ * external symbols with an underline character '_'.
+ */
+#if defined(NO_UNDERLINE) || defined(__ELF__)
+#  define _prev             prev
+#  define _window           window
+#  define _match_start      match_start
+#  define _prev_length      prev_length
+#  define _good_match       good_match
+#  define _nice_match       nice_match
+#  define _strstart         strstart
+#  define _max_chain_length max_chain_length
+
+#  define _match_init       match_init
+#  define _longest_match    longest_match
+#endif
+
+#ifdef DYN_ALLOC
+  error: DYN_ALLOC not yet supported in match.s
+#endif
+
+/* Use 16-bytes alignment if your assembler supports it. Warning: gas
+ * uses a log(x) parameter (.align 4 means 16-bytes alignment). On SVR4
+ * the parameter is a number of bytes.
+ */
+#ifndef ALIGNMENT
+#  define ALIGNMENT 4
+#endif
+
+
+#ifndef WSIZE
+# define WSIZE          32768
+#endif
+#define MIN_MATCH       3
+#define MAX_MATCH       258
+#define MIN_LOOKAHEAD   (MAX_MATCH + MIN_MATCH + 1)
+#define MAX_DIST        (WSIZE - MIN_LOOKAHEAD)
+
+#if defined(i386) || defined(_I386) || defined(_i386) || defined(__i386)
+
+/* This version is for 386 Unix or OS/2 in 32 bit mode.
+ * Warning: it uses the AT&T syntax: mov source,dest
+ * This file is only optional. If you want to force the C version,
+ * add -DNO_ASM to CFLAGS in Makefile and set OBJA to an empty string.
+ * If you have reduced WSIZE in (g)zip.h, then make sure this is
+ * assembled with an equivalent -DWSIZE=<whatever>.
+ * This version assumes static allocation of the arrays (-DDYN_ALLOC not used).
+ */
+
+        .file   "match.S"
+
+        .globl  _match_init
+        .globl  _longest_match
+
+        .text
+
+_match_init:
+        ret
+
+/*-----------------------------------------------------------------------
+ * Set match_start to the longest match starting at the given string and
+ * return its length. Matches shorter or equal to prev_length are discarded,
+ * in which case the result is equal to prev_length and match_start is
+ * garbage.
+ * IN assertions: cur_match is the head of the hash chain for the current
+ *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
+ */
+
+        .align  ALIGNMENT
+
+_longest_match: /* int longest_match(cur_match) */
+
+#define cur_match   20(%esp)
+     /* return address */               /* esp+16 */
+        push    %ebp                    /* esp+12 */
+        push    %edi                    /* esp+8  */
+        push    %esi                    /* esp+4  */
+        push    %ebx                    /* esp    */
+
+/*
+ *      match        equ esi
+ *      scan         equ edi
+ *      chain_length equ ebp
+ *      best_len     equ ebx
+ *      limit        equ edx
+ */
+        mov     cur_match,%esi
+        mov     _strstart,%edx
+        mov     _max_chain_length,%ebp /* chain_length = max_chain_length */
+        mov     %edx,%edi
+        sub     $(MAX_DIST),%edx       /* limit = strstart-MAX_DIST */
+        cld                            /* string ops increment si and di */
+        jae     limit_ok
+        sub     %edx,%edx              /* limit = NIL */
+limit_ok:
+        add     $2+_window,%edi        /* edi = offset(window+strstart+2) */
+        mov     _prev_length,%ebx      /* best_len = prev_length */
+        movw    -2(%edi),%cx           /* cx = scan[0..1] */
+        movw    -3(%ebx,%edi),%ax      /* ax = scan[best_len-1..best_len] */
+        cmp     _good_match,%ebx       /* do we have a good match already? */
+        jb      do_scan
+        shr     $2,%ebp                /* chain_length >>= 2 */
+        jmp     do_scan
+
+        .align  ALIGNMENT
+long_loop:
+/* at this point, edi == scan+2, esi == cur_match */
+        movw    -3(%ebx,%edi),%ax       /* ax = scan[best_len-1..best_len] */
+        movw     -2(%edi),%cx           /* cx = scan[0..1] */
+short_loop:
+/*
+ * at this point, di == scan+2, si == cur_match,
+ * ax = scan[best_len-1..best_len] and cx = scan[0..1]
+ */
+        and     $(WSIZE-1), %esi
+        dec     %ebp                    /* --chain_length */
+        movw    _prev(,%esi,2),%si      /* cur_match = prev[cur_match] */
+                                        /* top word of esi is still 0 */
+        jz      the_end
+        cmp     %edx,%esi               /* cur_match <= limit ? */
+        jbe     the_end
+do_scan:
+        cmpw    _window-1(%ebx,%esi),%ax/* check match at best_len-1 */
+        jne     short_loop
+        cmpw    _window(%esi),%cx       /* check min_match_length match */
+        jne     short_loop
+
+        add     $2+_window,%esi         /* si = match */
+        mov     $((MAX_MATCH>>1)-1),%ecx/* scan for at most MAX_MATCH bytes */
+        mov     %edi,%eax               /* ax = scan+2 */
+        repe;   cmpsw                   /* loop until mismatch */
+        je      maxmatch                /* match of length MAX_MATCH? */
+mismatch:
+        movb    -2(%edi),%cl        /* mismatch on first or second byte? */
+        xchg    %edi,%eax           /* edi = scan+2, eax = end of scan */
+        subb    -2(%esi),%cl        /* cl = 0 if first bytes equal */
+        sub     %edi,%eax           /* eax = len */
+        sub     $2+_window,%esi     /* esi = cur_match + len */
+        sub     %eax,%esi           /* esi = cur_match */
+        subb    $1,%cl              /* set carry if cl == 0 (cannot use DEC) */
+        adc     $0,%eax             /* eax = carry ? len+1 : len */
+        cmp     %ebx,%eax           /* len > best_len ? */
+        jle     long_loop
+        mov     %esi,_match_start       /* match_start = cur_match */
+        mov     %eax,%ebx               /* ebx = best_len = len */
+#ifdef FULL_SEARCH
+        cmp     $(MAX_MATCH),%eax       /* len >= MAX_MATCH ? */
+#else
+        cmp     _nice_match,%eax        /* len >= nice_match ? */
+#endif
+        jl      long_loop
+the_end:
+        mov     %ebx,%eax               /* result = eax = best_len */
+        pop     %ebx
+        pop     %esi
+        pop     %edi
+        pop     %ebp
+        ret
+        .align  ALIGNMENT
+maxmatch:
+        cmpsb
+        jmp     mismatch
+
+#else /* !(i386 || _I386 || _i386 || __i386) */
+
+/* ======================== 680x0 version ================================= */
+
+#if defined(m68k)||defined(mc68k)||defined(__mc68000__)||defined(__MC68000__)
+#  ifndef mc68000
+#    define mc68000
+#  endif
+#endif
+
+#if defined(__mc68020__) || defined(__MC68020__) || defined(sysV68)
+#  ifndef mc68020
+#    define mc68020
+#  endif
+#endif
+
+#if defined(mc68020) || defined(mc68000)
+
+#if (defined(mc68020) || defined(NeXT)) && !defined(UNALIGNED_OK)
+#  define UNALIGNED_OK
+#endif
+
+#ifdef sysV68  /* Try Motorola Delta style */
+
+#  define GLOBAL(symbol)        global  symbol
+#  define TEXT                  text
+#  define FILE(filename)        file    filename
+#  define invert_maybe(src,dst) dst,src
+#  define imm(data)             &data
+#  define reg(register)         %register
+
+#  define addl                  add.l
+#  define addql                 addq.l
+#  define blos                  blo.b
+#  define bhis                  bhi.b
+#  define bras                  bra.b
+#  define clrl                  clr.l
+#  define cmpmb                 cmpm.b
+#  define cmpw                  cmp.w
+#  define cmpl                  cmp.l
+#  define lslw                  lsl.w
+#  define lsrl                  lsr.l
+#  define movel                 move.l
+#  define movew                 move.w
+#  define moveb                 move.b
+#  define moveml                movem.l
+#  define subl                  sub.l
+#  define subw                  sub.w
+#  define subql                 subq.l
+
+#  define IndBase(bd,An)        (bd,An)
+#  define IndBaseNdxl(bd,An,Xn) (bd,An,Xn.l)
+#  define IndBaseNdxw(bd,An,Xn) (bd,An,Xn.w)
+#  define predec(An)            -(An)
+#  define postinc(An)           (An)+
+
+#else /* default style (Sun 3, NeXT, Amiga, Atari) */
+
+#  define GLOBAL(symbol)        .globl  symbol
+#  define TEXT                  .text
+#  define FILE(filename)        .even
+#  define invert_maybe(src,dst) src,dst
+#  if defined(sun) || defined(mc68k)
+#    define imm(data)           #data
+#  else
+#    define imm(data)           \#data
+#  endif
+#  define reg(register)         register
+
+#  define blos                  bcss
+#  if defined(sun) || defined(mc68k)
+#    define movel               movl
+#    define movew               movw
+#    define moveb               movb
+#  endif
+#  define IndBase(bd,An)        An@(bd)
+#  define IndBaseNdxl(bd,An,Xn) An@(bd,Xn:l)
+#  define IndBaseNdxw(bd,An,Xn) An@(bd,Xn:w)
+#  define predec(An)            An@-
+#  define postinc(An)           An@+
+
+#endif  /* styles */
+
+#define Best_Len        reg(d0)         /* unsigned */
+#define Cur_Match       reg(d1)         /* Ipos */
+#define Loop_Counter    reg(d2)         /* int */
+#define Scan_Start      reg(d3)         /* unsigned short */
+#define Scan_End        reg(d4)         /* unsigned short */
+#define Limit           reg(d5)         /* IPos */
+#define Chain_Length    reg(d6)         /* unsigned */
+#define Scan_Test       reg(d7)
+#define Scan            reg(a0)         /* *uch */
+#define Match           reg(a1)         /* *uch */
+#define Prev_Address    reg(a2)         /* *Pos */
+#define Scan_Ini        reg(a3)         /* *uch */
+#define Match_Ini       reg(a4)         /* *uch */
+#define Stack_Pointer   reg(sp)
+
+        GLOBAL  (_match_init)
+        GLOBAL  (_longest_match)
+
+        TEXT
+
+        FILE    ("match.S")
+
+_match_init:
+        rts
+
+/*-----------------------------------------------------------------------
+ * Set match_start to the longest match starting at the given string and
+ * return its length. Matches shorter or equal to prev_length are discarded,
+ * in which case the result is equal to prev_length and match_start is
+ * garbage.
+ * IN assertions: cur_match is the head of the hash chain for the current
+ *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
+ */
+
+/* int longest_match (cur_match) */
+
+#ifdef UNALIGNED_OK
+#  define pushreg       15928           /* d2-d6/a2-a4 */
+#  define popreg        7292
+#else
+#  define pushreg       16184           /* d2-d7/a2-a4 */
+#  define popreg        7420
+#endif
+
+_longest_match:
+        movel   IndBase(4,Stack_Pointer),Cur_Match
+        moveml  imm(pushreg),predec(Stack_Pointer)
+        movel   _max_chain_length,Chain_Length
+        movel   _prev_length,Best_Len
+        movel   imm(_prev),Prev_Address
+        movel   imm(_window+MIN_MATCH),Match_Ini
+        movel   _strstart,Limit
+        movel   Match_Ini,Scan_Ini
+        addl    Limit,Scan_Ini
+        subw    imm(MAX_DIST),Limit
+        bhis    L__limit_ok
+        clrl    Limit
+L__limit_ok:
+        cmpl    invert_maybe(_good_match,Best_Len)
+        blos    L__length_ok
+        lsrl    imm(2),Chain_Length
+L__length_ok:
+        subql   imm(1),Chain_Length
+#ifdef UNALIGNED_OK
+        movew   IndBase(-MIN_MATCH,Scan_Ini),Scan_Start
+        movew   IndBaseNdxw(-MIN_MATCH-1,Scan_Ini,Best_Len),Scan_End
+#else
+        moveb   IndBase(-MIN_MATCH,Scan_Ini),Scan_Start
+        lslw    imm(8),Scan_Start
+        moveb   IndBase(-MIN_MATCH+1,Scan_Ini),Scan_Start
+        moveb   IndBaseNdxw(-MIN_MATCH-1,Scan_Ini,Best_Len),Scan_End
+        lslw    imm(8),Scan_End
+        moveb   IndBaseNdxw(-MIN_MATCH,Scan_Ini,Best_Len),Scan_End
+#endif
+        bras    L__do_scan
+
+L__long_loop:
+#ifdef UNALIGNED_OK
+        movew   IndBaseNdxw(-MIN_MATCH-1,Scan_Ini,Best_Len),Scan_End
+#else
+        moveb   IndBaseNdxw(-MIN_MATCH-1,Scan_Ini,Best_Len),Scan_End
+        lslw    imm(8),Scan_End
+        moveb   IndBaseNdxw(-MIN_MATCH,Scan_Ini,Best_Len),Scan_End
+#endif
+
+L__short_loop:
+        lslw    imm(1),Cur_Match
+        movew   IndBaseNdxl(0,Prev_Address,Cur_Match),Cur_Match
+        cmpw    invert_maybe(Limit,Cur_Match)
+        dbls    Chain_Length,L__do_scan
+        bras    L__return
+
+L__do_scan:
+        movel   Match_Ini,Match
+        addl    Cur_Match,Match
+#ifdef UNALIGNED_OK
+        cmpw    invert_maybe(IndBaseNdxw(-MIN_MATCH-1,Match,Best_Len),Scan_End)
+        bne     L__short_loop
+        cmpw    invert_maybe(IndBase(-MIN_MATCH,Match),Scan_Start)
+        bne     L__short_loop
+#else
+        moveb   IndBaseNdxw(-MIN_MATCH-1,Match,Best_Len),Scan_Test
+        lslw    imm(8),Scan_Test
+        moveb   IndBaseNdxw(-MIN_MATCH,Match,Best_Len),Scan_Test
+        cmpw    invert_maybe(Scan_Test,Scan_End)
+        bne     L__short_loop
+        moveb   IndBase(-MIN_MATCH,Match),Scan_Test
+        lslw    imm(8),Scan_Test
+        moveb   IndBase(-MIN_MATCH+1,Match),Scan_Test
+        cmpw    invert_maybe(Scan_Test,Scan_Start)
+        bne     L__short_loop
+#endif
+
+        movew   imm((MAX_MATCH-MIN_MATCH+1)-1),Loop_Counter
+        movel   Scan_Ini,Scan
+L__scan_loop:
+        cmpmb   postinc(Match),postinc(Scan)
+        dbne    Loop_Counter,L__scan_loop
+
+        subl    Scan_Ini,Scan
+        addql   imm(MIN_MATCH-1),Scan
+        cmpl    invert_maybe(Best_Len,Scan)
+        bls     L__short_loop
+        movel   Scan,Best_Len
+        movel   Cur_Match,_match_start
+#ifdef FULL_SEARCH
+        cmpl    invert_maybe(imm(MAX_MATCH),Best_Len)
+#else
+        cmpl    invert_maybe(_nice_match,Best_Len)
+#endif
+        blos    L__long_loop
+L__return:
+        moveml  postinc(Stack_Pointer),imm(popreg)
+        rts
+
+#else
+ error: this asm version is for 386 or 680x0 only
+#endif /* mc68000 || mc68020 */
+#endif /* i386 || _I386 || _i386 || __i386  */
+
+#endif /* !USE_ZLIB */
+
+.section .note.GNU-stack, "", @progbits
+.previous
Index: a/infozip/zip/create-3.0-exec-shield-patch/zip30-new
===================================================================
--- a/infozip/zip/create-3.0-exec-shield-patch/zip30-new	(nonexistent)
+++ a/infozip/zip/create-3.0-exec-shield-patch/zip30-new	(revision 5)

Property changes on: a/infozip/zip/create-3.0-exec-shield-patch/zip30-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/zip/create-3.0-exec-shield-patch
===================================================================
--- a/infozip/zip/create-3.0-exec-shield-patch	(nonexistent)
+++ a/infozip/zip/create-3.0-exec-shield-patch	(revision 5)

Property changes on: a/infozip/zip/create-3.0-exec-shield-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/zip/create-3.0-format-security-patch/create.patch.sh
===================================================================
--- a/infozip/zip/create-3.0-format-security-patch/create.patch.sh	(nonexistent)
+++ a/infozip/zip/create-3.0-format-security-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+VERSION=3.0
+
+version=${VERSION/./}
+
+tar --files-from=file.list -xzvf ../zip${version}.tar.gz
+mv zip${version} zip${version}-orig
+
+cp -rf ./zip${version}-new ./zip${version}
+
+diff --unified -Nr  zip${version}-orig  zip${version} > zip-${VERSION}-format-security.patch
+
+mv zip-${VERSION}-format-security.patch ../patches
+
+rm -rf ./zip${version}
+rm -rf ./zip${version}-orig

Property changes on: a/infozip/zip/create-3.0-format-security-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/infozip/zip/create-3.0-format-security-patch/file.list
===================================================================
--- a/infozip/zip/create-3.0-format-security-patch/file.list	(nonexistent)
+++ a/infozip/zip/create-3.0-format-security-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+zip30/zip.c
Index: a/infozip/zip/create-3.0-format-security-patch/zip30-new/zip.c
===================================================================
--- a/infozip/zip/create-3.0-format-security-patch/zip30-new/zip.c	(nonexistent)
+++ a/infozip/zip/create-3.0-format-security-patch/zip30-new/zip.c	(revision 5)
@@ -0,0 +1,6018 @@
+/*
+  zip.c - Zip 3
+
+  Copyright (c) 1990-2008 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2007-Mar-4 or later
+  (the contents of which are also included in zip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*
+ *  zip.c by Mark Adler.
+ */
+#define __ZIP_C
+
+#include "zip.h"
+#include <time.h>       /* for tzset() declaration */
+#if defined(WIN32) || defined(WINDLL)
+#  define WIN32_LEAN_AND_MEAN
+#  include <windows.h>
+#endif
+#ifdef WINDLL
+#  include <setjmp.h>
+#  include "windll/windll.h"
+#endif
+#define DEFCPYRT        /* main module: enable copyright string defines! */
+#include "revision.h"
+#include "crc32.h"
+#include "crypt.h"
+#include "ttyio.h"
+#include <ctype.h>
+#include <errno.h>
+#ifdef VMS
+#  include <stsdef.h>
+#  include "vms/vmsmunch.h"
+#  include "vms/vms.h"
+#endif
+
+#ifdef MACOS
+#  include "macglob.h"
+   extern MacZipGlobals MacZip;
+   extern int error_level;
+#endif
+
+#if (defined(MSDOS) && !defined(__GO32__)) || defined(__human68k__)
+#  include <process.h>
+#  if (!defined(P_WAIT) && defined(_P_WAIT))
+#    define P_WAIT _P_WAIT
+#  endif
+#endif
+
+#include <signal.h>
+#include <stdio.h>
+
+#ifdef UNICODE_TEST
+# ifdef WIN32
+#  include <direct.h>
+# endif
+#endif
+
+#ifdef BZIP2_SUPPORT
+  /* If IZ_BZIP2 is defined as the location of the bzip2 files then
+     assume the location has been added to include path.  For Unix
+     this is done by the configure script. */
+  /* Also do not need path for bzip2 include if OS includes support
+     for bzip2 library. */
+# include "bzlib.h"
+#endif
+
+#define MAXCOM 256      /* Maximum one-line comment size */
+
+
+/* Local option flags */
+#ifndef DELETE
+#define DELETE  0
+#endif
+#define ADD     1
+#define UPDATE  2
+#define FRESHEN 3
+#define ARCHIVE 4
+local int action = ADD; /* one of ADD, UPDATE, FRESHEN, DELETE, or ARCHIVE */
+local int comadd = 0;   /* 1=add comments for new files */
+local int zipedit = 0;  /* 1=edit zip comment and all file comments */
+local int latest = 0;   /* 1=set zip file time to time of latest file */
+local int test = 0;     /* 1=test zip file with unzip -t */
+local char *unzip_path = NULL; /* where to find unzip */
+local int tempdir = 0;  /* 1=use temp directory (-b) */
+local int junk_sfx = 0; /* 1=junk the sfx prefix */
+#if defined(AMIGA) || defined(MACOS)
+local int filenotes = 0; /* 1=take comments from AmigaDOS/MACOS filenotes */
+#endif
+
+#ifdef EBCDIC
+int aflag = __EBCDIC;   /* Convert EBCDIC to ASCII or stay EBCDIC ? */
+#endif
+#ifdef CMS_MVS
+int bflag = 0;          /* Use text mode as default */
+#endif
+
+#ifdef QDOS
+char _version[] = VERSION;
+#endif
+
+#ifdef WINDLL
+jmp_buf zipdll_error_return;
+#ifdef ZIP64_SUPPORT
+  unsigned long low, high; /* returning 64 bit values for systems without an _int64 */
+  uzoff_t filesize64;
+#endif
+#endif
+
+#if CRYPT
+/* Pointer to crc_table, needed in crypt.c */
+# if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB))
+ZCONST ulg near *crc_32_tab;
+# else
+ZCONST uLongf *crc_32_tab;
+# endif
+#endif /* CRYPT */
+
+/* Local functions */
+
+local void freeup  OF((void));
+local int  finish  OF((int));
+#if (!defined(MACOS) && !defined(WINDLL))
+local void handler OF((int));
+local void license OF((void));
+#ifndef VMSCLI
+local void help    OF((void));
+local void help_extended OF((void));
+#endif /* !VMSCLI */
+#endif /* !MACOS && !WINDLL */
+
+/* prereading of arguments is not supported in new command
+   line interpreter get_option() so read filters as arguments
+   are processed and convert to expected array later */
+local int add_filter OF((int flag, char *pattern));
+local int filterlist_to_patterns OF((void));
+/* not used
+ local int get_filters OF((int argc, char **argv));
+*/
+
+/* list to store file arguments */
+local long add_name OF((char *filearg));
+
+
+local int DisplayRunningStats OF((void));
+local int BlankRunningStats OF((void));
+
+#if !defined(WINDLL)
+local void version_info OF((void));
+# if !defined(MACOS)
+local void zipstdout OF((void));
+# endif /* !MACOS */
+local int check_unzip_version OF((char *unzippath));
+local void check_zipfile OF((char *zipname, char *zippath));
+#endif /* !WINDLL */
+
+/* structure used by add_filter to store filters */
+struct filterlist_struct {
+  char flag;
+  char *pattern;
+  struct filterlist_struct *next;
+};
+struct filterlist_struct *filterlist = NULL;  /* start of list */
+struct filterlist_struct *lastfilter = NULL;  /* last filter in list */
+
+/* structure used by add_filearg to store file arguments */
+struct filelist_struct {
+  char *name;
+  struct filelist_struct *next;
+};
+long filearg_count = 0;
+struct filelist_struct *filelist = NULL;  /* start of list */
+struct filelist_struct *lastfile = NULL;  /* last file in list */
+
+local void freeup()
+/* Free all allocations in the 'found' list, the 'zfiles' list and
+   the 'patterns' list. */
+{
+  struct flist far *f;  /* steps through found list */
+  struct zlist far *z;  /* pointer to next entry in zfiles list */
+
+  for (f = found; f != NULL; f = fexpel(f))
+    ;
+  while (zfiles != NULL)
+  {
+    z = zfiles->nxt;
+    if (zfiles->zname && zfiles->zname != zfiles->name)
+      free((zvoid *)(zfiles->zname));
+    if (zfiles->name)
+      free((zvoid *)(zfiles->name));
+    if (zfiles->iname)
+      free((zvoid *)(zfiles->iname));
+    if (zfiles->cext && zfiles->cextra && zfiles->cextra != zfiles->extra)
+      free((zvoid *)(zfiles->cextra));
+    if (zfiles->ext && zfiles->extra)
+      free((zvoid *)(zfiles->extra));
+    if (zfiles->com && zfiles->comment)
+      free((zvoid *)(zfiles->comment));
+    if (zfiles->oname)
+      free((zvoid *)(zfiles->oname));
+#ifdef UNICODE_SUPPORT
+    if (zfiles->uname)
+      free((zvoid *)(zfiles->uname));
+    if (zfiles->zuname)
+      free((zvoid *)(zfiles->zuname));
+    if (zfiles->ouname)
+      free((zvoid *)(zfiles->ouname));
+# ifdef WIN32
+    if (zfiles->namew)
+      free((zvoid *)(zfiles->namew));
+    if (zfiles->inamew)
+      free((zvoid *)(zfiles->inamew));
+    if (zfiles->znamew)
+      free((zvoid *)(zfiles->znamew));
+# endif
+#endif
+    farfree((zvoid far *)zfiles);
+    zfiles = z;
+    zcount--;
+  }
+
+  if (patterns != NULL) {
+    while (pcount-- > 0) {
+      if (patterns[pcount].zname != NULL)
+        free((zvoid *)(patterns[pcount].zname));
+    }
+    free((zvoid *)patterns);
+    patterns = NULL;
+  }
+
+  /* close logfile */
+  if (logfile) {
+    fclose(logfile);
+  }
+}
+
+local int finish(e)
+int e;                  /* exit code */
+/* Process -o and -m options (if specified), free up malloc'ed stuff, and
+   exit with the code e. */
+{
+  int r;                /* return value from trash() */
+  ulg t;                /* latest time in zip file */
+  struct zlist far *z;  /* pointer into zfile list */
+
+  /* If latest, set time to zip file to latest file in zip file */
+  if (latest && zipfile && strcmp(zipfile, "-"))
+  {
+    diag("changing time of zip file to time of latest file in it");
+    /* find latest time in zip file */
+    if (zfiles == NULL)
+       zipwarn("zip file is empty, can't make it as old as latest entry", "");
+    else {
+      t = 0;
+      for (z = zfiles; z != NULL; z = z->nxt)
+        /* Ignore directories in time comparisons */
+#ifdef USE_EF_UT_TIME
+        if (z->iname[z->nam-1] != (char)0x2f)   /* ascii '/' */
+        {
+          iztimes z_utim;
+          ulg z_tim;
+
+          z_tim = ((get_ef_ut_ztime(z, &z_utim) & EB_UT_FL_MTIME) ?
+                   unix2dostime(&z_utim.mtime) : z->tim);
+          if (t < z_tim)
+            t = z_tim;
+        }
+#else /* !USE_EF_UT_TIME */
+        if (z->iname[z->nam-1] != (char)0x2f    /* ascii '/' */
+            && t < z->tim)
+          t = z->tim;
+#endif /* ?USE_EF_UT_TIME */
+      /* set modified time of zip file to that time */
+      if (t != 0)
+        stamp(zipfile, t);
+      else
+        zipwarn(
+         "zip file has only directories, can't make it as old as latest entry",
+         "");
+    }
+  }
+  if (tempath != NULL)
+  {
+    free((zvoid *)tempath);
+    tempath = NULL;
+  }
+  if (zipfile != NULL)
+  {
+    free((zvoid *)zipfile);
+    zipfile = NULL;
+  }
+  if (in_file != NULL)
+  {
+    fclose(in_file);
+    in_file = NULL;
+  }
+  if (in_path != NULL)
+  {
+    free((zvoid *)in_path);
+    in_path = NULL;
+  }
+  if (out_path != NULL)
+  {
+    free((zvoid *)out_path);
+    out_path = NULL;
+  }
+  if (zcomment != NULL)
+  {
+    free((zvoid *)zcomment);
+    zcomment = NULL;
+  }
+
+
+  /* If dispose, delete all files in the zfiles list that are marked */
+  if (dispose)
+  {
+    diag("deleting files that were added to zip file");
+    if ((r = trash()) != ZE_OK)
+      ZIPERR(r, "was deleting moved files and directories");
+  }
+
+
+  /* Done! */
+  freeup();
+  return e;
+}
+
+void ziperr(c, h)
+int c;                  /* error code from the ZE_ class */
+ZCONST char *h;         /* message about how it happened */
+/* Issue a message for the error, clean up files and memory, and exit. */
+{
+#ifndef WINDLL
+#ifndef MACOS
+  static int error_level = 0;
+#endif
+
+  if (error_level++ > 0)
+     /* avoid recursive ziperr() printouts (his should never happen) */
+     EXIT(ZE_LOGIC);  /* ziperr recursion is an internal logic error! */
+#endif /* !WINDLL */
+
+  if (mesg_line_started) {
+    fprintf(mesg, "\n");
+    mesg_line_started = 0;
+  }
+  if (logfile && logfile_line_started) {
+    fprintf(logfile, "\n");
+    logfile_line_started = 0;
+  }
+  if (h != NULL) {
+    if (PERR(c))
+      fprintf(mesg, "zip I/O error: %s", strerror(errno));
+      /* perror("zip I/O error"); */
+    fflush(mesg);
+    fprintf(mesg, "\nzip error: %s (%s)\n", ZIPERRORS(c), h);
+#ifdef DOS
+    check_for_windows("Zip");
+#endif
+    if (logfile) {
+      if (PERR(c))
+        fprintf(logfile, "zip I/O error: %s\n", strerror(errno));
+      fprintf(logfile, "\nzip error: %s (%s)\n", ZIPERRORS(c), h);
+      logfile_line_started = 0;
+    }
+  }
+  if (tempzip != NULL)
+  {
+    if (tempzip != zipfile) {
+      if (current_local_file)
+        fclose(current_local_file);
+      if (y != current_local_file && y != NULL)
+        fclose(y);
+#ifndef DEBUG
+      destroy(tempzip);
+#endif
+      free((zvoid *)tempzip);
+    } else {
+      /* -g option, attempt to restore the old file */
+
+      /* zip64 support 09/05/2003 R.Nausedat */
+      uzoff_t k = 0;                        /* keep count for end header */
+      uzoff_t cb = cenbeg;                  /* get start of central */
+
+      struct zlist far *z;  /* steps through zfiles linked list */
+
+      fprintf(mesg, "attempting to restore %s to its previous state\n",
+         zipfile);
+      if (logfile)
+        fprintf(logfile, "attempting to restore %s to its previous state\n",
+           zipfile);
+
+      zfseeko(y, cenbeg, SEEK_SET);
+
+      tempzn = cenbeg;
+      for (z = zfiles; z != NULL; z = z->nxt)
+      {
+        putcentral(z);
+        tempzn += 4 + CENHEAD + z->nam + z->cext + z->com;
+        k++;
+      }
+      putend(k, tempzn - cb, cb, zcomlen, zcomment);
+      fclose(y);
+      y = NULL;
+    }
+  }
+
+  if (key != NULL) {
+    free((zvoid *)key);
+    key = NULL;
+  }
+  if (tempath != NULL) {
+    free((zvoid *)tempath);
+    tempath = NULL;
+  }
+  if (zipfile != NULL) {
+    free((zvoid *)zipfile);
+    zipfile = NULL;
+  }
+  if (out_path != NULL) {
+    free((zvoid *)out_path);
+    out_path = NULL;
+  }
+  if (zcomment != NULL) {
+    free((zvoid *)zcomment);
+    zcomment = NULL;
+  }
+
+  freeup();
+#ifndef WINDLL
+  EXIT(c);
+#else
+  longjmp(zipdll_error_return, c);
+#endif
+}
+
+
+void error(h)
+  ZCONST char *h;
+/* Internal error, should never happen */
+{
+  ziperr(ZE_LOGIC, h);
+}
+
+#if (!defined(MACOS) && !defined(WINDLL))
+local void handler(s)
+int s;                  /* signal number (ignored) */
+/* Upon getting a user interrupt, turn echo back on for tty and abort
+   cleanly using ziperr(). */
+{
+#if defined(AMIGA) && defined(__SASC)
+   _abort();
+#else
+#if !defined(MSDOS) && !defined(__human68k__) && !defined(RISCOS)
+  echon();
+  putc('\n', mesg);
+#endif /* !MSDOS */
+#endif /* AMIGA && __SASC */
+  ziperr(ZE_ABORT, "aborting");
+  s++;                                  /* keep some compilers happy */
+}
+#endif /* !MACOS && !WINDLL */
+
+void zipmessage_nl(a, nl)
+ZCONST char *a;     /* message string to output */
+int nl;             /* 1 = add nl to end */
+/* If nl false, print a message to mesg without new line.
+   If nl true, print and add new line.  If logfile is
+   open then also write message to log file. */
+{
+  if (noisy) {
+    if (a && strlen(a)) {
+      fprintf(mesg, "%s", a);
+      mesg_line_started = 1;
+    }
+    if (nl) {
+      if (mesg_line_started) {
+        fprintf(mesg, "\n");
+        mesg_line_started = 0;
+      }
+    } else if (a && strlen(a)) {
+      mesg_line_started = 1;
+    }
+    fflush(mesg);
+  }
+  if (logfile) {
+    if (a && strlen(a)) {
+      fprintf(logfile, "%s", a);
+      logfile_line_started = 1;
+    }
+    if (nl) {
+      if (logfile_line_started) {
+        fprintf(logfile, "\n");
+        logfile_line_started = 0;
+      }
+    } else if (a && strlen(a)) {
+      logfile_line_started = 1;
+    }
+    fflush(logfile);
+  }
+}
+
+void zipmessage(a, b)
+ZCONST char *a, *b;     /* message strings juxtaposed in output */
+/* Print a message to mesg and flush.  Also write to log file if
+   open.  Write new line first if current line has output already. */
+{
+  if (noisy) {
+    if (mesg_line_started)
+      fprintf(mesg, "\n");
+    fprintf(mesg, "%s%s\n", a, b);
+    mesg_line_started = 0;
+    fflush(mesg);
+  }
+  if (logfile) {
+    if (logfile_line_started)
+      fprintf(logfile, "\n");
+    fprintf(logfile, "%s%s\n", a, b);
+    logfile_line_started = 0;
+    fflush(logfile);
+  }
+}
+
+void zipwarn(a, b)
+ZCONST char *a, *b;     /* message strings juxtaposed in output */
+/* Print a warning message to mesg (usually stderr) and return. */
+{
+  if (noisy) {
+    if (mesg_line_started)
+      fprintf(mesg, "\n");
+    fprintf(mesg, "\tzip warning: %s%s\n", a, b);
+    mesg_line_started = 0;
+    fflush(mesg);
+  }
+  if (logfile) {
+    if (logfile_line_started)
+      fprintf(logfile, "\n");
+    fprintf(logfile, "\tzip warning: %s%s\n", a, b);
+    logfile_line_started = 0;
+    fflush(logfile);
+  }
+}
+
+#ifndef WINDLL
+local void license()
+/* Print license information to stdout. */
+{
+  extent i;             /* counter for copyright array */
+
+  for (i = 0; i < sizeof(swlicense)/sizeof(char *); i++)
+    puts(swlicense[i]);
+}
+
+#ifdef VMSCLI
+void help()
+#else
+local void help()
+#endif
+/* Print help (along with license info) to stdout. */
+{
+  extent i;             /* counter for help array */
+
+  /* help array */
+  static ZCONST char *text[] = {
+#ifdef VMS
+"Zip %s (%s). Usage: zip == \"$ disk:[dir]zip.exe\"",
+#else
+"Zip %s (%s). Usage:",
+#endif
+#ifdef MACOS
+"zip [-options] [-b fm] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]",
+"  The default action is to add or replace zipfile entries from list.",
+" ",
+"  -f   freshen: only changed files  -u   update: only changed or new files",
+"  -d   delete entries in zipfile    -m   move into zipfile (delete OS files)",
+"  -r   recurse into directories     -j   junk (don't record) directory names",
+"  -0   store only                   -l   convert LF to CR LF (-ll CR LF to LF)",
+"  -1   compress faster              -9   compress better",
+"  -q   quiet operation              -v   verbose operation/print version info",
+"  -c   add one-line comments        -z   add zipfile comment",
+"                                    -o   make zipfile as old as latest entry",
+"  -F   fix zipfile (-FF try harder) -D   do not add directory entries",
+"  -T   test zipfile integrity       -X   eXclude eXtra file attributes",
+#  if CRYPT
+"  -e   encrypt                      -n   don't compress these suffixes"
+#  else
+"  -h   show this help               -n   don't compress these suffixes"
+#  endif
+," -h2  show more help",
+"  Macintosh specific:",
+"  -jj  record Fullpath (+ Volname)  -N store finder-comments as comments",
+"  -df  zip only datafork of a file  -S include finder invisible/system files"
+#else /* !MACOS */
+#ifdef VM_CMS
+"zip [-options] [-b fm] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]",
+#else  /* !VM_CMS */
+"zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]",
+#endif /* ?VM_CMS */
+"  The default action is to add or replace zipfile entries from list, which",
+"  can include the special name - to compress standard input.",
+"  If zipfile and list are omitted, zip compresses stdin to stdout.",
+"  -f   freshen: only changed files  -u   update: only changed or new files",
+"  -d   delete entries in zipfile    -m   move into zipfile (delete OS files)",
+"  -r   recurse into directories     -j   junk (don't record) directory names",
+#ifdef THEOS
+"  -0   store only                   -l   convert CR to CR LF (-ll CR LF to CR)",
+#else
+"  -0   store only                   -l   convert LF to CR LF (-ll CR LF to LF)",
+#endif
+"  -1   compress faster              -9   compress better",
+"  -q   quiet operation              -v   verbose operation/print version info",
+"  -c   add one-line comments        -z   add zipfile comment",
+"  -@   read names from stdin        -o   make zipfile as old as latest entry",
+"  -x   exclude the following names  -i   include only the following names",
+#ifdef EBCDIC
+#ifdef CMS_MVS
+"  -a   translate to ASCII           -B   force binary read (text is default)",
+#else  /* !CMS_MVS */
+"  -a   translate to ASCII",
+#endif /* ?CMS_MVS */
+#endif /* EBCDIC */
+#ifdef TANDEM
+"                                    -Bn  set Enscribe formatting options",
+#endif
+"  -F   fix zipfile (-FF try harder) -D   do not add directory entries",
+"  -A   adjust self-extracting exe   -J   junk zipfile prefix (unzipsfx)",
+"  -T   test zipfile integrity       -X   eXclude eXtra file attributes",
+#ifdef VMS
+"  -C   preserve case of file names  -C-  down-case all file names",
+"  -C2  preserve case of ODS2 names  -C2- down-case ODS2 file names* (*=default)",
+"  -C5  preserve case of ODS5 names* -C5- down-case ODS5 file names",
+"  -V   save VMS file attributes (-VV also save allocated blocks past EOF)",
+"  -w   store file version numbers\
+   -ww  store file version numbers as \".nnn\"",
+#endif /* def VMS */
+#ifdef NTSD_EAS
+"  -!   use privileges (if granted) to obtain all aspects of WinNT security",
+#endif /* NTSD_EAS */
+#ifdef OS2
+"  -E   use the .LONGNAME Extended attribute (if found) as filename",
+#endif /* OS2 */
+#ifdef S_IFLNK
+"  -y   store symbolic links as the link instead of the referenced file",
+#endif /* !S_IFLNK */
+/*
+"  -R   PKZIP recursion (see manual)",
+*/
+#if defined(MSDOS) || defined(OS2)
+"  -$   include volume label         -S   include system and hidden files",
+#endif
+#ifdef AMIGA
+#  if CRYPT
+"  -N   store filenotes as comments  -e   encrypt",
+"  -h   show this help               -n   don't compress these suffixes"
+#  else
+"  -N   store filenotes as comments  -n   don't compress these suffixes"
+#  endif
+#else /* !AMIGA */
+#  if CRYPT
+"  -e   encrypt                      -n   don't compress these suffixes"
+#  else
+"  -h   show this help               -n   don't compress these suffixes"
+#  endif
+#endif /* ?AMIGA */
+#ifdef RISCOS
+,"  -h2  show more help               -I   don't scan thru Image files"
+#else
+,"  -h2  show more help"
+#endif
+#endif /* ?MACOS */
+#ifdef VMS
+,"  (Must quote upper-case options, like \"-V\", unless SET PROC/PARSE=EXTEND)"
+#endif /* def VMS */
+,"  "
+  };
+
+  for (i = 0; i < sizeof(copyright)/sizeof(char *); i++)
+  {
+    printf(copyright[i], "zip");
+    putchar('\n');
+  }
+  for (i = 0; i < sizeof(text)/sizeof(char *); i++)
+  {
+    printf(text[i], VERSION, REVDATE);
+    putchar('\n');
+  }
+}
+
+#ifdef VMSCLI
+void help_extended()
+#else
+local void help_extended()
+#endif
+/* Print extended help to stdout. */
+{
+  extent i;             /* counter for help array */
+
+  /* help array */
+  static ZCONST char *text[] = {
+"",
+"Extended Help for Zip",
+"",
+"See the Zip Manual for more detailed help",
+"",
+"",
+"Zip stores files in zip archives.  The default action is to add or replace",
+"zipfile entries.",
+"",
+"Basic command line:",
+"  zip options archive_name file file ...",
+"",
+"Some examples:",
+"  Add file.txt to z.zip (create z if needed):      zip z file.txt",
+"  Zip all files in current dir:                    zip z *",
+"  Zip files in current dir and subdirs also:       zip -r z .",
+"",
+"Basic modes:",
+" External modes (selects files from file system):",
+"        add      - add new files/update existing files in archive (default)",
+"  -u    update   - add new files/update existing files only if later date",
+"  -f    freshen  - update existing files only (no files added)",
+"  -FS   filesync - update if date or size changed, delete if no OS match",
+" Internal modes (selects entries in archive):",
+"  -d    delete   - delete files from archive (see below)",
+"  -U    copy     - select files in archive to copy (use with --out)",
+"",
+"Basic options:",
+"  -r        recurse into directories (see Recursion below)",
+"  -m        after archive created, delete original files (move into archive)",
+"  -j        junk directory names (store just file names)",
+"  -q        quiet operation",
+"  -v        verbose operation (just \"zip -v\" shows version information)",
+"  -c        prompt for one-line comment for each entry",
+"  -z        prompt for comment for archive (end with just \".\" line or EOF)",
+"  -@        read names to zip from stdin (one path per line)",
+"  -o        make zipfile as old as latest entry",
+"",
+"",
+"Syntax:",
+"  The full command line syntax is:",
+"",
+"    zip [-shortopts ...] [--longopt ...] [zipfile [path path ...]] [-xi list]",
+"",
+"  Any number of short option and long option arguments are allowed",
+"  (within limits) as well as any number of path arguments for files",
+"  to zip up.  If zipfile exists, the archive is read in.  If zipfile",
+"  is \"-\", stream to stdout.  If any path is \"-\", zip stdin.",
+"",
+"Options and Values:",
+"  For short options that take values, use -ovalue or -o value or -o=value",
+"  For long option values, use either --longoption=value or --longoption value",
+"  For example:",
+"    zip -ds 10 --temp-dir=path zipfile path1 path2 --exclude pattern pattern",
+"  Avoid -ovalue (no space between) to avoid confusion",
+"  In particular, be aware of 2-character options.  For example:",
+"    -d -s is (delete, split size) while -ds is (dot size)",
+"  Usually better to break short options across multiple arguments by function",
+"    zip -r -dbdcds 10m -lilalf logfile archive input_directory -ll",
+"",
+"  All args after just \"--\" arg are read verbatim as paths and not options.",
+"    zip zipfile path path ... -- verbatimpath verbatimpath ...",
+"  Use -nw to also disable wildcards, so paths are read literally:",
+"    zip zipfile -nw -- \"-leadingdashpath\" \"a[path].c\" \"path*withwildcard\"",
+"  You may still have to escape or quote arguments to avoid shell expansion",
+"",
+"Wildcards:",
+"  Internally zip supports the following wildcards:",
+"    ?       (or %% or #, depending on OS) matches any single character",
+"    *       matches any number of characters, including zero",
+"    [list]  matches char in list (regex), can do range [ac-f], all but [!bf]",
+"  If port supports [], must escape [ as [[] or use -nw to turn off wildcards",
+"  For shells that expand wildcards, escape (\\* or \"*\") so zip can recurse",
+"    zip zipfile -r . -i \"*.h\"",
+"",
+"  Normally * crosses dir bounds in path, e.g. 'a*b' can match 'ac/db'.  If",
+"   -ws option used, * does not cross dir bounds but ** does",
+"",
+"  For DOS and Windows, [list] is now disabled unless the new option",
+"  -RE       enable [list] (regular expression) matching",
+"  is used to avoid problems with file paths containing \"[\" and \"]\":",
+"    zip files_ending_with_number -RE foo[0-9].c",
+"",
+"Include and Exclude:",
+"  -i pattern pattern ...   include files that match a pattern",
+"  -x pattern pattern ...   exclude files that match a pattern",
+"  Patterns are paths with optional wildcards and match paths as stored in",
+"  archive.  Exclude and include lists end at next option, @, or end of line.",
+"    zip -x pattern pattern @ zipfile path path ...",
+"",
+"Case matching:",
+"  On most OS the case of patterns must match the case in the archive, unless",
+"  the -ic option is used.",
+"  -ic       ignore case of archive entries",
+"  This option not available on case-sensitive file systems.  On others, case",
+"  ignored when matching files on file system but matching against archive",
+"  entries remains case sensitive for modes -f (freshen), -U (archive copy),",
+"  and -d (delete) because archive paths are always case sensitive.  With",
+"  -ic, all matching ignores case, but it's then possible multiple archive",
+"  entries that differ only in case will match.",
+"",
+"End Of Line Translation (text files only):",
+"  -l        change CR or LF (depending on OS) line end to CR LF (Unix->Win)",
+"  -ll       change CR LF to CR or LF (depending on OS) line end (Win->Unix)",
+"  If first buffer read from file contains binary the translation is skipped",
+"",
+"Recursion:",
+"  -r        recurse paths, include files in subdirs:  zip -r a path path ...",
+"  -R        recurse current dir and match patterns:   zip -R a ptn ptn ...",
+"  Use -i and -x with either to include or exclude paths",
+"  Path root in archive starts at current dir, so if /a/b/c/file and",
+"   current dir is /a/b, 'zip -r archive .' puts c/file in archive",
+"",
+"Date filtering:",
+"  -t date   exclude before (include files modified on this date and later)",
+"  -tt date  include before (include files modified before date)",
+"  Can use both at same time to set a date range",
+"  Dates are mmddyyyy or yyyy-mm-dd",
+"",
+"Deletion, File Sync:",
+"  -d        delete files",
+"  Delete archive entries matching internal archive paths in list",
+"    zip archive -d pattern pattern ...",
+"  Can use -t and -tt to select files in archive, but NOT -x or -i, so",
+"    zip archive -d \"*\" -t 2005-12-27",
+"  deletes all files from archive.zip with date of 27 Dec 2005 and later",
+"  Note the * (escape as \"*\" on Unix) to select all files in archive",
+"",
+"  -FS       file sync",
+"  Similar to update, but files updated if date or size of entry does not",
+"  match file on OS.  Also deletes entry from archive if no matching file",
+"  on OS.",
+"    zip archive_to_update -FS -r dir_used_before",
+"  Result generally same as creating new archive, but unchanged entries",
+"  are copied instead of being read and compressed so can be faster.",
+"      WARNING:  -FS deletes entries so make backup copy of archive first",
+"",
+"Compression:",
+"  -0        store files (no compression)",
+"  -1 to -9  compress fastest to compress best (default is 6)",
+"  -Z cm     set compression method to cm:",
+"              store   - store without compression, same as option -0",
+"              deflate - original zip deflate, same as -1 to -9 (default)",
+"            if bzip2 is enabled:",
+"              bzip2 - use bzip2 compression (need modern unzip)",
+"",
+"Encryption:",
+"  -e        use standard (weak) PKZip 2.0 encryption, prompt for password",
+"  -P pswd   use standard encryption, password is pswd",
+"",
+"Splits (archives created as a set of split files):",
+"  -s ssize  create split archive with splits of size ssize, where ssize nm",
+"              n number and m multiplier (kmgt, default m), 100k -> 100 kB",
+"  -sp       pause after each split closed to allow changing disks",
+"      WARNING:  Archives created with -sp use data descriptors and should",
+"                work with most unzips but may not work with some",
+"  -sb       ring bell when pause",
+"  -sv       be verbose about creating splits",
+"      Split archives CANNOT be updated, but see --out and Copy Mode below",
+"",
+"Using --out (output to new archive):",
+"  --out oa  output to new archive oa",
+"  Instead of updating input archive, create new output archive oa.",
+"  Result is same as without --out but in new archive.  Input archive",
+"  unchanged.",
+"      WARNING:  --out ALWAYS overwrites any existing output file",
+"  For example, to create new_archive like old_archive but add newfile1",
+"  and newfile2:",
+"    zip old_archive newfile1 newfile2 --out new_archive",
+"  Cannot update split archive, so use --out to out new archive:",
+"    zip in_split_archive newfile1 newfile2 --out out_split_archive",
+"  If input is split, output will default to same split size",
+"  Use -s=0 or -s- to turn off splitting to convert split to single file:",
+"    zip in_split_archive -s 0 --out out_single_file_archive",
+"      WARNING:  If overwriting old split archive but need less splits,",
+"                old splits not overwritten are not needed but remain",
+"",
+"Copy Mode (copying from archive to archive):",
+"  -U        (also --copy) select entries in archive to copy (reverse delete)",
+"  Copy Mode copies entries from old to new archive with --out and is used by",
+"  zip when either no input files on command line or -U (--copy) used.",
+"    zip inarchive --copy pattern pattern ... --out outarchive",
+"  To copy only files matching *.c into new archive, excluding foo.c:",
+"    zip old_archive --copy \"*.c\" --out new_archive -x foo.c",
+"  If no input files and --out, copy all entries in old archive:",
+"    zip old_archive --out new_archive",
+"",
+"Streaming and FIFOs:",
+"  prog1 | zip -ll z -      zip output of prog1 to zipfile z, converting CR LF",
+"  zip - -R \"*.c\" | prog2   zip *.c files in current dir and stream to prog2 ",
+"  prog1 | zip | prog2      zip in pipe with no in or out acts like zip - -",
+"  If Zip is Zip64 enabled, streaming stdin creates Zip64 archives by default",
+"   that need PKZip 4.5 unzipper like UnZip 6.0",
+"  WARNING:  Some archives created with streaming use data descriptors and",
+"            should work with most unzips but may not work with some",
+"  Can use -fz- to turn off Zip64 if input not large (< 4 GB):",
+"    prog_with_small_output | zip archive -fz-",
+"",
+"  Zip now can read Unix FIFO (named pipes).  Off by default to prevent zip",
+"  from stopping unexpectedly on unfed pipe, use -FI to enable:",
+"    zip -FI archive fifo",
+"",
+"Dots, counts:",
+"  -db       display running count of bytes processed and bytes to go",
+"              (uncompressed size, except delete and copy show stored size)",
+"  -dc       display running count of entries done and entries to go",
+"  -dd       display dots every 10 MB (or dot size) while processing files",
+"  -dg       display dots globally for archive instead of for each file",
+"    zip -qdgds 10m   will turn off most output except dots every 10 MB",
+"  -ds siz   each dot is siz processed where siz is nm as splits (0 no dots)",
+"  -du       display original uncompressed size for each entry as added",
+"  -dv       display volume (disk) number in format in_disk>out_disk",
+"  Dot size is approximate, especially for dot sizes less than 1 MB",
+"  Dot options don't apply to Scanning files dots (dot/2sec) (-q turns off)",
+"",
+"Logging:",
+"  -lf path  open file at path as logfile (overwrite existing file)",
+"  -la       append to existing logfile",
+"  -li       include info messages (default just warnings and errors)",
+"",
+"Testing archives:",
+"  -T        test completed temp archive with unzip before updating archive",
+"  -TT cmd   use command cmd instead of 'unzip -tqq' to test archive",
+"             On Unix, to use unzip in current directory, could use:",
+"               zip archive file1 file2 -T -TT \"./unzip -tqq\"",
+"             In cmd, {} replaced by temp archive path, else temp appended.",
+"             The return code is checked for success (0 on Unix)",
+"",
+"Fixing archives:",
+"  -F        attempt to fix a mostly intact archive (try this first)",
+"  -FF       try to salvage what can (may get more but less reliable)",
+"  Fix options copy entries from potentially bad archive to new archive.",
+"  -F tries to read archive normally and copy only intact entries, while",
+"  -FF tries to salvage what can and may result in incomplete entries.",
+"  Must use --out option to specify output archive:",
+"    zip -F bad.zip --out fixed.zip",
+"  Use -v (verbose) with -FF to see details:",
+"    zip reallybad.zip -FF -v --out fixed.zip",
+"  Currently neither option fixes bad entries, as from text mode ftp get.",
+"",
+"Difference mode:",
+"  -DF       (also --dif) only include files that have changed or are",
+"             new as compared to the input archive",
+"  Difference mode can be used to create incremental backups.  For example:",
+"    zip --dif full_backup.zip -r somedir --out diff.zip",
+"  will store all new files, as well as any files in full_backup.zip where",
+"  either file time or size have changed from that in full_backup.zip,",
+"  in new diff.zip.  Output archive not excluded automatically if exists,",
+"  so either use -x to exclude it or put outside what is being zipped.",
+"",
+"DOS Archive bit (Windows only):",
+"  -AS       include only files with the DOS Archive bit set",
+"  -AC       after archive created, clear archive bit of included files",
+"      WARNING: Once the archive bits are cleared they are cleared",
+"               Use -T to test the archive before the bits are cleared",
+"               Can also use -sf to save file list before zipping files",
+"",
+"Show files:",
+"  -sf       show files to operate on and exit (-sf- logfile only)",
+"  -su       as -sf but show escaped UTF-8 Unicode names also if exist",
+"  -sU       as -sf but show escaped UTF-8 Unicode names instead",
+"  Any character not in the current locale is escaped as #Uxxxx, where x",
+"  is hex digit, if 16-bit code is sufficient, or #Lxxxxxx if 24-bits",
+"  are needed.  If add -UN=e, Zip escapes all non-ASCII characters.",
+"",
+"Unicode:",
+"  If compiled with Unicode support, Zip stores UTF-8 path of entries.",
+"  This is backward compatible.  Unicode paths allow better conversion",
+"  of entry names between different character sets.",
+"",
+"  New Unicode extra field includes checksum to verify Unicode path",
+"  goes with standard path for that entry (as utilities like ZipNote",
+"  can rename entries).  If these do not match, use below options to",
+"  set what Zip does:",
+"      -UN=Quit     - if mismatch, exit with error",
+"      -UN=Warn     - if mismatch, warn, ignore UTF-8 (default)",
+"      -UN=Ignore   - if mismatch, quietly ignore UTF-8",
+"      -UN=No       - ignore any UTF-8 paths, use standard paths for all",
+"  An exception to -UN=N are entries with new UTF-8 bit set (instead",
+"  of using extra fields).  These are always handled as Unicode.",
+"",
+"  Normally Zip escapes all chars outside current char set, but leaves",
+"  as is supported chars, which may not be OK in path names.  -UN=Escape",
+"  escapes any character not ASCII:",
+"    zip -sU -UN=e archive",
+"  Can use either normal path or escaped Unicode path on command line",
+"  to match files in archive.",
+"",
+"  Zip now stores UTF-8 in entry path and comment fields on systems",
+"  where UTF-8 char set is default, such as most modern Unix, and",
+"  and on other systems in new extra fields with escaped versions in",
+"  entry path and comment fields for backward compatibility.",
+"  Option -UN=UTF8 will force storing UTF-8 in entry path and comment",
+"  fields:",
+"      -UN=UTF8     - store UTF-8 in entry path and comment fields",
+"  This option can be useful for multi-byte char sets on Windows where",
+"  escaped paths and comments can be too long to be valid as the UTF-8",
+"  versions tend to be shorter.",
+"",
+"  Only UTF-8 comments on UTF-8 native systems supported.  UTF-8 comments",
+"  for other systems planned in next release.",
+"",
+"Self extractor:",
+"  -A        Adjust offsets - a self extractor is created by prepending",
+"             the extractor executable to archive, but internal offsets",
+"             are then off.  Use -A to fix offsets.",
+"  -J        Junk sfx - removes prepended extractor executable from",
+"             self extractor, leaving a plain zip archive.",
+"",
+"More option highlights (see manual for additional options and details):",
+"  -b dir    when creating or updating archive, create the temp archive in",
+"             dir, which allows using seekable temp file when writing to a",
+"             write once CD, such archives compatible with more unzips",
+"             (could require additional file copy if on another device)",
+"  -MM       input patterns must match at least one file and matched files",
+"             must be readable or exit with OPEN error and abort archive",
+"             (without -MM, both are warnings only, and if unreadable files",
+"             are skipped OPEN error (18) returned after archive created)",
+"  -nw       no wildcards (wildcards are like any other character)",
+"  -sc       show command line arguments as processed and exit",
+"  -sd       show debugging as Zip does each step",
+"  -so       show all available options on this system",
+"  -X        default=strip old extra fields, -X- keep old, -X strip most",
+"  -ws       wildcards don't span directory boundaries in paths",
+""
+  };
+
+  for (i = 0; i < sizeof(text)/sizeof(char *); i++)
+  {
+    printf("%s", text[i]);
+    putchar('\n');
+  }
+#ifdef DOS
+  check_for_windows("Zip");
+#endif
+}
+
+/*
+ * XXX version_info() in a separate file
+ */
+local void version_info()
+/* Print verbose info about program version and compile time options
+   to stdout. */
+{
+  extent i;             /* counter in text arrays */
+  char *envptr;
+
+  /* Bzip2 option string storage (with version). */
+
+#ifdef BZIP2_SUPPORT
+  static char bz_opt_ver[81];
+  static char bz_opt_ver2[81];
+  static char bz_opt_ver3[81];
+#endif
+
+  /* Options info array */
+  static ZCONST char *comp_opts[] = {
+#ifdef ASM_CRC
+    "ASM_CRC",
+#endif
+#ifdef ASMV
+    "ASMV",
+#endif
+#ifdef DYN_ALLOC
+    "DYN_ALLOC",
+#endif
+#ifdef MMAP
+    "MMAP",
+#endif
+#ifdef BIG_MEM
+    "BIG_MEM",
+#endif
+#ifdef MEDIUM_MEM
+    "MEDIUM_MEM",
+#endif
+#ifdef SMALL_MEM
+    "SMALL_MEM",
+#endif
+#ifdef DEBUG
+    "DEBUG",
+#endif
+#ifdef USE_EF_UT_TIME
+    "USE_EF_UT_TIME       (store Universal Time)",
+#endif
+#ifdef NTSD_EAS
+    "NTSD_EAS             (store NT Security Descriptor)",
+#endif
+#if defined(WIN32) && defined(NO_W32TIMES_IZFIX)
+    "NO_W32TIMES_IZFIX",
+#endif
+#ifdef VMS
+#ifdef VMSCLI
+    "VMSCLI",
+#endif
+#ifdef VMS_IM_EXTRA
+    "VMS_IM_EXTRA",
+#endif
+#ifdef VMS_PK_EXTRA
+    "VMS_PK_EXTRA",
+#endif
+#endif /* VMS */
+#ifdef WILD_STOP_AT_DIR
+    "WILD_STOP_AT_DIR     (wildcards do not cross directory boundaries)",
+#endif
+#ifdef WIN32_OEM
+    "WIN32_OEM            (store file paths on Windows as OEM)",
+#endif
+#ifdef BZIP2_SUPPORT
+    bz_opt_ver,
+    bz_opt_ver2,
+    bz_opt_ver3,
+#endif
+#ifdef S_IFLNK
+# ifdef VMS
+    "SYMLINK_SUPPORT      (symbolic links supported, if C RTL permits)",
+# else
+    "SYMLINK_SUPPORT      (symbolic links supported)",
+# endif
+#endif
+#ifdef LARGE_FILE_SUPPORT
+# ifdef USING_DEFAULT_LARGE_FILE_SUPPORT
+    "LARGE_FILE_SUPPORT (default settings)",
+# else
+    "LARGE_FILE_SUPPORT   (can read and write large files on file system)",
+# endif
+#endif
+#ifdef ZIP64_SUPPORT
+    "ZIP64_SUPPORT        (use Zip64 to store large files in archives)",
+#endif
+#ifdef UNICODE_SUPPORT
+    "UNICODE_SUPPORT      (store and read UTF-8 Unicode paths)",
+#endif
+
+#ifdef UNIX
+    "STORE_UNIX_UIDs_GIDs (store UID/GID sizes/values using new extra field)",
+# ifdef UIDGID_NOT_16BIT
+    "UIDGID_NOT_16BIT     (old Unix 16-bit UID/GID extra field not used)",
+# else
+    "UIDGID_16BIT         (old Unix 16-bit UID/GID extra field also used)",
+# endif
+#endif
+
+#if CRYPT && defined(PASSWD_FROM_STDIN)
+    "PASSWD_FROM_STDIN",
+#endif /* CRYPT & PASSWD_FROM_STDIN */
+    NULL
+  };
+
+  static ZCONST char *zipenv_names[] = {
+#ifndef VMS
+#  ifndef RISCOS
+    "ZIP"
+#  else /* RISCOS */
+    "Zip$Options"
+#  endif /* ?RISCOS */
+#else /* VMS */
+    "ZIP_OPTS"
+#endif /* ?VMS */
+    ,"ZIPOPT"
+#ifdef AZTEC_C
+    ,     /* extremely lame compiler bug workaround */
+#endif
+#ifndef __RSXNT__
+# ifdef __EMX__
+    ,"EMX"
+    ,"EMXOPT"
+# endif
+# if (defined(__GO32__) && (!defined(__DJGPP__) || __DJGPP__ < 2))
+    ,"GO32"
+    ,"GO32TMP"
+# endif
+# if (defined(__DJGPP__) && __DJGPP__ >= 2)
+    ,"TMPDIR"
+# endif
+#endif /* !__RSXNT__ */
+#ifdef RISCOS
+    ,"Zip$Exts"
+#endif
+  };
+
+  for (i = 0; i < sizeof(copyright)/sizeof(char *); i++)
+  {
+    printf(copyright[i], "zip");
+    putchar('\n');
+  }
+
+  for (i = 0; i < sizeof(versinfolines)/sizeof(char *); i++)
+  {
+    printf(versinfolines[i], "Zip", VERSION, REVDATE);
+    putchar('\n');
+  }
+
+  version_local();
+
+  puts("Zip special compilation options:");
+#if WSIZE != 0x8000
+  printf("\tWSIZE=%u\n", WSIZE);
+#endif
+
+  /* Fill in bzip2 version.  (32-char limit valid as of bzip 1.0.3.) */
+#ifdef BZIP2_SUPPORT
+  sprintf( bz_opt_ver,
+   "BZIP2_SUPPORT        (bzip2 library version %.32s)", BZ2_bzlibVersion());
+  sprintf( bz_opt_ver2,
+   "    bzip2 code and library copyright (c) Julian R Seward");
+  sprintf( bz_opt_ver3,
+   "    (See the bzip2 license for terms of use)");
+#endif
+
+  for (i = 0; (int)i < (int)(sizeof(comp_opts)/sizeof(char *) - 1); i++)
+  {
+    printf("\t%s\n",comp_opts[i]);
+  }
+#ifdef USE_ZLIB
+  if (strcmp(ZLIB_VERSION, zlibVersion()) == 0)
+    printf("\tUSE_ZLIB [zlib version %s]\n", ZLIB_VERSION);
+  else
+    printf("\tUSE_ZLIB [compiled with version %s, using version %s]\n",
+      ZLIB_VERSION, zlibVersion());
+  i++;  /* zlib use means there IS at least one compilation option */
+#endif
+#if CRYPT
+  printf("\t[encryption, version %d.%d%s of %s] (modified for Zip 3)\n\n",
+            CR_MAJORVER, CR_MINORVER, CR_BETA_VER, CR_VERSION_DATE);
+  for (i = 0; i < sizeof(cryptnote)/sizeof(char *); i++)
+  {
+    printf("%s", cryptnote[i]);
+    putchar('\n');
+  }
+  ++i;  /* crypt support means there IS at least one compilation option */
+#endif /* CRYPT */
+  if (i == 0)
+      puts("\t[none]");
+
+  puts("\nZip environment options:");
+  for (i = 0; i < sizeof(zipenv_names)/sizeof(char *); i++)
+  {
+    envptr = getenv(zipenv_names[i]);
+    printf("%16s:  %s\n", zipenv_names[i],
+           ((envptr == (char *)NULL || *envptr == 0) ? "[none]" : envptr));
+  }
+#ifdef DOS
+  check_for_windows("Zip");
+#endif
+}
+#endif /* !WINDLL */
+
+
+#ifndef PROCNAME
+/* Default to case-sensitive matching of archive entries for the modes
+   that specifically operate on archive entries, as this archive may
+   have come from a system that allows paths in the archive to differ
+   only by case.  Except for adding ARCHIVE (copy mode), this is how it
+   was done before.  Note that some case-insensitive ports (WIN32, VMS)
+   define their own PROCNAME() in their respective osdep.h that use the
+   filter_match_case flag set to FALSE by the -ic option to enable
+   case-insensitive archive entry mathing. */
+#  define PROCNAME(n) procname(n, (action == ARCHIVE || action == DELETE \
+                                   || action == FRESHEN) \
+                                  && filter_match_case)
+#endif /* PROCNAME */
+
+#ifndef WINDLL
+#ifndef MACOS
+local void zipstdout()
+/* setup for writing zip file on stdout */
+{
+  mesg = stderr;
+  if (isatty(1))
+    ziperr(ZE_PARMS, "cannot write zip file to terminal");
+  if ((zipfile = malloc(4)) == NULL)
+    ziperr(ZE_MEM, "was processing arguments");
+  strcpy(zipfile, "-");
+  /*
+  if ((r = readzipfile()) != ZE_OK)
+    ziperr(r, zipfile);
+  */
+}
+#endif /* !MACOS */
+
+local int check_unzip_version(unzippath)
+  char *unzippath;
+{
+#ifdef ZIP64_SUPPORT
+  /* Here is where we need to check for the version of unzip the user
+   * has.  If creating a Zip64 archive need UnZip 6 or may fail.
+   */
+    char cmd[4004];
+    FILE *unzip_out = NULL;
+    char buf[1001];
+    float UnZip_Version = 0.0;
+
+    cmd[0] = '\0';
+    strncat(cmd, unzippath, 4000);
+    strcat(cmd, " -v");
+
+    if ((unzip_out = popen(cmd, "r")) == NULL) {
+      perror("unzip pipe error");
+    } else {
+      if (fgets(buf, 1000, unzip_out) == NULL) {
+        zipwarn("failed to get information from UnZip", "");
+      } else {
+        /* the first line should start with the version */
+        if (sscanf(buf, "UnZip %f ", &UnZip_Version) < 1) {
+          zipwarn("unexpected output of UnZip -v", "");
+        } else {
+          /* printf("UnZip %f\n", UnZip_Version); */
+
+          while (fgets(buf, 1000, unzip_out)) {
+          }
+        }
+      }
+      pclose(unzip_out);
+    }
+    if (UnZip_Version < 6.0 && zip64_archive) {
+      sprintf(buf, "Found UnZip version %4.2f", UnZip_Version);
+      zipwarn(buf, "");
+      zipwarn("Need UnZip 6.00 or later to test this Zip64 archive", "");
+      return 0;
+    }
+#endif
+  return 1;
+}
+
+local void check_zipfile(zipname, zippath)
+  char *zipname;
+  char *zippath;
+  /* Invoke unzip -t on the given zip file */
+{
+#if (defined(MSDOS) && !defined(__GO32__)) || defined(__human68k__)
+  int status, len;
+  char *path, *p;
+  char *zipnam;
+
+  if ((zipnam = (char *)malloc(strlen(zipname) + 3)) == NULL)
+    ziperr(ZE_MEM, "was creating unzip zipnam");
+
+# ifdef MSDOS
+  /* Add quotes for MSDOS.  8/11/04 */
+  strcpy(zipnam, "\"");    /* accept spaces in name and path */
+  strcat(zipnam, zipname);
+  strcat(zipnam, "\"");
+# else
+  strcpy(zipnam, zipname);
+# endif
+
+  if (unzip_path) {
+    /* if user gave us the unzip to use go with it */
+    char *here;
+    int len;
+    char *cmd;
+
+    /* Replace first {} with archive name.  If no {} append name to string. */
+    here = strstr(unzip_path, "{}");
+
+    if ((cmd = (char *)malloc(strlen(unzip_path) + strlen(zipnam) + 3)) == NULL)
+      ziperr(ZE_MEM, "was creating unzip cmd");
+
+    if (here) {
+      /* have {} so replace with temp name */
+      len = here - unzip_path;
+      strcpy(cmd, unzip_path);
+      cmd[len] = '\0';
+      strcat(cmd, " ");
+      strcat(cmd, zipnam);
+      strcat(cmd, " ");
+      strcat(cmd, here + 2);
+    } else {
+      /* No {} so append temp name to end */
+      strcpy(cmd, unzip_path);
+      strcat(cmd, " ");
+      strcat(cmd, zipnam);
+    }
+
+    status = system(cmd);
+
+    free(unzip_path);
+    unzip_path = NULL;
+    free(cmd);
+  } else {
+    /* Here is where we need to check for the version of unzip the user
+     * has.  If creating a Zip64 archive need UnZip 6 or may fail.
+     */
+    if (check_unzip_version("unzip") == 0)
+      ZIPERR(ZE_TEST, zipfile);
+
+    status = spawnlp(P_WAIT, "unzip", "unzip", verbose ? "-t" : "-tqq",
+                     zipnam, NULL);
+# ifdef __human68k__
+    if (status == -1)
+      perror("unzip");
+# else
+/*
+ * unzip isn't in PATH range, assume an absolute path to zip in argv[0]
+ * and hope that unzip is in the same directory.
+ */
+    if (status == -1) {
+      p = MBSRCHR(zippath, '\\');
+      path = MBSRCHR((p == NULL ? zippath : p), '/');
+      if (path != NULL)
+        p = path;
+      if (p != NULL) {
+        len = (int)(p - zippath) + 1;
+        if ((path = malloc(len + sizeof("unzip.exe"))) == NULL)
+          ziperr(ZE_MEM, "was creating unzip path");
+        memcpy(path, zippath, len);
+        strcpy(&path[len], "unzip.exe");
+
+        if (check_unzip_version(path) == 0)
+          ZIPERR(ZE_TEST, zipfile);
+
+        status = spawnlp(P_WAIT, path, "unzip", verbose ? "-t" : "-tqq",
+                        zipnam, NULL);
+        free(path);
+      }
+      if (status == -1)
+        perror("unzip");
+    }
+  }
+# endif /* ?__human68k__ */
+  free(zipnam);
+  if (status != 0) {
+
+#else /* (MSDOS && !__GO32__) || __human68k__ */
+  char *cmd;
+  int result;
+
+  /* Tell picky compilers to shut up about unused variables */
+  zippath = zippath;
+
+  if (unzip_path) {
+    /* user gave us a path to some unzip (may not be UnZip) */
+    char *here;
+    int len;
+
+    /* Replace first {} with archive name.  If no {} append name to string. */
+    here = strstr(unzip_path, "{}");
+
+    if ((cmd = malloc(strlen(unzip_path) + strlen(zipname) + 3)) == NULL) {
+      ziperr(ZE_MEM, "building command string for testing archive");
+    }
+
+    if (here) {
+      /* have {} so replace with temp name */
+      len = here - unzip_path;
+      strcpy(cmd, unzip_path);
+      cmd[len] = '\0';
+      strcat(cmd, " ");
+# ifdef UNIX
+      strcat(cmd, "'");    /* accept space or $ in name */
+      strcat(cmd, zipname);
+      strcat(cmd, "'");
+# else
+      strcat(cmd, zipname);
+# endif
+      strcat(cmd, " ");
+      strcat(cmd, here + 2);
+    } else {
+      /* No {} so append temp name to end */
+      strcpy(cmd, unzip_path);
+      strcat(cmd, " ");
+# ifdef UNIX
+      strcat(cmd, "'");    /* accept space or $ in name */
+      strcat(cmd, zipname);
+      strcat(cmd, "'");
+# else
+      strcat(cmd, zipname);
+# endif
+    }
+    free(unzip_path);
+    unzip_path = NULL;
+
+  } else {
+    if ((cmd = malloc(20 + strlen(zipname))) == NULL) {
+      ziperr(ZE_MEM, "building command string for testing archive");
+    }
+
+    strcpy(cmd, "unzip -t ");
+# ifdef QDOS
+    strcat(cmd, "-Q4 ");
+# endif
+    if (!verbose) strcat(cmd, "-qq ");
+    if (check_unzip_version("unzip") == 0)
+      ZIPERR(ZE_TEST, zipfile);
+
+# ifdef UNIX
+    strcat(cmd, "'");    /* accept space or $ in name */
+    strcat(cmd, zipname);
+    strcat(cmd, "'");
+# else
+    strcat(cmd, zipname);
+# endif
+  }
+
+  result = system(cmd);
+# ifdef VMS
+  /* Convert success severity to 0, others to non-zero. */
+  result = ((result & STS$M_SEVERITY) != STS$M_SUCCESS);
+# endif /* def VMS */
+  free(cmd);
+  cmd = NULL;
+  if (result) {
+#endif /* ?((MSDOS && !__GO32__) || __human68k__) */
+
+    fprintf(mesg, "test of %s FAILED\n", zipfile);
+    ziperr(ZE_TEST, "original files unmodified");
+  }
+  if (noisy) {
+    fprintf(mesg, "test of %s OK\n", zipfile);
+    fflush(mesg);
+  }
+  if (logfile) {
+    fprintf(logfile, "test of %s OK\n", zipfile);
+    fflush(logfile);
+  }
+}
+#endif /* !WINDLL */
+
+/* get_filters() is replaced by the following
+local int get_filters(argc, argv)
+*/
+
+/* The filter patterns for options -x, -i, and -R are
+   returned by get_option() one at a time, so use a linked
+   list to store until all args are processed.  Then convert
+   to array for processing.
+ */
+
+/* add a filter to the linked list */
+local int add_filter(flag, pattern)
+  int flag;
+  char *pattern;
+{
+  char *iname, *p = NULL;
+  FILE *fp;
+  struct filterlist_struct *filter = NULL;
+
+  /* should never happen */
+  if (flag != 'R' && flag != 'x' && flag != 'i') {
+    ZIPERR(ZE_LOGIC, "bad flag to add_filter");
+  }
+  if (pattern == NULL) {
+    ZIPERR(ZE_LOGIC, "null pattern to add_filter");
+  }
+
+  if (pattern[0] == '@') {
+    /* read file with 1 pattern per line */
+    if (pattern[1] == '\0') {
+      ZIPERR(ZE_PARMS, "missing file after @");
+    }
+    fp = fopen(pattern + 1, "r");
+    if (fp == NULL) {
+      sprintf(errbuf, "%c pattern file '%s'", flag, pattern);
+      ZIPERR(ZE_OPEN, errbuf);
+    }
+    while ((p = getnam(fp)) != NULL) {
+      if ((filter = (struct filterlist_struct *) malloc(sizeof(struct filterlist_struct))) == NULL) {
+        ZIPERR(ZE_MEM, "adding filter");
+      }
+      if (filterlist == NULL) {
+        /* first filter */
+        filterlist = filter;         /* start of list */
+        lastfilter = filter;
+      } else {
+        lastfilter->next = filter;   /* link to last filter in list */
+        lastfilter = filter;
+      }
+      iname = ex2in(p, 0, (int *)NULL);
+      free(p);
+      if (iname != NULL) {
+        lastfilter->pattern = in2ex(iname);
+        free(iname);
+      } else {
+        lastfilter->pattern = NULL;
+      }
+      lastfilter->flag = flag;
+      pcount++;
+      lastfilter->next = NULL;
+    }
+    fclose(fp);
+  } else {
+    /* single pattern */
+    if ((filter = (struct filterlist_struct *) malloc(sizeof(struct filterlist_struct))) == NULL) {
+      ZIPERR(ZE_MEM, "adding filter");
+    }
+    if (filterlist == NULL) {
+      /* first pattern */
+      filterlist = filter;         /* start of list */
+      lastfilter = filter;
+    } else {
+      lastfilter->next = filter;   /* link to last filter in list */
+      lastfilter = filter;
+    }
+    iname = ex2in(pattern, 0, (int *)NULL);
+    if (iname != NULL) {
+       lastfilter->pattern = in2ex(iname);
+       free(iname);
+    } else {
+      lastfilter->pattern = NULL;
+    }
+    lastfilter->flag = flag;
+    pcount++;
+    lastfilter->next = NULL;
+  }
+
+  return pcount;
+}
+
+/* convert list to patterns array */
+local int filterlist_to_patterns()
+{
+  unsigned i;
+  struct filterlist_struct *next = NULL;
+
+  if (pcount == 0) {
+    patterns = NULL;
+    return 0;
+  }
+  if ((patterns = (struct plist *) malloc((pcount + 1) * sizeof(struct plist)))
+      == NULL) {
+    ZIPERR(ZE_MEM, "was creating pattern list");
+  }
+
+  for (i = 0; i < pcount && filterlist != NULL; i++) {
+    switch (filterlist->flag) {
+      case 'i':
+        icount++;
+        break;
+      case 'R':
+        Rcount++;
+        break;
+    }
+    patterns[i].select = filterlist->flag;
+    patterns[i].zname = filterlist->pattern;
+    next = filterlist->next;
+    free(filterlist);
+    filterlist = next;
+  }
+
+  return pcount;
+}
+
+
+/* add a file argument to linked list */
+local long add_name(filearg)
+  char *filearg;
+{
+  char *name = NULL;
+  struct filelist_struct *fileentry = NULL;
+
+  if ((fileentry = (struct filelist_struct *) malloc(sizeof(struct filelist_struct))) == NULL) {
+    ZIPERR(ZE_MEM, "adding file");
+  }
+  if ((name = malloc(strlen(filearg) + 1)) == NULL) {
+    ZIPERR(ZE_MEM, "adding file");
+  }
+  strcpy(name, filearg);
+  fileentry->next = NULL;
+  fileentry->name = name;
+  if (filelist == NULL) {
+    /* first file argument */
+    filelist = fileentry;         /* start of list */
+    lastfile = fileentry;
+  } else {
+    lastfile->next = fileentry;   /* link to last filter in list */
+    lastfile = fileentry;
+  }
+  filearg_count++;
+
+  return filearg_count;
+}
+
+
+/* Running Stats
+   10/30/04 */
+
+local int DisplayRunningStats()
+{
+  char tempstrg[100];
+
+  if (mesg_line_started) {
+    fprintf(mesg, "\n");
+    mesg_line_started = 0;
+  }
+  if (logfile_line_started) {
+    fprintf(logfile, "\n");
+    logfile_line_started = 0;
+  }
+  if (display_volume) {
+    if (noisy) {
+      fprintf(mesg, "%lu>%lu: ", current_in_disk + 1, current_disk + 1);
+      mesg_line_started = 1;
+    }
+    if (logall) {
+      fprintf(logfile, "%lu>%lu: ", current_in_disk + 1, current_disk + 1);
+      logfile_line_started = 1;
+    }
+  }
+  if (display_counts) {
+    if (noisy) {
+      fprintf(mesg, "%3ld/%3ld ", files_so_far, files_total - files_so_far);
+      mesg_line_started = 1;
+    }
+    if (logall) {
+      fprintf(logfile, "%3ld/%3ld ", files_so_far, files_total - files_so_far);
+      logfile_line_started = 1;
+    }
+  }
+  if (display_bytes) {
+    /* since file sizes can change as we go, use bytes_so_far from
+       initial scan so all adds up */
+    WriteNumString(bytes_so_far, tempstrg);
+    if (noisy) {
+      fprintf(mesg, "[%4s", tempstrg);
+      mesg_line_started = 1;
+    }
+    if (logall) {
+      fprintf(logfile, "[%4s", tempstrg);
+      logfile_line_started = 1;
+    }
+    if (bytes_total >= bytes_so_far) {
+      WriteNumString(bytes_total - bytes_so_far, tempstrg);
+      if (noisy)
+        fprintf(mesg, "/%4s] ", tempstrg);
+      if (logall)
+        fprintf(logfile, "/%4s] ", tempstrg);
+    } else {
+      WriteNumString(bytes_so_far - bytes_total, tempstrg);
+      if (noisy)
+        fprintf(mesg, "-%4s] ", tempstrg);
+      if (logall)
+        fprintf(logfile, "-%4s] ", tempstrg);
+    }
+  }
+  if (noisy)
+      fflush(mesg);
+  if (logall)
+      fflush(logfile);
+
+  return 0;
+}
+
+local int BlankRunningStats()
+{
+  if (display_volume) {
+    if (noisy) {
+      fprintf(mesg, "%lu>%lu: ", current_in_disk + 1, current_disk + 1);
+      mesg_line_started = 1;
+    }
+    if (logall) {
+      fprintf(logfile, "%lu>%lu: ", current_in_disk + 1, current_disk + 1);
+      logfile_line_started = 1;
+    }
+  }
+  if (display_counts) {
+    if (noisy) {
+      fprintf(mesg, "   /    ");
+      mesg_line_started = 1;
+    }
+    if (logall) {
+      fprintf(logfile, "   /    ");
+      logfile_line_started = 1;
+    }
+  }
+  if (display_bytes) {
+    if (noisy) {
+      fprintf(mesg, "     /      ");
+      mesg_line_started = 1;
+    }
+    if (logall) {
+      fprintf(logfile, "     /      ");
+      logfile_line_started = 1;
+    }
+  }
+  if (noisy)
+      fflush(mesg);
+  if (logall)
+      fflush(logfile);
+
+  return 0;
+}
+
+#if CRYPT
+#ifndef WINDLL
+int encr_passwd(modeflag, pwbuf, size, zfn)
+int modeflag;
+char *pwbuf;
+int size;
+ZCONST char *zfn;
+{
+    char *prompt;
+
+    /* Tell picky compilers to shut up about unused variables */
+    zfn = zfn;
+
+    prompt = (modeflag == ZP_PW_VERIFY) ?
+              "Verify password: " : "Enter password: ";
+
+    if (getp(prompt, pwbuf, size) == NULL) {
+      ziperr(ZE_PARMS, "stderr is not a tty");
+    }
+    return IZ_PW_ENTERED;
+}
+#endif /* !WINDLL */
+#else /* !CRYPT */
+int encr_passwd(modeflag, pwbuf, size, zfn)
+int modeflag;
+char *pwbuf;
+int size;
+ZCONST char *zfn;
+{
+    /* Tell picky compilers to shut up about unused variables */
+    modeflag = modeflag; pwbuf = pwbuf; size = size; zfn = zfn;
+
+    return ZE_LOGIC;    /* This function should never be called! */
+}
+#endif /* CRYPT */
+
+
+/* rename a split
+ * A split has a tempfile name until it is closed, then
+ * here rename it as out_path the final name for the split.
+ */
+int rename_split(temp_name, out_path)
+  char *temp_name;
+  char *out_path;
+{
+  int r;
+  /* Replace old zip file with new zip file, leaving only the new one */
+  if ((r = replace(out_path, temp_name)) != ZE_OK)
+  {
+    zipwarn("new zip file left as: ", temp_name);
+    free((zvoid *)tempzip);
+    tempzip = NULL;
+    ZIPERR(r, "was replacing split file");
+  }
+  if (zip_attributes) {
+    setfileattr(out_path, zip_attributes);
+  }
+  return ZE_OK;
+}
+
+
+int set_filetype(out_path)
+  char *out_path;
+{
+#ifdef __BEOS__
+  /* Set the filetype of the zipfile to "application/zip" */
+  setfiletype( out_path, "application/zip" );
+#endif
+
+#ifdef __ATHEOS__
+  /* Set the filetype of the zipfile to "application/x-zip" */
+  setfiletype(out_path, "application/x-zip");
+#endif
+
+#ifdef MACOS
+  /* Set the Creator/Type of the zipfile to 'IZip' and 'ZIP ' */
+  setfiletype(out_path, 'IZip', 'ZIP ');
+#endif
+
+#ifdef RISCOS
+  /* Set the filetype of the zipfile to &DDC */
+  setfiletype(out_path, 0xDDC);
+#endif
+  return ZE_OK;
+}
+
+
+/*
+  -------------------------------------------------------
+  Command Line Options
+  -------------------------------------------------------
+
+  Valid command line options.
+
+  The function get_option() uses this table to check if an
+  option is valid and if it takes a value (also called an
+  option argument).  To add an option to zip just add it
+  to this table and add a case in the main switch to handle
+  it.  If either shortopt or longopt not used set to "".
+
+   The fields:
+       shortopt     - short option name (1 or 2 chars)
+       longopt      - long option name
+       value_type   - see zip.h for constants
+       negatable    - option is negatable with trailing -
+       ID           - unsigned long int returned for option
+       name         - short description of option which is
+                        returned on some errors and when options
+                        are listed with -so option, can be NULL
+*/
+
+/* Most option IDs are set to the shortopt char.  For
+   multichar short options set to arbitrary unused constant. */
+#define o_AC            0x101
+#define o_AS            0x102
+#define o_C2            0x103
+#define o_C5            0x104
+#define o_db            0x105
+#define o_dc            0x106
+#define o_dd            0x107
+#define o_des           0x108
+#define o_df            0x109
+#define o_DF            0x110
+#define o_dg            0x111
+#define o_ds            0x112
+#define o_du            0x113
+#define o_dv            0x114
+#define o_FF            0x115
+#define o_FI            0x116
+#define o_FS            0x117
+#define o_h2            0x118
+#define o_ic            0x119
+#define o_jj            0x120
+#define o_la            0x121
+#define o_lf            0x122
+#define o_li            0x123
+#define o_ll            0x124
+#define o_mm            0x125
+#define o_MM            0x126
+#define o_nw            0x127
+#define o_RE            0x128
+#define o_sb            0x129
+#define o_sc            0x130
+#define o_sd            0x131
+#define o_sf            0x132
+#define o_so            0x133
+#define o_sp            0x134
+#define o_su            0x135
+#define o_sU            0x136
+#define o_sv            0x137
+#define o_tt            0x138
+#define o_TT            0x139
+#define o_UN            0x140
+#define o_ve            0x141
+#define o_VV            0x142
+#define o_ws            0x143
+#define o_ww            0x144
+#define o_z64           0x145
+#ifdef UNICODE_TEST
+#define o_sC            0x146
+#endif
+
+
+/* the below is mainly from the old main command line
+   switch with a few changes */
+struct option_struct far options[] = {
+  /* short longopt        value_type        negatable        ID    name */
+#ifdef EBCDIC
+    {"a",  "ascii",       o_NO_VALUE,       o_NOT_NEGATABLE, 'a',  "to ascii"},
+#endif /* EBCDIC */
+#ifdef CMS_MVS
+    {"B",  "binary",      o_NO_VALUE,       o_NOT_NEGATABLE, 'B',  "binary"},
+#endif /* CMS_MVS */
+#ifdef TANDEM
+    {"B",  "",            o_NUMBER_VALUE,   o_NOT_NEGATABLE, 'B',  "nsk"},
+#endif
+    {"0",  "store",       o_NO_VALUE,       o_NOT_NEGATABLE, '0',  "store"},
+    {"1",  "compress-1",  o_NO_VALUE,       o_NOT_NEGATABLE, '1',  "compress 1"},
+    {"2",  "compress-2",  o_NO_VALUE,       o_NOT_NEGATABLE, '2',  "compress 2"},
+    {"3",  "compress-3",  o_NO_VALUE,       o_NOT_NEGATABLE, '3',  "compress 3"},
+    {"4",  "compress-4",  o_NO_VALUE,       o_NOT_NEGATABLE, '4',  "compress 4"},
+    {"5",  "compress-5",  o_NO_VALUE,       o_NOT_NEGATABLE, '5',  "compress 5"},
+    {"6",  "compress-6",  o_NO_VALUE,       o_NOT_NEGATABLE, '6',  "compress 6"},
+    {"7",  "compress-7",  o_NO_VALUE,       o_NOT_NEGATABLE, '7',  "compress 7"},
+    {"8",  "compress-8",  o_NO_VALUE,       o_NOT_NEGATABLE, '8',  "compress 8"},
+    {"9",  "compress-9",  o_NO_VALUE,       o_NOT_NEGATABLE, '9',  "compress 9"},
+    {"A",  "adjust-sfx",  o_NO_VALUE,       o_NOT_NEGATABLE, 'A',  "adjust self extractor offsets"},
+#if defined(WIN32)
+    {"AC", "archive-clear", o_NO_VALUE,     o_NOT_NEGATABLE, o_AC, "clear DOS archive bit of included files"},
+    {"AS", "archive-set", o_NO_VALUE,       o_NOT_NEGATABLE, o_AS, "include only files with archive bit set"},
+#endif
+    {"b",  "temp-path",   o_REQUIRED_VALUE, o_NOT_NEGATABLE, 'b',  "dir to use for temp archive"},
+    {"c",  "entry-comments", o_NO_VALUE,    o_NOT_NEGATABLE, 'c',  "add comments for each entry"},
+#ifdef VMS
+    {"C",  "preserve-case", o_NO_VALUE,     o_NEGATABLE,     'C',  "Preserve (C-: down-) case all on VMS"},
+    {"C2", "preserve-case-2", o_NO_VALUE,   o_NEGATABLE,     o_C2, "Preserve (C2-: down-) case ODS2 on VMS"},
+    {"C5", "preserve-case-5", o_NO_VALUE,   o_NEGATABLE,     o_C5, "Preserve (C5-: down-) case ODS5 on VMS"},
+#endif /* VMS */
+    {"d",  "delete",      o_NO_VALUE,       o_NOT_NEGATABLE, 'd',  "delete entries from archive"},
+    {"db", "display-bytes", o_NO_VALUE,     o_NEGATABLE,     o_db, "display running bytes"},
+    {"dc", "display-counts", o_NO_VALUE,    o_NEGATABLE,     o_dc, "display running file count"},
+    {"dd", "display-dots", o_NO_VALUE,      o_NEGATABLE,     o_dd, "display dots as process each file"},
+    {"dg", "display-globaldots",o_NO_VALUE, o_NEGATABLE,     o_dg, "display dots for archive instead of files"},
+    {"ds", "dot-size",     o_REQUIRED_VALUE, o_NOT_NEGATABLE, o_ds, "set progress dot size - default 10M bytes"},
+    {"du", "display-usize", o_NO_VALUE,     o_NEGATABLE,     o_du, "display uncompressed size in bytes"},
+    {"dv", "display-volume", o_NO_VALUE,    o_NEGATABLE,     o_dv, "display volume (disk) number"},
+#ifdef MACOS
+    {"df", "datafork",    o_NO_VALUE,       o_NOT_NEGATABLE, o_df, "save datafork"},
+#endif /* MACOS */
+    {"D",  "no-dir-entries", o_NO_VALUE,    o_NOT_NEGATABLE, 'D',  "no entries for dirs themselves (-x */)"},
+    {"DF", "difference-archive",o_NO_VALUE, o_NOT_NEGATABLE, o_DF, "create diff archive with changed/new files"},
+    {"e",  "encrypt",     o_NO_VALUE,       o_NOT_NEGATABLE, 'e',  "encrypt entries, ask for password"},
+#ifdef OS2
+    {"E",  "longnames",   o_NO_VALUE,       o_NOT_NEGATABLE, 'E',  "use OS2 longnames"},
+#endif
+    {"F",  "fix",         o_NO_VALUE,       o_NOT_NEGATABLE, 'F',  "fix mostly intact archive (try first)"},
+    {"FF", "fixfix",      o_NO_VALUE,       o_NOT_NEGATABLE, o_FF, "try harder to fix archive (not as reliable)"},
+    {"FI", "fifo",        o_NO_VALUE,       o_NEGATABLE,     o_FI, "read Unix FIFO (zip will wait on open pipe)"},
+    {"FS", "filesync",    o_NO_VALUE,       o_NOT_NEGATABLE, o_FS, "add/delete entries to make archive match OS"},
+    {"f",  "freshen",     o_NO_VALUE,       o_NOT_NEGATABLE, 'f',  "freshen existing archive entries"},
+    {"fd", "force-descriptors", o_NO_VALUE, o_NOT_NEGATABLE, o_des,"force data descriptors as if streaming"},
+#ifdef ZIP64_SUPPORT
+    {"fz", "force-zip64", o_NO_VALUE,       o_NEGATABLE,     o_z64,"force use of Zip64 format, negate prevents"},
+#endif
+    {"g",  "grow",        o_NO_VALUE,       o_NOT_NEGATABLE, 'g',  "grow existing archive instead of replace"},
+#ifndef WINDLL
+    {"h",  "help",        o_NO_VALUE,       o_NOT_NEGATABLE, 'h',  "help"},
+    {"H",  "",            o_NO_VALUE,       o_NOT_NEGATABLE, 'h',  "help"},
+    {"?",  "",            o_NO_VALUE,       o_NOT_NEGATABLE, 'h',  "help"},
+    {"h2", "more-help",   o_NO_VALUE,       o_NOT_NEGATABLE, o_h2, "extended help"},
+#endif /* !WINDLL */
+    {"i",  "include",     o_VALUE_LIST,     o_NOT_NEGATABLE, 'i',  "include only files matching patterns"},
+#if defined(VMS) || defined(WIN32)
+    {"ic", "ignore-case", o_NO_VALUE,       o_NEGATABLE,     o_ic, "ignore case when matching archive entries"},
+#endif
+#ifdef RISCOS
+    {"I",  "no-image",    o_NO_VALUE,       o_NOT_NEGATABLE, 'I',  "no image"},
+#endif
+    {"j",  "junk-paths",  o_NO_VALUE,       o_NOT_NEGATABLE, 'j',  "strip paths and just store file names"},
+#ifdef MACOS
+    {"jj", "absolute-path", o_NO_VALUE,     o_NOT_NEGATABLE, o_jj, "MAC absolute path"},
+#endif /* ?MACOS */
+    {"J",  "junk-sfx",    o_NO_VALUE,       o_NOT_NEGATABLE, 'J',  "strip self extractor from archive"},
+    {"k",  "DOS-names",   o_NO_VALUE,       o_NOT_NEGATABLE, 'k',  "force use of 8.3 DOS names"},
+    {"l",  "to-crlf",     o_NO_VALUE,       o_NOT_NEGATABLE, 'l',  "convert text file line ends - LF->CRLF"},
+    {"ll", "from-crlf",   o_NO_VALUE,       o_NOT_NEGATABLE, o_ll, "convert text file line ends - CRLF->LF"},
+    {"lf", "logfile-path",o_REQUIRED_VALUE, o_NOT_NEGATABLE, o_lf, "log to log file at path (default overwrite)"},
+    {"la", "log-append",  o_NO_VALUE,       o_NEGATABLE,     o_la, "append to existing log file"},
+    {"li", "log-info",    o_NO_VALUE,       o_NEGATABLE,     o_li, "include informational messages in log"},
+#ifndef WINDLL
+    {"L",  "license",     o_NO_VALUE,       o_NOT_NEGATABLE, 'L',  "display license"},
+#endif
+    {"m",  "move",        o_NO_VALUE,       o_NOT_NEGATABLE, 'm',  "add files to archive then delete files"},
+    {"mm", "",            o_NO_VALUE,       o_NOT_NEGATABLE, o_mm, "not used"},
+    {"MM", "must-match",  o_NO_VALUE,       o_NOT_NEGATABLE, o_MM, "error if in file not matched/not readable"},
+    {"n",  "suffixes",    o_REQUIRED_VALUE, o_NOT_NEGATABLE, 'n',  "suffixes to not compress: .gz:.zip"},
+    {"nw", "no-wild",     o_NO_VALUE,       o_NOT_NEGATABLE, o_nw, "no wildcards during add or update"},
+#if defined(AMIGA) || defined(MACOS)
+    {"N",  "notes",       o_NO_VALUE,       o_NOT_NEGATABLE, 'N',  "add notes as entry comments"},
+#endif
+    {"o",  "latest-time", o_NO_VALUE,       o_NOT_NEGATABLE, 'o',  "use latest entry time as archive time"},
+    {"O",  "output-file", o_REQUIRED_VALUE, o_NOT_NEGATABLE, 'O',  "set out zipfile different than in zipfile"},
+    {"p",  "paths",       o_NO_VALUE,       o_NOT_NEGATABLE, 'p',  "store paths"},
+    {"P",  "password",    o_REQUIRED_VALUE, o_NOT_NEGATABLE, 'P',  "encrypt entries, option value is password"},
+#if defined(QDOS) || defined(QLZIP)
+    {"Q",  "Q-flag",      o_NUMBER_VALUE,   o_NOT_NEGATABLE, 'Q',  "Q flag"},
+#endif
+    {"q",  "quiet",       o_NO_VALUE,       o_NOT_NEGATABLE, 'q',  "quiet"},
+    {"r",  "recurse-paths", o_NO_VALUE,     o_NOT_NEGATABLE, 'r',  "recurse down listed paths"},
+    {"R",  "recurse-patterns", o_NO_VALUE,  o_NOT_NEGATABLE, 'R',  "recurse current dir and match patterns"},
+    {"RE", "regex",       o_NO_VALUE,       o_NOT_NEGATABLE, o_RE, "allow [list] matching (regex)"},
+    {"s",  "split-size",  o_REQUIRED_VALUE, o_NOT_NEGATABLE, 's',  "do splits, set split size (-s=0 no splits)"},
+    {"sp", "split-pause", o_NO_VALUE,       o_NOT_NEGATABLE, o_sp, "pause while splitting to select destination"},
+    {"sv", "split-verbose", o_NO_VALUE,     o_NOT_NEGATABLE, o_sv, "be verbose about creating splits"},
+    {"sb", "split-bell",  o_NO_VALUE,       o_NOT_NEGATABLE, o_sb, "when pause for next split ring bell"},
+    {"sc", "show-command",o_NO_VALUE,       o_NOT_NEGATABLE, o_sc, "show command line"},
+#ifdef UNICODE_TEST
+    {"sC", "create-files",o_NO_VALUE,       o_NOT_NEGATABLE, o_sC, "create empty files using archive names"},
+#endif
+    {"sd", "show-debug",  o_NO_VALUE,       o_NOT_NEGATABLE, o_sd, "show debug"},
+    {"sf", "show-files",  o_NO_VALUE,       o_NEGATABLE,     o_sf, "show files to operate on and exit"},
+    {"so", "show-options",o_NO_VALUE,       o_NOT_NEGATABLE, o_so, "show options"},
+#ifdef UNICODE_SUPPORT
+    {"su", "show-unicode", o_NO_VALUE,      o_NEGATABLE,     o_su, "as -sf but also show escaped Unicode"},
+    {"sU", "show-just-unicode", o_NO_VALUE, o_NEGATABLE,     o_sU, "as -sf but only show escaped Unicode"},
+#endif
+#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(ATARI)
+    {"S",  "",            o_NO_VALUE,       o_NOT_NEGATABLE, 'S',  "include system and hidden"},
+#endif /* MSDOS || OS2 || WIN32 || ATARI */
+    {"t",  "from-date",   o_REQUIRED_VALUE, o_NOT_NEGATABLE, 't',  "exclude before date"},
+    {"tt", "before-date", o_REQUIRED_VALUE, o_NOT_NEGATABLE, o_tt, "include before date"},
+    {"T",  "test",        o_NO_VALUE,       o_NOT_NEGATABLE, 'T',  "test updates before replacing archive"},
+    {"TT", "unzip-command", o_REQUIRED_VALUE,o_NOT_NEGATABLE,o_TT, "unzip command to use, name is added to end"},
+    {"u",  "update",      o_NO_VALUE,       o_NOT_NEGATABLE, 'u',  "update existing entries and add new"},
+    {"U",  "copy-entries", o_NO_VALUE,      o_NOT_NEGATABLE, 'U',  "select from archive instead of file system"},
+#ifdef UNICODE_SUPPORT
+    {"UN", "unicode",     o_REQUIRED_VALUE, o_NOT_NEGATABLE, o_UN, "UN=quit, warn, ignore, no, escape"},
+#endif
+    {"v",  "verbose",     o_NO_VALUE,       o_NOT_NEGATABLE, 'v',  "display additional information"},
+    {"",   "version",     o_NO_VALUE,       o_NOT_NEGATABLE, o_ve, "(if no other args) show version information"},
+#ifdef VMS
+    {"V",  "VMS-portable", o_NO_VALUE,      o_NOT_NEGATABLE, 'V',  "Store VMS attributes, portable file format"},
+    {"VV", "VMS-specific", o_NO_VALUE,      o_NOT_NEGATABLE, o_VV, "Store VMS attributes, VMS specific format"},
+    {"w",  "VMS-versions", o_NO_VALUE,      o_NOT_NEGATABLE, 'w',  "store VMS versions"},
+    {"ww", "VMS-dot-versions", o_NO_VALUE,  o_NOT_NEGATABLE, o_ww, "store VMS versions as \".nnn\""},
+#endif /* VMS */
+    {"ws", "wild-stop-dirs", o_NO_VALUE,    o_NOT_NEGATABLE, o_ws,  "* stops at /, ** includes any /"},
+    {"x",  "exclude",     o_VALUE_LIST,     o_NOT_NEGATABLE, 'x',  "exclude files matching patterns"},
+/*    {"X",  "no-extra",    o_NO_VALUE,       o_NOT_NEGATABLE, 'X',  "no extra"},
+*/
+    {"X",  "strip-extra", o_NO_VALUE,       o_NEGATABLE,     'X',  "-X- keep all ef, -X strip but critical ef"},
+#ifdef S_IFLNK
+    {"y",  "symlinks",    o_NO_VALUE,       o_NOT_NEGATABLE, 'y',  "store symbolic links"},
+#endif /* S_IFLNK */
+    {"z",  "archive-comment", o_NO_VALUE,   o_NOT_NEGATABLE, 'z',  "ask for archive comment"},
+    {"Z",  "compression-method", o_REQUIRED_VALUE, o_NOT_NEGATABLE, 'Z', "compression method"},
+#if defined(MSDOS) || defined(OS2)
+    {"$",  "volume-label", o_NO_VALUE,      o_NOT_NEGATABLE, '$',  "store volume label"},
+#endif
+#ifndef MACOS
+    {"@",  "names-stdin", o_NO_VALUE,       o_NOT_NEGATABLE, '@',  "get file names from stdin, one per line"},
+#endif /* !MACOS */
+#ifdef NTSD_EAS
+    {"!",  "use-privileges", o_NO_VALUE,    o_NOT_NEGATABLE, '!',  "use privileges"},
+#endif
+#ifdef RISCOS
+    {"/",  "exts-to-swap", o_REQUIRED_VALUE, o_NOT_NEGATABLE, '/',  "override Zip$Exts"},
+#endif
+    /* the end of the list */
+    {NULL, NULL,          o_NO_VALUE,       o_NOT_NEGATABLE, 0,    NULL} /* end has option_ID = 0 */
+  };
+
+
+
+#ifndef USE_ZIPMAIN
+int main(argc, argv)
+#else
+int zipmain(argc, argv)
+#endif
+int argc;               /* number of tokens in command line */
+char **argv;            /* command line tokens */
+/* Add, update, freshen, or delete zip entries in a zip file.  See the
+   command help in help() above. */
+{
+  int d;                /* true if just adding to a zip file */
+  char *e;              /* malloc'd comment buffer */
+  struct flist far *f;  /* steps through found linked list */
+  int i;                /* arg counter, root directory flag */
+  int kk;               /* next arg type (formerly another re-use of "k") */
+
+  /* zip64 support 09/05/2003 R.Nausedat */
+  uzoff_t c;            /* start of central directory */
+  uzoff_t t;            /* length of central directory */
+  zoff_t k;             /* marked counter, comment size, entry count */
+  uzoff_t n;            /* total of entry len's */
+
+  int o;                /* true if there were any ZE_OPEN errors */
+  char *p;              /* steps through option arguments */
+  char *pp;             /* temporary pointer */
+  int r;                /* temporary variable */
+  int s;                /* flag to read names from stdin */
+  uzoff_t csize;        /* compressed file size for stats */
+  uzoff_t usize;        /* uncompressed file size for stats */
+  ulg tf;               /* file time */
+  int first_listarg = 0;/* index of first arg of "process these files" list */
+  struct zlist far *v;  /* temporary variable */
+  struct zlist far * far *w;    /* pointer to last link in zfiles list */
+  FILE *x /*, *y */;    /* input and output zip files (y global) */
+  struct zlist far *z;  /* steps through zfiles linked list */
+  int bad_open_is_error = 0; /* if read fails, 0=warning, 1=error */
+#if 0
+  /* does not seem used */
+#ifdef WINDLL
+  int retcode;          /* return code for dll */
+#endif /* WINDLL */
+#endif
+#if (!defined(VMS) && !defined(CMS_MVS))
+  char *zipbuf;         /* stdio buffer for the zip file */
+#endif /* !VMS && !CMS_MVS */
+  FILE *comment_stream; /* set to stderr if anything is read from stdin */
+  int all_current;      /* used by File Sync to determine if all entries are current */
+
+  struct filelist_struct *filearg;
+
+/* used by get_option */
+  unsigned long option; /* option ID returned by get_option */
+  int argcnt = 0;       /* current argcnt in args */
+  int argnum = 0;       /* arg number */
+  int optchar = 0;      /* option state */
+  char *value = NULL;   /* non-option arg, option value or NULL */
+  int negated = 0;      /* 1 = option negated */
+  int fna = 0;          /* current first non-opt arg */
+  int optnum = 0;       /* index in table */
+
+  int show_options = 0; /* show options */
+  int show_what_doing = 0; /* show what doing */
+  int show_args = 0;    /* show command line */
+  int seen_doubledash = 0; /* seen -- argument */
+  int key_needed = 0;   /* prompt for encryption key */
+  int have_out = 0;     /* if set in_path and out_path different archive */
+#ifdef UNICODE_TEST
+  int create_files = 0;
+#endif
+
+  char **args = NULL;  /* could be wide argv */
+
+
+#ifdef THEOS
+  /* the argument expansion from the standard library is full of bugs */
+  /* use mine instead */
+  _setargv(&argc, &argv);
+  setlocale(LC_CTYPE, "I");
+#else
+  SETLOCALE(LC_CTYPE, "");
+#endif
+
+#ifdef UNICODE_SUPPORT
+# ifdef UNIX
+  /* For Unix, set the locale to UTF-8.  Any UTF-8 locale is
+     OK and they should all be the same.  This allows seeing,
+     writing, and displaying (if the fonts are loaded) all
+     characters in UTF-8. */
+  {
+    char *loc;
+
+    /*
+      loc = setlocale(LC_CTYPE, NULL);
+      printf("  Initial language locale = '%s'\n", loc);
+    */
+
+    loc = setlocale(LC_CTYPE, "en_US.UTF-8");
+
+    /*
+      printf("langinfo %s\n", nl_langinfo(CODESET));
+    */
+
+    if (loc != NULL) {
+      /* using UTF-8 character set so can set UTF-8 GPBF bit 11 */
+      using_utf8 = 1;
+      /*
+        printf("  Locale set to %s\n", loc);
+      */
+    } else {
+      /*
+        printf("  Could not set Unicode UTF-8 locale\n");
+      */
+    }
+  }
+# endif
+#endif
+
+#if defined(__IBMC__) && defined(__DEBUG_ALLOC__)
+  {
+    extern void DebugMalloc(void);
+    atexit(DebugMalloc);
+  }
+#endif
+
+#ifdef QDOS
+  {
+    extern void QDOSexit(void);
+    atexit(QDOSexit);
+  }
+#endif
+
+#ifdef NLM
+  {
+    extern void NLMexit(void);
+    atexit(NLMexit);
+  }
+#endif
+
+#ifdef RISCOS
+  set_prefix();
+#endif
+
+#ifdef __human68k__
+  fflush(stderr);
+  setbuf(stderr, NULL);
+#endif
+
+/* Re-initialize global variables to make the zip dll re-entrant. It is
+ * possible that we could get away with not re-initializing all of these
+ * but better safe than sorry.
+ */
+#if defined(MACOS) || defined(WINDLL) || defined(USE_ZIPMAIN)
+  action = ADD; /* one of ADD, UPDATE, FRESHEN, DELETE, or ARCHIVE */
+  comadd = 0;   /* 1=add comments for new files */
+  zipedit = 0;  /* 1=edit zip comment and all file comments */
+  latest = 0;   /* 1=set zip file time to time of latest file */
+  before = 0;   /* 0=ignore, else exclude files before this time */
+  after = 0;    /* 0=ignore, else exclude files newer than this time */
+  test = 0;     /* 1=test zip file with unzip -t */
+  unzip_path = NULL; /* where to look for unzip command path */
+  tempdir = 0;  /* 1=use temp directory (-b) */
+  junk_sfx = 0; /* 1=junk the sfx prefix */
+#if defined(AMIGA) || defined(MACOS)
+  filenotes = 0;/* 1=take comments from AmigaDOS/MACOS filenotes */
+#endif
+#ifndef USE_ZIPMAIN
+  zipstate = -1;
+#endif
+  tempzip = NULL;
+  fcount = 0;
+  recurse = 0;         /* 1=recurse into directories; 2=match filenames */
+  dispose = 0;         /* 1=remove files after put in zip file */
+  pathput = 1;         /* 1=store path with name */
+  method = BEST;       /* one of BEST, DEFLATE (only), or STORE (only) */
+  dosify = 0;          /* 1=make new entries look like MSDOS */
+  verbose = 0;         /* 1=report oddities in zip file structure */
+  fix = 0;             /* 1=fix the zip file */
+  adjust = 0;          /* 1=adjust offsets for sfx'd file (keep preamble) */
+  level = 6;           /* 0=fastest compression, 9=best compression */
+  translate_eol = 0;   /* Translate end-of-line LF -> CR LF */
+#if defined(OS2) || defined(WIN32)
+  use_longname_ea = 0; /* 1=use the .LONGNAME EA as the file's name */
+#endif
+#ifdef NTSD_EAS
+  use_privileges = 0;     /* 1=use security privileges overrides */
+#endif
+  no_wild = 0;            /* 1 = wildcards are disabled */
+#ifdef WILD_STOP_AT_DIR
+   wild_stop_at_dir = 1;  /* default wildcards do not include / in matches */
+#else
+   wild_stop_at_dir = 0;  /* default wildcards do include / in matches */
+#endif
+
+  skip_this_disk = 0;
+  des_good = 0;           /* Good data descriptor found */
+  des_crc = 0;            /* Data descriptor CRC */
+  des_csize = 0;          /* Data descriptor csize */
+  des_usize = 0;          /* Data descriptor usize */
+
+  dot_size = 0;           /* buffers processed in deflate per dot, 0 = no dots */
+  dot_count = 0;          /* buffers seen, recyles at dot_size */
+
+  display_counts = 0;     /* display running file count */
+  display_bytes = 0;      /* display running bytes remaining */
+  display_globaldots = 0; /* display dots for archive instead of each file */
+  display_volume = 0;     /* display current input and output volume (disk) numbers */
+  display_usize = 0;      /* display uncompressed bytes */
+
+  files_so_far = 0;       /* files processed so far */
+  bad_files_so_far = 0;   /* bad files skipped so far */
+  files_total = 0;        /* files total to process */
+  bytes_so_far = 0;       /* bytes processed so far (from initial scan) */
+  good_bytes_so_far = 0;  /* good bytes read so far */
+  bad_bytes_so_far = 0;   /* bad bytes skipped so far */
+  bytes_total = 0;        /* total bytes to process (from initial scan) */
+
+  logall = 0;             /* 0 = warnings/errors, 1 = all */
+  logfile = NULL;         /* pointer to open logfile or NULL */
+  logfile_append = 0;     /* append to existing logfile */
+  logfile_path = NULL;    /* pointer to path of logfile */
+
+  hidden_files = 0;       /* process hidden and system files */
+  volume_label = 0;       /* add volume label */
+  dirnames = 1;           /* include directory entries by default */
+#if defined(WIN32)
+  only_archive_set = 0;   /* only include if DOS archive bit set */
+  clear_archive_bits = 0; /* clear DOS archive bit of included files */
+#endif
+  linkput = 0;            /* 1=store symbolic links as such */
+  noisy = 1;              /* 0=quiet operation */
+  extra_fields = 1;       /* 0=create minimum, 1=don't copy old, 2=keep old */
+
+  use_descriptors = 0;    /* 1=use data descriptors 12/29/04 */
+  zip_to_stdout = 0;      /* output zipfile to stdout 12/30/04 */
+  allow_empty_archive = 0;/* if no files, create empty archive anyway 12/28/05 */
+  copy_only = 0;          /* 1=copying archive entries only */
+
+  output_seekable = 1;    /* 1 = output seekable 3/13/05 EG */
+
+#ifdef ZIP64_SUPPORT      /* zip64 support 10/4/03 */
+  force_zip64 = -1;       /* if 1 force entries to be zip64 */
+                          /* mainly for streaming from stdin */
+  zip64_entry = 0;        /* current entry needs Zip64 */
+  zip64_archive = 0;      /* if 1 then at least 1 entry needs zip64 */
+#endif
+
+#ifdef UNICODE_SUPPORT
+  utf8_force = 0;         /* 1=force storing UTF-8 as standard per AppNote bit 11 */
+#endif
+
+  unicode_escape_all = 0; /* 1=escape all non-ASCII characters in paths */
+  unicode_mismatch = 1;   /* unicode mismatch is 0=error, 1=warn, 2=ignore, 3=no */
+
+  scan_delay = 5;         /* seconds before display Scanning files message */
+  scan_dot_time = 2;      /* time in seconds between Scanning files dots */
+  scan_start = 0;         /* start of scan */
+  scan_last = 0;          /* time of last message */
+  scan_started = 0;       /* scan has started */
+  scan_count = 0;         /* Used for Scanning files ... message */
+
+  before = 0;             /* 0=ignore, else exclude files before this time */
+  after = 0;              /* 0=ignore, else exclude files newer than this time */
+
+  special = ".Z:.zip:.zoo:.arc:.lzh:.arj"; /* List of special suffixes */
+  key = NULL;             /* Scramble password if scrambling */
+  key_needed = 0;         /* Need scramble password */
+  tempath = NULL;         /* Path for temporary files */
+  patterns = NULL;        /* List of patterns to be matched */
+  pcount = 0;             /* number of patterns */
+  icount = 0;             /* number of include only patterns */
+  Rcount = 0;             /* number of -R include patterns */
+
+  found = NULL;           /* List of names found, or new found entry */
+  fnxt = &found;
+
+  /* used by get_option */
+  argcnt = 0;             /* size of args */
+  argnum = 0;             /* current arg number */
+  optchar = 0;            /* option state */
+  value = NULL;           /* non-option arg, option value or NULL */
+  negated = 0;            /* 1 = option negated */
+  fna = 0;                /* current first nonopt arg */
+  optnum = 0;             /* option index */
+
+  show_options = 0;       /* 1 = show options */
+  show_what_doing = 0;    /* 1 = show what zip doing */
+  show_args = 0;          /* 1 = show command line */
+  seen_doubledash = 0;    /* seen -- argument */
+
+  zipfile = NULL;         /* path of usual in and out zipfile */
+  tempzip = NULL;         /* name of temp file */
+  y = NULL;               /* output file now global so can change in splits */
+  in_file = NULL;         /* current input file for splits */
+  in_split_path = NULL;   /* current in split path */
+  in_path = NULL;         /* used by splits to track changing split locations */
+  out_path = NULL;        /* if set, use -O out_path as output */
+  have_out = 0;           /* if set, in_path and out_path not the same archive */
+
+  total_disks = 0;        /* total disks in archive */
+  current_in_disk = 0;    /* current read split disk */
+  current_in_offset = 0;  /* current offset in current read disk */
+  skip_current_disk = 0;  /* if != 0 and fix then skip entries on this disk */
+
+  zip64_eocd_disk = 0;    /* disk with Zip64 End Of Central Directory Record */
+  zip64_eocd_offset = 0;  /* offset for Zip64 EOCD Record */
+
+  current_local_disk = 0; /* disk with current local header */
+
+  current_disk = 0;           /* current disk number */
+  cd_start_disk = (ulg)-1;    /* central directory start disk */
+  cd_start_offset = 0;        /* offset of start of cd on cd start disk */
+  cd_entries_this_disk = 0;   /* cd entries this disk */
+  total_cd_entries = 0;       /* total cd entries in new/updated archive */
+
+  /* for split method 1 (keep split with local header open and update) */
+  current_local_tempname = NULL; /* name of temp file */
+  current_local_file = NULL;  /* file pointer for current local header */
+  current_local_offset = 0;   /* offset to start of current local header */
+
+  /* global */
+  bytes_this_split = 0;       /* bytes written to the current split */
+  read_split_archive = 0;     /* 1=scanzipf_reg detected spanning signature */
+  split_method = 0;           /* 0=no splits, 1=update LHs, 2=data descriptors */
+  split_size = 0;             /* how big each split should be */
+  split_bell = 0;             /* when pause for next split ring bell */
+  bytes_prev_splits = 0;      /* total bytes written to all splits before this */
+  bytes_this_entry = 0;       /* bytes written for this entry across all splits */
+  noisy_splits = 0;           /* be verbose about creating splits */
+  mesg_line_started = 0;      /* 1=started writing a line to mesg */
+  logfile_line_started = 0;   /* 1=started writing a line to logfile */
+
+  filelist = NULL;
+  filearg_count = 0;
+  allow_empty_archive = 0;    /* if no files, allow creation of empty archive anyway */
+  bad_open_is_error = 0;      /* if read fails, 0=warning, 1=error */
+  unicode_mismatch = 0;       /* unicode mismatch is 0=error, 1=warn, 2=ignore, 3=no */
+  show_files = 0;             /* show files to operate on and exit */
+  scan_delay = 5;             /* seconds before display Scanning files message */
+  scan_dot_time = 2;          /* time in seconds between Scanning files dots */
+  scan_started = 0;           /* space at start of scan has been displayed */
+  scan_last = 0;              /* Time last dot displayed for Scanning files message */
+  scan_start = 0;             /* Time scanning started for Scanning files message */
+#ifdef UNICODE_SUPPORT
+  use_wide_to_mb_default = 0;
+#endif
+  filter_match_case = 1;      /* default is to match case when matching archive entries */
+  allow_fifo = 0;             /* 1=allow reading Unix FIFOs, waiting if pipe open */
+
+#if !defined(MACOS) && !defined(USE_ZIPMAIN)
+  retcode = setjmp(zipdll_error_return);
+  if (retcode) {
+    return retcode;
+  }
+#endif /* !MACOS */
+#endif /* MACOS || WINDLL */
+
+#if !defined(ALLOW_REGEX) && (defined(MSDOS) || defined(WIN32))
+  allow_regex = 0;        /* 1 = allow [list] matching (regex) */
+#else
+  allow_regex = 1;
+#endif
+
+  mesg = (FILE *) stdout; /* cannot be made at link time for VMS */
+  comment_stream = (FILE *)stdin;
+
+  init_upper();           /* build case map table */
+
+#ifdef LARGE_FILE_SUPPORT
+  /* test if we can support large files - 9/29/04 */
+  if (sizeof(zoff_t) < 8) {
+    ZIPERR(ZE_COMPERR, "LARGE_FILE_SUPPORT enabled but OS not supporting it");
+  }
+#endif
+  /* test if sizes are the same - 12/30/04 */
+  if (sizeof(uzoff_t) != sizeof(zoff_t)){
+    ZIPERR(ZE_COMPERR, "uzoff_t not same size as zoff_t");
+  }
+
+#if (defined(WIN32) && defined(USE_EF_UT_TIME))
+  /* For the Win32 environment, we may have to "prepare" the environment
+     prior to the tzset() call, to work around tzset() implementation bugs.
+   */
+  iz_w32_prepareTZenv();
+#endif
+
+#if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME))
+#  ifndef VALID_TIMEZONE
+#     define VALID_TIMEZONE(tmp) \
+             (((tmp = getenv("TZ")) != NULL) && (*tmp != '\0'))
+#  endif
+  zp_tz_is_valid = VALID_TIMEZONE(p);
+#if (defined(AMIGA) || defined(DOS))
+  if (!zp_tz_is_valid)
+    extra_fields = 0;     /* disable storing "UT" time stamps */
+#endif /* AMIGA || DOS */
+#endif /* IZ_CHECK_TZ && USE_EF_UT_TIME */
+
+/* For systems that do not have tzset() but supply this function using another
+   name (_tzset() or something similar), an appropiate "#define tzset ..."
+   should be added to the system specifc configuration section.  */
+#if (!defined(TOPS20) && !defined(VMS))
+#if (!defined(RISCOS) && !defined(MACOS) && !defined(QDOS))
+#if (!defined(BSD) && !defined(MTS) && !defined(CMS_MVS) && !defined(TANDEM))
+  tzset();
+#endif
+#endif
+#endif
+
+#ifdef VMSCLI
+  {
+      ulg status = vms_zip_cmdline(&argc, &argv);
+      if (!(status & 1))
+            return status;
+  }
+#endif /* VMSCLI */
+
+  /*    Substitutes the extended command line argument list produced by
+   *    the MKS Korn Shell in place of the command line info from DOS.
+   */
+
+  /* extract extended argument list from environment */
+  expand_args(&argc, &argv);
+
+#ifndef WINDLL
+  /* Process arguments */
+  diag("processing arguments");
+  /* First, check if just the help or version screen should be displayed */
+  if (argc == 1 && isatty(1))   /* no arguments, and output screen available */
+  {                             /* show help screen */
+# ifdef VMSCLI
+    VMSCLI_help();
+# else
+    help();
+# endif
+    EXIT(ZE_OK);
+  }
+  /* Check -v here as env arg can change argc.  Handle --version in main switch. */
+  else if (argc == 2 && strcmp(argv[1], "-v") == 0 &&
+           /* only "-v" as argument, and */
+           (isatty(1) || isatty(0)))
+           /* stdout or stdin is connected to console device */
+  {                             /* show diagnostic version info */
+    version_info();
+    EXIT(ZE_OK);
+  }
+# ifndef VMS
+#   ifndef RISCOS
+  envargs(&argc, &argv, "ZIPOPT", "ZIP");  /* get options from environment */
+#   else /* RISCOS */
+  envargs(&argc, &argv, "ZIPOPT", "Zip$Options");  /* get options from environment */
+  getRISCOSexts("Zip$Exts");        /* get the extensions to swap from environment */
+#   endif /* ? RISCOS */
+# else /* VMS */
+  envargs(&argc, &argv, "ZIPOPT", "ZIP_OPTS");  /* 4th arg for unzip compat. */
+# endif /* ?VMS */
+#endif /* !WINDLL */
+
+  zipfile = tempzip = NULL;
+  y = NULL;
+  d = 0;                        /* disallow adding to a zip file */
+#if (!defined(MACOS) && !defined(WINDLL) && !defined(NLM))
+  signal(SIGINT, handler);
+#ifdef SIGTERM                  /* AMIGADOS and others have no SIGTERM */
+  signal(SIGTERM, handler);
+#endif
+# if defined(SIGABRT) && !(defined(AMIGA) && defined(__SASC))
+   signal(SIGABRT, handler);
+# endif
+# ifdef SIGBREAK
+   signal(SIGBREAK, handler);
+# endif
+# ifdef SIGBUS
+   signal(SIGBUS, handler);
+# endif
+# ifdef SIGILL
+   signal(SIGILL, handler);
+# endif
+# ifdef SIGSEGV
+   signal(SIGSEGV, handler);
+# endif
+#endif /* !MACOS && !WINDLL && !NLM */
+#ifdef NLM
+  NLMsignals();
+#endif
+
+
+#if defined(UNICODE_SUPPORT) && defined(WIN32)
+  /* check if this Win32 OS has support for wide character calls */
+  has_win32_wide();
+#endif
+
+  /* make copy of args that can use with insert_arg() used by get_option() */
+  args = copy_args(argv, 0);
+
+  kk = 0;                       /* Next non-option argument type */
+  s = 0;                        /* set by -@ */
+
+  /*
+  -------------------------------------------
+  Process command line using get_option
+  -------------------------------------------
+
+  Each call to get_option() returns either a command
+  line option and possible value or a non-option argument.
+  Arguments are permuted so that all options (-r, -b temp)
+  are returned before non-option arguments (zipfile).
+  Returns 0 when nothing left to read.
+  */
+
+  /* set argnum = 0 on first call to init get_option */
+  argnum = 0;
+
+  /* get_option returns the option ID and updates parameters:
+         args    - usually same as argv if no argument file support
+         argcnt  - current argc for args
+         value   - char* to value (free() when done with it) or NULL if no value
+         negated - option was negated with trailing -
+  */
+
+  while ((option = get_option(&args, &argcnt, &argnum,
+                              &optchar, &value, &negated,
+                              &fna, &optnum, 0)))
+  {
+    switch (option)
+    {
+#ifdef EBCDIC
+      case 'a':
+        aflag = ASCII;
+        printf("Translating to ASCII...\n");
+        break;
+#endif /* EBCDIC */
+#ifdef CMS_MVS
+        case 'B':
+          bflag = 1;
+          printf("Using binary mode...\n");
+          break;
+#endif /* CMS_MVS */
+#ifdef TANDEM
+        case 'B':
+          nskformatopt(value);
+          free(value);
+          break;
+#endif
+
+        case '0':
+          method = STORE; level = 0; break;
+        case '1':  case '2':  case '3':  case '4':
+        case '5':  case '6':  case '7':  case '8':  case '9':
+          /* Set the compression efficacy */
+          level = (int)option - '0';  break;
+        case 'A':   /* Adjust unzipsfx'd zipfile:  adjust offsets only */
+          adjust = 1; break;
+#if defined(WIN32)
+        case o_AC:
+          clear_archive_bits = 1; break;
+        case o_AS:
+          /* Since some directories could be empty if no archive bits are
+             set for files in a directory, don't add directory entries (-D).
+             Just files with the archive bit set are added, including paths
+             (unless paths are excluded).  All major unzips should create
+             directories for the paths as needed. */
+          dirnames = 0;
+          only_archive_set = 1; break;
+#endif /* MSDOS || OS2 || WIN32 */
+        case 'b':   /* Specify path for temporary file */
+          tempdir = 1;
+          tempath = value;
+          break;
+        case 'c':   /* Add comments for new files in zip file */
+          comadd = 1;  break;
+
+        /* -C, -C2, and -C5 are with -V */
+
+        case 'd':   /* Delete files from zip file */
+          if (action != ADD) {
+            ZIPERR(ZE_PARMS, "specify just one action");
+          }
+          action = DELETE;
+          break;
+#ifdef MACOS
+        case o_df:
+          MacZip.DataForkOnly = true;
+          break;
+#endif /* MACOS */
+        case o_db:
+          if (negated)
+            display_bytes = 0;
+          else
+            display_bytes = 1;
+          break;
+        case o_dc:
+          if (negated)
+            display_counts = 0;
+          else
+            display_counts = 1;
+          break;
+        case o_dd:
+          /* display dots */
+          display_globaldots = 0;
+          if (negated) {
+            dot_count = 0;
+          } else {
+            /* set default dot size if dot_size not set (dot_count = 0) */
+            if (dot_count == 0)
+              /* default to 10 MB */
+              dot_size = 10 * 0x100000;
+            dot_count = -1;
+          }
+          break;
+        case o_dg:
+          /* display dots globally for archive instead of for each file */
+          if (negated) {
+            display_globaldots = 0;
+          } else {
+            display_globaldots = 1;
+            /* set default dot size if dot_size not set (dot_count = 0) */
+            if (dot_count == 0)
+              dot_size = 10 * 0x100000;
+            dot_count = -1;
+          }
+          break;
+        case o_ds:
+          /* input dot_size is now actual dot size to account for
+             different buffer sizes */
+          if (value == NULL)
+            dot_size = 10 * 0x100000;
+          else if (value[0] == '\0') {
+            /* default to 10 MB */
+            dot_size = 10 * 0x100000;
+            free(value);
+          } else {
+            dot_size = ReadNumString(value);
+            if (dot_size == (zoff_t)-1) {
+              sprintf(errbuf, "option -ds (--dot-size) has bad size:  '%s'",
+                      value);
+              free(value);
+              ZIPERR(ZE_PARMS, errbuf);
+            }
+            if (dot_size < 0x400) {
+              /* < 1 KB so there is no multiplier, assume MB */
+              dot_size *= 0x100000;
+
+            } else if (dot_size < 0x400L * 32) {
+              /* 1K <= dot_size < 32K */
+              sprintf(errbuf, "dot size must be at least 32 KB:  '%s'", value);
+              free(value);
+              ZIPERR(ZE_PARMS, errbuf);
+
+            } else {
+              /* 32K <= dot_size */
+            }
+            free(value);
+          }
+          dot_count = -1;
+          break;
+        case o_du:
+          if (negated)
+            display_usize = 0;
+          else
+            display_usize = 1;
+          break;
+        case o_dv:
+          if (negated)
+            display_volume = 0;
+          else
+            display_volume = 1;
+          break;
+        case 'D':   /* Do not add directory entries */
+          dirnames = 0; break;
+        case o_DF:  /* Create a difference archive */
+          diff_mode = 1;
+          allow_empty_archive = 1;
+          break;
+        case 'e':   /* Encrypt */
+#if !CRYPT
+          ZIPERR(ZE_PARMS, "encryption not supported");
+#else /* CRYPT */
+          if (key)
+            free(key);
+          key_needed = 1;
+#endif /* !CRYPT */
+          break;
+        case 'F':   /* fix the zip file */
+          fix = 1; break;
+        case o_FF:  /* try harder to fix file */
+          fix = 2; break;
+        case o_FI:
+          if (negated)
+            allow_fifo = 0;
+          else
+            allow_fifo = 1;
+          break;
+        case o_FS:  /* delete exiting entries in archive where there is
+                       no matching file on file system */
+          filesync = 1; break;
+        case 'f':   /* Freshen zip file--overwrite only */
+          if (action != ADD) {
+            ZIPERR(ZE_PARMS, "specify just one action");
+          }
+          action = FRESHEN;
+          break;
+        case 'g':   /* Allow appending to a zip file */
+          d = 1;  break;
+#ifndef WINDLL
+        case 'h': case 'H': case '?':  /* Help */
+#ifdef VMSCLI
+          VMSCLI_help();
+#else
+          help();
+#endif
+          RETURN(finish(ZE_OK));
+#endif /* !WINDLL */
+
+#ifndef WINDLL
+        case o_h2:  /* Extended Help */
+          help_extended();
+          RETURN(finish(ZE_OK));
+#endif /* !WINDLL */
+
+        /* -i is with -x */
+#if defined(VMS) || defined(WIN32)
+        case o_ic:  /* Ignore case (case-insensitive matching of archive entries) */
+          if (negated)
+            filter_match_case = 1;
+          else
+            filter_match_case = 0;
+          break;
+#endif
+#ifdef RISCOS
+        case 'I':   /* Don't scan through Image files */
+          scanimage = 0;
+          break;
+#endif
+#ifdef MACOS
+        case o_jj:   /* store absolute path including volname */
+            MacZip.StoreFullPath = true;
+            break;
+#endif /* ?MACOS */
+        case 'j':   /* Junk directory names */
+          pathput = 0;  break;
+        case 'J':   /* Junk sfx prefix */
+          junk_sfx = 1;  break;
+        case 'k':   /* Make entries using DOS names (k for Katz) */
+          dosify = 1;  break;
+        case 'l':   /* Translate end-of-line */
+          translate_eol = 1; break;
+        case o_ll:
+          translate_eol = 2; break;
+        case o_lf:
+          /* open a logfile */
+          /* allow multiple use of option but only last used */
+          if (logfile_path) {
+            free(logfile_path);
+          }
+          logfile_path = value;
+          break;
+        case o_la:
+          /* append to existing logfile */
+          if (negated)
+            logfile_append = 0;
+          else
+            logfile_append = 1;
+          break;
+        case o_li:
+          /* log all including informational messages */
+          if (negated)
+            logall = 0;
+          else
+            logall = 1;
+          break;
+#ifndef WINDLL
+        case 'L':   /* Show license */
+          license();
+          RETURN(finish(ZE_OK));
+#endif
+        case 'm':   /* Delete files added or updated in zip file */
+          dispose = 1;  break;
+        case o_mm:  /* To prevent use of -mm for -MM */
+          ZIPERR(ZE_PARMS, "-mm not supported, Must_Match is -MM");
+          dispose = 1;  break;
+        case o_MM:  /* Exit with error if input file can't be read */
+          bad_open_is_error = 1; break;
+        case 'n':   /* Don't compress files with a special suffix */
+          special = value;
+          /* special = NULL; */ /* will be set at next argument */
+          break;
+        case o_nw:  /* no wildcards - wildcards are handled like other characters */
+          no_wild = 1;
+          break;
+#if defined(AMIGA) || defined(MACOS)
+        case 'N':   /* Get zipfile comments from AmigaDOS/MACOS filenotes */
+          filenotes = 1; break;
+#endif
+        case 'o':   /* Set zip file time to time of latest file in it */
+          latest = 1;  break;
+        case 'O':   /* Set output file different than input archive */
+          out_path = ziptyp(value);
+          free(value);
+          have_out = 1;
+          break;
+        case 'p':   /* Store path with name */
+          break;            /* (do nothing as annoyance avoidance) */
+        case 'P':   /* password for encryption */
+          if (key != NULL) {
+            free(key);
+          }
+#if CRYPT
+          key = value;
+          key_needed = 0;
+#else
+          ZIPERR(ZE_PARMS, "encryption not supported");
+#endif /* CRYPT */
+          break;
+#if defined(QDOS) || defined(QLZIP)
+        case 'Q':
+          qlflag  = strtol(value, NULL, 10);
+       /* qlflag  = strtol((p+1), &p, 10); */
+       /* p--; */
+          if (qlflag == 0) qlflag = 4;
+          free(value);
+          break;
+#endif
+        case 'q':   /* Quiet operation */
+          noisy = 0;
+#ifdef MACOS
+          MacZip.MacZip_Noisy = false;
+#endif  /* MACOS */
+          if (verbose) verbose--;
+          break;
+        case 'r':   /* Recurse into subdirectories, match full path */
+          if (recurse == 2) {
+            ZIPERR(ZE_PARMS, "do not specify both -r and -R");
+          }
+          recurse = 1;  break;
+        case 'R':   /* Recurse into subdirectories, match filename */
+          if (recurse == 1) {
+            ZIPERR(ZE_PARMS, "do not specify both -r and -R");
+          }
+          recurse = 2;  break;
+
+        case o_RE:   /* Allow [list] matching (regex) */
+          allow_regex = 1; break;
+
+        case o_sc:  /* show command line args */
+          show_args = 1; break;
+#ifdef UNICODE_TEST
+        case o_sC:  /* create empty files from archive names */
+          create_files = 1;
+          show_files = 1; break;
+#endif
+        case o_sd:  /* show debugging */
+          show_what_doing = 1; break;
+        case o_sf:  /* show files to operate on */
+          if (!negated)
+            show_files = 1;
+          else
+            show_files = 2;
+          break;
+        case o_so:  /* show all options */
+          show_options = 1; break;
+#ifdef UNICODE_SUPPORT
+        case o_su:  /* -sf but also show Unicode if exists */
+          if (!negated)
+            show_files = 3;
+          else
+            show_files = 4;
+          break;
+        case o_sU:  /* -sf but only show Unicode if exists or normal if not */
+          if (!negated)
+            show_files = 5;
+          else
+            show_files = 6;
+          break;
+#endif
+
+        case 's':   /* enable split archives */
+          /* get the split size from value */
+          if (strcmp(value, "-") == 0) {
+            /* -s- do not allow splits */
+            split_method = -1;
+          } else {
+            split_size = ReadNumString(value);
+            if (split_size == (uzoff_t)-1) {
+              sprintf(errbuf, "bad split size:  '%s'", value);
+              ZIPERR(ZE_PARMS, errbuf);
+            }
+            if (split_size == 0) {
+              /* do not allow splits */
+              split_method = -1;
+            } else {
+              if (split_method == 0) {
+                split_method = 1;
+              }
+              if (split_size < 0x400) {
+                /* < 1 KB there is no multiplier, assume MB */
+                split_size *= 0x100000;
+              }
+              /* By setting the minimum split size to 64 KB we avoid
+                 not having enough room to write a header unsplit
+                 which is required */
+              if (split_size < 0x400L * 64) {
+                /* split_size < 64K */
+                sprintf(errbuf, "minimum split size is 64 KB:  '%s'", value);
+                free(value);
+                ZIPERR(ZE_PARMS, errbuf);
+              }
+            }
+          }
+          free(value);
+          break;
+        case o_sb:  /* when pause for next split ring bell */
+          split_bell = 1;
+          break;
+        case o_sp:  /* enable split select - pause splitting between splits */
+          use_descriptors = 1;
+          split_method = 2;
+          break;
+        case o_sv:  /* be verbose about creating splits */
+          noisy_splits = 1;
+          break;
+
+#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(ATARI)
+        case 'S':
+          hidden_files = 1; break;
+#endif /* MSDOS || OS2 || WIN32 || ATARI */
+#ifdef MACOS
+        case 'S':
+          MacZip.IncludeInvisible = true; break;
+#endif /* MACOS */
+        case 't':   /* Exclude files earlier than specified date */
+          {
+            int yyyy, mm, dd;       /* results of sscanf() */
+
+            /* Support ISO 8601 & American dates */
+            if ((sscanf(value, "%4d-%2d-%2d", &yyyy, &mm, &dd) != 3 &&
+                 sscanf(value, "%2d%2d%4d", &mm, &dd, &yyyy) != 3) ||
+                mm < 1 || mm > 12 || dd < 1 || dd > 31) {
+              ZIPERR(ZE_PARMS,
+                     "invalid date entered for -t option - use mmddyyyy or yyyy-mm-dd");
+            }
+            before = dostime(yyyy, mm, dd, 0, 0, 0);
+          }
+          free(value);
+          break;
+        case o_tt:  /* Exclude files at or after specified date */
+          {
+            int yyyy, mm, dd;       /* results of sscanf() */
+
+            /* Support ISO 8601 & American dates */
+            if ((sscanf(value, "%4d-%2d-%2d", &yyyy, &mm, &dd) != 3 &&
+                 sscanf(value, "%2d%2d%4d", &mm, &dd, &yyyy) != 3) ||
+                mm < 1 || mm > 12 || dd < 1 || dd > 31) {
+              ZIPERR(ZE_PARMS,
+                     "invalid date entered for -tt option - use mmddyyyy or yyyy-mm-dd");
+            }
+            after = dostime(yyyy, mm, dd, 0, 0, 0);
+          }
+          free(value);
+          break;
+        case 'T':   /* test zip file */
+          test = 1; break;
+        case o_TT:  /* command path to use instead of 'unzip -t ' */
+          if (unzip_path)
+            free(unzip_path);
+          unzip_path = value;
+          break;
+        case 'U':   /* Select archive entries to keep or operate on */
+          if (action != ADD) {
+            ZIPERR(ZE_PARMS, "specify just one action");
+          }
+          action = ARCHIVE;
+          break;
+#ifdef UNICODE_SUPPORT
+        case o_UN:   /* Unicode */
+          if (abbrevmatch("quit", value, 0, 1)) {
+            /* Unicode path mismatch is error */
+            unicode_mismatch = 0;
+          } else if (abbrevmatch("warn", value, 0, 1)) {
+            /* warn of mismatches and continue */
+            unicode_mismatch = 1;
+          } else if (abbrevmatch("ignore", value, 0, 1)) {
+            /* ignore mismatches and continue */
+            unicode_mismatch = 2;
+          } else if (abbrevmatch("no", value, 0, 1)) {
+            /* no use Unicode path */
+            unicode_mismatch = 3;
+          } else if (abbrevmatch("escape", value, 0, 1)) {
+            /* escape all non-ASCII characters */
+            unicode_escape_all = 1;
+
+          } else if (abbrevmatch("UTF8", value, 0, 1)) {
+            /* force storing UTF-8 as standard per AppNote bit 11 */
+            utf8_force = 1;
+
+          } else {
+            zipwarn("-UN must be Quit, Warn, Ignore, No, Escape, or UTF8: ", value);
+
+            free(value);
+            ZIPERR(ZE_PARMS, "-UN (unicode) bad value");
+          }
+          free(value);
+          break;
+#endif
+        case 'u':   /* Update zip file--overwrite only if newer */
+          if (action != ADD) {
+            ZIPERR(ZE_PARMS, "specify just one action");
+          }
+          action = UPDATE;
+          break;
+        case 'v':        /* Either display version information or */
+        case o_ve:       /* Mention oddities in zip file structure */
+          if (option == o_ve ||      /* --version */
+              (argcnt == 2 && strlen(args[1]) == 2)) { /* -v only */
+            /* display version */
+#ifndef WINDLL
+            version_info();
+#else
+            zipwarn("version information not supported for dll", "");
+#endif
+            RETURN(finish(ZE_OK));
+          } else {
+            noisy = 1;
+            verbose++;
+          }
+          break;
+#ifdef VMS
+        case 'C':  /* Preserve case (- = down-case) all. */
+          if (negated)
+          { /* Down-case all. */
+            if ((vms_case_2 > 0) || (vms_case_5 > 0))
+            {
+              ZIPERR( ZE_PARMS, "Conflicting case directives (-C-)");
+            }
+            vms_case_2 = -1;
+            vms_case_5 = -1;
+          }
+          else
+          { /* Not negated.  Preserve all. */
+            if ((vms_case_2 < 0) || (vms_case_5 < 0))
+            {
+              ZIPERR( ZE_PARMS, "Conflicting case directives (-C)");
+            }
+            vms_case_2 = 1;
+            vms_case_5 = 1;
+          }
+          break;
+        case o_C2:  /* Preserve case (- = down-case) ODS2. */
+          if (negated)
+          { /* Down-case ODS2. */
+            if (vms_case_2 > 0)
+            {
+              ZIPERR( ZE_PARMS, "Conflicting case directives (-C2-)");
+            }
+            vms_case_2 = -1;
+          }
+          else
+          { /* Not negated.  Preserve ODS2. */
+            if (vms_case_2 < 0)
+            {
+              ZIPERR( ZE_PARMS, "Conflicting case directives (-C2)");
+            }
+            vms_case_2 = 1;
+          }
+          break;
+        case o_C5:  /* Preserve case (- = down-case) ODS5. */
+          if (negated)
+          { /* Down-case ODS5. */
+            if (vms_case_5 > 0)
+            {
+              ZIPERR( ZE_PARMS, "Conflicting case directives (-C5-)");
+            }
+            vms_case_5 = -1;
+          }
+          else
+          { /* Not negated.  Preserve ODS5. */
+            if (vms_case_5 < 0)
+            {
+              ZIPERR( ZE_PARMS, "Conflicting case directives (-C5)");
+            }
+            vms_case_5 = 1;
+          }
+          break;
+        case 'V':   /* Store in VMS format.  (Record multiples.) */
+          vms_native = 1; break;
+          /* below does work with new parser but doesn't allow tracking
+             -VV separately, like adding a separate description */
+          /* vms_native++; break; */
+        case o_VV:  /* Store in VMS specific format */
+          vms_native = 2; break;
+        case 'w':   /* Append the VMS version number */
+          vmsver |= 1;  break;
+        case o_ww:   /* Append the VMS version number as ".nnn". */
+          vmsver |= 3;  break;
+#endif /* VMS */
+        case o_ws:  /* Wildcards do not include directory boundaries in matches */
+          wild_stop_at_dir = 1;
+          break;
+
+        case 'i':   /* Include only the following files */
+          /* if nothing matches include list then still create an empty archive */
+          allow_empty_archive = 1;
+        case 'x':   /* Exclude following files */
+          add_filter((int) option, value);
+          free(value);
+          break;
+#ifdef S_IFLNK
+        case 'y':   /* Store symbolic links as such */
+          linkput = 1;  break;
+#endif /* S_IFLNK */
+        case 'z':   /* Edit zip file comment */
+          zipedit = 1;  break;
+        case 'Z':   /* Compression method */
+          if (abbrevmatch("deflate", value, 0, 1)) {
+            /* deflate */
+            method = DEFLATE;
+          } else if (abbrevmatch("store", value, 0, 1)) {
+            /* store */
+            method = STORE;
+          } else if (abbrevmatch("bzip2", value, 0, 1)) {
+            /* bzip2 */
+#ifdef BZIP2_SUPPORT
+            method = BZIP2;
+#else
+            ZIPERR(ZE_COMPERR, "Compression method bzip2 not enabled");
+#endif
+          } else {
+#ifdef BZIP2_SUPPORT
+            zipwarn("valid compression methods are:  store, deflate, bzip2", "");
+#else
+            zipwarn("valid compression methods are:  store, deflate)", "");
+#endif
+            zipwarn("unknown compression method found:  ", value);
+            free(value);
+            ZIPERR(ZE_PARMS, "Option -Z (--compression-method):  unknown method");
+          }
+          free(value);
+          break;
+#if defined(MSDOS) || defined(OS2)
+        case '$':   /* Include volume label */
+          volume_label = 1; break;
+#endif
+#ifndef MACOS
+        case '@':   /* read file names from stdin */
+          comment_stream = NULL;
+          s = 1;          /* defer -@ until have zipfile name */
+          break;
+#endif /* !MACOS */
+        case 'X':
+          if (negated)
+            extra_fields = 2;
+          else
+            extra_fields = 0;
+          break;
+#ifdef OS2
+        case 'E':
+          /* use the .LONGNAME EA (if any) as the file's name. */
+          use_longname_ea = 1;
+          break;
+#endif
+#ifdef NTSD_EAS
+        case '!':
+          /* use security privilege overrides */
+          use_privileges = 1;
+          break;
+#endif
+#ifdef RISCOS
+        case '/':
+          exts2swap = value; /* override Zip$Exts */
+          break;
+#endif
+        case o_des:
+          use_descriptors = 1;
+          break;
+
+#ifdef ZIP64_SUPPORT
+        case o_z64:   /* Force creation of Zip64 entries */
+          if (negated) {
+            force_zip64 = 0;
+          } else {
+            force_zip64 = 1;
+          }
+          break;
+#endif
+
+        case o_NON_OPTION_ARG:
+          /* not an option */
+          /* no more options as permuting */
+          /* just dash also ends up here */
+
+          if (recurse != 2 && kk == 0 && patterns == NULL) {
+            /* have all filters so convert filterlist to patterns array
+               as PROCNAME needs patterns array */
+            filterlist_to_patterns();
+          }
+
+          /* "--" stops arg processing for remaining args */
+          /* ignore only first -- */
+          if (strcmp(value, "--") == 0 && seen_doubledash == 0) {
+            /* -- */
+            seen_doubledash = 1;
+            if (kk == 0) {
+              ZIPERR(ZE_PARMS, "can't use -- before archive name");
+            }
+
+            /* just ignore as just marks what follows as non-option arguments */
+
+          } else if (kk == 6) {
+            /* value is R pattern */
+            add_filter((int)'R', value);
+            free(value);
+            if (first_listarg == 0) {
+              first_listarg = argnum;
+            }
+          } else switch (kk)
+          {
+            case 0:
+              /* first non-option arg is zipfile name */
+#if (!defined(MACOS) && !defined(WINDLL))
+              if (strcmp(value, "-") == 0) {  /* output zipfile is dash */
+                /* just a dash */
+                zipstdout();
+              } else
+#endif /* !MACOS && !WINDLL */
+              {
+                /* name of zipfile */
+                if ((zipfile = ziptyp(value)) == NULL) {
+                  ZIPERR(ZE_MEM, "was processing arguments");
+                }
+                /* read zipfile if exists */
+                /*
+                if ((r = readzipfile()) != ZE_OK) {
+                  ZIPERR(r, zipfile);
+                }
+                */
+                free(value);
+              }
+              if (show_what_doing) {
+                fprintf(mesg, "sd: Zipfile name '%s'\n", zipfile);
+                fflush(mesg);
+              }
+              /* if in_path not set, use zipfile path as usual for input */
+              /* in_path is used as the base path to find splits */
+              if (in_path == NULL) {
+                if ((in_path = malloc(strlen(zipfile) + 1)) == NULL) {
+                  ZIPERR(ZE_MEM, "was processing arguments");
+                }
+                strcpy(in_path, zipfile);
+              }
+              /* if out_path not set, use zipfile path as usual for output */
+              /* out_path is where the output archive is written */
+              if (out_path == NULL) {
+                if ((out_path = malloc(strlen(zipfile) + 1)) == NULL) {
+                  ZIPERR(ZE_MEM, "was processing arguments");
+                }
+                strcpy(out_path, zipfile);
+              }
+              kk = 3;
+              if (s)
+              {
+                /* do -@ and get names from stdin */
+                /* should be able to read names from
+                   stdin and output to stdout, but
+                   this was not allowed in old code.
+                   This check moved to kk = 3 case to fix. */
+                /* if (strcmp(zipfile, "-") == 0) {
+                  ZIPERR(ZE_PARMS, "can't use - and -@ together");
+                }
+                */
+                while ((pp = getnam(stdin)) != NULL)
+                {
+                  kk = 4;
+                  if (recurse == 2) {
+                    /* reading patterns from stdin */
+                    add_filter((int)'R', pp);
+                  } else {
+                    /* file argument now processed later */
+                    add_name(pp);
+                  }
+                  /*
+                  if ((r = PROCNAME(pp)) != ZE_OK) {
+                    if (r == ZE_MISS)
+                      zipwarn("name not matched: ", pp);
+                    else {
+                      ZIPERR(r, pp);
+                    }
+                  }
+                  */
+                  free(pp);
+                }
+                s = 0;
+              }
+              if (recurse == 2) {
+                /* rest are -R patterns */
+                kk = 6;
+              }
+              break;
+
+            case 3:  case 4:
+              /* no recurse and -r file names */
+              /* can't read filenames -@ and input - from stdin at
+                 same time */
+              if (s == 1 && strcmp(value, "-") == 0) {
+                ZIPERR(ZE_PARMS, "can't read input (-) and filenames (-@) both from stdin");
+              }
+              /* add name to list for later processing */
+              add_name(value);
+              /*
+              if ((r = PROCNAME(value)) != ZE_OK) {
+                if (r == ZE_MISS)
+                  zipwarn("name not matched: ", value);
+                else {
+                  ZIPERR(r, value);
+                }
+              }
+              */
+              if (kk == 3) {
+                first_listarg = argnum;
+                kk = 4;
+              }
+              break;
+
+            } /* switch kk */
+            break;
+
+        default:
+          /* should never get here as get_option will exit if not in table */
+          sprintf(errbuf, "no such option ID: %ld", option);
+          ZIPERR(ZE_PARMS, errbuf);
+
+     }  /* switch */
+  }
+
+
+  /* do processing of command line and one-time tasks */
+
+  /* Key not yet specified.  If needed, get/verify it now. */
+  if (key_needed) {
+    if ((key = malloc(IZ_PWLEN+1)) == NULL) {
+      ZIPERR(ZE_MEM, "was getting encryption password");
+    }
+    r = encr_passwd(ZP_PW_ENTER, key, IZ_PWLEN+1, zipfile);
+    if (r != IZ_PW_ENTERED) {
+      if (r < IZ_PW_ENTERED)
+        r = ZE_PARMS;
+      ZIPERR(r, "was getting encryption password");
+    }
+    if (*key == '\0') {
+      ZIPERR(ZE_PARMS, "zero length password not allowed");
+    }
+    if ((e = malloc(IZ_PWLEN+1)) == NULL) {
+      ZIPERR(ZE_MEM, "was verifying encryption password");
+    }
+    r = encr_passwd(ZP_PW_VERIFY, e, IZ_PWLEN+1, zipfile);
+    if (r != IZ_PW_ENTERED && r != IZ_PW_SKIPVERIFY) {
+      free((zvoid *)e);
+      if (r < ZE_OK) r = ZE_PARMS;
+      ZIPERR(r, "was verifying encryption password");
+    }
+    r = ((r == IZ_PW_SKIPVERIFY) ? 0 : strcmp(key, e));
+    free((zvoid *)e);
+    if (r) {
+      ZIPERR(ZE_PARMS, "password verification failed");
+    }
+  }
+  if (key) {
+    /* if -P "" could get here */
+    if (*key == '\0') {
+      ZIPERR(ZE_PARMS, "zero length password not allowed");
+    }
+  }
+
+  if (show_what_doing) {
+    fprintf(mesg, "sd: Command line read\n");
+    fflush(mesg);
+  }
+
+  /* show command line args */
+  if (show_args) {
+    fprintf(mesg, "command line:\n");
+    for (i = 0; args[i]; i++) {
+      fprintf(mesg, "'%s'  ", args[i]);
+    }
+    fprintf(mesg, "\n");
+    ZIPERR(ZE_ABORT, "show command line");
+  }
+
+  /* show all options */
+  if (show_options) {
+    printf("available options:\n");
+    printf(" %-2s  %-18s %-4s %-3s %-30s\n", "sh", "long", "val", "neg", "description");
+    printf(" %-2s  %-18s %-4s %-3s %-30s\n", "--", "----", "---", "---", "-----------");
+    for (i = 0; options[i].option_ID; i++) {
+      printf(" %-2s  %-18s ", options[i].shortopt, options[i].longopt);
+      switch (options[i].value_type) {
+        case o_NO_VALUE:
+          printf("%-4s ", "");
+          break;
+        case o_REQUIRED_VALUE:
+          printf("%-4s ", "req");
+          break;
+        case o_OPTIONAL_VALUE:
+          printf("%-4s ", "opt");
+          break;
+        case o_VALUE_LIST:
+          printf("%-4s ", "list");
+          break;
+        case o_ONE_CHAR_VALUE:
+          printf("%-4s ", "char");
+          break;
+        case o_NUMBER_VALUE:
+          printf("%-4s ", "num");
+          break;
+        default:
+          printf("%-4s ", "unk");
+      }
+      switch (options[i].negatable) {
+        case o_NEGATABLE:
+          printf("%-3s ", "neg");
+          break;
+        case o_NOT_NEGATABLE:
+          printf("%-3s ", "");
+          break;
+        default:
+          printf("%-3s ", "unk");
+      }
+      if (options[i].name)
+        printf("%-30s\n", options[i].name);
+      else
+        printf("\n");
+    }
+    RETURN(finish(ZE_OK));
+  }
+
+
+  /* open log file */
+  if (logfile_path) {
+    char mode[10];
+    char *p;
+    char *lastp;
+
+    /* if no extension add .log */
+    p = logfile_path;
+    /* find last / */
+    lastp = NULL;
+    for (p = logfile_path; (p = MBSRCHR(p, '/')) != NULL; p++) {
+      lastp = p;
+    }
+    if (lastp == NULL)
+      lastp = logfile_path;
+    if (MBSRCHR(lastp, '.') == NULL) {
+      /* add .log */
+      if ((p = malloc(strlen(logfile_path) + 5)) == NULL) {
+        ZIPERR(ZE_MEM, "logpath");
+      }
+      strcpy(p, logfile_path);
+      strcat(p, ".log");
+      free(logfile_path);
+      logfile_path = p;
+    }
+
+    if (logfile_append) {
+      sprintf(mode, "a");
+    } else {
+      sprintf(mode, "w");
+    }
+    if ((logfile = zfopen(logfile_path, mode)) == NULL) {
+      sprintf(errbuf, "could not open logfile '%s'", logfile_path);
+      ZIPERR(ZE_PARMS, errbuf);
+    }
+    {
+      /* At top put start time and command line */
+
+      /* get current time */
+      struct tm *now;
+      time_t clocktime;
+
+      time(&clocktime);
+      now = localtime(&clocktime);
+
+      fprintf(logfile, "---------\n");
+      fprintf(logfile, "Zip log opened %s", asctime(now));
+      fprintf(logfile, "command line arguments:\n ");
+      for (i = 1; args[i]; i++) {
+        size_t j;
+        int has_space = 0;
+
+        for (j = 0; j < strlen(args[i]); j++) {
+          if (isspace(args[i][j])) {
+            has_space = 1;
+            break;
+          }
+        }
+        if (has_space)
+          fprintf(logfile, "\"%s\" ", args[i]);
+        else
+          fprintf(logfile, "%s ", args[i]);
+      }
+      fprintf(logfile, "\n\n");
+      fflush(logfile);
+    }
+  } else {
+    /* only set logall if logfile open */
+    logall = 0;
+  }
+
+
+  if (split_method && out_path) {
+    /* if splitting, the archive name must have .zip extension */
+    int plen = strlen(out_path);
+    char *out_path_ext;
+
+#ifdef VMS
+    /* On VMS, adjust plen (and out_path_ext) to avoid the file version. */
+    plen -= strlen( vms_file_version( out_path));
+#endif /* def VMS */
+    out_path_ext = out_path+ plen- 4;
+
+    if (plen < 4 ||
+        out_path_ext[0] != '.' ||
+        toupper(out_path_ext[1]) != 'Z' ||
+        toupper(out_path_ext[2]) != 'I' ||
+        toupper(out_path_ext[3]) != 'P') {
+      ZIPERR(ZE_PARMS, "archive name must end in .zip for splits");
+    }
+  }
+
+
+  if (verbose && (dot_size == 0) && (dot_count == 0)) {
+    /* now default to default 10 MB dot size */
+    dot_size = 10 * 0x100000;
+    /* show all dots as before if verbose set and dot_size not set (dot_count = 0) */
+    /* maybe should turn off dots in default verbose mode */
+    /* dot_size = -1; */
+  }
+
+  /* done getting -R filters so convert filterlist if not done */
+  if (pcount && patterns == NULL) {
+    filterlist_to_patterns();
+  }
+
+#if (defined(MSDOS) || defined(OS2)) && !defined(WIN32)
+  if ((kk == 3 || kk == 4) && volume_label == 1) {
+    /* read volume label */
+    PROCNAME(NULL);
+    kk = 4;
+  }
+#endif
+
+  if (have_out && kk == 3) {
+    copy_only = 1;
+    action = ARCHIVE;
+  }
+
+  if (have_out && namecmp(in_path, out_path) == 0) {
+    sprintf(errbuf, "--out path must be different than in path: %s", out_path);
+    ZIPERR(ZE_PARMS, errbuf);
+  }
+
+  if (fix && diff_mode) {
+    ZIPERR(ZE_PARMS, "can't use --diff (-DF) with fix (-F or -FF)");
+  }
+
+  if (action == ARCHIVE && !have_out && !show_files) {
+    ZIPERR(ZE_PARMS, "-U (--copy) requires -O (--out)");
+  }
+
+  if (fix && !have_out) {
+    zipwarn("fix options -F and -FF require --out:\n",
+            "                     zip -F indamagedarchive --out outfixedarchive");
+    ZIPERR(ZE_PARMS, "fix options require --out");
+  }
+
+  if (fix && !copy_only) {
+    ZIPERR(ZE_PARMS, "no other actions allowed when fixing archive (-F or -FF)");
+  }
+
+  if (!have_out && diff_mode) {
+    ZIPERR(ZE_PARMS, "-DF (--diff) requires -O (--out)");
+  }
+
+  if (diff_mode && (action == ARCHIVE || action == DELETE)) {
+    ZIPERR(ZE_PARMS, "can't use --diff (-DF) with -d or -U");
+  }
+
+  if (action != ARCHIVE && (recurse == 2 || pcount) && first_listarg == 0 &&
+      !filelist && (kk < 3 || (action != UPDATE && action != FRESHEN))) {
+    ZIPERR(ZE_PARMS, "nothing to select from");
+  }
+
+/*
+  -------------------------------------
+  end of new command line code
+  -------------------------------------
+*/
+
+#if (!defined(MACOS) && !defined(WINDLL))
+  if (kk < 3) {               /* zip used as filter */
+    zipstdout();
+    comment_stream = NULL;
+    if ((r = procname("-", 0)) != ZE_OK) {
+      if (r == ZE_MISS) {
+        if (bad_open_is_error) {
+          zipwarn("name not matched: ", "-");
+          ZIPERR(ZE_OPEN, "-");
+        } else {
+          zipwarn("name not matched: ", "-");
+        }
+      } else {
+        ZIPERR(r, "-");
+      }
+    }
+    kk = 4;
+    if (s) {
+      ZIPERR(ZE_PARMS, "can't use - and -@ together");
+    }
+  }
+#endif /* !MACOS && !WINDLL */
+
+  if (zipfile && !strcmp(zipfile, "-")) {
+    if (show_what_doing) {
+      fprintf(mesg, "sd: Zipping to stdout\n");
+      fflush(mesg);
+    }
+    zip_to_stdout = 1;
+  }
+
+  /* Check option combinations */
+  if (special == NULL) {
+    ZIPERR(ZE_PARMS, "missing suffix list");
+  }
+  if (level == 9 || !strcmp(special, ";") || !strcmp(special, ":"))
+    special = NULL; /* compress everything */
+
+  if (action == DELETE && (method != BEST || dispose || recurse ||
+      key != NULL || comadd || zipedit)) {
+    zipwarn("invalid option(s) used with -d; ignored.","");
+    /* reset flags - needed? */
+    method  = BEST;
+    dispose = 0;
+    recurse = 0;
+    if (key != NULL) {
+      free((zvoid *)key);
+      key   = NULL;
+    }
+    comadd  = 0;
+    zipedit = 0;
+  }
+  if (action == ARCHIVE && (method != BEST || dispose || recurse ||
+      comadd || zipedit)) {
+    zipwarn("can't set method, move, recurse, or comments with copy mode.","");
+    /* reset flags - needed? */
+    method  = BEST;
+    dispose = 0;
+    recurse = 0;
+    comadd  = 0;
+    zipedit = 0;
+  }
+  if (linkput && dosify)
+    {
+      zipwarn("can't use -y with -k, -y ignored", "");
+      linkput = 0;
+    }
+  if (fix == 1 && adjust)
+    {
+      zipwarn("can't use -F with -A, -F ignored", "");
+      fix = 0;
+    }
+  if (fix == 2 && adjust)
+    {
+      zipwarn("can't use -FF with -A, -FF ignored", "");
+      fix = 0;
+    }
+  if (test && zip_to_stdout) {
+    test = 0;
+    zipwarn("can't use -T on stdout, -T ignored", "");
+  }
+  if (split_method && (fix || adjust)) {
+    ZIPERR(ZE_PARMS, "can't create split archive while fixing or adjusting\n");
+  }
+  if (split_method && (d || zip_to_stdout)) {
+    ZIPERR(ZE_PARMS, "can't create split archive with -d or -g or on stdout\n");
+  }
+  if ((action != ADD || d) && filesync) {
+    ZIPERR(ZE_PARMS, "can't use -d, -f, -u, -U, or -g with filesync -FS\n");
+  }
+  if ((action != ADD || d) && zip_to_stdout) {
+    ZIPERR(ZE_PARMS, "can't use -d, -f, -u, -U, or -g on stdout\n");
+  }
+#if defined(EBCDIC)  && !defined(OS390)
+  if (aflag==ASCII && !translate_eol) {
+    /* Translation to ASCII implies EOL translation!
+     * (on OS390, consistent EOL translation is controlled separately)
+     * The default translation mode is "UNIX" mode (single LF terminators).
+     */
+    translate_eol = 2;
+  }
+#endif
+#ifdef CMS_MVS
+  if (aflag==ASCII && bflag)
+    ZIPERR(ZE_PARMS, "can't use -a with -B");
+#endif
+#ifdef VMS
+  if (!extra_fields && vms_native)
+    {
+      zipwarn("can't use -V with -X, -V ignored", "");
+      vms_native = 0;
+    }
+  if (vms_native && translate_eol)
+    ZIPERR(ZE_PARMS, "can't use -V with -l or -ll");
+#endif
+
+  if (noisy) {
+    if (fix == 1)
+      zipmessage("Fix archive (-F) - assume mostly intact archive", "");
+    else if (fix == 2)
+      zipmessage("Fix archive (-FF) - salvage what can", "");
+  }
+
+  /* Read old archive */
+
+  /* Now read the zip file here instead of when doing args above */
+  /* Only read the central directory and build zlist */
+  if (show_what_doing) {
+    fprintf(mesg, "sd: Reading archive\n");
+    fflush(mesg);
+  }
+
+
+
+
+  /* If -FF we do it all here */
+  if (fix == 2) {
+
+    /* Open zip file and temporary output file */
+    if (show_what_doing) {
+      fprintf(mesg, "sd: Open zip file and create temp file (-FF)\n");
+      fflush(mesg);
+    }
+    diag("opening zip file and creating temporary zip file");
+    x = NULL;
+    tempzn = 0;
+    if (show_what_doing) {
+      fprintf(mesg, "sd: Creating new zip file (-FF)\n");
+      fflush(mesg);
+    }
+#if defined(UNIX) && !defined(NO_MKSTEMP)
+    {
+      int yd;
+      int i;
+
+      /* use mkstemp to avoid race condition and compiler warning */
+
+      if (tempath != NULL)
+      {
+        /* if -b used to set temp file dir use that for split temp */
+        if ((tempzip = malloc(strlen(tempath) + 12)) == NULL) {
+          ZIPERR(ZE_MEM, "allocating temp filename");
+        }
+        strcpy(tempzip, tempath);
+        if (lastchar(tempzip) != '/')
+          strcat(tempzip, "/");
+      }
+      else
+      {
+        /* create path by stripping name and appending template */
+        if ((tempzip = malloc(strlen(zipfile) + 12)) == NULL) {
+        ZIPERR(ZE_MEM, "allocating temp filename");
+        }
+        strcpy(tempzip, zipfile);
+        for(i = strlen(tempzip); i > 0; i--) {
+          if (tempzip[i - 1] == '/')
+            break;
+        }
+        tempzip[i] = '\0';
+      }
+      strcat(tempzip, "ziXXXXXX");
+
+      if ((yd = mkstemp(tempzip)) == EOF) {
+        ZIPERR(ZE_TEMP, tempzip);
+      }
+      if ((y = fdopen(yd, FOPW_TMP)) == NULL) {
+        ZIPERR(ZE_TEMP, tempzip);
+      }
+    }
+#else
+    if ((tempzip = tempname(zipfile)) == NULL) {
+      ZIPERR(ZE_MEM, "allocating temp filename");
+    }
+    if ((y = zfopen(tempzip, FOPW_TMP)) == NULL) {
+      ZIPERR(ZE_TEMP, tempzip);
+    }
+#endif
+
+#if (!defined(VMS) && !defined(CMS_MVS))
+    /* Use large buffer to speed up stdio: */
+#if (defined(_IOFBF) || !defined(BUFSIZ))
+    zipbuf = (char *)malloc(ZBSZ);
+#else
+    zipbuf = (char *)malloc(BUFSIZ);
+#endif
+    if (zipbuf == NULL) {
+      ZIPERR(ZE_MEM, tempzip);
+    }
+# ifdef _IOFBF
+    setvbuf(y, zipbuf, _IOFBF, ZBSZ);
+# else
+    setbuf(y, zipbuf);
+# endif /* _IOBUF */
+#endif /* !VMS  && !CMS_MVS */
+
+
+    if ((r = readzipfile()) != ZE_OK) {
+      ZIPERR(r, zipfile);
+    }
+
+    /* Write central directory and end header to temporary zip */
+    if (show_what_doing) {
+      fprintf(mesg, "sd: Writing central directory (-FF)\n");
+      fflush(mesg);
+    }
+    diag("writing central directory");
+    k = 0;                        /* keep count for end header */
+    c = tempzn;                   /* get start of central */
+    n = t = 0;
+    for (z = zfiles; z != NULL; z = z->nxt)
+    {
+      if ((r = putcentral(z)) != ZE_OK) {
+        ZIPERR(r, tempzip);
+      }
+      tempzn += 4 + CENHEAD + z->nam + z->cext + z->com;
+      n += z->len;
+      t += z->siz;
+      k++;
+    }
+    if (zcount == 0)
+      zipwarn("zip file empty", "");
+    t = tempzn - c;               /* compute length of central */
+    diag("writing end of central directory");
+    if ((r = putend(k, t, c, zcomlen, zcomment)) != ZE_OK) {
+      ZIPERR(r, tempzip);
+    }
+    if (fclose(y)) {
+      ZIPERR(d ? ZE_WRITE : ZE_TEMP, tempzip);
+    }
+    if (in_file != NULL) {
+      fclose(in_file);
+      in_file = NULL;
+    }
+
+    /* Replace old zip file with new zip file, leaving only the new one */
+    if (strcmp(zipfile, "-") && !d)
+    {
+      diag("replacing old zip file with new zip file");
+      if ((r = replace(out_path, tempzip)) != ZE_OK)
+      {
+        zipwarn("new zip file left as: ", tempzip);
+        free((zvoid *)tempzip);
+        tempzip = NULL;
+        ZIPERR(r, "was replacing the original zip file");
+      }
+      free((zvoid *)tempzip);
+    }
+    tempzip = NULL;
+    if (zip_attributes && strcmp(zipfile, "-")) {
+      setfileattr(out_path, zip_attributes);
+#ifdef VMS
+      /* If the zip file existed previously, restore its record format: */
+      if (x != NULL)
+        (void)VMSmunch(out_path, RESTORE_RTYPE, NULL);
+#endif
+    }
+
+    set_filetype(out_path);
+
+    /* finish logfile (it gets closed in freeup() called by finish()) */
+    if (logfile) {
+        struct tm *now;
+        time_t clocktime;
+
+        fprintf(logfile, "\nTotal %ld entries (", files_total);
+        DisplayNumString(logfile, bytes_total);
+        fprintf(logfile, " bytes)");
+
+        /* get current time */
+        time(&clocktime);
+        now = localtime(&clocktime);
+        fprintf(logfile, "\nDone %s", asctime(now));
+        fflush(logfile);
+    }
+
+    RETURN(finish(ZE_OK));
+  }
+
+
+
+  /* read zipfile if exists */
+  if ((r = readzipfile()) != ZE_OK) {
+    ZIPERR(r, zipfile);
+  }
+
+#ifndef UTIL
+  if (split_method == -1) {
+    split_method = 0;
+  } else if (!fix && split_method == 0 && total_disks > 1) {
+    /* if input archive is multi-disk and splitting has not been
+       enabled or disabled (split_method == -1), then automatically
+       set split size to same as first input split */
+    zoff_t size = 0;
+
+    in_split_path = get_in_split_path(in_path, 0);
+
+    if (filetime(in_split_path, NULL, &size, NULL) == 0) {
+      zipwarn("Could not get info for input split: ", in_split_path);
+      return ZE_OPEN;
+    }
+    split_method = 1;
+    split_size = (uzoff_t) size;
+
+    free(in_split_path);
+    in_split_path = NULL;
+  }
+
+  if (noisy_splits && split_size > 0)
+    zipmessage("splitsize = ", zip_fuzofft(split_size, NULL, NULL));
+#endif
+
+  /* so disk display starts at 1, will be updated when entries are read */
+  current_in_disk = 0;
+
+  /* no input zipfile and showing contents */
+  if (!zipfile_exists && show_files && (kk == 3 || action == ARCHIVE)) {
+    ZIPERR(ZE_OPEN, zipfile);
+  }
+
+  if (zcount == 0 && (action != ADD || d)) {
+    zipwarn(zipfile, " not found or empty");
+  }
+
+  if (have_out && kk == 3) {
+    /* no input paths so assume copy mode and match everything if --out */
+    for (z = zfiles; z != NULL; z = z->nxt) {
+      z->mark = pcount ? filter(z->zname, filter_match_case) : 1;
+    }
+  }
+
+  /* Scan for new files */
+
+  /* Process file arguments from command line */
+  if (filelist) {
+    if (action == ARCHIVE) {
+      /* find in archive */
+      if (show_what_doing) {
+        fprintf(mesg, "sd: Scanning archive entries\n");
+        fflush(mesg);
+      }
+      for (; filelist; ) {
+        if ((r = proc_archive_name(filelist->name, filter_match_case)) != ZE_OK) {
+          if (r == ZE_MISS) {
+            char *n = NULL;
+#ifdef WIN32
+            /* Win9x console always uses OEM character coding, and
+               WinNT console is set to OEM charset by default, too */
+            if ((n = malloc(strlen(filelist->name) + 1)) == NULL)
+              ZIPERR(ZE_MEM, "name not matched error");
+            INTERN_TO_OEM(filelist->name, n);
+#else
+            n = filelist->name;
+#endif
+            zipwarn("not in archive: ", n);
+#ifdef WIN32
+            free(n);
+#endif
+          }
+          else {
+            ZIPERR(r, filelist->name);
+          }
+        }
+        free(filelist->name);
+        filearg = filelist;
+        filelist = filelist->next;
+        free(filearg);
+      }
+    } else {
+      /* try find matching files on OS first then try find entries in archive */
+      if (show_what_doing) {
+        fprintf(mesg, "sd: Scanning files\n");
+        fflush(mesg);
+      }
+      for (; filelist; ) {
+        if ((r = PROCNAME(filelist->name)) != ZE_OK) {
+          if (r == ZE_MISS) {
+            if (bad_open_is_error) {
+              zipwarn("name not matched: ", filelist->name);
+              ZIPERR(ZE_OPEN, filelist->name);
+            } else {
+              zipwarn("name not matched: ", filelist->name);
+            }
+          } else {
+            ZIPERR(r, filelist->name);
+          }
+        }
+        free(filelist->name);
+        filearg = filelist;
+        filelist = filelist->next;
+        free(filearg);
+      }
+    }
+  }
+
+  /* recurse from current directory for -R */
+  if (recurse == 2) {
+#ifdef AMIGA
+    if ((r = PROCNAME("")) != ZE_OK)
+#else
+    if ((r = PROCNAME(".")) != ZE_OK)
+#endif
+    {
+      if (r == ZE_MISS) {
+        if (bad_open_is_error) {
+          zipwarn("name not matched: ", "current directory for -R");
+          ZIPERR(ZE_OPEN, "-R");
+        } else {
+          zipwarn("name not matched: ", "current directory for -R");
+        }
+      } else {
+        ZIPERR(r, "-R");
+      }
+    }
+  }
+
+
+  if (show_what_doing) {
+    fprintf(mesg, "sd: Applying filters\n");
+    fflush(mesg);
+  }
+  /* Clean up selections ("3 <= kk <= 5" now) */
+  if (kk != 4 && first_listarg == 0 &&
+      (action == UPDATE || action == FRESHEN)) {
+    /* if -u or -f with no args, do all, but, when present, apply filters */
+    for (z = zfiles; z != NULL; z = z->nxt) {
+      z->mark = pcount ? filter(z->zname, filter_match_case) : 1;
+#ifdef DOS
+      if (z->mark) z->dosflag = 1;      /* force DOS attribs for incl. names */
+#endif
+    }
+  }
+  if (show_what_doing) {
+    fprintf(mesg, "sd: Checking dups\n");
+    fflush(mesg);
+  }
+  if ((r = check_dup()) != ZE_OK) {     /* remove duplicates in found list */
+    if (r == ZE_PARMS) {
+      ZIPERR(r, "cannot repeat names in zip file");
+    }
+    else {
+      ZIPERR(r, "was processing list of files");
+    }
+  }
+
+  if (zcount)
+    free((zvoid *)zsort);
+
+
+/*
+ * XXX make some kind of mktemppath() function for each OS.
+ */
+
+#ifndef VM_CMS
+/* For CMS, leave tempath NULL.  A-disk will be used as default. */
+  /* If -b not specified, make temporary path the same as the zip file */
+#if defined(MSDOS) || defined(__human68k__) || defined(AMIGA)
+  if (tempath == NULL && ((p = MBSRCHR(zipfile, '/')) != NULL ||
+#  ifdef MSDOS
+                          (p = MBSRCHR(zipfile, '\\')) != NULL ||
+#  endif /* MSDOS */
+                          (p = MBSRCHR(zipfile, ':')) != NULL))
+  {
+    if (*p == ':')
+      p++;
+#else
+#ifdef RISCOS
+  if (tempath == NULL && (p = MBSRCHR(zipfile, '.')) != NULL)
+  {
+#else
+#ifdef QDOS
+  if (tempath == NULL && (p = LastDir(zipfile)) != NULL)
+  {
+#else
+  if (tempath == NULL && (p = MBSRCHR(zipfile, '/')) != NULL)
+  {
+#endif /* QDOS */
+#endif /* RISCOS */
+#endif /* MSDOS || __human68k__ || AMIGA */
+    if ((tempath = (char *)malloc((int)(p - zipfile) + 1)) == NULL) {
+      ZIPERR(ZE_MEM, "was processing arguments");
+    }
+    r = *p;  *p = 0;
+    strcpy(tempath, zipfile);
+    *p = (char)r;
+  }
+#endif /* VM_CMS */
+
+#if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME))
+  if (!zp_tz_is_valid) {
+    zipwarn("TZ environment variable not found, cannot use UTC times!!","");
+  }
+#endif /* IZ_CHECK_TZ && USE_EF_UT_TIME */
+
+  /* For each marked entry, if not deleting, check if it exists, and if
+     updating or freshening, compare date with entry in old zip file.
+     Unmark if it doesn't exist or is too old, else update marked count. */
+  if (show_what_doing) {
+    fprintf(mesg, "sd: Scanning files to update\n");
+    fflush(mesg);
+  }
+#ifdef MACOS
+  PrintStatProgress("Getting file information ...");
+#endif
+  diag("stating marked entries");
+  k = 0;                        /* Initialize marked count */
+  scan_started = 0;
+  scan_count = 0;
+  all_current = 1;
+  for (z = zfiles; z != NULL; z = z->nxt) {
+    /* if already displayed Scanning files in newname() then continue dots */
+    if (noisy && scan_last) {
+      scan_count++;
+      if (scan_count % 100 == 0) {
+        time_t current = time(NULL);
+
+        if (current - scan_last > scan_dot_time) {
+          if (scan_started == 0) {
+            scan_started = 1;
+            fprintf(mesg, " ");
+            fflush(mesg);
+          }
+          scan_last = current;
+          fprintf(mesg, ".");
+          fflush(mesg);
+        }
+      }
+    }
+    z->current = 0;
+    if (!(z->mark)) {
+      /* if something excluded run through the list to catch deletions */
+      all_current = 0;
+    }
+    if (z->mark) {
+#ifdef USE_EF_UT_TIME
+      iztimes f_utim, z_utim;
+      ulg z_tim;
+#endif /* USE_EF_UT_TIME */
+      Trace((stderr, "zip diagnostics: marked file=%s\n", z->oname));
+
+      csize = z->siz;
+      usize = z->len;
+      if (action == DELETE) {
+        /* only delete files in date range */
+#ifdef USE_EF_UT_TIME
+        z_tim = (get_ef_ut_ztime(z, &z_utim) & EB_UT_FL_MTIME) ?
+                unix2dostime(&z_utim.mtime) : z->tim;
+#else /* !USE_EF_UT_TIME */
+#       define z_tim  z->tim
+#endif /* ?USE_EF_UT_TIME */
+        if (z_tim < before || (after && z_tim >= after)) {
+          /* include in archive */
+          z->mark = 0;
+        } else {
+          /* delete file */
+          files_total++;
+          /* ignore len in old archive and update to current size */
+          z->len = usize;
+          if (csize != (uzoff_t) -1 && csize != (uzoff_t) -2)
+            bytes_total += csize;
+          k++;
+        }
+      } else if (action == ARCHIVE) {
+        /* only keep files in date range */
+#ifdef USE_EF_UT_TIME
+        z_tim = (get_ef_ut_ztime(z, &z_utim) & EB_UT_FL_MTIME) ?
+                unix2dostime(&z_utim.mtime) : z->tim;
+#else /* !USE_EF_UT_TIME */
+#       define z_tim  z->tim
+#endif /* ?USE_EF_UT_TIME */
+        if (z_tim < before || (after && z_tim >= after)) {
+          /* exclude from archive */
+          z->mark = 0;
+        } else {
+          /* keep file */
+          files_total++;
+          /* ignore len in old archive and update to current size */
+          z->len = usize;
+          if (csize != (uzoff_t) -1 && csize != (uzoff_t) -2)
+            bytes_total += csize;
+          k++;
+        }
+      } else {
+        int isdirname = 0;
+
+        if (z->name && (z->name)[strlen(z->name) - 1] == '/') {
+          isdirname = 1;
+        }
+
+# if defined(UNICODE_SUPPORT) && defined(WIN32)
+        if (!no_win32_wide) {
+          if (z->namew == NULL) {
+            if (z->uname != NULL)
+              z->namew = utf8_to_wchar_string(z->uname);
+            else
+              z->namew = local_to_wchar_string(z->name);
+          }
+        }
+# endif
+
+#ifdef USE_EF_UT_TIME
+# if defined(UNICODE_SUPPORT) && defined(WIN32)
+        if (!no_win32_wide)
+          tf = filetimew(z->namew, (ulg *)NULL, (zoff_t *)&usize, &f_utim);
+        else
+          tf = filetime(z->name, (ulg *)NULL, (zoff_t *)&usize, &f_utim);
+# else
+        tf = filetime(z->name, (ulg *)NULL, (zoff_t *)&usize, &f_utim);
+# endif
+#else /* !USE_EF_UT_TIME */
+# if defined(UNICODE_SUPPORT) && defined(WIN32)
+        if (!no_win32_wide)
+          tf = filetimew(z->namew, (ulg *)NULL, (zoff_t *)&usize, NULL);
+        else
+          tf = filetime(z->name, (ulg *)NULL, (zoff_t *)&usize, NULL);
+# else
+        tf = filetime(z->name, (ulg *)NULL, (zoff_t *)&usize, NULL);
+# endif
+#endif /* ?USE_EF_UT_TIME */
+        if (tf == 0)
+          /* entry that is not on OS */
+          all_current = 0;
+        if (tf == 0 ||
+            tf < before || (after && tf >= after) ||
+            ((action == UPDATE || action == FRESHEN) &&
+#ifdef USE_EF_UT_TIME
+             ((get_ef_ut_ztime(z, &z_utim) & EB_UT_FL_MTIME) ?
+              f_utim.mtime <= ROUNDED_TIME(z_utim.mtime) : tf <= z->tim)
+#else /* !USE_EF_UT_TIME */
+             tf <= z->tim
+#endif /* ?USE_EF_UT_TIME */
+           ))
+        {
+          z->mark = comadd ? 2 : 0;
+          z->trash = tf && tf >= before &&
+                     (after ==0 || tf < after);   /* delete if -um or -fm */
+          if (verbose)
+            fprintf(mesg, "zip diagnostic: %s %s\n", z->oname,
+                   z->trash ? "up to date" : "missing or early");
+          if (logfile)
+            fprintf(logfile, "zip diagnostic: %s %s\n", z->oname,
+                   z->trash ? "up to date" : "missing or early");
+        }
+        else if (diff_mode && tf == z->tim &&
+                 ((isdirname && (zoff_t)usize == -1) || (usize == z->len))) {
+          /* if in diff mode only include if file time or size changed */
+          /* usize is -1 for directories */
+          z->mark = 0;
+        }
+        else {
+          /* usize is -1 for directories and -2 for devices */
+          if (tf == z->tim &&
+              ((z->len == 0 && (zoff_t)usize == -1)
+               || usize == z->len)) {
+            /* FileSync uses the current flag */
+            /* Consider an entry current if file time is the same
+               and entry size is 0 and a directory on the OS
+               or the entry size matches the OS size */
+            z->current = 1;
+          } else {
+            all_current = 0;
+          }
+          files_total++;
+          if (usize != (uzoff_t) -1 && usize != (uzoff_t) -2)
+            /* ignore len in old archive and update to current size */
+            z->len = usize;
+          else
+            z->len = 0;
+          if (usize != (uzoff_t) -1 && usize != (uzoff_t) -2)
+            bytes_total += usize;
+          k++;
+        }
+      }
+    }
+  }
+
+  /* Remove entries from found list that do not exist or are too old */
+  if (show_what_doing) {
+    fprintf(mesg, "sd: fcount = %u\n", (unsigned)fcount);
+    fflush(mesg);
+  }
+
+  diag("stating new entries");
+  scan_count = 0;
+  scan_started = 0;
+  Trace((stderr, "zip diagnostic: fcount=%u\n", (unsigned)fcount));
+  for (f = found; f != NULL;) {
+    Trace((stderr, "zip diagnostic: new file=%s\n", f->oname));
+
+    if (noisy) {
+      /* if updating archive and update was quick, scanning for new files
+         can still take a long time */
+      if (!zip_to_stdout && scan_last == 0 && scan_count % 100 == 0) {
+        time_t current = time(NULL);
+
+        if (current - scan_start > scan_delay) {
+          fprintf(mesg, "Scanning files ");
+          fflush(mesg);
+          mesg_line_started = 1;
+          scan_last = current;
+        }
+      }
+      /* if already displayed Scanning files in newname() or above then continue dots */
+      if (scan_last) {
+        scan_count++;
+        if (scan_count % 100 == 0) {
+          time_t current = time(NULL);
+
+          if (current - scan_last > scan_dot_time) {
+            if (scan_started == 0) {
+              scan_started = 1;
+              fprintf(mesg, " ");
+              fflush(mesg);
+            }
+            scan_last = current;
+            fprintf(mesg, ".");
+            fflush(mesg);
+          }
+        }
+      }
+    }
+    tf = 0;
+    if (action != DELETE && action != FRESHEN) {
+#if defined(UNICODE_SUPPORT) && defined(WIN32)
+      if (!no_win32_wide)
+        tf = filetimew(f->namew, (ulg *)NULL, (zoff_t *)&usize, NULL);
+      else
+        tf = filetime(f->name, (ulg *)NULL, (zoff_t *)&usize, NULL);
+#else
+      tf = filetime(f->name, (ulg *)NULL, (zoff_t *)&usize, NULL);
+#endif
+    }
+
+    if (action == DELETE || action == FRESHEN ||
+        tf == 0 ||
+        tf < before || (after && tf >= after) ||
+        (namecmp(f->zname, zipfile) == 0 && !zip_to_stdout)
+       )
+      f = fexpel(f);
+    else {
+      /* ??? */
+      files_total++;
+      f->usize = 0;
+      if (usize != (uzoff_t) -1 && usize != (uzoff_t) -2) {
+        bytes_total += usize;
+        f->usize = usize;
+      }
+      f = f->nxt;
+    }
+  }
+  if (mesg_line_started) {
+    fprintf(mesg, "\n");
+    mesg_line_started = 0;
+  }
+#ifdef MACOS
+  PrintStatProgress("done");
+#endif
+
+  if (show_files) {
+    uzoff_t count = 0;
+    uzoff_t bytes = 0;
+
+    if (noisy) {
+      fflush(mesg);
+    }
+
+    if (noisy && (show_files == 1 || show_files == 3 || show_files == 5)) {
+      /* sf, su, sU */
+      if (mesg_line_started) {
+        fprintf(mesg, "\n");
+        mesg_line_started = 0;
+      }
+      if (kk == 3)
+        /* -sf alone */
+        fprintf(mesg, "Archive contains:\n");
+      else if (action == DELETE)
+        fprintf(mesg, "Would Delete:\n");
+      else if (action == FRESHEN)
+        fprintf(mesg, "Would Freshen:\n");
+      else if (action == ARCHIVE)
+        fprintf(mesg, "Would Copy:\n");
+      else
+        fprintf(mesg, "Would Add/Update:\n");
+      fflush(mesg);
+    }
+
+    if (logfile) {
+      if (logfile_line_started) {
+        fprintf(logfile, "\n");
+        logfile_line_started = 0;
+      }
+      if (kk == 3)
+        /* -sf alone */
+        fprintf(logfile, "Archive contains:\n");
+      else if (action == DELETE)
+        fprintf(logfile, "Would Delete:\n");
+      else if (action == FRESHEN)
+        fprintf(logfile, "Would Freshen:\n");
+      else if (action == ARCHIVE)
+        fprintf(logfile, "Would Copy:\n");
+      else
+        fprintf(logfile, "Would Add/Update:\n");
+      fflush(logfile);
+    }
+
+    for (z = zfiles; z != NULL; z = z->nxt) {
+      if (z->mark || kk == 3) {
+        count++;
+        if ((zoff_t)z->len > 0)
+          bytes += z->len;
+        if (noisy && (show_files == 1 || show_files == 3))
+          /* sf, su */
+          fprintf(mesg, "  %s\n", z->oname);
+        if (logfile && !(show_files == 5 || show_files == 6))
+          /* not sU or sU- show normal name in log */
+          fprintf(logfile, "  %s\n", z->oname);
+
+#ifdef UNICODE_TEST
+        if (create_files) {
+          int r;
+          int dir = 0;
+          FILE *f;
+
+#if defined(UNICODE_SUPPORT) && defined(WIN32)
+          char *fn = NULL;
+          wchar_t *fnw = NULL;
+
+          if (!no_win32_wide) {
+            if ((fnw = malloc((wcslen(z->znamew) + 120) * sizeof(wchar_t))) == NULL)
+              ZIPERR(ZE_MEM, "sC");
+            wcscpy(fnw, L"testdir/");
+            wcscat(fnw, z->znamew);
+            if (fnw[wcslen(fnw) - 1] == '/')
+              dir = 1;
+            if (dir)
+              r = _wmkdir(fnw);
+            else
+              f = _wfopen(fnw, L"w");
+          } else {
+            if ((fn = malloc(strlen(z->zname) + 120)) == NULL)
+              ZIPERR(ZE_MEM, "sC");
+            strcpy(fn, "testdir/");
+            strcat(fn, z->zname);
+            if (fn[strlen(fn) - 1] == '/')
+              dir = 1;
+            if (dir)
+              r = mkdir(fn);
+            else
+              f = fopen(fn, "w");
+          }
+#else
+          char *fn = NULL;
+          if ((fn = malloc(strlen(z->zname) + 120)) == NULL)
+            ZIPERR(ZE_MEM, "sC");
+          strcpy(fn, "testdir/");
+          if (z->uname)
+            strcat(fn, z->uname);
+          else
+            strcat(fn, z->zname);
+
+          if (fn[strlen(fn) - 1] == '/')
+            dir = 1;
+          if (dir)
+            r = mkdir(fn, 0777);
+          else
+            f = fopen(fn, "w");
+#endif
+          if (dir) {
+            if (r) {
+              if (errno != 17) {
+                printf(" - could not create directory testdir/%s\n", z->oname);
+                perror("    dir");
+              }
+            } else {
+              printf(" - created directory testdir/%s\n", z->oname);
+            }
+          } else {
+            if (f == NULL) {
+              printf(" - could not open testdir/%s\n", z->oname);
+              perror("    file");
+            } else {
+              fclose(f);
+              printf(" - created testdir/%s\n", z->oname);
+              if (z->uname)
+                printf("   u - created testdir/%s\n", z->uname);
+            }
+          }
+        }
+#endif
+#ifdef UNICODE_SUPPORT
+        if (show_files == 3 || show_files == 4) {
+          /* su, su- */
+          /* Include escaped Unicode name if exists under standard name */
+          if (z->ouname) {
+            if (noisy && show_files == 3)
+              fprintf(mesg, "     Escaped Unicode:  %s\n", z->ouname);
+            if (logfile)
+              fprintf(logfile, "     Escaped Unicode:  %s\n", z->ouname);
+          }
+        }
+        if (show_files == 5 || show_files == 6) {
+          /* sU, sU- */
+          /* Display only escaped Unicode name if exists or standard name */
+          if (z->ouname) {
+            /* Unicode name */
+            if (noisy && show_files == 5) {
+              fprintf(mesg, "  %s\n", z->ouname);
+            }
+            if (logfile) {
+              fprintf(logfile, "  %s\n", z->ouname);
+            }
+          } else {
+            /* No Unicode name so use standard name */
+            if (noisy && show_files == 5) {
+              fprintf(mesg, "  %s\n", z->oname);
+            }
+            if (logfile) {
+              fprintf(logfile, "  %s\n", z->oname);
+            }
+          }
+        }
+#endif
+      }
+    }
+    for (f = found; f != NULL; f = f->nxt) {
+      count++;
+      if ((zoff_t)f->usize > 0)
+        bytes += f->usize;
+#ifdef UNICODE_SUPPORT
+      if (unicode_escape_all) {
+        char *escaped_unicode;
+        escaped_unicode = local_to_escape_string(f->zname);
+        if (noisy && (show_files == 1 || show_files == 3 || show_files == 5))
+          /* sf, su, sU */
+          fprintf(mesg, "  %s\n", escaped_unicode);
+        if (logfile)
+          fprintf(logfile, "  %s\n", escaped_unicode);
+        free(escaped_unicode);
+      } else {
+#endif
+        if (noisy && (show_files == 1 || show_files == 3 || show_files == 5))
+          /* sf, su, sU */
+          fprintf(mesg, "  %s\n", f->oname);
+        if (logfile)
+          fprintf(logfile, "  %s\n", f->oname);
+#ifdef UNICODE_SUPPORT
+      }
+#endif
+    }
+    if (noisy || logfile == NULL)
+      fprintf(mesg, "Total %s entries (%s bytes)\n",
+                                          zip_fuzofft(count, NULL, NULL),
+                                          zip_fuzofft(bytes, NULL, NULL));
+    if (logfile)
+      fprintf(logfile, "Total %s entries (%s bytes)\n",
+                                          zip_fuzofft(count, NULL, NULL),
+                                          zip_fuzofft(bytes, NULL, NULL));
+    RETURN(finish(ZE_OK));
+  }
+
+  /* Make sure there's something left to do */
+  if (k == 0 && found == NULL && !diff_mode &&
+      !(zfiles == NULL && allow_empty_archive) &&
+      !(zfiles != NULL &&
+        (latest || fix || adjust || junk_sfx || comadd || zipedit))) {
+    if (test && (zfiles != NULL || zipbeg != 0)) {
+#ifndef WINDLL
+      check_zipfile(zipfile, argv[0]);
+#endif
+      RETURN(finish(ZE_OK));
+    }
+    if (action == UPDATE || action == FRESHEN) {
+      RETURN(finish(ZE_NONE));
+    }
+    else if (zfiles == NULL && (latest || fix || adjust || junk_sfx)) {
+      ZIPERR(ZE_NAME, zipfile);
+    }
+#ifndef WINDLL
+    else if (recurse && (pcount == 0) && (first_listarg > 0)) {
+#ifdef VMS
+      strcpy(errbuf, "try: zip \"");
+      for (i = 1; i < (first_listarg - 1); i++)
+        strcat(strcat(errbuf, args[i]), "\" ");
+      strcat(strcat(errbuf, args[i]), " *.* -i");
+#else /* !VMS */
+      strcpy(errbuf, "try: zip");
+      for (i = 1; i < first_listarg; i++)
+        strcat(strcat(errbuf, " "), args[i]);
+#  ifdef AMIGA
+      strcat(errbuf, " \"\" -i");
+#  else
+      strcat(errbuf, " . -i");
+#  endif
+#endif /* ?VMS */
+      for (i = first_listarg; i < argc; i++)
+        strcat(strcat(errbuf, " "), args[i]);
+      ZIPERR(ZE_NONE, errbuf);
+    }
+    else {
+      ZIPERR(ZE_NONE, zipfile);
+    }
+#endif /* !WINDLL */
+  }
+
+  if (filesync && all_current && fcount == 0) {
+    zipmessage("Archive is current", "");
+    RETURN(finish(ZE_OK));
+  }
+
+  d = (d && k == 0 && (zipbeg || zfiles != NULL)); /* d true if appending */
+
+#if CRYPT
+  /* Initialize the crc_32_tab pointer, when encryption was requested. */
+  if (key != NULL) {
+    crc_32_tab = get_crc_table();
+#ifdef EBCDIC
+    /* convert encryption key to ASCII (ISO variant for 8-bit ASCII chars) */
+    strtoasc(key, key);
+#endif /* EBCDIC */
+  }
+#endif /* CRYPT */
+
+  /* Just ignore the spanning signature if a multi-disk archive */
+  if (zfiles && total_disks != 1 && zipbeg == 4) {
+    zipbeg = 0;
+  }
+
+  /* Before we get carried away, make sure zip file is writeable. This
+   * has the undesired side effect of leaving one empty junk file on a WORM,
+   * so when the zipfile does not exist already and when -b is specified,
+   * the writability check is made in replace().
+   */
+  if (strcmp(zipfile, "-"))
+  {
+    if (tempdir && zfiles == NULL && zipbeg == 0) {
+      zip_attributes = 0;
+    } else {
+      x = (have_out || (zfiles == NULL && zipbeg == 0)) ? zfopen(out_path, FOPW) :
+                                                          zfopen(out_path, FOPM);
+      /* Note: FOPW and FOPM expand to several parameters for VMS */
+      if (x == NULL) {
+        ZIPERR(ZE_CREAT, out_path);
+      }
+      fclose(x);
+      zip_attributes = getfileattr(out_path);
+      if (zfiles == NULL && zipbeg == 0)
+        destroy(out_path);
+    }
+  }
+  else
+    zip_attributes = 0;
+
+  /* Throw away the garbage in front of the zip file for -J */
+  if (junk_sfx) zipbeg = 0;
+
+  /* Open zip file and temporary output file */
+  if (show_what_doing) {
+    fprintf(mesg, "sd: Open zip file and create temp file\n");
+    fflush(mesg);
+  }
+  diag("opening zip file and creating temporary zip file");
+  x = NULL;
+  tempzn = 0;
+  if (strcmp(zipfile, "-") == 0)
+  {
+#ifdef MSDOS
+    /* It is nonsense to emit the binary data stream of a zipfile to
+     * the (text mode) console.  This case should already have been caught
+     * in a call to zipstdout() far above.  Therefore, if the following
+     * failsafe check detects a console attached to stdout, zip is stopped
+     * with an "internal logic error"!  */
+    if (isatty(fileno(stdout)))
+      ZIPERR(ZE_LOGIC, "tried to write binary zipfile data to console!");
+    /* Set stdout mode to binary for MSDOS systems */
+#  ifdef __HIGHC__
+    setmode(stdout, _BINARY);
+#  else
+    setmode(fileno(stdout), O_BINARY);
+#  endif
+    y = zfdopen(fileno(stdout), FOPW);
+#else
+    y = stdout;
+#endif
+    /* tempzip must be malloced so a later free won't barf */
+    tempzip = malloc(4);
+    if (tempzip == NULL) {
+      ZIPERR(ZE_MEM, "allocating temp filename");
+    }
+    strcpy(tempzip, "-");
+  }
+  else if (d) /* d true if just appending (-g) */
+  {
+    if (total_disks > 1) {
+      ZIPERR(ZE_PARMS, "cannot grow split archive");
+    }
+    if ((y = zfopen(zipfile, FOPM)) == NULL) {
+      ZIPERR(ZE_NAME, zipfile);
+    }
+    tempzip = zipfile;
+    /*
+    tempzf = y;
+    */
+
+    if (zfseeko(y, cenbeg, SEEK_SET)) {
+      ZIPERR(ferror(y) ? ZE_READ : ZE_EOF, zipfile);
+    }
+    bytes_this_split = cenbeg;
+    tempzn = cenbeg;
+  }
+  else
+  {
+    if (show_what_doing) {
+      fprintf(mesg, "sd: Creating new zip file\n");
+      fflush(mesg);
+    }
+    /* See if there is something at beginning of disk 1 to copy.
+       If not, do nothing as zipcopy() will open files to read
+       as needed. */
+    if (zipbeg) {
+      in_split_path = get_in_split_path(in_path, 0);
+
+      while ((in_file = zfopen(in_split_path, FOPR_EX)) == NULL) {
+        /* could not open split */
+
+        /* Ask for directory with split.  Updates in_path */
+        if (ask_for_split_read_path(0) != ZE_OK) {
+          ZIPERR(ZE_ABORT, "could not open archive to read");
+        }
+        free(in_split_path);
+        in_split_path = get_in_split_path(in_path, 1);
+      }
+    }
+#if defined(UNIX) && !defined(NO_MKSTEMP)
+    {
+      int yd;
+      int i;
+
+      /* use mkstemp to avoid race condition and compiler warning */
+
+      if (tempath != NULL)
+      {
+        /* if -b used to set temp file dir use that for split temp */
+        if ((tempzip = malloc(strlen(tempath) + 12)) == NULL) {
+          ZIPERR(ZE_MEM, "allocating temp filename");
+        }
+        strcpy(tempzip, tempath);
+        if (lastchar(tempzip) != '/')
+          strcat(tempzip, "/");
+      }
+      else
+      {
+        /* create path by stripping name and appending template */
+        if ((tempzip = malloc(strlen(zipfile) + 12)) == NULL) {
+        ZIPERR(ZE_MEM, "allocating temp filename");
+        }
+        strcpy(tempzip, zipfile);
+        for(i = strlen(tempzip); i > 0; i--) {
+          if (tempzip[i - 1] == '/')
+            break;
+        }
+        tempzip[i] = '\0';
+      }
+      strcat(tempzip, "ziXXXXXX");
+
+      if ((yd = mkstemp(tempzip)) == EOF) {
+        ZIPERR(ZE_TEMP, tempzip);
+      }
+      if ((y = fdopen(yd, FOPW_TMP)) == NULL) {
+        ZIPERR(ZE_TEMP, tempzip);
+      }
+    }
+#else
+    if ((tempzip = tempname(zipfile)) == NULL) {
+      ZIPERR(ZE_MEM, "allocating temp filename");
+    }
+    if ((y = zfopen(tempzip, FOPW_TMP)) == NULL) {
+      ZIPERR(ZE_TEMP, tempzip);
+    }
+#endif
+  }
+
+#if (!defined(VMS) && !defined(CMS_MVS))
+  /* Use large buffer to speed up stdio: */
+#if (defined(_IOFBF) || !defined(BUFSIZ))
+  zipbuf = (char *)malloc(ZBSZ);
+#else
+  zipbuf = (char *)malloc(BUFSIZ);
+#endif
+  if (zipbuf == NULL) {
+    ZIPERR(ZE_MEM, tempzip);
+  }
+# ifdef _IOFBF
+  setvbuf(y, zipbuf, _IOFBF, ZBSZ);
+# else
+  setbuf(y, zipbuf);
+# endif /* _IOBUF */
+#endif /* !VMS  && !CMS_MVS */
+
+  /* If not seekable set some flags 3/14/05 EG */
+  output_seekable = 1;
+  if (!is_seekable(y)) {
+    output_seekable = 0;
+    use_descriptors = 1;
+  }
+
+  /* Not needed.  Only need Zip64 when input file is larger than 2 GB or reading
+     stdin and writing stdout.  This is set in putlocal() for each file. */
+#if 0
+  /* If using descriptors and Zip64 enabled force Zip64 3/13/05 EG */
+# ifdef ZIP64_SUPPORT
+  if (use_descriptors && force_zip64 != 0) {
+    force_zip64 = 1;
+  }
+# endif
+#endif
+
+  /* if archive exists, not streaming and not deleting or growing, copy
+     any bytes at beginning */
+  if (strcmp(zipfile, "-") != 0 && !d)  /* this must go *after* set[v]buf */
+  {
+    /* copy anything before archive */
+    if (in_file && zipbeg && (r = bfcopy(zipbeg)) != ZE_OK) {
+      ZIPERR(r, r == ZE_TEMP ? tempzip : zipfile);
+    }
+    if (in_file) {
+      fclose(in_file);
+      in_file = NULL;
+      free(in_split_path);
+    }
+    tempzn = zipbeg;
+    if (split_method) {
+      /* add spanning signature */
+      if (show_what_doing) {
+        fprintf(mesg, "sd: Adding spanning/splitting signature at top of archive\n");
+        fflush(mesg);
+      }
+      /* write the spanning signature at the top of the archive */
+      errbuf[0] = 0x50 /*'P' except for EBCDIC*/;
+      errbuf[1] = 0x4b /*'K' except for EBCDIC*/;
+      errbuf[2] = 7;
+      errbuf[3] = 8;
+      bfwrite(errbuf, 1, 4, BFWRITE_DATA);
+      /* tempzn updated below */
+      tempzn += 4;
+    }
+  }
+
+  o = 0;                                /* no ZE_OPEN errors yet */
+
+
+  /* Process zip file, updating marked files */
+#ifdef DEBUG
+  if (zfiles != NULL)
+    diag("going through old zip file");
+#endif
+  if (zfiles != NULL && show_what_doing) {
+    fprintf(mesg, "sd: Going through old zip file\n");
+    fflush(mesg);
+  }
+  w = &zfiles;
+  while ((z = *w) != NULL) {
+    if (z->mark == 1)
+    {
+      uzoff_t len;
+      if ((zoff_t)z->len == -1)
+        /* device */
+        len = 0;
+      else
+        len = z->len;
+
+      /* if not deleting, zip it up */
+      if (action != ARCHIVE && action != DELETE)
+      {
+        struct zlist far *localz; /* local header */
+
+        if (verbose || !(filesync && z->current))
+          DisplayRunningStats();
+        if (noisy)
+        {
+          if (action == FRESHEN) {
+            fprintf(mesg, "freshening: %s", z->oname);
+            mesg_line_started = 1;
+            fflush(mesg);
+          } else if (filesync && z->current) {
+            if (verbose) {
+              fprintf(mesg, "      ok: %s", z->oname);
+              mesg_line_started = 1;
+              fflush(mesg);
+            }
+          } else if (!(filesync && z->current)) {
+            fprintf(mesg, "updating: %s", z->oname);
+            mesg_line_started = 1;
+            fflush(mesg);
+          }
+        }
+        if (logall)
+        {
+          if (action == FRESHEN) {
+            fprintf(logfile, "freshening: %s", z->oname);
+            logfile_line_started = 1;
+            fflush(logfile);
+          } else if (filesync && z->current) {
+            if (verbose) {
+              fprintf(logfile, " current: %s", z->oname);
+              logfile_line_started = 1;
+              fflush(logfile);
+            }
+          } else {
+            fprintf(logfile, "updating: %s", z->oname);
+            logfile_line_started = 1;
+            fflush(logfile);
+          }
+        }
+
+        /* Get local header flags and extra fields */
+        if (readlocal(&localz, z) != ZE_OK) {
+          zipwarn("could not read local entry information: ", z->oname);
+          z->lflg = z->flg;
+          z->ext = 0;
+        } else {
+          z->lflg = localz->lflg;
+          z->ext = localz->ext;
+          z->extra = localz->extra;
+          if (localz->nam) free(localz->iname);
+          if (localz->nam) free(localz->name);
+#ifdef UNICODE_SUPPORT
+          if (localz->uname) free(localz->uname);
+#endif
+          free(localz);
+        }
+
+        if (!(filesync && z->current) &&
+             (r = zipup(z)) != ZE_OK && r != ZE_OPEN && r != ZE_MISS)
+        {
+          zipmessage_nl("", 1);
+          /*
+          if (noisy)
+          {
+            if (mesg_line_started) {
+#if (!defined(MACOS) && !defined(WINDLL))
+              putc('\n', mesg);
+              fflush(mesg);
+#else
+              fprintf(stdout, "\n");
+              fflush(stdout);
+#endif
+              mesg_line_started = 0;
+            }
+          }
+          if (logall) {
+            if (logfile_line_started) {
+              fprintf(logfile, "\n");
+              logfile_line_started = 0;
+              fflush(logfile);
+            }
+          }
+          */
+          sprintf(errbuf, "was zipping %s", z->name);
+          ZIPERR(r, errbuf);
+        }
+        if (filesync && z->current)
+        {
+          /* if filesync if entry matches OS just copy */
+          if ((r = zipcopy(z)) != ZE_OK)
+          {
+            sprintf(errbuf, "was copying %s", z->oname);
+            ZIPERR(r, errbuf);
+          }
+          zipmessage_nl("", 1);
+          /*
+          if (noisy)
+          {
+            if (mesg_line_started) {
+#if (!defined(MACOS) && !defined(WINDLL))
+              putc('\n', mesg);
+              fflush(mesg);
+#else
+              fprintf(stdout, "\n");
+              fflush(stdout);
+#endif
+              mesg_line_started = 0;
+            }
+          }
+          if (logall) {
+            if (logfile_line_started) {
+              fprintf(logfile, "\n");
+              logfile_line_started = 0;
+              fflush(logfile);
+            }
+          }
+          */
+        }
+        if (r == ZE_OPEN || r == ZE_MISS)
+        {
+          o = 1;
+          zipmessage_nl("", 1);
+          /*
+          if (noisy)
+          {
+#if (!defined(MACOS) && !defined(WINDLL))
+            putc('\n', mesg);
+            fflush(mesg);
+#else
+            fprintf(stdout, "\n");
+#endif
+            mesg_line_started = 0;
+          }
+          if (logall) {
+            fprintf(logfile, "\n");
+            logfile_line_started = 0;
+            fflush(logfile);
+          }
+          */
+          if (r == ZE_OPEN) {
+            perror(z->oname);
+            zipwarn("could not open for reading: ", z->oname);
+            if (bad_open_is_error) {
+              sprintf(errbuf, "was zipping %s", z->name);
+              ZIPERR(r, errbuf);
+            }
+          } else {
+            zipwarn("file and directory with the same name: ", z->oname);
+          }
+          zipwarn("will just copy entry over: ", z->oname);
+          if ((r = zipcopy(z)) != ZE_OK)
+          {
+            sprintf(errbuf, "was copying %s", z->oname);
+            ZIPERR(r, errbuf);
+          }
+          z->mark = 0;
+        }
+        files_so_far++;
+        good_bytes_so_far += z->len;
+        bytes_so_far += len;
+        w = &z->nxt;
+      }
+      else if (action == ARCHIVE)
+      {
+#ifdef DEBUG
+        zoff_t here = zftello(y);
+#endif
+
+        DisplayRunningStats();
+        if (skip_this_disk - 1 != z->dsk)
+          /* moved to another disk so start copying again */
+          skip_this_disk = 0;
+        if (skip_this_disk - 1 == z->dsk) {
+          /* skipping this disk */
+          if (noisy) {
+            fprintf(mesg, " skipping: %s", z->oname);
+            mesg_line_started = 1;
+            fflush(mesg);
+          }
+          if (logall) {
+            fprintf(logfile, " skipping: %s", z->oname);
+            logfile_line_started = 1;
+            fflush(logfile);
+          }
+        } else {
+          /* copying this entry */
+          if (noisy) {
+            fprintf(mesg, " copying: %s", z->oname);
+            if (display_usize) {
+              fprintf(mesg, " (");
+              DisplayNumString(mesg, z->len );
+              fprintf(mesg, ")");
+            }
+            mesg_line_started = 1;
+            fflush(mesg);
+          }
+          if (logall)
+          {
+            fprintf(logfile, " copying: %s", z->oname);
+            if (display_usize) {
+              fprintf(logfile, " (");
+              DisplayNumString(logfile, z->len );
+              fprintf(logfile, ")");
+            }
+            logfile_line_started = 1;
+            fflush(logfile);
+          }
+        }
+
+        if (skip_this_disk - 1 == z->dsk)
+          /* skip entries on this disk */
+          z->mark = 0;
+        else if ((r = zipcopy(z)) != ZE_OK)
+        {
+          if (r == ZE_ABORT) {
+            ZIPERR(r, "user requested abort");
+          } else if (fix != 1) {
+            /* exit */
+            sprintf(errbuf, "was copying %s", z->oname);
+            zipwarn("(try -F to attempt to fix)", "");
+            ZIPERR(r, errbuf);
+          }
+          else /* if (r == ZE_FORM) */ {
+#ifdef DEBUG
+            zoff_t here = zftello(y);
+#endif
+
+            /* seek back in output to start of this entry so can overwrite */
+            if (zfseeko(y, current_local_offset, SEEK_SET) != 0){
+              ZIPERR(r, "could not seek in output file");
+            }
+            zipwarn("bad - skipping: ", z->oname);
+#ifdef DEBUG
+            here = zftello(y);
+#endif
+            tempzn = current_local_offset;
+            bytes_this_split = current_local_offset;
+          }
+        }
+        if (skip_this_disk || !(fix == 1 && r != ZE_OK))
+        {
+          if (noisy && mesg_line_started) {
+            fprintf(mesg, "\n");
+            mesg_line_started = 0;
+            fflush(mesg);
+          }
+          if (logall && logfile_line_started) {
+            fprintf(logfile, "\n");
+            logfile_line_started = 0;
+            fflush(logfile);
+          }
+        }
+        /* input counts */
+        files_so_far++;
+        if (r != ZE_OK)
+          bad_bytes_so_far += z->siz;
+        else
+          good_bytes_so_far += z->siz;
+        bytes_so_far += z->siz;
+
+        if (r != ZE_OK && fix == 1) {
+          /* remove bad entry from list */
+          v = z->nxt;                     /* delete entry from list */
+          free((zvoid *)(z->iname));
+          free((zvoid *)(z->zname));
+          free(z->oname);
+#ifdef UNICODE_SUPPORT
+          if (z->uname) free(z->uname);
+#endif /* def UNICODE_SUPPORT */
+          if (z->ext)
+            /* don't have local extra until zipcopy reads it */
+            if (z->extra) free((zvoid *)(z->extra));
+          if (z->cext && z->cextra != z->extra)
+            free((zvoid *)(z->cextra));
+          if (z->com)
+            free((zvoid *)(z->comment));
+          farfree((zvoid far *)z);
+          *w = v;
+          zcount--;
+        } else {
+          w = &z->nxt;
+        }
+
+#ifdef WINDLL
+#ifdef ZIP64_SUPPORT
+        /* int64 support in caller */
+        if (lpZipUserFunctions->ServiceApplication64 != NULL)
+        {
+          if ((*lpZipUserFunctions->ServiceApplication64)(z->zname, z->siz))
+                    ZIPERR(ZE_ABORT, "User terminated operation");
+        }
+        else
+        {
+          /* no int64 support in caller */
+          filesize64 = z->siz;
+          low = (unsigned long)(filesize64 & 0x00000000FFFFFFFF);
+          high = (unsigned long)((filesize64 >> 32) & 0x00000000FFFFFFFF);
+          if (lpZipUserFunctions->ServiceApplication64_No_Int64 != NULL) {
+            if ((*lpZipUserFunctions->ServiceApplication64_No_Int64)(z->zname, low, high))
+                      ZIPERR(ZE_ABORT, "User terminated operation");
+          }
+        }
+#else
+        if (lpZipUserFunctions->ServiceApplication != NULL) {
+          if ((*lpZipUserFunctions->ServiceApplication)(z->zname, z->siz))
+            ZIPERR(ZE_ABORT, "User terminated operation");
+        }
+#endif /* ZIP64_SUPPORT - I added comments around // comments - does that help below? EG */
+/* strange but true: if I delete this and put these two endifs adjacent to
+   each other, the Aztec Amiga compiler never sees the second endif!  WTF?? PK */
+#endif /* WINDLL */
+      }
+      else
+      {
+        DisplayRunningStats();
+        if (noisy)
+        {
+          fprintf(mesg, "deleting: %s", z->oname);
+          if (display_usize) {
+            fprintf(mesg, " (");
+            DisplayNumString(mesg, z->len );
+            fprintf(mesg, ")");
+          }
+          fflush(mesg);
+          fprintf(mesg, "\n");
+        }
+        if (logall)
+        {
+          fprintf(logfile, "deleting: %s", z->oname);
+          if (display_usize) {
+            fprintf(logfile, " (");
+            DisplayNumString(logfile, z->len );
+            fprintf(logfile, ")");
+          }
+          fprintf(logfile, "\n");
+          fflush(logfile);
+        }
+        files_so_far++;
+        good_bytes_so_far += z->siz;
+        bytes_so_far += z->siz;
+#ifdef WINDLL
+#ifdef ZIP64_SUPPORT
+        /* int64 support in caller */
+        if (lpZipUserFunctions->ServiceApplication64 != NULL)
+        {
+          if ((*lpZipUserFunctions->ServiceApplication64)(z->zname, z->siz))
+                    ZIPERR(ZE_ABORT, "User terminated operation");
+        }
+        else
+        {
+          /* no int64 support in caller */
+          filesize64 = z->siz;
+          low = (unsigned long)(filesize64 & 0x00000000FFFFFFFF);
+          high = (unsigned long)((filesize64 >> 32) & 0x00000000FFFFFFFF);
+          if (lpZipUserFunctions->ServiceApplication64_No_Int64 != NULL) {
+            if ((*lpZipUserFunctions->ServiceApplication64_No_Int64)(z->zname, low, high))
+                      ZIPERR(ZE_ABORT, "User terminated operation");
+          }
+        }
+#else
+        if (lpZipUserFunctions->ServiceApplication != NULL) {
+          if ((*lpZipUserFunctions->ServiceApplication)(z->zname, z->siz))
+            ZIPERR(ZE_ABORT, "User terminated operation");
+        }
+#endif /* ZIP64_SUPPORT - I added comments around // comments - does that help below? EG */
+/* strange but true: if I delete this and put these two endifs adjacent to
+   each other, the Aztec Amiga compiler never sees the second endif!  WTF?? PK */
+#endif /* WINDLL */
+
+        v = z->nxt;                     /* delete entry from list */
+        free((zvoid *)(z->iname));
+        free((zvoid *)(z->zname));
+        free(z->oname);
+#ifdef UNICODE_SUPPORT
+        if (z->uname) free(z->uname);
+#endif /* def UNICODE_SUPPORT */
+        if (z->ext)
+          /* don't have local extra until zipcopy reads it */
+          if (z->extra) free((zvoid *)(z->extra));
+        if (z->cext && z->cextra != z->extra)
+          free((zvoid *)(z->cextra));
+        if (z->com)
+          free((zvoid *)(z->comment));
+        farfree((zvoid far *)z);
+        *w = v;
+        zcount--;
+      }
+    }
+    else
+    {
+      if (action == ARCHIVE) {
+        v = z->nxt;                     /* delete entry from list */
+        free((zvoid *)(z->iname));
+        free((zvoid *)(z->zname));
+        free(z->oname);
+#ifdef UNICODE_SUPPORT
+        if (z->uname) free(z->uname);
+#endif /* def UNICODE_SUPPORT */
+        if (z->ext)
+          /* don't have local extra until zipcopy reads it */
+          if (z->extra) free((zvoid *)(z->extra));
+        if (z->cext && z->cextra != z->extra)
+          free((zvoid *)(z->cextra));
+        if (z->com)
+          free((zvoid *)(z->comment));
+        farfree((zvoid far *)z);
+        *w = v;
+        zcount--;
+      }
+      else
+      {
+        if (filesync) {
+          /* Delete entries if don't match a file on OS */
+          BlankRunningStats();
+          if (noisy)
+          {
+            fprintf(mesg, "deleting: %s", z->oname);
+            if (display_usize) {
+              fprintf(mesg, " (");
+              DisplayNumString(mesg, z->len );
+              fprintf(mesg, ")");
+            }
+            fflush(mesg);
+            fprintf(mesg, "\n");
+            mesg_line_started = 0;
+          }
+          if (logall)
+          {
+            fprintf(logfile, "deleting: %s", z->oname);
+            if (display_usize) {
+              fprintf(logfile, " (");
+              DisplayNumString(logfile, z->len );
+              fprintf(logfile, ")");
+            }
+            fprintf(logfile, "\n");
+            fflush(logfile);
+            logfile_line_started = 0;
+          }
+        }
+        /* copy the original entry */
+        else if (!d && !diff_mode && (r = zipcopy(z)) != ZE_OK)
+        {
+          sprintf(errbuf, "was copying %s", z->oname);
+          ZIPERR(r, errbuf);
+        }
+        w = &z->nxt;
+      }
+    }
+  }
+
+
+  /* Process the edited found list, adding them to the zip file */
+  if (show_what_doing) {
+    fprintf(mesg, "sd: Zipping up new entries\n");
+    fflush(mesg);
+  }
+  diag("zipping up new entries, if any");
+  Trace((stderr, "zip diagnostic: fcount=%u\n", (unsigned)fcount));
+  for (f = found; f != NULL; f = fexpel(f))
+  {
+    uzoff_t len;
+    /* add a new zfiles entry and set the name */
+    if ((z = (struct zlist far *)farmalloc(sizeof(struct zlist))) == NULL) {
+      ZIPERR(ZE_MEM, "was adding files to zip file");
+    }
+    z->nxt = NULL;
+    z->name = f->name;
+    f->name = NULL;
+#ifdef UNICODE_SUPPORT
+    z->uname = NULL;          /* UTF-8 name for extra field */
+    z->zuname = NULL;         /* externalized UTF-8 name for matching */
+    z->ouname = NULL;         /* display version of UTF-8 name with OEM */
+
+#if 0
+    /* New AppNote bit 11 allowing storing UTF-8 in path */
+    if (utf8_force && f->uname) {
+      if (f->iname)
+        free(f->iname);
+      if ((f->iname = malloc(strlen(f->uname) + 1)) == NULL)
+        ZIPERR(ZE_MEM, "Unicode bit 11");
+      strcpy(f->iname, f->uname);
+# ifdef WIN32
+      if (f->inamew)
+        free(f->inamew);
+      f->inamew = utf8_to_wchar_string(f->iname);
+# endif
+    }
+#endif
+
+    /* Only set z->uname if have a non-ASCII Unicode name */
+    /* The Unicode path extra field is created if z->uname is not NULL,
+       unless on a UTF-8 system, then instead of creating the extra field
+       set bit 11 in the General Purpose Bit Flag */
+    {
+      int is_ascii = 0;
+
+# ifdef WIN32
+      if (!no_win32_wide)
+        is_ascii = is_ascii_stringw(f->inamew);
+      else
+        is_ascii = is_ascii_string(f->uname);
+# else
+      is_ascii = is_ascii_string(f->uname);
+# endif
+
+      if (z->uname == NULL) {
+        if (!is_ascii)
+          z->uname = f->uname;
+        else
+          free(f->uname);
+      } else {
+        free(f->uname);
+      }
+    }
+    f->uname = NULL;
+
+#endif
+    z->iname = f->iname;
+    f->iname = NULL;
+    z->zname = f->zname;
+    f->zname = NULL;
+    z->oname = f->oname;
+    f->oname = NULL;
+#if defined(UNICODE_SUPPORT) && defined(WIN32)
+    z->namew = f->namew;
+    f->namew = NULL;
+    z->inamew = f->inamew;
+    f->inamew = NULL;
+    z->znamew = f->znamew;
+    f->znamew = NULL;
+#endif
+    z->ext = z->cext = z->com = 0;
+    z->extra = z->cextra = NULL;
+    z->mark = 1;
+    z->dosflag = f->dosflag;
+    /* zip it up */
+    DisplayRunningStats();
+    if (noisy)
+    {
+      fprintf(mesg, "  adding: %s", z->oname);
+      mesg_line_started = 1;
+      fflush(mesg);
+    }
+    if (logall)
+    {
+      fprintf(logfile, "  adding: %s", z->oname);
+      logfile_line_started = 1;
+      fflush(logfile);
+    }
+    /* initial scan */
+    len = f->usize;
+    if ((r = zipup(z)) != ZE_OK  && r != ZE_OPEN && r != ZE_MISS)
+    {
+      zipmessage_nl("", 1);
+      /*
+      if (noisy)
+      {
+#if (!defined(MACOS) && !defined(WINDLL))
+        putc('\n', mesg);
+        fflush(mesg);
+#else
+        fprintf(stdout, "\n");
+#endif
+        mesg_line_started = 0;
+        fflush(mesg);
+      }
+      if (logall) {
+        fprintf(logfile, "\n");
+        logfile_line_started = 0;
+        fflush(logfile);
+      }
+      */
+      sprintf(errbuf, "was zipping %s", z->oname);
+      ZIPERR(r, errbuf);
+    }
+    if (r == ZE_OPEN || r == ZE_MISS)
+    {
+      o = 1;
+      zipmessage_nl("", 1);
+      /*
+      if (noisy)
+      {
+#if (!defined(MACOS) && !defined(WINDLL))
+        putc('\n', mesg);
+        fflush(mesg);
+#else
+        fprintf(stdout, "\n");
+#endif
+        mesg_line_started = 0;
+        fflush(mesg);
+      }
+      if (logall) {
+        fprintf(logfile, "\n");
+        logfile_line_started = 0;
+        fflush(logfile);
+      }
+      */
+      if (r == ZE_OPEN) {
+        perror("zip warning");
+        if (logfile)
+          fprintf(logfile, "zip warning: %s\n", strerror(errno));
+        zipwarn("could not open for reading: ", z->oname);
+        if (bad_open_is_error) {
+          sprintf(errbuf, "was zipping %s", z->name);
+          ZIPERR(r, errbuf);
+        }
+      } else {
+        zipwarn("file and directory with the same name: ", z->oname);
+      }
+      files_so_far++;
+      bytes_so_far += len;
+      bad_files_so_far++;
+      bad_bytes_so_far += len;
+      free((zvoid *)(z->name));
+      free((zvoid *)(z->iname));
+      free((zvoid *)(z->zname));
+      free(z->oname);
+#ifdef UNICODE_SUPPORT
+      if (z->uname)
+        free(z->uname);
+# ifdef WIN32
+      if (z->namew)
+        free((zvoid *)(z->namew));
+      if (z->inamew)
+        free((zvoid *)(z->inamew));
+      if (z->znamew)
+        free((zvoid *)(z->znamew));
+# endif
+#endif
+      farfree((zvoid far *)z);
+    }
+    else
+    {
+      files_so_far++;
+      /* current size of file (just before reading) */
+      good_bytes_so_far += z->len;
+      /* size of file on initial scan */
+      bytes_so_far += len;
+      *w = z;
+      w = &z->nxt;
+      zcount++;
+    }
+  }
+  if (key != NULL)
+  {
+    free((zvoid *)key);
+    key = NULL;
+  }
+
+  /* final status 3/17/05 EG */
+  if (noisy && bad_files_so_far)
+  {
+    char tempstrg[100];
+
+    fprintf(mesg, "\nzip warning: Not all files were readable\n");
+    fprintf(mesg, "  files/entries read:  %lu", files_total - bad_files_so_far);
+    WriteNumString(good_bytes_so_far, tempstrg);
+    fprintf(mesg, " (%s bytes)", tempstrg);
+    fprintf(mesg, "  skipped:  %lu", bad_files_so_far);
+    WriteNumString(bad_bytes_so_far, tempstrg);
+    fprintf(mesg, " (%s bytes)\n", tempstrg);
+    fflush(mesg);
+  }
+  if (logfile && bad_files_so_far)
+  {
+    char tempstrg[100];
+
+    fprintf(logfile, "\nzip warning: Not all files were readable\n");
+    fprintf(logfile, "  files/entries read:  %lu", files_total - bad_files_so_far);
+    WriteNumString(good_bytes_so_far, tempstrg);
+    fprintf(logfile, " (%s bytes)", tempstrg);
+    fprintf(logfile, "  skipped:  %lu", bad_files_so_far);
+    WriteNumString(bad_bytes_so_far, tempstrg);
+    fprintf(logfile, " (%s bytes)", tempstrg);
+  }
+
+  /* Get one line comment for each new entry */
+  if (show_what_doing) {
+    fprintf(mesg, "sd: Get comment if any\n");
+    fflush(mesg);
+  }
+#if defined(AMIGA) || defined(MACOS)
+  if (comadd || filenotes)
+  {
+    if (comadd)
+#else
+  if (comadd)
+  {
+#endif
+    {
+      if (comment_stream == NULL) {
+#ifndef RISCOS
+        comment_stream = (FILE*)fdopen(fileno(stderr), "r");
+#else
+        comment_stream = stderr;
+#endif
+      }
+      if ((e = malloc(MAXCOM + 1)) == NULL) {
+        ZIPERR(ZE_MEM, "was reading comment lines");
+      }
+    }
+#ifdef __human68k__
+    setmode(fileno(comment_stream), O_TEXT);
+#endif
+#ifdef MACOS
+    if (noisy) fprintf(mesg, "\nStart commenting files ...\n");
+#endif
+    for (z = zfiles; z != NULL; z = z->nxt)
+      if (z->mark)
+#if defined(AMIGA) || defined(MACOS)
+        if (filenotes && (p = GetComment(z->zname)))
+        {
+          if (z->comment = malloc(k = strlen(p)+1))
+          {
+            z->com = k;
+            strcpy(z->comment, p);
+          }
+          else
+          {
+            free((zvoid *)e);
+            ZIPERR(ZE_MEM, "was reading filenotes");
+          }
+        }
+        else if (comadd)
+#endif /* AMIGA || MACOS */
+        {
+          if (noisy)
+            fprintf(mesg, "Enter comment for %s:\n", z->oname);
+          if (fgets(e, MAXCOM+1, comment_stream) != NULL)
+          {
+            if ((p = malloc((extent)(k = strlen(e))+1)) == NULL)
+            {
+              free((zvoid *)e);
+              ZIPERR(ZE_MEM, "was reading comment lines");
+            }
+            strcpy(p, e);
+            if (p[k-1] == '\n')
+              p[--k] = 0;
+            z->comment = p;
+            /* zip64 support 09/05/2003 R.Nausedat */
+            z->com = (extent)k;
+          }
+        }
+#ifdef MACOS
+    if (noisy) fprintf(mesg, "\n...done");
+#endif
+#if defined(AMIGA) || defined(MACOS)
+    if (comadd)
+      free((zvoid *)e);
+    GetComment(NULL);           /* makes it free its internal storage */
+#else
+    free((zvoid *)e);
+#endif
+  }
+
+  /* Get multi-line comment for the zip file */
+  if (zipedit)
+  {
+#ifndef WINDLL
+    if (comment_stream == NULL) {
+#ifndef RISCOS
+      comment_stream = (FILE*)fdopen(fileno(stderr), "r");
+#else
+      comment_stream = stderr;
+#endif
+    }
+    if ((e = malloc(MAXCOM + 1)) == NULL) {
+      ZIPERR(ZE_MEM, "was reading comment lines");
+    }
+    if (noisy && zcomlen)
+    {
+      fputs("current zip file comment is:\n", mesg);
+      fwrite(zcomment, 1, zcomlen, mesg);
+      if (zcomment[zcomlen-1] != '\n')
+        putc('\n', mesg);
+      free((zvoid *)zcomment);
+    }
+    if ((zcomment = malloc(1)) == NULL)
+      ZIPERR(ZE_MEM, "was setting comments to null");
+    zcomment[0] = '\0';
+    if (noisy)
+      fputs("enter new zip file comment (end with .):\n", mesg);
+#if (defined(AMIGA) && (defined(LATTICE)||defined(__SASC)))
+    flushall();  /* tty input/output is out of sync here */
+#endif
+#ifdef __human68k__
+    setmode(fileno(comment_stream), O_TEXT);
+#endif
+#ifdef MACOS
+    printf("\n enter new zip file comment \n");
+    if (fgets(e, MAXCOM+1, comment_stream) != NULL) {
+        if ((p = malloc((k = strlen(e))+1)) == NULL) {
+            free((zvoid *)e);
+            ZIPERR(ZE_MEM, "was reading comment lines");
+        }
+        strcpy(p, e);
+        if (p[k-1] == '\n') p[--k] = 0;
+        zcomment = p;
+    }
+#else /* !MACOS */
+    while (fgets(e, MAXCOM+1, comment_stream) != NULL && strcmp(e, ".\n"))
+    {
+      if (e[(r = strlen(e)) - 1] == '\n')
+        e[--r] = 0;
+      if ((p = malloc((*zcomment ? strlen(zcomment) + 3 : 1) + r)) == NULL)
+      {
+        free((zvoid *)e);
+        ZIPERR(ZE_MEM, "was reading comment lines");
+      }
+      if (*zcomment)
+        strcat(strcat(strcpy(p, zcomment), "\r\n"), e);
+      else
+        strcpy(p, *e ? e : "\r\n");
+      free((zvoid *)zcomment);
+      zcomment = p;
+    }
+#endif /* ?MACOS */
+    free((zvoid *)e);
+#else /* WINDLL */
+    comment(zcomlen);
+    if ((p = malloc(strlen(szCommentBuf)+1)) == NULL) {
+      ZIPERR(ZE_MEM, "was setting comments to null");
+    }
+    if (szCommentBuf[0] != '\0')
+       lstrcpy(p, szCommentBuf);
+    else
+       p[0] = '\0';
+    free((zvoid *)zcomment);
+    GlobalUnlock(hStr);
+    GlobalFree(hStr);
+    zcomment = p;
+#endif /* WINDLL */
+    zcomlen = strlen(zcomment);
+  }
+
+  if (display_globaldots) {
+#ifndef WINDLL
+    putc('\n', mesg);
+#else
+    fprintf(stdout,"%c",'\n');
+#endif
+    mesg_line_started = 0;
+  }
+
+  /* Write central directory and end header to temporary zip */
+  if (show_what_doing) {
+    fprintf(mesg, "sd: Writing central directory\n");
+    fflush(mesg);
+  }
+  diag("writing central directory");
+  k = 0;                        /* keep count for end header */
+  c = tempzn;                   /* get start of central */
+  n = t = 0;
+  for (z = zfiles; z != NULL; z = z->nxt)
+  {
+    if (z->mark || !(diff_mode || filesync)) {
+      if ((r = putcentral(z)) != ZE_OK) {
+        ZIPERR(r, tempzip);
+      }
+      tempzn += 4 + CENHEAD + z->nam + z->cext + z->com;
+      n += z->len;
+      t += z->siz;
+      k++;
+    }
+  }
+
+  if (k == 0)
+    zipwarn("zip file empty", "");
+  if (verbose) {
+    fprintf(mesg, "total bytes=%s, compressed=%s -> %d%% savings\n",
+            zip_fzofft(n, NULL, "u"), zip_fzofft(t, NULL, "u"), percent(n, t));
+    fflush(mesg);
+  }
+  if (logall) {
+    fprintf(logfile, "total bytes=%s, compressed=%s -> %d%% savings\n",
+            zip_fzofft(n, NULL, "u"), zip_fzofft(t, NULL, "u"), percent(n, t));
+    fflush(logfile);
+  }
+  t = tempzn - c;               /* compute length of central */
+  diag("writing end of central directory");
+  if (show_what_doing) {
+    fprintf(mesg, "sd: Writing end of central directory\n");
+    fflush(mesg);
+  }
+
+  if ((r = putend(k, t, c, zcomlen, zcomment)) != ZE_OK) {
+    ZIPERR(r, tempzip);
+  }
+
+  /*
+  tempzf = NULL;
+  */
+  if (fclose(y)) {
+    ZIPERR(d ? ZE_WRITE : ZE_TEMP, tempzip);
+  }
+  y = NULL;
+  if (in_file != NULL) {
+    fclose(in_file);
+    in_file = NULL;
+  }
+  /*
+  if (x != NULL)
+    fclose(x);
+  */
+
+  /* Free some memory before spawning unzip */
+#ifdef USE_ZLIB
+  zl_deflate_free();
+#else
+  lm_free();
+#endif
+#ifdef BZIP2_SUPPORT
+  bz_compress_free();
+#endif
+
+#ifndef WINDLL
+  /* Test new zip file before overwriting old one or removing input files */
+  if (test)
+    check_zipfile(tempzip, argv[0]);
+#endif
+  /* Replace old zip file with new zip file, leaving only the new one */
+  if (strcmp(zipfile, "-") && !d)
+  {
+    diag("replacing old zip file with new zip file");
+    if (show_what_doing) {
+      fprintf(mesg, "sd: Replacing old zip file\n");
+      fflush(mesg);
+    }
+    if ((r = replace(out_path, tempzip)) != ZE_OK)
+    {
+      zipwarn("new zip file left as: ", tempzip);
+      free((zvoid *)tempzip);
+      tempzip = NULL;
+      ZIPERR(r, "was replacing the original zip file");
+    }
+    free((zvoid *)tempzip);
+  }
+  tempzip = NULL;
+  if (zip_attributes && strcmp(zipfile, "-")) {
+    setfileattr(out_path, zip_attributes);
+#ifdef VMS
+    /* If the zip file existed previously, restore its record format: */
+    if (x != NULL)
+      (void)VMSmunch(out_path, RESTORE_RTYPE, NULL);
+#endif
+  }
+  if (strcmp(zipfile, "-")) {
+    if (show_what_doing) {
+      fprintf(mesg, "sd: Setting file type\n");
+      fflush(mesg);
+    }
+
+    set_filetype(out_path);
+  }
+
+#if defined(WIN32)
+  /* All looks good so, if requested, clear the DOS archive bits */
+  if (clear_archive_bits) {
+    if (noisy)
+      zipmessage("Clearing archive bits...", "");
+    for (z = zfiles; z != NULL; z = z->nxt)
+    {
+# ifdef UNICODE_SUPPORT
+      if (z->mark) {
+        if (!no_win32_wide) {
+          if (!ClearArchiveBitW(z->namew)){
+            zipwarn("Could not clear archive bit for: ", z->oname);
+          }
+        } else {
+          if (!ClearArchiveBit(z->name)){
+            zipwarn("Could not clear archive bit for: ", z->oname);
+          }
+        }
+      }
+# else
+      if (!ClearArchiveBit(z->name)){
+        zipwarn("Could not clear archive bit for: ", z->oname);
+      }
+# endif
+    }
+  }
+#endif
+
+  /* finish logfile (it gets closed in freeup() called by finish()) */
+  if (logfile) {
+      struct tm *now;
+      time_t clocktime;
+
+      fprintf(logfile, "\nTotal %ld entries (", files_total);
+      if (good_bytes_so_far != bytes_total) {
+        fprintf(logfile, "planned ");
+        DisplayNumString(logfile, bytes_total);
+        fprintf(logfile, " bytes, actual ");
+        DisplayNumString(logfile, good_bytes_so_far);
+        fprintf(logfile, " bytes)");
+      } else {
+        DisplayNumString(logfile, bytes_total);
+        fprintf(logfile, " bytes)");
+      }
+
+      /* get current time */
+
+      time(&clocktime);
+      now = localtime(&clocktime);
+      fprintf(logfile, "\nDone %s", asctime(now));
+  }
+
+  /* Finish up (process -o, -m, clean up).  Exit code depends on o. */
+#if (!defined(VMS) && !defined(CMS_MVS))
+  free((zvoid *) zipbuf);
+#endif /* !VMS && !CMS_MVS */
+  RETURN(finish(o ? ZE_OPEN : ZE_OK));
+}
Index: a/infozip/zip/create-3.0-format-security-patch/zip30-new
===================================================================
--- a/infozip/zip/create-3.0-format-security-patch/zip30-new	(nonexistent)
+++ a/infozip/zip/create-3.0-format-security-patch/zip30-new	(revision 5)

Property changes on: a/infozip/zip/create-3.0-format-security-patch/zip30-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/zip/create-3.0-format-security-patch
===================================================================
--- a/infozip/zip/create-3.0-format-security-patch	(nonexistent)
+++ a/infozip/zip/create-3.0-format-security-patch	(revision 5)

Property changes on: a/infozip/zip/create-3.0-format-security-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/zip/create-3.0-man-pages-patch/create.patch.sh
===================================================================
--- a/infozip/zip/create-3.0-man-pages-patch/create.patch.sh	(nonexistent)
+++ a/infozip/zip/create-3.0-man-pages-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+VERSION=3.0
+
+version=${VERSION/./}
+
+tar --files-from=file.list -xzvf ../zip${version}.tar.gz
+mv zip${version} zip${version}-orig
+
+cp -rf ./zip${version}-new ./zip${version}
+
+diff --unified -Nr  zip${version}-orig  zip${version} > zip-${VERSION}-man-pages.patch
+
+mv zip-${VERSION}-man-pages.patch ../patches
+
+rm -rf ./zip${version}
+rm -rf ./zip${version}-orig

Property changes on: a/infozip/zip/create-3.0-man-pages-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/infozip/zip/create-3.0-man-pages-patch/file.list
===================================================================
--- a/infozip/zip/create-3.0-man-pages-patch/file.list	(nonexistent)
+++ a/infozip/zip/create-3.0-man-pages-patch/file.list	(revision 5)
@@ -0,0 +1,2 @@
+zip30/man/zipnote.1
+zip30/man/zipsplit.1
Index: a/infozip/zip/create-3.0-man-pages-patch/zip30-new/man/zipnote.1
===================================================================
--- a/infozip/zip/create-3.0-man-pages-patch/zip30-new/man/zipnote.1	(nonexistent)
+++ a/infozip/zip/create-3.0-man-pages-patch/zip30-new/man/zipnote.1	(revision 5)
@@ -0,0 +1,89 @@
+.TH zipnote 1 "v3.0 of 8 May 2008"
+.SH NAME
+zipnote \- write the comments in zipfile to stdout, edit comments and rename files in zipfile
+
+.SH SYNOPSIS
+.I zipnote
+.RB [ \-w ]
+.RB [ \-b\ path ]
+.RB [ \-h ]
+.RB [ \-q ]
+.RB [ \-v ]
+.RB [ \-L ]
+zipfile
+
+.SH ARGUMENTS
+.in +13
+.ti -13
+zipfile  Zipfile to read comments from or edit.
+
+.SH OPTIONS
+.TP
+.BI \-w
+Write comments to a zipfile from stdin (see below).
+.TP
+.BI \-b\ \fRpath
+Use path for the temporary zip file.
+.TP
+.BI \-h
+Show a short help.
+.TP
+.BI \-q
+Suppress some informational messages.
+.TP
+.BI \-v
+Show version information.
+.TP
+.BI \-L
+Show software license.
+
+.SH DESCRIPTION
+.I zipnote
+writes the comments in a zipfile to stdout.  This is the default mode.  A second mode
+allows updating the comments in a zipfile as well as allows changing the names
+of the files in the zipfile.  These modes are described below.
+
+.SH EXAMPLES
+To write all comments in a zipfile to stdout use for example
+.LP
+.nf
+     zipnote foo.zip > foo.tmp
+.fi
+.LP
+This writes all comments in the zipfile
+.I foo.zip
+to the file
+.I foo.tmp
+in a specific format.
+
+.LP
+If desired, this file can then be edited to change the comments and then used
+to update the zipfile.
+.LP
+.nf
+     zipnote -w foo.zip < foo.tmp
+.fi
+.LP
+The names of the files in the zipfile can also be changed in this way.  This is done by
+following lines like
+.nf
+     "@ name"
+.fi
+in the created temporary file (called
+.I foo.tmp
+here) with lines like
+.nf
+     "@=newname"
+.fi
+and then using the -w option as above.
+
+.SH BUGS
+The temporary file format is rather specific and zipnote is rather picky about it.
+It should be easier to change file names in a script.
+
+Does not yet support large (> 2 GB) or split archives.
+
+.SH SEE ALSO
+zip(1), unzip(1)
+.SH AUTHOR
+Info-ZIP
Index: a/infozip/zip/create-3.0-man-pages-patch/zip30-new/man/zipsplit.1
===================================================================
--- a/infozip/zip/create-3.0-man-pages-patch/zip30-new/man/zipsplit.1	(nonexistent)
+++ a/infozip/zip/create-3.0-man-pages-patch/zip30-new/man/zipsplit.1	(revision 5)
@@ -0,0 +1,73 @@
+.TH zipnote 1 "v3.0 of 8 May 2008"
+.SH NAME
+zipsplit \- split a zipfile into smaller zipfiles
+
+.SH SYNOPSIS
+.I zipsplit
+.RB [ \-t ]
+.RB [ \-i ]
+.RB [ \-p ]
+.RB [ \-s ]
+.RB [ \-n\ size ]
+.RB [ \-r\ room ]
+.RB [ \-b\ path ]
+.RB [ \-h ]
+.RB [ \-q ]
+.RB [ \-v ]
+.RB [ \-L ]
+zipfile
+
+.SH ARGUMENTS
+.in +13
+.ti -13
+zipfile  Zipfile to split.
+
+.SH OPTIONS
+.TP
+.BI \-t
+Report how many files it will take, but don't make them.
+.TP
+.BI \-i
+Make index (zipsplit.idx) and count its size against first zip file.
+.TP
+.BI \-n\ \fRsize
+Make zip files no larger than "size" (default = 36000).
+.TP
+.BI \-r\ \fRroom
+Leave room for "room" bytes on the first disk (default = 0).
+.TP
+.BI \-b\ \fRpath
+Use path for the output zip files.
+.TP
+.BI \-p
+Pause between output zip files.
+.TP
+.BI \-s
+Do a sequential split even if it takes more zip files.
+.TP
+.BI \-h
+Show a short help.
+.TP
+.BI \-q
+Suppress some informational messages.
+.TP
+.BI \-v
+Show version information.
+.TP
+.BI \-L
+Show software license.
+
+.SH DESCRIPTION
+.I zipsplit
+reads a zipfile and splits it into smaller zipfiles.
+
+.SH EXAMPLES
+To be filled in.
+
+.SH BUGS
+Does not yet support large (> 2 GB) or split archives.
+
+.SH SEE ALSO
+zip(1), unzip(1)
+.SH AUTHOR
+Info-ZIP
Index: a/infozip/zip/create-3.0-man-pages-patch/zip30-new/man
===================================================================
--- a/infozip/zip/create-3.0-man-pages-patch/zip30-new/man	(nonexistent)
+++ a/infozip/zip/create-3.0-man-pages-patch/zip30-new/man	(revision 5)

Property changes on: a/infozip/zip/create-3.0-man-pages-patch/zip30-new/man
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/zip/create-3.0-man-pages-patch/zip30-new
===================================================================
--- a/infozip/zip/create-3.0-man-pages-patch/zip30-new	(nonexistent)
+++ a/infozip/zip/create-3.0-man-pages-patch/zip30-new	(revision 5)

Property changes on: a/infozip/zip/create-3.0-man-pages-patch/zip30-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/zip/create-3.0-man-pages-patch
===================================================================
--- a/infozip/zip/create-3.0-man-pages-patch	(nonexistent)
+++ a/infozip/zip/create-3.0-man-pages-patch	(revision 5)

Property changes on: a/infozip/zip/create-3.0-man-pages-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/zip/create-3.0-zipnote-patch/create.patch.sh
===================================================================
--- a/infozip/zip/create-3.0-zipnote-patch/create.patch.sh	(nonexistent)
+++ a/infozip/zip/create-3.0-zipnote-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+VERSION=3.0
+
+version=${VERSION/./}
+
+tar --files-from=file.list -xzvf ../zip${version}.tar.gz
+mv zip${version} zip${version}-orig
+
+cp -rf ./zip${version}-new ./zip${version}
+
+diff --unified -Nr  zip${version}-orig  zip${version} > zip-${VERSION}-zipnote.patch
+
+mv zip-${VERSION}-zipnote.patch ../patches
+
+rm -rf ./zip${version}
+rm -rf ./zip${version}-orig

Property changes on: a/infozip/zip/create-3.0-zipnote-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/infozip/zip/create-3.0-zipnote-patch/file.list
===================================================================
--- a/infozip/zip/create-3.0-zipnote-patch/file.list	(nonexistent)
+++ a/infozip/zip/create-3.0-zipnote-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+zip30/zipnote.c
Index: a/infozip/zip/create-3.0-zipnote-patch/zip30-new/zipnote.c
===================================================================
--- a/infozip/zip/create-3.0-zipnote-patch/zip30-new/zipnote.c	(nonexistent)
+++ a/infozip/zip/create-3.0-zipnote-patch/zip30-new/zipnote.c	(revision 5)
@@ -0,0 +1,699 @@
+/*
+  zipnote.c - Zip 3
+
+  Copyright (c) 1990-2008 Info-ZIP.  All rights reserved.
+
+  See the accompanying file LICENSE, version 2007-Mar-4 or later
+  (the contents of which are also included in zip.h) for terms of use.
+  If, for some reason, all these files are missing, the Info-ZIP license
+  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*
+ *  zipnote.c by Mark Adler.
+ */
+#define __ZIPNOTE_C
+
+#ifndef UTIL
+#define UTIL
+#endif
+#include "zip.h"
+#define DEFCPYRT        /* main module: enable copyright string defines! */
+#include "revision.h"
+#include <signal.h>
+
+/* Calculate size of static line buffer used in write (-w) mode. */
+#define WRBUFSIZ 2047
+/* The line buffer size should be at least as large as FNMAX. */
+#if FNMAX > WRBUFSIZ
+#  undef WRBUFSIZ
+#  define WRBUFSIZ FNMAX
+#endif
+
+/* Character to mark zip entry names in the comment file */
+#define MARK '@'
+#define MARKE " (comment above this line)"
+#define MARKZ " (zip file comment below this line)"
+
+/* Temporary zip file pointer */
+local FILE *tempzf;
+
+
+/* Local functions */
+local void handler OF((int));
+local void license OF((void));
+local void help OF((void));
+local void version_info OF((void));
+local void putclean OF((char *, extent));
+/* getline name conflicts with GNU getline() function */
+local char *zgetline OF((char *, extent));
+local int catalloc OF((char * far *, char *));
+int main OF((int, char **));
+
+/* keep compiler happy until implement long options - 11/4/2003 EG */
+struct option_struct far options[] = {
+  /* short longopt        value_type        negatable        ID    name */
+    {"h",  "help",        o_NO_VALUE,       o_NOT_NEGATABLE, 'h',  "help"},
+    /* the end of the list */
+    {NULL, NULL,          o_NO_VALUE,       o_NOT_NEGATABLE, 0,    NULL} /* end has option_ID = 0 */
+  };
+
+#ifdef MACOS
+#define ziperr(c, h)    zipnoteerr(c, h)
+#define zipwarn(a, b)   zipnotewarn(a, b)
+
+void zipnoteerr(int c, ZCONST char *h);
+void zipnotewarn(ZCONST char *a, ZCONST char *b);
+#endif
+
+#ifdef QDOS
+#define exit(p1) QDOSexit()
+#endif
+
+int set_filetype(out_path)
+  char *out_path;
+{
+#ifdef __BEOS__
+  /* Set the filetype of the zipfile to "application/zip" */
+  setfiletype( out_path, "application/zip" );
+#endif
+
+#ifdef __ATHEOS__
+  /* Set the filetype of the zipfile to "application/x-zip" */
+  setfiletype(out_path, "application/x-zip");
+#endif
+
+#ifdef MACOS
+  /* Set the Creator/Type of the zipfile to 'IZip' and 'ZIP ' */
+  setfiletype(out_path, 'IZip', 'ZIP ');
+#endif
+
+#ifdef RISCOS
+  /* Set the filetype of the zipfile to &DDC */
+  setfiletype(out_path, 0xDDC);
+#endif
+  return ZE_OK;
+}
+
+/* rename a split
+ * A split has a tempfile name until it is closed, then
+ * here rename it as out_path the final name for the split.
+ */
+int rename_split(temp_name, out_path)
+  char *temp_name;
+  char *out_path;
+{
+  int r;
+  /* Replace old zip file with new zip file, leaving only the new one */
+  if ((r = replace(out_path, temp_name)) != ZE_OK)
+  {
+    zipwarn("new zip file left as: ", temp_name);
+    free((zvoid *)tempzip);
+    tempzip = NULL;
+    ZIPERR(r, "was replacing split file");
+  }
+  if (zip_attributes) {
+    setfileattr(out_path, zip_attributes);
+  }
+  return ZE_OK;
+}
+
+void zipmessage_nl(a, nl)
+ZCONST char *a;     /* message string to output */
+int nl;             /* 1 = add nl to end */
+/* If nl false, print a message to mesg without new line.
+   If nl true, print and add new line.  If logfile is
+   open then also write message to log file. */
+{
+  if (noisy) {
+    fprintf(mesg, "%s", a);
+    if (nl) {
+      fprintf(mesg, "\n");
+      mesg_line_started = 0;
+    } else {
+      mesg_line_started = 1;
+    }
+    fflush(mesg);
+  }
+}
+
+void zipmessage(a, b)
+ZCONST char *a, *b;     /* message strings juxtaposed in output */
+/* Print a message to mesg and flush.  Also write to log file if
+   open.  Write new line first if current line has output already. */
+{
+  if (noisy) {
+    if (mesg_line_started)
+      fprintf(mesg, "\n");
+    fprintf(mesg, "%s%s\n", a, b);
+    mesg_line_started = 0;
+    fflush(mesg);
+  }
+}
+
+void ziperr(c, h)
+int c;                  /* error code from the ZE_ class */
+ZCONST char *h;         /* message about how it happened */
+/* Issue a message for the error, clean up files and memory, and exit. */
+{
+  if (PERR(c))
+    perror("zipnote error");
+  fprintf(mesg, "zipnote error: %s (%s)\n", ZIPERRORS(c), h);
+  if (tempzf != NULL)
+    fclose(tempzf);
+  if (tempzip != NULL)
+  {
+    destroy(tempzip);
+    free((zvoid *)tempzip);
+  }
+  if (zipfile != NULL)
+    free((zvoid *)zipfile);
+  EXIT(c);
+}
+
+
+local void handler(s)
+int s;                  /* signal number (ignored) */
+/* Upon getting a user interrupt, abort cleanly using ziperr(). */
+{
+#ifndef MSDOS
+  putc('\n', mesg);
+#endif /* !MSDOS */
+  ziperr(ZE_ABORT, "aborting");
+  s++;                                  /* keep some compilers happy */
+}
+
+
+void zipwarn(a, b)
+ZCONST char *a, *b;     /* message strings juxtaposed in output */
+/* Print a warning message to mesg (usually stderr) and return. */
+{
+  fprintf(mesg, "zipnote warning: %s%s\n", a, b);
+}
+
+
+local void license()
+/* Print license information to stdout. */
+{
+  extent i;             /* counter for copyright array */
+
+  for (i = 0; i < sizeof(swlicense)/sizeof(char *); i++)
+    puts(swlicense[i]);
+}
+
+
+local void help()
+/* Print help (along with license info) to stdout. */
+{
+  extent i;             /* counter for help array */
+
+  /* help array */
+  static ZCONST char *text[] = {
+"",
+"ZipNote %s (%s)",
+#ifdef VM_CMS
+"Usage:  zipnote [-w] [-q] [-b fm] zipfile",
+#else
+"Usage:  zipnote [-w] [-q] [-b path] zipfile",
+#endif
+"  the default action is to write the comments in zipfile to stdout",
+"  -w   write the zipfile comments from stdin",
+#ifdef VM_CMS
+"  -b   use \"fm\" as the filemode for the temporary zip file",
+#else
+"  -b   use \"path\" for the temporary zip file",
+#endif
+"  -q   quieter operation, suppress some informational messages",
+"  -h   show this help    -v   show version info    -L   show software license",
+"",
+"Example:",
+#ifdef VMS
+"     define/user sys$output foo.tmp",
+"     zipnote foo.zip",
+"     edit foo.tmp",
+"     ... then you edit the comments, save, and exit ...",
+"     define/user sys$input foo.tmp",
+"     zipnote -w foo.zip",
+#else
+#ifdef RISCOS
+"     zipnote foo/zip > foo/tmp",
+"     <!Edit> foo/tmp",
+"     ... then you edit the comments, save, and exit ...",
+"     zipnote -w foo/zip < foo/tmp",
+#else
+#ifdef VM_CMS
+"     zipnote foo.zip > foo.tmp",
+"     xedit foo tmp",
+"     ... then you edit the comments, save, and exit ...",
+"     zipnote -w foo.zip < foo.tmp",
+#else
+"     zipnote foo.zip > foo.tmp",
+"     ed foo.tmp",
+"     ... then you edit the comments, save, and exit ...",
+"     zipnote -w foo.zip < foo.tmp",
+#endif /* VM_CMS */
+#endif /* RISCOS */
+#endif /* VMS */
+"",
+"  \"@ name\" can be followed by an \"@=newname\" line to change the name"
+  };
+
+  for (i = 0; i < sizeof(copyright)/sizeof(char *); i++) {
+    printf(copyright[i], "zipnote");
+    putchar('\n');
+  }
+  for (i = 0; i < sizeof(text)/sizeof(char *); i++)
+  {
+    printf(text[i], VERSION, REVDATE);
+    putchar('\n');
+  }
+}
+
+/*
+ * XXX put this in version.c
+ */
+
+local void version_info()
+/* Print verbose info about program version and compile time options
+   to stdout. */
+{
+  extent i;             /* counter in text arrays */
+
+  /* Options info array */
+  static ZCONST char *comp_opts[] = {
+#ifdef DEBUG
+    "DEBUG",
+#endif
+    NULL
+  };
+
+  for (i = 0; i < sizeof(copyright)/sizeof(char *); i++)
+  {
+    printf(copyright[i], "zipnote");
+    putchar('\n');
+  }
+
+  for (i = 0; i < sizeof(versinfolines)/sizeof(char *); i++)
+  {
+    printf(versinfolines[i], "ZipNote", VERSION, REVDATE);
+    putchar('\n');
+  }
+
+  version_local();
+
+  puts("ZipNote special compilation options:");
+  for (i = 0; (int)i < (int)(sizeof(comp_opts)/sizeof(char *) - 1); i++)
+  {
+    printf("\t%s\n",comp_opts[i]);
+  }
+  if (i == 0)
+      puts("\t[none]");
+}
+
+
+local void putclean(s, n)
+char *s;                /* string to write to stdout */
+extent n;               /* length of string */
+/* Write the string s to stdout, filtering out control characters that are
+   not tab or newline (mainly to remove carriage returns), and prefix MARK's
+   and backslashes with a backslash.  Also, terminate with a newline if
+   needed. */
+{
+  int c;                /* next character in string */
+  int e;                /* last character written */
+
+  e = '\n';                     /* if empty, write nothing */
+  while (n--)
+  {
+    c = *(uch *)s++;
+    if (c == MARK || c == '\\')
+      putchar('\\');
+    if (c >= ' ' || c == '\t' || c == '\n')
+      { e=c; putchar(e); }
+  }
+  if (e != '\n')
+    putchar('\n');
+}
+
+
+local char *zgetline(buf, size)
+char *buf;
+extent size;
+/* Read a line of text from stdin into string buffer 'buf' of size 'size'.
+   In case of buffer overflow or EOF, a NULL pointer is returned. */
+{
+    char *line;
+    unsigned len;
+
+    line = fgets(buf, size, stdin);
+    if (line != NULL && (len = strlen(line)) > 0) {
+        if (len == size-1 && line[len-1] != '\n') {
+            /* buffer is full and record delimiter not seen -> overflow */
+            line = NULL;
+        } else {
+            /* delete trailing record delimiter */
+            if (line[len-1] == '\n') line[len-1] = '\0';
+        }
+    }
+    return line;
+}
+
+
+local int catalloc(a, s)
+char * far *a;          /* pointer to a pointer to a malloc'ed string */
+char *s;                /* string to concatenate on a */
+/* Concatentate the string s to the malloc'ed string pointed to by a.
+   Preprocess s by removing backslash escape characters. */
+{
+  char *p;              /* temporary pointer */
+  char *q;              /* temporary pointer */
+
+  for (p = q = s; *q; *p++ = *q++)
+    if (*q == '\\' && *(q+1))
+      q++;
+  *p = 0;
+  if ((p = malloc(strlen(*a) + strlen(s) + 3)) == NULL)
+    return ZE_MEM;
+  strcat(strcat(strcpy(p, *a), **a ? "\r\n" : ""), s);
+  free((zvoid *)*a);
+  *a = p;
+  return ZE_OK;
+}
+
+
+#ifndef USE_ZIPNOTEMAIN
+int main(argc, argv)
+#else
+int zipnotemain(argc, argv)
+#endif
+int argc;               /* number of tokens in command line */
+char **argv;            /* command line tokens */
+/* Write the comments in the zipfile to stdout, or read them from stdin. */
+{
+  char abf[WRBUFSIZ+1]; /* input line buffer */
+  char *a;              /* pointer to line buffer or NULL */
+  zoff_t c;             /* start of central directory */
+  int k;                /* next argument type */
+  char *q;              /* steps through option arguments */
+  int r;                /* arg counter, temporary variable */
+  zoff_t s;             /* length of central directory */
+  int t;                /* attributes of zip file */
+  int w;                /* true if updating zip file from stdin */
+  FILE *x;              /* input file for testing if can write it */
+  struct zlist far *z;  /* steps through zfiles linked list */
+
+#ifdef THEOS
+  setlocale(LC_CTYPE, "I");
+#endif
+
+#ifdef UNICODE_SUPPORT
+# ifdef UNIX
+  /* For Unix, set the locale to UTF-8.  Any UTF-8 locale is
+     OK and they should all be the same.  This allows seeing,
+     writing, and displaying (if the fonts are loaded) all
+     characters in UTF-8. */
+  {
+    char *loc;
+
+    /*
+      loc = setlocale(LC_CTYPE, NULL);
+      printf("  Initial language locale = '%s'\n", loc);
+    */
+
+    loc = setlocale(LC_CTYPE, "en_US.UTF-8");
+
+    /*
+      printf("langinfo %s\n", nl_langinfo(CODESET));
+    */
+
+    if (loc != NULL) {
+      /* using UTF-8 character set so can set UTF-8 GPBF bit 11 */
+      using_utf8 = 1;
+      /*
+        printf("  Locale set to %s\n", loc);
+      */
+    } else {
+      /*
+        printf("  Could not set Unicode UTF-8 locale\n");
+      */
+    }
+  }
+# endif
+#endif
+
+  /* If no args, show help */
+  if (argc == 1)
+  {
+    help();
+    EXIT(ZE_OK);
+  }
+
+  /* Direct info messages to stderr; stdout is used for data output. */
+  mesg = stderr;
+
+  init_upper();           /* build case map table */
+
+  /* Go through args */
+  zipfile = tempzip = NULL;
+  tempzf = NULL;
+  signal(SIGINT, handler);
+#ifdef SIGTERM              /* AMIGA has no SIGTERM */
+  signal(SIGTERM, handler);
+#endif
+#ifdef SIGABRT
+  signal(SIGABRT, handler);
+#endif
+#ifdef SIGBREAK
+  signal(SIGBREAK, handler);
+#endif
+#ifdef SIGBUS
+  signal(SIGBUS, handler);
+#endif
+#ifdef SIGILL
+  signal(SIGILL, handler);
+#endif
+#ifdef SIGSEGV
+  signal(SIGSEGV, handler);
+#endif
+  k = w = 0;
+  for (r = 1; r < argc; r++)
+    if (*argv[r] == '-') {
+      if (argv[r][1])
+        for (q = argv[r]+1; *q; q++)
+          switch (*q)
+          {
+            case 'b':   /* Specify path for temporary file */
+              if (k)
+                ziperr(ZE_PARMS, "use -b before zip file name");
+              else
+                k = 1;          /* Next non-option is path */
+              break;
+            case 'h':   /* Show help */
+              help();  EXIT(ZE_OK);
+            case 'l':  case 'L':  /* Show copyright and disclaimer */
+              license();  EXIT(ZE_OK);
+            case 'q':   /* Quiet operation, suppress info messages */
+              noisy = 0;  break;
+            case 'v':   /* Show version info */
+              version_info();  EXIT(ZE_OK);
+            case 'w':
+              w = 1;  break;
+            default:
+              ziperr(ZE_PARMS, "unknown option");
+          }
+      else
+        ziperr(ZE_PARMS, "zip file cannot be stdin");
+    } else
+      if (k == 0)
+      {
+        if (zipfile == NULL)
+        {
+          if ((zipfile = ziptyp(argv[r])) == NULL)
+            ziperr(ZE_MEM, "was processing arguments");
+        }
+        else
+          ziperr(ZE_PARMS, "can only specify one zip file");
+      }
+      else
+      {
+        tempath = argv[r];
+        k = 0;
+      }
+  if (zipfile == NULL)
+    ziperr(ZE_PARMS, "need to specify zip file");
+
+  if ((in_path = malloc(strlen(zipfile) + 1)) == NULL) {
+    ziperr(ZE_MEM, "input");
+  }
+  strcpy(in_path, zipfile);
+
+  /* Read zip file */
+  if ((r = readzipfile()) != ZE_OK)
+    ziperr(r, zipfile);
+  if (zfiles == NULL)
+    ziperr(ZE_NAME, zipfile);
+
+  /* Put comments to stdout, if not -w */
+  if (!w)
+  {
+    for (z = zfiles; z != NULL; z = z->nxt)
+    {
+      printf("%c %s\n", MARK, z->zname);
+      putclean(z->comment, z->com);
+      printf("%c%s\n", MARK, MARKE);
+    }
+    printf("%c%s\n", MARK, MARKZ);
+    putclean(zcomment, zcomlen);
+    EXIT(ZE_OK);
+  }
+
+  /* If updating comments, make sure zip file is writeable */
+  if ((x = fopen(zipfile, "a")) == NULL)
+    ziperr(ZE_CREAT, zipfile);
+  fclose(x);
+  t = getfileattr(zipfile);
+
+  /* Process stdin, replacing comments */
+  z = zfiles;
+  while ((a = zgetline(abf, WRBUFSIZ+1)) != NULL &&
+         (a[0] != MARK || strcmp(a + 1, MARKZ)))
+  {                                     /* while input and not file comment */
+    if (a[0] != MARK || a[1] != ' ')    /* better be "@ name" */
+      ziperr(ZE_NOTE, "unexpected input");
+    while (z != NULL && strcmp(a + 2, z->zname))
+      z = z->nxt;                       /* allow missing entries in order */
+    if (z == NULL)
+      ziperr(ZE_NOTE, "unknown entry name");
+    if ((a = zgetline(abf, WRBUFSIZ+1)) != NULL && a[0] == MARK && a[1] == '=')
+    {
+      if (z->name != z->iname)
+        free((zvoid *)z->iname);
+      if ((z->iname = malloc(strlen(a+1))) == NULL)
+        ziperr(ZE_MEM, "was changing name");
+#ifdef EBCDIC
+      strtoasc(z->iname, a+2);
+#else
+      strcpy(z->iname, a+2);
+#endif
+
+/*
+ * Don't update z->nam here, we need the old value a little later.....
+ * The update is handled in zipcopy().
+ */
+      a = zgetline(abf, WRBUFSIZ+1);
+    }
+    if (z->com)                         /* change zip entry comment */
+      free((zvoid *)z->comment);
+    z->comment = malloc(1);  *(z->comment) = 0;
+    while (a != NULL && *a != MARK)
+    {
+      if ((r = catalloc(&(z->comment), a)) != ZE_OK)
+        ziperr(r, "was building new zipentry comments");
+      a = zgetline(abf, WRBUFSIZ+1);
+    }
+    z->com = strlen(z->comment);
+    z = z->nxt;                         /* point to next entry */
+  }
+  if (a != NULL)                        /* change zip file comment */
+  {
+    zcomment = malloc(1);  *zcomment = 0;
+    while ((a = zgetline(abf, WRBUFSIZ+1)) != NULL)
+      if ((r = catalloc(&zcomment, a)) != ZE_OK)
+        ziperr(r, "was building new zipfile comment");
+    zcomlen = strlen(zcomment);
+  }
+
+  /* Open output zip file for writing */
+#if defined(UNIX) && !defined(NO_MKSTEMP)
+  {
+    int yd;
+    int i;
+
+    /* use mkstemp to avoid race condition and compiler warning */
+
+    if (tempath != NULL)
+    {
+      /* if -b used to set temp file dir use that for split temp */
+      if ((tempzip = malloc(strlen(tempath) + 12)) == NULL) {
+        ZIPERR(ZE_MEM, "allocating temp filename");
+      }
+      strcpy(tempzip, tempath);
+      if (lastchar(tempzip) != '/')
+        strcat(tempzip, "/");
+    }
+    else
+    {
+      /* create path by stripping name and appending template */
+      if ((tempzip = malloc(strlen(zipfile) + 12)) == NULL) {
+      ZIPERR(ZE_MEM, "allocating temp filename");
+      }
+      strcpy(tempzip, zipfile);
+      for(i = strlen(tempzip); i > 0; i--) {
+        if (tempzip[i - 1] == '/')
+          break;
+      }
+      tempzip[i] = '\0';
+    }
+    strcat(tempzip, "ziXXXXXX");
+
+    if ((yd = mkstemp(tempzip)) == EOF) {
+      ZIPERR(ZE_TEMP, tempzip);
+    }
+    if ((tempzf = y = fdopen(yd, FOPW)) == NULL) {
+      ZIPERR(ZE_TEMP, tempzip);
+    }
+  }
+#else
+  if ((tempzf = y = fopen(tempzip = tempname(zipfile), FOPW)) == NULL)
+    ziperr(ZE_TEMP, tempzip);
+#endif
+
+  /* Open input zip file again, copy preamble if any */
+  if ((in_file = fopen(zipfile, FOPR)) == NULL)
+    ziperr(ZE_NAME, zipfile);
+
+  if (zipbeg && (r = bfcopy(zipbeg)) != ZE_OK)
+    ziperr(r, r == ZE_TEMP ? tempzip : zipfile);
+  tempzn = zipbeg;
+
+  /* Go through local entries, copying them over as is */
+  fix = 3; /* needed for zipcopy if name changed */
+  for (z = zfiles; z != NULL; z = z->nxt) {
+    if ((r = zipcopy(z)) != ZE_OK)
+      ziperr(r, "was copying an entry");
+  }
+  fclose(in_file);
+
+  /* Write central directory and end of central directory with new comments */
+  if ((c = zftello(y)) == (zoff_t)-1)    /* get start of central */
+    ziperr(ZE_TEMP, tempzip);
+  for (z = zfiles; z != NULL; z = z->nxt)
+    if ((r = putcentral(z)) != ZE_OK)
+      ziperr(r, tempzip);
+  if ((s = zftello(y)) == (zoff_t)-1)    /* get end of central */
+    ziperr(ZE_TEMP, tempzip);
+  s -= c;                       /* compute length of central */
+  if ((r = putend((zoff_t)zcount, s, c, zcomlen, zcomment)) != ZE_OK)
+    ziperr(r, tempzip);
+  tempzf = NULL;
+  if (fclose(y))
+    ziperr(ZE_TEMP, tempzip);
+  if ((r = replace(zipfile, tempzip)) != ZE_OK)
+  {
+    zipwarn("new zip file left as: ", tempzip);
+    free((zvoid *)tempzip);
+    tempzip = NULL;
+    ziperr(r, "was replacing the original zip file");
+  }
+  free((zvoid *)tempzip);
+  tempzip = NULL;
+  setfileattr(zipfile, t);
+#ifdef RISCOS
+  /* Set the filetype of the zipfile to &DDC */
+  setfiletype(zipfile,0xDDC);
+#endif
+  free((zvoid *)zipfile);
+  zipfile = NULL;
+
+  /* Done! */
+  RETURN(0);
+}
Index: a/infozip/zip/create-3.0-zipnote-patch/zip30-new
===================================================================
--- a/infozip/zip/create-3.0-zipnote-patch/zip30-new	(nonexistent)
+++ a/infozip/zip/create-3.0-zipnote-patch/zip30-new	(revision 5)

Property changes on: a/infozip/zip/create-3.0-zipnote-patch/zip30-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/zip/create-3.0-zipnote-patch
===================================================================
--- a/infozip/zip/create-3.0-zipnote-patch	(nonexistent)
+++ a/infozip/zip/create-3.0-zipnote-patch	(revision 5)

Property changes on: a/infozip/zip/create-3.0-zipnote-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/zip/patches/README
===================================================================
--- a/infozip/zip/patches/README	(nonexistent)
+++ a/infozip/zip/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/infozip/zip/patches
===================================================================
--- a/infozip/zip/patches	(nonexistent)
+++ a/infozip/zip/patches	(revision 5)

Property changes on: a/infozip/zip/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip/zip
===================================================================
--- a/infozip/zip	(nonexistent)
+++ a/infozip/zip	(revision 5)

Property changes on: a/infozip/zip
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/infozip
===================================================================
--- a/infozip	(nonexistent)
+++ a/infozip	(revision 5)

Property changes on: a/infozip
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/inih/Makefile
===================================================================
--- a/inih/Makefile	(nonexistent)
+++ a/inih/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/inih
+
+versions    = 53
+pkgname     = inih
+suffix      = tar.xz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: a/inih
===================================================================
--- a/inih	(nonexistent)
+++ a/inih	(revision 5)

Property changes on: a/inih
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/jbigkit/Makefile
===================================================================
--- a/jbigkit/Makefile	(nonexistent)
+++ a/jbigkit/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/jbigkit
+
+versions    = 2.1
+pkgname     = jbigkit
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/jbigkit-2.1-make.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-2.1-make-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/jbigkit/create-2.1-make-patch/create.patch.sh
===================================================================
--- a/jbigkit/create-2.1-make-patch/create.patch.sh	(nonexistent)
+++ a/jbigkit/create-2.1-make-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=2.1
+
+tar --files-from=file.list -xzvf ../jbigkit-$VERSION.tar.gz
+mv jbigkit-$VERSION jbigkit-$VERSION-orig
+
+cp -rf ./jbigkit-$VERSION-new ./jbigkit-$VERSION
+
+diff --unified -Nr  jbigkit-$VERSION-orig  jbigkit-$VERSION > jbigkit-$VERSION-make.patch
+
+mv jbigkit-$VERSION-make.patch ../patches
+
+rm -rf ./jbigkit-$VERSION
+rm -rf ./jbigkit-$VERSION-orig

Property changes on: a/jbigkit/create-2.1-make-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/jbigkit/create-2.1-make-patch/file.list
===================================================================
--- a/jbigkit/create-2.1-make-patch/file.list	(nonexistent)
+++ a/jbigkit/create-2.1-make-patch/file.list	(revision 5)
@@ -0,0 +1,3 @@
+jbigkit-2.1/Makefile
+jbigkit-2.1/libjbig/Makefile
+jbigkit-2.1/pbmtools/Makefile
Index: a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/Makefile
===================================================================
--- a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/Makefile	(nonexistent)
+++ a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/Makefile	(revision 5)
@@ -0,0 +1,44 @@
+# Unix makefile for JBIG-KIT
+
+# Select an ANSI/ISO C compiler here, GNU gcc is recommended
+# CC = gcc
+
+# Options for the compiler: A high optimization level is suggested
+CFLAGS += -O2 -W -Wno-unused-result
+# CFLAGS = -O -g -W -Wall -Wno-unused-result -ansi -pedantic # -DDEBUG
+
+export CC CFLAGS
+
+VERSION=2.1
+
+all: lib pbm
+	@echo "Enter 'make test' in order to start some automatic tests."
+
+lib:
+	cd libjbig && $(MAKE) -e
+
+pbm: lib
+	cd pbmtools && $(MAKE) -e
+
+test: lib pbm
+	cd libjbig  && $(MAKE) test
+	cd pbmtools && $(MAKE) test
+
+analyze:
+	cd libjbig  && $(MAKE) analyze
+	cd pbmtools && $(MAKE) analyze
+
+clean:
+	rm -f *~ core
+	cd libjbig  && $(MAKE) clean
+	cd pbmtools && $(MAKE) clean
+
+distribution:
+	rm -rf jbigkit-$(VERSION)
+	git archive v$(VERSION) --prefix jbigkit-$(VERSION)/ | tar xvf -
+	make -C jbigkit-$(VERSION)/pbmtools txt
+	tar cvaf jbigkit-$(VERSION).tar.gz jbigkit-$(VERSION)
+
+release:
+	rsync -t jbigkit-$(VERSION).tar.gz $(HOME)/public_html/download/
+	rsync -t jbigkit-$(VERSION)/CHANGES $(HOME)/public_html/jbigkit/
Index: a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/libjbig/Makefile
===================================================================
--- a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/libjbig/Makefile	(nonexistent)
+++ a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/libjbig/Makefile	(revision 5)
@@ -0,0 +1,55 @@
+# Unix makefile for the JBIG-KIT library
+
+# Select an ANSI/ISO C compiler here, GNU gcc is recommended
+# CC = gcc
+
+# Options for the compiler: A high optimization level is suggested
+# CFLAGS = -g -O -W -Wall -ansi -pedantic # --coverage
+
+all: libjbig.a libjbig85.a tstcodec tstcodec85
+
+tstcodec: tstcodec.o jbig.o jbig_ar.o
+	$(CC) $(CFLAGS) -o tstcodec tstcodec.o jbig.o jbig_ar.o
+
+tstcodec85: tstcodec85.o jbig85.o jbig_ar.o
+	$(CC) $(CFLAGS) -o tstcodec85 tstcodec85.o jbig85.o jbig_ar.o
+
+libjbig.a: jbig.o jbig_ar.o
+	rm -f libjbig.a
+	ar rc libjbig.a jbig.o jbig_ar.o
+	-ranlib libjbig.a
+
+libjbig85.a: jbig85.o jbig_ar.o
+	rm -f libjbig85.a
+	ar rc libjbig85.a jbig85.o jbig_ar.o
+	-ranlib libjbig85.a
+
+jbig.o: jbig.c jbig.h jbig_ar.h
+jbig85.o: jbig85.c jbig85.h jbig_ar.h
+jbig_ar.o: jbig_ar.c jbig_ar.h
+tstcodec.o: tstcodec.c jbig.h
+tstcodec85.o: tstcodec85.c jbig85.h
+
+update-po: jbig.c jbig85.c Makefile
+	xgettext -ojbig.pot -k_ \
+	  --copyright-holder='Markus Kuhn' \
+	  --msgid-bugs-address='http://www.cl.cam.ac.uk/~mgk25/jbigkit/' \
+	  --package-name jbigkit \
+	jbig.c jbig85.c
+	cd po && for po in *.po ; do \
+	  msgmerge --update $$po ../jbig.pot ; done
+
+analyze:
+	clang --analyze *.c
+
+test: tstcodec tstcodec85
+	./tstcodec
+	./tstcodec85
+
+t82test.pbm: tstcodec
+	./tstcodec $@
+
+clean:
+	rm -f *.o *.gcda *.gcno *.gcov *.plist *~ core gmon.out dbg_d\=??.pbm
+	rm -f t82test.pbm
+	rm -f tstcodec tstcodec85
Index: a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/libjbig
===================================================================
--- a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/libjbig	(nonexistent)
+++ a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/libjbig	(revision 5)

Property changes on: a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/libjbig
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/pbmtools/Makefile
===================================================================
--- a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/pbmtools/Makefile	(nonexistent)
+++ a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/pbmtools/Makefile	(revision 5)
@@ -0,0 +1,166 @@
+# Unix makefile for the JBIG-KIT PBM tools
+
+# Select an ANSI/ISO C compiler here, e.g. GNU gcc is recommended
+# CC = gcc
+
+# Options for the compiler
+# CFLAGS = -g -O -W -Wall -Wno-unused-result -ansi -pedantic # --coverage
+# CPPFLAGS += -I../libjbig
+
+.SUFFIXES: .1 .5 .txt $(SUFFIXES)
+.PHONY: txt test test82 test85 clean
+
+all: pbmtojbg jbgtopbm pbmtojbg85 jbgtopbm85 txt
+
+txt: pbmtojbg.txt jbgtopbm.txt pbm.txt pgm.txt
+
+pbmtojbg: pbmtojbg.o ../libjbig/libjbig.a
+	$(CC) $(CFLAGS) -o pbmtojbg pbmtojbg.o -L../libjbig $(LDFLAGS) -ljbig
+
+jbgtopbm: jbgtopbm.o ../libjbig/libjbig.a
+	$(CC) $(CFLAGS) -o jbgtopbm jbgtopbm.o -L../libjbig $(LDFLAGS) -ljbig
+
+pbmtojbg85: pbmtojbg85.o ../libjbig/libjbig85.a
+	$(CC) $(CFLAGS) -o pbmtojbg85 pbmtojbg85.o -L../libjbig $(LDFLAGS) -ljbig85
+
+jbgtopbm85: jbgtopbm85.o ../libjbig/libjbig85.a
+	$(CC) $(CFLAGS) -o jbgtopbm85 jbgtopbm85.o -L../libjbig $(LDFLAGS) -ljbig85
+
+jbgtopbm.o: jbgtopbm.c ../libjbig/jbig.h
+pbmtojbg.o: pbmtojbg.c ../libjbig/jbig.h
+jbgtopbm85.o: jbgtopbm85.c ../libjbig/jbig85.h
+pbmtojbg85.o: pbmtojbg85.c ../libjbig/jbig85.h
+
+../libjbig/libjbig.a: ../libjbig/jbig.c ../libjbig/jbig.h \
+	../libjbig/jbig_ar.c ../libjbig/jbig_ar.h
+	make -C ../libjbig libjbig.a
+
+../libjbig/libjbig85.a: ../libjbig/jbig85.c ../libjbig/jbig85.h \
+	../libjbig/jbig_ar.c ../libjbig/jbig_ar.h
+	make -C ../libjbig libjbig85.a
+
+analyze:
+	clang $(CPPFLAGS) --analyze *.c
+
+test: test82 test85
+
+test82: pbmtojbg jbgtopbm
+	make IMG=ccitt1     OPTIONSP=                      dotest1
+	make IMG=ccitt2     OPTIONSP=                      dotest1
+	make IMG=ccitt3     OPTIONSP=                      dotest1
+	make IMG=xvlogo    "OPTIONSP=-d 3"                 dotest1
+	make IMG=sandra     OPTIONSP=      OPTIONSJ=       dotest2g
+	make IMG=sandra     OPTIONSP=-b    OPTIONSJ=-b     dotest2g
+	make IMG=sandra     OPTIONSP=-q    OPTIONSJ=       dotest2g
+	make IMG=sandra    "OPTIONSP=-o 0" OPTIONSJ=       dotest2g
+	make IMG=sandra    "OPTIONSP=-o 2" OPTIONSJ=       dotest2g
+	make IMG=multi      OPTIONSP=      OPTIONSJ=       dotest2g
+	make IMG=multi      OPTIONSP=-b    OPTIONSJ=-b     dotest2g
+	make IMG=mx        "OPTIONSP=-q -s 3 -m 128"       dotest1
+	make IMG=mx        "OPTIONSP=-q -s 3 -m 128"       dotest2b
+	make IMG=mx        "OPTIONSP=-q -s 3 -m 128 -p 92" dotest2b
+	make IMG=mx        "OPTIONSP=-q -Y -1"             dotest2b
+	make IMG=mx        "OPTIONSP=-Y -1"                dotest2b
+	rm -f test-*.jbg test-*.pbm test-*.pgm
+	./jbgtopbm ../examples/ccitt1.jbg | ./pbmtojbg > test-ccitt1.jbg
+	cmp ../examples/ccitt1.jbg test-ccitt1.jbg
+	rm -f test-*.jbg test-*.pbm test-*.pgm
+	./jbgtopbm < ../examples/ccitt1.jbg | ./pbmtojbg - test-ccitt1.jbg
+	cmp ../examples/ccitt1.jbg test-ccitt1.jbg
+	rm -f test-*.jbg test-*.pbm test-*.pgm
+	./jbgtopbm < ../examples/ccitt1.jbg - test-ccitt1.pbm ; \
+	  ./pbmtojbg test-ccitt1.pbm test-ccitt1.jbg
+	cmp ../examples/ccitt1.jbg test-ccitt1.jbg
+	rm -f test-*.jbg test-*.pbm test-*.pgm
+	./jbgtopbm ../examples/ccitt1.jbg test-ccitt1.pbm ; \
+	  ./pbmtojbg test-ccitt1.pbm >test-ccitt1.jbg
+	cmp ../examples/ccitt1.jbg test-ccitt1.jbg
+	rm -f test-*.jbg test-*.pbm test-*.pgm
+	@echo
+	@echo "The pbmtools have PASSED the functional tests. Good!"
+	@echo
+
+dotest1:
+	./jbgtopbm ../examples/$(IMG).jbg test-$(IMG).pbm
+	./pbmtojbg $(OPTIONSP) test-$(IMG).pbm test-$(IMG).jbg
+	cmp test-$(IMG).jbg ../examples/$(IMG).jbg
+
+dotest2b:
+	./pbmtojbg $(OPTIONSP) test-$(IMG).pbm test-$(IMG).jbg
+	./jbgtopbm $(OPTIONSJ) test-$(IMG).jbg test-$(IMG)-2.pbm
+	cmp test-$(IMG).pbm test-$(IMG)-2.pbm
+
+dotest2g:
+	./pbmtojbg $(OPTIONSP) ../examples/$(IMG).pgm test-$(IMG).jbg
+	./jbgtopbm $(OPTIONSJ) test-$(IMG).jbg test-$(IMG).pgm
+	cmp test-$(IMG).pgm ../examples/$(IMG).pgm
+
+test85: pbmtojbg jbgtopbm pbmtojbg85 jbgtopbm85 test-t82.pbm
+	make IMG=t82 "OPTIONSP=-p 0"      dotest85
+	make IMG=t82 "OPTIONSP=-p 8"      dotest85
+	make IMG=t82 "OPTIONSP=-p 8 -r"   dotest85b
+	make IMG=t82 "OPTIONSP=-p 64"     dotest85
+	make IMG=t82 "OPTIONSP=-p 72"     dotest85
+	make IMG=t82 "OPTIONSP=-s 2 -C c" dotest85
+	make IMG=t82 "OPTIONSP=-s 99999"  dotest85
+	make IMG=t82 "OPTIONSP=-Y 9999 0" dotest85
+	make IMG=t82 "OPTIONSP=-Y 1951 0" dotest85
+	make IMG=t82 "OPTIONSP=-Y -1 127" dotest85
+	make IMG=t82 "OPTIONSP=-Y -1 128" dotest85
+	make IMG=t82 "OPTIONSP=-Y -1 1919" dotest85
+	make IMG=t82 "OPTIONSP=-Y -1 1920" dotest85
+	make IMG=t82 "OPTIONSP=-Y -1 1949" dotest85
+	make IMG=t82 "OPTIONSP=-Y -1 1950" dotest85
+	make IMG=ccitt1 dotest85
+	make IMG=ccitt2 dotest85
+	make IMG=ccitt3 dotest85
+	rm -f test-*.jbg test-*.jbg85 test-*.pbm
+	@echo
+	@echo "The T.85 pbmtools have PASSED the functional tests. Good!"
+	@echo
+
+dotest85: test-$(IMG).pbm
+	./pbmtojbg85  $(OPTIONSP) test-$(IMG).pbm test-$(IMG).jbg85
+	ls -l test-$(IMG).jbg85
+	./jbgtopbm test-$(IMG).jbg85 test-$(IMG).pbm85
+	cmp test-$(IMG).pbm test-$(IMG).pbm85
+	rm test-$(IMG).pbm85
+	./jbgtopbm85 test-$(IMG).jbg85 test-$(IMG).pbm85
+	cmp test-$(IMG).pbm test-$(IMG).pbm85
+	rm test-$(IMG).pbm85
+	./jbgtopbm85 -B 1 test-$(IMG).jbg85 test-$(IMG).pbm85
+	cmp test-$(IMG).pbm test-$(IMG).pbm85
+
+dotest85b: test-$(IMG).pbm
+	./pbmtojbg -f $(OPTIONSP) test-$(IMG).pbm test-$(IMG).jbg85
+	ls -l test-$(IMG).jbg85
+	./jbgtopbm test-$(IMG).jbg85 test-$(IMG).pbm85
+	cmp test-$(IMG).pbm test-$(IMG).pbm85
+	rm test-$(IMG).pbm85
+	./jbgtopbm85 test-$(IMG).jbg85 test-$(IMG).pbm85
+	cmp test-$(IMG).pbm test-$(IMG).pbm85
+	rm test-$(IMG).pbm85
+	./jbgtopbm85 -B 1 test-$(IMG).jbg85 test-$(IMG).pbm85
+	cmp test-$(IMG).pbm test-$(IMG).pbm85
+
+test-%.pbm: ../examples/%.jbg
+	./jbgtopbm $< $@
+
+test-t82.pbm:
+	make -C ../libjbig tstcodec
+	../libjbig/tstcodec $@
+
+FOPT=-c 1000 -p 300000 -m 3
+fuzz: test-t82.pbm
+	while \
+	  ./pbmtojbg -f test-t82.pbm | ./jbgfuzz.pl $(FOPT) && \
+	  ./pbmtojbg test-t82.pbm | ./jbgfuzz.pl $(FOPT) -d jbgtopbm ; \
+	do true; done
+
+.1.txt .5.txt:
+	groff -man -Tascii -P -c -P -b -P -u $< >$@
+
+clean:
+	rm -f *.o *~ core pbmtojbg jbgtopbm pbmtojbg85 jbgtopbm85
+	rm -f test-*.jbg test-*.pbm test-*.pgm test-*.jbg85 test-*.pbm85
+	rm -f *.gcda *.gcno *.plist
Index: a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/pbmtools
===================================================================
--- a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/pbmtools	(nonexistent)
+++ a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/pbmtools	(revision 5)

Property changes on: a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new/pbmtools
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new
===================================================================
--- a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new	(nonexistent)
+++ a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new	(revision 5)

Property changes on: a/jbigkit/create-2.1-make-patch/jbigkit-2.1-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/jbigkit/create-2.1-make-patch
===================================================================
--- a/jbigkit/create-2.1-make-patch	(nonexistent)
+++ a/jbigkit/create-2.1-make-patch	(revision 5)

Property changes on: a/jbigkit/create-2.1-make-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/jbigkit/patches/README
===================================================================
--- a/jbigkit/patches/README	(nonexistent)
+++ a/jbigkit/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/jbigkit/patches
===================================================================
--- a/jbigkit/patches	(nonexistent)
+++ a/jbigkit/patches	(revision 5)

Property changes on: a/jbigkit/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/jbigkit
===================================================================
--- a/jbigkit	(nonexistent)
+++ a/jbigkit	(revision 5)

Property changes on: a/jbigkit
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/jfsutils/Makefile
===================================================================
--- a/jfsutils/Makefile	(nonexistent)
+++ a/jfsutils/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/jfsutils
+
+versions    = 1.1.15
+pkgname     = jfsutils
+suffix      = tar.gz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/jfsutils-1.1.15.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-1.1.15-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/jfsutils/create-1.1.15-patch/create.patch.sh
===================================================================
--- a/jfsutils/create-1.1.15-patch/create.patch.sh	(nonexistent)
+++ a/jfsutils/create-1.1.15-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=1.1.15
+
+tar --files-from=file.list -xzvf ../jfsutils-$VERSION.tar.gz
+mv jfsutils-$VERSION jfsutils-$VERSION-orig
+
+cp -rf ./jfsutils-$VERSION-new ./jfsutils-$VERSION
+
+diff --unified -Nr  jfsutils-$VERSION-orig  jfsutils-$VERSION > jfsutils-$VERSION.patch
+
+mv jfsutils-$VERSION.patch ../patches
+
+rm -rf ./jfsutils-$VERSION
+rm -rf ./jfsutils-$VERSION-orig

Property changes on: a/jfsutils/create-1.1.15-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/jfsutils/create-1.1.15-patch/file.list
===================================================================
--- a/jfsutils/create-1.1.15-patch/file.list	(nonexistent)
+++ a/jfsutils/create-1.1.15-patch/file.list	(revision 5)
@@ -0,0 +1,5 @@
+jfsutils-1.1.15/fscklog/extract.c
+jfsutils-1.1.15/libfs/devices.c
+jfsutils-1.1.15/libfs/devices.h
+jfsutils-1.1.15/libfs/log_dump.c
+jfsutils-1.1.15/libfs/logredo.c
Index: a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/fscklog/extract.c
===================================================================
--- a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/fscklog/extract.c	(nonexistent)
+++ a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/fscklog/extract.c	(revision 5)
@@ -0,0 +1,984 @@
+/*
+ *   Copyright (c) International Business Machines Corp., 2000-2002
+ *
+ *   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 2 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, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+/*
+ *   COMPONENT_NAME: jfs_fscklog (formerly xchklog)
+ *
+ *      The jfs_fscklog tool provides 2 basic functions - fsck.jfs
+ *      service log extraction and display.  The code here extracts
+ *      the log.
+ *
+ */
+#include <config.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdint.h>
+
+#include "devices.h"
+#include "diskmap.h"
+#include "fsckwsp.h"
+#include "fsck_message.h"
+#include "jfs_endian.h"
+#include "jfs_fscklog.h"
+#include "super.h"
+#include "utilsubs.h"
+#include "xfsck.h"
+
+#define fsck_READ  1
+#define fsck_WRITE 2
+
+extern char file_name[128];
+
+FILE *outfp;
+
+extern struct fscklog_record fscklog_record;
+extern struct fscklog_record *local_recptr;
+
+ /* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+  *
+  * superblock I/O buffer and pointer
+  *
+  */
+struct superblock aggr_superblock;
+struct superblock *sb_ptr;
+
+ /* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+  *
+  * input:  fsck service log I/O buffer
+  * output: fsck extracted service log I/O buffer
+  *
+  */
+char fscklog_buffer[FSCKLOG_BUFSIZE];
+extern char xchklog_buffer[];
+
+ /* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+  *
+  * For message processing
+  *
+  *    values are assigned by the main jfs_fscklog routine
+  */
+extern char *Vol_Label;
+
+ /* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+  *
+  * Device information.
+  *
+  *     values are assigned when (if) the device is opened.
+  */
+FILE *Dev_IOPort;
+unsigned Dev_blksize;
+int Dev_SectorSize;
+
+/* VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
+ *
+ * The following are internal to this file
+ *
+ */
+void extract_service_log(void);
+
+int xchklog_final_processing(void);
+
+int xchklog_fscklog_fill_buffer(void);
+
+int xchklog_initial_processing(struct fscklog_record *);
+
+int open_device_read(const char *);
+
+int open_outfile(void);
+
+int readwrite_device(int64_t, unsigned, unsigned *, void *, int);
+
+void record_msg(char *);
+
+int validate_super(int);
+
+int validate_superblock(void);
+
+/*****************************************************************************
+ * NAME: xchklog
+ *
+ * FUNCTION: Entry point for jfs read aggregate fsck service log
+ *
+ * PARAMETERS:
+ *           local_recptr - fscklog record
+ *
+ * RETURNS:
+ *      success: 0
+ *      failure: something else
+ */
+int xchklog(struct fscklog_record *local_recptr)
+{
+	int rc = 0;
+
+	/*
+	 * some basic initializations
+	 */
+	sb_ptr = &aggr_superblock;
+
+	rc = xchklog_initial_processing(local_recptr);
+
+	if (rc == 0) {
+		/* we have a buffer and the device is open */
+		extract_service_log();
+	}
+
+	if (rc == 0) {
+		rc = xchklog_final_processing();
+	} else {
+		xchklog_final_processing();
+	}
+
+	return (rc);
+}
+
+/***************************************************************************
+ * NAME: extract_service_log
+ *
+ * FUNCTION:
+ *
+ * PARAMETERS:  none
+ *
+ * RETURNS:
+ *      success: 0
+ *      failure: something else
+ */
+void extract_service_log()
+{
+	char *msg_txt;
+	int dsl_rc = 0;
+	char *log_entry;
+	int log_entry_pos;
+	int bytes_left;
+	struct fscklog_entry_hdr *hdptr;
+
+	local_recptr->fscklog_last_read = 0;
+
+	while ((!local_recptr->fscklog_last_read) && (dsl_rc == 0)) {
+
+		dsl_rc = xchklog_fscklog_fill_buffer();
+		local_recptr->this_buffer_last_message = 0;
+		while ((!local_recptr->this_buffer_last_message)
+		       && (dsl_rc == 0)) {
+
+			hdptr = (struct fscklog_entry_hdr *)
+			    (local_recptr->infile_buf_ptr +
+			     local_recptr->infile_buf_data_len);
+			if (hdptr->entry_length == 0) {
+				/* no more entries in this buffer */
+				local_recptr->this_buffer_last_message = -1;
+			} else {
+				/* this entry_length != 0 */
+
+				/* swap if on big endian machine */
+				ujfs_swap_fscklog_entry_hdr(hdptr);
+
+				log_entry = (char *) hdptr;
+				log_entry_pos =
+				    sizeof (struct fscklog_entry_hdr);
+
+				/*
+				 * Each FSCKLOG_BUFSIZE boundary starts a new
+				 * log record.  Otherwise, we depend on a valid
+				 * entry_length to locate the next message.
+				 */
+				bytes_left = local_recptr->infile_buf_length -
+				    local_recptr->infile_buf_data_len;
+				if ((bytes_left < 0)
+				    || (hdptr->entry_length < 0)
+				    || (hdptr->entry_length > bytes_left)) {
+					/* this isn't a valid log record length */
+					send_msg(fsck_CHKLOGINVALRCD);
+					local_recptr->this_buffer_last_message =
+					    -1;
+				} else {
+					/* the log record length looks ok */
+					msg_txt = &log_entry[log_entry_pos];
+
+					/*
+					 * record the message in the output file
+					 */
+					record_msg(msg_txt);
+
+					/*
+					 * set up for the next record
+					 */
+					local_recptr->infile_buf_data_len +=
+					    hdptr->entry_length;
+					/*if (hdptr->msg_num == fsck_SESSEND) {
+						local_recptr->
+						    this_buffer_last_message =
+						    -1;
+						    }*/
+					if (local_recptr->infile_buf_data_len >=
+					    local_recptr->infile_buf_length) {
+						local_recptr->
+						    this_buffer_last_message =
+						    -1;
+					}
+				}
+			}
+		}
+	}
+
+	return;
+}
+
+/***************************************************************************
+ * NAME: xchklog_final_processing
+ *
+ * FUNCTION:  If processing read/write, replicate the superblock and the
+ *            aggregate inode structures (i.e., the Aggregate Inode Map
+ *            and the Aggregate Inode Table).
+ *
+ *            Notify the user about various things.
+ *
+ * PARAMETERS:  none
+ *
+ * RETURNS:
+ *      success: 0
+ *      failure: something else
+ */
+int xchklog_final_processing()
+{
+	int pf_rc = 0;
+
+	/*
+	 * Close the device
+	 */
+	if (local_recptr->device_is_open) {
+		pf_rc = fclose(Dev_IOPort);
+	}
+
+	/*
+	 * Close the output file
+	 */
+	if (local_recptr->outfile_is_open) {
+		/*
+		 * flush the buffer if necessary
+		 */
+		if (local_recptr->outfile_buf_data_len != 0) {
+			fwrite((const void *) (local_recptr->outfile_buf_ptr),
+			       sizeof (char), local_recptr->outfile_buf_length,
+			       outfp);
+		}
+		fclose(outfp);
+	}
+
+	return (pf_rc);
+}
+
+/*****************************************************************************
+ * NAME: fscklog_fill_buffer
+ *
+ * FUNCTION:  If the current fsck session has write access to the aggregate,
+ *            and if the in-aggregate fsck log is not full, write the
+ *            contents of the current fscklog buffer into the in-aggregate
+ *            fsck log.
+ *
+ * PARAMETERS:  none
+ *
+ * NOTES:  o Unlike most _put_ routines in this module, fscklog_put_buffer
+ *           actually writes to the device.  This is done because the fsck
+ *           log contains information which provides crucial serviceability
+ *           should the fsck session be interrupted.
+ *
+ *         o Errors here are recorded in the control page of the fsck
+ *           in-aggregate workspace but never affect other fsck processing.
+ *
+ * RETURNS:
+ *      success: 0
+ *      failure: something else
+ */
+int xchklog_fscklog_fill_buffer()
+{
+	int flfb_rc = 0;
+	int io_rc = 0;
+	unsigned bytes_read = 0;
+	unsigned log_bytes_left;
+
+	io_rc = readwrite_device(local_recptr->infile_agg_offset,
+				 local_recptr->infile_buf_length,
+				 &bytes_read,
+				 (void *) local_recptr->infile_buf_ptr,
+				 fsck_READ);
+
+	if ((io_rc != 0)
+	    || (bytes_read != (unsigned) local_recptr->infile_buf_length)) {
+		/*
+		 * write failed or didn't read
+		 * correct number of bytes
+		 */
+		send_msg(fsck_URCVWRT, fsck_ref_msg(fsck_metadata), Vol_Label);
+
+		send_msg(fsck_ERRONLOG, FSCK_BADREAD_FSCKLOG, io_rc, fsck_READ,
+			 (long long) local_recptr->infile_agg_offset,
+			 (long int) local_recptr->infile_buf_length,
+			 (long int) bytes_read);
+	}
+	/*
+	 * We want to reset the buffer no matter what.  If is useful
+	 * to keep going because the next section may be readable.
+	 */
+	local_recptr->infile_agg_offset += local_recptr->infile_buf_length;
+	local_recptr->infile_log_offset += local_recptr->infile_buf_length;
+	local_recptr->infile_buf_data_len = 0;
+
+	log_bytes_left = (local_recptr->ondev_fscklog_byte_length / 2) -
+	    local_recptr->infile_log_offset;
+	if (log_bytes_left < local_recptr->infile_buf_length) {
+		/* this is the last one */
+		local_recptr->fscklog_last_read = -1;
+	}
+	return (flfb_rc);
+}
+
+/*****************************************************************************
+ * NAME: xchklog_initial_processing
+ *
+ * FUNCTION: Parse and verify invocation parameters.
+ *           Open the device and verify that it contains a JFS file system.
+ *           Read the chkdsk workspace control page.
+ *           Calculate interesting aggregate offsets.
+ *
+ *
+ * PARAMETERS:  as specified to main()
+ *
+ * NOTES:
+ *
+ * RETURNS:
+ *      success: 0
+ *      failure: something else
+ */
+int xchklog_initial_processing(struct fscklog_record *local_recptr)
+{
+	int pi_rc = 0;
+
+	/*
+	 * Initialize the fscklog control block
+	 */
+	local_recptr->infile_buf_length = FSCKLOG_BUFSIZE;
+	local_recptr->infile_buf_ptr = fscklog_buffer;
+	local_recptr->outfile_buf_length = XCHKLOG_BUFSIZE;
+	local_recptr->outfile_buf_ptr = xchklog_buffer;
+
+	/*
+	 * Open the device and verify that it contains a valid JFS aggregate
+	 * If it does, check/repair the superblock.
+	 */
+	pi_rc = open_device_read(Vol_Label);
+
+	if (pi_rc != 0) {
+		/*device open failed */
+		send_msg(fsck_CNTRESUPB);
+	} else {
+		/* device is open */
+		local_recptr->device_is_open = 1;
+		pi_rc = validate_superblock();
+		if (pi_rc == 0) {
+			/* a valid superblock */
+
+			/*
+			 * add some stuff to the local record which is based on
+			 * superblock fields
+			 */
+
+			/* length of the on-device fsck service log */
+			local_recptr->ondev_fscklog_byte_length =
+			    sb_ptr->s_fsckloglen * sb_ptr->s_bsize;
+			/* length of the on-device fsck service log */
+			local_recptr->ondev_fscklog_fsblk_length =
+			    sb_ptr->s_fsckloglen;
+			/* length of the on-device fsck workspace */
+			local_recptr->ondev_wsp_fsblk_length =
+			    lengthPXD(&(sb_ptr->s_fsckpxd)) -
+			    local_recptr->ondev_fscklog_fsblk_length;
+			/* length of the on-device fsck workspace */
+			local_recptr->ondev_wsp_byte_length =
+			    local_recptr->ondev_wsp_fsblk_length *
+			    sb_ptr->s_bsize;
+			/* aggregate block offset of the on-device fsck workspace */
+			local_recptr->ondev_wsp_fsblk_offset =
+			    addressPXD(&(sb_ptr->s_fsckpxd));
+			/* byte offset of the on-device fsck workspace */
+			local_recptr->ondev_wsp_byte_offset =
+			    local_recptr->ondev_wsp_fsblk_offset *
+			    sb_ptr->s_bsize;
+			/* aggregate block offset of the on-device fsck workspace */
+			local_recptr->ondev_fscklog_fsblk_offset =
+			    local_recptr->ondev_wsp_fsblk_offset +
+			    local_recptr->ondev_wsp_fsblk_length;
+			/* byte offset of the on-device fsck workspace */
+			local_recptr->ondev_fscklog_byte_offset =
+			    local_recptr->ondev_wsp_byte_offset +
+			    local_recptr->ondev_wsp_byte_length;
+			/*
+			 * The offsets now assume the most recent log is 1st in the
+			 * aggregate fsck service log space.  Adjust if needed.
+			 */
+			if (local_recptr->which_log == NEWLOG) {
+				/* most recent wanted */
+				if (sb_ptr->s_fscklog == 2) {
+					/* the 2nd is most recent */
+					local_recptr->
+					    ondev_fscklog_fsblk_offset +=
+					    local_recptr->
+					    ondev_fscklog_fsblk_length / 2;
+					local_recptr->
+					    ondev_fscklog_byte_offset +=
+					    local_recptr->
+					    ondev_fscklog_byte_length / 2;
+				}
+			} else {
+				/* previous log wanted */
+				if (sb_ptr->s_fscklog != 2) {
+					/* the 2nd is not most recent */
+					local_recptr->
+					    ondev_fscklog_fsblk_offset +=
+					    local_recptr->
+					    ondev_fscklog_fsblk_length / 2;
+					local_recptr->
+					    ondev_fscklog_byte_offset +=
+					    local_recptr->
+					    ondev_fscklog_byte_length / 2;
+				}
+			}
+			local_recptr->infile_agg_offset =
+			    local_recptr->ondev_fscklog_byte_offset;
+
+			pi_rc = open_outfile();
+		}
+	}
+
+	if (local_recptr->which_log == NEWLOG) {
+		send_msg(fsck_CHKLOGNEW);
+	} else {
+		send_msg(fsck_CHKLOGOLD);
+	}
+
+	return (pi_rc);
+}
+
+/*****************************************************************************
+ * NAME: open_device_read
+ *
+ * FUNCTION:  Open the specified device for read access.
+ *
+ * PARAMETERS:
+ *      Device  - input - the device specification
+ *
+ * NOTES:
+ *
+ * RETURNS:
+ *      success: 0
+ *      failure: something else
+ */
+int open_device_read(const char *Device)
+{
+	Dev_IOPort = fopen(Device, "r");
+	if (Dev_IOPort == NULL) {
+		send_msg(fsck_DEVOPENRDRC, ERROR_FILE_NOT_FOUND);
+		return ERROR_FILE_NOT_FOUND;
+	}
+
+	Dev_blksize = Dev_SectorSize = PBSIZE;
+	return 0;
+}
+
+/*****************************************************************************
+ * NAME: open_outfile
+ *
+ * FUNCTION:  Open the output file.
+ *
+ * PARAMETERS:
+ *      Device  - input - the device specification
+ *
+ * RETURNS:
+ *      success: 0
+ *      failure: something else
+ */
+int open_outfile()
+{
+	int openof_rc = 0;
+
+	if (!local_recptr->file_name_specified) {
+		/* no output file name given */
+		if (local_recptr->which_log == NEWLOG) {
+			/* most recent wanted */
+			memcpy((void *) file_name, (void *) default_logfile_new,
+			       default_logfile_name_len);
+		} else {
+			/* prior log wanted */
+			memcpy((void *) file_name, (void *) default_logfile_old,
+			       default_logfile_name_len);
+		}
+	}
+
+	outfp = fopen(file_name, "w");
+	if (outfp == NULL) {
+		/* output file open failed */
+		openof_rc = XCHKLOG_CANTOPENOUTFILE;
+		send_msg(fsck_XCHKLOGOPNFAIL, file_name);
+	} else {
+		/* output file is open */
+		local_recptr->outfile_is_open = -1;
+
+		/*
+		 * write the eyecatcher into the output buffer
+		 */
+		memcpy((void *) (local_recptr->outfile_buf_ptr),
+		       (void *) jfs_chklog_eyecatcher, 16);
+		local_recptr->outfile_buf_data_len = 16;
+
+		/*
+		 * announce the output file name
+		 */
+		if (local_recptr->which_log == NEWLOG) {
+			/* most recent */
+			send_msg(fsck_XCHKLOGNEW, file_name);
+		} else {
+			/* previous */
+			send_msg(fsck_XCHKLOGOLD, file_name);
+		}
+	}
+	return (openof_rc);
+}
+
+/*****************************************************************************
+ * NAME: readwrite_device
+ *
+ * FUNCTION:  Read data from or write data to the device on which the
+ *            aggregate resides.
+ *
+ * PARAMETERS:
+ *      dev_offset           - input - the offset, in bytes, into the aggregate
+ *                                     of the data to read or to which to write
+ *                                     the data.
+ *      requested_data_size  - input - the number of bytes requested
+ *      actual_data_size     - input - pointer to a variable in which to return
+ *                                     the number of bytes actually read or
+ *                                     written
+ *      data_buffer          - input - the address of the buffer in which to
+ *                                     put the data or from which to write
+ *                                     the data
+ *      mode                 - input - { fsck_READ | fsck_WRITE }
+ *
+ * NOTES:  This routine also exists in fsck code.  When there is time,
+ *	   examine both copies for differences and put the combined
+ *         copy in libfs to eliminate extra code.
+ *
+ * RETURNS:
+ *      success: 0
+ *      failure: something else
+ */
+int readwrite_device(int64_t dev_offset,
+		     unsigned requested_data_size,
+		     unsigned *actual_data_size, void *data_buffer, int mode)
+{
+	int rwdb_rc = 0;
+
+	if ((dev_offset % Dev_SectorSize)
+	    || (requested_data_size % Dev_SectorSize)) {
+		rwdb_rc = FSCK_FAILED_SEEK;
+	} else {
+		switch (mode) {
+		case fsck_READ:
+			rwdb_rc =
+			    ujfs_rw_diskblocks(Dev_IOPort, dev_offset,
+					       requested_data_size, data_buffer,
+					       GET);
+			break;
+		case fsck_WRITE:
+			rwdb_rc =
+			    ujfs_rw_diskblocks(Dev_IOPort, dev_offset,
+					       requested_data_size, data_buffer,
+					       PUT);
+			break;
+		default:
+			rwdb_rc = FSCK_INTERNAL_ERROR_3;
+			break;
+		}
+	}
+
+	if (rwdb_rc == 0)
+		*actual_data_size = requested_data_size;
+	else
+		*actual_data_size = 0;
+
+	return (rwdb_rc);
+}
+
+/*****************************************************************************
+ * NAME: record_msg
+ *
+ * FUNCTION: Record an fsck service log message in the output file,
+ *           formatted for the common fsck service log display tool.
+ *
+ * PARAMETERS:
+ *      ?                 - input -
+ *      ?                 - returned -
+ *
+ * NOTES:  Any message designated fsck_debug is english-only, and
+ *         is issued in english, even if it is sent to stdout.
+ *
+ *         All other messages are local-language (in the nls context)
+ *         and, when sent to stdout or stderr, are issued in the
+ *         local language.
+ *
+ *         Regardless of the language used to send a message to
+ *         stdout and stderr, messages are ALWAYS LOGGED IN ENGLISH.
+ *
+ * RETURNS:
+ *	nothing
+ */
+void record_msg(char *msg_txt)
+{
+	char *msg;
+	char log_entry[4096];
+	int entry_length = sizeof (struct chklog_entry_hdr);
+	struct chklog_entry_hdr *hdptr;
+	int buffer_bytes_left;
+
+	hdptr = (struct chklog_entry_hdr *) log_entry;
+	msg = &log_entry[entry_length];
+	strcpy(msg, msg_txt);
+	entry_length += strlen(msg_txt);
+	/* add null terminator to string */
+	log_entry[entry_length++] = '\0';
+
+	/*
+	 * round the length up so the next entry will
+	 * start on a doubleword (4 byte) boundary
+	 */
+	entry_length = ((entry_length + 3) / 4) * 4;
+
+	hdptr->entry_length = entry_length;
+
+	buffer_bytes_left =
+	    local_recptr->outfile_buf_length -
+	    local_recptr->outfile_buf_data_len;
+	if (buffer_bytes_left < entry_length) {
+		/* won't fit */
+		local_recptr->last_msghdr->entry_length += buffer_bytes_left;
+		fwrite((const void *) (local_recptr->outfile_buf_ptr),
+		       sizeof (char), local_recptr->outfile_buf_length, outfp);
+		/* clear the buffer */
+		memset((void *) (local_recptr->outfile_buf_ptr), 0,
+		       local_recptr->outfile_buf_length);
+		local_recptr->outfile_buf_data_len = 0;
+	}
+	local_recptr->last_msghdr = (struct fscklog_entry_hdr *)
+	    (local_recptr->outfile_buf_ptr +
+	     local_recptr->outfile_buf_data_len);
+	memcpy((void *) local_recptr->last_msghdr, (void *) hdptr,
+	       entry_length);
+
+	local_recptr->outfile_buf_data_len += entry_length;
+
+	return;
+}
+
+/*****************************************************************************
+ * NAME: validate_super
+ *
+ * FUNCTION:  This routine validates the JFS superblock currently in the
+ *            buffer.  If any problem is detected, the which_superblock
+ *            input parm is used to tailor the message issued to notify
+ *            the user.
+ *
+ * PARAMETERS:
+ *      which_super  - input - specifies the superblock on which is in the
+ *                             buffer { fsck_primary | fsck_secondary }
+ *
+ * NOTES:  This routine also exists in fsck code.  When there is time,
+ *	   examine both copies for differences and put the combined
+ *         copy in libfs to eliminate extra code.
+ *
+ * RETURNS:
+ *      success: 0
+ *      failure: something else
+ */
+int validate_super(int which_super)
+{
+	int vs_rc = 0;		/* assume the superblock is ok */
+	int64_t bytes_on_device;
+	int64_t agg_blks_in_aggreg = 0, agg_blks_on_device =
+	    0, dev_blks_on_device;
+	int64_t fsck_start_from_pxd, fsck_blkmap_start_blks;
+	uint32_t fsck_length_from_pxd, fsck_blkmap_size_blks,
+	    fsck_blkmap_size_pages;
+	int64_t jlog_start_from_pxd;
+	uint32_t jlog_length_from_pxd;
+	int agl2size;
+	unsigned expected_flag = JFS_GROUPCOMMIT;
+	unsigned agsize;
+	int bad_bsize = 0;
+
+	if (memcmp(sb_ptr->s_magic, JFS_MAGIC, sizeof (sb_ptr->s_magic)) != 0) {
+		vs_rc = FSCK_BADSBMGC;
+		send_msg(fsck_BADSBMGC, fsck_ref_msg(which_super));
+	} else if (sb_ptr->s_version > JFS_VERSION) {
+		vs_rc = FSCK_BADSBVRSN;
+		send_msg(fsck_BADSBVRSN, fsck_ref_msg(which_super));
+	} else {
+		/* the magic number and version number are correct so it
+		 * probably is a JFS superblock with the format we are expecting
+		 */
+
+		/* get physical device size */
+		ujfs_get_dev_size(Dev_IOPort, &bytes_on_device);
+
+		dev_blks_on_device = bytes_on_device / Dev_blksize;
+
+		if (sb_ptr->s_pbsize != Dev_blksize) {
+			vs_rc = FSCK_BADSBOTHR1;
+			send_msg(fsck_BADSBOTHR, "1", fsck_ref_msg(which_super));
+		}
+		if (sb_ptr->s_l2pbsize != log2shift(Dev_blksize)) {
+			vs_rc = FSCK_BADSBOTHR2;
+			send_msg(fsck_BADSBOTHR, "2", fsck_ref_msg(which_super));
+		}
+		if (!inrange(sb_ptr->s_bsize, 512, 4096)) {
+			bad_bsize = -1;
+			vs_rc = FSCK_BADSBOTHR3;
+			send_msg(fsck_BADSBBLSIZ, fsck_ref_msg(which_super));
+		} else {
+			/* else the filesystem block size is a legal value */
+			if (sb_ptr->s_l2bsize != log2shift(sb_ptr->s_bsize)) {
+				vs_rc = FSCK_BADSBOTHR4;
+				send_msg(fsck_BADSBOTHR, "4",
+					 fsck_ref_msg(which_super));
+			}
+			if (sb_ptr->s_l2bfactor !=
+			    log2shift(sb_ptr->s_bsize / Dev_blksize)) {
+				vs_rc = FSCK_BADSBOTHR5;
+				send_msg(fsck_BADSBOTHR, "5",
+					 fsck_ref_msg(which_super));
+			}
+			if (sb_ptr->s_bsize < Dev_blksize) {
+				bad_bsize = -1;
+				vs_rc = FSCK_BLSIZLTLVBLSIZ;
+				send_msg(fsck_BLSIZLTLVBLSIZ,
+					 fsck_ref_msg(which_super));
+			}
+		}
+
+		if (!bad_bsize) {
+			agg_blks_on_device = bytes_on_device / sb_ptr->s_bsize;
+		}
+
+		if (sb_ptr->s_size > dev_blks_on_device) {
+			vs_rc = FSCK_BADSBFSSIZ;
+			send_msg(fsck_BADSBFSSIZ, fsck_ref_msg(which_super));
+		}
+#ifdef	_JFS_DFS_LFS
+		s_size_inbytes = sb_ptr->s_size * Dev_blksize;
+		sum_inbytes = (int64_t) (sb_ptr->totalUsable * 1024) +
+		    (int64_t) (sb_ptr->minFree * 1024);
+		if ((sum_inbytes > s_size_inbytes)
+		    || ((s_size_inbytes - sum_inbytes) >= 1024)) {
+			/* the sum is greater or the difference is at least 1K */
+			vs_rc = FSCK_BADBLKCTTTL;
+			send_msg(fsck_BADBLKCTTTL, fsck_ref_msg(which_super));
+		}
+#endif
+		/* must have JFS_OS2 or JFS_LINUX */
+		if (!(((sb_ptr->s_flag & JFS_OS2) == JFS_OS2)
+		      || ((sb_ptr->s_flag & JFS_LINUX) == JFS_LINUX))) {
+			vs_rc = FSCK_BADSBOTHR6;
+			send_msg(fsck_BADSBOTHR, "6", fsck_ref_msg(which_super));
+		}
+
+		if ((sb_ptr->s_flag & expected_flag) != expected_flag) {
+			vs_rc = FSCK_BADSBOTHR6;
+			send_msg(fsck_BADSBOTHR, "6", fsck_ref_msg(which_super));
+		}
+		if (sb_ptr->s_agsize < (1 << L2BPERDMAP)) {
+			vs_rc = FSCK_BADSBAGSIZ;
+			send_msg(fsck_BADSBAGSIZ, fsck_ref_msg(which_super));
+		} else {
+			/* else the alloc group size is possibly correct */
+			agg_blks_in_aggreg =
+			    sb_ptr->s_size * sb_ptr->s_pbsize / sb_ptr->s_bsize;
+			agl2size =
+			    ujfs_getagl2size(agg_blks_in_aggreg,
+					     sb_ptr->s_bsize);
+			/* get the allocation group size */
+			agsize = (int64_t) 1 << agl2size;
+			if (sb_ptr->s_agsize != agsize) {
+				vs_rc = FSCK_BADAGFSSIZ;
+				send_msg(fsck_BADSBAGSIZ, fsck_ref_msg(which_super));
+			}
+		}
+
+		if (!vs_rc) {
+			/*
+			 * check out the fsck in-aggregate workspace
+			 */
+			fsck_length_from_pxd = lengthPXD(&(sb_ptr->s_fsckpxd));
+			fsck_start_from_pxd = addressPXD(&(sb_ptr->s_fsckpxd));
+			agg_blks_in_aggreg = fsck_length_from_pxd +
+			    (sb_ptr->s_size * sb_ptr->s_pbsize /
+			     sb_ptr->s_bsize);
+
+			if (agg_blks_in_aggreg > agg_blks_on_device) {
+				/* wsp length is bad */
+				vs_rc = FSCK_BADSBFWSL1;
+				send_msg(fsck_BADSBFWSL1, fsck_ref_msg(which_super));
+			} else {
+				fsck_blkmap_size_pages =
+				    ((agg_blks_in_aggreg +
+				      (BITSPERPAGE - 1)) / BITSPERPAGE) + 1 +
+				    50;
+				/* size in aggregate blocks */
+				fsck_blkmap_size_blks =
+				    (fsck_blkmap_size_pages << L2PSIZE) /
+				    sb_ptr->s_bsize;
+				/*
+				 * aggregate block offset of the
+				 * fsck workspace in the aggregate.
+				 */
+				fsck_blkmap_start_blks =
+				    agg_blks_in_aggreg - fsck_blkmap_size_blks;
+				if (fsck_length_from_pxd !=
+				    fsck_blkmap_size_blks) {
+					/*
+					 * length of fsck in-aggregate
+					 * workspace is incorrect
+					 */
+					vs_rc = FSCK_BADSBFWSL;
+					send_msg(fsck_BADSBFWSL,
+						 fsck_ref_msg(which_super));
+				}
+				if (fsck_start_from_pxd !=
+				    fsck_blkmap_start_blks) {
+					/*
+					 * address of fsck in-aggregate
+					 * workspace is incorrect
+					 */
+					vs_rc = FSCK_BADSBFWSA;
+					send_msg(fsck_BADSBFWSA,
+						 fsck_ref_msg(which_super));
+				}
+			}
+		}
+		if (!vs_rc) {
+			/*
+			 * check out the in-aggregate journal log
+			 *
+			 * if there is one it starts at the end of the fsck
+			 * in-aggregate workspace.
+			 */
+			jlog_length_from_pxd = lengthPXD(&(sb_ptr->s_logpxd));
+			jlog_start_from_pxd = addressPXD(&(sb_ptr->s_logpxd));
+
+			if (jlog_start_from_pxd != 0) {
+				/* there's one in there */
+				if (jlog_start_from_pxd != agg_blks_in_aggreg) {
+					/*
+					 * address of in-aggregate
+					 * journal log is incorrect
+					 */
+					vs_rc = FSCK_BADSBFJLA;
+					send_msg(fsck_BADSBFJLA,
+						 fsck_ref_msg(which_super));
+				}
+				agg_blks_in_aggreg += jlog_length_from_pxd;
+				if (agg_blks_in_aggreg > agg_blks_on_device) {
+					/* log length is bad */
+					vs_rc = FSCK_BADSBFJLL;
+					send_msg(fsck_BADSBFJLL,
+						 fsck_ref_msg(which_super));
+				}
+			}
+		}
+	}
+	return (vs_rc);
+}
+
+/*****************************************************************************
+ * NAME: validate_superblock
+ *
+ * FUNCTION:  Verify that the primary superblock is valid.
+ *            If not, verify that the secondary superblock is valid.
+ *
+ * PARAMETERS:  none
+ *
+ * NOTES:  If this routine returns 0 then the superblock
+ *         I/O buffer contains a valid superblock.
+ *
+ *	   This routine also exists in fsck code.  When there is time,
+ *	   examine both copies for differences and put the combined
+ *         copy in libfs to eliminate extra code.
+ *
+ * RETURNS:
+ *      success: 0
+ *      failure: something else
+ */
+int validate_superblock()
+{
+	int vsb_rc = 0;
+	int primary_sb_bad = 1;
+	int secondary_sb_bad = 1;
+	int which_sb = 0;
+
+	/* get primary  */
+	vsb_rc = ujfs_get_superblk(Dev_IOPort, sb_ptr, 1);
+
+	if (vsb_rc != 0) {
+		/* if read primary fails */
+		send_msg(fsck_CNTRESUPP);
+	} else {
+		/* got primary superblock */
+		which_sb = fsck_primary;
+		primary_sb_bad = validate_super(fsck_primary);
+	}
+
+	if (primary_sb_bad) {
+		/* can't use the primary superblock */
+		send_msg(fsck_SBBADP);
+
+		/* get 2ndary */
+		vsb_rc = ujfs_get_superblk(Dev_IOPort, sb_ptr, 0);
+
+		if (vsb_rc != 0) {
+			send_msg(fsck_CNTRESUPS);
+		} else {
+			/* got secondary superblock */
+			which_sb = fsck_secondary;
+			secondary_sb_bad = validate_super(fsck_secondary);
+		}
+
+		if (!secondary_sb_bad) {
+			/* secondary is ok */
+			vsb_rc = 0;
+		} else {
+			send_msg(fsck_SBBADS);
+		}
+	}
+	if ((!primary_sb_bad) || (!secondary_sb_bad)) {
+		/* the buffer holds a valid superblock */
+
+		/* aggregate block size */
+		local_recptr->ag_blk_size = sb_ptr->s_bsize;
+
+		send_msg(fsck_XCHKLOGSBOK, fsck_ref_msg(which_sb));
+	}
+
+	return (vsb_rc);
+}
Index: a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/fscklog
===================================================================
--- a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/fscklog	(nonexistent)
+++ a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/fscklog	(revision 5)

Property changes on: a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/fscklog
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs/devices.c
===================================================================
--- a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs/devices.c	(nonexistent)
+++ a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs/devices.c	(revision 5)
@@ -0,0 +1,474 @@
+/*
+ *   Copyright (c) International Business Machines Corp., 2000-2008
+ *
+ *   This program is free software;  you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 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, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*
+ * autoconf 2.61 causes fseeko to miscompile against glibc-2.3.
+ * Override config.h by defining _LARGEFILE_SOURCE here
+ */
+#define _LARGEFILE_SOURCE
+
+#include <config.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef HAVE_SYS_MOUNT_H
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#include <sys/mount.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <sys/sysmacros.h>
+#if defined(__DragonFly__)
+#include <machine/param.h>
+#include <sys/diskslice.h>
+#endif
+
+#ifdef HAVE_SYS_DISKLABEL_H
+#include <sys/disklabel.h>
+#endif
+
+#include "jfs_types.h"
+#include "jfs_filsys.h"
+#include "devices.h"
+#include "debug.h"
+
+#if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE64)
+#define BLKGETSIZE64 _IOR(0x12, 114, size_t)
+#endif
+#if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE)
+#define BLKGETSIZE _IO(0x12,96)	/* return device size (sectors) */
+#endif
+
+/*
+ * NAME: ujfs_device_is_valid
+ *
+ * FUNCTION: Check device validity by examining stat modes.
+ *
+ * PRE CONDITIONS: 'device' must refer to an open device handle.
+ *
+ * PARAMETERS:
+ *      device_handle  - open device handle to check
+ *      st             - stat information if device handle not provided
+ *
+ * RETURNS: 0 if successful; anything else indicates failures
+ */
+int ujfs_device_is_valid(FILE *device_handle, struct stat *st)
+{
+	struct stat stat_data;
+	int rc = 0;
+
+	if (device_handle != NULL) {
+		rc = fstat(fileno(device_handle), &stat_data);
+		if (rc)
+			return -1;
+		st = &stat_data;
+	}
+	else if (st == NULL) {
+		return -1;
+	}
+
+	/* Do we have a block special device or regular file? */
+#if defined(__DragonFly__)
+	if (!S_ISCHR(st->st_mode) && !S_ISREG(st->st_mode))
+#else /* __linux__ etc. */
+	if (!S_ISBLK(st->st_mode) && !S_ISREG(st->st_mode))
+#endif
+		return -1;
+
+	return (rc);
+}
+
+/*
+ * NAME: ujfs_get_dev_size
+ *
+ * FUNCTION: Uses the device driver interface to determine the raw capacity of
+ *      the specified device.
+ *
+ * PRE CONDITIONS:
+ *
+ * POST CONDITIONS:
+ *
+ * PARAMETERS:
+ *      device  - device
+ *      size    - filled in with size of device; not modified if failure occurs
+ *
+ * NOTES:
+ *
+ * DATA STRUCTURES:
+ *
+ * RETURNS: 0 if successful; anything else indicates failures
+ */
+int ujfs_get_dev_size(FILE *device, int64_t *size)
+{
+
+	off_t Starting_Position;	/* position within file/device upon
+					 * entry to this function. */
+	off_t Current_Position = 16777215;	/* position we are attempting
+						 * to read from. */
+	off_t Last_Valid_Position = 0;	/* Last position we could successfully
+					 * read from. */
+	off_t First_Invalid_Position;	/* first invalid position we attempted
+					 * to read from/seek to. */
+	int Seek_Result;	/* value returned by lseek. */
+	size_t Read_Result = 0;	/* value returned by read. */
+	int rc;
+	struct stat stat_data;
+	int devfd = fileno(device);
+
+	rc = fstat(devfd, &stat_data);
+	if (!rc && S_ISREG(stat_data.st_mode)) {
+		/* This is a regular file.  */
+		*size = (int64_t) ((stat_data.st_size / 1024) * 1024);
+		return NO_ERROR;
+	}
+#ifdef BLKGETSIZE64
+	{
+		uint64_t sz;
+		if (ioctl(devfd, BLKGETSIZE64, &sz) >= 0) {
+			*size = sz;
+			return 0;
+		}
+	}
+#endif
+#ifdef BLKGETSIZE
+	{
+		unsigned long num_sectors = 0;
+
+		if (ioctl(devfd, BLKGETSIZE, &num_sectors) >= 0) {
+			/* for now, keep size as multiple of 1024, *
+			 * not 512, so eliminate any odd sector.   */
+			*size = PBSIZE * (int64_t) ((num_sectors / 2) * 2);
+			return NO_ERROR;
+		}
+	}
+#endif
+#if defined(__DragonFly__)
+	{
+		struct diskslices dss;
+		struct disklabel dl;
+		struct diskslice *sliceinfo;
+		int slice;
+		dev_t dev = stat_data.st_rdev;
+
+		rc = ioctl(devfd, DIOCGSLICEINFO, &dss);
+		if (rc < 0)
+			return -1;
+
+		slice = dkslice(dev);
+		sliceinfo = &dss.dss_slices[slice];
+
+		DBG_TRACE(("ujfs_get_device_size: slice = %d\n", slice));
+
+		if (sliceinfo) {
+			if (slice == WHOLE_DISK_SLICE || slice == 0) {
+				*size = (int64_t) sliceinfo->ds_size * dss.dss_secsize;
+				DBG_TRACE(("ujfs_get_device_size: slice represents disk\n"));
+			} else {
+				if (sliceinfo->ds_label) {
+					DBG_TRACE(("ujfs_get_device_size: slice has disklabel\n"));
+					rc = ioctl(devfd, DIOCGDINFO, &dl);
+					if (!rc) {
+						*size = (int64_t) dl.d_secperunit * dss.dss_secsize;
+					} else {
+						return (-1);
+					}
+				}
+			}
+		} else {
+			return (-1);
+		}
+
+		DBG_TRACE(("ujfs_get_device_size: size in bytes = %ld\n", *size));
+		DBG_TRACE(("ujfs_get_device_size: size in megabytes = %ld\n",
+			*size / (1024 * 1024)));
+
+		return 0;
+	}
+#endif
+#if defined(HAVE_SYS_DISKLABEL_H) && !defined(__DragonFly__)
+	{
+		struct disklabel dl;
+		struct partition * part;
+		dev_t dev = stat_data.st_rdev;
+
+		rc = ioctl(devfd, DIOCGDINFO, &dl);
+		if (rc < 0)
+			return -1;
+		part = dl.d_partitions + DISKPART(dev);
+
+		*size = (dl.d_secsize * part->p_size);
+
+		DBG_TRACE(("ujfs_get_device_size: size in bytes = %ld\n", 
+			*size));
+		DBG_TRACE(("ujfs_get_device_size: size in megabytes = %ld\n",
+			*size / (1024 * 1024)));
+
+		return NO_ERROR;
+	}
+#endif
+
+
+	/*
+	 * If the ioctl above fails or is undefined, use a binary search to
+	 * find the last byte in the partition.  This works because an lseek to
+	 * a position within the partition does not return an error while an
+	 * lseek to a position beyond the end of the partition does.  Note that
+	 * some SCSI drivers may log an 'access beyond end of device' error
+	 * message.
+	 */
+
+	/* Save the starting position so that we can restore it when we are
+	 * done! */
+	Starting_Position = ftello(device);
+	if (Starting_Position < 0)
+		return ERROR_SEEK;
+
+	/*
+	 * Find a position beyond the end of the partition.  We will start by
+	 * attempting to seek to and read the 16777216th byte in the partition.
+	 * We start here because a JFS partition must be at least this big.  If
+	 * it is not, then we can not format it as JFS.
+	 */
+	do {
+		/* Seek to the location we wish to test. */
+		Seek_Result = fseeko(device, Current_Position, SEEK_SET);
+		if (Seek_Result == 0) {
+			/* Can we read from this location? */
+			Read_Result = fgetc(device);
+			if (Read_Result != EOF) {
+				/* The current test position is valid.  Save it
+				 * for future reference. */
+				Last_Valid_Position = Current_Position;
+
+				/* Lets calculate the next location to test. */
+				Current_Position = ((Current_Position + 1) * 2)
+						   - 1;
+
+			}
+		}
+	} while ((Seek_Result == 0) && (Read_Result == 1));
+
+	/*
+	 * We have exited the while loop, which means that Current Position is
+	 * beyond the end of the partition or is unreadable due to a hardware
+	 * problem (bad block).  Since the odds of hitting a bad block are very
+	 * low, we will ignore that condition for now.  If time becomes
+	 * available, then this issue can be revisited.
+	 */
+
+	/* Is the drive greater than 16MB? */
+	if (Last_Valid_Position == 0) {
+		/*
+		 * Determine if drive is readable at all.  If it is, the drive
+		 * is too small.  If not, it could be a newly created partion,
+		 * so we need to issue a different error message
+		 */
+		*size = 0;	/* Indicates not readable at all */
+		Seek_Result = fseeko(device, Last_Valid_Position, SEEK_SET);
+		if (Seek_Result == 0) {
+			/* Can we read from this location? */
+			Read_Result = fgetc(device);
+			if (Read_Result != EOF)
+				/* non-zero indicates readable, but too small */
+				*size = 1;
+		}
+		goto restore;
+	}
+	/*
+	 * The drive is larger than 16MB.  Now we must find out exactly how
+	 * large.
+	 *
+	 * We now have a point within the partition and one beyond it.  The end
+	 * of the partition must lie between the two.  We will use a binary
+	 * search to find it.
+	 */
+
+	/* Setup for the binary search. */
+	First_Invalid_Position = Current_Position;
+	Current_Position = Last_Valid_Position +
+			   ((Current_Position - Last_Valid_Position) / 2);
+
+	/*
+	 * Iterate until the difference between the last valid position and the
+	 * first invalid position is 2 or less.
+	 */
+	while ((First_Invalid_Position - Last_Valid_Position) > 2) {
+		/* Seek to the location we wish to test. */
+		Seek_Result = fseeko(device, Current_Position, SEEK_SET);
+		if (Seek_Result == 0) {
+			/* Can we read from this location? */
+			Read_Result = fgetc(device);
+			if (Read_Result != EOF) {
+				/* The current test position is valid.
+				 * Save it for future reference. */
+				Last_Valid_Position = Current_Position;
+
+				/*
+				 * Lets calculate the next location to test. It
+				 * should be half way between the current test
+				 * position and the first invalid position that
+				 * we know of.
+				 */
+				Current_Position = Current_Position +
+						   ((First_Invalid_Position -
+						     Last_Valid_Position) / 2);
+
+			}
+		} else
+			Read_Result = 0;
+
+		if (Read_Result != 1) {
+			/* Out test position is beyond the end of the partition.
+			 * It becomes our first known invalid position. */
+			First_Invalid_Position = Current_Position;
+
+			/* Our new test position should be half way between our
+			 * last known valid position and our current test
+			 * position. */
+			Current_Position =
+			    Last_Valid_Position +
+			    ((Current_Position - Last_Valid_Position) / 2);
+		}
+	}
+
+	/*
+	 * The size of the drive should be Last_Valid_Position + 1 as
+	 * Last_Valid_Position is an offset from the beginning of the partition.
+	 */
+	*size = Last_Valid_Position + 1;
+
+
+restore:
+	/* Restore the original position. */
+	if (fseeko(device, Starting_Position, SEEK_SET) != 0)
+		return ERROR_SEEK;
+
+	return NO_ERROR;
+}
+
+/*
+ * NAME: ujfs_rw_diskblocks
+ *
+ * FUNCTION: Read/Write specific number of bytes for an opened device.
+ *
+ * PRE CONDITIONS:
+ *
+ * POST CONDITIONS:
+ *
+ * PARAMETERS:
+ *      dev_ptr         - file handle of an opened device to read/write
+ *      disk_offset     - byte offset from beginning of device for start of disk
+ *                        block read/write
+ *      disk_count      - number of bytes to read/write
+ *      data_buffer     - On read this will be filled in with data read from
+ *                        disk; on write this contains data to be written
+ *      mode            - GET: read; PUT: write; VRFY: verify
+ *
+ * NOTES: A disk address is formed by {#cylinder, #head, #sector}
+ *
+ *      Also the DSK_READTRACK and DSK_WRITETRACK is a track based
+ *      function. If it needs to read/write crossing track boundary,
+ *      additional calls are used.
+ *
+ * DATA STRUCTURES:
+ *
+ * RETURNS:
+ */
+int ujfs_rw_diskblocks(FILE *dev_ptr,
+		       int64_t disk_offset,
+		       int32_t disk_count,
+		       void *data_buffer,
+		       int32_t mode)
+{
+	int Seek_Result;
+	size_t Bytes_Transferred;
+	int error = NO_ERROR;
+
+	Seek_Result = fseeko(dev_ptr, disk_offset, SEEK_SET);
+	if (Seek_Result != 0) {
+		error = ERROR_SEEK;
+		goto finished;
+	}
+
+	if (disk_count == 0) {
+		fprintf(stderr, "ujfs_rw_diskblocks: disk_count is 0\n");
+		error = ERROR_INVALID_PARAMETER;
+		goto finished;
+	}
+
+	switch (mode) {
+	case GET:
+		Bytes_Transferred = fread(data_buffer, 1, disk_count, dev_ptr);
+		break;
+	case PUT:
+		Bytes_Transferred = fwrite(data_buffer, 1, disk_count, dev_ptr);
+		break;
+	default:
+		DBG_ERROR(("Internal error: %s(%d): bad mode: %d\n", __FILE__,
+			   __LINE__, mode))
+			error = ERROR_INVALID_HANDLE;
+		    goto finished;
+		break;		/* Keep the compiler happy. */
+	}
+
+	if (Bytes_Transferred != disk_count) {
+		if (Bytes_Transferred == -1)
+			perror("ujfs_rw_diskblocks");
+		else
+			fprintf(stderr,
+				"ujfs_rw_diskblocks: %s %zd of %d bytes at offset %lld\n",
+				(mode == GET) ? "read" : "wrote",
+				Bytes_Transferred, disk_count, disk_offset);
+
+		if (mode == GET)
+			error = ERROR_READ_FAULT;
+		else
+			error = ERROR_WRITE_FAULT;
+		goto finished;
+	}
+
+finished:
+	if (error)
+		rewind(dev_ptr);
+	return (error);
+}
+
+#define RAMDISK_MAJOR 1
+
+int ujfs_flush_dev(FILE *fp)
+{
+	int fd = fileno(fp);
+	struct stat buf;
+
+	if (fsync(fd) == -1)
+		return errno;
+#ifdef BLKFLSBUF
+	fstat(fd, &buf);
+	if (major(buf.st_rdev) != RAMDISK_MAJOR)
+		return ioctl(fileno(fp), BLKFLSBUF, 0);
+#endif
+	return 0;
+}
Index: a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs/devices.h
===================================================================
--- a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs/devices.h	(nonexistent)
+++ a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs/devices.h	(revision 5)
@@ -0,0 +1,51 @@
+/*
+ *   Copyright (c) International Business Machines Corp., 2000-2002
+ *
+ *   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 2 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, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#ifndef H_DEVICES
+#define H_DEVICES
+
+#define GET	0
+#define PUT	1
+#define VRFY	2
+
+/* Macros used for determining open mode */
+#define READONLY	0
+#define RDWR_EXCL	1
+
+/* Error codes */
+#define NO_ERROR		0
+#define ERROR_INVALID_FUNCTION	1
+#define ERROR_FILE_NOT_FOUND	2
+#define ERROR_INVALID_HANDLE	6
+#define ERROR_NOT_ENOUGH_MEMORY 8
+#define ERROR_INVALID_ACCESS	12
+#define ERROR_SEEK		25
+#define ERROR_WRITE_FAULT	29
+#define ERROR_READ_FAULT	30
+#define ERROR_GEN_FAILURE	31
+#define ERROR_INVALID_PARAMETER	87
+#define ERROR_DISK_FULL		112
+
+#include <inttypes.h>
+
+struct stat;
+
+int ujfs_get_dev_size(FILE *, int64_t * size);
+int ujfs_rw_diskblocks(FILE *, int64_t, int32_t, void *, int32_t);
+int ujfs_flush_dev(FILE *);
+int ujfs_device_is_valid(FILE *, struct stat *);
+#endif				/* H_DEVICES */
Index: a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs/log_dump.c
===================================================================
--- a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs/log_dump.c	(nonexistent)
+++ a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs/log_dump.c	(revision 5)
@@ -0,0 +1,986 @@
+/*
+ *   Copyright (c) International Business Machines Corp., 2000-2002
+ *
+ *   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 2 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, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#include <config.h>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <memory.h>
+#include <string.h>
+#include <fcntl.h>
+#include <errno.h>
+#include "jfs_types.h"
+#include "jfs_endian.h"
+#include "jfs_filsys.h"
+#include "jfs_superblock.h"
+#include "jfs_dinode.h"
+#include "jfs_dtree.h"
+#include "jfs_xtree.h"
+#include "jfs_logmgr.h"
+#include "jfs_dmap.h"
+#include "jfs_imap.h"
+#include "logredo.h"
+#include "devices.h"
+#include "debug.h"
+
+extern int LogOpenMode;
+
+#define LOGDMP_OK 	0
+#define LOGDMP_FAILED	-1
+
+#define MAKEDEV(__x,__y)        (dev_t)(((__x)<<16) | (__y))
+
+#define LOGPNTOB(x)  ((x)<<L2LOGPSIZE)
+
+#define LOG2NUM(NUM, L2NUM)\
+{\
+        if ((NUM) <= 0)\
+                L2NUM = -1;\
+        else\
+        if ((NUM) == 1)\
+                L2NUM = 0;\
+        else\
+        {\
+                L2NUM = 0;\
+                while ( (NUM) > 1 )\
+                {\
+                        L2NUM++;\
+                        (NUM) >>= 1;\
+                }\
+        }\
+}
+
+/* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ *
+ *       things for the log.
+ */
+int32_t logend;			/* address of the end of last log record */
+extern struct logsuper logsup;		/* log super block */
+extern int32_t numdoblk;		/* number of do blocks used     */
+extern int32_t numnodofile;		/* number of nodo file blocks used  */
+
+/* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ *
+ * The output file.
+ *
+ */
+
+FILE *outfp;
+
+#define  output_filename  "./jfslog.dmp"
+
+int logdmp_outfile_is_open = 0;
+
+/* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ *
+ *      open file system aggregate/lv array
+ *
+ * logredo() processes a single log.
+ * at the first release, logredo will process a single log
+ * related to one aggregate. But the future release, logredo needs to
+ * to process one single log related to multiple agreegates.
+ * In both cases, the aggregate(logical volume) where the log stays
+ * will be different from  the file system aggregate/lv.
+ *
+ * There will be one imap for the aggregate inode allocation map
+ * and a list of imap pointers to multiple fileset inode allocation maps.
+ *
+ * There is one block allocation map per aggregate and shared by all the
+ * filesets within the aggregate.
+ *
+ * the log and related aggregates (logical volumes) are all in
+ * the same volume group, i.e., each logical volume is uniquely specified
+ * by their minor number with the same major number,
+ * the maximum number of lvs in a volume group is NUMMINOR (256).
+ */
+
+/*
+ * We only deal with the log here.  No need for vopen array
+ */
+struct vopen volume;
+
+/*
+ *      log page buffer cache
+ *
+ * log has its own 4 page buffer pool.
+ */
+extern uint8_t afterdata[];	/* buffer to read in redopage data */
+
+/*
+ * Miscellaneous
+ */
+caddr_t prog;			/* Program name */
+int32_t mntcnt, bufsize;
+char *mntinfo;
+int32_t retcode;		/* return code from logredo    */
+
+/*
+ * external references
+ */
+extern char *optarg;
+extern int optind;
+extern int initMaps(int32_t);
+extern int updateMaps(int);
+extern int findEndOfLog(void);
+extern int logRead(int32_t, struct lrd *, char *);
+extern int logredoInit(void);
+extern int alloc_wrksp(uint32_t, int, int, void **);	/* defined in fsckwsp.c */
+
+/*
+ * forward references
+ */
+int open_outfile(void);
+int ldmp_readSuper(FILE *, struct superblock *);
+int ldmp_isLogging(caddr_t, int32_t, char *, int32_t);
+int ldmp_logError(int, int);
+int usage(void);
+
+int disp_updatemap(struct lrd *);
+int disp_redopage(struct lrd *);
+int disp_noredopage(struct lrd *);
+int disp_noredoinoext(struct lrd *);
+
+void ldmp_xdump(char *, int);
+int ldmp_x_scmp(char *, char *);
+void ldmp_x_scpy(char *, char *);
+int prtdesc(struct lrd *);
+
+/* --------------------------------------------------------------------
+ *
+ * NAME:        jfs_logdump()
+ *
+ * FUNCTION:
+ *
+ */
+
+int jfs_logdump(caddr_t pathname, FILE *fp, int32_t dump_all)
+{
+	int rc;
+	int32_t logaddr, nextaddr, lastaddr, nlogrecords;
+	struct lrd ld;
+	int32_t lowest_lr_byte = 2 * LOGPSIZE + LOGPHDRSIZE;
+	int32_t highest_lr_byte = 0;
+	int log_has_wrapped = 0;
+	int in_use;
+
+	rc = open_outfile();
+
+	if (rc == 0) {		/* output file is open */
+		/*
+		 * loop until we get enough memory to read vmount struct
+		 */
+		mntinfo = (char *) &bufsize;
+		bufsize = sizeof (int);
+
+		/*
+		 * Find and open the log
+		 */
+		LogOpenMode = O_RDONLY;
+		rc = findLog(fp, &in_use);
+
+		if (rc != 0) {
+			printf("JFS_LOGDUMP:Error occurred when open/read device\n");
+			fprintf(outfp, "??????????????????????????????????????????????????????\n");
+			fprintf(outfp, "JFS_LOGDUMP:Error occurred when open/read device\n");
+			fprintf(outfp, "??????????????????????????????????????????????????????\n");
+			return (rc);
+		}
+
+		/*
+		 * validate log superblock
+		 *
+		 * aggregate block size is for log file as well.
+		 */
+
+		rc = ujfs_rw_diskblocks(Log.fp,
+					(uint64_t) (Log.xaddr + LOGPNTOB(LOGSUPER_B)),
+					(unsigned) sizeof (struct logsuper), (char *) &logsup, GET);
+		if (rc != 0) {
+			printf("JFS_LOGDUMP:couldn't read log superblock:failure in %s\n", prog);
+			fprintf(outfp, "??????????????????????????????????????????????????????\n");
+			fprintf(outfp, "JFS_LOGDUMP:couldn't read log superblock:failure in %s\n",
+				prog);
+			fprintf(outfp, "??????????????????????????????????????????????????????\n");
+			return (LOGSUPER_READ_ERROR);
+		}
+		ujfs_swap_logsuper(&logsup);
+
+		fprintf(outfp, "JOURNAL SUPERBLOCK: \n");
+		fprintf(outfp, "------------------------------------------------------\n");
+		fprintf(outfp, "   magic number: x %x \n", logsup.magic);
+		fprintf(outfp, "   version     : x %x \n", logsup.version);
+		fprintf(outfp, "   serial      : x %x \n", logsup.serial);
+		fprintf(outfp, "   size        : t %d pages (4096 bytes/page)\n", logsup.size);
+		fprintf(outfp, "   bsize       : t %d bytes/block\n", logsup.bsize);
+		fprintf(outfp, "   l2bsize     : t %d \n", logsup.l2bsize);
+		fprintf(outfp, "   flag        : x %x \n", logsup.flag);
+		fprintf(outfp, "   state       : x %x \n", logsup.state);
+		fprintf(outfp, "   end         : x %x \n", logsup.end);
+		fprintf(outfp, "\n");
+		fprintf(outfp, "======================================================\n");
+		fprintf(outfp, "\n");
+
+		if (logsup.magic != LOGMAGIC) {
+			fprintf(outfp, "\n");
+			fprintf(outfp, "**WARNING** %s: %s is not a log file\n", prog, pathname);
+			fprintf(outfp, "\n");
+			fprintf(outfp, "======================================================\n");
+			fprintf(outfp, "\n");
+		}
+
+		if (logsup.version != LOGVERSION) {
+			fprintf(outfp, "\n");
+			fprintf(outfp, "**WARNING** %s and log file %s version mismatch\n", prog,
+				pathname);
+			fprintf(outfp, "\n");
+			fprintf(outfp, "======================================================\n");
+			fprintf(outfp, "\n");
+		}
+
+		if (logsup.state == LOGREDONE) {
+			fprintf(outfp, "\n");
+			fprintf(outfp, "**WARNING** %s and log file %s state is LOGREDONE\n", prog,
+				pathname);
+			fprintf(outfp, "\n");
+			fprintf(outfp, "======================================================\n");
+			fprintf(outfp, "\n");
+		}
+
+		Log.size = logsup.size;
+		Log.serial = logsup.serial;
+
+		/*
+		 * find the end of log
+		 */
+		logend = findEndOfLog();
+		if (logend < 0) {
+			printf("logend < 0\n");
+			ldmp_logError(LOGEND, 0);
+			ujfs_swap_logsuper(&logsup);
+			rc = ujfs_rw_diskblocks(Log.fp,
+						(uint64_t) (Log.xaddr + LOGPNTOB(LOGSUPER_B)),
+						(unsigned long) LOGPSIZE, (char *) &logsup, PUT);
+			rc = logend;
+			goto loopexit;
+		}
+
+		highest_lr_byte = logsup.size * LOGPSIZE - LOGRDSIZE;
+
+		if ((logend < lowest_lr_byte) || (logend > highest_lr_byte)) {
+			fprintf(outfp, "\n");
+			fprintf(outfp,
+				"**ERROR** logend address is not valid for a logrec. logend: 0x0%x\n",
+				logend);
+			fprintf(outfp, "\n");
+			fprintf(outfp, "======================================================\n");
+			fprintf(outfp, "\n");
+			return (INVALID_LOGEND);
+		}
+
+		/*
+		 *      replay log
+		 *
+		 * read log backwards and process records as we go.
+		 * reading stops at place specified by first SYNCPT we
+		 * encounter.
+		 */
+		nlogrecords = lastaddr = 0;
+		nextaddr = logend;
+		do {
+			logaddr = nextaddr;
+			nextaddr = logRead(logaddr, &ld, afterdata);
+			fprintf(outfp,
+				"logrec d %d   Logaddr= x %x   Nextaddr= x %x   Backchain = x %x\n",
+				nlogrecords, logaddr, nextaddr, ld.backchain);
+			fprintf(outfp, "\n");
+			nlogrecords += 1;
+			/*
+			 *
+			 * Validate the nextaddr as much as possible
+			 *
+			 */
+			if (nextaddr < 0) {
+				ldmp_logError(READERR, logaddr);
+				if (nextaddr == REFORMAT_ERROR) {
+					rc = nextaddr;
+					goto loopexit;
+				}
+				break;
+			}
+			/*
+			 * Certain errors we'll assume signal the end of the log
+			 * since we're just dumping everything from the latest
+			 * commit record to the earliest valid record.
+			 */
+			if ((nextaddr < lowest_lr_byte) || (nextaddr > highest_lr_byte)) {
+				lastaddr = logaddr;
+			}
+
+			if (nextaddr == logaddr) {
+				lastaddr = logaddr;
+			}
+
+			if (nextaddr > logaddr) {
+				if (log_has_wrapped) {
+					fprintf(outfp, "\n");
+					fprintf(outfp,
+						"**ERROR** log wrapped twice. logaddr:0x0%x nextaddr:0x0%x\n",
+						logaddr, nextaddr);
+					fprintf(outfp, "\n");
+					fprintf(outfp,
+						"======================================================\n");
+					fprintf(outfp, "\n");
+					lastaddr = logaddr;
+				} else {
+					log_has_wrapped = -1;
+				}
+			}
+			/*
+			 *
+			 * The addresses seem ok.  Process the current record.
+			 *
+			 */
+			if (lastaddr != logaddr) {
+				switch (ld.type) {
+				case LOG_COMMIT:
+					fprintf(outfp,
+						"LOG_COMMIT   (type = d %d)   logtid = d %d   aggregate = d %d\n",
+						ld.type, ld.logtid, ld.aggregate);
+					fprintf(outfp, "\n");
+					fprintf(outfp, "\tdata length = d %d\n", ld.length);
+
+					break;
+
+				case LOG_MOUNT:
+					fprintf(outfp,
+						"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
+					fprintf(outfp,
+						"LOG_MOUNT   (type = d %d)   logtid = d %d   aggregate = d %d\n",
+						ld.type, ld.logtid, ld.aggregate);
+					fprintf(outfp, "\n");
+					fprintf(outfp, "\tdata length = d %d\n", ld.length);
+					fprintf(outfp,
+						"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
+					break;
+
+				case LOG_SYNCPT:
+					fprintf(outfp,
+						"****************************************************************\n");
+					fprintf(outfp,
+						"LOG_SYNCPT   (type = d %d)   logtid = d %d    aggregate = d %d\n",
+						ld.type, ld.logtid, ld.aggregate);
+					fprintf(outfp, "\n");
+					fprintf(outfp, "\tdata length = d %d\n", ld.length);
+					fprintf(outfp, "\tsync = x %x\n", ld.log.syncpt.sync);
+					fprintf(outfp,
+						"****************************************************************\n");
+
+					rc = 0;
+					if (!dump_all) {	/* user just wants from last synch point forward */
+						if (lastaddr == 0) {
+							lastaddr = (ld.log.syncpt.sync == 0)
+							    ? logaddr : ld.log.syncpt.sync;
+						}
+					}	/* end user just wants from last synch point forward */
+					break;
+
+				case LOG_REDOPAGE:
+					fprintf(outfp,
+						"LOG_REDOPAGE   (type = d %d)   logtid = d %d    aggregate = d %d\n",
+						ld.type, ld.logtid, ld.aggregate);
+					fprintf(outfp, "\n");
+					fprintf(outfp, "\tdata length = d %d    ", ld.length);
+					disp_redopage(&ld);
+					break;
+
+				case LOG_NOREDOPAGE:
+					fprintf(outfp,
+						"LOG_NOREDOPAGE   (type = d %d)   logtid = d %d   aggregate = d %d\n",
+						ld.type, ld.logtid, ld.aggregate);
+					fprintf(outfp, "\n");
+					fprintf(outfp, "\tdata length = d %d    ", ld.length);
+					disp_noredopage(&ld);
+					break;
+
+				case LOG_NOREDOINOEXT:
+					fprintf(outfp,
+						"LOG_NOREDOINOEXT (type = d %d)   logtid = d %d   aggregate = d %d\n",
+						ld.type, ld.logtid, ld.aggregate);
+					fprintf(outfp, "\n");
+					fprintf(outfp, "\tdata length = d %d    ", ld.length);
+					disp_noredoinoext(&ld);
+					break;
+
+				case LOG_UPDATEMAP:
+					fprintf(outfp,
+						"LOG_UPDATEMAP   (type = d %d)   logtid = d %d   aggregate = d %d\n",
+						ld.type, ld.logtid, ld.aggregate);
+					fprintf(outfp, "\n");
+					fprintf(outfp, "\tdata length = d %d    ", ld.length);
+					disp_updatemap(&ld);
+					break;
+
+				default:
+					fprintf(outfp,
+						"*UNRECOGNIZED*   (type = d %d)   logtid = d %d   aggregate = d %d\n",
+						ld.type, ld.logtid, ld.aggregate);
+					fprintf(outfp, "\n");
+					fprintf(outfp, "\tdata length = d %d\n", ld.length);
+					fprintf(outfp, "\n");
+					fprintf(outfp, "**ERROR** unrecognized log record type\n");
+					fprintf(outfp, "\n");
+					fprintf(outfp,
+						"======================================================\n");
+					fprintf(outfp, "\n");
+					return (UNRECOG_LOGRECTYP);
+				}
+
+				if (rc == 0) {
+					fprintf(outfp, "\n");
+					if (ld.length > 0) {
+						ldmp_xdump((char *) afterdata, ld.length);
+					}
+				}
+
+				fprintf(outfp, "\n");
+				fprintf(outfp,
+					"----------------------------------------------------------------------\n");
+			}
+			/* end if( lastaddr != logaddr )  */
+		} while (logaddr != lastaddr);
+
+	      loopexit:
+
+		/*
+		 * Close the output file
+		 */
+		if (logdmp_outfile_is_open) {
+			fclose(outfp);
+		}
+
+		if (rc == 0) {	/* log has been dumped successfully */
+			printf
+			    ("JFS_LOGDUMP: The current JFS log has been dumped into ./jfslog.dmp\n");
+		} else {
+			printf("JFS_LOGDUMP:Failed in %s\n", prog);
+			fprintf(outfp, "??????????????????????????????????????????????????????\n");
+			fprintf(outfp, "JFS_LOGDUMP:Failed in %s\n", prog);
+			fprintf(outfp, "??????????????????????????????????????????????????????\n");
+		}
+	}
+	/* end output file is open */
+	return (rc < 0) ? (rc) : (0);
+}
+
+/*----------------------------------------------------------------
+ *
+ * NAME:        ldmp_readSuper(fp, sb)
+ *
+ * FUNCTION:    read the superblock for the file system described
+ *              by the file descriptor of the opened aggregate/lv.
+ *              if a read of primary superblock fails,
+ *              try to read the secondary superblock. report error only
+ *              when both reads failed.
+ */
+int ldmp_readSuper(FILE *fp,	/* file descriptor */
+		   struct superblock * sb)
+{				/* superblock of the opened aggregate/lv */
+	int rc;
+
+	union {
+		struct superblock super;
+		char block[PSIZE];
+	} super;
+
+	/*
+	 * seek to the postion of the primary superblock.
+	 * since at this time we don't know the aggregate/lv
+	 * logical block size yet, we have to use the fixed
+	 * byte offset address SUPER1_OFF to seek for.
+	 */
+
+	/*
+	 * read super block
+	 */
+	rc = ujfs_rw_diskblocks(fp, SUPER1_OFF, (unsigned) SIZE_OF_SUPER, super.block, GET);
+	if (rc != 0) {
+		printf
+		    ("ldmp_readSuper: read primary agg superblock failed. errno=%d  Continuing.\n",
+		     errno);
+		fprintf(outfp, "??????????????????????????????????????????????????????\n");
+		fprintf(outfp,
+			"ldmp_readSuper: read primary agg superblock failed. errno=%d Continuing\n",
+			errno);
+		fprintf(outfp, "??????????????????????????????????????????????????????\n");
+		/* read failed for the primary superblock:
+		 * try to read the secondary superblock
+		 */
+		rc = ujfs_rw_diskblocks(fp, SUPER2_OFF, (unsigned) SIZE_OF_SUPER, super.block, GET);
+		if (rc != 0) {
+			printf
+			    ("ldmp_readSuper: read 2ndary agg superblock failed. errno=%d  Cannot continue.\n",
+			     errno);
+			fprintf(outfp, "??????????????????????????????????????????????????????\n");
+			fprintf(outfp,
+				"ldmp_readSuper: read 2ndary agg superblock failed. errno=%d  Cannot continue.\n",
+				errno);
+			fprintf(outfp, "??????????????????????????????????????????????????????\n");
+			return (MAJOR_ERROR);
+		}
+	}
+
+	*sb = super.super;
+
+	ujfs_swap_superblock(sb);
+
+	return (0);
+}
+
+extern void exit(int);
+
+/*----------------------------------------------------------------
+ *
+ *      ldmp_logError(type)
+ *
+ * error handling for log read errors.
+ */
+int ldmp_logError(int type, int logaddr)
+{
+	retcode = -1;
+	logsup.state = LOGREADERR;
+
+	switch (type) {
+	case LOGEND:
+		printf("ldmp_logError:find end of log failed \n");
+		fprintf(outfp, "??????????????????????????????????????????????????????\n");
+		fprintf(outfp, "ldmp_logError:find end of log failed \n");
+		fprintf(outfp, "??????????????????????????????????????????????????????\n");
+		break;
+	case READERR:
+		printf("log read failed 0x%x\n", logaddr);
+		fprintf(outfp, "??????????????????????????????????????????????????????\n");
+		fprintf(outfp, "log read failed 0x%x\n", logaddr);
+		fprintf(outfp, "??????????????????????????????????????????????????????\n");
+		break;
+	case UNKNOWNR:
+		printf("unknown log record type \nlog read failed 0x%x\n", logaddr);
+		fprintf(outfp, "??????????????????????????????????????????????????????\n");
+		fprintf(outfp, "unknown log record type \nlog read failed 0x%x\n", logaddr);
+		fprintf(outfp, "??????????????????????????????????????????????????????\n");
+		break;
+	case IOERROR:
+		printf("i/o error log reading page 0x%x\n", logaddr);
+		fprintf(outfp, "??????????????????????????????????????????????????????\n");
+		fprintf(outfp, "i/o error log reading page 0x%x\n", logaddr);
+		fprintf(outfp, "??????????????????????????????????????????????????????\n");
+		break;
+	case LOGWRAP:
+		printf("log wrapped...\n");
+		fprintf(outfp, "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
+		fprintf(outfp, "log wrapped...\n");
+		fprintf(outfp, "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
+	}
+
+	return (0);
+}
+
+/*----------------------------------------------------------------
+ *
+ *      ldmp_xdump()
+ *
+ * hex dump
+ */
+void ldmp_xdump(char *saddr, int count)
+{
+#define LINESZ     60
+#define ASCIISTRT  40
+#define HEXEND     36
+
+	int i, j, k, hexdigit;
+	int c;
+	char *hexchar;
+	char linebuf[LINESZ + 1];
+	char prevbuf[LINESZ + 1];
+	char *linestart;
+	int asciistart;
+	char asterisk = ' ';
+
+	hexchar = "0123456789ABCDEF";
+	prevbuf[0] = '\0';
+	i = (int) saddr % 4;
+	if (i != 0)
+		saddr = saddr - i;
+
+	for (i = 0; i < count;) {
+		for (j = 0; j < LINESZ; j++)
+			linebuf[j] = ' ';
+
+		linestart = saddr;
+		asciistart = ASCIISTRT;
+		for (j = 0; j < HEXEND;) {
+			for (k = 0; k < 4; k++) {
+				c = *(saddr++) & 0xFF;
+				if ((c >= 0x20) && (c <= 0x7e))
+					linebuf[asciistart++] = (char) c;
+				else
+					linebuf[asciistart++] = '.';
+				hexdigit = c >> 4;
+				linebuf[j++] = hexchar[hexdigit];
+				hexdigit = c & 0x0f;
+				linebuf[j++] = hexchar[hexdigit];
+				i++;
+			}
+			if (i >= count)
+				break;
+			linebuf[j++] = ' ';
+		}
+		linebuf[LINESZ] = '\0';
+		if (((j = ldmp_x_scmp(linebuf, prevbuf)) == 0) && (i < count)) {
+			if (asterisk == ' ') {
+				asterisk = '*';
+				fprintf(outfp, "    *\n");
+			}
+		} else {
+			fprintf(outfp, "    %p  %s\n", linestart, linebuf);
+			asterisk = ' ';
+			ldmp_x_scpy(prevbuf, linebuf);
+		}
+	}
+
+	return;
+}
+
+/*----------------------------------------------------------------
+ *
+ *      ldmp_x_scmp()
+ *
+ */
+int ldmp_x_scmp(char *s1, char *s2)
+{
+	while ((*s1) && (*s1 == *s2)) {
+		s1++;
+		s2++;
+	}
+	if (*s1 || *s2)
+		return (-1);
+	else
+		return (0);
+}
+
+/*----------------------------------------------------------------
+ *
+ *      ldmp_x_scpy()
+ *
+ */
+void ldmp_x_scpy(char *s1, char *s2)
+{
+	while ((*s1 = *s2) != '\0') {
+		s1++;
+		s2++;
+	}
+}
+
+/***************************************************************************
+ *
+ * NAME: disp_noredopage
+ *
+ * FUNCTION:
+ *
+ * PARAMETERS:  none
+ *
+ * NOTES:
+ *
+ * RETURNS:
+ *      success: LOGDMP_OK
+ *      failure: something else
+ */
+int disp_noredopage(struct lrd *lrd_ptr)
+{
+	fprintf(outfp, "fileset = d %d    inode = d %d (x %x)\n",
+		lrd_ptr->log.noredopage.fileset,
+		lrd_ptr->log.noredopage.inode, lrd_ptr->log.noredopage.inode);
+
+	switch (lrd_ptr->log.noredopage.type) {
+	case LOG_INODE:
+		fprintf(outfp, "\ttype = d %d NOREDOPAGE:INODE\n", lrd_ptr->log.noredopage.type);
+		break;
+	case LOG_XTREE:
+		fprintf(outfp, "\ttype = d %d NOREDOPAGE:XTREE\n  ", lrd_ptr->log.noredopage.type);
+		break;
+	case (LOG_XTREE | LOG_NEW):
+		fprintf(outfp, "\ttype = d %d NOREDOPAGE:XTREE_NEW\n  ",
+			lrd_ptr->log.noredopage.type);
+		break;
+	case (LOG_BTROOT | LOG_XTREE):
+		fprintf(outfp, "\ttype = d %d NOREDOPAGE:BTROOT_XTREE\n  ",
+			lrd_ptr->log.noredopage.type);
+		break;
+	case LOG_DTREE:
+		fprintf(outfp, "\ttype = d %d NOREDOPAGE:DTREE\n  ", lrd_ptr->log.noredopage.type);
+		break;
+	case (LOG_DTREE | LOG_NEW):
+		fprintf(outfp, "\ttype = d %d NOREDOPAGE:DTREE_NEW \n ",
+			lrd_ptr->log.noredopage.type);
+		break;
+	case (LOG_DTREE | LOG_EXTEND):
+		fprintf(outfp, "\ttype = d %d NOREDOPAGE:DTREE_EXTEND\n  ",
+			lrd_ptr->log.noredopage.type);
+		break;
+	case (LOG_BTROOT | LOG_DTREE):
+		fprintf(outfp, "\ttype = d %d NOREDOPAGE:BTROOT_DTREE\n  ",
+			lrd_ptr->log.noredopage.type);
+		break;
+	case (LOG_BTROOT | LOG_DTREE | LOG_NEW):
+		fprintf(outfp, "\ttype = d %d NOREDOPAGE:BTROOT_DTREE.NEW\n  ",
+			lrd_ptr->log.noredopage.type);
+		break;
+	case LOG_EA:
+		fprintf(outfp, "\ttype = d %d NOREDOPAGE:EA\n", lrd_ptr->log.noredopage.type);
+		break;
+	case LOG_ACL:
+		fprintf(outfp, "\ttype = d %d NOREDOPAGE:ACL\n", lrd_ptr->log.noredopage.type);
+		break;
+	case LOG_DATA:
+		fprintf(outfp, "\ttype = d %d NOREDOPAGE:DATA\n", lrd_ptr->log.noredopage.type);
+		break;
+/*
+    case LOG_NOREDOFILE:
+       fprintf( outfp, "\ttype = d %d NOREDOPAGE:NOREDOFILE\n",
+                lrd_ptr->log.noredopage.type );
+       break;
+*/
+	default:
+		fprintf(outfp, "\ttype = d %d ***UNRECOGNIZED***\n", lrd_ptr->log.noredopage.type);
+		break;
+	}
+
+	fprintf(outfp, "\tpxd length = d %d   phys offset = x %llx  (d %lld)\n",
+		lengthPXD(&(lrd_ptr->log.noredopage.pxd)),
+		(long long) addressPXD(&(lrd_ptr->log.noredopage.pxd)),
+		(long long) addressPXD(&(lrd_ptr->log.noredopage.pxd)));
+
+	return (LOGDMP_OK);
+}				/* end of disp_noredopage() */
+
+/***************************************************************************
+ *
+ * NAME: disp_noredoinoext
+ *
+ * FUNCTION:
+ *
+ * PARAMETERS:  none
+ *
+ * NOTES:
+ *
+ * RETURNS:
+ *      success: LOGDMP_OK
+ *      failure: something else
+ */
+int disp_noredoinoext(struct lrd * lrd_ptr)
+{
+	fprintf(outfp, "fileset = d %d  \n", lrd_ptr->log.noredoinoext.fileset);
+
+	fprintf(outfp, "\tiag number = d %d   extent index = d %d\n",
+		lrd_ptr->log.noredoinoext.iagnum, lrd_ptr->log.noredoinoext.inoext_idx);
+
+	fprintf(outfp, "\tpxd length = d %d   phys offset = x %llx  (d %lld)\n",
+		lengthPXD(&(lrd_ptr->log.noredoinoext.pxd)),
+		(long long) addressPXD(&(lrd_ptr->log.noredoinoext.pxd)),
+		(long long) addressPXD(&(lrd_ptr->log.noredoinoext.pxd)));
+
+	return (LOGDMP_OK);
+}				/* end of disp_noredopage() */
+
+/***************************************************************************
+ *
+ * NAME: disp_redopage
+ *
+ * FUNCTION:
+ *
+ * PARAMETERS:  none
+ *
+ * NOTES:
+ *
+ * RETURNS:
+ *      success: LOGDMP_OK
+ *      failure: something else
+ */
+int disp_redopage(struct lrd * lrd_ptr)
+{
+	fprintf(outfp, "fileset = d %d    inode = d %d (x %x)\n",
+		lrd_ptr->log.redopage.fileset, lrd_ptr->log.redopage.inode,
+		lrd_ptr->log.redopage.inode);
+
+	switch (lrd_ptr->log.redopage.type) {
+	case LOG_INODE:
+		fprintf(outfp, "\ttype = d %d REDOPAGE:INODE\n", lrd_ptr->log.redopage.type);
+		break;
+	case LOG_XTREE:
+		fprintf(outfp, "\ttype = d %d REDOPAGE:XTREE\n  ", lrd_ptr->log.redopage.type);
+		break;
+	case (LOG_XTREE | LOG_NEW):
+		fprintf(outfp, "\ttype = d %d REDOPAGE:XTREE_NEW\n  ", lrd_ptr->log.redopage.type);
+		break;
+	case (LOG_BTROOT | LOG_XTREE):
+		fprintf(outfp, "\ttype = d %d REDOPAGE:BTROOT_XTREE\n  ",
+			lrd_ptr->log.redopage.type);
+		break;
+	case LOG_DTREE:
+		fprintf(outfp, "\ttype = d %d REDOPAGE:DTREE\n  ", lrd_ptr->log.redopage.type);
+		break;
+	case (LOG_DTREE | LOG_NEW):
+		fprintf(outfp, "\ttype = d %d REDOPAGE:DTREE_NEW \n ", lrd_ptr->log.redopage.type);
+		break;
+	case (LOG_DTREE | LOG_EXTEND):
+		fprintf(outfp, "\ttype = d %d REDOPAGE:DTREE_EXTEND\n  ",
+			lrd_ptr->log.redopage.type);
+		break;
+	case (LOG_BTROOT | LOG_DTREE):
+		fprintf(outfp, "\ttype = d %d REDOPAGE:BTROOT_DTREE\n  ",
+			lrd_ptr->log.redopage.type);
+		break;
+	case (LOG_BTROOT | LOG_DTREE | LOG_NEW):
+		fprintf(outfp, "\ttype = d %d REDOPAGE:BTROOT_DTREE.NEW\n  ",
+			lrd_ptr->log.redopage.type);
+		break;
+	case LOG_EA:
+		fprintf(outfp, "\ttype = d %d REDOPAGE:EA\n", lrd_ptr->log.redopage.type);
+		break;
+	case LOG_ACL:
+		fprintf(outfp, "\ttype = d %d REDOPAGE:ACL\n", lrd_ptr->log.redopage.type);
+		break;
+	case LOG_DATA:
+		fprintf(outfp, "\ttype = d %d REDOPAGE:DATA\n", lrd_ptr->log.redopage.type);
+		break;
+/*
+    case LOG_NOREDOFILE:
+       fprintf( outfp, "\ttype = d %d REDOPAGE:NOREDOFILE\n",
+                lrd_ptr->log.redopage.type );
+       break;
+*/
+	default:
+		fprintf(outfp, "\ttype = d %d ***UNRECOGNIZED***\n", lrd_ptr->log.redopage.type);
+		break;
+	}
+	fprintf(outfp, "\tl2linesize = d %d    ", lrd_ptr->log.redopage.l2linesize);
+	fprintf(outfp, "pxd length = d %d   phys offset = x %llx  (d %lld)\n",
+		lengthPXD(&(lrd_ptr->log.redopage.pxd)),
+		(long long) addressPXD(&(lrd_ptr->log.redopage.pxd)),
+		(long long) addressPXD(&(lrd_ptr->log.redopage.pxd)));
+
+	return (LOGDMP_OK);
+}				/* end of disp_redopage() */
+
+/***************************************************************************
+ *
+ * NAME: disp_updatemap
+ *
+ * FUNCTION:
+ *
+ * PARAMETERS:  none
+ *
+ * NOTES:
+ *
+ * RETURNS:
+ *      success: LOGDMP_OK
+ *      failure: something else
+ */
+int disp_updatemap(struct lrd * lrd_ptr)
+{
+	int flag_unrecognized = -1;
+	fprintf(outfp, "fileset = d %d    inode = d %d (x %x)\n",
+		lrd_ptr->log.updatemap.fileset, lrd_ptr->log.updatemap.inode,
+		lrd_ptr->log.updatemap.inode);
+
+	fprintf(outfp, "\ttype = x %x UPDATEMAP: ", lrd_ptr->log.updatemap.type);
+
+	if ((lrd_ptr->log.updatemap.type & LOG_ALLOCXADLIST) == LOG_ALLOCXADLIST) {
+		flag_unrecognized = 0;
+		fprintf(outfp, " ALLOCXADLIST");
+	}
+	if ((lrd_ptr->log.updatemap.type & LOG_ALLOCPXDLIST) == LOG_ALLOCPXDLIST) {
+		flag_unrecognized = 0;
+		fprintf(outfp, " ALLOCPXDLIST");
+	}
+	if ((lrd_ptr->log.updatemap.type & LOG_ALLOCXAD) == LOG_ALLOCXAD) {
+		flag_unrecognized = 0;
+		fprintf(outfp, " ALLOCXAD");
+	}
+	if ((lrd_ptr->log.updatemap.type & LOG_ALLOCPXD) == LOG_ALLOCPXD) {
+		flag_unrecognized = 0;
+		fprintf(outfp, " ALLOCPXD");
+	}
+	if ((lrd_ptr->log.updatemap.type & LOG_FREEXADLIST) == LOG_FREEXADLIST) {
+		flag_unrecognized = 0;
+		fprintf(outfp, " FREEXADLIST");
+	}
+	if ((lrd_ptr->log.updatemap.type & LOG_FREEPXDLIST) == LOG_FREEPXDLIST) {
+		flag_unrecognized = 0;
+		fprintf(outfp, " FREEPXDLIST");
+	}
+	if ((lrd_ptr->log.updatemap.type & LOG_FREEXAD) == LOG_FREEXAD) {
+		flag_unrecognized = 0;
+		fprintf(outfp, " FREEXAD");
+	}
+	if ((lrd_ptr->log.updatemap.type & LOG_FREEPXD) == LOG_FREEPXD) {
+		flag_unrecognized = 0;
+		fprintf(outfp, " FREEPXD");
+	}
+	if (flag_unrecognized) {
+		fprintf(outfp, " *** UNRECOGNIZED ***");
+	}
+
+	fprintf(outfp, "\n");
+
+	fprintf(outfp, "\tnxd = d %d  (number of extents)\n", lrd_ptr->log.updatemap.nxd);
+	fprintf(outfp, "\tpxd length = d %d   phys offset = x %llx  (d %lld)\n",
+		lengthPXD(&(lrd_ptr->log.updatemap.pxd)),
+		(long long) addressPXD(&(lrd_ptr->log.updatemap.pxd)),
+		(long long) addressPXD(&(lrd_ptr->log.updatemap.pxd)));
+
+	return (LOGDMP_OK);
+}				/* end of disp_updatemap() */
+
+/*****************************************************************************
+ * NAME: open_outfile
+ *
+ * FUNCTION:  Open the output file.
+ *
+ * PARAMETERS:
+ *      Device  - input - the device specification
+ *
+ * NOTES:
+ *
+ * RETURNS:
+ *      success: XCHKLOG_OK
+ *      failure: something else
+ */
+int open_outfile()
+{
+	int openof_rc = 0;
+
+	outfp = fopen(output_filename, "w");
+
+	if (outfp == NULL) {	/* output file open failed */
+		printf("LOG_DUMP: unable to open output file: ./jfslog.dmp\n");
+		openof_rc = -1;
+	} else {
+		logdmp_outfile_is_open = -1;
+	}
+
+	return (openof_rc);
+}				/* end of open_outfile ( ) */
Index: a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs/logredo.c
===================================================================
--- a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs/logredo.c	(nonexistent)
+++ a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs/logredo.c	(revision 5)
@@ -0,0 +1,1931 @@
+/*
+ *   Copyright (c) International Business Machines Corp., 2000-2002
+ *
+ *   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 2 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, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#include <config.h>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <memory.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "jfs_types.h"
+#include "jfs_endian.h"
+#include "jfs_filsys.h"
+#include "jfs_superblock.h"
+#include "jfs_dinode.h"
+#include "jfs_dtree.h"
+#include "jfs_xtree.h"
+#include "jfs_logmgr.h"
+#include "jfs_dmap.h"
+#include "jfs_imap.h"
+#include "logredo.h"
+#include "logform.h"
+#include "devices.h"
+#include "debug.h"
+#include "utilsubs.h"
+#include "fsck_message.h"		/* for chkdsk message logging facility */
+
+/* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ *
+ *   L O C A L   M A C R O    D E F I N I T I O N S
+ *
+ */
+#define MAKEDEV(__x,__y)        (dev_t)(((__x)<<16) | (__y))
+
+#define LOGPNTOB(x)  ((x)<<L2LOGPSIZE)
+
+#define LOG2NUM(NUM, L2NUM)\
+{\
+        if ((NUM) <= 0)\
+                L2NUM = -1;\
+        else\
+        if ((NUM) == 1)\
+                L2NUM = 0;\
+        else\
+        {\
+                L2NUM = 0;\
+                while ( (NUM) > 1 )\
+                {\
+                        L2NUM++;\
+                        (NUM) >>= 1;\
+                }\
+        }\
+}
+
+/* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ *
+ *    R E M E M B E R    M E M O R Y    A L L O C    F A I L U R E
+ *
+ */
+int32_t Insuff_memory_for_maps = 0;
+char *available_stg_addr = NULL;
+int32_t available_stg_bytes = 0;
+char *bmap_stg_addr = NULL;
+int32_t bmap_stg_bytes = 0;
+
+/* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ *
+ *    S T U F F    F O R    T H E    L O G
+ *
+ */
+struct logsuper logsup;		/* log super block */
+int32_t numdoblk;		/* number of do blocks used     */
+int32_t numnodofile;		/* number of nodo file blocks used  */
+int32_t numExtDtPg = 0;		/* number of extended dtpage blocks used  */
+
+/*
+ *      open file system aggregate/lv array
+ *
+ * logredo() processes a single log.
+ *
+ * In the first release, logredo will process a single log which relates
+ * to the single fileset in a single aggregate.  In some future release,
+ * a single log may be used for multiple filesets which may or may not all
+ * reside in the same aggregate.
+ *
+ */
+struct vopen vopen[MAX_ACTIVE];
+struct log_info Log;
+struct {
+	uuid_t uuid;
+	FILE *fp;
+} primary_vol;
+extern int LogOpenMode;		/* logdump sets this to O_RDONLY */
+
+/*
+ * if this flag is set then the primary superblock is
+ * corrupt.  The secondary superblock is good, but chkdsk
+ * wasn't able to fix the primary version.  logredo can
+ * run, but must use the secondary version of the
+ * aggregate superblock
+ */
+int32_t use_2ndary_agg_superblock;
+/*
+ *      file system page buffer cache
+ *
+ * for k > 0, bufhdr[k] describes contents of buffer[k-1].
+ * bufhdr[0] is reserved as anchor for free/lru list:
+ * bufhdr[0].next points to the MRU buffer (head),
+ * bufhdr[0].prev points to the LRU buffer (tail);
+ */
+
+/* buffer header table */
+struct bufhdr {
+	int16_t next;		/* 2: next on free/lru list */
+	int16_t prev;		/* 2: previous on free/lru list */
+	int16_t hnext;		/* 2: next on hash chain */
+	int16_t hprev;		/* 2: previous on hash chain */
+	char modify;		/* 1: buffer was modified */
+	char inuse;		/* 1: buffer on hash chain */
+	int16_t reserve;	/* 2 */
+	int32_t vol;		/* 4: minor of agrregate/lv number */
+	pxd_t pxd;		/* 8: on-disk page pxd */
+} bufhdr[NBUFPOOL];		/* (24) */
+
+/* buffer table */
+struct bufpool {
+	char bytes[PSIZE];
+} buffer[NBUFPOOL - 1];
+
+/*
+ *      log page buffer cache
+ *
+ * log has its own 4 page buffer pool.
+ */
+uint8_t afterdata[LOGPSIZE * 2];	/* buffer to read in redopage data */
+
+/*
+ * Miscellaneous
+ */
+extern caddr_t prog;			/* Program name */
+extern int32_t mntcnt;
+extern int32_t bufsize;
+extern char *mntinfo;
+extern int32_t retcode;		/* return code from logredo    */
+int end_of_transaction = 0;
+
+/*
+ * external references
+ */
+extern char *optarg;
+extern int optind;
+extern int initMaps(int32_t);
+extern int updateMaps(int);
+extern int findEndOfLog(void);
+extern int logRead(int32_t, struct lrd *, char *);
+extern int logredoInit(void);
+extern int doCommit(struct lrd *);
+extern int doExtDtPg(void);
+extern int doNoRedoFile(struct lrd *, uint32_t);
+extern int doNoRedoPage(struct lrd *);
+extern int doNoRedoInoExt(struct lrd *);
+extern int doAfter(struct lrd *, int32_t);
+extern int doUpdateMap(struct lrd *);
+extern int alloc_wrksp(uint32_t, int, int, void **);
+
+extern FILE * open_by_label(uuid_t, int, int, char *, int *);
+extern char log_device[];
+/*
+ * forward references
+ */
+int doMount(struct lrd *);
+int openVol(int32_t);
+int updateSuper(int vol);
+int rdwrSuper(FILE *, struct superblock *, int32_t);
+int bflush(int32_t, struct bufpool *);
+int logOpen(void);
+int fsError(int, int, int64_t);
+int logError(int, int);
+static int recoverExtendFS(FILE *);
+int alloc_storage(int32_t, void **, int32_t *);
+int alloc_dmap_bitrec(struct dmap_bitmaps **);
+
+/*
+ * debug control
+ */
+#ifdef _JFS_DEBUG
+int32_t dflag = 1;
+time_t *Tp;
+uint32_t tp_start, tp_end;
+int xdump(char *, int);
+int x_scmp(char *, char *);
+void x_scpy(char *, char *);
+int prtdesc(struct lrd *);
+#else
+int32_t dflag = 0;
+#endif
+
+/*
+ * NAME:        jfs_logredo()
+ *
+ * FUNCTION:	Replay all transactions committed since the most
+ *		recent synch point.
+ *
+ * NOTES:
+ *	>>>>>> 	The log replay is accomplished in one pass over the
+ *		log, reading backwards from logend to the first synch
+ *		point record encountered.  This means that the log
+ *		entries are read and processed in LIFO (Last-In-First-Out)
+ *		order.  In other words, the records logged latest in
+ *		time are the first records processed during log replay.
+ *
+ *	>>>>>> 	Inodes, index trees, and directory trees
+ *
+ *		Inodes, index tree structures, and directory tree
+ *		structures are handled by processing committed redopage
+ *		records which have not been superceded by noredo records.
+ *		This processing copies data from the log record into the
+ *		appropriate disk extent page(s).
+ *
+ *		To ensure that only the last (in time) updates to any
+ *		given disk page are applied during log replay, logredo
+ *		maintains a record (union structure summary1/summary2),
+ *		for each disk page which it has processed, of which
+ *		portions have been updated by log records encountered.
+ *
+ *	>>>>>> 	Inode Allocation Map processing
+
+ *		The xtree for the Inode Allocation Map is journaled, and
+ *		a careful write is used to update it during commit
+ *		processing.
+ * The imap index tree is also duplicated at the known location. (TBD)
+ * So at logredo time, the xtree for imap is always readable and correct.
+ * This is the basic requirement from logredo.
+ *
+ * the inode map control page (struct dinomap) is only flushed to disk at
+ * the umount time. For iag, pmap will go to disk at commit time.
+ * iagnum will not change in run-time.
+ * agstart field will stable without extendfs utility. It is TBD for
+ * how to handle agstart when extendfs utility is available.
+ * Other fields ( wmap. inosmap, extsmap ino free list pointers,
+ * ino ext free list pointers ) are at working status ( i.e they are
+ * updated in run-time. So the following
+ * meta-data of the imap need to be reconstructed at the logredo time:
+ *  1) IAGs, the pmap of imap and inoext array are contained in IAGs.
+ *  2) AG Free inode list
+ *  3) AG Free Inode Extent list
+ *  4) IAG Free list
+ *
+ * There are two imaps need to take care of :
+ *   1) aggregate imap
+ *   2) fileset imap
+ * For the first release, the aggregate imap is stable and we only
+ * need to deal with the fileset imap.
+ *
+ * Block Allocation Map (bmap file) is for an aggregate/lv. There are
+ * three fields related to the size of bmap file.
+ *  1) superblock.s_size: This field indicates aggregate size. It
+ *                        tells number of sector-size blocks for this
+ *                        aggregate. The size of aggregate determines
+ *                        the size of its bmap file.
+ *                        Since the aggregate's superblock is updated
+ *                        using sync-write, superblock.s_size is trustable
+ *                        at logredo time.
+ *               note1:   mkfs reserves the fsck space. So s_size really
+ *                        inidcate (size_of_aggregate - fsck_reserve_space)
+ *               note2:   At the mkfs time, "-s" parameter could be used
+ *                        to indicate how large the aggregate/filesystem is.
+ *                        One lv contains at most one aggregate/filesystem.
+ *                        If "-s" gives the value is smaller than the size
+ *                        of lv, it is ok. The space is just wasted.
+ *
+ *                        Without "-s" parameter, mkfs wil use the whole
+ *                        size of lv to make an aggregate/filesystem.
+ *                        That is usually the case. So we can also say
+ *                        an aggregate/lv. "-s" is often used for test.
+ *
+ *  2) dbmap.dn_mapsize: This field also indicates aggregate/lv size.
+ *                        It tells number of aggre. blocks in the
+ *                        aggregate/lv. Without extendfs, this field should
+ *                        be equivalent to superblock.s_size.
+ *                        With extendfs, this field may not be updated
+ *                        before a system crash happens. So logredo
+ *                        need to update it.
+ *  3) dinode.di_size:  For an inode of bmap file, this field indicates
+ *                        the logical size of the file. I.e. it contains
+ *                        the offset value of the last byte written
+ *                        in the file plus one.
+ *                        So di_size will include the bmap control page,
+ *                        the dmap control pages and dmap pages.
+ *                        In the JFS, if a file is a sparse file, the logical
+ *                        size is different from its physical size.
+ *                        The bmap file is a sparse file if the total of
+ *                        dmap pages is  ( < 1024) or ( < 1024 * 1024).
+ *                        In that case, physically L1.0, and/or L2 does
+ *                        not exist, but di_size will include their page
+ *                        size.
+ *
+ *              Note:     The di_size does NOT contain the logical
+ *                        structure of the file, i.e. the space allocated
+ *                        for the xtree stuff is not indicated in di_size.
+ *                        It is indicated in di_nblocks.
+ *
+ *                        In addition, the mkfs always put one more dmap
+ *                        page into the bmap file for preparing extendfs.
+ *                        This hidden dmap page cannot be figured out from
+ *                        superblock.s_size, but di_size includes it. Any
+ *                        dmapctl pages caused by this hidden dmap page
+ *                        are also included in di_size.
+ *
+ * The bmap control page, dmap control pages and dmap pages are all
+ * needed to rebuild at logredo time.
+ *
+ * In overall, the following actions are taken at logredo time:
+ *   1) apply log rec data to the specified page.
+ *   2) initialize freelist for dtree page or root.
+ *   3) rebuilt imap
+ *   4) rebuilt bmap
+ *   in addition, in order to ensure the log record only applying to a
+ *   certain portion of page one time, logredo will start NoRedoFile,
+ *   NoRedoExtent/NoRedoPage filter in the process for accuracy and
+ *   efficiency.
+ *
+ *  The three log rec types: REDOPAGE, NOREDOPAGE, NOREDOINOEXT, and
+ *  UPDATEMAP, are the main force to initiate these actions.  See
+ *  comments on doAfter(), updatePage(), doNoRedoPage(), doNoRedoInoExt,
+ *  and doUpdateMap() for detailed information.
+ *
+ * If the aggregate/lv has state of FM_DIRTY, then fsck will run
+ * after the logredo process since logredo could not get 100%
+ * recovery. Currently bmap rebuild is slow ( 1 min per 32 GB),
+ * so logredo will NOT rebuild imap and bmap if fsck will do it
+ * anyway. But logredo still read maps in and mark them for starting
+ * NoRedoExtent/NoRedoPage filter.
+ *
+ * The maps are rebuilt in the following way:
+ * at the init phase, storage is allocated for the whole map file for
+ * both imap and bmap. Reading in the map files from the disk.
+ * The wmap is inited to zero. At the logredo time, the wmap is used
+ * to track the bits in pmap. In the beginning of the logredo process
+ * the allocation status of every block is in doubt. As log records
+ * are processed, the allocation state is determined and the bit of pmap
+ * is updated. This fact is recorded in the corresponding bits in wmap.
+ * So a pmap bit is only updated once at logredo time and only updated
+ * by the latest in time log record.
+ * At the end of logredo, the control information, the freelist, etc.
+ * are built from the value of pmap; then pmap is copied to wmap and
+ * the whole map is written back to disk.
+ *
+ * the status field s_state in the superblock of each file-system is
+ * set to FM_CLEAN provided the initial status was either FM_CLEAN
+ * or FM_MOUNT and logredo processing was successful. If an error
+ * is detected in logredo the status is set to FM_LOGREDO. the status
+ * is not changed if its initial value was FM_MDIRTY. fsck should be
+ * run to clean-up the probable damage if the status after logredo
+ * is either FM_LOGREDO or FM_MDIRTY.
+ *
+ *  The log record has the format:
+ *   <LogRecordData><LogRecLRD>
+ *  At logredo time, the log is read backward. So for every log rec,
+ *  we read LogRecLRD, which tells how long the LogRecordData is.
+ *  see comments on updatePage() for detailed info of log record format.
+ *
+ *.....................................................................
+ * The logredo handles the log-within-file-system (aka inline log) issue:
+ *.....................................................................
+ * For AIX, we always deal with the outline log, i.e. the log resides
+ * in a separate logical volume. A log is associated with one volume
+ * group and can be shared by many file systems with this volume group.
+ * In AIX, the logredo received a device name. It then determines if
+ * this device is a log name  or a filesystem name. If it is a filesustem
+ * name, get the log minor number for this filesystem. If it is a log name,
+ * get its minor number.
+ *
+ * XJFS decided to put log inside the file system
+ *
+ * For supporting the inline log, the above AIX logic should be changed.
+ *
+ * Here is the outline:
+ *
+ * When the logredo received a device name, it first read the SIZE_OF_SUPER
+ * bytes from SUPER1_OFF  offset to see if it is a file system superblock.
+ * If yes, check the s_flag to see if it has a inline log or outline log.
+ * for an inline log the s_logdev should match the input device name's
+ * major and minor number. If not, an error is returned and logredo exit.
+ * If no error, the logredo read the log superblock according the log info
+ * in the fs superblock.
+ * If the device name does not represent a filesystem device, then logredo
+ * read the LOGPSIZE bytes from the log page 1 location. If it indicates
+ * a log device, then open the filesystems according to the log superblock's
+ * active list. For each filesystem in the active list, read its superblock
+ * if one of the superblock indicates that it uses an inline log, return
+ * an error. It is a system code bug if some filesystems use inline log
+ * and some use outline log.
+ * If the superblock indicates it used an outline log, check the superblock's
+ * s_logdev to match the input device name's major and minor numbers.
+ * If one of them does not match, return error. -- It is a system code bug,
+ * if some match and some not match; -- It should either match all or non of
+ * them match. The AIX logredo never check s_logdev with the input log device.
+ * We should check here.
+ *
+ * for outline log, logredo will be called once to cover all the file
+ * systems in the log superblock's active list.
+ * For inline log, logredo will be called many times. Each time is for
+ * one file system. The log superblock's active list has nothing. The
+ * logmajor and logminor contains file system's major and minor number.
+ *
+ *.....................................................................
+ * logredo handles support EA:
+ *.....................................................................
+ * There is 16-byte EA descriptor which is located in the section I of
+ * dinode.
+ * The EA can be inline or outline. If it is inlineEA then the data will
+ * occupy the section IV of the dinode. The dxd_t.flag will indicate so.
+ * If it is outlineEA, dxd_t.flag will indicate so and the single extent
+ * is described by EA descriptor.
+ *
+ * The section IV of dinode has 128 byte. It is shared by the xtroot and
+ * inlineEA. The sharing is in FCFS style. If xtree gets the section IV,
+ * xtree will never give it away even if xtree is shrink or split.
+ * If inlineEA gets it, there is a chance that later inlineEA is freed and
+ * so xtree still can get it.
+ *
+ * for outlineEA, the XJFS will syncly write the data portion out so there
+ * is no log rec for the data, but there is still an INODE log rec for EA
+ * descriptor changes and there is a UPDATEMAP log rec for the allocated
+ * pxd. If an outlineEA is freed, there are also two log records for it:
+ * one is INODE with EA descriptor zeroed out, another is the UPDATEMAP
+ * log rec for the freed pxd.
+ * For inlineEA, it has to be recorded in the log rec. It is not in a
+ * separate log rec. Just one additional segment is added into the
+ * INODE log rec. So an INODE log rec can have at most three segments:
+ * when the parent and child inodes are in the same page, then there are
+ * one segment for parent base inode; one segment for child base inode;
+ * and maybe the third one for the child inlineEA data.
+ *....................................................................
+ * 32-bit vs 64-bit
+ * At the first release. assume that a file system will not be larger
+ * than 32-bit.
+ *....................................................................
+ * TBD:
+ * the method for handling crashes in the middle of extending a file
+ * system is as follows. the size of a filesystem is established from
+ * the superblock.s_size field (i.e the sizes in the diskmap
+ * and inodemaps are ignored). in extendfs (jfs_cntl.c) the superblock
+ * is not updated before the maps have been extended and the new inodes
+ * formatted to zeros. no allocations in the new part of the filesystem
+ * occur prior to the change in map sizes. if a crash occurs just
+ * before updating the superblock, the map sizes will be their old
+ * values. in this case the maps as files may be bigger than necessary.
+ * if the crash occurs just after writing the super block, the map sizes
+ * are fixed up here.
+ */
+int jfs_logredo(caddr_t pathname, FILE *fp, int32_t use_2nd_aggSuper)
+{
+	int rc;
+	int k, logaddr, nextaddr, lastaddr, nlogrecords;
+	int syncrecord = 0;
+	struct lrd ld;
+	int lowest_lr_byte = 2 * LOGPSIZE + LOGPHDRSIZE;
+	int highest_lr_byte = 0;
+	int log_has_wrapped = 0;
+	int logend;
+	int in_use;
+
+	/*
+	 * store away the indicator of which aggregate superblock
+	 * to use
+	 */
+	use_2ndary_agg_superblock = use_2nd_aggSuper;
+
+	/*
+	 * loop until we get enough memory to read vmount struct
+	 */
+	mntinfo = (char *) &bufsize;
+	bufsize = sizeof (int);
+
+	/*
+	 * validate that the log is not currently in use;
+	 */
+	rc = findLog(fp, &in_use);
+	if (rc < 0) {
+		fsck_send_msg(lrdo_DEVOPNREADERROR);
+		return (rc);
+	}
+
+	/* recover from extendfs() ? */
+	if (Log.location & INLINELOG && (vopen[0].status & FM_EXTENDFS)) {
+		fsck_send_msg(lrdo_REXTNDBEGIN);
+		rc = recoverExtendFS(fp);
+		fsck_send_msg(lrdo_REXTNDDONE);
+		return rc;
+	}
+
+	/*
+	 * validate log superblock
+	 *
+	 * aggregate block size is for log file as well.
+	 */
+	rc = ujfs_rw_diskblocks(Log.fp,
+				(uint64_t) (Log.xaddr +
+					    LOGPNTOB(LOGSUPER_B)),
+				(unsigned) sizeof (struct logsuper), (char *) &logsup, GET);
+	if (rc != 0) {
+		fsck_send_msg(lrdo_CANTREADLOGSUP);
+		rc = LOGSUPER_READ_ERROR;
+		goto error_out;
+	}
+	ujfs_swap_logsuper(&logsup);
+
+	if (logsup.magic != LOGMAGIC) {
+		fsck_send_msg(lrdo_LOGSUPBADMGC);
+		rc = NOT_LOG_FILE_ERROR;
+		goto error_out;
+	}
+
+	if (logsup.version > LOGVERSION) {
+		fsck_send_msg(lrdo_LOGSUPBADVER);
+		rc = JFS_VERSION_ERROR;
+		goto error_out;
+	}
+
+	if (Log.location & OUTLINELOG) {
+		struct stat st;
+
+		if ((rc = fstat(fileno(Log.fp), &st)))
+			goto error_out;
+
+		Log.devnum = st.st_rdev;
+
+		if (in_use) {
+			fsck_send_msg(lrdo_LOGINUSE);
+			return LOG_IN_USE;
+		}
+	}
+
+	if (logsup.state == LOGREDONE) {
+		fsck_send_msg(lrdo_ALREADYREDONE);
+		if (Log.location & INLINELOG)
+			if ((rc = updateSuper(0)) != 0) {
+				fsck_send_msg(lrdo_CANTUPDLOGSUP);
+				return (rc);
+			}
+		return (0);
+	}
+
+	Log.size = logsup.size;
+	Log.serial = logsup.serial;
+
+	/*
+	 * find the end of log
+	 */
+	logend = findEndOfLog();
+
+	if (logend < 0) {
+		fsck_send_msg(lrdo_LOGEND, logend);
+
+		fsck_send_msg(lrdo_LOGENDBAD1);
+		logError(LOGEND, 0);
+		ujfs_swap_logsuper(&logsup);
+		rc = ujfs_rw_diskblocks(Log.fp,
+					(Log.xaddr + LOGPNTOB(LOGSUPER_B)),
+					(unsigned long) LOGPSIZE, (char *) &logsup, PUT);
+		rc = logend;
+		goto error_out;
+	}
+
+	/*
+	 * allocate/initialize logredo runtime data structures and
+	 * initialize each file system associated with the log based on
+	 * the contents of its superblock
+	 */
+	if ((rc = logredoInit()) != 0) {
+		fsck_send_msg(lrdo_INITFAILED, rc, errno);
+		goto error_out;
+	}
+
+	highest_lr_byte = logsup.size * LOGPSIZE - LOGRDSIZE;
+
+	if ((logend < lowest_lr_byte) || (logend > highest_lr_byte)) {
+		fsck_send_msg(lrdo_LOGEND, logend);
+
+		fsck_send_msg(lrdo_LOGENDBAD2);
+		rc = INVALID_LOGEND;
+		goto error_out;
+	}
+
+	/*
+	 *      replay log
+	 *
+	 * read log backwards and process records as we go.
+	 * reading stops at place specified by first SYNCPT we
+	 * encounter.
+	 */
+	nlogrecords = lastaddr = 0;
+	nextaddr = logend;
+
+	do {
+		logaddr = nextaddr;
+		nextaddr = logRead(logaddr, &ld, afterdata);
+		DBG_TRACE(("Logaddr=%x\nNextaddr=%x\n", logaddr, nextaddr))
+		    nlogrecords += 1;
+		/*
+		 *
+		 * Validate the nextaddr as much as possible
+		 *
+		 */
+		if (nextaddr < 0) {
+			fsck_send_msg(lrdo_NEXTADDRINVALID);
+			rc = nextaddr;
+			goto error_out;
+		}
+
+		if ((nextaddr < lowest_lr_byte)
+		    || (nextaddr > highest_lr_byte)) {
+			fsck_send_msg(lrdo_NEXTADDROUTRANGE, nextaddr);
+			rc = INVALID_NEXTADDR;
+			goto error_out;
+		}
+
+		if (nextaddr == logaddr) {
+			fsck_send_msg(lrdo_NEXTADDRSAME, nextaddr);
+			rc = NEXTADDR_SAME;
+			goto error_out;
+		}
+
+		if (nextaddr > logaddr) {
+			if (log_has_wrapped) {
+				fsck_send_msg(lrdo_LOGWRAPPED);
+				rc = LOG_WRAPPED_TWICE;
+				goto error_out;
+			} else {
+				log_has_wrapped = -1;
+			}
+		}
+		/*
+		 *
+		 * The addresses seem ok.  Process the current record.
+		 *
+		 */
+		switch (ld.type) {
+		case LOG_COMMIT:
+			rc = doCommit(&ld);
+			if (rc) {
+				fsck_send_msg(lrdo_BADCOMMIT, logaddr);
+
+				goto error_out;
+			}
+			break;
+		case LOG_MOUNT:
+			fsck_send_msg(lrdo_MOUNTRECORD, logaddr);
+
+			rc = doMount(&ld);
+			if (rc) {
+				fsck_send_msg(lrdo_BADMOUNT, logaddr);
+
+				goto error_out;
+			}
+			break;
+
+		case LOG_SYNCPT:
+			fsck_send_msg(lrdo_SYNCRECORD, logaddr);
+
+			rc = 0;
+			if (lastaddr == 0) {
+				syncrecord = logaddr;
+				lastaddr = (ld.log.syncpt.sync == 0)
+				    ? logaddr : ld.log.syncpt.sync;
+			}
+			break;
+
+		case LOG_REDOPAGE:
+			DBG_TRACE(("jfs_logredo:Case Log_redoPage"))
+			    rc = doAfter(&ld, logaddr);
+			if (rc) {
+				fsck_send_msg(lrdo_BADREDOPAGE, logaddr);
+				goto error_out;
+			}
+			break;
+
+		case LOG_NOREDOPAGE:
+			DBG_TRACE(("jfs_logredo:Case Log_noredopage"))
+			    rc = doNoRedoPage(&ld);
+			if (rc) {
+				fsck_send_msg(lrdo_BADNOREDOPAGE, logaddr);
+				goto error_out;
+			}
+			break;
+
+		case LOG_NOREDOINOEXT:
+			DBG_TRACE(("jfs_logredo:Case Log_noredoinoext"))
+			    rc = doNoRedoInoExt(&ld);
+			if (rc) {
+				fsck_send_msg(lrdo_BADNOREDOINOEXT, logaddr);
+				goto error_out;
+			}
+			break;
+
+		case LOG_UPDATEMAP:
+			rc = doUpdateMap(&ld);
+			if (rc) {
+				fsck_send_msg(lrdo_BADUPDATEMAP, logaddr);
+				goto error_out;
+			}
+			break;
+
+		default:
+			fsck_send_msg(lrdo_UNKNOWNTYPE, logaddr);
+			rc = UNRECOG_LOGRECTYP;
+			goto error_out;
+			break;
+		}
+
+		if (rc < 0) {
+			fsck_send_msg(lrdo_ERRORNEEDREFORMAT);
+			goto error_out;
+		}
+
+		if (rc != 0) {
+			fsck_send_msg(lrdo_ERRORCANTCONTIN);
+			goto error_out;
+		}
+
+		/*
+		 * If the transaction just completed was the last
+		 * for the current transaction, then flush the
+		 * buffers.
+		 */
+		if (end_of_transaction != 0) {
+			for (k = 1; k < NBUFPOOL; k++) {
+				if ((rc = bflush(k, &buffer[k - 1])) != 0)
+					goto error_out;
+			}
+			end_of_transaction = 0;
+		}
+
+	} while (logaddr != lastaddr);
+	/*
+	 * If any 'dtpage extend' records were processed, then we need
+	 * to go back and rebuild their freelists.  This cannot be done
+	 * when the 'dtpage extend' record is processed, since there may
+	 * be records processed later which affect the previous (shorter)
+	 * version of the dtpage.  Only after all these records are processed
+	 * can we safely and accurately rebuild the freelist.
+	 */
+	if (numExtDtPg != 0) {
+		rc = doExtDtPg();
+	}
+
+	/*
+	 * flush data page buffer cache
+	 */
+	for (k = 1; k < NBUFPOOL; k++) {
+		if ((rc = bflush(k, &buffer[k - 1])) != 0)
+			break;
+	}
+
+	/*
+	 *      finalize file systems
+	 *
+	 * update allocation map and superblock of file systems
+	 * of volumes which are open if they were modified here.
+	 * i.e. if they were not previously unmounted cleanly.
+	 */
+	for (k = 0; k < MAX_ACTIVE; k++) {
+		if (vopen[k].state != VOPEN_OPEN)
+			continue;
+
+		if ((rc = updateMaps(k)) != 0) {
+			fsck_send_msg(lrdo_ERRORCANTUPDMAPS);
+			goto error_out;
+		}
+
+		/* Make sure all changes are committed to disk before we
+		 * mark the superblock clean
+		 */
+		ujfs_flush_dev(vopen[k].fp);
+
+		if ((rc = updateSuper(k)) != 0) {
+			fsck_send_msg(lrdo_ERRORCANTUPDFSSUPER);
+			goto error_out;
+		}
+
+		/* sync superblock before journal is finalized */
+		ujfs_flush_dev(vopen[k].fp);
+	}
+
+	/*
+	 *      finalize log.
+	 *
+	 * clear active list.
+	 * If this is a fully replayed log then it can be moved to earlier
+	 * versions of the operating system.  Therefore switch the magic
+	 * number to the earliest level.
+	 */
+	if (logsup.state != LOGREADERR) {
+		for (k = 0; k < MAX_ACTIVE; k++)
+			uuid_clear(logsup.active[k]);
+
+		logsup.end = logend;
+		logsup.state = LOGREDONE;
+		logsup.magic = LOGMAGIC;
+	}
+	ujfs_swap_logsuper(&logsup);
+	rc = ujfs_rw_diskblocks(Log.fp, (Log.xaddr + LOGPNTOB(LOGSUPER_B)),
+				LOGPSIZE, (char *) &logsup, PUT);
+
+	/*
+	 * now log some info for the curious
+	 */
+	fsck_send_msg(lrdo_LOGEND, logend);
+
+	fsck_send_msg(lrdo_RPTSYNCNUM, syncrecord);
+
+	fsck_send_msg(lrdo_RPTSYNCADDR, lastaddr);
+
+	fsck_send_msg(lrdo_RPTNUMLOGREC, nlogrecords);
+
+	fsck_send_msg(lrdo_RPTNUMDOBLK, numdoblk);
+
+	fsck_send_msg(lrdo_RPTNUMNODOBLK, numnodofile);
+
+      error_out:
+
+	if (rc > 0) {
+		rc = rc * (-1);
+	}
+
+	/*
+	 * If everything went ok except that we didn't have
+	 * enough memory to deal with the block map, tell chkdsk
+	 * to be sure to do a full check and repair, but that a log
+	 * format is not necessary
+	 */
+	if ((rc == 0) && Insuff_memory_for_maps) {
+		rc = ENOMEM25;
+	}
+
+	return (rc);
+}
+
+/*
+ * NAME:        doMount(ld)
+ *
+ * FUNCTION:    a log mount record is the first-in-time record which is
+ *              put in the log so it is the last we want to process in
+ *              logredo. so we mark volume as cleanly unmounted in vopen
+ *              array. the mount record is imperative when the volume
+ *              is a newly made filesystem.
+ */
+int doMount(struct lrd *ld)
+{				/* pointer to record descriptor */
+	int vol, status;
+
+	vol = ld->aggregate;
+
+	status = vopen[vol].status;
+	DBG_TRACE(("Logredo:domount: status=%d\n", status))
+
+	    if (!(status & (FM_LOGREDO | FM_DIRTY)))
+		vopen[vol].status = FM_CLEAN;
+
+	return (0);
+}
+
+/*
+ * NAME:        openVol(vol)
+ *
+ * FUNCTION:    open the aggregate/volume specified.
+ *              check if it was cleanly unmounted. also check log
+ *              serial number. initialize disk and inode mpas.
+ */
+int openVol(int vol)
+{				/* device minor number of aggregate/lv */
+	int rc, l2agsize, agsize;
+	int64_t fssize;		/* number of aggr blks in the aggregate/lv */
+	struct superblock sb;
+	int aggsb_numpages;
+
+	if (Log.location & OUTLINELOG) {
+		/* First check if this is the already opened volume */
+		if (!uuid_compare(vopen[vol].uuid, primary_vol.uuid))
+			vopen[vol].fp = primary_vol.fp;
+		else {
+			vopen[vol].fp = open_by_label(vopen[vol].uuid, 0, 0,
+						      NULL, NULL);
+			if (vopen[vol].fp == NULL)
+				return ENOENT;
+		}
+	}
+
+	/* read superblock of the aggregate/volume */
+	if ((rc = rdwrSuper(vopen[vol].fp, &sb, PB_READ)) != 0) {
+		fsck_send_msg(lrdo_CANTREADFSSUPER);
+
+		fsError(READERR, vol, SUPER1_B);
+		vopen[vol].state = VOPEN_CLOSED;
+		return (FSSUPER_READERROR1);
+	}
+
+	/* check magic number and initialize version specific
+	 * values in the vopen struct for this vol.
+	 */
+	if (strncmp(sb.s_magic, JFS_MAGIC, (unsigned) strlen(JFS_MAGIC))) {
+		fsck_send_msg(lrdo_FSSUPERBADMAGIC);
+		vopen[vol].state = VOPEN_CLOSED;
+		return (LOGSUPER_BADMAGIC);
+	}
+	if (sb.s_version > JFS_VERSION) {
+		fsck_send_msg(lrdo_FSSUPERBADMAGIC);
+		vopen[vol].state = VOPEN_CLOSED;
+		return (LOGSUPER_BADVERSION);
+	}
+
+	if (Log.location & OUTLINELOG && (sb.s_flag & (JFS_INLINELOG == JFS_INLINELOG))) {
+		fsck_send_msg(lrdo_FSSUPERBADLOGLOC);
+		vopen[vol].state = VOPEN_CLOSED;
+		return (LOGSUPER_BADLOGLOC);
+	}
+	vopen[vol].lblksize = sb.s_bsize;
+	vopen[vol].l2bsize = sb.s_l2bsize;
+	vopen[vol].l2bfactor = sb.s_l2bfactor;
+	fssize = sb.s_size >> sb.s_l2bfactor;
+	vopen[vol].fssize = fssize;
+	vopen[vol].agsize = sb.s_agsize;
+	/* LOG2NUM will alter agsize, so use local var (Then why don't we
+	   fix LOG2NUM?) */
+	agsize = vopen[vol].agsize;
+	LOG2NUM(agsize, l2agsize);
+	vopen[vol].numag = fssize >> l2agsize;
+	if (fssize & (vopen[vol].agsize - 1))
+		vopen[vol].numag += 1;
+	vopen[vol].l2agsize = l2agsize;
+
+	if (Log.location & INLINELOG) {
+		/*
+		 * Now that the aggregate superblock has been read, do some
+		 * more validation of the log superblock
+		 */
+		if (logsup.bsize != vopen[vol].lblksize) {
+			fsck_send_msg(lrdo_LOGSUPBADBLKSZ);
+			return JFS_BLKSIZE_ERROR;
+		}
+
+		if (logsup.l2bsize != vopen[vol].l2bsize) {
+			fsck_send_msg(lrdo_LOGSUPBADL2BLKSZ);
+			return JFS_L2BLKSIZE_ERROR;
+		}
+
+		aggsb_numpages = lengthPXD(&sb.s_logpxd) * logsup.bsize / LOGPSIZE;
+		if (logsup.size != aggsb_numpages) {
+			fsck_send_msg(lrdo_LOGSUPBADLOGSZ);
+			return JFS_LOGSIZE_ERROR;
+		}
+	}
+	/*
+	 *set lbperpage in vopen.
+	 */
+	vopen[vol].lbperpage = PSIZE >> vopen[vol].l2bsize;
+
+	/*
+	 * was it cleanly umounted ?
+	 */
+	if (sb.s_state == FM_CLEAN) {
+		vopen[vol].status = FM_CLEAN;
+		vopen[vol].state = VOPEN_CLOSED;
+		return (0);
+	}
+
+	/*
+	 * get status of volume
+	 */
+	vopen[vol].status = sb.s_state;
+	vopen[vol].is_fsdirty = (sb.s_state & FM_DIRTY);
+
+	/*
+	 *check log serial number
+	 */
+	if (sb.s_logserial != Log.serial) {
+		fsck_send_msg(lrdo_FSSUPERBADLOGSER);
+		vopen[vol].state = VOPEN_CLOSED;
+		fsError(SERIALNO, vol, SUPER1_B);
+		return (LOGSUPER_BADSERIAL);
+	}
+
+	/* initialize the disk and inode maps
+	 */
+	if ((rc = initMaps(vol)) != 0) {
+		fsck_send_msg(lrdo_INITMAPSFAIL);
+		fsError(MAPERR, vol, 0);
+		return (rc);
+	}
+	vopen[vol].state = VOPEN_OPEN;
+	return 0;
+}
+
+/*
+ * NAME:         updateSuper(vol)
+ *
+ * FUNCTION:     updates primary aggregate/lv's superblock status and
+ *               writes it out.
+ */
+int updateSuper(int vol)
+{				/* device minor number of aggregate/lv */
+	int rc, status;
+	struct superblock sb;
+
+	/* read in superblock of the volume */
+	if ((rc = rdwrSuper(vopen[vol].fp, &sb, PB_READ)) != 0) {
+		fsck_send_msg(lrdo_READFSSUPERFAIL);
+		return (FSSUPER_READERROR2);
+	}
+
+	/* mark superblock state. write it out */
+	status = vopen[vol].status;
+	if (status & (FM_DIRTY | FM_LOGREDO))
+		sb.s_state = status & ~FM_EXTENDFS;
+	else
+		sb.s_state = FM_CLEAN;
+
+	if ((rc = rdwrSuper(vopen[vol].fp, &sb, PB_UPDATE)) != 0) {
+		fsck_send_msg(lrdo_WRITEFSSUPERFAIL);
+	}
+
+	return (rc);
+}
+
+/*
+ * NAME:        rdwrSuper(fp, sb, rwflag)
+ *
+ * FUNCTION:    read or write the superblock for the file system described
+ *              by the file descriptor of the opened aggregate/lv.
+ *              for read, if a read of primary superblock is failed,
+ *              try to read the secondary superblock. report error only
+ *              when both reads failed.
+ *              for write, any write failure should be reported.
+ */
+int rdwrSuper(FILE *fp, struct superblock * sb, int32_t rwflag)
+{
+	int rc;
+	uint64_t super_offset;
+	union {
+		struct superblock super;
+		char block[PSIZE];
+	} super;
+
+	if (use_2ndary_agg_superblock) {
+		super_offset = SUPER2_OFF;
+	} else {
+		super_offset = SUPER1_OFF;
+	}
+	/*
+	 * seek to the postion of the primary superblock.
+	 * since at this time we don't know the aggregate/lv
+	 * logical block size yet, we have to use the fixed
+	 * byte offset address super_offset to seek for.
+	 */
+
+	/*
+	 * read super block
+	 */
+	if (rwflag == PB_READ) {
+		rc = ujfs_rw_diskblocks(fp, super_offset,
+					(unsigned) SIZE_OF_SUPER, super.block, GET);
+		if (rc != 0) {
+			if (!use_2ndary_agg_superblock) {
+				fsck_send_msg(lrdo_READFSPRIMSBFAIL);
+				return (CANTREAD_PRIMFSSUPER);
+			} else {
+				fsck_send_msg(lrdo_READFS2NDSBFAIL);
+				return (CANTREAD_2NDFSSUPER);
+			}
+		}
+
+		*sb = super.super;
+
+		ujfs_swap_superblock(sb);
+
+		/*
+		 * write superblock
+		 */
+	} else {		/* PB_UPDATE */
+		/* ? memset(super.block, 0, SIZE_OF_SUPER); */
+		super.super = *sb;
+
+		ujfs_swap_superblock(&super.super);
+
+		/*
+		 * write whichever superblock we're working with.
+		 * chkdsk will take care of replicating it.
+		 */
+		rc = ujfs_rw_diskblocks(fp, super_offset,
+					(unsigned) SIZE_OF_SUPER, super.block, PUT);
+		if (rc != 0) {
+			if (!use_2ndary_agg_superblock) {
+				fsck_send_msg(lrdo_WRITEFSPRIMSBFAIL);
+				return (CANTWRITE_PRIMFSSUPER);
+			} else {
+				fsck_send_msg(lrdo_WRITEFS2NDSBFAIL);
+				return (CANTWRITE_2NDFSSUPER);
+			}
+		}
+	}
+
+	return (0);
+}
+
+/*
+ * NAME:        bflush()
+ *
+ * FUNCTION:    write out appropriate portion of buffer page if its modified.
+ *              Note that a dtree page may not be 4k, depending on the length
+ *              field specified in pxd. Write out only length that is needed.
+ */
+int bflush(int32_t k,		/*  The index in bufhdr that describes buf */
+	   struct bufpool *buf)
+{				/* pointer to buffer pool page */
+	FILE *fp = NULL;
+	int rc;
+	int32_t vol;
+	int32_t nbytes;
+	int64_t blkno;
+
+	/* nothing to do ? */
+	if (bufhdr[k].modify == 0)
+		return (0);
+
+	/* write it out */
+	vol = bufhdr[k].vol;
+	fp = vopen[vol].fp;
+	blkno = addressPXD(&bufhdr[k].pxd);
+	nbytes = lengthPXD(&bufhdr[k].pxd) << vopen[vol].l2bsize;
+	rc = ujfs_rw_diskblocks(fp,
+				(uint64_t) (blkno << vopen[vol].l2bsize),
+				(unsigned) nbytes, (char *) buf, PUT);
+	if (rc != 0) {
+		fsck_send_msg(lrdo_BUFFLUSHFAIL);
+		return (BFLUSH_WRITEERROR);
+	}
+
+	bufhdr[k].modify = 0;
+
+	return (0);
+}
+
+/*
+ * NAME:        findLog()
+ *
+ * FUNCTION:    open the device to see if it's a valid filesystem
+ * 		or journal.  If it is a filesystem, determine whether
+ * 		the log is inline or external.  If external, find
+ * 		the log device.
+ *
+ */
+int findLog(FILE *fp, int *in_use)
+{
+	struct logsuper logsup;
+	struct superblock sb;
+
+	*in_use = 0;
+	/*
+	 * try the LV as file system with in-line log
+	 */
+	if (rdwrSuper(fp, &sb, PB_READ)) {
+		fsck_send_msg(lrdo_NOTAFSDEV);
+		return NOT_FSDEV_ERROR;
+	}
+
+	/*
+	 * is the LV a file system ?
+	 */
+	if (memcmp(sb.s_magic, JFS_MAGIC, sizeof (sb.s_magic)) == 0) {
+		/*
+		 * does file system contains its in-line log ?
+		 */
+		if ((sb.s_flag & JFS_INLINELOG) == JFS_INLINELOG) {
+			Log.location = INLINELOG;
+			Log.fp = fp;
+			//Log.status = sb.s_state;
+			Log.l2bsize = sb.s_l2bsize;
+			Log.xaddr = addressPXD(&sb.s_logpxd) << sb.s_l2bsize;
+
+			/* vopen[0] represents fs if inline log */
+			vopen[0].status = sb.s_state;
+			vopen[0].fp = fp;
+
+			return 0;
+		}
+		/* Save fp and uuid */
+		primary_vol.fp = fp;
+		uuid_copy(primary_vol.uuid, sb.s_uuid);
+
+		/*
+		 * External log
+		 *
+		 * First check device specified on
+		 * command line
+		 */
+		Log.xaddr = 0;
+		if (log_device[0]) {
+			Log.fp = NULL;
+			if (LogOpenMode != O_RDONLY) {
+				Log.fp = fopen_excl(log_device, "r+");
+				if (Log.fp == NULL)
+					*in_use = 1;
+			}
+			if (Log.fp == NULL) {
+				Log.fp = fopen(log_device, "r");
+				if (Log.fp == NULL) {
+					printf("Invalid journal specified (%s)\n",
+					       log_device);
+					goto by_uuid;
+				}
+			}
+			ujfs_rw_diskblocks(Log.fp, LOGPNTOB(LOGSUPER_B),
+					   sizeof (struct logsuper), &logsup, GET);
+			ujfs_swap_logsuper(&logsup);
+			if ((logsup.magic != LOGMAGIC) || (uuid_compare(logsup.uuid, sb.s_loguuid))) {
+				fclose(Log.fp);
+				*in_use = 0;
+				goto by_uuid;
+			}
+			Log.location = OUTLINELOG;
+			return 0;
+		}
+	      by_uuid:
+		Log.fp = open_by_label(sb.s_loguuid, 0, 1, NULL, in_use);
+
+		if (Log.fp != NULL) {
+			Log.location |= OUTLINELOG;
+			return 0;
+		}
+
+		return NOT_INLINELOG_ERROR;
+	}
+	/*
+	 * is this an external log?
+	 */
+	ujfs_rw_diskblocks(fp, LOGPNTOB(LOGSUPER_B), sizeof (struct logsuper), &logsup, GET);
+	ujfs_swap_logsuper(&logsup);
+	if (logsup.magic != LOGMAGIC) {
+		fsck_send_msg(lrdo_NOTAFSDEV);
+		return NOT_FSDEV_ERROR;
+	}
+	Log.fp = fp;
+	Log.location = OUTLINELOG;
+
+	return 0;
+}
+
+extern void exit(int);
+
+/*
+ * NAME:        fsError(type,vol,bn)
+ *
+ * FUNCTION:    error handling code for the specified
+ *              aggregate/lv (filesystem).
+ */
+int fsError(int type,		/* error types */
+	    int vol,		/* the minor number of the aggregate/lv */
+	    int64_t bn)
+{				/* aggregate block No.  */
+
+	fsck_send_msg(lrdo_ERRORONVOL, vol);
+
+	retcode = -1;
+	vopen[vol].status = FM_LOGREDO;
+
+	switch (type) {
+	case OPENERR:
+		fsck_send_msg(lrdo_OPENFAILED);
+		break;
+	case MAPERR:
+		fsck_send_msg(lrdo_CANTINITMAPS);
+		break;
+	case DBTYPE:
+		fsck_send_msg(lrdo_BADDISKBLKNUM, (long long) bn);
+		break;
+	case INOTYPE:
+		fsck_send_msg(lrdo_BADINODENUM, (long long) bn);
+		break;
+	case READERR:
+		fsck_send_msg(lrdo_CANTREADBLK, (long long) bn);
+		break;
+	case SERIALNO:
+		fsck_send_msg(lrdo_BADLOGSER);
+		break;
+	case IOERROR:
+		fsck_send_msg(lrdo_IOERRREADINGBLK, (long long) bn);
+		break;
+	case LOGRCERR:
+		fsck_send_msg(lrdo_BADUPDMAPREC, (long long) bn);
+		break;
+	}
+	return (0);
+}
+
+/*
+ *      logError(type)
+ *
+ * error handling for log read errors.
+ */
+int logError(int type, int logaddr)
+{
+	int k;
+	retcode = -1;
+	logsup.state = LOGREADERR;
+	switch (type) {
+	case LOGEND:
+		fsck_send_msg(lrdo_FINDLOGENDFAIL);
+		break;
+	case READERR:
+		fsck_send_msg(lrdo_LOGREADFAIL, logaddr);
+		break;
+	case UNKNOWNR:
+		fsck_send_msg(lrdo_UNRECOGTYPE, logaddr);
+		break;
+	case IOERROR:
+		fsck_send_msg(lrdo_IOERRONLOG, logaddr);
+		break;
+	case LOGWRAP:
+		fsck_send_msg(lrdo_LOGWRAP);
+	}
+
+	/* mark all open volumes in error
+	 */
+	for (k = 0; k < MAX_ACTIVE; k++) {
+		if ((vopen[k].state == VOPEN_OPEN) && vopen[k].status != FM_CLEAN)
+			vopen[k].status = FM_LOGREDO;
+	}
+	return (0);
+}
+
+/*
+ *	recoverExtendFS()
+ *
+ * function: recover crash while in extendfs() for inline log;
+ *
+ * note: fs superblock fields remains pre-extendfs state,
+ * while that bmap file, fsck and inline log area may be in
+ * unknown state;
+ *
+ * at entry, only log type/lv has been validated;
+ * for inline log: vopen[0], fs fp = log fp;
+ */
+static int recoverExtendFS(FILE *fp)
+{
+	struct superblock *sbp;
+	struct dinode *dip1, *dip2;
+	struct dbmap *bgcp;
+	xtpage_t *p;
+	int64_t lmchild = 0, xaddr, xoff, barrier, t64, agsize;
+	uint8_t lmxflag;
+	int32_t i;
+	char *dip, *bp;
+	pxd_t temp_pxd;
+
+	/*
+	 * read bmap global control page
+	 */
+	/* read superblock yet again */
+	sbp = (struct superblock *) &buffer[0];
+	if (rdwrSuper(fp, sbp, PB_READ))
+		goto errout;
+
+	/* read primary block allocation map inode */
+	dip = (char *) &buffer[1];
+	if (ujfs_rw_diskblocks(fp, AITBL_OFF, PSIZE, dip, GET)) {
+		fsck_send_msg(lrdo_EXTFSREADFSSUPERFAIL);
+		goto errout;
+	}
+
+	/* locate the inode in the buffer page */
+	dip1 = (struct dinode *) dip;
+	dip1 += BMAP_I;
+
+	bp = (char *) &buffer[2];	/* utility buffer */
+
+	/* start from root in dinode */
+	p = (xtpage_t *) & dip1->di_btroot;
+	/* is this page leaf ? */
+	if (p->header.flag & BT_LEAF)
+		goto rdbgcp;
+
+	/* traverse down leftmost child node to leftmost leaf of xtree */
+	do {
+		/* read in the leftmost child page */
+		t64 = addressXAD(&p->xad[XTENTRYSTART]) << sbp->s_l2bsize;
+		if (ujfs_rw_diskblocks(fp, t64, PSIZE, bp, GET)) {
+			fsck_send_msg(lrdo_EXTFSREADBLKMAPINOFAIL);
+			goto errout;
+		}
+
+		p = (xtpage_t *) bp;
+		/* is this page leaf ? */
+		if (p->header.flag & BT_LEAF)
+			break;
+	} while (1);
+
+      rdbgcp:
+	t64 = addressXAD(&p->xad[XTENTRYSTART]) << sbp->s_l2bsize;
+	if (ujfs_rw_diskblocks(fp, t64, PSIZE, bp, GET)) {
+		fsck_send_msg(lrdo_EXTFSREADBLKFAIL1, (long long) t64);
+		goto errout;
+	}
+	bgcp = (struct dbmap *) bp;
+
+	/*
+	 * recover to pre- or post-extendfs state ?:
+	 */
+	if (__le64_to_cpu(bgcp->dn_mapsize) > (sbp->s_size >> sbp->s_l2bfactor)) {
+		agsize = __le64_to_cpu(bgcp->dn_agsize);
+		goto postx;
+	}
+
+	/*
+	 *    recover pre-extendfs state
+	 */
+	/*
+	 * reset block allocation map inode (xtree root)
+	 */
+	/* read 2ndary block allocation map inode */
+	t64 = addressPXD(&sbp->s_ait2) << sbp->s_l2bsize;
+	if (ujfs_rw_diskblocks(fp, t64, PSIZE, bp, GET)) {
+		fsck_send_msg(lrdo_EXTFSREADBLKFAIL2, (long long) t64);
+		goto errout;
+	}
+	dip2 = (struct dinode *) bp;
+	dip2 += BMAP_I;
+
+	/*
+	 * Reset primary bam inode with 2ndary bam inode
+	 *
+	 * Not forgetting to reset di_ixpxd since they are in different
+	 * inode extents.
+	 */
+	memcpy((void *) &temp_pxd, (void *) &(dip1->di_ixpxd), sizeof (pxd_t));
+	memcpy(dip1, dip2, DISIZE);
+	memcpy((void *) &(dip1->di_ixpxd), (void *) &temp_pxd, sizeof (pxd_t));
+
+	if (ujfs_rw_diskblocks(fp, AITBL_OFF, PSIZE, dip, PUT)) {
+		fsck_send_msg(lrdo_EXTFSWRITEBLKFAIL1, AITBL_OFF);
+		goto errout;
+	}
+
+	/*
+	 * backout bmap file to fs size:
+	 *
+	 * trim xtree to range specified by i_size:
+	 * xtree has been grown in append mode and
+	 * written from right to left, bottom-up;
+	 */
+	barrier = __le64_to_cpu(dip1->di_size) >> sbp->s_l2bsize;
+
+	/* start with root */
+	xaddr = 0;
+	p = (xtpage_t *) & dip1->di_btroot;
+	lmxflag = p->header.flag;
+	p->header.next = 0;
+	if (lmxflag & BT_INTERNAL) {
+		/* save leftmost child xtpage xaddr */
+		lmchild = addressXAD(&p->xad[XTENTRYSTART]);
+	}
+
+	/*
+	 * scan each level of xtree via leftmost descend
+	 */
+	while (1) {
+		/*
+		 * scan each xtpage of current level of xtree
+		 */
+		while (1) {
+			/*
+			 * scan each xad in current xtpage
+			 */
+			for (i = XTENTRYSTART; i < p->header.nextindex; i++) {
+				/* test if extent is of interest */
+				xoff = offsetXAD(&p->xad[i]);
+				if (xoff < barrier)
+					continue;
+
+				/*
+				 * barrier met in current page
+				 */
+				assert(i > XTENTRYSTART);
+				/* update current page */
+				p->header.nextindex = i;
+				if (xaddr) {
+					/* discard further right sibling
+					 * pages
+					 */
+					p->header.next = 0;
+					if (ujfs_rw_diskblocks(fp, t64, PSIZE, p, PUT)) {
+						fsck_send_msg(lrdo_EXTFSWRITEBLKFAIL2, (long long) t64);
+						goto errout;
+					}
+				}
+
+				goto nextLevel;
+			}	/* end for current xtpage scan */
+
+			/* barrier was not met in current page */
+
+			/* read in next/right sibling xtpage */
+			xaddr = p->header.next;
+			if (xaddr) {
+				if (xaddr >= barrier) {
+					p->header.next = 0;
+					if (ujfs_rw_diskblocks(fp, t64, PSIZE, p, PUT)) {
+						fsck_send_msg(lrdo_EXTFSWRITEBLKFAIL3, (long long) t64);
+						break;
+					}
+				}
+
+				t64 = xaddr << sbp->s_l2bsize;
+				if (ujfs_rw_diskblocks(fp, t64, PSIZE, bp, GET)) {
+					fsck_send_msg(lrdo_EXTFSREADBLKFAIL3, (long long) t64);
+					goto errout;
+				}
+
+				p = (xtpage_t *) bp;
+			} else
+				break;
+		}		/* end while current level scan */
+
+		/*
+		 * descend: read leftmost xtpage of next lower level of xtree
+		 */
+	      nextLevel:
+		if (lmxflag & BT_INTERNAL) {
+			/* get the leftmost child page  */
+			xaddr = lmchild;
+			t64 = xaddr << sbp->s_l2bsize;
+			if (ujfs_rw_diskblocks(fp, t64, PSIZE, bp, GET)) {
+				fsck_send_msg(lrdo_EXTFSREADBLKFAIL4, (long long) t64);
+				goto errout;
+			}
+
+			p = (xtpage_t *) bp;
+
+			lmxflag = p->header.flag;
+			if (lmxflag & BT_INTERNAL) {
+				/* save leftmost child xtpage xaddr */
+				lmchild = addressXAD(&p->xad[XTENTRYSTART]);
+			}
+		} else
+			break;
+	}			/* end while level scan */
+
+	/*
+	 * reconstruct map;
+	 *
+	 * readBmap() init blocks beyond fs size in the last
+	 * partial dmap page as allocated which might have been
+	 * marked as free by extendfs();
+	 */
+	/* fake log opend/validated */
+	Log.serial = sbp->s_logserial;
+
+	/*
+	 *  reconstruct maps
+	 */
+	/* open LV and initialize maps  */
+	if (logredoInit()) {
+		fsck_send_msg(lrdo_EXTFSINITLOGREDOFAIL);
+		goto errout;
+	}
+
+	/* bypass log replay */
+
+	/* update/write maps */
+	updateMaps(0);
+
+	/*
+	 * reformat log
+	 *
+	 * request reformat original log  (which might have been
+	 * overwritten by extendfs() and set superblock clean
+	 */
+	jfs_logform(fp, sbp->s_bsize, sbp->s_l2bsize, sbp->s_flag,
+		    addressPXD(&sbp->s_logpxd), lengthPXD(&sbp->s_logpxd), NULL, NULL);
+
+	/* update superblock */
+	updateSuper(0);
+
+	fsck_send_msg(lrdo_REXTNDTOPRE);
+
+	return 0;
+
+	/*
+	 *    recover post-extendfs state
+	 */
+      postx:
+	/*
+	 * update 2ndary bam inode
+	 */
+	/* read 2ndary block allocation map inode */
+	t64 = addressPXD(&sbp->s_ait2) << sbp->s_l2bsize;
+	if (ujfs_rw_diskblocks(fp, t64, PSIZE, bp, GET)) {
+		fsck_send_msg(lrdo_EXTFSREADBLKFAIL5, (long long) t64);
+		goto errout;
+	}
+	dip2 = (struct dinode *) bp;
+	dip2 += BMAP_I;
+
+	/*
+	 * Reset 2ndary bam inode with primary bam inode
+	 * Not forgetting to reset di_ixpxd since they are in different
+	 * inode extents.
+	 */
+	memcpy((void *) &temp_pxd, (void *) &(dip2->di_ixpxd), sizeof (pxd_t));
+	memcpy(dip2, dip1, DISIZE);
+	memcpy((void *) &(dip2->di_ixpxd), (void *) &temp_pxd, sizeof (pxd_t));
+
+	if (ujfs_rw_diskblocks(fp, t64, PSIZE, bp, PUT)) {
+		fsck_send_msg(lrdo_EXTFSWRITEBLKFAIL4, (long long) t64);
+		goto errout;
+	}
+
+	/*
+	 * update superblock
+	 */
+	if (!(sbp->s_state & (FM_DIRTY | FM_LOGREDO)))
+		sbp->s_state = FM_CLEAN;
+	else
+		sbp->s_state &= ~FM_EXTENDFS;
+	sbp->s_size = sbp->s_xsize;
+	sbp->s_agsize = agsize;
+	sbp->s_fsckpxd = sbp->s_xfsckpxd;
+	sbp->s_fscklog = 0;
+	sbp->s_logpxd = sbp->s_xlogpxd;
+	sbp->s_logserial = 1;
+
+	if (rdwrSuper(fp, sbp, PB_UPDATE)) {
+		fsck_send_msg(lrdo_EXTFSWRITEFSSUPERFAIL);
+		goto errout;
+	}
+
+	/*
+	 * finalize log
+	 *
+	 * note: new log is valid;
+	 */
+	/* read log superblock */
+	t64 = (addressPXD(&sbp->s_logpxd) << sbp->s_l2bsize) + LOGPSIZE;
+	if (ujfs_rw_diskblocks(fp, t64, LOGPSIZE, &logsup, GET)) {
+		fsck_send_msg(lrdo_EXTFSREADLOGSUPFAIL);
+		goto errout;
+	}
+
+	logsup.end = findEndOfLog();
+	logsup.state = LOGREDONE;
+
+	if (ujfs_rw_diskblocks(fp, t64, LOGPSIZE, &logsup, PUT)) {
+		fsck_send_msg(lrdo_EXTFSWRITELOGSUPFAIL);
+		goto errout;
+	}
+
+	fsck_send_msg(lrdo_REXTNDTOPOST);
+
+	return 0;
+
+      errout:
+	fsck_send_msg(lrdo_REXTNDFAIL, errno);
+	return (EXTENDFS_FAILRECOV);
+}
+
+/*
+ *
+ * NAME:        alloc_dmap_bitrec
+ *
+ * FUNCTION:    This routine allocates memory by calling the chkdsk
+ *		alloc_wrksp() routine (because that will allocate high
+ *		memory during autocheck).  If that fails then logredo
+ *                   cannot continue bmap processing, so it will set a flag
+ *                   and make the storage aleady allocated to the bmap
+ *                   available for other uses.
+ *		was successfully allocated and there's enough of it left,
+ *		this routine will return a piece of it.
+ */
+int alloc_dmap_bitrec(struct dmap_bitmaps ** dmap_bitrec)
+{
+	int adb_rc = 0;
+	int intermed_rc = 0;
+
+	*dmap_bitrec = NULL;
+
+	intermed_rc = alloc_wrksp((uint32_t) (sizeof (struct dmap_bitmaps)), 0,	/* not meaningful from logredo */
+				  -1,	/* I am logredo */
+				  (void **) dmap_bitrec);
+
+	if ((intermed_rc != 0) || ((*dmap_bitrec) == NULL)) {
+		Insuff_memory_for_maps = -1;
+		available_stg_addr = bmap_stg_addr;
+		available_stg_bytes = bmap_stg_bytes;
+		/*
+		 * initialize the storage for its new use
+		 */
+		memset((void *) available_stg_addr, 0, available_stg_bytes);
+	}
+
+	return (adb_rc);
+}				/* end alloc_dmap_bitrec() */
+
+/*
+ *
+ * NAME:        alloc_storage
+ *
+ * FUNCTION:    This routine allocates memory by calling the chkdsk
+ *		alloc_wrksp() routine (because that will allocate high
+ *		memory during autocheck).  If that fails and the bmap
+ *		was successfully allocated and there's enough of it left,
+ *		this routine will return a piece of it.
+ */
+int alloc_storage(int32_t size_in_bytes, void **addr_stg_ptr, int32_t * bmap_stg_returned)
+{
+	int as_rc = 0;
+	int intermed_rc = 0;
+
+	*bmap_stg_returned = 0;	/* assume we'll get it the usual way */
+	*addr_stg_ptr = NULL;
+
+	intermed_rc = alloc_wrksp((uint32_t) size_in_bytes, 0, -1, addr_stg_ptr);
+
+	if ((intermed_rc != 0) || ((*addr_stg_ptr) == NULL)) {
+		if ((!Insuff_memory_for_maps) && (bmap_stg_addr != NULL)) {
+			/*
+			 * we did allocate storage for the bmap
+			 * and haven't started cannibalizing it yet
+			 */
+			Insuff_memory_for_maps = -1;
+			available_stg_addr = bmap_stg_addr;
+			available_stg_bytes = bmap_stg_bytes;
+			/*
+			 * initialize the storage for its new use
+			 */
+			memset((void *) available_stg_addr, 0, available_stg_bytes);
+		}
+		/* end we did allocate storage for the bmap... */
+		if (Insuff_memory_for_maps & (available_stg_bytes != 0)) {
+			/*
+			 * we may be able to go on anyway
+			 */
+			if (available_stg_bytes < size_in_bytes) {
+				/*
+				 * not enough here
+				 */
+				return (ENOMEM0);
+			} else {
+				/* we can scavenge the memory we need */
+				*addr_stg_ptr = available_stg_addr;
+				available_stg_bytes -= size_in_bytes;
+				available_stg_addr = (char *) (available_stg_addr + size_in_bytes);
+				*bmap_stg_returned = -1;
+			}
+		} else {
+			return (ENOMEM1);
+		}
+	}
+
+	return (as_rc);
+}
+
+#ifdef  _JFS_WIP
+/*
+ *      nfsisloaded()
+ *
+ * check whether nfs is loaded
+ */
+static int nfsisloaded()
+{
+	int sav_errno;
+	int (*entry) ();
+	if (entry = load("/usr/sbin/probe", 0, 0))
+		return (1);
+	if (errno == ENOEXEC) {
+		DBG_TRACE(("%s: nfs is not loaded\n", prog))
+		    return (0);
+	}
+	sav_errno = errno;
+	DBG_TRACE(("%s: ", prog))
+	    errno = sav_errno;
+	perror("load");
+	return (0);
+}
+#endif				/* _JFS_WIP */
+
+#ifdef _JFS_DEBUG
+/*
+ *      xdump()
+ *
+ * hex dump
+ */
+xdump(char *saddr, int count)
+{
+#define LINESZ     60
+#define ASCIISTRT  40
+#define HEXEND     36
+	int i, j, k, hexdigit;
+	int c;
+	char *hexchar;
+	char linebuf[LINESZ + 1];
+	char prevbuf[LINESZ + 1];
+	char *linestart;
+	int asciistart;
+	char asterisk = ' ';
+	void x_scpy();
+	int x_scmp();
+	hexchar = "0123456789ABCDEF";
+	prevbuf[0] = '\0';
+	i = (int) saddr % 4;
+	if (i != 0)
+		saddr = saddr - i;
+	for (i = 0; i < count;) {
+		for (j = 0; j < LINESZ; j++)
+			linebuf[j] = ' ';
+		linestart = saddr;
+		asciistart = ASCIISTRT;
+		for (j = 0; j < HEXEND;) {
+			for (k = 0; k < 4; k++) {
+				c = *(saddr++) & 0xFF;
+				if ((c >= 0x20) && (c <= 0x7e))
+					linebuf[asciistart++] = (char) c;
+				else
+					linebuf[asciistart++] = '.';
+				hexdigit = c >> 4;
+				linebuf[j++] = hexchar[hexdigit];
+				hexdigit = c & 0x0f;
+				linebuf[j++] = hexchar[hexdigit];
+				i++;
+			}
+			if (i >= count)
+				break;
+			linebuf[j++] = ' ';
+		}
+		linebuf[LINESZ] = '\0';
+		if (((j = x_scmp(linebuf, prevbuf)) == 0) && (i < count)) {
+			if (asterisk == ' ') {
+				asterisk = '*';
+				DBG_TRACE(("    *\n"))
+			}
+		} else {
+			DBG_TRACE(("    %x  %s\n", linestart, linebuf))
+			    asterisk = ' ';
+			x_scpy(prevbuf, linebuf);
+		}
+	}
+	return (0);
+}
+
+int x_scmp(char *s1, char *s2)
+{
+	while ((*s1) && (*s1 == *s2)) {
+		s1++;
+		s2++;
+	}
+	if (*s1 || *s2)
+		return (-1);
+	else
+		return (0);
+}
+
+void x_scpy(char *s1, char *s2)
+{
+	while ((*s1 = *s2) != '\0') {
+		s1++;
+		s2++;
+	}
+}
+
+prtdesc(struct lrd *ld)
+{
+	switch (ld->log.redopage.type) {
+	case LOG_XTREE:
+		DBG_TRACE((" REDOPAGE:XTREE\n  "))
+		    break;
+	case (LOG_XTREE | LOG_NEW):
+		DBG_TRACE((" REDOPAGE:XTREE_NEW\n  "))
+		    break;
+	case (LOG_BTROOT | LOG_XTREE):
+		DBG_TRACE((" REDOPAGE:BTROOT_XTREE\n  "))
+		    break;
+	case LOG_DTREE:
+		DBG_TRACE((" REDOPAGE:DTREE\n  "))
+		    break;
+	case (LOG_DTREE | LOG_NEW):
+		DBG_TRACE((" REDOPAGE:DTREE_NEW \n "))
+		    break;
+	case (LOG_DTREE | LOG_EXTEND):
+		DBG_TRACE((" REDOPAGE:DTREE_EXTEND\n  "))
+		    break;
+	case (LOG_BTROOT | LOG_DTREE):
+		DBG_TRACE((" REDOPAGE:BTROOT_DTREE\n  "))
+		    break;
+	case (LOG_BTROOT | LOG_DTREE | LOG_NEW):
+		DBG_TRACE((" REDOPAGE:BTROOT_DTREE.NEW\n  "))
+		    break;
+	case LOG_INODE:
+		/*
+		 * logredo() updates imap for alloc of inode.
+		 */
+		DBG_TRACE((" REDOPAGE:INODE\n  "))
+		    break;
+	case LOG_EA:
+		DBG_TRACE((" REDOPAGE:EA\n  "))
+		    break;
+	case LOG_DATA:
+		DBG_TRACE((" REDOPAGE:DATA\n  "))
+		    break;
+	}
+	return (0);
+}
+#endif				/* _JFS_DEBUG */
Index: a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs
===================================================================
--- a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs	(nonexistent)
+++ a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs	(revision 5)

Property changes on: a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new/libfs
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new
===================================================================
--- a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new	(nonexistent)
+++ a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new	(revision 5)

Property changes on: a/jfsutils/create-1.1.15-patch/jfsutils-1.1.15-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/jfsutils/create-1.1.15-patch
===================================================================
--- a/jfsutils/create-1.1.15-patch	(nonexistent)
+++ a/jfsutils/create-1.1.15-patch	(revision 5)

Property changes on: a/jfsutils/create-1.1.15-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/jfsutils/patches/README
===================================================================
--- a/jfsutils/patches/README	(nonexistent)
+++ a/jfsutils/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: a/jfsutils/patches
===================================================================
--- a/jfsutils/patches	(nonexistent)
+++ a/jfsutils/patches	(revision 5)

Property changes on: a/jfsutils/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/jfsutils
===================================================================
--- a/jfsutils	(nonexistent)
+++ a/jfsutils	(revision 5)

Property changes on: a/jfsutils
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/kbd/Makefile
===================================================================
--- a/kbd/Makefile	(nonexistent)
+++ a/kbd/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/a/kbd
+
+versions    = 2.4.0
+pkgname     = kbd
+suffix      = tar.xz
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/kbd-2.4.0.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-2.4.0-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: a/kbd/create-2.4.0-patch/create.patch.sh
===================================================================
--- a/kbd/create-2.4.0-patch/create.patch.sh	(nonexistent)
+++ a/kbd/create-2.4.0-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=2.4.0
+
+tar --files-from=file.list -xJvf ../kbd-$VERSION.tar.xz
+mv kbd-$VERSION kbd-$VERSION-orig
+
+cp -rf ./kbd-$VERSION-new ./kbd-$VERSION
+
+diff --unified -Nr  kbd-$VERSION-orig  kbd-$VERSION > kbd-$VERSION.patch
+
+mv kbd-$VERSION.patch ../patches
+
+rm -rf ./kbd-$VERSION
+rm -rf ./kbd-$VERSION-orig

Property changes on: a/kbd/create-2.4.0-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: a/kbd/create-2.4.0-patch/file.list
===================================================================
--- a/kbd/create-2.4.0-patch/file.list	(nonexistent)
+++ a/kbd/create-2.4.0-patch/file.list	(revision 5)
@@ -0,0 +1,8 @@
+kbd-2.4.0/data/keymaps/i386/include/euro2.map
+kbd-2.4.0/data/keymaps/i386/qwerty/nl.map
+kbd-2.4.0/docs/man/man1/showkey.1
+kbd-2.4.0/docs/man/man8/setkeycodes.8
+kbd-2.4.0/po/Makefile.in.in
+kbd-2.4.0/po/es.po
+kbd-2.4.0/src/libkeymap/libkeymap.pc.in
+kbd-2.4.0/src/unicode_start
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/include/euro2.map
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/include/euro2.map	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/include/euro2.map	(revision 5)
@@ -0,0 +1,6 @@
+# Euro and cent
+# [Say: "loadkeys euro2" to get Euro and cent with AltGr (right alt)
+#  on the positions where many keyboards have E and C.
+#  To get it displayed, use a latin0 (i.e., latin9) font.]
+altgr keycode  18 = euro
+altgr keycode  46 = cent
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/include
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/include	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/include	(revision 5)

Property changes on: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/include
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/qwerty/nl.map
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/qwerty/nl.map	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/qwerty/nl.map	(revision 5)
@@ -0,0 +1,81 @@
+# From eha@dasc.nl Wed Mar 31 13:55:06 1999
+# From: Eric Hameleers <eha@dasc.nl>
+#
+# Dutch keymap for IBM ThinkPads (765L, 600, 770 and 380).
+#
+# Key mapping for dutch keyboard (on my IBM-ThinkPad but generally useable)
+# Contributed by Eric Hameleers (eric.hameleers@nl.ibm.com)
+#
+#   Added the circumflex as AltGr func. of the key with the dead_circumflex
+#
+charset "iso-8859-1"
+keymaps 0-6,8-9,12
+alt_is_meta
+include "qwerty-layout"
+  altgr        keycode  18 = euro
+  altgr        keycode  19 = paragraph
+  altgr        keycode  31 = ssharp
+  altgr        keycode  44 = guillemotleft
+  altgr        keycode  45 = guillemotright
+  altgr        keycode  46 = cent
+  altgr        keycode  50 = mu
+# extension
+  altgr keycode  24 = +oslash
+  altgr shift keycode  24 = +Oslash
+include "linux-with-alt-and-altgr"
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 = Escape
+keycode   2 = one		exclam		onesuperior
+keycode   3 = two		quotedbl	twosuperior
+keycode   4 = three		numbersign	threesuperior
+  control       keycode   4 = Escape
+keycode   5 = four		dollar		onequarter
+  control       keycode   5 = Control_backslash
+keycode   6 = five		percent		onehalf
+  control       keycode   6 = Control_bracketright
+keycode   7 = six		ampersand	threequarters
+  control       keycode   7 = Control_asciicircum
+keycode   8 = seven		underscore	pound
+  control       keycode   8 = Control_underscore
+  control shift keycode   8 = Control_underscore
+keycode   9 = eight		parenleft	braceleft
+  control       keycode   9 = Delete
+keycode  10 = nine		parenright	braceright
+keycode  11 = zero		apostrophe
+keycode  12 = slash		question	backslash
+  control altgr keycode  12 = Control_backslash
+# some use dead_tilde instead of asciitilde
+keycode  13 = degree		asciitilde	dead_cedilla
+keycode  14 = Delete
+  control       keycode  14 = BackSpace
+keycode  15 = Tab
+	shift	keycode  15 = Meta_Tab
+keycode  26 = dead_diaeresis	dead_circumflex		circumflex
+  control      keycode  26 = Escape
+keycode  27 = asterisk		bar
+keycode  28 = Return
+  alt          keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = plus		plusminus
+keycode  40 = dead_acute	dead_grave
+  control      keycode  40 = Control_g
+  alt          keycode  40 = Meta_apostrophe
+keycode  41 = at		section		notsign
+  control keycode  41 = nul
+  control shift keycode  41 = nul
+  control alt keycode  41 = Meta_nul
+keycode  42 = Shift
+keycode  43 = less		greater
+keycode  51 = comma		semicolon
+keycode  52 = period		colon		periodcentered
+  control      keycode  52 = Compose
+keycode  53 = minus		equal
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+  control      keycode  57 = nul
+keycode  58 = Caps_Lock
+keycode  86 = bracketright	bracketleft	brokenbar
+keycode  97 = Control
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/qwerty
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/qwerty	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/qwerty	(revision 5)

Property changes on: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386/qwerty
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386	(revision 5)

Property changes on: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps/i386
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps	(revision 5)

Property changes on: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data/keymaps
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data	(revision 5)

Property changes on: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/data
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man1/showkey.1
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man1/showkey.1	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man1/showkey.1	(revision 5)
@@ -0,0 +1,104 @@
+.\" @(#)showkey.1 1.1 980201 aeb
+.TH SHOWKEY 1 "1 Feb 1998" "kbd"
+.SH NAME
+showkey \- examine the codes sent by the keyboard
+.SH SYNOPSIS
+showkey [\-h|\-\-help] [\-a|\-\-ascii] [\-s|\-\-scancodes] [\-k|\-\-keycodes] [\-V|\-\-version]
+.SH DESCRIPTION
+.IX "showkey command" "" "\fLshowkey\fR command"  
+.LP
+.B showkey
+prints to standard output either the scan codes or the keycode
+or the `ascii' code of each key pressed.
+In the first two modes the program runs until 10 seconds have elapsed
+since the last key press or release event, or until it receives
+a suitable signal, like SIGTERM, from another process.
+In `ascii' mode the program terminates when the user types ^D.
+.LP
+When in scancode dump mode, 
+.B showkey
+prints in hexadecimal format each byte received from the keyboard to the
+standard output. A new line is printed when an interval of about 0.1
+seconds occurs between the bytes received, or when the internal receive
+buffer fills up. This can be used to determine roughly, what byte
+sequences the keyboard sends at once on a given key press. The scan code
+dumping mode is primarily intended for debugging the keyboard driver or
+other low level interfaces. As such it shouldn't be of much interest to
+the regular end-user. However, some modern keyboards have keys or buttons
+that produce scancodes to which the kernel does not associate a keycode,
+and, after finding out what these are, the user can assign keycodes with
+.BR setkeycodes (8).
+.LP
+When in the default keycode dump mode,
+.B showkey
+prints to the standard output the keycode number or each key pressed or
+released. The kind of the event, press or release, is also reported.
+Keycodes are numbers assigned by the kernel to each individual physical
+key. Every key has always only one associated keycode number, whether
+the keyboard sends single or multiple scan codes when pressing it. Using
+.B showkey
+in this mode, you can find out what numbers to use in your personalized
+keymap files.
+.LP
+When in `ascii' dump mode,
+.B showkey
+prints to the standard output the decimal, octal, and hexadecimal
+value(s) of the key pressed, according to he present keymap.
+.SH OPTIONS
+.TP
+\-h \-\-help
+.B showkey
+prints to the standard error output its version number, a compile
+option and a short usage message, then exits.
+.TP
+\-s \-\-scancodes
+Starts
+.B showkey
+in scan code dump mode.
+.TP
+\-k \-\-keycodes
+Starts
+.B showkey
+in keycode dump mode. This is the default, when no command line options
+are present.
+.TP
+\-a \-\-ascii
+Starts
+.B showkey
+in `ascii' dump mode.
+.TP
+\-V \-\-version
+.B showkey
+prints version number and exits.
+.SH "2.6 KERNELS"
+In 2.6 kernels key codes lie in the range 1-255, instead of 1-127.
+Key codes larger than 127 are returned as three bytes of which the
+low order 7 bits are: zero, bits 13-7, and bits 6-0 of the key code.
+The high order bits are: 0/1 for make/break, 1, 1.
+.LP
+In 2.6 kernels raw mode, or scancode mode, is not very raw at all.
+Scan codes are first translated to key codes, and when scancodes
+are desired, the key codes are translated back. Various transformations
+are involved, and there is no guarantee at all that the final result
+corresponds to what the keyboard hardware did send. So, if you want
+to know the scan codes sent by various keys it is better to boot a
+2.4 kernel. Since 2.6.9 there also is the boot option atkbd.softraw=0
+that tells the 2.6 kernel to return the actual scan codes.
+
+.SH NOTES
+The raw scan codes are available only on AT and PS/2 keyboards,
+and even then they are disabled unless the
+.B atkbd.softraw=0
+kernel parameter is used.
+When the raw scan codes are not available, the kernel uses a fixed built-in
+table to produce scan codes from keycodes.  Thus,
+.BR setkeycodes (8)
+can affect the output of
+.B showkey
+in scan code dump mode.
+
+.SH "SEE ALSO"
+.BR loadkeys (1),
+.BR dumpkeys (1),
+.BR keymaps (5),
+.BR setkeycodes (8)
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man1
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man1	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man1	(revision 5)

Property changes on: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man1
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man8/setkeycodes.8
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man8/setkeycodes.8	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man8/setkeycodes.8	(revision 5)
@@ -0,0 +1,79 @@
+.\" @(#)man/man8/setkeycodes.8	1.0 Nov  8 22:30:48 MET 1994
+.TH SETKEYCODES 8 "8 Nov 1994" "kbd"
+.SH NAME
+setkeycodes \- load kernel scancode-to-keycode mapping table entries
+.SH SYNOPSIS
+.B setkeycodes
+.I "scancode keycode ..."
+.SH DESCRIPTION
+The
+.I setkeycodes
+command reads its arguments two at a time, each pair of arguments
+consisting of a scancode (given in hexadecimal) and a keycode (given
+in decimal). For each such pair, it tells the kernel keyboard driver
+to map the specified scancode to the specified keycode.
+
+This command is useful only for people with slightly unusual keyboards,
+that have a few keys which produce scancodes that the kernel does not
+recognize.
+
+.SH THEORY
+The usual PC keyboard produces a series of scancodes for each
+key press and key release. (Scancodes are shown by
+\fBshowkey \-s\fP, see
+.BR showkey (1)
+) The kernel parses this stream of scancodes, and converts it to
+a stream of keycodes (key press/release events).
+(Keycodes are shown by \fBshowkey\fP.)
+Apart from a few scancodes with special meaning, and apart from
+the sequence produced by the Pause key, and apart from shiftstate
+related scancodes, and apart from the key up/down bit,
+the stream of scancodes consists of unescaped
+scancodes xx (7 bits) and escaped scancodes e0 xx (8+7 bits).
+To these scancodes or scancode pairs, a corresponding keycode can be
+assigned (in the range 1-127).
+For example, if you have a Macro key that produces e0 6f according
+to
+.BR showkey (1),
+the command
+.RS
+.B "setkeycodes e06f 112"
+.RE
+will assign the keycode 112 to it, and then
+.BR loadkeys (1)
+can be used to define the function of this key.
+
+USB keyboards have standardized keycodes and
+.B setkeycodes
+doesn't affect them at all.
+.LP
+Some older kernels might hardwire a low scancode range to the
+equivalent keycodes; setkeycodes will fail when you try to remap
+these.
+
+.SH "2.6 KERNELS"
+In 2.6 kernels key codes lie in the range 1-255, instead of 1-127.
+(It might be best to confine oneself to the range 1-239.)
+.LP
+In 2.6 kernels raw mode, or scancode mode, is not very raw at all.
+The code returned by showkey \-s will change after use of setkeycodes.
+A kernel bug. See also
+.BR showkey (1).
+.SH OPTIONS
+None.
+.SH BUGS
+The keycodes of X have nothing to do with those of Linux.
+Unusual keys can be made visible under Linux, but not under X.
+
+.B setkeycodes
+affects only the "first" input device
+that has modifiable scancode-to-keycode mapping.
+If there is more than one such device,
+.B setkeycodes
+cannot change the mapping of other devices than the "first" one.
+
+.SH "SEE ALSO"
+.BR dumpkeys (1),
+.BR loadkeys (1),
+.BR showkey (1),
+.BR getkeycodes (8)
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man8
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man8	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man8	(revision 5)

Property changes on: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man/man8
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man	(revision 5)

Property changes on: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs/man
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs	(revision 5)

Property changes on: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/docs
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/po/Makefile.in.in
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/po/Makefile.in.in	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/po/Makefile.in.in	(revision 5)
@@ -0,0 +1,484 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.  This file is offered as-is,
+# without any warranty.
+#
+# Origin: gettext-0.19.8
+GETTEXT_MACRO_VERSION = 0.19
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SED = @SED@
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gnulocaledir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+# When building gettext-tools, we prefer to use the built programs
+# rather than installed programs.  However, we can't do that when we
+# are cross compiling.
+CROSS_COMPILING = @CROSS_COMPILING@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
+POFILESDEPS_yes = $(POFILESDEPS_)
+POFILESDEPS_no =
+POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
+
+DISTFILESDEPS_ = update-po
+DISTFILESDEPS_yes = $(DISTFILESDEPS_)
+DISTFILESDEPS_no =
+DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+	@echo "$(MSGFMT) -c -o $@ $<"; \
+	$(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+	@lang=`echo $* | sed -e 's,.*/,,'`; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \
+	cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+	sed -e '/^#/d' $< > t-$@
+	mv t-$@ $@
+
+
+all: all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+CHECK_MACRO_VERSION = \
+	test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+	  || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+	       exit 1; \
+	     }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+	@$(CHECK_MACRO_VERSION)
+	test ! -f $(srcdir)/$(DOMAIN).pot || \
+	  test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+	@test ! -f $(srcdir)/$(DOMAIN).pot || { \
+	  echo "touch stamp-po" && \
+	  echo timestamp > stamp-poT && \
+	  mv stamp-poT stamp-po; \
+	}
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+# The determination of whether the package xyz is a GNU one is based on the
+# heuristic whether some file in the top level directory mentions "GNU xyz".
+# If GNU 'find' is available, we avoid grepping through monster files.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+	package_gnu="$(PACKAGE_GNU)"; \
+	test -n "$$package_gnu" || { \
+	  if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
+		 LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \
+			       -size -10000000c -exec grep 'GNU @PACKAGE@' \
+			       /dev/null '{}' ';' 2>/dev/null; \
+	       else \
+		 LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
+	       fi; \
+	     } | grep -v 'libtool:' >/dev/null; then \
+	     package_gnu=yes; \
+	   else \
+	     package_gnu=no; \
+	   fi; \
+	}; \
+	if test "$$package_gnu" = "yes"; then \
+	  package_prefix='GNU '; \
+	else \
+	  package_prefix=''; \
+	fi; \
+	if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+	  msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+	else \
+	  msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+	fi; \
+	case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	  '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+	      --files-from=$(srcdir)/POTFILES.in \
+	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
+	      --msgid-bugs-address="$$msgid_bugs_address" \
+	    ;; \
+	  *) \
+	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+	      --files-from=$(srcdir)/POTFILES.in \
+	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
+	      --package-name="$${package_prefix}@PACKAGE@" \
+	      --package-version='@VERSION@' \
+	      --msgid-bugs-address="$$msgid_bugs_address" \
+	    ;; \
+	esac
+	test ! -f $(DOMAIN).po || { \
+	  if test -f $(srcdir)/$(DOMAIN).pot-header; then \
+	    sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \
+	    cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po; \
+	    rm -f $(DOMAIN).1po; \
+	  fi; \
+	  if test -f $(srcdir)/$(DOMAIN).pot; then \
+	    sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+	    sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+	    if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+	    else \
+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+	      mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+	    fi; \
+	  else \
+	    mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+	  fi; \
+	}
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+	$(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(POFILESDEPS)
+	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+	if test -f "$(srcdir)/$${lang}.po"; then \
+	  test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \
+	  test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	  echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
+	  cd $(srcdir) \
+	    && { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	           '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
+	           *) \
+	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \
+	         esac; \
+	       }; \
+	else \
+	  $(MAKE) $${lang}.po-create; \
+	fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+	  for file in $(DISTFILES.common) Makevars.template; do \
+	    $(INSTALL_DATA) $(srcdir)/$$file \
+			    $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	  for file in Makevars; do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+install-data-no: all
+install-data-yes: all
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkdir_p) $(DESTDIR)$$dir; \
+	  if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+	  $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+	  echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+	    if test -n "$$lc"; then \
+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+	         for file in *; do \
+	           if test -f $$file; then \
+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+	           fi; \
+	         done); \
+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	      else \
+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+	          :; \
+	        else \
+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        fi; \
+	      fi; \
+	      rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	      ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+	      ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+	      cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	      echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+	    fi; \
+	  done; \
+	done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+	else \
+	  : ; \
+	fi
+installdirs-data-no:
+installdirs-data-yes:
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkdir_p) $(DESTDIR)$$dir; \
+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+	    if test -n "$$lc"; then \
+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+	         for file in *; do \
+	           if test -f $$file; then \
+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+	           fi; \
+	         done); \
+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	      else \
+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+	          :; \
+	        else \
+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        fi; \
+	      fi; \
+	    fi; \
+	  done; \
+	done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  for file in $(DISTFILES.common) Makevars.template; do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+uninstall-data-no:
+uninstall-data-yes:
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+	    rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	  done; \
+	done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+	rm -f remove-potcdate.sed
+	rm -f stamp-poT
+	rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+	rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+	rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+	@echo "This command is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+	rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+	test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
+	@$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+	dists="$(DISTFILES)"; \
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  dists="$$dists Makevars.template"; \
+	fi; \
+	if test -f $(srcdir)/$(DOMAIN).pot; then \
+	  dists="$$dists $(DOMAIN).pot stamp-po"; \
+	fi; \
+	if test -f $(srcdir)/ChangeLog; then \
+	  dists="$$dists ChangeLog"; \
+	fi; \
+	for i in 0 1 2 3 4 5 6 7 8 9; do \
+	  if test -f $(srcdir)/ChangeLog.$$i; then \
+	    dists="$$dists ChangeLog.$$i"; \
+	  fi; \
+	done; \
+	if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+	for file in $$dists; do \
+	  if test -f $$file; then \
+	    cp -p $$file $(distdir) || exit 1; \
+	  else \
+	    cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+	  fi; \
+	done
+
+update-po: Makefile
+	$(MAKE) $(DOMAIN).pot-update
+	test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+	$(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+	@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+	echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+	exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+	@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+	if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \
+	tmpdir=`pwd`; \
+	echo "$$lang:"; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+	cd $(srcdir); \
+	if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	       '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+	         $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+	       *) \
+	         $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+	     esac; \
+	   }; then \
+	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+	    rm -f $$tmpdir/$$lang.new.po; \
+	  else \
+	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+	      :; \
+	    else \
+	      echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+	      exit 1; \
+	    fi; \
+	  fi; \
+	else \
+	  echo "msgmerge for $$lang.po failed!" 1>&2; \
+	  rm -f $$tmpdir/$$lang.new.po; \
+	fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+	@:
+
+# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
+# because execution permission bits may not work on the current file system.
+# Use @SHELL@, which is the shell determined by autoconf for the use by its
+# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+	cd $(top_builddir) \
+	  && @SHELL@ ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: a/kbd/create-2.4.0-patch/kbd-2.4.0-new/po/es.po
===================================================================
--- a/kbd/create-2.4.0-patch/kbd-2.4.0-new/po/es.po	(nonexistent)
+++ a/kbd/create-2.4.0-patch/kbd-2.4.0-new/po/es.po	(revision 5)
@@ -0,0 +1,2311 @@
+# Spanish translations for kbd-1.14.1.
+# This file is distributed under the same license as the kbd package.
+#
+# Juan Rafael Fernandez Garcia <juanrafael.fernandez@hispalinux.es>, 2005, 2008.
+# Benno Schulenberg <benno@vertaalt.nl>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kbd-1.14.1\n"
+"Report-Msgid-Bugs-To: Alexey Gladkov <gladkov.alexey@gmail.com>\n"
+"POT-Creation-Date: 2020-12-15 21:42+0100\n"
+"PO-Revision-Date: 2008-05-14 23:48+0200\n"
+"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: src/chvt.c:25
+#, c-format
+msgid "Usage: %s [option...] N\n"
+msgstr ""
+
+#: src/chvt.c:30 src/deallocvt.c:30 src/dumpkeys.c:38 src/fgconsole.c:29
+#: src/getkeycodes.c:29 src/getunimap.c:40 src/kbdinfo.c:38 src/kbd_mode.c:34
+#: src/kbdrate.c:331 src/loadkeys.c:52 src/loadunimap.c:35 src/mapscrn.c:31
+#: src/openvt.c:60 src/setkeycodes.c:37 src/setleds.c:56 src/setmetamode.c:41
+#: src/setvtrgb.c:60 src/showconsolefont.c:110 src/showkey.c:97
+#, c-format
+msgid "Options:"
+msgstr ""
+
+#: src/chvt.c:45 src/deallocvt.c:45 src/dumpkeys.c:64 src/fgconsole.c:44
+#: src/getkeycodes.c:44 src/getunimap.c:55 src/kbdinfo.c:53 src/kbd_mode.c:49
+#: src/kbdrate.c:346 src/loadkeys.c:69 src/loadunimap.c:50 src/mapscrn.c:46
+#: src/openvt.c:75 src/setkeycodes.c:52 src/setleds.c:71 src/setmetamode.c:56
+#: src/setvtrgb.c:75 src/showconsolefont.c:125 src/showkey.c:112
+#, c-format
+msgid "Report bugs to authors.\n"
+msgstr ""
+
+#: src/chvt.c:78 src/deallocvt.c:69 src/dumpkeys.c:121 src/fgconsole.c:71
+#: src/getkeycodes.c:67 src/getunimap.c:85 src/kbdinfo.c:89 src/kbd_mode.c:105
+#: src/kbdrate.c:376 src/loadkeys.c:127 src/loadunimap.c:78 src/mapscrn.c:76
+#: src/openvt.c:292 src/setkeycodes.c:110 src/setleds.c:249
+#: src/setmetamode.c:115 src/setvtrgb.c:135 src/showconsolefont.c:158
+#: src/showkey.c:145
+msgid "print this usage message."
+msgstr ""
+
+#: src/chvt.c:79 src/deallocvt.c:70 src/dumpkeys.c:120 src/fgconsole.c:70
+#: src/getkeycodes.c:68 src/getunimap.c:84 src/kbdinfo.c:88 src/kbd_mode.c:104
+#: src/kbdrate.c:375 src/loadkeys.c:126 src/loadunimap.c:77 src/mapscrn.c:75
+#: src/openvt.c:291 src/setkeycodes.c:109 src/setleds.c:247
+#: src/setmetamode.c:114 src/setvtrgb.c:134 src/showconsolefont.c:157
+#: src/showkey.c:146
+msgid "print version number."
+msgstr ""
+
+#: src/chvt.c:98 src/kbdinfo.c:113 src/setkeycodes.c:134
+msgid "Not enough arguments."
+msgstr ""
+
+#: src/chvt.c:103 src/clrunimap.c:29 src/deallocvt.c:94 src/dumpkeys.c:190
+#: src/fgconsole.c:96 src/getkeycodes.c:87 src/getunimap.c:113
+#: src/kbdinfo.c:122 src/kbd_mode.c:156 src/libcommon/getfd.c:88
+#: src/loadkeys.c:204 src/loadunimap.c:108 src/mapscrn.c:109 src/openvt.c:352
+#: src/resizecons.c:171 src/setfont.c:148 src/setkeycodes.c:139
+#: src/setlogcons.c:58 src/setmetamode.c:139 src/setpalette.c:36
+#: src/setvesablank.c:32 src/setvtrgb.c:178 src/showconsolefont.c:194
+#: src/showkey.c:211 src/totextmode.c:32
+#, fuzzy, c-format
+msgid "Couldn't get a file descriptor referring to the console."
+msgstr ""
+"No se pudo conseguir un descriptor de fichero que refiera a la consola\n"
+
+#: src/chvt.c:112 src/openvt.c:199
+#, fuzzy
+msgid "Unable to set signal handler"
+msgstr "openvt: No se puede establecer nueva sesión (%s)\n"
+
+#: src/chvt.c:119 src/openvt.c:208
+#, fuzzy
+msgid "Unable to create timer"
+msgstr "openvt: No se puede establecer nueva sesión (%s)\n"
+
+#: src/chvt.c:127 src/openvt.c:218
+#, fuzzy
+msgid "Unable to set timer"
+msgstr "openvt: No se puede establecer nueva sesión (%s)\n"
+
+#: src/chvt.c:133 src/openvt.c:226
+#, c-format
+msgid "Couldn't activate vt %d"
+msgstr ""
+
+#: src/deallocvt.c:25
+#, c-format
+msgid "Usage: %s [option...] [N ...]\n"
+msgstr ""
+
+#: src/deallocvt.c:88 src/kbdinfo.c:188 src/setleds.c:285 src/setleds.c:293
+#: src/setmetamode.c:156
+#, fuzzy, c-format
+msgid "Unrecognized argument: %s"
+msgstr ""
+"argumento desconocido: _%s_\n"
+"\n"
+
+#: src/deallocvt.c:105
+#, fuzzy
+msgid "0: illegal VT number"
+msgstr "%s: 0: número de terminal virtual no válido\n"
+
+#: src/deallocvt.c:107
+#, fuzzy
+msgid "VT 1 is the console and cannot be deallocated"
+msgstr "%s: la terminal virtual 1 es la consola y no puede liberarse\n"
+
+#: src/deallocvt.c:109
+#, fuzzy, c-format
+msgid "could not deallocate console %d: ioctl VT_DISALLOCATE"
+msgstr "%s: no se pudo liberar la consola %d\n"
+
+#: src/dumpkeys.c:32 src/fgconsole.c:23 src/getkeycodes.c:24 src/getunimap.c:35
+#: src/kbd_mode.c:26 src/kbdrate.c:323 src/loadunimap.c:27
+#: src/showconsolefont.c:103 src/showkey.c:92 src/totextmode.c:28
+#, c-format
+msgid "Usage: %s [option...]\n"
+msgstr ""
+
+#: src/dumpkeys.c:53
+#, c-format
+msgid "Available charsets: "
+msgstr ""
+
+#: src/dumpkeys.c:57
+#, c-format
+msgid ""
+"Available shapes:\n"
+"  2  - default output;\n"
+"  4  - one line for each keycode;\n"
+"  8  - one line for each (modifier,keycode) pair;\n"
+"  16 - one line for each keycode until 1st hole.\n"
+msgstr ""
+
+#: src/dumpkeys.c:108
+msgid "display information about keyboard driver."
+msgstr ""
+
+#: src/dumpkeys.c:109
+msgid "display above and symbols known to loadkeys."
+msgstr ""
+
+#: src/dumpkeys.c:110
+msgid "display keytable in hexadecimal notation."
+msgstr ""
+
+#: src/dumpkeys.c:111
+msgid "don't use short-hand notations, one row per keycode."
+msgstr ""
+
+#: src/dumpkeys.c:112
+msgid "one line per (modifier,keycode) pair."
+msgstr ""
+
+#: src/dumpkeys.c:114
+msgid "display only the function key strings."
+msgstr ""
+
+#: src/dumpkeys.c:115
+msgid "display only key bindings."
+msgstr ""
+
+#: src/dumpkeys.c:116
+#, fuzzy
+msgid "display only compose key combinations."
+msgstr "número máximo de definiciones de composición:  %d\n"
+
+#: src/dumpkeys.c:117
+#, fuzzy
+msgid ""
+"interpret character action codes to be from the specified character set."
+msgstr ""
+"                       interpretar que los códigos de acción de carácter\n"
+"                       proceden del conjunto de caracteres especificado\n"
+
+#: src/dumpkeys.c:118 src/fgconsole.c:68 src/getunimap.c:83 src/kbdinfo.c:87
+#: src/kbd_mode.c:103 src/loadkeys.c:115 src/loadunimap.c:76 src/mapscrn.c:73
+#: src/openvt.c:283 src/setkeycodes.c:108 src/setmetamode.c:113
+#: src/setvtrgb.c:133 src/showconsolefont.c:154
+msgid "the console device to be used."
+msgstr ""
+
+#: src/dumpkeys.c:119 src/loadkeys.c:125 src/mapscrn.c:74 src/openvt.c:290
+#: src/setleds.c:248 src/showconsolefont.c:156
+msgid "be more verbose."
+msgstr ""
+
+#: src/dumpkeys.c:165 parser.y:195
+#, c-format
+msgid "unknown charset %s - ignoring charset request\n"
+msgstr "conjunto de caracteres %s desconocido - no se atiende a la petición\n"
+
+#: src/dumpkeys.c:194 src/kbdinfo.c:139 src/kbd_mode.c:161 src/kbd_mode.c:170
+#: src/loadkeys.c:208 src/showconsolefont.c:197 src/showkey.c:35
+#, fuzzy
+msgid "Unable to read keyboard mode"
+msgstr "kbd_mode: error leyendo el modo del teclado\n"
+
+#: src/dumpkeys.c:207
+#, c-format
+msgid ""
+"Symbols recognized by %s:\n"
+"(numeric value, symbol)\n"
+"\n"
+msgstr ""
+"Símbolos reconocidos por %s:\n"
+"(valor numérico, símbolo)\n"
+"\n"
+
+#: src/fgconsole.c:69
+msgid "print number of next unallocated VT."
+msgstr ""
+
+#: src/fgconsole.c:100
+msgid "Couldn't read VTNO: "
+msgstr "no se pudo leer VTNO: "
+
+#: src/getkeycodes.c:102
+#, c-format
+msgid "Plain scancodes xx (hex) versus keycodes (dec)\n"
+msgstr "Códigos de rastreo simples xx (hex) frente a códigos de tecla (dec)\n"
+
+#: src/getkeycodes.c:105
+#, c-format
+msgid "0 is an error; for 1-88 (0x01-0x58) scancode equals keycode\n"
+msgstr ""
+"0 es un error; para 1-88 (0x01-0x58) los códigos de rastreo son iguales que "
+"los de tecla\n"
+
+#: src/getkeycodes.c:108
+#, c-format
+msgid "for 1-%d (0x01-0x%02x) scancode equals keycode\n"
+msgstr ""
+"para 1-%d (0x01-0x%02x) el código de rastreo es igual que el de tecla\n"
+
+#: src/getkeycodes.c:115
+#, fuzzy, c-format
+msgid "Escaped scancodes e0 xx (hex)\n"
+msgstr ""
+"\n"
+"\n"
+"Códigos de rastreo con escape e0 xx (hex)\n"
+
+#: src/getkeycodes.c:139
+#, fuzzy, c-format
+msgid "failed to get keycode for scancode 0x%x: ioctl KDGETKEYCODE"
+msgstr "fallo al averiguar el código de tecla para el código de rastreo 0x%x\n"
+
+#: src/getunimap.c:82
+msgid "sort and merge elements."
+msgstr ""
+
+#: src/kbdinfo.c:24
+#, c-format
+msgid ""
+"Usage: %1$s [option...] getmode [text|graphics]\n"
+"   or: %1$s [option...] gkbmode [raw|xlate|mediumraw|unicode]\n"
+"   or: %1$s [option...] gkbmeta [metabit|escprefix]\n"
+"   or: %1$s [option...] gkbled  [scrolllock|numlock|capslock]\n"
+msgstr ""
+
+#: src/kbdinfo.c:31
+#, c-format
+msgid ""
+"The utility allows to read and check various parameters\n"
+"of the keyboard and virtual console.\n"
+msgstr ""
+
+#: src/kbdinfo.c:126 src/loadkeys.c:210
+#, fuzzy
+msgid "Unable to read console mode"
+msgstr "No se puede leer la tabla asociativa de consola\n"
+
+#: src/kbdinfo.c:158 src/setmetamode.c:142
+msgid "Unable to read meta key handling mode"
+msgstr ""
+
+#: src/kbdinfo.c:171 src/setleds.c:141
+msgid "Unable to read keyboard flags"
+msgstr ""
+
+#: src/kbd_mode.c:28 src/loadunimap.c:29
+#, fuzzy, c-format
+msgid "This utility reports or sets the keyboard mode.\n"
+msgstr "%s: error al establecer el modo de teclado\n"
+
+#: src/kbd_mode.c:60
+#, fuzzy, c-format
+msgid "The keyboard is in raw (scancode) mode"
+msgstr "El teclado está en modo crudo (de código de rastreo)\n"
+
+#: src/kbd_mode.c:63
+#, fuzzy, c-format
+msgid "The keyboard is in mediumraw (keycode) mode"
+msgstr "El teclado está en modo medio crudo (de código de tecla)\n"
+
+#: src/kbd_mode.c:66
+#, fuzzy, c-format
+msgid "The keyboard is in the default (ASCII) mode"
+msgstr "El teclado está en el modo predeterminado (ASCII)\n"
+
+#: src/kbd_mode.c:69
+#, fuzzy, c-format
+msgid "The keyboard is in Unicode (UTF-8) mode"
+msgstr "El teclado está en modo Unicode (UTF-8)\n"
+
+#: src/kbd_mode.c:72
+#, fuzzy, c-format
+msgid "The keyboard is in some unknown mode"
+msgstr "El teclado está en algún modo desconocido\n"
+
+#: src/kbd_mode.c:98
+msgid "set ASCII mode."
+msgstr ""
+
+#: src/kbd_mode.c:99
+msgid "set keycode mode."
+msgstr ""
+
+#: src/kbd_mode.c:100
+msgid "set scancode mode."
+msgstr ""
+
+#: src/kbd_mode.c:101
+msgid "set UTF-8 mode."
+msgstr ""
+
+#: src/kbd_mode.c:102
+msgid "switch the mode even if it makes the keyboard unusable."
+msgstr ""
+
+#: src/kbd_mode.c:179
+#, c-format
+msgid ""
+"Changing to the requested mode may make your keyboard unusable, please use -"
+"f to force the change.\n"
+msgstr ""
+
+#: src/kbdrate.c:139 src/kbdrate.c:204
+#, fuzzy, c-format
+msgid "Typematic Rate is %.1f cps\n"
+msgstr ""
+"Cadencia de repetición automática de tecla fijada a %.1f cps (retraso = %d "
+"ms)\n"
+
+#: src/kbdrate.c:140 src/kbdrate.c:205
+#, fuzzy, c-format
+msgid "Current keyboard delay %d ms\n"
+msgstr "%s: error al establecer el modo de teclado\n"
+
+#: src/kbdrate.c:141
+#, fuzzy, c-format
+msgid "Current keyboard period %d ms\n"
+msgstr "%s: error al establecer el modo de teclado\n"
+
+#: src/kbdrate.c:179 src/kbdrate.c:303
+#, c-format
+msgid "Typematic Rate set to %.1f cps (delay = %d ms)\n"
+msgstr ""
+"Cadencia de repetición automática de tecla fijada a %.1f cps (retraso = %d "
+"ms)\n"
+
+#: src/kbdrate.c:248
+#, c-format
+msgid "Not supported\n"
+msgstr ""
+
+#: src/kbdrate.c:269
+msgid "Cannot open /dev/port"
+msgstr "No se puede abrir /dev/port"
+
+#: src/kbdrate.c:325
+#, c-format
+msgid "The program sets the keyboard repeat rate and delay in user mode.\n"
+msgstr ""
+
+#: src/kbdrate.c:371
+msgid "set the rate in characters per second."
+msgstr ""
+
+#: src/kbdrate.c:372
+msgid ""
+"set the amount of time the key must remain depressed before it will start to "
+"repeat."
+msgstr ""
+
+#: src/kbdrate.c:373
+msgid "do not set new values, but only display the current ones."
+msgstr ""
+
+#: src/kbdrate.c:374 src/loadkeys.c:124
+msgid "suppress all normal output."
+msgstr ""
+
+#: src/libcommon/getfd.c:70
+#, fuzzy, c-format
+msgid "Couldn't open %s"
+msgstr "No se pudo abrir %s\n"
+
+#: src/libcommon/version.c:27
+#, c-format
+msgid "%s from %s\n"
+msgstr "%s de %s\n"
+
+#: analyze.l:43
+msgid "includes are nested too deeply"
+msgstr ""
+
+#: analyze.l:161 analyze.l:263 analyze.l:357 src/libkeymap/common.c:135
+#: src/libkeymap/diacr.c:48 src/libkeymap/diacr.c:67 src/libkeymap/func.c:52
+#: src/libkeymap/kmap.c:61 src/libkeymap/kmap.c:69 src/libkeymap/loadkeys.c:126
+#: src/screendump.c:76 src/screendump.c:79 src/screendump.c:121
+#: src/screendump.c:151
+#, fuzzy
+msgid "out of memory"
+msgstr "%s: memoria agotada\n"
+
+#: analyze.l:259
+#, fuzzy, c-format
+msgid "switching to %s"
+msgstr "openvt: usando la terminal virtual %s\n"
+
+#: analyze.l:269
+#, fuzzy, c-format
+msgid "cannot open include file %s"
+msgstr "No se pudo abrir el fichero de tipo de letra %s\n"
+
+#: analyze.l:291
+#, fuzzy, c-format
+msgid "unable to parse number: %s"
+msgstr "openvt: No se pudo abrir %s: %s\n"
+
+#: analyze.l:296
+#, c-format
+msgid "value must be a positive number: %s"
+msgstr ""
+
+#: analyze.l:301
+#, c-format
+msgid "value must be less than %d: %s"
+msgstr ""
+
+#: analyze.l:369
+msgid "expected filename between quotes"
+msgstr ""
+
+#: analyze.l:408
+#, c-format
+msgid "unicode keysym out of range: %s"
+msgstr ""
+
+#: analyze.l:468 analyze.l:492 analyze.l:499 analyze.l:506 analyze.l:515
+#, fuzzy
+msgid "string too long"
+msgstr "%s: Advertencia: línea demasiado larga\n"
+
+#: analyze.l:484
+msgid "octal number too big"
+msgstr ""
+
+#: src/libkeymap/common.c:141
+#, c-format
+msgid "unable to initialize array: %s"
+msgstr ""
+
+#: src/libkeymap/diacr.c:31
+#, c-format
+msgid "Index %d in the accent table does not exist"
+msgstr ""
+
+#: src/libkeymap/diacr.c:85
+msgid "Unable to remove item from the diacritical table"
+msgstr ""
+
+#: src/libkeymap/dump.c:78 src/libkeymap/loadkeys.c:44
+#, fuzzy, c-format
+msgid "can not bind key %d to value %d because it is too large"
+msgstr "no se pudo asignar el código de rastreo %x al código de tecla %d\n"
+
+#: src/libkeymap/dump.c:90 src/libkfont/mapscrn.c:257
+#: src/libkfont/mapscrn.c:262
+#, fuzzy
+msgid "Error writing map to file"
+msgstr "Error al escribir la tabla asociativa en el fichero\n"
+
+#: src/libkeymap/dump.c:538
+#, c-format
+msgid "impossible: not meta?\n"
+msgstr "imposible: ¿no será una tecla Meta?\n"
+
+#: src/libkeymap/func.c:30
+#, c-format
+msgid "func %d not allocated"
+msgstr ""
+
+#: src/libkeymap/func.c:62
+msgid "Unable to remove item from the list of functions"
+msgstr ""
+
+#: src/libkeymap/kernel.c:27
+#, c-format
+msgid "table %d must be less than %d"
+msgstr ""
+
+#: src/libkeymap/kernel.c:32
+#, c-format
+msgid "index %d must be less than %d"
+msgstr ""
+
+#: src/libkeymap/kernel.c:40
+#, fuzzy, c-format
+msgid "KDGKBENT: %s: error at index %d in table %d"
+msgstr "Error KDGKBENT en el índice %d de la tabla %d\n"
+
+#: src/libkeymap/kernel.c:66
+#, c-format
+msgid "function index %d must be less than %d"
+msgstr ""
+
+#: src/libkeymap/kernel.c:72
+#, c-format
+msgid "KDGKBSENT: %s: Unable to get function key string"
+msgstr ""
+
+#: src/libkeymap/kernel.c:102
+#, c-format
+msgid "KDGKBDIACR(UC): %s: Unable to get accent table"
+msgstr ""
+
+#: src/libkeymap/kmap.c:83 src/libkeymap/kmap.c:101
+#, c-format
+msgid "unable to get keymap %d"
+msgstr ""
+
+#: src/libkeymap/kmap.c:109
+#, fuzzy, c-format
+msgid "unable to unset key %d for table %d"
+msgstr "fallo al averiguar el código de tecla para el código de rastreo 0x%x\n"
+
+#: src/libkeymap/kmap.c:125
+#, c-format
+msgid "lk_add_key called with bad keycode %d"
+msgstr ""
+
+#: src/libkeymap/kmap.c:132
+#, c-format
+msgid "adding map %d violates explicit keymaps line"
+msgstr ""
+
+#: src/libkeymap/kmap.c:148
+#, fuzzy, c-format
+msgid "unable to set key %d for table %d"
+msgstr "fallo al averiguar el código de tecla para el código de rastreo 0x%x\n"
+
+#: src/libkeymap/kmap.c:239
+msgid "impossible error in lk_add_constants"
+msgstr ""
+
+#: src/libkeymap/ksyms.c:151
+#, c-format
+msgid "unable to get symbol by wrong type: %d"
+msgstr ""
+
+#: src/libkeymap/ksyms.c:165
+#, c-format
+msgid "unable to get symbol of %d type by wrong index: %d"
+msgstr ""
+
+#: src/libkeymap/ksyms.c:340 src/libkeymap/ksyms.c:346
+#: src/libkeymap/ksyms.c:352 src/libkeymap/ksyms.c:358
+#: src/libkeymap/ksyms.c:364
+#, fuzzy, c-format
+msgid "assuming %s %s"
+msgstr "conjeturando iso-8859-1 %s\n"
+
+#: src/libkeymap/ksyms.c:369
+#, fuzzy, c-format
+msgid "unknown keysym '%s'"
+msgstr "keysym '%s' desconocida\n"
+
+#: src/libkeymap/loadkeys.c:27
+#, c-format
+msgid "KDSKBMODE: %s: could not switch to Unicode mode"
+msgstr ""
+
+#: src/libkeymap/loadkeys.c:56
+#, c-format
+msgid "Keymap %d: Permission denied"
+msgstr ""
+
+#: src/libkeymap/loadkeys.c:64
+#, fuzzy, c-format
+msgid "keycode %d, table %d = %d%s"
+msgstr "código de tecla %3d %s\n"
+
+#: src/libkeymap/loadkeys.c:65
+msgid "    FAILED"
+msgstr ""
+
+#: src/libkeymap/loadkeys.c:68
+#, fuzzy, c-format
+msgid "failed to bind key %d to value %d"
+msgstr "no se pudo asignar el código de rastreo %x al código de tecla %d\n"
+
+#: src/libkeymap/loadkeys.c:78
+#, c-format
+msgid "deallocate keymap %d"
+msgstr ""
+
+#: src/libkeymap/loadkeys.c:82
+#, fuzzy, c-format
+msgid "KDSKBENT: %s: could not deallocate keymap %d"
+msgstr "%s: no se pudo liberar la consola %d\n"
+
+#: src/libkeymap/loadkeys.c:97
+#, c-format
+msgid "KDSKBENT: %s: cannot deallocate or clear keymap"
+msgstr ""
+
+#: src/libkeymap/loadkeys.c:107
+#, c-format
+msgid "KDSKBMODE: %s: could not return to original keyboard mode"
+msgstr ""
+
+#: src/libkeymap/loadkeys.c:170
+#, c-format
+msgid "failed to bind string '%s' to function %s"
+msgstr ""
+
+#: src/libkeymap/loadkeys.c:180
+#, c-format
+msgid "failed to clear string %s"
+msgstr ""
+
+#: src/libkeymap/loadkeys.c:198
+#, fuzzy
+msgid "too many compose definitions"
+msgstr "número máximo de definiciones de composición:  %d\n"
+