SHA256
3
0
forked from pool/texinfo
texinfo/texinfo-4.12-zlib.patch

156 lines
4.1 KiB
Diff
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--- 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);
}