[Ecls-list] Latest changes

Juan Jose Garcia-Ripoll jjgarcia at users.sourceforge.net
Fri May 9 10:56:57 UTC 2008

Tag: (CVS 2008-05-09 09:55)

- Merged in all the changes from the sealed_slot branch (see previous emails)

- CHECK-TYPE is now "cheaper": it produces smaller code, has an
auxiliary function for signalling errors, and uses the optimizations
from TYPEP to speed up type checks.

- ASDF:LOAD-FASL-OP now creates files with extension "fasb" for "fast
loading bundle". This extension is registered with ECL by the ASDF
package, so that LOAD understands it. Furthermore, it solves a problem
which was caused by LOAD-OP and LOAD-FASL-OP writing on the same file.
This only happened for systems whose name matched that of one of the
source files.

- Reverted a change in ASDF::GATHER-COMPONENTS that broke other bundle
operators. This change is now moved into a specialized method for

- In Gray streams, instead of signalling an error for no method being
applicable, most generic functions have a default method that signals
a type error when the argument is neither a stream class nor an ANSI
steam object.

- Solved a problem regarding the interaction of COMPILE (not
COMPILE-FILE) and LOAD-TIME-VALUE. This problem was only in the
sealed_slot branch.

- C:BUILDER now honors *COMPILE-VERBOSE*. Thus if you set
*COMPILE-VERBOSE* to NIL and use ASDF, the outcome will be a way less
verbose loading procedure.

Regarding ASDF, I have set it up in my computer using LOAD-FASL-OP by
default, so I have experienced some of the problems reported here. I
have _not_ experience the problem regarding LOAD-FASL-OP failing to
create the binary files, but I suspect this is due to the name clashes
mentioned before and an installation that had stale binary files
laying around.

The recommended setup is one that keeps binary files in a separate
location, as described in other emails. I currently cannot rely on
asdf-install and asdf-binary-locations because the number of packages
that are not ported to ECL is too large, and I have my own versions
sitting everywhere. I have included below my current version of ~/.ecl
that does the binary - systems - sources separation for me.


(require 'cmp)

(setf *compile-verbose* nil)

(require 'asdf)

(defvar asdf::*binaries-root* "/Users/jjgarcia/.asdf-binaries/ecl/")
(defvar asdf::*systems-root* "/Users/jjgarcia/.asdf-systems/")
(defvar asdf::*sources-root* '("/Users/jjgarcia/src/lisp/"))

(setf asdf::*require-asdf-operator* 'asdf:load-fasl-op)
(pushnew asdf::*systems-root* asdf::*central-registry* :test #'equal)

(defmethod asdf:output-files :around ((op asdf:operation) (c asdf:component))
 "Method to rewrite output files to fasl-root"
 (let* ((system (asdf::component-system c))
	(name (asdf:component-name system))
	(version (if (slot-boundp system 'asdf::version)
		     (slot-value system 'asdf::version)
	(new-root (format nil "~A-~A" name version)))
   (loop for orig in (call-next-method)
      with root = (pathname asdf::*binaries-root*)
      collect (merge-pathnames (make-pathname :name (pathname-name orig)
					      :type (pathname-type orig)
					      :directory `(:relative ,new-root))

(defun update-asdf-systems (&optional verbose dry-run)
  (flet ((link (orig dest)
	   (unless (zerop  (si::system (concatenate 'string "ln -sf '"
						    (namestring orig) "' '"
						    (namestring dest) "'")))
	     (error "Unable to link ~A to ~A" orig dest)))
	 (explain (&rest args)
	   (when verbose (apply #'format t args))))
    (let ((pattern (make-pathname :directory '(:relative
:wild-inferiors) :name :wild :type "asd")))
      (explain ";;; Removing old system definitions~%")
      (si::system (concatenate 'string "rm -rf '" (namestring
asdf::*systems-root*) "'"))
      (ensure-directories-exist asdf::*systems-root*)
      (loop for search-path in asdf::*sources-root*
	 do (loop for files in (directory (merge-pathnames pattern search-path))
	       unless (member "_darcs" (pathname-directory files) :test #'equal)
	       do (let ((destination (make-pathname :name (pathname-name files)
						    :type (pathname-type files)
						    :defaults asdf::*systems-root*)))
		    (explain ";;; Linking ~A to ~A~%" files destination)
		    (unless dry-run (link files destination))))))))

(defun clean-asdf-binaries ()
  (si::system (concatenate 'string "rm -rf '" asdf::*binaries-root* "'")))

Facultad de Fisicas, Universidad Complutense,
Ciudad Universitaria s/n Madrid 28040 (Spain)

More information about the ecl-devel mailing list