--- lib/Makefile.orig	2017-01-03 07:09:52.000000000 +0200
+++ lib/Makefile	2017-03-21 08:54:22.235815800 +0200
@@ -31,14 +31,13 @@
 # ################################################################
 
 # Version numbers
-LIBVER_MAJOR_SCRIPT:=`sed -n '/define LZ4_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./lz4.h`
-LIBVER_MINOR_SCRIPT:=`sed -n '/define LZ4_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./lz4.h`
-LIBVER_PATCH_SCRIPT:=`sed -n '/define LZ4_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./lz4.h`
-LIBVER_SCRIPT:= $(LIBVER_MAJOR_SCRIPT).$(LIBVER_MINOR_SCRIPT).$(LIBVER_PATCH_SCRIPT)
-LIBVER_MAJOR := $(shell echo $(LIBVER_MAJOR_SCRIPT))
-LIBVER_MINOR := $(shell echo $(LIBVER_MINOR_SCRIPT))
-LIBVER_PATCH := $(shell echo $(LIBVER_PATCH_SCRIPT))
-LIBVER  := $(shell echo $(LIBVER_SCRIPT))
+LIBVER_MAJOR_SCRIPT:="/define LZ4_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p"
+LIBVER_MINOR_SCRIPT:="/define LZ4_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p"
+LIBVER_PATCH_SCRIPT:="/define LZ4_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p"
+LIBVER_MAJOR := $(shell sed -n $(LIBVER_MAJOR_SCRIPT) ./lz4.h)
+LIBVER_MINOR := $(shell sed -n $(LIBVER_MINOR_SCRIPT) ./lz4.h)
+LIBVER_PATCH := $(shell sed -n $(LIBVER_PATCH_SCRIPT) ./lz4.h)
+LIBVER  := $(LIBVER_MAJOR).$(LIBVER_MINOR).$(LIBVER_PATCH)
 
 BUILD_STATIC:= yes
 
@@ -50,23 +49,29 @@
 CFLAGS  += $(MOREFLAGS)
 FLAGS    = $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
 
+RM = rm -f
 
 
 # OS X linker doesn't support -soname, and use different extension
 # see : https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryDesignGuidelines.html
 ifeq ($(shell uname), Darwin)
 	SHARED_EXT = dylib
-	SHARED_EXT_MAJOR = $(LIBVER_MAJOR).$(SHARED_EXT)
-	SHARED_EXT_VER = $(LIBVER).$(SHARED_EXT)
+	SHARED_EXT_MAJOR = .$(LIBVER_MAJOR).$(SHARED_EXT)
+	SHARED_EXT_VER = .$(LIBVER).$(SHARED_EXT)
 	SONAME_FLAGS = -install_name $(PREFIX)/lib/liblz4.$(SHARED_EXT_MAJOR) -compatibility_version $(LIBVER_MAJOR) -current_version $(LIBVER)
+else ifneq (,$(filter Windows%,$(OS)))
+	SHARED_EXT = dll
+	SHARED_EXT_VER = -$(LIBVER_MAJOR).$(SHARED_EXT)
+	SHARED_EXT_MAJOR = $(SHARED_EXT_VER)
+	SONAME_FLAGS =
 else
 	SONAME_FLAGS = -Wl,-soname=liblz4.$(SHARED_EXT).$(LIBVER_MAJOR)
 	SHARED_EXT = so
-	SHARED_EXT_MAJOR = $(SHARED_EXT).$(LIBVER_MAJOR)
-	SHARED_EXT_VER = $(SHARED_EXT).$(LIBVER)
+	SHARED_EXT_MAJOR = .$(SHARED_EXT).$(LIBVER_MAJOR)
+	SHARED_EXT_VER = .$(SHARED_EXT).$(LIBVER)
 endif
 
-LIBLZ4 = liblz4.$(SHARED_EXT_VER)
+LIBLZ4 = liblz4$(SHARED_EXT_VER)
 
 default: lib-release
 
@@ -90,8 +95,8 @@
 $(LIBLZ4): *.c
 	@echo compiling dynamic library $(LIBVER)
 ifneq (,$(filter Windows%,$(OS)))
-	@$(CC) $(FLAGS) -DLZ4_DLL_EXPORT=1 -shared $^ -o dll\$@.dll
-	dlltool -D dll\liblz4.dll -d dll\liblz4.def -l dll\liblz4.lib
+	@$(CC) $(FLAGS) -DLZ4_DLL_EXPORT=1 -shared $^ -o $@
+	dlltool -D $@ -d dll\liblz4.def -l liblz4.dll.a
 else
 	@$(CC) $(FLAGS) -shared $^ -fPIC $(SONAME_FLAGS) -o $@
 	@echo creating versioned links
