[Debian-science-sagemath] GAP: issue related to compressed manual.six: PATCHES

Jerome BENOIT calculus at rezozer.net
Fri Dec 2 05:39:24 UTC 2016


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Hello All,

finally I figured out a way to implement compression (gz) with the help
of the zlib library rather than through gzip pipes. So snow Sage no more
emits failures concerning GAP. Please find in attachment a patch that replaces
gzip pipes with zlib high level functions, as well concomitant patches.
I have also attached an updated d/p/series files: note that the patch
d/p/fix-compressed-six-files is no more necessary and that some autoconf
scripts have to be regenerated (I followed the hint given by dpkg-builpackage).

The material could not be deposited at Alioth as there is no GAP repository there.
On the other hand, I have just uploaded the source ball, the debian stuff
and the debballs at the Sage repository deb-sci-sage (see the Debain Sage page
[1] for more inrmation); therefore it can be easily tested within a schroot environment.

At last, as the main patch, namely fix-zlib-stringfile,  slightly improves
the GAP kernel itself, it must also be applied to the libGAP package:
I will do if it is effectively applied to GAP.

Looking forward for comments.

Thanks,
Jerome



[1] https://wiki.debian.org/DebianScience/Sage
- -- 
Jerome BENOIT | calculus+at-rezozer^dot*net
https://qa.debian.org/developer.php?login=calculus@rezozer.net
AE28 AE15 710D FF1D 87E5  A762 3F92 19A6 7F36 C68B
-----BEGIN PGP SIGNATURE-----

