File texinfo-4.12-zlib.patch of Package texinfo4

--- configure.ac
+++ configure.ac
@@ -224,6 +224,26 @@ AC_CONFIG_FILES([util/defs])
 AC_CHECK_PROGS([HEVEA], [hevea], [])
 AC_CHECK_PROGS([TEX], [tex], [])
 
+#
+# Check for zlib and libbz2 libraries to use this together
+# with SuSE's libzio to open compressed info files.
+#
+AC_CHECK_HEADER(zlib.h,[
+  for lib in z gz
+  do
+    AC_CHECK_LIB($lib, gzopen, [LIBS="$LIBS -l$lib" ; break])
+  done])
+AC_CHECK_HEADER(bzlib.h,[
+  for lib in bz2 bzip2
+  do
+    AC_CHECK_LIB($lib, BZ2_bzopen, [LIBS="$LIBS -l$lib" ; break])
+  done])
+AC_CHECK_HEADER(zio.h,[
+    AC_CHECK_LIB(zio, fzopen, [LIBS="$LIBS -lzio"
+                 AC_DEFINE(HAVE_ZIO, [],
+		 	   [Define to 1 if you have libzio for opening compressed info files.])])
+  ])
+
 AC_CONFIG_FILES([
   Makefile
   doc/Makefile
--- install-info/install-info.c
+++ install-info/install-info.c
@@ -21,6 +21,9 @@
 #include <getopt.h>
 #include <regex.h>
 #include <argz.h>
+#ifdef HAVE_ZIO
+# include <zio.h>
+#endif
 
 #define TAB_WIDTH 8
 
@@ -655,15 +658,47 @@ open_possibly_compressed_file (char *fil
 
   *opened_filename = filename;
   f = fopen (*opened_filename, FOPEN_RBIN);
+#ifdef HAVE_ZIO
+  if (!compression_program)
+    compression_program = &local_compression_program;
+  *compression_program = NULL;
+  if (f)
+    {
+      nread = fread (data, sizeof (data), 1, f);
+      if (nread == 1)
+	{
+	  if (data[0] == '\x1f' && data[1] == '\x8b')
+	    *compression_program = "g";
+	  else if (data[0] == '\x1f' && data[1] == '\x9d')
+	    *compression_program = "Z";
+	  else if (data[0] == '\x1f' && data[1] == '\x9e')
+	    *compression_program = "z";
+	  else if (data[0] == 'B' && data[1] == 'Z' && data[2] == 'h')
+	    *compression_program = "b";
+	}
+      fclose (f);
+      f = fzopen (*opened_filename, FOPEN_RBIN);
+    }
+#endif
   if (!f)
     {
       *opened_filename = concat (filename, ".gz", "");
+#ifdef HAVE_ZIO
+      f = fzopen (*opened_filename, FOPEN_RBIN);
+      *compression_program = "g";
+#else
       f = fopen (*opened_filename, FOPEN_RBIN);
+#endif
   if (!f)
     {
       free (*opened_filename);
       *opened_filename = concat (filename, ".bz2", "");
+#ifdef HAVE_ZIO
+      f = fzopen (*opened_filename, FOPEN_RBIN);
+      *compression_program = "b";
+#else
       f = fopen (*opened_filename, FOPEN_RBIN);
+#endif
     }
   if (!f)
     {
@@ -695,7 +730,11 @@ open_possibly_compressed_file (char *fil
               /* And try opening it again.  */
               free (*opened_filename);
               *opened_filename = filename;
+#ifdef HAVE_ZIO
+              f = fzopen (*opened_filename, FOPEN_RBIN);
+#else
               f = fopen (*opened_filename, FOPEN_RBIN);
+#endif
               if (!f)
                 pfatal_with_name (filename);
             }
@@ -704,6 +743,7 @@ open_possibly_compressed_file (char *fil
         }
     }
 
+#ifndef HAVE_ZIO
   /* Read first few bytes of file rather than relying on the filename.
      If the file is shorter than this it can't be usable anyway.  */
   nread = fread (data, sizeof (data), 1, f);
@@ -778,6 +818,9 @@ open_possibly_compressed_file (char *fil
 #endif
       *is_pipe = 0;
     }
+#else
+  *is_pipe = 0;
+#endif /* HAVE_ZIO */
 
   return f;
 }
@@ -852,11 +895,23 @@ output_dirfile (char *dirfile, int dir_n
   int i;
   FILE *output;
 
+#ifndef HAVE_ZIO
   if (compression_program)
     {
       char *command = concat (compression_program, ">", dirfile);
       output = popen (command, "w");
     }
+#else
+  if (compression_program)
+    {
+      if (*compression_program == 'g' || *compression_program == 'z')
+	output = fzopen (dirfile, "wg");
+      if (*compression_program == 'b')
+	output = fzopen (dirfile, "wb");
+      if (*compression_program == 'Z')
+	output = fzopen (dirfile, "wZ");
+    }
+#endif
   else
     output = fopen (dirfile, "w");
 
@@ -969,9 +1024,11 @@ output_dirfile (char *dirfile, int dir_n
   /* Some systems, such as MS-DOS, simulate pipes with temporary files.
      On those systems, the compressor actually gets run inside pclose,
      so we must call pclose.  */
+#ifndef HAVE_ZIO
   if (compression_program)
     pclose (output);
   else
+#endif
     fclose (output);
 }
 
openSUSE Build Service is sponsored by