@@ -102,17 +107,17 @@
 liblz4: $(LIBLZ4)
 
 clean:
-	@$(RM) core *.o liblz4.pc dll/liblz4.dll dll/liblz4.lib
-	@$(RM) *.a *.$(SHARED_EXT) *.$(SHARED_EXT_MAJOR) *.$(SHARED_EXT_VER)
+	@-$(RM) core *.o liblz4.pc dll/liblz4.dll dll/liblz4.lib *.dll *.dll.a
+	@-$(RM) *.a *.$(SHARED_EXT) *$(SHARED_EXT_MAJOR) *$(SHARED_EXT_VER)
 	@echo Cleaning library completed
 
 
 #-----------------------------------------------------------------------------
 # make install is validated only for Linux, OSX, BSD, Hurd and Solaris targets
 #-----------------------------------------------------------------------------
-ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS))
+ifneq (,$(filter Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS windows% MINGW%,$(shell uname)))
 
-ifneq (,$(filter $(shell uname),SunOS))
+ifneq (,$(filter SunOS windows%,$(shell uname)))
 INSTALL ?= ginstall
 else
 INSTALL ?= install
@@ -122,6 +127,7 @@
 DESTDIR    ?=
 LIBDIR     ?= $(PREFIX)/lib
 INCLUDEDIR ?= $(PREFIX)/include
+BINDIR     ?= $(PREFIX)/bin
 
 ifneq (,$(filter $(shell uname),OpenBSD FreeBSD NetBSD DragonFly))
 PKGCONFIGDIR ?= $(PREFIX)/libdata/pkgconfig
@@ -134,22 +140,31 @@
 
 liblz4.pc: liblz4.pc.in Makefile
 	@echo creating pkgconfig
-	@sed -e 's|@PREFIX@|$(PREFIX)|' \
-         -e 's|@LIBDIR@|$(LIBDIR)|' \
-         -e 's|@INCLUDEDIR@|$(INCLUDEDIR)|' \
-         -e 's|@VERSION@|$(LIBVER)|' \
+	@sed -e "s|@PREFIX@|$(PREFIX)|" \
+         -e "s|@LIBDIR@|$(LIBDIR)|" \
+         -e "s|@INCLUDEDIR@|$(INCLUDEDIR)|" \
+         -e "s|@VERSION@|$(LIBVER)|" \
           $< >$@
 
 install: lib liblz4.pc
+ifneq (,$(filter Windows%,$(OS)))
+	@$(INSTALL) -d -m 755 $(subst /,\,$(DESTDIR)$(BINDIR)) $(subst /,\,$(DESTDIR)$(LIBDIR)) $(subst /,\,$(DESTDIR)$(PKGCONFIGDIR)) $(subst /,\,$(DESTDIR)$(INCLUDEDIR))
+else
 	@$(INSTALL) -d -m 755 $(DESTDIR)$(PKGCONFIGDIR)/ $(DESTDIR)$(INCLUDEDIR)/
+endif
 	@$(INSTALL_DATA) liblz4.pc $(DESTDIR)$(PKGCONFIGDIR)/
 	@echo Installing libraries
 ifeq ($(BUILD_STATIC),yes)
 	@$(INSTALL_LIB) liblz4.a $(DESTDIR)$(LIBDIR)/liblz4.a
 endif
-	@$(INSTALL_LIB) liblz4.$(SHARED_EXT_VER) $(DESTDIR)$(LIBDIR)
-	@ln -sf liblz4.$(SHARED_EXT_VER) $(DESTDIR)$(LIBDIR)/liblz4.$(SHARED_EXT_MAJOR)
-	@ln -sf liblz4.$(SHARED_EXT_VER) $(DESTDIR)$(LIBDIR)/liblz4.$(SHARED_EXT)
+ifneq (,$(filter Windows%,$(OS)))
+	@$(INSTALL_LIB) liblz4$(SHARED_EXT_VER) $(DESTDIR)$(BINDIR)
+	@$(INSTALL_LIB) liblz4.dll.a $(DESTDIR)$(LIBDIR)
+else
+	@$(INSTALL_LIB) liblz4$(SHARED_EXT_VER) $(DESTDIR)$(LIBDIR)
+	@ln -sf liblz4$(SHARED_EXT_VER) $(DESTDIR)$(LIBDIR)/liblz4$(SHARED_EXT_MAJOR)
+	@ln -sf liblz4$(SHARED_EXT_VER) $(DESTDIR)$(LIBDIR)/liblz4$(SHARED_EXT)
+endif
 	@echo Installing includes
 	@$(INSTALL_DATA) lz4.h $(DESTDIR)$(INCLUDEDIR)/lz4.h
 	@$(INSTALL_DATA) lz4hc.h $(DESTDIR)$(INCLUDEDIR)/lz4hc.h
