]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
refinement : only copy if binary is different 2423/head
authorYann Collet <cyan@fb.com>
Thu, 10 Dec 2020 22:31:35 +0000 (14:31 -0800)
committerYann Collet <cyan@fb.com>
Thu, 10 Dec 2020 22:31:35 +0000 (14:31 -0800)
programs/Makefile

index 23fd007125c73ffde7eb04ec19991e0049b749c4..8641d0ee48a002e67be9e343631cbbcdee85b109 100644 (file)
@@ -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