Index: texinfo-6.0/install-info/Makefile.in
===================================================================
---
 texinfo-6.0/install-info/Makefile.in    |    2 -
 texinfo-6.0/install-info/install-info.c |   54 +++++++++++++++++++++++++++-----
 2 files changed, 48 insertions(+), 8 deletions(-)

--- texinfo-6.0/install-info/Makefile.in
+++ texinfo-6.0/install-info/Makefile.in	2015-07-15 00:00:00.000000000 +0000
@@ -241,7 +241,7 @@ am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
 am_ginstall_info_OBJECTS = install-info.$(OBJEXT)
 ginstall_info_OBJECTS = $(am_ginstall_info_OBJECTS)
-ginstall_info_LDADD = $(LDADD)
+ginstall_info_LDADD = $(LDADD) -lzio
 am__DEPENDENCIES_1 =
 ginstall_info_DEPENDENCIES = $(top_builddir)/gnulib/lib/libgnu.a \
 	$(am__DEPENDENCIES_1)
--- texinfo-6.0/install-info/install-info.c
+++ texinfo-6.0/install-info/install-info.c	2015-07-15 12:45:21.689530651 +0000
@@ -22,6 +22,7 @@
 #include <getopt.h>
 #include <regex.h>
 #include <argz.h>
+#include <zio.h>
 
 #define TAB_WIDTH 8
 
@@ -701,34 +702,59 @@ open_possibly_compressed_file (char *fil
 
   *opened_filename = filename;
   f = fopen (*opened_filename, FOPEN_RBIN);
+  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);
+    }
   if (!f)
     {
       *opened_filename = concat (filename, ".gz", "");
-      f = fopen (*opened_filename, FOPEN_RBIN);
+      f = fzopen (*opened_filename, FOPEN_RBIN);
+      *compression_program = "g";
     }
   if (!f)
     {
       free (*opened_filename);
       *opened_filename = concat (filename, ".xz", "");
-      f = fopen (*opened_filename, FOPEN_RBIN);
+      f = fzopen (*opened_filename, FOPEN_RBIN);
+      *compression_program = "x";
     }
   if (!f)
     {
       free (*opened_filename);
       *opened_filename = concat (filename, ".bz2", "");
-      f = fopen (*opened_filename, FOPEN_RBIN);
+      f = fzopen (*opened_filename, FOPEN_RBIN);
+      *compression_program = "b";
     }
   if (!f)
     {
       free (*opened_filename);
       *opened_filename = concat (filename, ".lz", "");
-      f = fopen (*opened_filename, FOPEN_RBIN);
+      f = fzopen (*opened_filename, FOPEN_RBIN);
+      *compression_program = "l";
     }
   if (!f)
     {
      free (*opened_filename);
      *opened_filename = concat (filename, ".lzma", "");
-     f = fopen (*opened_filename, FOPEN_RBIN);
+     f = fzopen (*opened_filename, FOPEN_RBIN);
+     *compression_program = "l";
     }
 #ifdef __MSDOS__
   if (!f)
@@ -942,8 +968,22 @@ output_dirfile (char *dirfile, int dir_n
 
   if (compression_program)
     {
-      char *command = concat (compression_program, ">", dirfile);
-      output = popen (command, "w");
+      output = NULL;
+      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");
+      if (*compression_program == 'l')
+	output = fzopen (dirfile, "wl");
+      if (*compression_program == 'x')
+	output = fzopen (dirfile, "wx");
+      if (!output)
+	{
+	  char *command = concat (compression_program, ">", dirfile);
+	  output = popen (command, "w");
+	}
     }
   else
     output = fopen (dirfile, "w");