@@ -158,9 +173,10 @@
 
 uninstall:
 	@$(RM) $(DESTDIR)$(LIBDIR)/pkgconfig/liblz4.pc
-	@$(RM) $(DESTDIR)$(LIBDIR)/liblz4.$(SHARED_EXT)
-	@$(RM) $(DESTDIR)$(LIBDIR)/liblz4.$(SHARED_EXT_MAJOR)
-	@$(RM) $(DESTDIR)$(LIBDIR)/liblz4.$(SHARED_EXT_VER)
+	@$(RM) $(DESTDIR)$(LIBDIR)/liblz4$(SHARED_EXT)
+	@$(RM) $(DESTDIR)$(BINDIR)/liblz4$(SHARED_EXT)
+	@$(RM) $(DESTDIR)$(LIBDIR)/liblz4$(SHARED_EXT_MAJOR)
+	@$(RM) $(DESTDIR)$(LIBDIR)/liblz4$(SHARED_EXT_VER)
 	@$(RM) $(DESTDIR)$(LIBDIR)/liblz4.a
 	@$(RM) $(DESTDIR)$(INCLUDEDIR)/lz4.h
 	@$(RM) $(DESTDIR)$(INCLUDEDIR)/lz4hc.h
--- programs/Makefile.orig	2017-01-03 07:09:52.000000000 +0200
+++ programs/Makefile	2017-03-21 10:18:36.749042800 +0200
@@ -29,14 +29,13 @@
 
 # Version numbers
 LIBVER_SRC := ../lib/lz4.h
-LIBVER_MAJOR_SCRIPT:=`sed -n '/define LZ4_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LIBVER_SRC)`
-LIBVER_MINOR_SCRIPT:=`sed -n '/define LZ4_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LIBVER_SRC)`
-LIBVER_PATCH_SCRIPT:=`sed -n '/define LZ4_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LIBVER_SRC)`
-LIBVER_SCRIPT:= $(LIBVER_MAJOR_SCRIPT).$(LIBVER_MINOR_SCRIPT).$(LIBVER_PATCH_SCRIPT)
-LIBVER_MAJOR := $(shell echo $(LIBVER_MAJOR_SCRIPT))
-LIBVER_MINOR := $(shell echo $(LIBVER_MINOR_SCRIPT))
-LIBVER_PATCH := $(shell echo $(LIBVER_PATCH_SCRIPT))
-LIBVER  := $(shell echo $(LIBVER_SCRIPT))
+LIBVER_MAJOR_SCRIPT:="/define LZ4_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p"
+LIBVER_MINOR_SCRIPT:="/define LZ4_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p"
+LIBVER_PATCH_SCRIPT:="/define LZ4_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p"
+LIBVER_MAJOR := $(shell sed -n $(LIBVER_MAJOR_SCRIPT) $(LIBVER_SRC))
+LIBVER_MINOR := $(shell sed -n $(LIBVER_MINOR_SCRIPT) $(LIBVER_SRC))
+LIBVER_PATCH := $(shell sed -n $(LIBVER_PATCH_SCRIPT) $(LIBVER_SRC))
+LIBVER  := $(LIBVER_MAJOR).$(LIBVER_MINOR).$(LIBVER_PATCH)
 
 LZ4DIR  := ../lib
 
@@ -55,6 +54,7 @@
 MD2ROFF  =ronn
 MD2ROFF_FLAGS  = --roff --warnings --manual="User Commands" --organization="lz4 $(LZ4_VERSION)"
 
+RM = rm -f
 
 # Define *.exe as extension for Windows systems
 ifneq (,$(filter Windows%,$(OS)))
@@ -69,21 +69,21 @@
 
 default: lz4-release
 
-all: lz4 lz4c
+all: lz4$(EXT) lz4c$(EXT)
 
 all32: CFLAGS+=-m32
 all32: all
 
-lz4: CFLAGS += $(DEBUGFLAGS)
-lz4: $(OBJFILES)
-	$(CC) $(FLAGS) $^ -o $@$(EXT)
+lz4$(EXT): CFLAGS += $(DEBUGFLAGS)
+lz4$(EXT): $(OBJFILES)
+	$(CC) $(FLAGS) $^ -o $@
 
 lz4-release: DEBUGFLAGS=
