diff --git a/.travis.yml b/.travis.yml index ba9f9965d..90306dab1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,7 +33,7 @@ matrix: # Standard Ubuntu 12.04 LTS Server Edition 64 bit - - env: Ubu=12.04 Cmd="make -C programs zstd-small zstd-decompress zstd-compress && make -C tests test-gzstd && make -C programs clean && make -C tests versionsTest" + - env: Ubu=12.04 Cmd="make -C programs zstd-small zstd-decompress zstd-compress && make -C programs clean && make -C tests versionsTest" os: linux sudo: required diff --git a/Makefile b/Makefile index 14d1510ab..d86db7cb3 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,7 @@ EXT = endif .PHONY: default -default: lib zstd +default: lib zstd-release .PHONY: all all: allmost @@ -50,6 +50,11 @@ zstd: @$(MAKE) -C $(PRGDIR) $@ cp $(PRGDIR)/zstd$(EXT) . +.PHONY: zstd-release +zstd-release: + @$(MAKE) -C $(PRGDIR) + cp $(PRGDIR)/zstd$(EXT) . + .PHONY: zstdmt zstdmt: @$(MAKE) -C $(PRGDIR) $@ diff --git a/NEWS b/NEWS index f404f6e37..072caee59 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,5 @@ v1.1.3 +cli : zstd can decompress .gz files. Feature can be turned off by targeting `make zstd-nogz` or setting `make HAVE_ZLIB=0` cli : new : experimental target `make zstdmt`, with multi-threading support cli : new : advanced commands for detailed parameters, by Przemyslaw Skibinski cli : fix zstdless on Mac OS-X, by Andrew Janke diff --git a/lib/Makefile b/lib/Makefile index c4a5ecb91..05dd2bc9a 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -22,10 +22,10 @@ VERSION?= $(LIBVER) CPPFLAGS+= -I. -I./common -DXXH_NAMESPACE=ZSTD_ CFLAGS ?= -O3 -CFLAGS += -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow -Wstrict-aliasing=1 \ - -Wswitch-enum -Wdeclaration-after-statement -Wstrict-prototypes -Wundef \ - -Wpointer-arith -CFLAGS += $(MOREFLAGS) +DEBUGFLAGS = -g -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow \ + -Wstrict-aliasing=1 -Wswitch-enum -Wdeclaration-after-statement \ + -Wstrict-prototypes -Wundef -Wpointer-arith +CFLAGS += $(DEBUGFLAGS) $(MOREFLAGS) FLAGS = $(CPPFLAGS) $(CFLAGS) @@ -59,7 +59,7 @@ LIBZSTD = libzstd.$(SHARED_EXT_VER) .PHONY: default all clean install uninstall -default: lib +default: lib-release all: lib @@ -85,8 +85,13 @@ libzstd : $(LIBZSTD) lib: libzstd.a libzstd +lib-release: DEBUGFLAGS := +lib-release: lib + clean: - @$(RM) core *.o *.a *.gcda *.$(SHARED_EXT) *.$(SHARED_EXT).* libzstd.pc dll/libzstd.dll dll/libzstd.lib + @$(RM) -r *.dSYM # Mac OS-X specific + @$(RM) core *.o *.a *.gcda *.$(SHARED_EXT) *.$(SHARED_EXT).* libzstd.pc + @$(RM) dll/libzstd.dll dll/libzstd.lib @$(RM) common/*.o compress/*.o decompress/*.o dictBuilder/*.o legacy/*.o deprecated/*.o @echo Cleaning library completed diff --git a/programs/.gitignore b/programs/.gitignore index 24f96cf4b..eeaf051d6 100644 --- a/programs/.gitignore +++ b/programs/.gitignore @@ -8,6 +8,7 @@ zstd-decompress *.o *.ko default.profraw +have_zlib # Executables *.exe diff --git a/programs/Makefile b/programs/Makefile index 4392939dd..599bef694 100644 --- a/programs/Makefile +++ b/programs/Makefile @@ -26,10 +26,10 @@ endif CPPFLAGS+= -I$(ZSTDDIR) -I$(ZSTDDIR)/common -I$(ZSTDDIR)/compress -I$(ZSTDDIR)/dictBuilder CFLAGS ?= -O3 -CFLAGS += -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow -Wstrict-aliasing=1 \ - -Wswitch-enum -Wdeclaration-after-statement -Wstrict-prototypes -Wundef \ - -Wpointer-arith -CFLAGS += $(MOREFLAGS) +DEBUGFLAGS = -g -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow \ + -Wstrict-aliasing=1 -Wswitch-enum -Wdeclaration-after-statement \ + -Wstrict-prototypes -Wundef -Wpointer-arith +CFLAGS += $(DEBUGFLAGS) $(MOREFLAGS) FLAGS = $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) @@ -41,7 +41,6 @@ ZDICT_FILES := $(ZSTDDIR)/dictBuilder/*.c ZSTDDECOMP_O = $(ZSTDDIR)/decompress/zstd_decompress.o ifeq ($(ZSTD_LEGACY_SUPPORT), 0) -CPPFLAGS += -DZSTD_LEGACY_SUPPORT=0 ZSTDLEGACY_FILES:= else ZSTD_LEGACY_SUPPORT:=1 @@ -66,22 +65,43 @@ else EXT = endif +# zlib detection +VOID = /dev/null +HAVE_ZLIB := $(shell echo "int main(){}" | $(CC) -o $(VOID) -x c - -lz 2> $(VOID) && echo 1 || echo 0) +ifeq ($(HAVE_ZLIB), 1) +ZLIBCPP = -DZSTD_GZDECOMPRESS +ZLIBLD = -lz +endif .PHONY: default all clean clean_decomp_o install uninstall generate_res -default: zstd +default: zstd-release all: zstd $(ZSTDDECOMP_O): CFLAGS += $(ALIGN_LOOP) -zstd : CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT) -zstd : $(ZSTDLIB_OBJ) zstdcli.o fileio.o bench.o datagen.o dibio.o +zstd-internal : CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT) +zstd-internal : $(ZSTDLIB_OBJ) zstdcli.o fileio.o bench.o datagen.o dibio.o +ifeq ($(HAVE_ZLIB), 1) + @echo "==> building zstd with .gz decompression support " +else + @echo "==> no zlib, building zstd with .zst support only (no .gz support) " +endif ifneq (,$(filter Windows%,$(OS))) windres/generate_res.bat endif - $(CC) $(FLAGS) $^ $(RES_FILE) -o $@$(EXT) $(LDFLAGS) + $(CC) $(FLAGS) $^ $(RES_FILE) -o zstd$(EXT) $(LDFLAGS) +zstd-nogz : HAVE_ZLIB=0 +zstd-nogz : zstd-internal + +zstd : CPPFLAGS += $(ZLIBCPP) +zstd : LDFLAGS += $(ZLIBLD) +zstd : zstd-internal + +zstd-release: DEBUGFLAGS := +zstd-release: zstd zstd32 : CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT) zstd32 : $(ZSTDLIB_FILES) zstdcli.c fileio.c bench.c datagen.c dibio.c @@ -118,19 +138,10 @@ zstd-decompress: $(ZSTDCOMMON_FILES) $(ZSTDDECOMP_FILES) zstdcli.c fileio.c zstd-compress: $(ZSTDCOMMON_FILES) $(ZSTDCOMP_FILES) zstdcli.c fileio.c $(CC) $(FLAGS) -DZSTD_NOBENCH -DZSTD_NODICT -DZSTD_NODECOMPRESS $^ -o $@$(EXT) -gzstd: - @echo "int main(){}" | $(CC) -o have_zlib -x c - -lz && echo found zlib || echo did not found zlib - @if [ -s have_zlib ]; then \ - echo building gzstd with .gz decompression support \ - && $(RM) have_zlib$(EXT) fileio.o \ - && CPPFLAGS=-DZSTD_GZDECOMPRESS LDFLAGS="-lz" $(MAKE) zstd; \ - else \ - echo "WARNING : no zlib, building gzstd with only .zst files support : NO .gz SUPPORT !!!" \ - && $(MAKE) zstd; \ - fi - zstdmt: CPPFLAGS += -DZSTD_MULTITHREAD +ifeq (,$(filter Windows%,$(OS))) zstdmt: LDFLAGS += -lpthread +endif zstdmt: zstd generate_res: @@ -141,7 +152,7 @@ clean: @$(RM) $(ZSTDDIR)/decompress/*.o $(ZSTDDIR)/decompress/zstd_decompress.gcda @$(RM) core *.o tmp* result* *.gcda dictionary *.zst \ zstd$(EXT) zstd32$(EXT) zstd-compress$(EXT) zstd-decompress$(EXT) \ - *.gcda default.profraw + *.gcda default.profraw have_zlib @echo Cleaning completed clean_decomp_o: diff --git a/programs/fileio.c b/programs/fileio.c index 960c6e3d9..a9e1574a6 100644 --- a/programs/fileio.c +++ b/programs/fileio.c @@ -742,9 +742,9 @@ static unsigned long long FIO_decompressGzFrame(dRess_t* ress, FILE* srcFile, co strm.avail_in = Z_NULL; if (inflateInit2(&strm, 15 /* maxWindowLogSize */ + 16 /* gzip only */) != Z_OK) return 0; /* see http://www.zlib.net/manual.html */ - strm.next_out = ress->dstBuffer; - strm.avail_out = ress->dstBufferSize; - strm.avail_in = ress->srcBufferLoaded; + strm.next_out = (Bytef*)ress->dstBuffer; + strm.avail_out = (uInt)ress->dstBufferSize; + strm.avail_in = (uInt)ress->srcBufferLoaded; strm.next_in = (z_const unsigned char*)ress->srcBuffer; for ( ; ; ) { @@ -753,7 +753,7 @@ static unsigned long long FIO_decompressGzFrame(dRess_t* ress, FILE* srcFile, co ress->srcBufferLoaded = fread(ress->srcBuffer, 1, ress->srcBufferSize, srcFile); if (ress->srcBufferLoaded == 0) break; strm.next_in = (z_const unsigned char*)ress->srcBuffer; - strm.avail_in = ress->srcBufferLoaded; + strm.avail_in = (uInt)ress->srcBufferLoaded; } ret = inflate(&strm, Z_NO_FLUSH); if (ret != Z_OK && ret != Z_STREAM_END) { DISPLAY("zstd: %s: inflate error %d \n", srcFileName, ret); return 0; } @@ -761,8 +761,8 @@ static unsigned long long FIO_decompressGzFrame(dRess_t* ress, FILE* srcFile, co if (decompBytes) { if (fwrite(ress->dstBuffer, 1, decompBytes, ress->dstFile) != decompBytes) EXM_THROW(31, "Write error : cannot write to output file"); outFileSize += decompBytes; - strm.next_out = ress->dstBuffer; - strm.avail_out = ress->dstBufferSize; + strm.next_out = (Bytef*)ress->dstBuffer; + strm.avail_out = (uInt)ress->dstBufferSize; } } if (ret == Z_STREAM_END) break;