iQQcBAEBCgAGBQJYQQkMAAoJED+SGaZ/NsaL/d4gAM9e8EYvCgQjPRKh3nN14vNV
yFCO7NsIvQx9Kl5ptKHZu/HGWF++1Ek7qzFkiESB52O0CrF+ZOtcDpH9TNZ+2IC1
LWL5PZucwfNBGbL243My95ye3oz2Zl19FaFonBlUmQ9PMpc3OLNQbFSFsFm+QzhU
qVmrvUMe04gM/cm2i9iDd9QDkGyC/57Sr/4QNyYO+AEH8EdbEIg67Skbq+zaNqJI
nFOByHH8BpbXvl8nWwSlXO+q8Ac6wnpAWH3xc04g9s3lYWqehpNRQXA0XyYeMxSv
dALK4bEjas8yR+HEkui6zzNZ3KOsvW90Y3Q8SN36teXtO7czz82HYS8hsYLbvb0S
k3ADvZqTJ0/khS3BrIsvApoEFwtVp5Qz5vwUuc31yhb8HlxBPtSHsSdKAzFOgmfL
RtDJIuADOlGgiPgGrh5jsTV+BI9QoNXEvaJG0Mn9BdRyCEqnn4+kcjdoWS8FAOqX
42uI2YrgvL0JBf5HhQkZ+uFG/WDUyGDLJhnQH1kXOVXprEBRzGHoR6snH1+QwYe7
a7YScVGt4M96sO6LY2vPpdigWkCkLx7p57k1V23WTxBG/2xpXkMhuE/xpakTIFhG
ms9d69n9PK3/jvjBRCtXdFqNjJ5LjWpOcw0NkM1OL60RbeEmijAD0ddM9TtUc7Be
6NtIXkMNxLb4fBOeEHbffbsPWPz02E67w+wKyBV/FY5RRWFToE9u3Umse5pk5SM/
2aJ5BDuy5granxQJBe9tDauWzq6T1bRAqxDqF4beugrS4MX3hxKod06P8Ley49CB
BEAw8y6uOsXt7hLiZzVX5ZpaAqnyo2lPudFM5XjusRRVkXlaszxQcGkrK3uAahjF
9MH3c2wBe7NM52L5Mrm61BnC/FuY26t5qxS3Hms8VsMk8vESAnWd94NT+6F7UhYr
I0j5ys+hb5sJZeWKcBfWu+xksY81IsHKoUw0hwRCSjg6nfaVGmsUg+361B2yJ7Tj
lwzM7r0oqgk8sgqvfp84BdA2UfRXGTP5tioy0IcSuS07uyN0DbStQoLaU1fcuczz
i/suxvjxEDxAfuwXmIfoQqiE/Y6aHqlzegc1Q6BrO+QZIekc5CT6KsuFim2jHEUX
AAr2Pi7RqGqtNhlPH8qdUjyrh5N1FXJuA1gED5sK3YndULb7v5IrBNLxXCHy0NDA
fnHH2f/rvRtRCR/E+pr7kp6U4Oydx2xROU9XhgED969FcwUHgyJkE5Q+PWv/8PO4
aTy8BQhRO0c5pinp/Qy24QGq1NLP1zyCboNQg5JalaheS9GlqTNbk5LE2frWsq3z
EB3uBejD+CYdVuSlbJLr7qkBcCyyz+TWn5OLqrnEbnBDw8Yrjwtp19fu5sjiu4s=
=LjqH
-----END PGP SIGNATURE-----
-------------- next part --------------
Description: zlib support
 Uncompressing .gz files on the fly through pipes causes the doctests failures
 related to GAP. This patch suggest to uncompress directly with zlib to avoid
 the underlying EPIPE signal mess that creates `Boken pipes'. The zlib support
 is implemented as custom stream through the GNU cookie facility. Furhtermore,
 besides the .gz compression format, other compression format (e.g., xz) can be
 easily compressed.
Origin: vendor, Debian
Forwarded: not-yet
Author: Jerome Benoit <calculus at rezozer.net>
Last-Update: 2016-12-02

--- a/configure.in
+++ b/configure.in
@@ -152,6 +152,45 @@
   esac
 fi
 
+AC_ARG_WITH(zlib,
+  AC_HELP_STRING( [--with-zlib],
+    [ Use ZLIB library.
+      If the argument you supply is "yes" or <empty>, then the version of ZLIB bundled with this GAP will be used (default).
+      If the argument is "system" that means the library is reachable with the standard search path "/usr" or "/usr/local".
+      Otherwise you give the <path> to the directory which contains the library.
+      If the argument is no, use original piping through gunzip instead of ZLIB.
+      [[default=yes]]
+    ]),
+  [ ],
+  [ with_zlib=yes ]
+)
+
+USE_ZLIB=yes
+case "$with_zlib" in
+  no)
+    ZLIB_CFLAGS=""
+    ZLIB_LIBS=""
+    USE_ZLIB=no
+    ;;
+  yes)
+    PKG_CHECK_MODULES(ZLIB,zlib >= 1.2.8,[],[])
+    ;;
+  system)
+    ZLIB_CFLAGS=""
+    ZLIB_LIBS="-lz"
+    ;;
+  *)
+    # user specified directory
+    ZLIB_HOME="$with_zlib"
+	if test -f ${ZLIB_HOME}/include/zlib.h && test -f ${ZLIB_HOME}/lib/libz.a ; then
+      ZLIB_CFLAGS="-I${ZLIB_HOME}/include"
+      ZLIB_LIBS="${ZLIB_HOME}/lib/libz.a"
+    else
+      AC_MSG_ERROR([Could not locate ZLIB in the specified location])
+    fi;
+    ;;
+esac
+
 # Enabling/disabling readline is handled by the "inner" configure
 # script in cnf/, so we do nothing here (the command line flag
 # is automatically passed on to the "inner" configure script anyway.
@@ -164,6 +203,9 @@
 AC_SUBST(MAKE_GMP)
 AC_SUBST(USE_GMP)
 AC_SUBST(GMP_VER)
+AC_SUBST(ZLIB_CFLAGS)
+AC_SUBST(ZLIB_LIBS)
+AC_SUBST(USE_ZLIB)
 
 mkdir -p bin
 AC_CONFIG_FILES([Makefile-${CONFIGNAME}:Makefile.in
--- a/src/streams.c
+++ b/src/streams.c
@@ -1826,7 +1826,7 @@
 	{
 	  do {
 	    csize = (ilim == -1 || (ilim- len) > 20000) ? 20000 : ilim - len;
-	    lstr = read(syBuf[ifid].fp, buf, csize);
+	    lstr = SyFread(ifid, buf, csize);
 	  } while (lstr == -1 && errno == EAGAIN);
 	}
       if (lstr <= 0)
@@ -1978,10 +1978,7 @@
             (Int)TNAM_OBJ(fid), 0L,
             "you can replace <fid> via 'return <fid>;'" );
     }
-    if ( syBuf[INT_INTOBJ(fid)].pipe == 1 ) {
-        ErrorMayQuit("<fid> is a pipe, not a file", 0L, 0L);
-    }
-    return SyReadStringFile(INT_INTOBJ(fid));
+    return SyReadStringFid(INT_INTOBJ(fid));
 }
 
 /****************************************************************************
--- a/src/sysfiles.c
+++ b/src/sysfiles.c
@@ -60,6 +60,9 @@
 #endif
 
 #include        <stdio.h>               /* standard input/output functions */
+#ifdef USE_ZLIB
+# include       <zlib.h>                /* zlib input/output functions */
+#endif
 #include        <stdlib.h>              /* ANSI standard functions         */
 #include        <string.h>              /* string functions                */
 #include        <time.h>                /* time functions                  */
@@ -812,6 +815,136 @@
 SYS_SY_BUFFER syBuffers [ 32];
 
 
+#if HAVE_FOPENCOOKIE
+
+#if USE_ZLIB
+
+static
+ssize_t SYS_COOKIE_IO_GZ_Read(void *cookie, char *buffer, size_t size) {
+	ssize_t numberof_byte=-1;
+	if (cookie != NULL) {
+		numberof_byte=(ssize_t)(gzread((gzFile)(cookie),(voidp)(buffer),size));
+		}
+	else {
+		errno=EINVAL;
+		}
+	return (numberof_byte); }
+
+static
+ssize_t SYS_COOKIE_IO_GZ_Write(void *cookie, const char *buffer, size_t size) {
+	ssize_t numberof_byte=-1;
+	if (cookie != NULL) {
+		numberof_byte=(ssize_t)(gzwrite((gzFile)(cookie),(const voidp)(buffer),size));
+		}
+	else {
+		errno=EINVAL;
+		}
+	return (numberof_byte); }
+
+static
+int SYS_COOKIE_IO_GZ_Seek(void *cookie, off_t *position, int whence) {
+	int status=-1;
+	if (cookie != NULL) {
+		status=(int)(gzseek((gzFile)(cookie),(z_off_t)(*position),whence));
+		}
+	else {
+		errno=EINVAL;
+		}
+	return (status); }
+
+static
+int SYS_COOKIE_IO_GZ_Close(void *cookie) {
+	int status=-1;
+	if (cookie != NULL) {
+		gzFile cracker=(gzFile)(cookie);
+		gzflush(cracker,Z_FINISH);
+		status=gzclose(cracker);
+		status=(status==Z_OK)?0:-1;
+		}
+	else {
+		errno=EINVAL;
+		}
+	return (status); }
+
+cookie_io_functions_t SYS_COOKIE_IO_GZ_FUNC = {
+	.read  = SYS_COOKIE_IO_GZ_Read,
+	.write = SYS_COOKIE_IO_GZ_Write,
+	.seek  = SYS_COOKIE_IO_GZ_Seek,
+	.close = SYS_COOKIE_IO_GZ_Close,
+	};
+
+#endif
+
+#endif /* HAVE_FOPENCOOKIE */
+
+FILE* SYS_FILE_AZIO_FOPEN(
+    const Char *        name,
+    const Char *        mode )
+{
+    FILE * Stream = NULL;
+
+    if ( strncmp(mode,"w",1) == 0 )
+    {
+        Char * extension;
+        if ( (extension = strrchr( name, '.')) == NULL ) extension = ".NONE";
+#if HAVE_FOPENCOOKIE
+#ifdef USE_ZLIB
+        if ( strncmp(extension, ".gz", 3) == 0 )
+        {
+            gzFile zhandle = NULL;
+            if ( (zhandle = gzopen( name, "w")) != NULL )
+            {
+                if ( (Stream = fopencookie( (void *)zhandle, "w", SYS_COOKIE_IO_GZ_FUNC)) == NULL )
+                {
+                gzclose( zhandle);
+                }
+            }
+        }
+        else
+#endif /* USE_ZLIB */
+#endif /* HAVE_FOPENCOOKIE */
+        {
+            Stream = fopen(name, "w");
+        }
+    }
+    else if ( strncmp(mode,"r",1) == 0 )
+    {
+        Char namegz [1024];
+        namegz[0] = '\0';
+        if (strlen(name) <= 1018) {
+#if HAVE_FOPENCOOKIE
+#ifdef USE_ZLIB
+            gzFile zhandle = NULL;
+            strxcpy( namegz, name, sizeof(namegz) );
+            strxcat( namegz, ".gz", sizeof(namegz) );
+            if ( (zhandle = gzopen( namegz, "r")) != NULL )
+            {
+                if ( (Stream = fopencookie( (void *)zhandle, "r", SYS_COOKIE_IO_GZ_FUNC)) == NULL )
+                {
+                gzclose( zhandle);
+                }
+            }
+            else
+#endif /* USE_ZLIB */
+#endif /* HAVE_FOPENCOOKIE */
+            {
+                Stream = fopen(name, "r");
+            }
+        }
+				else
+        {
+            Stream = fopen(name, "r");
+        }
+    }
+    else
+    {
+        Pr("Panic: Unknown mode %s\n",(Int) mode, 0);
+        SyExit(2);
+    }
+
+    return Stream;
+}
+
 /****************************************************************************
 **
 *F  SyFopen( <name>, <mode> ) . . . . . . . .  open the file with name <name>
@@ -842,8 +975,6 @@
     const Char *        mode )
 {
     Int                 fid;
-    Char                namegz [1024];
-    Char                cmd [1024];
     int                 flags = 0;
 
     /* handle standard files                                               */
@@ -885,15 +1016,6 @@
         return (Int)-1;
     }
 
-    /* set up <namegz> and <cmd> for pipe command                          */
-    namegz[0] = '\0';
-    if (strlen(name) <= 1018) {
-      strxcpy( namegz, name, sizeof(namegz) );
-      strxcat( namegz, ".gz", sizeof(namegz) );
-
-      strxcpy( cmd, "gunzip <", sizeof(cmd) );
-      strxcat( cmd, namegz, sizeof(cmd) );
-    }
     if (strncmp( mode, "r", 1 ) == 0)
       flags = O_RDONLY;
     else if (strncmp( mode, "w",1 ) == 0)
@@ -912,26 +1034,25 @@
 #endif
     /* try to open the file                                                */
     if ( 0 <= (syBuf[fid].fp = open(name,flags, 0644)) ) {
-        syBuf[fid].pipe = 0;
+        syBuf[fid].stream = NULL;
         syBuf[fid].echo = syBuf[fid].fp;
         syBuf[fid].ateof = 0;
         syBuf[fid].crlast = 0;
         syBuf[fid].bufno = -1;
         syBuf[fid].isTTY = 0;
     }
-#if HAVE_POPEN
+#ifdef USE_ZLIB
    else if ( strncmp(mode,"r",1) == 0
-           && SyIsReadableFile(namegz) == 0
-             && ( (syBuf[fid].pipehandle = popen(cmd,"r"))
-               ) ) {
-        syBuf[fid].pipe = 1;
-        syBuf[fid].fp = fileno(syBuf[fid].pipehandle);
+           && (syBuf[fid].stream = SYS_FILE_AZIO_FOPEN(name, "r")) != NULL
+            ) {
+        syBuf[fid].fp = -2;
+        syBuf[fid].echo = -2;
         syBuf[fid].ateof = 0;
         syBuf[fid].crlast = 0;
         syBuf[fid].bufno = -1;
         syBuf[fid].isTTY = 0;
     }
-#endif
+#endif /* USE_ZLIB */
     else {
         HashUnlock(&syBuf);
         return (Int)-1;
@@ -984,6 +1105,8 @@
 Int SyFclose (
     Int                 fid )
 {
+    int status = 0;
+
     /* check file identifier                                               */
     if ( sizeof(syBuf)/sizeof(syBuf[0]) <= fid || fid < 0 ) {
         fputs("gap: panic 'SyFclose' asked to close illegal fid!\n",stderr);
@@ -1000,12 +1123,20 @@
     }
     HashLock(&syBuf);
     /* try to close the file                                               */
-    if ( (syBuf[fid].pipe == 0 && close( syBuf[fid].fp ) == EOF)
-      || (syBuf[fid].pipe == 1 && pclose( syBuf[fid].pipehandle ) == -1
-#ifdef ECHILD
-          && errno != ECHILD
+#ifdef USE_ZLIB
+    if (syBuf[fid].fp == -2) {
+        if (fclose( syBuf[fid].stream ) == EOF) {
+            status = -1;
+        }
+    } else
 #endif
-          ) )
+    {
+        if (close( syBuf[fid].fp ) == EOF) {
+            status = -1;
+        }
+    }
+
+    if (status)
     {
         fputs("gap: 'SyFclose' cannot close file, ",stderr);
         fputs("maybe your file system is full?\n",stderr);
@@ -1022,6 +1153,26 @@
     return 0;
 }
 
+/****************************************************************************
+**
+*F  SyFread( <fid>, <buffer>, <size> ) . read <size> bytes from the file <fid>
+*/
+int SyFread (Int fid, void* buffer, size_t size)
+{
+    int fp = syBuf[fid].fp;
+/*
+    if (fp == -1) {
+        return -1;
+    }
+*/
+    if (fp == -2) {
+        return (int)fread( buffer, 1, size, syBuf[fid].stream);
+    } else {
+        return (int)read( fp, buffer, size);
+    }
+
+}
+
 
 /****************************************************************************
 **
@@ -1828,15 +1979,14 @@
         return -1;
     }
 
-    /* cannot seek in a pipe                                               */
-    if ( syBuf[fid].pipe ) {
-        return -1;
+    /* get the position                                                    */
+    if (syBuf[fid].fp == -2) {
+        return (Int) fseek( syBuf[fid].stream, 0, SEEK_CUR);
+    } else {
+        return (Int) lseek( syBuf[fid].fp, 0, SEEK_CUR);
     }
 
-    /* get the position
-     */
-
-    return (Int) lseek(syBuf[fid].fp, 0, SEEK_CUR);
+    return -1;
 }
 
 
@@ -1856,13 +2006,13 @@
         return -1;
     }
 
-    /* cannot seek in a pipe                                               */
-    if ( syBuf[fid].pipe ) {
-        return -1;
+    /* get the position                                                    */
+    if (syBuf[fid].fp == -2) {
+        fseek( syBuf[fid].stream, pos, SEEK_SET);
+    } else {
+        lseek( syBuf[fid].fp, pos, SEEK_SET);
     }
 
-    /* get the position                                                    */
-    lseek( syBuf[fid].fp, pos, SEEK_SET );
     return 0;
 }
 
@@ -1976,7 +2126,7 @@
  tryagain:
 #endif
     if (syBuf[fid].bufno < 0)
-        while ( (ret = read( syBuf[fid].fp, &ch, 1 )) == -1 && errno == EAGAIN)
+        while ( (ret = SyFread( fid, &ch, 1 )) == -1 && errno == EAGAIN)
            ;
     else {
         bufno = syBuf[fid].bufno;
@@ -1984,7 +2134,7 @@
             ch = syBuffers[bufno].buf[syBuffers[bufno].bufstart++];
             ret = 1;
         } else {
-            while ( (ret = read( syBuf[fid].fp,
+            while ( (ret = SyFread( fid,
                                  syBuffers[bufno].buf,
                                  SYS_FILE_BUF_SIZE )) == -1 && errno == EAGAIN)
               ;
@@ -3649,16 +3799,16 @@
 Int SyIsReadableFile ( const Char * name )
 {
     Int         res;
-#ifdef HAVE_POPEN 
+#ifdef USE_ZLIB
     Char        xname[1024];
 #endif
 
     SyClearErrorNo();
     res = access( name, R_OK );
     if ( res == -1 ) {
-      /* if there is popen then we might be able to read the file via gunzip */
+      /* if we use zlib then we might be able to read the compressed file */
 
-#ifdef HAVE_POPEN 
+#ifdef USE_ZLIB
       /* beware of buffer overflows */
       if ( strlcpy(xname, name, sizeof(xname)) < sizeof(xname) &&
             strlcat(xname, ".gz", sizeof(xname))  < sizeof(xname) ) {
@@ -4076,8 +4226,10 @@
 }
 
 #else
+# define SyReadStringFile SyReadStringZFile
+#endif
 
-Obj SyReadStringFile(Int fid)
+Obj SyReadStringZFile(Int fid)
 {
     Char            buf[32769];
     Int             ret, len;
@@ -4088,7 +4240,7 @@
     str = NEW_STRING(0);
     len = 0;
     do {
-        ret = read( syBuf[fid].fp , buf, 32768);
+        ret = SyFread( fid , buf, 32768);
         if (ret < 0) {
             SySetErrorNo();
             return Fail;
@@ -4109,7 +4261,17 @@
     return str;
 }
 
-#endif
+Obj SyReadStringFid(Int fid)
+{
+    if (syBuf[fid].fp == -2) {
+        return SyReadStringZFile(fid);
+     }
+    else
+		{
+        return SyReadStringFile(fid);
+    }
+    return Fail;
+}
 
 /****************************************************************************
 **
--- a/Makefile.in
+++ b/Makefile.in
@@ -58,6 +58,9 @@
 ifndef GMP_VER
  GMP_VER=@GMP_VER@
 endif
+ZLIB_CFLAGS=@ZLIB_CFLAGS@
+ZLIB_LIBS=@ZLIB_LIBS@
+USE_ZLIB=@USE_ZLIB@
 ifndef ABI
  ABI=@ABI@
 endif
@@ -113,6 +116,9 @@
 		CONFIGNAME='$(CONFIGNAME)' \
 		MAKE_GMP='$(MAKE_GMP)' \
 		USE_GMP='$(USE_GMP)' \
+		ZLIB_CFLAGS='$(ZLIB_CFLAGS)' \
+		ZLIB_LIBS='$(ZLIB_LIBS)' \
+		USE_ZLIB='$(USE_ZLIB)' \
 		GAPARCH='$(GAPARCH)' \
 		./configure --target=@target@ @gp_configure_options@ )
 
@@ -140,6 +146,8 @@
 		GMP_CFLAGS='$(GMP_CFLAGS)' \
 		GMP_LIBS='$(GMP_LIBS)' \
 		MAKE_GMP='$(MAKE_GMP)' \
+		ZLIB_CFLAGS='$(ZLIB_CFLAGS)' \
+		ZLIB_LIBS='$(ZLIB_LIBS)' \
 		CONFIGNAME='$(CONFIGNAME)' )
 	chmod +x bin/gap-$(CONFIGNAME).sh
 
--- a/src/sysfiles.h
+++ b/src/sysfiles.h
@@ -120,6 +120,16 @@
 *F * * * * * * * * * * * * * * * * open/close * * * * * * * * * * * * * * * *
 */
 
+/****************************************************************************
+**
+*F  SYS_FILE_AZIO_FOPEN( <name>, <mode> ) . open a stream for I/O to file <name>
+**
+** The function 'SYS_FILE_AZIO_FOPEN' is meant to mimic gzfopen for files
+** compressed with Any Arbitrary (but effectively supported) compressor;
+** this a low level function which is employed by SyFopen and for profiling
+** (see 'src/profile.c').
+*/
+extern FILE* SYS_FILE_AZIO_FOPEN( const Char * name, const Char * mode );
 
 /****************************************************************************
 **
@@ -131,9 +141,8 @@
 */
 typedef struct {
   int         fp;          /* file descriptor for this file */
+	FILE *      stream;      /* file stream (fp == -2) */
   int         echo;        /* file descriptor for the echo */
-  UInt        pipe;        /* file is really a pipe */
-  FILE       *pipehandle;  /* for pipes we need to remember the file handle */
   UInt        ateof;       /* set to 1 by any read operation that hits eof
                               reset to 0 by a subsequent successful read */
   UInt        crlast;      /* records that last character read was \r for
@@ -630,17 +639,31 @@
     const Char *        cmd,
     const Char *        str );
 
+/****************************************************************************
+**
+*F  SyFread( <fid>, <buffer>, <size> ) . read <size> bytes from the file <fid>
+**
+**  'SyFread' reads up to <size> bytes from the file with the identifier <fid>
+**  which is obtained from 'SyFopen', storing them in the <buffer>.
+*/
+
+extern int SyFread(Int fid, void* buffer, size_t size);
+
 /***************************************************************************
  **
- *F SyReadFileString( <fid> )
- **   - read file given by <fid> file into a string
+ *F SyReadStringFid( <fid> )
+ **   - read file given by <fid> into a string
+ *F SyReadStringFile( <fid> )
+ **   - read (uncompressed) file given by <fid> file into a string
+ *F SyReadStringZFile( <fid> )
+ **   - read compressed (or uncompressed) file given by <fid> file into
+ **     a string
  */
 
-extern Obj SyReadStringFile (
-    Int fid );
-
+extern Obj SyReadStringFid(Int fid);
+extern Obj SyReadStringFile(Int fid);
+extern Obj SyReadStringZFile(Int fid);
 
-     
 /****************************************************************************
 **
 
--- a/cnf/configure.in
+++ b/cnf/configure.in
@@ -18,6 +18,12 @@
 
 AC_CONFIG_HEADER(config.h:config.hin)
 
+dnl #########################################################################
+dnl ##
+dnl ## enable system extensions
+dnl ##
+
+AC_USE_SYSTEM_EXTENSIONS
 
 dnl #########################################################################
 dnl ##
@@ -220,7 +226,7 @@
 dnl ## check for input/output functions
 dnl ##
 
-AC_CHECK_FUNCS( ttyname select )
+AC_CHECK_FUNCS( ttyname select fopencookie )
 
 dnl #########################################################################
 dnl ##
@@ -314,6 +320,15 @@
 fi
 
 dnl #########################################################################
+dnl ##
+dnl ## enable ZLIB if parent configure script tell us that it is available
+dnl ##
+
+if test "x$USE_ZLIB" = "xyes"  ; then
+				AC_DEFINE(USE_ZLIB, 1, [use ZLIB for reading compressed files])
+fi
+
+dnl #########################################################################
 dnl ##
 dnl ## check for variants of setjmp, longjmp
 dnl ##
--- a/cnf/Makegap.in
+++ b/cnf/Makegap.in
@@ -37,13 +37,13 @@
 # compile and link GAP
 ifeq ($(uname_O),Cygwin)
 gap: $(OBJECTS) $(ITANIUMOBJ) $(EXTOBJS)
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -DCOMPILECYGWINDLL -o gap.o -c ../../src/gap.c
-	$(CC) $(LDFLAGS) -o gap.dll -shared $(OBJECTS) $(ITANIUMOBJ) -lm -lrt $(MPILIBS) $(EXTOBJS) $(GMP_LIBS) $(CONFLIBS)
-	$(CC) $(LDFLAGS) -o gap ../../src/gapw95.c $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -DCOMPILECYGWINDLL gap.dll
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_CFLAGS) $(CFLAGS) -DCOMPILECYGWINDLL -o gap.o -c ../../src/gap.c
+	$(CC) $(LDFLAGS) -o gap.dll -shared $(OBJECTS) $(ITANIUMOBJ) -lm -lrt $(MPILIBS) $(EXTOBJS) $(GMP_LIBS) $(ZLIB_LIBS) $(CONFLIBS)
+	$(CC) $(LDFLAGS) -o gap ../../src/gapw95.c $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -DCOMPILECYGWINDLL gap.dll
 
 else
 gap: $(OBJECTS) $(ITANIUMOBJ) $(EXTOBJS)
-	$(CC) $(LDFLAGS) -o gap $(OBJECTS) $(ITANIUMOBJ) -lm $(MPILIBS) $(EXTOBJS) $(GMP_LIBS) $(CONFLIBS)
+	$(CC) $(LDFLAGS) -o gap $(OBJECTS) $(ITANIUMOBJ) -lm $(MPILIBS) $(EXTOBJS) $(GMP_LIBS) $(ZLIB_LIBS) $(CONFLIBS)
 endif
 
 # dependencies are automatically generated
@@ -52,7 +52,7 @@
  @srcdir@/gvars.h @srcdir@/calls.h @srcdir@/opers.h @srcdir@/ariths.h \
  @srcdir@/bool.h @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h \
  @srcdir@/string.h @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o ariths.o -c @srcdir@/ariths.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o ariths.o -c @srcdir@/ariths.c
 
 blister.o: ../../Makefile @srcdir@/blister.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -61,14 +61,14 @@
  @srcdir@/plist.h @srcdir@/set.h @srcdir@/blister.h @srcdir@/range.h \
  @srcdir@/string.h @srcdir@/saveload.h @srcdir@/code.h @srcdir@/thread.h \
  @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o blister.o -c @srcdir@/blister.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o blister.o -c @srcdir@/blister.c
 
 bool.o: ../../Makefile @srcdir@/bool.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
  @srcdir@/gvars.h @srcdir@/calls.h @srcdir@/opers.h @srcdir@/ariths.h \
  @srcdir@/bool.h @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h \
  @srcdir@/string.h @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o bool.o -c @srcdir@/bool.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o bool.o -c @srcdir@/bool.c
 
 c_filt1.o: ../../Makefile @srcdir@/c_filt1.c @srcdir@/compiled.h @srcdir@/system.h config.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -85,7 +85,7 @@
  @srcdir@/stats.h @srcdir@/funcs.h @srcdir@/intrprtr.h @srcdir@/compiler.h \
  @srcdir@/compstat.h @srcdir@/streams.h @srcdir@/sysfiles.h @srcdir@/weakptr.h \
  @srcdir@/vars.h @srcdir@/aobjects.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o c_filt1.o -c @srcdir@/c_filt1.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o c_filt1.o -c @srcdir@/c_filt1.c
 
 c_meths1.o: ../../Makefile @srcdir@/c_meths1.c @srcdir@/compiled.h @srcdir@/system.h config.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -102,7 +102,7 @@
  @srcdir@/stats.h @srcdir@/funcs.h @srcdir@/intrprtr.h @srcdir@/compiler.h \
  @srcdir@/compstat.h @srcdir@/streams.h @srcdir@/sysfiles.h @srcdir@/weakptr.h \
  @srcdir@/vars.h @srcdir@/aobjects.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o c_meths1.o -c @srcdir@/c_meths1.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o c_meths1.o -c @srcdir@/c_meths1.c
 
 c_oper1.o: ../../Makefile @srcdir@/c_oper1.c @srcdir@/compiled.h @srcdir@/system.h config.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -119,7 +119,7 @@
  @srcdir@/stats.h @srcdir@/funcs.h @srcdir@/intrprtr.h @srcdir@/compiler.h \
  @srcdir@/compstat.h @srcdir@/streams.h @srcdir@/sysfiles.h @srcdir@/weakptr.h \
  @srcdir@/vars.h @srcdir@/aobjects.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o c_oper1.o -c @srcdir@/c_oper1.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o c_oper1.o -c @srcdir@/c_oper1.c
 
 c_random.o: ../../Makefile @srcdir@/c_random.c @srcdir@/compiled.h @srcdir@/system.h config.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -136,7 +136,7 @@
  @srcdir@/stats.h @srcdir@/funcs.h @srcdir@/intrprtr.h @srcdir@/compiler.h \
  @srcdir@/compstat.h @srcdir@/streams.h @srcdir@/sysfiles.h @srcdir@/weakptr.h \
  @srcdir@/vars.h @srcdir@/aobjects.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o c_random.o -c @srcdir@/c_random.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o c_random.o -c @srcdir@/c_random.c
 
 c_type1.o: ../../Makefile @srcdir@/c_type1.c @srcdir@/compiled.h @srcdir@/system.h config.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -153,7 +153,7 @@
  @srcdir@/stats.h @srcdir@/funcs.h @srcdir@/intrprtr.h @srcdir@/compiler.h \
  @srcdir@/compstat.h @srcdir@/streams.h @srcdir@/sysfiles.h @srcdir@/weakptr.h \
  @srcdir@/vars.h @srcdir@/aobjects.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o c_type1.o -c @srcdir@/c_type1.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o c_type1.o -c @srcdir@/c_type1.c
 
 calls.o: ../../Makefile @srcdir@/calls.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -161,7 +161,7 @@
  @srcdir@/precord.h @srcdir@/lists.h @srcdir@/bool.h @srcdir@/plist.h \
  @srcdir@/string.h @srcdir@/code.h @srcdir@/stats.h @srcdir@/saveload.h \
  @srcdir@/tls.h @srcdir@/vars.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o calls.o -c @srcdir@/calls.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o calls.o -c @srcdir@/calls.c
 
 code.o: ../../Makefile @srcdir@/code.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -170,7 +170,7 @@
  @srcdir@/code.h @srcdir@/saveload.h @srcdir@/read.h @srcdir@/gvars.h \
  @srcdir@/thread.h @srcdir@/tls.h @srcdir@/aobjects.h @srcdir@/vars.h \
  @srcdir@/profile.h @srcdir@/exprs.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o code.o -c @srcdir@/code.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o code.o -c @srcdir@/code.c
 
 compiler.o: ../../Makefile @srcdir@/compiler.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gvars.h \
@@ -178,10 +178,10 @@
  @srcdir@/calls.h @srcdir@/lists.h @srcdir@/records.h @srcdir@/precord.h \
  @srcdir@/plist.h @srcdir@/string.h @srcdir@/code.h @srcdir@/exprs.h \
  @srcdir@/stats.h @srcdir@/compiler.h @srcdir@/tls.h @srcdir@/vars.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o compiler.o -c @srcdir@/compiler.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o compiler.o -c @srcdir@/compiler.c
 
 compstat.o: ../../Makefile @srcdir@/compstat.c @srcdir@/system.h config.h @srcdir@/compstat.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o compstat.o -c @srcdir@/compstat.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o compstat.o -c @srcdir@/compstat.c
 
 costab.o: ../../Makefile @srcdir@/costab.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -189,7 +189,7 @@
  @srcdir@/bool.h @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h \
  @srcdir@/plist.h @srcdir@/string.h @srcdir@/costab.h @srcdir@/code.h \
  @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o costab.o -c @srcdir@/costab.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o costab.o -c @srcdir@/costab.c
 
 cyclotom.o: ../../Makefile @srcdir@/cyclotom.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -197,7 +197,7 @@
  @srcdir@/bool.h @srcdir@/integer.h @srcdir@/cyclotom.h @srcdir@/records.h \
  @srcdir@/precord.h @srcdir@/lists.h @srcdir@/plist.h @srcdir@/string.h \
  @srcdir@/saveload.h @srcdir@/code.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o cyclotom.o -c @srcdir@/cyclotom.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o cyclotom.o -c @srcdir@/cyclotom.c
 
 dt.o: ../../Makefile @srcdir@/dt.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/bool.h \
@@ -205,7 +205,7 @@
  @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h @srcdir@/listfunc.h \
  @srcdir@/plist.h @srcdir@/string.h @srcdir@/code.h @srcdir@/thread.h \
  @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o dt.o -c @srcdir@/dt.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o dt.o -c @srcdir@/dt.c
 
 dteval.o: ../../Makefile @srcdir@/dteval.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/bool.h \
@@ -213,7 +213,7 @@
  @srcdir@/records.h @srcdir@/integer.h @srcdir@/dt.h @srcdir@/objcftl.h \
  @srcdir@/dteval.h @srcdir@/lists.h @srcdir@/listfunc.h @srcdir@/plist.h \
  @srcdir@/string.h @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o dteval.o -c @srcdir@/dteval.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o dteval.o -c @srcdir@/dteval.c
 
 exprs.o: ../../Makefile @srcdir@/exprs.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -224,7 +224,7 @@
  @srcdir@/set.h @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h @srcdir@/pperm.h \
  @srcdir@/stats.h @srcdir@/exprs.h @srcdir@/profile.h @srcdir@/aobjects.h \
  @srcdir@/vars.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o exprs.o -c @srcdir@/exprs.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o exprs.o -c @srcdir@/exprs.c
 
 finfield.o: ../../Makefile @srcdir@/finfield.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -233,7 +233,7 @@
  @srcdir@/precord.h @srcdir@/lists.h @srcdir@/plist.h @srcdir@/string.h \
  @srcdir@/code.h @srcdir@/aobjects.h @srcdir@/thread.h @srcdir@/tls.h \
  @srcdir@/ffdata.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o finfield.o -c @srcdir@/finfield.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o finfield.o -c @srcdir@/finfield.c
 
 funcs.o: ../../Makefile @srcdir@/funcs.c @srcdir@/system.h config.h @srcdir@/bool.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -242,7 +242,7 @@
  @srcdir@/precord.h @srcdir@/lists.h @srcdir@/plist.h @srcdir@/saveload.h \
  @srcdir@/opers.h @srcdir@/gvars.h @srcdir@/thread.h @srcdir@/tls.h @srcdir@/vars.h \
  @srcdir@/profile.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o funcs.o -c @srcdir@/funcs.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o funcs.o -c @srcdir@/funcs.c
 
 gap.o: ../../Makefile @srcdir@/gap.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -260,26 +260,26 @@
  @srcdir@/funcs.h @srcdir@/intrprtr.h @srcdir@/compiler.h @srcdir@/compstat.h \
  @srcdir@/streams.h @srcdir@/sysfiles.h @srcdir@/weakptr.h @srcdir@/profile.h \
  @srcdir@/aobjects.h @srcdir@/vars.h @srcdir@/iostream.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o gap.o -c @srcdir@/gap.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o gap.o -c @srcdir@/gap.c
 
 gasman.o: ../../Makefile @srcdir@/gasman.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/code.h \
  @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o gasman.o -c @srcdir@/gasman.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o gasman.o -c @srcdir@/gasman.c
 
 gmpints.o: ../../Makefile @srcdir@/gmpints.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gvars.h \
  @srcdir@/calls.h @srcdir@/opers.h @srcdir@/ariths.h @srcdir@/bool.h @srcdir@/gap.h \
  @srcdir@/code.h @srcdir@/stats.h @srcdir@/records.h @srcdir@/precord.h \
  @srcdir@/lists.h @srcdir@/string.h @srcdir@/saveload.h @srcdir@/intfuncs.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o gmpints.o -c @srcdir@/gmpints.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o gmpints.o -c @srcdir@/gmpints.c
 
 gvars.o: ../../Makefile @srcdir@/gvars.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
  @srcdir@/code.h @srcdir@/gvars.h @srcdir@/calls.h @srcdir@/records.h \
  @srcdir@/precord.h @srcdir@/lists.h @srcdir@/plist.h @srcdir@/string.h \
  @srcdir@/bool.h @srcdir@/tls.h @srcdir@/thread.h @srcdir@/aobjects.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o gvars.o -c @srcdir@/gvars.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o gvars.o -c @srcdir@/gvars.c
 
 integer.o: ../../Makefile @srcdir@/integer.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gvars.h \
@@ -287,7 +287,7 @@
  @srcdir@/integer.h @srcdir@/gap.h @srcdir@/records.h @srcdir@/precord.h \
  @srcdir@/lists.h @srcdir@/string.h @srcdir@/saveload.h @srcdir@/intfuncs.h \
  @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o integer.o -c @srcdir@/integer.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o integer.o -c @srcdir@/integer.c
 
 intfuncs.o: ../../Makefile @srcdir@/intfuncs.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gvars.h \
@@ -295,7 +295,7 @@
  @srcdir@/intfuncs.h @srcdir@/integer.h @srcdir@/gap.h @srcdir@/records.h \
  @srcdir@/precord.h @srcdir@/lists.h @srcdir@/string.h @srcdir@/saveload.h \
  @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o intfuncs.o -c @srcdir@/intfuncs.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o intfuncs.o -c @srcdir@/intfuncs.c
 
 intrprtr.o: ../../Makefile @srcdir@/intrprtr.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -306,14 +306,14 @@
  @srcdir@/saveload.h @srcdir@/set.h @srcdir@/code.h @srcdir@/thread.h \
  @srcdir@/tls.h @srcdir@/pperm.h @srcdir@/funcs.h @srcdir@/intrprtr.h \
  @srcdir@/aobjects.h @srcdir@/vars.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o intrprtr.o -c @srcdir@/intrprtr.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o intrprtr.o -c @srcdir@/intrprtr.c
 
 iostream.o: ../../Makefile @srcdir@/iostream.c @srcdir@/system.h config.h @srcdir@/iostream.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
  @srcdir@/gap.h @srcdir@/gvars.h @srcdir@/lists.h @srcdir@/listfunc.h \
  @srcdir@/plist.h @srcdir@/string.h @srcdir@/records.h @srcdir@/bool.h \
  @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o iostream.o -c @srcdir@/iostream.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o iostream.o -c @srcdir@/iostream.c
 
 listfunc.o: ../../Makefile @srcdir@/listfunc.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -323,7 +323,7 @@
  @srcdir@/integer.h @srcdir@/intfuncs.h @srcdir@/plist.h @srcdir@/range.h \
  @srcdir@/saveload.h @srcdir@/set.h @srcdir@/code.h @srcdir@/thread.h \
  @srcdir@/tls.h @srcdir@/pperm.h @srcdir@/listfunc.h @srcdir@/aobjects.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o listfunc.o -c @srcdir@/listfunc.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o listfunc.o -c @srcdir@/listfunc.c
 
 listoper.o: ../../Makefile @srcdir@/listoper.c @srcdir@/system.h config.h @srcdir@/sysfiles.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -331,7 +331,7 @@
  @srcdir@/integer.h @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h \
  @srcdir@/listoper.h @srcdir@/listfunc.h @srcdir@/plist.h @srcdir@/string.h \
  @srcdir@/opers.h @srcdir@/range.h @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o listoper.o -c @srcdir@/listoper.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o listoper.o -c @srcdir@/listoper.c
 
 lists.o: ../../Makefile @srcdir@/lists.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -339,14 +339,14 @@
  @srcdir@/records.h @srcdir@/lists.h @srcdir@/bool.h @srcdir@/precord.h \
  @srcdir@/plist.h @srcdir@/range.h @srcdir@/string.h @srcdir@/integer.h \
  @srcdir@/aobjects.h @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o lists.o -c @srcdir@/lists.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o lists.o -c @srcdir@/lists.c
 
 macfloat.o: ../../Makefile @srcdir@/macfloat.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/gap.h @srcdir@/plist.h \
  @srcdir@/ariths.h @srcdir@/integer.h @srcdir@/macfloat.h @srcdir@/bool.h \
  @srcdir@/scanner.h @srcdir@/string.h @srcdir@/code.h @srcdir@/thread.h \
  @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o macfloat.o -c @srcdir@/macfloat.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o macfloat.o -c @srcdir@/macfloat.c
 
 objccoll.o: ../../Makefile @srcdir@/objccoll.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gvars.h \
@@ -354,7 +354,7 @@
  @srcdir@/bool.h @srcdir@/precord.h @srcdir@/plist.h @srcdir@/string.h \
  @srcdir@/code.h @srcdir@/thread.h @srcdir@/objfgelm.h @srcdir@/objscoll.h \
  @srcdir@/objccoll.h @srcdir@/objccoll-impl.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o objccoll.o -c @srcdir@/objccoll.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o objccoll.o -c @srcdir@/objccoll.c
 
 objcftl.o: ../../Makefile @srcdir@/objcftl.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gvars.h \
@@ -362,7 +362,7 @@
  @srcdir@/ariths.h @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h \
  @srcdir@/plist.h @srcdir@/string.h @srcdir@/dt.h @srcdir@/objcftl.h \
  @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o objcftl.o -c @srcdir@/objcftl.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o objcftl.o -c @srcdir@/objcftl.c
 
 objects.o: ../../Makefile @srcdir@/objects.c @srcdir@/system.h config.h @srcdir@/sysfiles.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -370,7 +370,7 @@
  @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h @srcdir@/plist.h \
  @srcdir@/string.h @srcdir@/saveload.h @srcdir@/aobjects.h @srcdir@/code.h \
  @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o objects.o -c @srcdir@/objects.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o objects.o -c @srcdir@/objects.c
 
 objfgelm.o: ../../Makefile @srcdir@/objfgelm.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -378,7 +378,7 @@
  @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h @srcdir@/plist.h \
  @srcdir@/string.h @srcdir@/bool.h @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h \
  @srcdir@/objfgelm.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o objfgelm.o -c @srcdir@/objfgelm.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o objfgelm.o -c @srcdir@/objfgelm.c
 
 objpcgel.o: ../../Makefile @srcdir@/objpcgel.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gvars.h \
@@ -386,7 +386,7 @@
  @srcdir@/precord.h @srcdir@/lists.h @srcdir@/plist.h @srcdir@/string.h \
  @srcdir@/ariths.h @srcdir@/bool.h @srcdir@/code.h @srcdir@/objfgelm.h \
  @srcdir@/objscoll.h @srcdir@/objpcgel.h @srcdir@/thread.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o objpcgel.o -c @srcdir@/objpcgel.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o objpcgel.o -c @srcdir@/objpcgel.c
 
 objscoll.o: ../../Makefile @srcdir@/objscoll.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gvars.h \
@@ -394,7 +394,7 @@
  @srcdir@/bool.h @srcdir@/precord.h @srcdir@/plist.h @srcdir@/string.h \
  @srcdir@/code.h @srcdir@/tls.h @srcdir@/objfgelm.h @srcdir@/objscoll.h \
  @srcdir@/objccoll.h @srcdir@/thread.h @srcdir@/objscoll-impl.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o objscoll.o -c @srcdir@/objscoll.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o objscoll.o -c @srcdir@/objscoll.c
 
 opers.o: ../../Makefile @srcdir@/opers.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gvars.h \
@@ -403,7 +403,7 @@
  @srcdir@/string.h @srcdir@/range.h @srcdir@/records.h @srcdir@/precord.h \
  @srcdir@/saveload.h @srcdir@/listfunc.h @srcdir@/integer.h @srcdir@/tls.h \
  @srcdir@/thread.h @srcdir@/aobjects.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o opers.o -c @srcdir@/opers.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o opers.o -c @srcdir@/opers.c
 
 permutat.o: ../../Makefile @srcdir@/permutat.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -411,7 +411,7 @@
  @srcdir@/bool.h @srcdir@/integer.h @srcdir@/permutat.h @srcdir@/records.h \
  @srcdir@/precord.h @srcdir@/lists.h @srcdir@/plist.h @srcdir@/range.h \
  @srcdir@/string.h @srcdir@/code.h @srcdir@/saveload.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o permutat.o -c @srcdir@/permutat.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o permutat.o -c @srcdir@/permutat.c
 
 plist.o: ../../Makefile @srcdir@/plist.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -420,7 +420,7 @@
  @srcdir@/lists.h @srcdir@/plist.h @srcdir@/range.h @srcdir@/string.h \
  @srcdir@/blister.h @srcdir@/saveload.h @srcdir@/code.h @srcdir@/thread.h \
  @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o plist.o -c @srcdir@/plist.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o plist.o -c @srcdir@/plist.c
 
 pperm.o: ../../Makefile @srcdir@/pperm.c @srcdir@/pperm.h @srcdir@/system.h config.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -429,7 +429,7 @@
  @srcdir@/permutat.h @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h \
  @srcdir@/plist.h @srcdir@/range.h @srcdir@/string.h @srcdir@/saveload.h \
  @srcdir@/set.h @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o pperm.o -c @srcdir@/pperm.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o pperm.o -c @srcdir@/pperm.c
 
 precord.o: ../../Makefile @srcdir@/precord.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -437,7 +437,7 @@
  @srcdir@/records.h @srcdir@/lists.h @srcdir@/bool.h @srcdir@/precord.h \
  @srcdir@/plist.h @srcdir@/string.h @srcdir@/saveload.h @srcdir@/code.h \
  @srcdir@/thread.h @srcdir@/tls.h @srcdir@/aobjects.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o precord.o -c @srcdir@/precord.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o precord.o -c @srcdir@/precord.c
 
 profile.o: ../../Makefile @srcdir@/profile.c @srcdir@/system.h config.h @srcdir@/tls.h \
  @srcdir@/sysfiles.h @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h \
@@ -446,7 +446,7 @@
  @srcdir@/string.h @srcdir@/bool.h @srcdir@/code.h @srcdir@/vars.h @srcdir@/exprs.h \
  @srcdir@/intrprtr.h @srcdir@/ariths.h @srcdir@/stats.h @srcdir@/profile.h \
  @srcdir@/thread.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o profile.o -c @srcdir@/profile.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o profile.o -c @srcdir@/profile.c
 
 range.o: ../../Makefile @srcdir@/range.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -454,7 +454,7 @@
  @srcdir@/bool.h @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h \
  @srcdir@/plist.h @srcdir@/range.h @srcdir@/string.h @srcdir@/saveload.h \
  @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o range.o -c @srcdir@/range.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o range.o -c @srcdir@/range.c
 
 rational.o: ../../Makefile @srcdir@/rational.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -462,7 +462,7 @@
  @srcdir@/bool.h @srcdir@/integer.h @srcdir@/rational.h @srcdir@/records.h \
  @srcdir@/precord.h @srcdir@/lists.h @srcdir@/string.h @srcdir@/saveload.h \
  @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o rational.o -c @srcdir@/rational.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o rational.o -c @srcdir@/rational.c
 
 read.o: ../../Makefile @srcdir@/read.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -470,14 +470,14 @@
  @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h @srcdir@/plist.h \
  @srcdir@/intrprtr.h @srcdir@/read.h @srcdir@/tls.h @srcdir@/thread.h \
  @srcdir@/vars.h @srcdir@/bool.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o read.o -c @srcdir@/read.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o read.o -c @srcdir@/read.c
 
 records.o: ../../Makefile @srcdir@/records.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
  @srcdir@/gvars.h @srcdir@/calls.h @srcdir@/opers.h @srcdir@/records.h \
  @srcdir@/bool.h @srcdir@/precord.h @srcdir@/lists.h @srcdir@/plist.h \
  @srcdir@/string.h @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o records.o -c @srcdir@/records.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o records.o -c @srcdir@/records.c
 
 saveload.o: ../../Makefile @srcdir@/saveload.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/bool.h @srcdir@/calls.h \
@@ -485,7 +485,7 @@
  @srcdir@/scanner.h @srcdir@/sysfiles.h @srcdir@/plist.h @srcdir@/macfloat.h \
  @srcdir@/compstat.h @srcdir@/read.h @srcdir@/saveload.h @srcdir@/code.h \
  @srcdir@/thread.h @srcdir@/tls.h @srcdir@/finfield.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o saveload.o -c @srcdir@/saveload.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o saveload.o -c @srcdir@/saveload.c
 
 scanner.o: ../../Makefile @srcdir@/scanner.c @srcdir@/system.h config.h @srcdir@/sysfiles.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -493,14 +493,14 @@
  @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h @srcdir@/plist.h \
  @srcdir@/string.h @srcdir@/opers.h @srcdir@/read.h @srcdir@/tls.h \
  @srcdir@/thread.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o scanner.o -c @srcdir@/scanner.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o scanner.o -c @srcdir@/scanner.c
 
 sctable.o: ../../Makefile @srcdir@/sctable.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
  @srcdir@/gvars.h @srcdir@/calls.h @srcdir@/ariths.h @srcdir@/records.h \
  @srcdir@/precord.h @srcdir@/lists.h @srcdir@/plist.h @srcdir@/string.h \
  @srcdir@/sctable.h @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o sctable.o -c @srcdir@/sctable.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o sctable.o -c @srcdir@/sctable.c
 
 set.o: ../../Makefile @srcdir@/set.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -508,7 +508,7 @@
  @srcdir@/bool.h @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h \
  @srcdir@/listfunc.h @srcdir@/plist.h @srcdir@/set.h @srcdir@/string.h \
  @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o set.o -c @srcdir@/set.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o set.o -c @srcdir@/set.c
 
 stats.o: ../../Makefile @srcdir@/stats.c @srcdir@/system.h config.h @srcdir@/sysfiles.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -517,7 +517,7 @@
  @srcdir@/bool.h @srcdir@/code.h @srcdir@/exprs.h @srcdir@/intrprtr.h \
  @srcdir@/ariths.h @srcdir@/stats.h @srcdir@/profile.h @srcdir@/tls.h \
  @srcdir@/thread.h @srcdir@/vars.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o stats.o -c @srcdir@/stats.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o stats.o -c @srcdir@/stats.c
 
 streams.o: ../../Makefile @srcdir@/streams.c @srcdir@/system.h config.h @srcdir@/sysfiles.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -525,7 +525,7 @@
  @srcdir@/calls.h @srcdir@/bool.h @srcdir@/records.h @srcdir@/precord.h \
  @srcdir@/lists.h @srcdir@/plist.h @srcdir@/string.h @srcdir@/saveload.h \
  @srcdir@/streams.h @srcdir@/tls.h @srcdir@/vars.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o streams.o -c @srcdir@/streams.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o streams.o -c @srcdir@/streams.c
 
 string.o: ../../Makefile @srcdir@/string.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/code.h \
@@ -533,7 +533,7 @@
  @srcdir@/ariths.h @srcdir@/bool.h @srcdir@/records.h @srcdir@/precord.h \
  @srcdir@/lists.h @srcdir@/plist.h @srcdir@/range.h @srcdir@/string.h \
  @srcdir@/saveload.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o string.o -c @srcdir@/string.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o string.o -c @srcdir@/string.c
 
 sysfiles.o: ../../Makefile @srcdir@/sysfiles.c @srcdir@/system.h config.h @srcdir@/sysfiles.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -541,11 +541,11 @@
  @srcdir@/listfunc.h @srcdir@/plist.h @srcdir@/string.h @srcdir@/records.h \
  @srcdir@/bool.h @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h @srcdir@/read.h \
  @srcdir@/compstat.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o sysfiles.o -c @srcdir@/sysfiles.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o sysfiles.o -c @srcdir@/sysfiles.c
 
 system.o: ../../Makefile @srcdir@/system.c @srcdir@/system.h config.h gap_version.h \
  @srcdir@/gap.h @srcdir@/sysfiles.h @srcdir@/gasman.h @srcdir@/atomic.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o system.o -c @srcdir@/system.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o system.o -c @srcdir@/system.c
 
 tietze.o: ../../Makefile @srcdir@/tietze.c @srcdir@/system.h config.h @srcdir@/code.h \
  @srcdir@/stats.h @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h \
@@ -553,7 +553,7 @@
  @srcdir@/bool.h @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h \
  @srcdir@/plist.h @srcdir@/string.h @srcdir@/tietze.h @srcdir@/thread.h \
  @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o tietze.o -c @srcdir@/tietze.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o tietze.o -c @srcdir@/tietze.c
 
 trans.o: ../../Makefile @srcdir@/trans.c @srcdir@/trans.h @srcdir@/system.h config.h \
  @srcdir@/gasman.h @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h \
@@ -562,7 +562,7 @@
  @srcdir@/permutat.h @srcdir@/records.h @srcdir@/precord.h @srcdir@/lists.h \
  @srcdir@/plist.h @srcdir@/range.h @srcdir@/string.h @srcdir@/saveload.h \
  @srcdir@/set.h @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o trans.o -c @srcdir@/trans.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o trans.o -c @srcdir@/trans.c
 
 vars.o: ../../Makefile @srcdir@/vars.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/ariths.h @srcdir@/scanner.h \
@@ -571,7 +571,7 @@
  @srcdir@/string.h @srcdir@/code.h @srcdir@/exprs.h @srcdir@/stats.h @srcdir@/tls.h \
  @srcdir@/vars.h @srcdir@/aobjects.h @srcdir@/saveload.h @srcdir@/thread.h \
  @srcdir@/profile.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o vars.o -c @srcdir@/vars.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o vars.o -c @srcdir@/vars.c
 
 vec8bit.o: ../../Makefile @srcdir@/vec8bit.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -581,7 +581,7 @@
  @srcdir@/blister.h @srcdir@/string.h @srcdir@/vector.h @srcdir@/vec8bit.h \
  @srcdir@/saveload.h @srcdir@/integer.h @srcdir@/vecgf2.h @srcdir@/code.h \
  @srcdir@/stats.h @srcdir@/aobjects.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o vec8bit.o -c @srcdir@/vec8bit.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o vec8bit.o -c @srcdir@/vec8bit.c
 
 vecffe.o: ../../Makefile @srcdir@/vecffe.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -590,7 +590,7 @@
  @srcdir@/listoper.h @srcdir@/plist.h @srcdir@/string.h @srcdir@/vecffe.h \
  @srcdir@/range.h @srcdir@/calls.h @srcdir@/opers.h @srcdir@/code.h \
  @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o vecffe.o -c @srcdir@/vecffe.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o vecffe.o -c @srcdir@/vecffe.c
 
 vecgf2.o: ../../Makefile @srcdir@/vecgf2.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -600,7 +600,7 @@
  @srcdir@/string.h @srcdir@/vecgf2.h @srcdir@/saveload.h @srcdir@/integer.h \
  @srcdir@/vec8bit.h @srcdir@/code.h @srcdir@/stats.h @srcdir@/thread.h \
  @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o vecgf2.o -c @srcdir@/vecgf2.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o vecgf2.o -c @srcdir@/vecgf2.c
 
 vector.o: ../../Makefile @srcdir@/vector.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/scanner.h @srcdir@/gap.h \
@@ -608,14 +608,14 @@
  @srcdir@/records.h @srcdir@/precord.h @srcdir@/listoper.h @srcdir@/plist.h \
  @srcdir@/string.h @srcdir@/vector.h @srcdir@/range.h @srcdir@/code.h \
  @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o vector.o -c @srcdir@/vector.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o vector.o -c @srcdir@/vector.c
 
 weakptr.o: ../../Makefile @srcdir@/weakptr.c @srcdir@/system.h config.h @srcdir@/gasman.h \
  @srcdir@/atomic.h @srcdir@/objects.h @srcdir@/gap.h @srcdir@/gvars.h \
  @srcdir@/bool.h @srcdir@/weakptr.h @srcdir@/lists.h @srcdir@/plist.h \
  @srcdir@/calls.h @srcdir@/saveload.h @srcdir@/opers.h @srcdir@/scanner.h \
  @srcdir@/code.h @srcdir@/thread.h @srcdir@/tls.h
-	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(CFLAGS) -o weakptr.o -c @srcdir@/weakptr.c
+	$(CC) $(CPPFLAGS) $(GMP_CFLAGS) $(ZLIB_FLAGS) $(CFLAGS) -o weakptr.o -c @srcdir@/weakptr.c
 
 itanium.o: @srcdir@/itanium.s 
 	$(CC) $(CFLAGS) -o itanium.o -c @srcdir@/itanium.s
--- a/src/profile.c
+++ b/src/profile.c
@@ -142,10 +142,8 @@
 
 struct ProfileState
 {
-  // C steam we are writing to
+  // C stream we are writing to
   FILE* Stream;
-  // Did we use 'popen' to open the stream (matters when closing)
-  int StreamWasPopened;
   // Are we currently outputting repeats (false=code coverage)
   Int OutputRepeats;
   // Are we colouring output (not related to profiling directly)
@@ -228,47 +226,16 @@
 ** of GAP's execution, before anything else is done.
 */
 
-#if HAVE_POPEN
-static int endsWithgz(char* s)
-{
-  s = strrchr(s, '.');
-  if(s)
-    return strcmp(s, ".gz") == 0;
-  else
-    return 0;
-}
-#endif
-
 static void fopenMaybeCompressed(char* name, struct ProfileState* ps)
 {
-#if HAVE_POPEN
-  char popen_buf[4096];
-  if(endsWithgz(name) && strlen(name) < 3000)
-  {
-    strcpy(popen_buf, "gzip > ");
-    strcat(popen_buf, name);
-    ps->Stream = popen(popen_buf, "w");
-    ps->StreamWasPopened = 1;
-    return;
-  }
-#endif
-
-  ps->Stream = fopen(name, "w");
-  ps->StreamWasPopened = 0;
+  ps->Stream = SYS_FILE_AZIO_FOPEN(name, "w");
+  return ;
 }
 
 static void fcloseMaybeCompressed(struct ProfileState* ps)
 {
-#if HAVE_POPEN
-  if(ps->StreamWasPopened)
-  {
-    pclose(ps->Stream);
-    ps->Stream = 0;
-    return;
-  }
-#endif
   fclose(ps->Stream);
-  ps->Stream = 0;
+  ps->Stream = NULL;
 }
 
 /****************************************************************************
--- a/src/gap.c
+++ b/src/gap.c
@@ -10,6 +10,8 @@
 **
 **  This file contains the various read-eval-print loops and  related  stuff.
 */
+#include        "config.h"              /* autoconf */
+
 #include        <stdio.h>
 #include        <assert.h>
 #include        <string.h>              /* memcpy */
@@ -21,8 +23,8 @@
 #include        <sys/stat.h>
 #endif
 
-#include	<sys/time.h>
-#include <unistd.h> /* move this and wrap execvp later */
+#include	      <sys/time.h>
+#include        <unistd.h> /* move this and wrap execvp later */
 
 #include        "gasman.h"              /* garbage collector               */
 #include        "objects.h"             /* objects                         */
@@ -496,7 +498,8 @@
   TLS(UserHasQuit) = 0;
   return res;
 }
-#ifdef HAVE_REALPATH
+
+#if defined(HAVE_REALPATH) && defined(HAVE_POPEN)
 
 static void StrAppend(char **st, const char *st2)
 {
@@ -743,7 +746,7 @@
   Obj                 func;                   /* function (compiler)     */
   Int4                crc;                    /* crc of file to compile  */
 
-#ifdef HAVE_REALPATH
+#if defined(HAVE_REALPATH) && defined(HAVE_POPEN)
   if (argc >= 3 && !strcmp(argv[1],"--createstartupscript")) {
       return DoCreateStartupScript(argc,argv,0);
   }
-------------- next part --------------
Description: experimental code neutralization
 Neutralize experimental code found in `src/gap.c'.