-lz4-release: lz4
+lz4-release: lz4$(EXT)
 
-lz4c  : CFLAGS += $(DEBUGFLAGS)
-lz4c  : $(SRCFILES)
-	$(CC) $(FLAGS) -DENABLE_LZ4C_LEGACY_OPTIONS $^ -o $@$(EXT)
+lz4c$(EXT)  : CFLAGS += $(DEBUGFLAGS)
+lz4c$(EXT)  : $(SRCFILES)
+	$(CC) $(FLAGS) -DENABLE_LZ4C_LEGACY_OPTIONS $^ -o $@
 
 lz4c32: CFLAGS += -m32 $(DEBUGFLAGS)
 lz4c32: $(SRCFILES)
@@ -91,8 +91,8 @@
 
 clean:
 	@$(MAKE) -C $(LZ4DIR) $@ > $(VOID)
-	@$(RM) core *.o *.test tmp* \
-           lz4$(EXT) lz4c$(EXT) lz4c32$(EXT) unlz4 lz4cat
+	@-$(RM) core *.o *.test tmp* \
+           lz4$(EXT) lz4c$(EXT) lz4c32$(EXT) unlz4$(EXT) lz4cat$(EXT)
 	@echo Cleaning completed
 
 
@@ -102,7 +102,7 @@
 man: lz4.1
 
 clean-man:
-	rm lz4.1
+	$(RM) lz4.1
 
 preview-man: clean-man man
 	man ./lz4.1
@@ -111,16 +111,28 @@
 #-----------------------------------------------------------------------------
 # make install is validated only for Linux, OSX, BSD, Hurd and Solaris targets
 #-----------------------------------------------------------------------------
-ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS))
+ifneq (,$(filter Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS windows% MINGW%,$(shell uname)))
 
-unlz4: lz4
+unlz4$(EXT): lz4$(EXT)
+ifneq (,$(filter Windows%,$(OS)))
+	cp -pu lz4$(EXT) unlz4$(EXT)
+else ifneq (,$(filter MINGW%,$(shell uname)))
+	cp -pu lz4$(EXT) unlz4$(EXT)
+else
 	ln -s lz4 unlz4
+endif
 
-lz4cat: lz4
+lz4cat$(EXT): lz4$(EXT)
+ifneq (,$(filter Windows%,$(OS)))
+	cp -pu lz4$(EXT) lz4cat$(EXT)
+else ifneq (,$(filter MINGW%,$(shell uname)))
+	cp -pu lz4$(EXT) lz4cat$(EXT)
+else
 	ln -s lz4 lz4cat
+endif
 
 
-ifneq (,$(filter $(shell uname),SunOS))
+ifneq (,$(filter SunOS windows%,$(shell uname)))
 INSTALL ?= ginstall
 else
 INSTALL ?= install
@@ -143,23 +155,35 @@
 
 install: lz4$(EXT) lz4c$(EXT)
 	@echo Installing binaries
+ifneq (,$(filter Windows%,$(OS)))
+	@$(INSTALL) -d -m 755 $(subst /,\,$(DESTDIR)$(BINDIR)) $(subst /,\,$(DESTDIR)$(PREFIX)/share) $(subst /,\,$(DESTDIR)$(PREFIX)/share/man) $(subst /,\,$(DESTDIR)$(MANDIR))
+else
 	@$(INSTALL) -d -m 755 $(DESTDIR)$(BINDIR)/ $(DESTDIR)$(MANDIR)/
-	@$(INSTALL_PROGRAM) lz4 $(DESTDIR)$(BINDIR)/lz4
+endif
+	@$(INSTALL_PROGRAM) lz4$(EXT) $(DESTDIR)$(BINDIR)/lz4$(EXT)
+ifeq (,$(filter Windows%,$(OS)))
 	@ln -sf lz4 $(DESTDIR)$(BINDIR)/lz4cat
 	@ln -sf lz4 $(DESTDIR)$(BINDIR)/unlz4
-	@$(INSTALL_PROGRAM) lz4c$(EXT) $(DESTDIR)$(BINDIR)/lz4c
+endif
+	@$(INSTALL_PROGRAM) lz4c$(EXT) $(DESTDIR)$(BINDIR)/lz4c$(EXT)
 	@echo Installing man pages
 	@$(INSTALL_MAN) -m 644 lz4.1 $(DESTDIR)$(MANDIR)/lz4.1
