Use standard DESTDIR/PREFIX and some Makefile cleanup
diff --git a/Makefile b/Makefile
index 1ea21bb..1378b0f 100644
--- a/Makefile
+++ b/Makefile
@@ -4,12 +4,21 @@
 # NOTE: at the moment this Makefile is for *nix only.
 
 CC = $(CROSS)gcc
-AR?=ar
-RANLIB?=ranlib
+AR ?= ar
+RANLIB ?= ranlib
+STRIP ?= strip
 
 CFLAGS  += -fPIC -O3 -Wall -Iinclude
 LDFLAGS += -shared
 
+PREFIX ?= /usr
+DESTDIR ?=
+INCDIR = $(DESTDIR)$(PREFIX)/include
+LIBDIR = $(DESTDIR)$(PREFIX)/lib
+
+INSTALL_DATA ?= install -m0644
+INSTALL_LIBRARY ?= install -m0755
+
 LIBNAME = capstone
 LIBOBJ =
 LIBOBJ += cs.o asprintf.o utils.o SStream.o MCInstrDesc.o MCRegisterInfo.o
@@ -19,22 +28,21 @@
 LIBOBJ += arch/AArch64/AArch64BaseInfo.o arch/AArch64/AArch64Disassembler.o arch/AArch64/AArch64InstPrinter.o arch/AArch64/mapping.o
 LIBOBJ += MCInst.o
 
-
-# by default, lib extension is .so
-EXT = so
-
 # OSX is the exception
 UNAME_S := $(shell uname -s)
 ifeq ($(UNAME_S),Darwin)
 EXT = dylib
+else
+# by default, lib extension is .so
+EXT = so
 endif
 
 
-.PHONY: all clean lib windows win_lib install uninstall
+.PHONY: all clean lib archive windows win_lib install uninstall
 
-all: lib
-	make -C tests
-	install -m0644 lib$(LIBNAME).$(EXT) tests
+all: lib archive
+	$(MAKE) -C tests
+	$(INSTALL_DATA) lib$(LIBNAME).$(EXT) tests
 
 lib: $(LIBOBJ)
 	$(CC) $(LDFLAGS) $(LIBOBJ) -o lib$(LIBNAME).$(EXT)
@@ -46,38 +54,39 @@
 	$(RANLIB) lib$(LIBNAME).a
 
 install: archive lib
-	install -m0644 lib$(LIBNAME).$(EXT) /usr/lib
-	install -m0644 lib$(LIBNAME).a /usr/lib
-	mkdir -p /usr/include/$(LIBNAME)
-	install -m0644 include/capstone.h /usr/include/$(LIBNAME)
-	install -m0644 include/x86.h /usr/include/$(LIBNAME)
-	install -m0644 include/arm.h /usr/include/$(LIBNAME)
-	install -m0644 include/arm64.h /usr/include/$(LIBNAME)
-	install -m0644 include/mips.h /usr/include/$(LIBNAME)
+	mkdir -p $(LIBDIR)
+	$(INSTALL_LIBRARY) lib$(LIBNAME).$(EXT) $(LIBDIR)
+	$(INSTALL_DATA) lib$(LIBNAME).a $(LIBDIR)
+	mkdir -p $(INCDIR)/$(LIBNAME)
+	$(INSTALL_DATA) include/capstone.h $(INCDIR)/$(LIBNAME)
+	$(INSTALL_DATA) include/x86.h $(INCDIR)/$(LIBNAME)
+	$(INSTALL_DATA) include/arm.h $(INCDIR)/$(LIBNAME)
+	$(INSTALL_DATA) include/arm64.h $(INCDIR)/$(LIBNAME)
+	$(INSTALL_DATA) include/mips.h $(INCDIR)/$(LIBNAME)
 
 uninstall:
-	rm -rf /usr/include/$(LIBNAME)
-	rm -rf /usr/lib/lib$(LIBNAME).$(EXT)
+	rm -rf $(INCDIR)/$(LIBNAME)
+	rm -f $(LIBDIR)/lib$(LIBNAME).$(EXT)
+	rm -f $(LIBDIR)/lib$(LIBNAME).a
 
 # Mingw32
 windows: win_lib
-	install -m0644 $(LIBNAME).dll tests
-	make -C tests windows
+	$(INSTALL_DATA) $(LIBNAME).dll tests
+	$(MAKE) -C tests windows
 
 # Mingw32
 win_lib: $(LIBOBJ)
 	$(CC) $(LDFLAGS) $(LIBOBJ) -o $(LIBNAME).dll
-	strip $(LIBNAME).dll
+	$(STRIP) $(LIBNAME).dll
 
 clean:
 	rm -f $(LIBOBJ) lib$(LIBNAME).* $(LIBNAME).dll
-	#cd bindings/ruby; make clean; rm -rf Makefile
-	cd bindings/python; make clean
-	cd bindings/csharp; make clean
-	cd bindings/java; make clean
-	cd bindings/ocaml; make clean
-	make -C tests clean
+	#cd bindings/ruby; $(MAKE) clean; rm -rf Makefile
+	$(MAKE) -C bindings/python clean
+	$(MAKE) -C bindings/csharp clean
+	$(MAKE) -C bindings/java clean
+	$(MAKE) -C bindings/ocaml clean
+	$(MAKE) -C tests clean
 
 .c.o:
 	${CC} ${CFLAGS} -c $< -o $@
-