From: Yann Collet Date: Thu, 10 Dec 2020 22:31:35 +0000 (-0800) Subject: refinement : only copy if binary is different X-Git-Tag: v1.4.7~5^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c2939b96bee4143e00c050aaa5fbe03c2ef6ac28;p=thirdparty%2Fzstd.git refinement : only copy if binary is different --- diff --git a/programs/Makefile b/programs/Makefile index 23fd00712..8641d0ee4 100644 --- a/programs/Makefile +++ b/programs/Makefile @@ -98,8 +98,6 @@ ZSTD_ALL_SRC := $(ZSTDLIB_LOCAL_SRC) $(ZSTD_CLI_SRC) ZSTD_ALL_OBJ := $(ZSTD_ALL_SRC:.c=.o) UNAME := $(shell uname) - -ifndef BUILD_DIR ifeq ($(UNAME), Darwin) HASH ?= md5 else ifeq ($(UNAME), FreeBSD) @@ -108,9 +106,10 @@ else ifeq ($(UNAME), OpenBSD) HASH ?= md5 endif HASH ?= md5sum +HAVE_HASH :=$(shell echo 1 | $(HASH) > /dev/null && echo 1 || echo 0) +ifndef BUILD_DIR HASH_DIR = conf_$(shell echo $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(ZSTD_FILES) | $(HASH) | cut -f 1 -d " ") -HAVE_HASH :=$(shell echo 1 | $(HASH) > /dev/null && echo 1 || echo 0) ifeq ($(HAVE_HASH),0) $(info warning : could not find HASH ($(HASH)), needed to differentiate builds using different flags) BUILD_DIR := obj/generic_noconf @@ -232,9 +231,21 @@ $(BUILD_DIR)/zstd : $(ZSTD_OBJ) @echo LINK $@ $(CC) $(FLAGS) $^ -o $@$(EXT) $(LDFLAGS) +ifeq ($(HAVE_HASH),1) +SRCBIN_HASH = $(shell cat $(BUILD_DIR)/zstd 2> $(VOID) | $(HASH) | cut -f 1 -d " ") +DSTBIN_HASH = $(shell cat zstd 2> $(VOID) | $(HASH) | cut -f 1 -d " ") +BIN_ISDIFFERENT = $(if $(filter $(SRCBIN_HASH),$(DSTBIN_HASH)),0,1) +else +BIN_ISDIFFERENT = 1 +endif + zstd : $(BUILD_DIR)/zstd - cp -f $< $@ - @echo zstd build completed + if [ $(BIN_ISDIFFERENT) -eq 1 ]; then \ + cp -f $< $@; \ + echo zstd build completed; \ + else \ + echo zstd already built; \ + fi endif # BUILD_DIR