+ifneq (,$(filter Windows%,$(OS)))
+	@cp -p lz4.1 $(DESTDIR)$(MANDIR)/lz4c.1
+	@cp -p lz4.1 $(DESTDIR)$(MANDIR)/lz4cat.1
+	@cp -p lz4.1 $(DESTDIR)$(MANDIR)/unlz4.1
+else
 	@ln -sf lz4.1 $(DESTDIR)$(MANDIR)/lz4c.1
 	@ln -sf lz4.1 $(DESTDIR)$(MANDIR)/lz4cat.1
 	@ln -sf lz4.1 $(DESTDIR)$(MANDIR)/unlz4.1
+endif
 	@echo lz4 installation completed
 
 uninstall:
-	@$(RM) $(DESTDIR)$(BINDIR)/lz4cat
-	@$(RM) $(DESTDIR)$(BINDIR)/unlz4
-	@$(RM) $(DESTDIR)$(BINDIR)/lz4
-	@$(RM) $(DESTDIR)$(BINDIR)/lz4c
+	@$(RM) $(DESTDIR)$(BINDIR)/lz4cat$(EXT)
+	@$(RM) $(DESTDIR)$(BINDIR)/unlz4$(EXT)
+	@$(RM) $(DESTDIR)$(BINDIR)/lz4$(EXT)
+	@$(RM) $(DESTDIR)$(BINDIR)/lz4c$(EXT)
 	@$(RM) $(DESTDIR)$(MANDIR)/lz4.1
 	@$(RM) $(DESTDIR)$(MANDIR)/lz4c.1
 	@$(RM) $(DESTDIR)$(MANDIR)/lz4cat.1
--- tests/Makefile.orig	2017-01-03 07:09:52.000000000 +0200
+++ tests/Makefile	2017-03-21 10:26:08.161479700 +0200
@@ -34,7 +34,6 @@
 MANDIR  := $(PREFIX)/share/man/man1
 LIBDIR  := ../lib
 PRGDIR  := ../programs
-VOID    := /dev/null
 TESTDIR := versionsTest
 PYTHON  ?= python3
 
@@ -46,14 +45,19 @@
 CPPFLAGS:= -I$(LIBDIR) -I$(PRGDIR) -DXXH_NAMESPACE=LZ4_
 FLAGS    = $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
 
+RM = rm -f
+CC = gcc
 
 # Define *.exe as extension for Windows systems
 ifneq (,$(filter Windows%,$(OS)))
 EXT =.exe
+VOID    := nul
 else
 EXT =
+VOID    := /dev/null
 endif
 LZ4     := $(PRGDIR)/lz4$(EXT)
+LZ4C    := $(PRGDIR)/lz4c$(EXT)
 
 
 # Default test parameters
@@ -64,43 +68,43 @@
 
 default: all
 
-all: fullbench fuzzer frametest datagen fasttest
+all: fullbench$(EXT) fuzzer$(EXT) frametest$(EXT) datagen$(EXT) fasttest$(EXT)
 
 all32: CFLAGS+=-m32
 all32: all
 
-lz4:
+lz4$(EXT):
 	$(MAKE) -C $(PRGDIR) clean $@ CFLAGS="$(CFLAGS)"
 
-lz4c:
+lz4c$(EXT):
 	$(MAKE) -C $(PRGDIR) clean $@ CFLAGS="$(CFLAGS)"
 
 lz4c32:   # create a 32-bits version for 32/64 interop tests
 	$(MAKE) -C $(PRGDIR) clean $@ CFLAGS="-m32 $(CFLAGS)"
 	cp $(LZ4) $(LZ4)c32
 
-fullbench  : $(LIBDIR)/lz4.o $(LIBDIR)/lz4hc.o $(LIBDIR)/lz4frame.o $(LIBDIR)/xxhash.o fullbench.c
-	$(CC) $(FLAGS) $^ -o $@$(EXT)
+fullbench$(EXT)  : $(LIBDIR)/lz4.o $(LIBDIR)/lz4hc.o $(LIBDIR)/lz4frame.o $(LIBDIR)/xxhash.o fullbench.c
+	$(CC) $(FLAGS) $^ -o $@
 
-fullbench-lib: fullbench.c $(LIBDIR)/xxhash.c
+fullbench-lib$(EXT): fullbench.c $(LIBDIR)/xxhash.c
 	$(MAKE) -C $(LIBDIR) liblz4.a
-	$(CC) $(FLAGS) $^ -o $@$(EXT) $(LIBDIR)/liblz4.a
+	$(CC) $(FLAGS) $^ -o $@ $(LIBDIR)/liblz4.a
 
