###--------------------------------------------------------------------------
### Emacs.
+ifneq ($(EMACS),nil)
+
EMACSLIB = $(HOME)/lib/emacs
-ELISP += dot-emacs.el
-ELISP += make-regexp.el ew-hols.el
-ELISP += mdw-gnus-patch.el
-ELISP += mdw-multiple-cursors.el
-ELISP += git.el git-blame.el vc-git.el stgit.el quilt.el
-ELISP += bracketed-paste.el
+EMACS_VERSION := $(shell $(EMACS) 2>&1 -Q --batch --eval \
+ '(message "%s %s" emacs-major-version emacs-minor-version)')
+emacs-version-p = $(shell set -- $(EMACS_VERSION); \
+ if [ $$1 -gt $1 ] || ([ $$1 -eq $1 ] && [ $$2 -ge $2 ]); then \
+ echo t; \
+ fi)
+
+ELISP += make-regexp ew-hols
+ELISP += mdw-gnus-patch
+ELISP += mdw-multiple-cursors
+ELISP += git git-blame vc-git stgit quilt
+
+ifeq ($(call emacs-version-p,24,3),t)
+ELISP += bracketed-paste
+endif
+
+ELISP += dot-emacs
+dot-emacs_DEPS = make-regexp
SCRIPTLINKS += emacsclient-hack movemail-hack sendmail-hack
SCRIPTLINKS += aspell-hack emerge-hack
-%.elc: %.el
- $(call v_tag,EMACS)$(EMACS) -L el/ -L $(EMACSLIB) \
+%.elc: %.el $$(foreach e, $$($$*_DEPS), $$(DEP_$$e))
+ $(call v_tag,EMACS)if ! $(EMACS) >$*.build-log 2>&1 \
+ -L el/ -L $(EMACSLIB) \
--batch --no-site-file \
- --eval '(byte-compile-file "$<")'
-
-LOCAL_ELISP = $(filter $(notdir $(wildcard el/*.el)), $(ELISP))
-$(foreach e, $(LOCAL_ELISP), $(eval DEP_$e = $(EMACSLIB)/$(e:.el=.elc)))
+ --eval '(byte-compile-file "$<")'; then \
+ cat $*.build-log; exit 2; \
+ fi
+
+LOCAL_ELISP = $(filter $(notdir $(wildcard el/*.el)), \
+ $(addsuffix .el, $(ELISP)))
+$(foreach e, $(LOCAL_ELISP), \
+ $(eval DEP_$(basename $e) = $(EMACSLIB)/$(e:.el=.elc)))
$(addprefix $(EMACSLIB)/, $(LOCAL_ELISP)): $(EMACSLIB)/%: el/%
$(call v_tag,SYMINK)mkdir -p $(EMACSLIB) && \
rm -f $@.new && \
mv $@.new $@
REMOTE_ELISP = $(filter-out $(notdir $(wildcard el/*.el)), \
- $(ELISP))
+ $(addsuffix .el, $(ELISP)))
$(foreach e, $(REMOTE_ELISP), \
- $(eval DEP_$e = $(if $(shell \
+ $(eval DEP_$(basename $e) = $(if $(shell \
if $(EMACS) >/dev/null 2>&1 --no-site-file -q --batch \
--eval ' \
(progn \
DOTLINKS += .emacs .emacs-calc .vm .gnus.el .ercrc.el
all:: $(foreach e, $(ELISP), $(DEP_$e))
-$(foreach e, $(ELISP), $(eval _emacs.$(e:.el=): $(EMACSLIB)/$(e:.el=.elc)))
+$(foreach e, $(ELISP), $(eval _emacs.$e: $(EMACSLIB)/$e.elc))
+
+endif
###--------------------------------------------------------------------------
### Other simpler things.
## Shells.
DOTLINKS += .profile .shell-rc .shell-logout
DOTLINKS += .shrc .rcrc
-DOTLINKS += .zprofile .zshrc .zshenv
-DOTLINKS += .bash_profile .bash_completion .bashrc .inputrc
+DOTLINKS += .zprofile .zshrc .zlogout .zshenv
+DOTLINKS += .bash_profile .bash_completion .bash_logout
+DOTLINKS += .bashrc .inputrc
.bash_profile_SRC = bash-profile
.bash_completion_SRC = bash-completion
+.bash_logout_SRC = shell-logout
+.zlogout_SRC = shell-logout
## Git.
DOTSUBST += .gitconfig
+SCRIPTLINKS += git-copyright-dates
DOTLINKS += .cgrc .tigrc
.gitconfig_SUBSTS = \
$(call substvar,releasekey,$(call mdw-conf,release-key,481334C2))
DOTLINKS += .gdbinit .toprc .aspell.conf
DOTLINKS += .dircolors .colordiffrc .screenrc .tmux.conf
DOTLINKS += .cvsrc .indent.pro .ditz-config
+DOTLINKS += .lftp/rc
+.lftp/rc_SRC = lftp-rc
DOTSUBST += .mykermrc
SCRIPTLINKS += lesspipe.sh
SCRIPTLINKS += xinitcmd lock-screen xshutdown
SCRIPTLINKS += un-backslashify-selection
SCRIPTLINKS += xpra-start-xdummy
+SCRIPTLINKS += play-rawk
DOTCPP += .Xdefaults
Xdefaults_DEFS = -DEMACSWD=$(call mdw-conf,emacs-width,77)
dotfile-source = $(HERE)/dot/$(or $($1_SRC), $(1:.%=%)$2)
-## Easist: just make symlinks.
+## Easiest: just make symlinks.
dotlink-ok-p = \
$(call symlink-ok-p,$(HOME)/$1,$(call dotfile-source,$1))
all:: $(addprefix $(HOME)/, $(DOTLINKS))
SUBSTS += $(call substvar,profile,$(HERE))
all:: $(addprefix $(HOME)/, $(DOTSUBST))
$(addprefix $(HOME)/, $(subst %,\%,$(DOTSUBST))): $(HOME)/%: \
- $$(call dotsubst-source,$$*,.in) Makefile
+ $$(call dotfile-source,$$*,.in) Makefile
$(call v_tag,SUBST)mkdir -p $(dir $@) && \
rm -f $@.new && \
sed -e "1i\