forked from pool/texinfo
156 lines
4.1 KiB
Diff
156 lines
4.1 KiB
Diff
|
--- 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);
|
|||
|
}
|
|||
|
|