-fullbench-dll: fullbench.c $(LIBDIR)/xxhash.c
+fullbench-dll$(EXT): fullbench.c $(LIBDIR)/xxhash.c
 	$(MAKE) -C $(LIBDIR) liblz4
-	$(CC) $(FLAGS) $^ -o $@$(EXT) -DLZ4_DLL_IMPORT=1 $(LIBDIR)/dll/liblz4.dll
+	$(CC) $(FLAGS) $^ -o $@ -DLZ4_DLL_IMPORT=1 -L $(LIBDIR) -llz4
 
-fuzzer  : $(LIBDIR)/lz4.o $(LIBDIR)/lz4hc.o $(LIBDIR)/xxhash.o fuzzer.c
-	$(CC) $(FLAGS) $^ -o $@$(EXT)
+fuzzer$(EXT)  : $(LIBDIR)/lz4.o $(LIBDIR)/lz4hc.o $(LIBDIR)/xxhash.o fuzzer.c
+	$(CC) $(FLAGS) $^ -o $@
 
-frametest: $(LIBDIR)/lz4frame.o $(LIBDIR)/lz4.o $(LIBDIR)/lz4hc.o $(LIBDIR)/xxhash.o frametest.c
-	$(CC) $(FLAGS) $^ -o $@$(EXT)
+frametest$(EXT): $(LIBDIR)/lz4frame.o $(LIBDIR)/lz4.o $(LIBDIR)/lz4hc.o $(LIBDIR)/xxhash.o frametest.c
+	$(CC) $(FLAGS) $^ -o $@
 
-fasttest: $(LIBDIR)/lz4.o fasttest.c
-	$(CC) $(FLAGS) $^ -o $@$(EXT)
+fasttest$(EXT): $(LIBDIR)/lz4.o fasttest.c
+	$(CC) $(FLAGS) $^ -o $@
 
-datagen : $(PRGDIR)/datagen.c datagencli.c
-	$(CC) $(FLAGS) -I$(PRGDIR) $^ -o $@$(EXT)
+datagen$(EXT) : $(PRGDIR)/datagen.c datagencli.c
+	$(CC) $(FLAGS) -I$(PRGDIR) $^ -o $@
 
 clean:
 	@$(MAKE) -C $(LIBDIR) $@ > $(VOID)
@@ -122,7 +126,7 @@
 #------------------------------------------------------------------------
 #make test is validated only for Linux, OSX, kFreeBSD, FreeBSD, Hurd and
 #Solaris targets
-ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS))
+ifneq (,$(filter Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS windows% MINGW%,$(shell uname)))
 
 MD5:=md5sum
 ifneq (,$(filter $(shell uname), Darwin ))
@@ -172,8 +176,8 @@
 	$(DIFF) tmp2M tmpR
 	@$(RM) tmp*
 
-test-lz4-contentSize: lz4 datagen
-	@echo "\n ---- test original size support ----"
+test-lz4-contentSize: lz4$(EXT) datagen$(EXT)
+	@gecho "\n ---- test original size support ----"
 	./datagen -g15M > tmp
 	$(LZ4) -v tmp | $(LZ4) -t
 	$(LZ4) -v --content-size tmp | $(LZ4) -d > tmp2
@@ -186,10 +190,10 @@
 	$(DIFF) -s tmp tmp2
 	@$(RM) tmp*
 
-test-lz4-frame-concatenation: lz4 datagen
-	@echo "\n ---- test frame concatenation ----"
-	@echo -n > empty.test
-	@echo hi > nonempty.test
+test-lz4-frame-concatenation: lz4$(EXT) datagen$(EXT)
+	@gecho "\n ---- test frame concatenation ----"
+	@gecho -n > empty.test
+	@gecho hi > nonempty.test
 	cat nonempty.test empty.test nonempty.test > orig.test
 	@$(LZ4) -zq empty.test > empty.lz4.test
 	@$(LZ4) -zq nonempty.test > nonempty.lz4.test
@@ -197,10 +201,10 @@
 	$(LZ4) -d concat.lz4.test > result.test
 	sdiff orig.test result.test
 	@$(RM) *.test
-	@echo frame concatenation test completed
+	@gecho frame concatenation test completed
 
-test-lz4-multiple: lz4 datagen
-	@echo "\n ---- test multiple files ----"
+test-lz4-multiple: lz4$(EXT) datagen$(EXT)
+	@gecho "\n ---- test multiple files ----"
 	@./datagen -s1        > tmp1 2> $(VOID)
 	@./datagen -s2 -g100K > tmp2 2> $(VOID)
 	@./datagen -s3 -g1M   > tmp3 2> $(VOID)
