X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/67b1a15a996af4649724d67acb7465ba6703bcbc..6690f2cc3b29bab6a01f4e9a77306b659418b05e:/Makefile diff --git a/Makefile b/Makefile index 52a730c..4df8c56 100644 --- a/Makefile +++ b/Makefile @@ -64,25 +64,45 @@ _force: ###-------------------------------------------------------------------------- ### 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)' | \ + tail -n1) +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 && \ @@ -90,9 +110,9 @@ $(addprefix $(EMACSLIB)/, $(LOCAL_ELISP)): $(EMACSLIB)/%: el/% 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 \ @@ -109,7 +129,9 @@ $(addprefix $(EMACSLIB)/, $(REMOTE_ELISP)): $(EMACSLIB)/%: 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. @@ -129,14 +151,26 @@ SCRIPTLINKS += update-buildable-branch ## Shells. DOTLINKS += .profile .shell-rc .shell-logout -DOTLINKS += .shrc .rcrc -DOTLINKS += .zprofile .zshrc .zshenv -DOTLINKS += .bash_profile .bash_completion .bashrc .inputrc +DOTLINKS += .shrc +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 + +## The Plan 9 `rc' shell. This needs special hacking, because the Linux port +## and Plan 9 From User Space have incompatible syntax. +DOTLINKS += lib/profile +lib/profile_SRC = rcrc +all:: $(HOME)/.rcrc +$(HOME)/.rcrc: dot/rcrc + $(call v_tag,SED)sed 's/; if not/else/' $< >$@.new && mv $@.new $@ ## Git. DOTSUBST += .gitconfig +SCRIPTLINKS += git-copyright-dates DOTLINKS += .cgrc .tigrc .gitconfig_SUBSTS = \ $(call substvar,releasekey,$(call mdw-conf,release-key,481334C2)) @@ -186,6 +220,8 @@ DOTLINKS += .lesskey .infokey .sqliterc 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 @@ -243,11 +279,17 @@ DOTLINKS += .config/gtk-3.0/settings.ini 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) $(HOME)/.Xdefaults: $(HOME)/.mdw.conf +ifeq ($(shell case $${DISPLAY-nil} in (:[0-9]*) echo t ;; (*) echo nil ;; esac),t) +dotfile-hook/.Xdefaults = \ + $(call v_tag,XRDB)xrdb -override $< +endif + endif ###-------------------------------------------------------------------------- @@ -255,7 +297,7 @@ endif 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)) @@ -265,6 +307,7 @@ $(addprefix $(HOME)/, $(subst %,\%,$(DOTLINKS))): $(HOME)/%: \ rm -f $@.new && \ ln -s $(call dotfile-source,$*) $@.new && \ mv $@.new $@ + $(dotfile-hook/$*) ## Hack with the C preprocessor. all:: $(addprefix $(HOME)/, $(DOTCPP)) @@ -274,6 +317,7 @@ $(addprefix $(HOME)/, $(subst %,\%,$(DOTCPP))): $(HOME)/%: \ rm -f $@.new && \ cpp -P -o$@.new $($*_DEFS) $< && \ mv $@.new $@ + $(dotfile-hook/$*) ## Hack by making simple substitutions. substvar = -e $(call quote,s@$1@$2g) @@ -281,7 +325,7 @@ SUBSTS += $(call substvar,home,$(HOME)) 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\ @@ -289,11 +333,25 @@ $(relax)### generated by $(HERE)/Makefile; do not edit!" \ $(SUBSTS) $($*_SUBSTS) \ $(call dotfile-source,$*,.in) >$@.new && \ mv $@.new $@ + $(dotfile-hook/$*) ###-------------------------------------------------------------------------- ### Processing script links. script-source = $(HERE)/bin/$(or $($1_SRC), $1) + +ifeq ($(prefix-shebang-p),t) +all:: $(addprefix $(HOME)/bin/, $(SCRIPTLINKS)) +$(addprefix $(HOME)/bin/, $(SCRIPTLINKS)): $(HOME)/bin/%: \ + $$(call script-source,$$*) Makefile + $(call v_tag,SHEBANG)mkdir -p $(dir $@) && \ + rm -f $@.new && \ + sed "1s\(#! *\)/\1$(SHEBANG_PREFIX)/" \ + $(call script-source,$*) >$@.new && \ + chmod --reference=$(call script-source,$*) $@.new && \ + mv $@.new $@ + $(script-hook/$*) +else scriptlink-ok-p = \ $(call symlink-ok-p,$(HOME)/bin/$1,$(call script-source,$1)) all:: $(addprefix $(HOME)/bin/, $(SCRIPTLINKS)) @@ -303,6 +361,8 @@ $(addprefix $(HOME)/bin/, $(SCRIPTLINKS)): $(HOME)/bin/%: \ rm -f $@.new && \ ln -s $(call script-source,$*) $@.new && \ mv $@.new $@ + $(script-hook/$*) +endif all:: $(addprefix $(HOME)/bin/, $(SCRIPTLINKS)) @@ -359,6 +419,7 @@ $(foreach p, $(PACKAGES), $(call pkg-stamp,$p,install)): \ $(call v_tag,INSTALL)cd $(dir $@) && \ $(MAKE) $($*_MAKEFLAGS) install >>buildlog 2>&1 && \ touch install-stamp + $(package-hook/$*) all:: $(foreach p, $(PACKAGES), $(DEP_$p)) $(foreach p, $(PACKAGES), $(eval _pkg.$p: $(call pkg-stamp,$p,install)))