Makefile
changeset 1283 9765c6674f79
parent 1274 cd0b674eeb5c
child 1285 8e2c4332223d
--- a/Makefile	Tue Apr 14 23:20:00 2015 +0300
+++ b/Makefile	Tue Apr 14 23:56:55 2015 +0300
@@ -42,11 +42,15 @@
 endif
 
 ################################################################
-# Installation directories.
+# Installation directories and files.
 
 emacsdir := $(HOME)/.emacs.d
 mylispdir := $(emacsdir)/my
 
+# Compatibility version.
+COMPAT_VER := 1
+COMPAT_FILE := $(emacsdir)/.emacs-ver
+
 ################################################################
 # Build tool definition/switches.
 
@@ -80,8 +84,24 @@
 ################################################################
 # Install/uninstall targets.
 
+.PHONY: check-install-comapt
+check-install-comapt:
+	[ -f $(COMPAT_FILE) ] || { echo $(COMPAT_FILE) missing, run '"make upgrade"' first; false; }
+	read ver <$(COMPAT_FILE); if [ "$$ver" -ne $(COMPAT_VER) ]; then echo "*** "Run '"make upgrade"' first" ***"; exit 1; fi
+
+.PHONY: check-upgrade-comapt
+check-upgrade-comapt:
+	\
+if [ -f $(COMPAT_FILE) ]; then \
+  read ver <$(COMPAT_FILE); \
+  if [ "$$ver" -gt $(COMPAT_VER) ]; then \
+    echo "*** "Project is too old, downgrade is not possible..." ***"; \
+    exit 1; \
+  fi; \
+fi
+
 .PHONY: upgrade
-upgrade:
+upgrade: check-upgrade-comapt
 	\
 mkdir -p $(mylispdir); \
 rm -f $(emacsdir)/autoload-my.el; \
@@ -95,6 +115,7 @@
   fn=$${f##*/}; \
   [ -f $(emacsdir)/$$fn ] && mv $$f $(emacsdir)/$$fn.3 || mv $$f $(emacsdir); \
 done; \
+echo $(COMPAT_VER) >$(COMPAT_FILE); \
 make install
 
 .PHONY: install-all
@@ -107,7 +128,7 @@
 endef
 
 .PHONY: install
-install:
+install: check-install-comapt
 	mkdir -p $(mylispdir)
 	$(cleanup_mylispdir)
 	for file in .emacs-pre .emacs-post; do \