Commit | Line | Data |
---|---|---|
f617db13 MW |
1 | #! /bin/sh |
2 | ||
3 | set -e | |
4 | ||
5 | umask 002 | |
6 | ||
4aa875e9 | 7 | sub= |
f617db13 MW |
8 | mkdir -p $HOME$sub |
9 | ||
10 | : ${REPO=http://guvnor.distorted.org.uk/ftp/pub/mdw} | |
11 | ||
12 | export PATH=/usr/local/bin:$HOME$sub/bin:/usr/bin:/usr/ccs/bin:/bin | |
13 | ||
14 | ### Sort out command line | |
15 | xstuff= false= | |
16 | while [ $# -gt 0 ]; do | |
17 | case "$1" in | |
18 | -x) xstuff=t;; | |
19 | -n) false=false;; | |
20 | --) shift; break;; | |
21 | -*) echo >&2 "$0: bad option"; exit 1;; | |
22 | *) break;; | |
23 | esac | |
24 | shift | |
25 | done | |
26 | ||
27 | ### Find out where I am | |
28 | here=$(pwd) | |
f617db13 MW |
29 | |
30 | ### Suss out how to print things | |
31 | out=$(echo -n "foo"; echo "bar") | |
32 | if [ "$out" = "foobar" ]; then | |
33 | echon="echo -n" | |
34 | echoc="" | |
35 | else | |
36 | echon="echo" | |
37 | echoc='\c' | |
38 | fi | |
39 | ||
40 | ### Create the necessary directories | |
41 | echo "Creating directories..." | |
42 | for i in bin lib/emacs src; do | |
43 | $echon " $i:$echoc" | |
44 | if [ -d $HOME$sub/$i ]; then | |
45 | echo " already exists." | |
46 | else | |
47 | mkdir -p $HOME$sub/$i | |
48 | echo " done." | |
49 | fi | |
50 | done | |
51 | echo " all done." | |
52 | ||
53 | ### Find out how to fetch things over the net | |
54 | $echon "Finding URL fetcher:$echoc" | |
55 | if curl >/dev/null 2>&1 --version || [ $? -eq 2 ]; then | |
56 | GETURL="curl -fs -o" | |
57 | echo " curl." | |
58 | elif wget >/dev/null 2>&1 --version; then | |
59 | GETURL="wget -q -O" | |
60 | echo " wget." | |
61 | else | |
62 | echo " failed!" | |
63 | echo >&2 "$0: failed to find URL fetcher" | |
64 | exit 1 | |
65 | fi | |
66 | ||
67 | ### Install necessary things | |
68 | echo "Installing useful scripts..." | |
69 | ||
ed2a32e1 | 70 | for script in lesspipe.sh start-ssh-agent svnwrap; do |
f617db13 MW |
71 | $echon " $script:$echoc" |
72 | found= | |
73 | for p in /bin /usr/bin /usr/local/bin $(echo $PATH | tr : ' '); do | |
74 | if $false [ -x $p/$script ]; then | |
75 | found=t | |
76 | break | |
77 | fi | |
78 | done | |
79 | if [ "$found" ]; then | |
80 | echo " already installed." | |
81 | else | |
82 | $echon " downloading$echoc" | |
83 | $GETURL $HOME$sub/bin/$script $REPO/$script | |
84 | chmod +x $HOME$sub/bin/$script | |
85 | echo " done." | |
86 | fi | |
87 | done | |
88 | ||
89 | echo " all done." | |
90 | ||
91 | ### Install some more complicated programs | |
92 | echo "Installing packages..." | |
93 | systems=" | |
94 | mLib:2.0.3:mLib-config | |
95 | chkpath:1.1.0:tmpdir | |
96 | " | |
97 | [ "$xstuff" ] && systems="$systems | |
98 | mgLib:1.1.0:mgLib-config | |
99 | xtoys:1.3.0:xscsize | |
100 | " | |
101 | for system in $systems; do | |
102 | set -- $(echo $system | tr : ' ') | |
103 | sys=$1 ver=$2 prog=$3 | |
104 | $echon " $sys:$echoc" | |
105 | if $false $prog >/dev/null 2>&1 --version; then | |
106 | echo " already installed." | |
107 | else | |
108 | ( set -e | |
109 | $echon " downloading$echoc" | |
110 | cd $HOME$sub/src | |
111 | rm -rf $sys-$ver.tar.gz $sys-$ver | |
112 | $GETURL $sys-$ver.tar.gz $REPO/$sys-$ver.tar.gz | |
113 | $echon " unpacking$echoc" | |
114 | gzip -cd $sys-$ver.tar.gz | tar xf - | |
115 | $echon " configuring$echoc" | |
116 | cd $sys-$ver | |
117 | mkdir build | |
118 | cd build | |
119 | ../configure --prefix=$HOME$sub >>buildlog 2>&1 | |
120 | $echon " building$echoc" | |
121 | make >>buildlog 2>&1 | |
122 | $echon " installing$echoc" | |
123 | make install >>buildlog 2>&1 | |
124 | echo " done." | |
125 | ) | |
126 | fi | |
127 | done | |
128 | echo " all done." | |
129 | ||
130 | ### Symlink the various dotfiles into place | |
131 | dotfiles=" | |
132 | bash_profile bash_logout bashrc | |
133 | emacs emacs-calc | |
134 | vm mailrc | |
135 | cmucl-init.lisp clisprc.lisp sbclrc | |
136 | dircolors screenrc" | |
739bccbf MW |
137 | [ "$xstuff" ] && dotfiles="$dotfiles |
138 | xinitrc xsession Xdefaults | |
139 | eterm-theme.cfg:.Eterm/themes/Eterm/theme.cfg | |
140 | e-keybindings.cfg:.enlightenment/keybindings.cfg | |
141 | jue-peek.jpg:.enlightenment/backgrounds/jue-peek.jpg" | |
f617db13 MW |
142 | mkdir -p $HOME/test |
143 | echo "Installing dotfiles..." | |
144 | for d in $dotfiles; do | |
739bccbf MW |
145 | target=.$d |
146 | case $d in | |
147 | *:*) target=${d#*:} d=${d%%:*};; | |
148 | esac | |
149 | ft=$HOME$sub/$target | |
150 | dir=${ft%/*} | |
151 | mkdir -p $dir | |
152 | ln -s $here/$d $ft.new | |
153 | mv $ft.new $ft | |
154 | echo " $target" | |
f617db13 MW |
155 | done |
156 | echo " all done." | |
157 | ||
158 | ### Set up the Emacs config | |
159 | echo "Installing Emacs packages..." | |
160 | for elib in make-regexp; do | |
161 | $echon " $elib:$echoc" | |
162 | if $false emacs >/dev/null 2>&1 --batch --eval ' | |
163 | (kill-emacs (condition-case nil | |
164 | (progn (load-library "make-regexp") 0) | |
165 | (error 1)))'; then | |
166 | echo " already installed." | |
167 | else | |
168 | $echon " downloading$echoc" | |
169 | $GETURL $HOME$sub/lib/emacs/make-regexp.el $REPO/make-regexp.el | |
170 | $echon " compiling$echoc" | |
171 | (cd $HOME$sub/lib/emacs; | |
172 | emacs >/dev/null 2>&1 --batch \ | |
173 | --eval '(byte-compile-file "make-regexp.el")') | |
174 | echo " done." | |
175 | fi | |
176 | done | |
177 | echo " all done." | |
178 | ||
179 | $echon "Setting up Emacs configuration:$echoc" | |
180 | $echon " linking$echoc" | |
181 | for link in dot-emacs.el:dot-emacs.el emacs-Makefile:Makefile; do | |
182 | set -- $(echo $link | tr : ' ') | |
183 | from=$1 to=$2 | |
739bccbf MW |
184 | ln -s $here/$from $HOME$sub/lib/emacs/$to.new |
185 | mv $HOME$sub/lib/emacs/$to.new $HOME$sub/lib/emacs/$to | |
f617db13 MW |
186 | done |
187 | $echon " compiling$echoc" | |
188 | make >/dev/null 2>&1 -C $HOME$sub/lib/emacs | |
189 | echo " done." |