@@ -212,14 +216,14 @@
 	$(LZ4) -f -m tmp1 notHere tmp2; echo $$?
 	@$(RM) tmp*
 
-unlz4:
+unlz4$(EXT):
 	@$(MAKE) -C $(PRGDIR) $@ CFLAGS="$(CFLAGS)"
 
-lz4cat:
+lz4cat$(EXT):
 	@$(MAKE) -C $(PRGDIR) $@ CFLAGS="$(CFLAGS)"
 
-test-lz4-basic: lz4 datagen unlz4 lz4cat
-	@echo "\n ---- test lz4 basic compression/decompression ----"
+test-lz4-basic: lz4$(EXT) datagen$(EXT) unlz4$(EXT) lz4cat$(EXT)
+	@gecho "\n ---- test lz4 basic compression/decompression ----"
 	./datagen -g0     | $(LZ4) -v     | $(LZ4) -t
 	./datagen -g16KB  | $(LZ4) -9     | $(LZ4) -t
 	./datagen -g20KB > tmpSrc
@@ -232,7 +236,7 @@
 	./datagen -g17M   | $(LZ4) -9v    | $(LZ4) -qt
 	./datagen -g33M   | $(LZ4) --no-frame-crc | $(LZ4) -t
 	./datagen -g256MB | $(LZ4) -vqB4D | $(LZ4) -t
-	@echo "hello world" > tmp
+	@gecho "hello world" > tmp
 	$(LZ4) --rm -f tmp
 	ls -ls tmp         && false || true   # must fail (--rm)
 	ls -ls tmp.lz4
@@ -253,32 +257,32 @@
 	@$(RM) tmp*
 
 test-lz4-hugefile: lz4 datagen
-	@echo "\n ---- test huge files compression/decompression ----"
+	@gecho "\n ---- test huge files compression/decompression ----"
 	./datagen -g6GB   | $(LZ4) -vB5D  | $(LZ4) -qt
 	./datagen -g6GB   | $(LZ4) -v5BD  | $(LZ4) -qt
 	@$(RM) tmp*
 
-test-lz4-testmode: lz4 datagen
-	@echo "\n ---- bench mode ----"
+test-lz4-testmode: lz4$(EXT) datagen$(EXT)
+	@gecho "\n ---- bench mode ----"
 	$(LZ4) -bi1
-	@echo "\n ---- test mode ----"
+	@gecho "\n ---- test mode ----"
 	./datagen | $(LZ4) -t             && false || true
 	./datagen | $(LZ4) -tf            && false || true
-	@echo "\n ---- pass-through mode ----"
+	@gecho "\n ---- pass-through mode ----"
 	./datagen | $(LZ4) -d  > $(VOID)  && false || true
 	./datagen | $(LZ4) -df > $(VOID)
-	@echo "Hello World !" > tmp1
+	@gecho "Hello World !" > tmp1
 	$(LZ4) -dcf tmp1
-	@echo "from underground..." > tmp2
+	@gecho "from underground..." > tmp2
 	$(LZ4) -dcfm tmp1 tmp2
-	@echo "\n ---- test cli ----"
+	@gecho "\n ---- test cli ----"
 	$(LZ4)     file-does-not-exist    && false || true
 	$(LZ4) -f  file-does-not-exist    && false || true
 	$(LZ4) -fm file1-dne file2-dne    && false || true
 	$(LZ4) -fm file1-dne file2-dne    && false || true
 
 test-lz4-opt-parser: lz4 datagen
-	@echo "\n ---- test opt-parser ----"
+	@gecho "\n ---- test opt-parser ----"
 	./datagen -g16KB      | $(LZ4) -12      | $(LZ4) -t
 	./datagen -P10        | $(LZ4) -12B4    | $(LZ4) -t
 	./datagen -g256K      | $(LZ4) -12B4D   | $(LZ4) -t
@@ -294,15 +298,15 @@
           test-lz4-frame-concatenation test-lz4-testmode test-lz4-contentSize \
           test-lz4-hugefile
 
-test-lz4c: lz4c datagen
-	@echo "\n ---- test lz4c version ----"
-	./datagen -g256MB | $(LZ4)c -l -v    | $(LZ4)c   -t
+test-lz4c: lz4c$(EXT) datagen$(EXT)
+	@gecho "\n ---- test lz4c version ----"
+	./datagen -g256MB | $(LZ4C) -l -v    | $(LZ4C)   -t
 
 test-lz4c32: CFLAGS+=-m32
 test-lz4c32: test-lz4
 
 test-interop-32-64: lz4 lz4c32 datagen