Origin: vendor, Debian
Forwarded: not-needed
Author: Jerome Benoit <calculus at rezozer.net>
Last-Update: 2016-12-02

--- a/src/gap.c
+++ b/src/gap.c
@@ -499,7 +499,11 @@
   return res;
 }
 
-#if defined(HAVE_REALPATH) && defined(HAVE_POPEN)
+#if defined(HAVE_REALPATH) && defined(HAVE_POPEN) && 0
+# define EXPERIMENTAL
+#endif
+
+#ifdef EXPERIMENTAL
 
 static void StrAppend(char **st, const char *st2)
 {
@@ -731,7 +735,7 @@
     }
     return 0;
 }
-#endif
+#endif /* EXPERIMENTAL */
 
 #ifdef COMPILECYGWINDLL
 #define main realmain
@@ -746,7 +750,7 @@
   Obj                 func;                   /* function (compiler)     */
   Int4                crc;                    /* crc of file to compile  */
 
-#if defined(HAVE_REALPATH) && defined(HAVE_POPEN)
+#ifdef EXPERIMENTAL
   if (argc >= 3 && !strcmp(argv[1],"--createstartupscript")) {
       return DoCreateStartupScript(argc,argv,0);
   }
@@ -759,7 +763,7 @@
   if (argc >= 2 && !strcmp(argv[1],"--fixgac")) {
       return DoFixGac(argv[0]);
   }
