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

Hello,

please find in attachment an improvment of the main patch.

Thanks,
Jerome

On 02/12/16 05:39, Jerome BENOIT wrote:
> 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
> 
> 
> 
> _______________________________________________
> Debian-science-sagemath mailing list
> debian-science-sagem...@lists.alioth.debian.org
> https://lists.alioth.debian.org/mailman/listinfo/debian-science-sagemath
> 

- -- 
Jerome BENOIT, Ph.D. | jgmbenoit-at+rezozer*dot_net
http://www.rezozer.net/

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

iQQcBAEBCgAGBQJYRkYDAAoJED+SGaZ/NsaLVS4gAL/PYMhTJU2J5va5pAGe//LN
QEocXtmtsISXQCnKt+RI8fpADp78/HigK2Nkrxj65HvwvRYyz4Dox33JNIPfqWA0
cbsDKDUCERSIVYkVnsGkYgSpDCWpROHHb0WwsmdXP98GEnj5SX7zU9rpK8r/GOFK
cNBIURoDHxZyY7Qam3ipTYvPq6Htnc2u+oK58ZjXARia1trpKeyf7VklZ5qeoBCD
juMOI1XChibYUh0rs4xUWR5rCSmdQsarfMXd/LUDJalyAkqv4BvZT5J7iJAoo5Ij
PlqP0QxhKje3glqRFBPwuEhB3wQOwHlq/o3K0upEFzm+fhPNmrDzjVW8HBNnp/KZ
EFDkDTodqCztkS7uf2s1e7eXczziLIEv3O9bplbqrP/SOrwUVTNv4Yqjbv3ZWTMd
pNkjyOj3ZA6ZIiVLpzwiVe357w/khRylrduoKALdOOE9uidpkyv8cDfQ2jkim3N7
Gk+CJmYqzGPhyaAQkcNBrFDFSwWjUWVA8hL93qEr+TZW+3YG1dy23kHXBS2YwBFf
K5qYSVXOptzDopRAD+A+FfPiht1/LUmPXCCh5rV3CmuivyYJbzbA+jBFXTbN7wg5
R3kMP/ZDp11nqTozpf7BUbxj6DACrxykDhvBg3qF6cc6PHOGG+KjKOaIhQq2ZhLm
qvGzvh5iyQIPFNdtSYm8s8ZPB59IDs+fpJB2Te2tI1vT4RvVnkR+NFifWeNU13Ws
6adEWfo8Z6TyzlKUq+BJ3yZsaN3a0h+NgQjBA4X4lW7U/LExLDEoOySZFfl7dsmh
5inYJxay8uetmu9k+nQ+OdP5LchJH5If1oSWFlvCq6eJlpeJ6dbjZrN+kcmP0x+R
5uzwGiiTV03NDtTcG91L2xjsLqmP5BC2o2D67L09DrZ/mh7s7PYrCgmlBDD+Fjrh
KOP1jY0rUkIIsvP/a8hhqrfnDik8/wLykAMvzN0yc60BGYzYD80sD7HyiWpWznWo
zO+lMI5xQ9Keqhwi0wEU92MK82gwrhRdp3SQfb1666S2WJH6AswDcVKqXmP3KgFf
TuFeMkTupQzPQv2LRhj5TtuPecCD639BpUr6GwY6YMev6xte6X2RR1+mIT+W1d4A
SlFGbBlpVLXDanXvVe2cs6RPqeOm7NieWtqqIR8uCSKywtJBYsAWxLDX/cUqjBIq
dzZcgNzqAPbfhaRTFJsdYOXAfQI0uyWaeDTeftMrU6P603x6WvmpTmgZUdlEU4JJ
VgBUzrA7DfEtJa0AqXuwXToAAZ6SF+4Bj0nlr1WOW88sKD9+6ZD9/BOWeIJ01vMq
8Vh4uytaIE4q/zCD6VSUntCJdF4o7dLPBqDoLJ2ompMsuPhxX1YjxaH1rZt1bcw=
=4flQ
-----END PGP SIGNATURE-----
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 <calcu...@rezozer.net>
Last-Update: 2016-12-06

--- 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)
               ;
@@ -2328,7 +2478,7 @@
 
 Int HasAvailableBytes( UInt fid )
 {
-#if ! (HAVE_SELECT)
+#if !defined(HAVE_SELECT) || defined(USE_ZLIB)
   Int ret;
 #endif
   UInt bufno;
@@ -2343,7 +2493,10 @@
         return 1;
     }
 
-#if HAVE_SELECT
+#if defined(HAVE_SELECT)
+#if defined(USE_ZLIB)
+  if ( -2 < syBuf[fid].fp )
+#endif /* USE_ZLIB */
   {
     fd_set set;
     struct timeval tv;
@@ -2353,10 +2506,16 @@
     tv.tv_usec = 0;
     return select( syBuf[fid].fp + 1, &set, NULL, NULL, &tv);
   }
-#else
-    /* best guess */
-  ret =  SyIsEndOfFile( fid);
-  return (ret != -1 && ret != 1);
+#if defined(USE_ZLIB)
+  else
+#endif /* USE_ZLIB */
+#endif /* HAVE_SELECT */
+#if !defined(HAVE_SELECT) || defined(USE_ZLIB)
+  /* best guess */
+       {
+    ret =  SyIsEndOfFile( fid);
+    return (ret != -1 && ret != 1);
+       }
 #endif
 }
 
@@ -3649,16 +3808,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 +4235,10 @@
 }
 
 #else
+# define SyReadStringFile SyReadStringZFile
+#endif
 
-Obj SyReadStringFile(Int fid)
+Obj SyReadStringZFile(Int fid)
 {
     Char            buf[32769];
     Int             ret, len;
@@ -4088,7 +4249,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 +4270,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);
   }

Reply via email to