-	@echo "\n ---- test interoperability 32-bits -vs- 64 bits ----"
+	@gecho "\n ---- test interoperability 32-bits -vs- 64 bits ----"
 	./datagen -g16KB  | $(LZ4)c32 -9     | $(LZ4)    -t
 	./datagen -P10    | $(LZ4)    -9B4   | $(LZ4)c32 -t
 	./datagen         | $(LZ4)c32        | $(LZ4)    -t
--- Makefile.orig	2017-01-03 07:09:52.000000000 +0200
+++ Makefile	2017-03-21 08:46:08.354329500 +0200
@@ -41,6 +41,7 @@
 TESTDIR = tests
 EXDIR   = examples
 
+RM = rm -f
 
 # Define nul output
 ifneq (,$(filter Windows%,$(OS)))
@@ -87,7 +88,7 @@
 #------------------------------------------------------------------------
 #make install is validated only for Linux, OSX, kFreeBSD, Hurd and
 #FreeBSD targets
-ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU FreeBSD))
+ifneq (,$(filter Linux Darwin GNU/kFreeBSD GNU FreeBSD windows% MINGW%,$(shell uname)))
 HOST_OS = POSIX
 
 install:
--- programs/lz4cli.c~0	2017-01-03 07:09:52.000000000 +0200
+++ programs/lz4cli.c	2017-03-21 10:16:21.459614400 +0200
@@ -244,6 +244,7 @@ static const char* lastNameFromPath(cons
 {
     const char* name = strrchr(path, '/');
     if (name==NULL) name = strrchr(path, '\\');   /* windows */
+    else if (strchr(name, '\\')) name = strchr(name, '\\'); /* mixed */
     if (name==NULL) return path;
     return name+1;
 }
@@ -297,7 +298,7 @@ int main(int argc, const char** argv)
     LZ4IO_setOverwrite(0);
 
     /* lz4cat predefined behavior */
-    if (!strcmp(exeName, LZ4CAT)) {
+    if (!strncmp(exeName, LZ4CAT, strlen(LZ4CAT))) {
         mode = om_decompress;
         LZ4IO_setOverwrite(1);
         LZ4IO_setRemoveSrcFile(0);
@@ -306,7 +307,7 @@ int main(int argc, const char** argv)
         displayLevel=1;
         multiple_inputs=1;
     }
-    if (!strcmp(exeName, UNLZ4)) { mode = om_decompress; }
+    if (!strncmp(exeName, UNLZ4, strlen(UNLZ4))) { mode = om_decompress; }
 
     /* command switches */
     for(i=1; i<argc; i++) {
--- programs/bench.c~0	2017-01-03 07:09:52.000000000 +0200
+++ programs/bench.c	2017-03-19 12:21:30.027467400 +0200
@@ -391,6 +391,7 @@ static void BMK_benchCLevel(void* srcBuf
 
     const char* pch = strrchr(displayName, '\\'); /* Windows */
     if (!pch) pch = strrchr(displayName, '/'); /* Linux */
+    else if (strchr(pch, '/')) pch = strchr(pch, '/'); /* mixed */
     if (pch) displayName = pch+1;
 
     SET_HIGH_PRIORITY;
--- programs/platform.h~0	2017-01-03 07:09:52.000000000 +0200
+++ programs/platform.h	2017-03-21 10:05:42.834684800 +0200
@@ -106,9 +106,14 @@
 #if (defined(__linux__) && (PLATFORM_POSIX_VERSION >= 1)) || (PLATFORM_POSIX_VERSION >= 200112L) || defined(__DJGPP__)
 #  include <unistd.h>   /* isatty */
 #  define IS_CONSOLE(stdStream) isatty(fileno(stdStream))
-#elif defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__)
+#elif defined(MSDOS) || defined(OS2) || defined(__CYGWIN__)
 #  include <io.h>       /* _isatty */
 #  define IS_CONSOLE(stdStream) _isatty(_fileno(stdStream))
+#elif defined(WIN32) || defined(_WIN32)
+#  include <io.h>       /* _isatty */
+#  include <windows.h> /* DeviceIoControl, HANDLE, FSCTL_SET_SPARSE */
+#  define IS_CONSOLE(stdStream)			\
+  !(!_isatty(_fileno(stdStream)) || ({DWORD dummy; !GetConsoleMode((HANDLE)_get_osfhandle(_fileno(stdStream)),&dummy);}))
 #else
 #  define IS_CONSOLE(stdStream) 0
 #endif
