[Ecls-list] executables produced with make-build break in cffi-grovel

Pascal J. Bourguignon pjb at informatimago.com
Sat Sep 11 00:24:19 UTC 2010


pjb at informatimago.com (Pascal J. Bourguignon) writes:

> I cannot build working executables.
>
>
> [pjb at mdi-development-1 localhost:10.0  |MDI| mdi]$ /home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/imcp/sources/es.medicalis.mdi.imcp.test-server
> Starting server prologue
>
> No class named ASDF::COMPILE-OP.
> No restarts available.
>
> Broken at NIL. In: #<process SI:TOP-LEVEL 08a3cfc0>.
> CFFI-GROVEL>> :b
>
> Backtrace:
>
> CFFI-GROVEL>> 
>
>
>
> The asd file is:
> ------------------------------------------------------------------------
> ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
>
> (asdf:defsystem :es.medicalis.mdi.imcp.test-server.program
>   :description  "This ASDF system gathers all the packages of the IMCP Test-Server program."
>   :version "0.5"
>   :author "<PJB> Pascal Bourguignon <pascal.bourguignon at medicalis.es>"
>   :licence "Proprietary"
>   :depends-on ("split-sequence"
>                "alexandria" "babel" "iolib"
>                "es.medicalis.mdi.common"
>                "es.medicalis.mdi.imcp")
>   :components ((:file "test-server")))
>
> ;;;; THE END ;;;;
> ------------------------------------------------------------------------


Ok, I found out in a blog that one could pass a sexp to
:prologue-code.  This is not what is documented (a bug in the
documentation):

    (asdf:make-build system-name) ⇒ &key) ⇒ type) ⇒ monolithic) ⇒ ld-flags) ⇒ prologue-code) ⇒ epilogue-code) ⇒ &allow-other-keys)
    system-name     A symbol naming the system to be built. Only the symbol name is considered.

    type            One of :FASL, :DLL, :LIB or :PROGRAM
    monolithic      A boolean value.
    ld-flags        A list of strings.
    prologue-code   A string.
    epilogue-code   A string or a lisp form.


Notice also that bug in the generation of the HTML documentation, with
all those closing parentheses and double right arrows...



So I put '(require :asdf) in the :prologue-code, and thus it went one
step forward:


[pjb at mdi-development-1 localhost:10.0  |MDI| mdi]$ /home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/imcp/sources/es.medicalis.mdi.imcp.test-client
Starting client prologue
;;; Loading #P"/usr/local/lib/ecl-10.7.1/asdf.fas"
;;; Loading #P"/usr/local/lib/ecl-10.7.1/cmp.fas"

There exists no package with name "IOLIB"
No restarts available.

Broken at NIL. In: #<process SI:TOP-LEVEL 08fd9fc0>.
ES.MEDICALIS.MDI.COMMON.END-POINT>> :backtrace

Backtrace:

ES.MEDICALIS.MDI.COMMON.END-POINT>> 


But there's still no backtrace, and the asdf systems that were
specifically specified as dependencies, and which have been
explicitely included in the link phase:

;;;  gcc \
;;;      -o \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/imcp/sources/es.medicalis.mdi.imcp.test-server" \
;;;      -L"/usr/local/lib/" \
;;;      "/tmp/eclinitEVv27z.o" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/pjb-libcl-2009-10-27-beta/bordeaux-threads/libbordeaux-threads.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/pjb-libcl-2009-10-27-beta/alexandria/libalexandria.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/pjb-libcl-2009-10-27-beta/trivial-features/libtrivial-features.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/pjb-libcl-2009-10-27-beta/babel/libbabel.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/pjb-libcl-2009-10-27-beta/cffi/libcffi.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/pjb-libcl-2009-10-27-beta/cffi/libcffi-grovel.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/site/trivial-garbage_0.18/libtrivial-garbage.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/site/iolib/src/base/libiolib.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/site/iolib/src/syscalls/libiolib.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/site/iolib/src/multiplex/libiolib.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/site/iolib/src/streams/gray/libiolib.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/site/iolib/src/sockets/libiolib.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/site/iolib/src/iolib/libiolib.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/dependencies/lisp/site/split-sequence/libsplit-sequence.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/common/sources/libes.medicalis.mdi.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/imcp/sources/libes.medicalis.mdi.a" \
;;;      "/home/pjb/.cache/common-lisp/mdi-development-1.lan.informatimago.com/ecl-10.7.1-linux-x86/home/pjb/firms/medicalis/src/mdi/subprojects/imcp/sources/libes.medicalis.mdi.imcp.test-server.a" \
;;;       \
;;;      "-Wl,--rpath,/usr/local/lib/" \
;;;       \
;;;       \
;;;      -lffi \
;;;      -lecl \
;;;       \
;;;      -lgmp \
;;;      -lpthread \
;;;      -ldl \
;;;       \
;;;      -lm 

seem to NOT be present in the generated image.   
Do we have to put in the prolog code to reload all the dependencies?  
Then what would be the point of generating it in the first place?

Also, I'm afraid that if I put whatever is required to load my program
and dependencies in the prologue, it will be a tad to slow a start for
my application...


The build script contains:

  (asdf-load :ES.MEDICALIS.MDI.IMCP.test-client.program)

  (asdf:make-build :ES.MEDICALIS.MDI.IMCP.TEST-CLIENT.program
                   :type :program
                   :monolithic t
                   :prologue-code '(progn
                                    (princ "Starting client prologue") (terpri)
                                    (require :asdf))
                   ;; :prologue-code "printf(\"Starting client prologue\\n\");fflush(stdout);"
                   :epilogue-code '(unwind-protect
                                    (progn
                                      (princ "Starting client") (terpri) (finish-output)
                                      (ES.MEDICALIS.MDI.IMCP.TEST-CLIENT:MAIN
                                       :SERVER-INTERFACE "127.0.0.1"
                                       :SERVER-PORT      10001
                                       :COMMAND-PORT     10011))
                                    (ext:quit 0)))



-- 
__Pascal Bourguignon__                     http://www.informatimago.com/





More information about the ecl-devel mailing list