diff --git a/.travis.yml b/.travis.yml index 0c99698..41fb5e0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -146,6 +146,7 @@ script: ros install sbcl --sbcl-bin; [`ros -e "(ros:ignore-shebang)" -e '(loop for x in (directory "src/lisp/*.ros") do (load x))' 2>&1` == ""]; fi; + ( cd tree-shaker && ./test-tree-shaker.sh ) ; fi - if [ $METHOD != debian ]; then ros config; fi - cat /tmp/proxy-log || true diff --git a/tree-shaker/.gitignore b/tree-shaker/.gitignore new file mode 100644 index 0000000..a8a0dce --- /dev/null +++ b/tree-shaker/.gitignore @@ -0,0 +1 @@ +*.bin diff --git a/tree-shaker/aaa.ros b/tree-shaker/aaa.ros new file mode 100755 index 0000000..6ab4586 --- /dev/null +++ b/tree-shaker/aaa.ros @@ -0,0 +1,18 @@ +#!/bin/sh +#|-*- mode:lisp -*-|# +#| +exec ros -Q -- $0 "$@" +|# +(progn ;;init forms + (ros:ensure-asdf) + ;;#+quicklisp (ql:quickload '() :silent t) + ) + +(defpackage :ros.script.aaa.3705213720 + (:use :cl)) +(in-package :ros.script.aaa.3705213720) + +(defun main (&rest argv) + (declare (ignorable argv)) + (format t "hello world!~%")) +;;; vim: set ft=lisp lisp: diff --git a/tree-shaker/test-tree-shaker.sh b/tree-shaker/test-tree-shaker.sh new file mode 100755 index 0000000..cac530c --- /dev/null +++ b/tree-shaker/test-tree-shaker.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +set -eu + +dump (){ + name=$1 + shift + ros dump $@ executable aaa.ros -o c-$name & + ros dump --disable-compression $@ executable aaa.ros -o u-$name & # uncompressed + # ros -L sbcl/1.1.14 dump $@ executable aaa.ros -o c-old-$name & + # ros -L sbcl/1.1.14 dump --disable-compression $@ executable aaa.ros -o u-old-$name & +} + +echo +dump baseline.bin +dump docstring.bin --remove-docstrings +dump destroy-packages.bin --destroy-packages-sbcl +dump no-ql.bin --delete-package QUICKLISP +dump no-sb-posix.bin --delete-package SB-POSIX +dump no-packages.bin --delete-all-packages +dump no-packages-except-trivia.bin --delete-packages-except trivia + +dump packages+destroyed.bin --delete-all-packages --destroy-packages-sbcl + +# the ordering matters; --remove-docstrings use do-all-symbols, so it should come first +dump packages+destroyed+doc.bin --remove-docstrings --delete-all-packages --destroy-packages-sbcl + +# these are the packages that must be protected. +# Protection is already performed by the default values in *package-whitelist* +# and the special treatment of the package of the main script. +# +# dump except-doc.bin \ +# --delete-packages-except keyword \ +# --delete-packages-except roswell \ +# --delete-packages-except ros.script.dump \ +# --delete-packages-except ROS.SCRIPT.AAA.3705213720 + +# these packages are ok to remove +# --delete-packages-except common-lisp \ +# --delete-packages-except common-lisp-user \ +# --delete-packages-except roswell.util \ +# --delete-packages-except roswell.dump.sbcl \ + + +wait +echo +ls -lah *.bin + +for bin in *.bin ; do + echo -n "$bin : " + ./$bin +done