-#endif
+#endif /* EXPERIMENTAL */
   
   original_argv0 = argv[0];
   sysargv = argv;
-------------- next part --------------
--- a/src/streams.c
+++ b/src/streams.c
@@ -1978,7 +1978,10 @@
             (Int)TNAM_OBJ(fid), 0L,
             "you can replace <fid> via 'return <fid>;'" );
     }
-    return SyReadStringFid(INT_INTOBJ(fid));
+    if ( syBuf[INT_INTOBJ(fid)].pipe == 1 ) {
+        ErrorMayQuit("<fid> is a pipe, not a file", 0L, 0L);
+    }
+    return SyReadStringFile(INT_INTOBJ(fid));
 }
 
 /****************************************************************************
--- a/src/sysfiles.c
+++ b/src/sysfiles.c
@@ -4034,43 +4034,11 @@
 #endif
 #endif
 
-Obj SyReadStringFile(Int fid)
-{
-    Char            buf[32769];
-    Int             ret, len;
-    UInt            lstr;
-    Obj             str;
-
-    /* read <fid> until we see  eof   (in 32kB pieces)                     */
-    str = NEW_STRING(0);
-    len = 0;
-    do {
-        ret = read( syBuf[fid].fp , buf, 32768);
-        if (ret < 0) {
-            SySetErrorNo();
-            return Fail;
-        }
-        len += ret;
-        GROW_STRING( str, len );
-        lstr = GET_LEN_STRING(str);
-        memcpy( CHARS_STRING(str)+lstr, buf, ret );
-        *(CHARS_STRING(str)+lstr+ret) = '\0';
-        SET_LEN_STRING(str, lstr+ret);
-    } while(ret > 0);
-
-    /* fix the length of <str>                                             */
-    len = GET_LEN_STRING(str);
-    ResizeBag( str, SIZEBAG_STRINGLEN(len) );
-
-    syBuf[fid].ateof = 1;
-    return str;
-}
-
 #if !defined(SYS_IS_CYGWIN32) && defined(HAVE_STAT)
 /* fstat seems completely broken under CYGWIN */
 /* first try to get the whole file as one chunk, this avoids garbage
    collections because of the GROW_STRING calls below    */
