Browse Source

Merge branch 'ab/auto-detect-zlib-compress2'

The build procedure has been taught to notice older version of zlib
and enable our replacement uncompress2() automatically.

* ab/auto-detect-zlib-compress2:
  compat: auto-detect if zlib has uncompress2()
maint
Junio C Hamano 3 years ago
parent
commit
00e38ba6d8
  1. 11
      Makefile
  2. 1
      cache.h
  3. 1
      ci/lib.sh
  4. 11
      compat/zlib-uncompress2.c
  5. 7
      config.mak.uname
  6. 13
      configure.ac
  7. 12
      git-compat-util.h
  8. 11
      reftable/system.h

11
Makefile

@ -264,8 +264,6 @@ all:: @@ -264,8 +264,6 @@ all::
#
# Define NO_DEFLATE_BOUND if your zlib does not have deflateBound.
#
# Define NO_UNCOMPRESS2 if your zlib does not have uncompress2.
#
# Define NO_NORETURN if using buggy versions of gcc 4.6+ and profile feedback,
# as the compiler can crash (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49299)
#
@ -871,6 +869,7 @@ LIB_OBJS += commit-reach.o @@ -871,6 +869,7 @@ LIB_OBJS += commit-reach.o
LIB_OBJS += commit.o
LIB_OBJS += compat/obstack.o
LIB_OBJS += compat/terminal.o
LIB_OBJS += compat/zlib-uncompress2.o
LIB_OBJS += config.o
LIB_OBJS += connect.o
LIB_OBJS += connected.o
@ -1204,7 +1203,8 @@ THIRD_PARTY_SOURCES += compat/regex/% @@ -1204,7 +1203,8 @@ THIRD_PARTY_SOURCES += compat/regex/%
THIRD_PARTY_SOURCES += sha1collisiondetection/%
THIRD_PARTY_SOURCES += sha1dc/%

GITLIBS = common-main.o $(LIB_FILE) $(XDIFF_LIB) $(REFTABLE_LIB)
# xdiff and reftable libs may in turn depend on what is in libgit.a
GITLIBS = common-main.o $(LIB_FILE) $(XDIFF_LIB) $(REFTABLE_LIB) $(LIB_FILE)
EXTLIBS =

GIT_USER_AGENT = git/$(GIT_VERSION)
@ -1736,11 +1736,6 @@ ifdef NO_DEFLATE_BOUND @@ -1736,11 +1736,6 @@ ifdef NO_DEFLATE_BOUND
BASIC_CFLAGS += -DNO_DEFLATE_BOUND
endif

ifdef NO_UNCOMPRESS2
BASIC_CFLAGS += -DNO_UNCOMPRESS2
REFTABLE_OBJS += compat/zlib-uncompress2.o
endif

ifdef NO_POSIX_GOODIES
BASIC_CFLAGS += -DNO_POSIX_GOODIES
endif

1
cache.h

@ -18,7 +18,6 @@ @@ -18,7 +18,6 @@
#include "repository.h"
#include "mem-pool.h"

#include <zlib.h>
typedef struct git_zstream {
z_stream z;
unsigned long avail_in;

1
ci/lib.sh

@ -197,7 +197,6 @@ esac @@ -197,7 +197,6 @@ esac
case "$jobname" in
linux32)
CC=gcc
MAKEFLAGS="$MAKEFLAGS NO_UNCOMPRESS2=1"
;;
linux-musl)
CC=gcc

11
compat/zlib-uncompress2.c

@ -1,3 +1,6 @@ @@ -1,3 +1,6 @@
#include "git-compat-util.h"

#if ZLIB_VERNUM < 0x1290
/* taken from zlib's uncompr.c

commit cacf7f1d4e3d44d871b605da3b647f07d718623f
@ -8,16 +11,11 @@ @@ -8,16 +11,11 @@

*/

#include "../reftable/system.h"
#define z_const

/*
* Copyright (C) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/

#include <zlib.h>

/* clang-format off */

