legacy-dotfiles/dotfiles.mk
Tom Willemse ea413a5023 Add uninstall targets
These targets can be used to remove (parts of) the file installation.
They are also used by the cleanup targets to remove complete
submodules from the installation.
2013-04-14 23:58:45 +02:00

127 lines
3.9 KiB
Makefile

LOAD_PATH=. /usr/share/emacs/site-lisp $(HOME)/.emacs.d/site-lisp
EMACS=emacs $(addprefix -L ,$(LOAD_PATH))
MODE=644
FG_BLU=\033[0;34m
FG_YEL=\033[0;33m
FG_GRE=\033[0;32m
FG_RED=\033[0;31m
CLR_RE=\033[0;00m
compile = $(EMACS) -Q -batch -eval "(byte-compile-file \"$(1)\")"
define newer =
$(shell if [ "$(1)" -nt "$(DESTDIR)/$(1)" ]; then echo "newer"; fi)
endef
define older =
$(shell if [ "$(1)" -ot "$(DESTDIR)/$(1)" ]; then echo "older"; fi)
endef
check-objects=$(addprefix check-,$(objects))
install-objects=$(addprefix install-,$(objects))
reverse-objects=$(addprefix reverse-,$(objects))
cleanup-objects=$(addprefix cleanup-,$(objects))
uninstall-objects=$(addprefix uninstall-,$(objects))
check-modules=$(addprefix check-,$(modules))
install-modules=$(addprefix install-,$(modules))
reverse-modules=$(addprefix reverse-,$(modules))
cleanup-modules=$(addprefix cleanup-,$(modules))
uninstall-modules=$(addprefix uninstall-,$(modules))
.PHONY: all install cleanup check cleanup $(modules) \
$(install-objects) $(cleanup-objects) $(check-objects) \
$(install-modules) $(cleanup-modules) $(check-modules) \
$(reverse) $(reverse-objects) $(reverse-modules) \
$(uninstall-objects) $(uninstall-modules)
all: $(modules) $(objects)
ifeq ($(MAKEROOT),y)
check: $(check-modules) $(check-objects)
install: cleanup $(install-modules) $(install-objects) Makefile.old
reverse: $(reverse-modules) $(reverse-objects)
uninstall: $(uninstall-modules) $(uninstall-objects)
@rmdir --ignore-fail-on-non-empty $(DESTDIR) 2> /dev/null || true
ifeq ($(firstword $(MAKEFILE_LIST)),Makefile.old)
cleanup: $(cleanup-modules) $(cleanup-objects)
@rmdir --ignore-fail-on-non-empty $(DESTDIR) 2> /dev/null || true
else
cleanup: export NEWOBJS = $(objects)
cleanup: export NEWMODS = $(modules)
cleanup:
@$(MAKE) -s -f Makefile.old cleanup
Makefile.old: $(firstword $(MAKEFILE_LIST))
@cp "$^" "$@"
ifdef SUBDIR
DESTDIR:=$(DESTDIR)/$(SUBDIR)
endif
endif
else
check:
@$(MAKE) -s -C ../ check
install:
@$(MAKE) -s -C ../ install
reverse:
@$(MAKE) -s -C ../ reverse
cleanup:
@$(MAKE) -s -C ../ cleanup
uninstall:
@$(MAKE) -s -C ../ uninstall
endif
$(modules): %:
$(MAKE) -C $*
$(install-objects): install-%: %
@$(if $(call newer,$*), \
echo -e "$(FG_GRE)+ $(FG_YEL)$(MKDPREFIX)$* $(CLR_RE)to $(DESTDIR) as $(MODE)"; \
install -pDm $(MODE) "$*" "$(DESTDIR)/$*", \
$(if $(call older,$*) ,\
echo -e "$(FG_RED)- $(FG_YEL)$(MKDPREFIX)$*$(CLR_RE)"))
$(install-modules): install-%:
@$(MAKE) -s -C $* install MKDPREFIX=$(MKDPREFIX)$*/
$(reverse-objects): reverse-%:
@$(if $(call older,$*), \
echo -e "$(FG_GRE)+ $(FG_YEL)$(MKDPREFIX)$*$(CLR_RE)"; \
cp -a "$(DESTDIR)/$*" "$*", \
echo -e "$(FG_RED)- $(FG_YEL)$(MKDPREFIX)$*$(CLR_RE)")
$(reverse-modules): reverse-%:
@$(MAKE) -s -C $* reverse MKDPREFIX=$(MKDPREFIX)$*/
$(cleanup-objects): cleanup-%:
@$(if $(findstring $*,$(NEWOBJS)),, \
@$(if $(call older,$*), \
echo -e "$(FG_RED)+ $(FG_YEL)$(MKDPREFIX)$*$(CLR_RE)", \
echo -e "$(FG_GRE)- $(FG_YEL)$(MKDPREFIX)$*$(CLR_RE)"; \
unlink "$(DESTDIR)/$*" || true))
$(cleanup-modules): cleanup-%:
@$(if $(findstring $*,$(NEWMODS)), \
@$(MAKE) -C $* cleanup MKDPREFIX=$(MKDPREFIX)$*/, \
@$(MAKE) -C $* uninstall MKDPREFIX=$(MKDPREFIX)$*/)
$(check-objects): check-%:
@$(if $(call newer,$*), \
echo -e "$(FG_GRE)+ $(FG_YEL)$(MKDPREFIX)$*$(CLR_RE)", \
$(if $(call older,$*), \
echo -e "$(FG_RED)- $(FG_YEL)$(MKDPREFIX)$*$(CLR_RE)", \
echo -e "$(FG_BLU)= $(FG_YEL)$(MKDPREFIX)$*$(CLR_RE)"))
$(check-modules): check-%:
@$(MAKE) -s -C $* check MKDPREFIX=$(MKDPREFIX)$*/
$(uninstall-objects): uninstall-%:
@$(if $(call older,$*), \
echo -e "$(FG_RED)+ $(FG_YEL)$(MKDPREFIX)$*$(CLR_RE)", \
echo -e "$(FG_GRE)- $(FG_YEL)$(MKDPREFIX)$*$(CLR_RE)"; \
unlink "$(DESTDIR)/$*" || true)
$(uninstall-modules): uninstall-%:
@$(MAKE) -s -C $* uninstall MKDPREFIX=$(MKDPREFIX)$*/
$(filter %.elc,$(objects)): %.elc: %.el
$(call compile,$^)