From 67b1a15a996af4649724d67acb7465ba6703bcbc Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Sun, 13 Aug 2017 01:13:54 +0100 Subject: [PATCH] Use a proper makefile rather than the `setup' script. And there was rejoicing. Surprisingly, the makefile is slightly shorter than the script used to be, but all of the functionality is there. Things are, unsurprisingly, organized a little differently. I can gather definitions together thematically, as opposed to grouping according to the technicalities of installation. The path hacks -- well, only the ssh one, because there aren't any others -- have moved under bin/ now, because that means I can use the same machinery as the other script links. The makefile is also easier to tweak its behaviour to cope with strange situations. So that's nice. --- .gitignore | 1 + Makefile | 366 ++++++++++++++++++++++++++++++++++++++++++++++ {hacks => bin/hacks}/ssh | 0 el/Makefile | 9 -- setup | 369 ----------------------------------------------- 5 files changed, 367 insertions(+), 378 deletions(-) create mode 100644 .gitignore create mode 100644 Makefile rename {hacks => bin/hacks}/ssh (100%) delete mode 100644 el/Makefile delete mode 100755 setup diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ad53eb8 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/local.mk diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..52a730c --- /dev/null +++ b/Makefile @@ -0,0 +1,366 @@ +## -*-makefile-*- + +all:: +.SECONDEXPANSION: #sorry + +###-------------------------------------------------------------------------- +### Utilities. + +## +quote = '$(subst ','\'',$1)'#' + +## Suss out how to print stuff. +print = printf "%s" $(call quote,$1) + +## Looking configuration things up. +mdw-conf = $(shell bin/mdw-conf "$1" "$2") + +## Checking symlink targets. +symlink-ok-p = $(shell \ + case $$(readlink 2>/dev/null $1) in ($2) echo t ;; esac) + +## Silent rules machinery. +V = 0 +v_tag = $(call v_tag_$V,$1,$2) +v_tag_0 = @printf " %-8s %s\n" "$1" $(call quote,$@); +V_AT = $(V_AT_$V) +V_AT_0 = @ + +## Hack. +relax = + +###-------------------------------------------------------------------------- +### Configuration. + +## Figure out where I am. +HERE = $(shell pwd) + +## Decide on how to fetch things from URLs. +ifeq ($(shell (curl >/dev/null 2>&1 --version || [ $$? -eq 2 ]) && echo t),t) + get-url = curl -fs -o $1 $2 +else + get-url = wget -q -O $1 $2 +endif + +## Which Emacs should I use? +EMACS := $(shell \ + emacs=nil; \ + for i in emacs24 emacs23 emacs22 emacs21 emacs; do \ + if type >/dev/null 2>&1 $$i; then echo $$i; break; fi; \ + done) + +## Whence to obtain externally hosted stuff. +REPO = https://ftp.distorted.org.uk/u/mdw/profile + +## Additional local configuration. +-include local.mk + +###-------------------------------------------------------------------------- +### Some utility rules. + +_force: +.PHONY: _force + +###-------------------------------------------------------------------------- +### Emacs. + +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 + +SCRIPTLINKS += emacsclient-hack movemail-hack sendmail-hack +SCRIPTLINKS += aspell-hack emerge-hack + +%.elc: %.el + $(call v_tag,EMACS)$(EMACS) -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))) +$(addprefix $(EMACSLIB)/, $(LOCAL_ELISP)): $(EMACSLIB)/%: el/% + $(call v_tag,SYMINK)mkdir -p $(EMACSLIB) && \ + rm -f $@.new && \ + ln -s $(HERE)/$< $@.new && \ + mv $@.new $@ + +REMOTE_ELISP = $(filter-out $(notdir $(wildcard el/*.el)), \ + $(ELISP)) +$(foreach e, $(REMOTE_ELISP), \ + $(eval DEP_$e = $(if $(shell \ + if $(EMACS) >/dev/null 2>&1 --no-site-file -q --batch \ + --eval ' \ + (progn \ + (kill-emacs (condition-case nil \ + (progn (load-library "$e") 0) \ + (error 1))))'; then \ + echo t; \ + fi),, $(EMACSLIB)/$(e:.el=.elc)))) +$(addprefix $(EMACSLIB)/, $(REMOTE_ELISP)): $(EMACSLIB)/%: + $(call v_tag,FETCH)mkdir -p $(EMACSLIB) && \ + $(call get-url,$@.new,$(REPO)/$*) && \ + mv $@.new $@ + +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))) + +###-------------------------------------------------------------------------- +### Other simpler things. + +$(HOME)/.mdw.conf: + $(call v_tag,COPY)cp mdw.conf $@.new && mv $@.new $@ + +## Utility packages. +PACKAGES += mlib checkpath +mlib_CHECK = crc-mktab +checkpath_CHECK = tmpdir +checkpath_DEPS = mlib + +## Packaging machinery. +SCRIPTLINKS += mdw-build mdw-sbuild mdw-sbuild-server +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 +.bash_profile_SRC = bash-profile +.bash_completion_SRC = bash-completion + +## Git. +DOTSUBST += .gitconfig +DOTLINKS += .cgrc .tigrc +.gitconfig_SUBSTS = \ + $(call substvar,releasekey,$(call mdw-conf,release-key,481334C2)) +$(HOME)/.gitconfig: $(HOME)/.mdw.conf + +## PulseAudio. +DOTLINKS += .pulse/daemon.conf +DOTSUBST += .pulse/default.pa +.pulse/daemon.conf_SRC = pulse-daemon.conf +.pulse/default.pa_SRC = pulse-default.pa.in + +## Other editors. +DOTLINKS += .vimrc .mg .zile + +## Mail. +DOTLINKS += .mailrc .signature .muttrc + +## Lisp. +DOTLINKS += .cmucl-init.lisp .sbclrc .clisprc.lisp .eclrc +.cmucl-init.lisp_SRC = lisp-init.lisp +.sbclrc_SRC = lisp-init.lisp +.clisprc.lisp_SRC = lisp-init.lisp +.eclrc_SRC = lisp-init.lisp +DOTLINKS += .swank.lisp + +## IPython. +DOTLINKS += .ipython/profile_default/ipython_config.py +DOTLINKS += .ipython/profile_default/startup/50-key-bindings.py +.ipython/profile_default/ipython_config.py_SRC = ipython-config.py +.ipython/profile_default/startup/50-key-bindings.py_SRC = ipython-key-bindings.py + +## Other languages. +DOTLINKS += .guile +DOTLINKS += .tclshrc .wishrc +.tclshrc_SRC = tclshrc +.wishrc_SRC = tclshrc + +## Random scripts. +SCRIPTLINKS += mdw-editor mdw-pager +SCRIPTLINKS += mdw-conf +SCRIPTLINKS += svnwrap +SCRIPTLINKS += guest-console +SCRIPTLINKS += hyperspec + +## Random odds and ends. +DOTLINKS += .lesskey .infokey .sqliterc +DOTLINKS += .gdbinit .toprc .aspell.conf +DOTLINKS += .dircolors .colordiffrc .screenrc .tmux.conf +DOTLINKS += .cvsrc .indent.pro .ditz-config +DOTSUBST += .mykermrc +SCRIPTLINKS += lesspipe.sh + +SCRIPTLINKS += run-with-shell-env +SCRIPTLINKS += start-ssh-agent start-ssh-pageant +SCRIPTLINKS += add-ssh-keys +SCRIPTLINKS += hacks/ssh/ssh +hacks/ssh/ssh_SRC = hacks/ssh + +DOTLINKS += .w3m/config .elinks/elinks.conf +.w3m/config_SRC = w3m-config +.elinks/elinks.conf_SRC = elinks.conf + +DOTLINKS += .mc/ini .mc/panels.ini +.mc/ini_SRC = mc-ini +.mc/panels.ini_SRC = mc-panels.ini + +DOTLINKS += .parallel/config +.parallel/config_SRC = parallel-config + +###-------------------------------------------------------------------------- +### X11 configuration. + +ifeq ($X,t) + +PACKAGES += xtoys +xtoys_CHECK = xatom +xtoys_DEPS = mlib + +DOTLINKS += .xinitrc .xsession .xmodmap .vncrc .vncsession +DOTLINKS += .fonts.conf +DOTLINKS += .stalonetrayrc + +DOTLINKS += .putty/sessions/Default%20Settings +.putty/sessions/Default%20Settings_SRC = putty-defaults + +DOTLINKS += .config/gnome-session/sessions/mdw.session +.config/gnome-session/sessions/mdw.session_SRC = mdw.session + +DOTLINKS += .Eterm/themes/Eterm/theme.cfg +DOTLINKS += .enlightenment/keybindings.cfg +DOTLINKS += .enlightenment-vnc/keybindings.cfg +DOTLINKS += .e16/bindings.cfg +.Eterm/themes/Eterm/theme.cfg_SRC = eterm-theme.cfg +.enlightenment/keybindings.cfg_SRC = e-keybindings.cfg +.enlightenment-vnc/keybindings.cfg_SRC = evnc-keybindings.cfg +.e16/bindings.cfg_SRC = e16-bindings + +DOTLINKS += .gtkrc-2.0 +DOTLINKS += .config/gtk-3.0/gtk.css +DOTLINKS += .config/gtk-3.0/settings.ini +.config/gtk-3.0/gtk.css_SRC = gtk3.css +.config/gtk-3.0/settings.ini_SRC = gtk3-settings.ini + +SCRIPTLINKS += xinitcmd lock-screen xshutdown +SCRIPTLINKS += un-backslashify-selection +SCRIPTLINKS += xpra-start-xdummy + +DOTCPP += .Xdefaults +Xdefaults_DEFS = -DEMACSWD=$(call mdw-conf,emacs-width,77) +$(HOME)/.Xdefaults: $(HOME)/.mdw.conf + +endif + +###-------------------------------------------------------------------------- +### Processing dotfiles. + +dotfile-source = $(HERE)/dot/$(or $($1_SRC), $(1:.%=%)$2) + +## Easist: just make symlinks. +dotlink-ok-p = \ + $(call symlink-ok-p,$(HOME)/$1,$(call dotfile-source,$1)) +all:: $(addprefix $(HOME)/, $(DOTLINKS)) +$(addprefix $(HOME)/, $(subst %,\%,$(DOTLINKS))): $(HOME)/%: \ + $$(if $$(call dotlink-ok-p,$$*),,_force) + $(call v_tag,SYMLINK)mkdir -p $(dir $@) && \ + rm -f $@.new && \ + ln -s $(call dotfile-source,$*) $@.new && \ + mv $@.new $@ + +## Hack with the C preprocessor. +all:: $(addprefix $(HOME)/, $(DOTCPP)) +$(addprefix $(HOME)/, $(subst %,\%,$(DOTCPP))): $(HOME)/%: \ + $$(call dotfile-source,$$*) Makefile + $(call v_tag,CPP)mkdir -p $(dir $@) && \ + rm -f $@.new && \ + cpp -P -o$@.new $($*_DEFS) $< && \ + mv $@.new $@ + +## Hack by making simple substitutions. +substvar = -e $(call quote,s@$1@$2g) +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 v_tag,SUBST)mkdir -p $(dir $@) && \ + rm -f $@.new && \ + sed -e "1i\ +$(relax)### generated by $(HERE)/Makefile; do not edit!" \ + $(SUBSTS) $($*_SUBSTS) \ + $(call dotfile-source,$*,.in) >$@.new && \ + mv $@.new $@ + +###-------------------------------------------------------------------------- +### Processing script links. + +script-source = $(HERE)/bin/$(or $($1_SRC), $1) +scriptlink-ok-p = \ + $(call symlink-ok-p,$(HOME)/bin/$1,$(call script-source,$1)) +all:: $(addprefix $(HOME)/bin/, $(SCRIPTLINKS)) +$(addprefix $(HOME)/bin/, $(SCRIPTLINKS)): $(HOME)/bin/%: \ + $$(if $$(call scriptlink-ok-p,$$*),,_force) + $(call v_tag,SYMLINK)mkdir -p $(dir $@) && \ + rm -f $@.new && \ + ln -s $(call script-source,$*) $@.new && \ + mv $@.new $@ + +all:: $(addprefix $(HOME)/bin/, $(SCRIPTLINKS)) + +###-------------------------------------------------------------------------- +### Building packages from source tarballs. + +SRCDIR = $(HOME)/src/profile + +pkg-builddir = $(SRCDIR)/$1/build +pkg-stamp = $(call pkg-builddir,$1)/$2-stamp + +$(foreach p, $(PACKAGES), $(eval DEP_$p = $(if $(shell \ + if $($p_CHECK) >/dev/null 2>&1 --version; then echo t; fi),, \ + $(call pkg-stamp,$p,install)))) + +$(PACKAGES:%=$(SRCDIR)/%.tar.gz): $(SRCDIR)/%.tar.gz: + $(call v_tag,FETCH)mkdir -p $(SRCDIR) && \ + rm -f $@.new && \ + $(call get-url,$@.new,$(REPO)/$*.tar.gz) && \ + mv $@.new $@ + +$(foreach p, $(PACKAGES), $(call pkg-stamp,$p,unpack)): \ + $(call pkg-stamp,%,unpack): $(SRCDIR)/%.tar.gz + $(call v_tag,EXTRACT)rm -rf $(SRCDIR)/$* && \ + mkdir $(SRCDIR)/$*.tmp-unpack && \ + cd $(SRCDIR)/$*.tmp-unpack && \ + gzip -cd ../$*.tar.gz | tar xf - && \ + mv * ../$* && \ + cd .. && \ + rmdir $*.tmp-unpack && \ + mkdir $*/build && \ + touch $*/build/unpack-stamp + +$(foreach p, $(PACKAGES), $(call pkg-stamp,$p,configure)): \ + $(call pkg-stamp,%,configure): \ + $(call pkg-stamp,%,unpack) \ + $$(foreach p, $$($$*_DEPS), $$(DEP_$$p)) + $(call v_tag,CONFIG)cd $(dir $@) && \ + ../configure --prefix=$(HOME) \ + PKG_CONFIG_PATH=$(HOME)/lib/pkgconfig \ + $($*_CONFIG) >>buildlog 2>&1 && \ + touch configure-stamp + +$(foreach p, $(PACKAGES), $(call pkg-stamp,$p,build)): \ + $(call pkg-stamp,%,build): \ + $(call pkg-stamp,%,configure) + $(call v_tag,BUILD)cd $(dir $@) && \ + $(MAKE) $($*_MAKEFLAGS) >>buildlog 2>&1 && \ + touch build-stamp + +$(foreach p, $(PACKAGES), $(call pkg-stamp,$p,install)): \ + $(call pkg-stamp,%,install): \ + $(call pkg-stamp,%,build) + $(call v_tag,INSTALL)cd $(dir $@) && \ + $(MAKE) $($*_MAKEFLAGS) install >>buildlog 2>&1 && \ + touch install-stamp + +all:: $(foreach p, $(PACKAGES), $(DEP_$p)) +$(foreach p, $(PACKAGES), $(eval _pkg.$p: $(call pkg-stamp,$p,install))) + +###----- That's all, folks -------------------------------------------------- diff --git a/hacks/ssh b/bin/hacks/ssh similarity index 100% rename from hacks/ssh rename to bin/hacks/ssh diff --git a/el/Makefile b/el/Makefile deleted file mode 100644 index 6549fde..0000000 --- a/el/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -### Emacs configuration Makefile - -EMACS = emacs - -all: dot-emacs.elc - -.SUFFIXES: .el .elc -.el.elc: - $(EMACS) -L . --batch --no-site-file --eval '(byte-compile-file "$<")' diff --git a/setup b/setup deleted file mode 100755 index f7a0d9e..0000000 --- a/setup +++ /dev/null @@ -1,369 +0,0 @@ -#! /bin/bash - -set -e - -###-------------------------------------------------------------------------- -### Basic setup. - -umask 002 - -sub= -mkdir -p $HOME$sub - -: ${REPO=https://ftp.distorted.org.uk/pub/mdw/profile} - -export PATH=/usr/local/bin:$HOME$sub/bin:/usr/bin:/usr/ccs/bin:/bin - -###-------------------------------------------------------------------------- -### Sort out command line. - -xstuff= false= -while [ $# -gt 0 ]; do - case "$1" in - -x) xstuff=t;; - -n) false=false;; - --) shift; break;; - -*) echo >&2 "$0: bad option"; exit 1;; - *) break;; - esac - shift -done - -###-------------------------------------------------------------------------- -### Environment autoconfiguration. - -## Find out where I am -here=$(pwd) - -## Suss out how to print things -out=$(echo -n "foo"; echo "bar") -if [ "$out" = "foobar" ]; then - echon="echo -n" - echoc="" -else - echon="echo" - echoc='\c' -fi - -## Find out how to fetch things over the net -$echon "Finding URL fetcher:$echoc" -if curl >/dev/null 2>&1 --version || [ $? -eq 2 ]; then - GETURL="curl -fs -o" - echo " curl." -elif wget >/dev/null 2>&1 --version; then - GETURL="wget -q -O" - echo " wget." -else - echo " failed!" - echo >&2 "$0: failed to find URL fetcher" - exit 1 -fi - -###-------------------------------------------------------------------------- -### Create the necessary directories. - -echo "Creating directories..." -for i in bin lib/emacs src; do - $echon " $i:$echoc" - if [ -d $HOME$sub/$i ]; then - echo " already exists." - else - mkdir -p $HOME$sub/$i - echo " done." - fi -done -echo " all done." - -###-------------------------------------------------------------------------- -### Install some more complicated programs. - -echo "Installing packages..." -systems=" - mlib:crc-mktab - checkpath:tmpdir -" -[ "$xstuff" ] && systems="$systems - xtoys:xatom -" -for system in $systems; do - set -- $(echo $system | tr : ' ') - sys=$1 prog=$2 - $echon " $sys:$echoc" - if $false $prog >/dev/null 2>&1 --version; then - echo " already installed." - else - ( set -e - $echon " downloading$echoc" - cd $HOME$sub/src - rm -rf $sys.tar.gz $sys-$ver - $GETURL $sys.tar.gz $REPO/$sys.tar.gz - $echon " unpacking$echoc" - dir=$(gzip -cd $sys.tar.gz | tar tf - | head -1) - gzip -cd $sys.tar.gz | tar xf - - $echon " configuring$echoc" - cd $dir - mkdir build - cd build - ../configure \ - --prefix=$HOME$sub \ - PKG_CONFIG_PATH=$HOME$sub/lib/pkgconfig \ - >>buildlog 2>&1 - $echon " building$echoc" - make >>buildlog 2>&1 - $echon " installing$echoc" - make install >>buildlog 2>&1 - echo " done." - ) - fi -done -echo " all done." - -###-------------------------------------------------------------------------- -### Install global configuration. - -echo -n "Installing dotfile configuration:" -if [ -f $HOME$sub/.mdw.conf ]; then - echo " already installed." -else - cp mdw.conf $HOME$sub/.mdw.conf - echo " done." -fi - -## Symlink the various dotfiles into place -dotfiles=" - profile shell-rc shell-logout - bash-profile:.bash_profile - bash-completion:.bash_completion bashrc inputrc - shrc - zprofile zshrc zshenv - emacs emacs-calc vm gnus.el ercrc.el - vimrc mg zile lesskey infokey sqliterc - parallel-config:.parallel/config - ipython-config.py:.ipython/profile_default/ipython_config.py - ipython-key-bindings.py:.ipython/profile_default/startup/50-key-bindings.py - ditz-config - mailrc signature muttrc - cgrc tigrc - gdbinit - guile - rcrc - toprc - mc-ini:.mc/ini mc-panels.ini:.mc/panels.ini - pulse-daemon.conf:.pulse/daemon.conf - aspell.conf - tclshrc:.tclshrc tclshrc:.wishrc - lisp-init.lisp:.cmucl-init.lisp - lisp-init.lisp:.sbclrc - lisp-init.lisp:.clisprc.lisp - lisp-init.lisp:.eclrc - swank.lisp - mdw-build.conf:.config/mdw-build.conf - w3m-config:.w3m/config elinks.conf:.elinks/elinks.conf - dircolors colordiffrc screenrc tmux.conf cvsrc indent.pro" -[ "$xstuff" ] && dotfiles="$dotfiles - xinitrc xsession xmodmap vncrc vncsession - fonts.conf - stalonetrayrc - putty-defaults:.putty/sessions/Default%20Settings - mdw.session:.config/gnome-session/sessions/mdw.session - eterm-theme.cfg:.Eterm/themes/Eterm/theme.cfg - e-keybindings.cfg:.enlightenment/keybindings.cfg - evnc-keybindings.cfg:.enlightenment-vnc/keybindings.cfg - e16-bindings:.e16/bindings.cfg - gtkrc-2.0 - gtk3.css:.config/gtk-3.0/gtk.css - gtk3-settings.ini:.config/gtk-3.0/settings.ini" -echo "Installing dotfiles..." -for d in $dotfiles; do - target=.$d - case $d in - *:*) target=${d#*:} d=${d%%:*};; - esac - ft=$HOME$sub/$target - dir=${ft%/*} - mkdir -p $dir - ln -s $here/dot/$d $ft.new - mv $ft.new $ft - echo " $target" -done -echo " all done." - -## CPP-hack files which need it. -cppfiles="" -[ "$xstuff" ] && cppfiles="$cppfiles - Xdefaults" -echo "Hacking files with C preprocessor..." -defs="-DHOME=$HOME -DPROFILE=$here" -defs="$defs -DEMACSWD=$(bin/mdw-conf emacs-width 77)" -for c in $cppfiles; do - target=.$c - case $c in - *:*) target=${c#*:} c=${c%%:*};; - esac - ft=$HOME$sub/$target - dir=${ft%/*} - mkdir -p $dir - cpp -P $defs dot/$c -o $ft.new - mv $ft.new $ft - echo " $target" -done -echo " all done." - -## Substitute things which need substituting. -dotfilessubst=" - gitconfig - mykermrc - pulse-default.pa.in:.pulse/default.pa" -echo "Installing dotfiles with substitutions..." -for d in $dotfilessubst; do - case $d in - *:*) target=${d#*:} d=${d%%:*};; - *) target=.$d d=$d.in;; - esac - ft=$HOME$sub/$target - dir=${ft%/*} - mkdir -p $dir - sed " -1i\\ -### generated by $here/setup; do not edit!\\ - -/@home@/ s$HOMEg -/@profile@/ s$hereg -/@releasekey@/ s$(bin/mdw-conf releasekey 481334C2)g -" dot/$d >$ft.new - mv $ft.new $ft - echo " $target" -done -echo " all done." - -## Symlink backgrounds. -backgrounds=$(cd bg && echo *) -if [ "$xstuff" ]; then - echo "Installing backgrounds..." - for b in $backgrounds; do - for e in enlightenment e16; do - dir=$HOME$sub/.$e/backgrounds - t=$dir/$b - mkdir -p $dir - ln -s $here/bg/$b $t.new - mv $t.new $t - done - echo " $b" - done - echo " all done." -fi - -###-------------------------------------------------------------------------- -### Install useful scripts included in this package. - -scripts=" - mdw-editor - mdw-pager - mdw-conf - mdw-build mdw-sbuild mdw-sbuild-server - update-buildable-branch - emacsclient-hack - movemail-hack - sendmail-hack - aspell-hack - emerge-hack - lesspipe.sh - run-with-shell-env - start-ssh-agent - start-ssh-pageant - add-ssh-keys - svnwrap - guest-console - hyperspec" -[ "$xstuff" ] && scripts="$scripts - xinitcmd - un-backslashify-selection - lock-screen - xpra-start-xdummy - xshutdown" -echo "Installing scripts..." -mkdir -p $HOME$sub/bin -for s in $scripts; do - ft=$HOME$sub/bin/$s - ln -s $here/bin/$s $ft.new - mv $ft.new $ft - echo " $s" -done -echo " all done." - -hacks=" - ssh:ssh" -echo "Installing hacks..." -for h in $hacks; do - d=${h%%:*} h=${h#*:} - ft=$HOME$sub/bin/hacks/$d - mkdir -p $ft - ln -s $here/hacks/$h $ft/$h.new - mv $ft/$h.new $ft/$h - echo " $d:$h" -done -echo " all done." - -###-------------------------------------------------------------------------- -### Set up the Emacs config. - -$echon "Finding a suitable emacs:$echoc" -emacs=no -for i in emacs24 emacs23 emacs22 emacs21 emacs; do - if type -p >/dev/null $i; then - emacs=$i - break - fi -done -if [ $emacs = no ]; then - echo " failed." - emacs=: -else - echo " $emacs." -fi - -echo "Installing Emacs packages..." -emacspkg=" - make-regexp - ew-hols - mdw-gnus-patch - git git-blame vc-git stgit - mdw-multiple-cursors - quilt" -for elib in $emacspkg; do - $echon " $elib:$echoc" - if $false $emacs >/dev/null 2>&1 --no-site-file --batch --eval ' - (progn - (setq load-path (nconc load-path (list "~/lib/emacs"))) - (kill-emacs (condition-case nil - (progn (load-library "'"$elib"'") 0) - (error 1))))'; then - echo " already installed." - else - if [ -f el/$elib.el ]; then - cp el/$elib.el $HOME$sub/lib/emacs/$elib.el - else - $echon " downloading$echoc" - $GETURL $HOME$sub/lib/emacs/$elib.el $REPO/$elib.el - fi - $echon " compiling$echoc" - (cd $HOME$sub/lib/emacs; - $emacs >/dev/null 2>&1 --no-site-file --batch \ - --eval '(byte-compile-file "'"$elib.el"'")') - echo " done." - fi -done -echo " all done." - -$echon "Setting up Emacs configuration:$echoc" -$echon " linking$echoc" -for f in dot-emacs.el Makefile; do - set -- $(echo $link | tr : ' ') - ln -s $here/el/$f $HOME$sub/lib/emacs/$f.new - mv $HOME$sub/lib/emacs/$f.new $HOME$sub/lib/emacs/$f -done -$echon " compiling$echoc" -{ cd $HOME$sub/lib/emacs && make EMACS=$emacs; } >/dev/null 2>&1 -echo " done." - -###----- That's all, folks -------------------------------------------------- -- 2.11.0