/* ===========================================================================
@ -93,3 +91,6 @@ int ZEXPORT uncompress2 ( @@ -93,3 +91,6 @@ int ZEXPORT uncompress2 (
err == Z_BUF_ERROR && left + stream.avail_out ? Z_DATA_ERROR :
err;
}
#else
static void *dummy_variable = &dummy_variable;
#endif

7
config.mak.uname

@ -66,7 +66,6 @@ ifeq ($(uname_S),Linux) @@ -66,7 +66,6 @@ ifeq ($(uname_S),Linux)
# centos7/rhel7 provides gcc 4.8.5 and zlib 1.2.7.
ifneq ($(findstring .el7.,$(uname_R)),)
BASIC_CFLAGS += -std=c99
NO_UNCOMPRESS2 = YesPlease
endif
endif
ifeq ($(uname_S),GNU/kFreeBSD)
@ -268,10 +267,6 @@ ifeq ($(uname_S),FreeBSD) @@ -268,10 +267,6 @@ ifeq ($(uname_S),FreeBSD)
FILENO_IS_A_MACRO = UnfortunatelyYes
endif
ifeq ($(uname_S),OpenBSD)
# Versions < 7.0 need compatibility layer
ifeq ($(shell expr "$(uname_R)" : "[1-6]\."),2)
NO_UNCOMPRESS2 = UnfortunatelyYes
endif
NO_STRCASESTR = YesPlease
NO_MEMMEM = YesPlease
USE_ST_TIMESPEC = YesPlease
@ -531,7 +526,6 @@ ifeq ($(uname_S),Interix) @@ -531,7 +526,6 @@ ifeq ($(uname_S),Interix)
endif
endif
ifeq ($(uname_S),Minix)
NO_UNCOMPRESS2 = YesPlease
NO_IPV6 = YesPlease
NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
NO_NSEC = YesPlease
@ -587,7 +581,6 @@ ifeq ($(uname_S),NONSTOP_KERNEL) @@ -587,7 +581,6 @@ ifeq ($(uname_S),NONSTOP_KERNEL)
NO_SETENV = YesPlease
NO_UNSETENV = YesPlease
NO_MKDTEMP = YesPlease
NO_UNCOMPRESS2 = YesPlease
# Currently libiconv-1.9.1.
OLD_ICONV = UnfortunatelyYes
NO_REGEX = NeedsStartEnd

13
configure.ac

@ -664,22 +664,9 @@ AC_LINK_IFELSE([ZLIBTEST_SRC], @@ -664,22 +664,9 @@ AC_LINK_IFELSE([ZLIBTEST_SRC],
NO_DEFLATE_BOUND=yes])
LIBS="$old_LIBS"

AC_DEFUN([ZLIBTEST_UNCOMPRESS2_SRC], [
AC_LANG_PROGRAM([#include <zlib.h>],
[uncompress2(NULL,NULL,NULL,NULL);])])
AC_MSG_CHECKING([for uncompress2 in -lz])
old_LIBS="$LIBS"
LIBS="$LIBS -lz"
AC_LINK_IFELSE([ZLIBTEST_UNCOMPRESS2_SRC],
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])
NO_UNCOMPRESS2=yes])
LIBS="$old_LIBS"

GIT_UNSTASH_FLAGS($ZLIB_PATH)

GIT_CONF_SUBST([NO_DEFLATE_BOUND])
GIT_CONF_SUBST([NO_UNCOMPRESS2])

#
# Define NEEDS_SOCKET if linking with libc is not enough (SunOS,

12
git-compat-util.h

@ -1398,6 +1398,18 @@ void unleak_memory(const void *ptr, size_t len); @@ -1398,6 +1398,18 @@ void unleak_memory(const void *ptr, size_t len);
#define UNLEAK(var) do {} while (0)
#endif

#define z_const
#include <zlib.h>

#if ZLIB_VERNUM < 0x1290
/*
* This is uncompress2, which is only available in zlib >= 1.2.9
* (released as of early 2017). See compat/zlib-uncompress2.c.
*/
int uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source,
uLong *sourceLen);
#endif

/*
* This include must come after system headers, since it introduces macros that
* replace system names.

11
reftable/system.h

@ -16,17 +16,6 @@ https://developers.google.com/open-source/licenses/bsd @@ -16,17 +16,6 @@ https://developers.google.com/open-source/licenses/bsd
#include "hash.h" /* hash ID, sizes.*/
#include "dir.h" /* remove_dir_recursively, for tests.*/

#include <zlib.h>

#ifdef NO_UNCOMPRESS2
/*
* This is uncompress2, which is only available in zlib >= 1.2.9
* (released as of early 2017)
*/
int uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source,
uLong *sourceLen);
#endif

int hash_size(uint32_t id);

#endif

Loading…
Cancel
Save