3 # (C) 2008 Xavier Maillard <xma@gnu.org>
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 # --------------------------------------------------------------------------
23 # Original code and idea: http://stumpwm.antidesktop.net/cgi-bin/wiki/SetUp
26 # Put this script wherever you want and just call it from your .xinitrc file
28 # The first time you will launch it, it will build the final
29 # executable and then call it. To force a rebuild of your executable
30 # (say you have updated something in the CLFSWM source tree), just
31 # delete the image and restart your X session.
32 # --------------------------------------------------------------------------
38 dump_path
="$XDG_CACHE_HOME/clfswm/"
39 asdf_path
="$(pwd)/contrib"
40 clfswm_asd_path
="$(pwd)"
49 n,no-start don't start CLFSWM after image dump
50 f,force force image dump
51 rebuild same as -f,--force
52 l,with-lisp use <lisp> as the common lisp implementation [$lisp]
53 o,lisp-opt use <opt> as lisp option [$lisp_opt]
54 d,dump-path path to the dump directory [\$XDG_CACHE_HOME=$XDG_CACHE_HOME]
55 with-clfswm path to clfswm.asd file [$clfswm_asd_path]
56 with-asdf path to the asdf.lisp file [$asdf_path]"
68 clisp
$lisp_opt -m 8MB
-E ISO-8859-1
-q -i $asdf_path/asdf.lisp
-x "(load \"$clfswm_asd_path/clfswm.asd\")
69 (asdf:oos 'asdf:load-op :clfswm) \
70 (EXT:SAVEINITMEM \"$dump_image\" :INIT-FUNCTION (lambda () (clfswm:main) (quit)) :EXECUTABLE t :norc t)"
75 sbcl
$lisp_opt --disable-debugger --eval "(require :asdf)" \
76 --eval "(load \"$clfswm_asd_path/clfswm.asd\")" \
77 --eval "(require :clfswm)" \
78 --eval "(save-lisp-and-die \"$dump_image\" :toplevel 'clfswm:main)"
83 cmucl
$lisp_opt -eval "(load \"$asdf_path/asdf.lisp\")" \
84 -eval "(load \"$clfswm_asd_path/clfswm.asd\")" \
85 -eval "(require :clx)" \
86 -eval "(asdf:oos 'asdf:load-op :clfswm)" \
87 -eval "(save-lisp \"$dump_image\" :init-function (lambda () (clfswm:main) (quit)))"
92 ccl
$lisp_opt --eval "(require :asdf)" \
93 --eval "(load \"$clfswm_asd_path/clfswm.asd\")" \
94 --eval "(asdf:oos 'asdf:load-op :clfswm)" \
95 --eval "(save-application \"$dump_image\" :toplevel-function (lambda () (clfswm:main) (quit)))"
100 ecl
$lisp_opt -eval "(require :asdf)" \
101 -eval "(load \"$clfswm_asd_path/clfswm.asd\")" \
102 -eval "(asdf:make-build :clfswm :type :program :monolithic t :move-here \".\" :prologue-code '(progn (require :asdf) (require :clx)))" \
104 mv .
/clfswm-mono
$dump_image
114 -f|
--force|
--rebuild)
121 clfswm_asd_path
="$1" ;;
130 clisp|sbcl|cmucl|ccl|ecl
)
147 dump_image
="$dump_path/clfswm-$(cksum $(type -p $lisp) | cut -d ' ' -f 1).core"
149 if test yes = "$force" && test -e "$dump_image"
151 echo "Removing old image."
155 if test ! -e "$dump_image" ||
156 ( for i
in "$(dirname $(readlink $clfswm_asd_path/clfswm.asd))"/*.lisp
157 do test "$dump_image" -ot "$i" && exit 1
160 test -x $
(type -p $lisp) || die
"$lisp can't be found."
161 test -e $clfswm_asd_path/clfswm.asd || die
"can't find clfswm.asd in $clfswm_asd_path"
162 test -e $asdf_path/asdf.lisp || die
"can't find asdf.lisp in $asdf_path"
164 # Move clfswm sources to $tmp_dir if there is no write permission on $clfswm_asd_path
165 if test ! -w $clfswm_asd_path ; then
166 rm -rf $tmp_dir/clfswm-tmp
167 mkdir
$tmp_dir/clfswm-tmp
168 cp -R $clfswm_asd_path/* $tmp_dir/clfswm-tmp
169 clfswm_asd_path
=$tmp_dir/clfswm-tmp
170 asdf_path
=$tmp_dir/clfswm-tmp
/contrib
171 echo "* Note: No write access in sources, copying in $clfswm_asd_path"
174 mkdir
-p "$dump_path"
175 mkdir
-p "$dump_path/contrib"
177 rm -rf "$dump_path/contrib"
178 cp -R "$clfswm_asd_path/contrib/" "$dump_path/"
179 rm -rf $
(find "$dump_path/" -name "*svn")
181 rm -rf $tmp_dir/clfswm-tmp
184 # Run the resulting image
185 if test no
= "$no_start"
189 clisp
) $dump_image ;;
190 sbcl
) exec sbcl
--core "$dump_image" ;;
191 cmucl
) exec cmucl
-core "$dump_image" ;;
192 ccl
) exec ccl
-I "$dump_image" ;;
193 ecl
) $dump_image -eval "(progn (clfswm:main) (ext:quit 0))" ;;
197 echo "As requested, we have just dumped the image."