[Ecls-list] calling ECL functions defined in an ASDF package from C code

Ph. Marek philipp at marek.priv.at
Thu Jul 14 19:34:45 UTC 2011

> Well, of course it would be fine if that dependency tracking could be done in
ECL ... so
> that having
>     (c:build...  (:include-modules '(alexandria cl-ppcre)))
> would automatically include all needed .o files.
> (For simplicity I'd say that the given dependencies need to be loaded in the
> ECL, so that it can simply use a list that was built upon loading them).
> Then it wouldn't really matter where they are, and neither if ql was used or
not ...

With help from #lisp I'm currently testing something like this; perhaps a
refined version could find its way into ECL?

(defvar *sources* (list "my/source/files.lisp" ...))

(let (libs o)
    (lambda (s)
      (let ((dir (asdf:system-source-directory s)))
        ;(asdf:system-source-file *)
        (dolist (c (asdf:module-components s))
          (push (asdf:component-pathname c) libs)))))
  ;; compile into .o
  (dolist (src (append libs *sources*))
    ;; there are directories in this list, too
    (if (pathname-name src)
      (let* ((output-file
               (compile-file-pathname src
                                      :type :object))
             (of-time (or (file-write-date output-file) 0))
             (src-time (file-write-date src)))
        (format t "~&src ~a ~a: ~a~%" src-time of-time src)
        (if (< of-time src-time)
          (with-output-to-string (*standard-output*)
            (compile-file src :system-p t)))
        (push output-file o) )))
  ;; build executable
  (c:build-program binary
                   :lisp-files o))

More information about the ecl-devel mailing list