-Obj SyReadStringFileStat(Int fid)
+Obj SyReadStringFile(Int fid)
 {
     Int             ret, len;
     Obj             str;
@@ -4107,25 +4075,42 @@
     }
 }
 
-Obj SyReadStringFid(Int fid)
+#else
+
+Obj SyReadStringFile(Int fid)
 {
-    if(syBuf[fid].pipe == 1) {
-        return SyReadStringFile(fid);
-    } else {
-        return SyReadStringFileStat(fid);
-    }
-}
+    Char            buf[32769];
+    Int             ret, len;
+    UInt            lstr;
+    Obj             str;
 
-#else
+    /* read <fid> until we see  eof   (in 32kB pieces)                     */
+    str = NEW_STRING(0);
+    len = 0;
+    do {
+        ret = read( syBuf[fid].fp , buf, 32768);
+        if (ret < 0) {
+            SySetErrorNo();
+            return Fail;
+        }
+        len += ret;
+        GROW_STRING( str, len );
+        lstr = GET_LEN_STRING(str);
+        memcpy( CHARS_STRING(str)+lstr, buf, ret );
+        *(CHARS_STRING(str)+lstr+ret) = '\0';
+        SET_LEN_STRING(str, lstr+ret);
+    } while(ret > 0);
 
-Obj SyReadStringFid(Int fid) {
-    return SyReadStringFile(fid);
+    /* fix the length of <str>                                             */
+    len = GET_LEN_STRING(str);
+    ResizeBag( str, SIZEBAG_STRINGLEN(len) );
+
+    syBuf[fid].ateof = 1;
+    return str;
 }
 
 #endif
 
