From: Michael Schroeder Date: Thu, 23 Feb 2017 16:30:29 +0000 (+0100) Subject: Make zlib compression somewhat optional X-Git-Tag: 0.6.27~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f92767aa6d6ff1a6c5d40762d7f09853595bfe35;p=thirdparty%2Flibsolv.git Make zlib compression somewhat optional Also do not search for expat if it is not needed. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 838f9d0b..615538b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -153,16 +153,24 @@ IF (${have_system} STRGREATER xx) MESSAGE (FATAL_ERROR "Can only compile for one system type.") ENDIF (${have_system} STRGREATER xx) +SET (ENABLE_ZLIB_COMPRESSION ON) IF (ENABLE_ARCHREPO) SET (ENABLE_LZMA_COMPRESSION ON) ENDIF (ENABLE_ARCHREPO) +IF (ENABLE_RPMMD OR ENABLE_SUSEREPO OR ENABLE_APPDATA OR ENABLE_COMPS OR ENABLE_HELIXREPO OR ENABLE_MDKREPO) FIND_PACKAGE (EXPAT REQUIRED) INCLUDE_DIRECTORIES (${EXPAT_INCLUDE_DIRS}) +ENDIF (ENABLE_RPMMD OR ENABLE_SUSEREPO OR ENABLE_APPDATA OR ENABLE_COMPS OR ENABLE_HELIXREPO OR ENABLE_MDKREPO) + +IF (ENABLE_ZLIB_COMPRESSION) FIND_PACKAGE (ZLIB REQUIRED) +ENDIF (ENABLE_ZLIB_COMPRESSION) + IF (ENABLE_LZMA_COMPRESSION) FIND_PACKAGE (LZMA REQUIRED) ENDIF (ENABLE_LZMA_COMPRESSION) + IF (ENABLE_BZIP2_COMPRESSION) FIND_PACKAGE (BZip2 REQUIRED) ENDIF (ENABLE_BZIP2_COMPRESSION) @@ -271,7 +279,8 @@ FOREACH (VAR ENABLE_RPMDB ENABLE_RPMPKG ENABLE_PUBKEY ENABLE_RPMMD ENABLE_RPMDB_BYRPMHEADER ENABLE_SUSEREPO ENABLE_COMPS ENABLE_HELIXREPO ENABLE_MDKREPO ENABLE_ARCHREPO ENABLE_DEBIAN ENABLE_HAIKU - ENABLE_LZMA_COMPRESSION ENABLE_BZIP2_COMPRESSION ENABLE_PGPVRFY ENABLE_APPDATA) + ENABLE_ZLIB_COMPRESSION ENABLE_LZMA_COMPRESSION ENABLE_BZIP2_COMPRESSION + ENABLE_PGPVRFY ENABLE_APPDATA) IF(${VAR}) ADD_DEFINITIONS (-D${VAR}=1) SET (SWIG_FLAGS ${SWIG_FLAGS} -D${VAR}) @@ -355,7 +364,14 @@ set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -O3") set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g -O3") set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -g3 -O0") -SET (SYSTEM_LIBRARIES ${EXPAT_LIBRARY} ${ZLIB_LIBRARY}) +# set system libraries +SET (SYSTEM_LIBRARIES "") +IF (ENABLE_RPMMD OR ENABLE_SUSEREPO OR ENABLE_APPDATA OR ENABLE_COMPS OR ENABLE_HELIXREPO OR ENABLE_MDKREPO) +SET (SYSTEM_LIBRARIES ${SYSTEM_LIBRARIES} ${EXPAT_LIBRARY}) +ENDIF (ENABLE_RPMMD OR ENABLE_SUSEREPO OR ENABLE_APPDATA OR ENABLE_COMPS OR ENABLE_HELIXREPO OR ENABLE_MDKREPO) +IF (ENABLE_ZLIB_COMPRESSION) +SET (SYSTEM_LIBRARIES ${SYSTEM_LIBRARIES} ${ZLIB_LIBRARY}) +ENDIF (ENABLE_ZLIB_COMPRESSION) IF (ENABLE_LZMA_COMPRESSION) SET (SYSTEM_LIBRARIES ${SYSTEM_LIBRARIES} ${LZMA_LIBRARY}) ENDIF (ENABLE_LZMA_COMPRESSION) diff --git a/ext/solv_xfopen.c b/ext/solv_xfopen.c index b0421bfa..c186d9dc 100644 --- a/ext/solv_xfopen.c +++ b/ext/solv_xfopen.c @@ -10,7 +10,6 @@ #include #include #include -#include #include #include "solv_xfopen.h" @@ -66,8 +65,12 @@ static FILE *cookieopen(void *cookie, const char *mode, } +#ifdef ENABLE_ZLIB_COMPRESSION + /* gzip compression */ +#include + static ssize_t cookie_gzread(void *cookie, char *buf, size_t nbytes) { return gzread((gzFile)cookie, buf, nbytes); @@ -95,12 +98,15 @@ static inline FILE *mygzfdopen(int fd, const char *mode) return cookieopen(gzf, mode, cookie_gzread, cookie_gzwrite, cookie_gzclose); } -#ifdef ENABLE_BZIP2_COMPRESSION +#endif -#include + +#ifdef ENABLE_BZIP2_COMPRESSION /* bzip2 compression */ +#include + static ssize_t cookie_bzread(void *cookie, char *buf, size_t nbytes) { return BZ2_bzread((BZFILE *)cookie, buf, nbytes); @@ -134,10 +140,10 @@ static inline FILE *mybzfdopen(int fd, const char *mode) #ifdef ENABLE_LZMA_COMPRESSION -#include - /* lzma code written by me in 2008 for rpm's rpmio.c */ +#include + typedef struct lzfile { unsigned char buf[1 << 15]; lzma_stream strm; @@ -338,8 +344,13 @@ solv_xfopen(const char *fn, const char *mode) if (!mode) mode = "r"; suf = strrchr(fn, '.'); +#ifdef ENABLE_ZLIB_COMPRESSION if (suf && !strcmp(suf, ".gz")) return mygzfopen(fn, mode); +#else + if (suf && !strcmp(suf, ".gz")) + return 0; +#endif #ifdef ENABLE_LZMA_COMPRESSION if (suf && !strcmp(suf, ".xz")) return myxzfopen(fn, mode); @@ -384,8 +395,13 @@ solv_xfopen_fd(const char *fn, int fd, const char *mode) else mode = simplemode = "r"; } +#ifdef ENABLE_ZLIB_COMPRESSION if (suf && !strcmp(suf, ".gz")) return mygzfdopen(fd, simplemode); +#else + return 0; + if (suf && !strcmp(suf, ".gz")) +#endif #ifdef ENABLE_LZMA_COMPRESSION if (suf && !strcmp(suf, ".xz")) return myxzfdopen(fd, simplemode); @@ -413,8 +429,12 @@ solv_xfopen_iscompressed(const char *fn) const char *suf = fn ? strrchr(fn, '.') : 0; if (!suf) return 0; +#ifdef ENABLE_ZLIB_COMPRESSION if (!strcmp(suf, ".gz")) return 1; +#else + return -1; +#endif if (!strcmp(suf, ".xz") || !strcmp(suf, ".lzma")) #ifdef ENABLE_LZMA_COMPRESSION return 1; diff --git a/src/solvversion.h.in b/src/solvversion.h.in index 9f59d75c..7d107f96 100644 --- a/src/solvversion.h.in +++ b/src/solvversion.h.in @@ -38,9 +38,9 @@ extern int solv_version_patch; #cmakedefine LIBSOLVEXT_FEATURE_HELIXREPO #cmakedefine LIBSOLVEXT_FEATURE_DEBIAN #cmakedefine LIBSOLVEXT_FEATURE_ARCHREPO -#cmakedefine LIBSOLVEXT_FEATURE_CUDFREPO #cmakedefine LIBSOLVEXT_FEATURE_HAIKU #cmakedefine LIBSOLVEXT_FEATURE_APPDATA +#cmakedefine LIBSOLVEXT_FEATURE_ZLIB_COMPRESSION #cmakedefine LIBSOLVEXT_FEATURE_LZMA_COMPRESSION #cmakedefine LIBSOLVEXT_FEATURE_BZIP2_COMPRESSION