BASE_PKG = tacc-pkg.el DEFINE_PACKAGE = $(shell sed 's/"/\\"/g' $(BASE_PKG)) NAME_SCRIPT = "(princ (cadr '$(DEFINE_PACKAGE)))" VERSION_SCRIPT = "(princ (caddr '$(DEFINE_PACKAGE)))" EMACS := $(shell command -v emacs 2> /dev/null) ifndef EMACS EMACS = $(error "emacs installation not found in PATH") endif EMACS_BATCH = $(EMACS) --batch --eval NAME = $(shell $(EMACS_BATCH) $(NAME_SCRIPT)) MAIN_EL = $(NAME).el VERSION = $(shell $(EMACS_BATCH) $(VERSION_SCRIPT)) QUALIFIED_NAME = $(NAME)-$(VERSION) PACKAGE = $(QUALIFIED_NAME).tar SUPPLEMENTAL = chime.wav tick.wav tags-history SUPPLEMENTAL_NESTED = $(SUPPLEMENTAL:%=$(QUALIFIED_NAME)/%) INSTALL_SCRIPT = "(package-install-file \"./$(PACKAGE)\")" DELETE_SCRIPT = "(progn (package-initialize) (package-delete \"$(NAME)\"))" all: $(PACKAGE) .PHONY: all load-test install uninstall cleanup clean .SILENT: $(QUALIFIED_NAME): echo "Making package directory" mkdir $(QUALIFIED_NAME) $(QUALIFIED_NAME)/$(MAIN_EL) $(QUALIFIED_NAME)/$(BASE_PKG) $(SUPPLEMENTAL_NESTED): $(QUALIFIED_NAME)/%: % $(QUALIFIED_NAME) cp -v $< $(QUALIFIED_NAME) $(PACKAGE): $(SUPPLEMENTAL_NESTED) $(QUALIFIED_NAME)/$(BASE_PKG) $(QUALIFIED_NAME)/$(MAIN_EL) echo "Packing..." tar -cf $(PACKAGE) $(QUALIFIED_NAME) echo "Done. $(PACKAGE) is a portable emacs package" load-test: echo "Checking script correctness" $(EMACS) -q -nw --script $(MAIN_EL) install: $(PACKAGE) echo "Installing..." $(EMACS_BATCH) $(INSTALL_SCRIPT) echo "$(PACKAGE) installed." # There's no good uninstall? uninstall: echo "There is no good way to uninstall an emacs package from command line." echo "You need to run M-x package-delete $(NAME) from inside emacs." echo "Sorry :/" # Cleanup gets rid intermediates and clutter, never the target cleanup: rm -rfv $(QUALIFIED_NAME) rm -fv *~ # Clean leaves the source tree in it's base state clean: cleanup rm -fv $(PACKAGE)