-
-
 /****************************************************************************
 **
 *V  GVarFuncs . . . . . . . . . . . . . . . . . . list of functions to export
--- a/src/sysfiles.h
+++ b/src/sysfiles.h
@@ -632,19 +632,15 @@
 
 /***************************************************************************
  **
- *F SyReadStringFid( <fid> )
- **   - read file given by <fid> into a string
- *F SyReadStringFile( <fid> )
- **   - read file given by <fid> into a string, only rely on read()
- *F SyReadStringFileStat( <fid> )
- **   - read file given by <fid> into a string, use stat() to determine
- **     size of file before reading. This does not work for pipes
+ *F SyReadFileString( <fid> )
+ **   - read file given by <fid> file into a string
  */
 
-extern Obj SyReadStringFid(Int fid);
-extern Obj SyReadStringFile(Int fid);
-extern Obj SyReadStringFileGeneric(Int fid);
+extern Obj SyReadStringFile (
+    Int fid );
 
+
+     
 /****************************************************************************
 **
 
-------------- next part --------------
fix-convert.pl
convert.pl-repro
config-sub-guess
configure-gapdir
doc-makefile
gac
program-path
upstream-env-tmpdir
fix-basecc
fix-gaparch
remove-infopackage-warning
fix-testinstall.g
gap-version-repro
fix-test-dir
fix-MY_CLOCK
revert-fix-gzip-stringfile
fix-zlib-stringfile
neutralize-experimental-code
##
dpkg-source-commit-00.patch



More information about the Debian-science-sagemath mailing list