Luís Oliveira | 25 Jan 23:40 2015

New CFFI dependency: UIOP


While fixing lp bug #1414277
<> I needed to use a
couple of utilities provided by UIOP that would have been a pain to
implement in CFFI-SYS.

UIOP is ASDF's utility library -- it is also available standalone via
Quicklisp -- and next version of CFFI will depend on it.

I hope that's not inconvenient to anyone. :-)



Luís Oliveira

Cffi-devel mailing list
Cffi-devel <at>
Frank | 17 Jan 10:27 2015

cffi-grovel bitfield

Given this C code:

enum uv_tcp_flags {
  /* Used with uv_tcp_bind, when an IPv6 address is used. */

The following cffi-grovel form fails:

(bitfield (uv-tcp-flags)
  ((:ipv6-only "UV_TCP_IPV6ONLY")))

The C-file generated by cffi-grovel looks like this:

/* bitfield section for UV-TCP-FLAGS */
fputs("(cffi:defbitfield (", output);
fputs("uv-tcp-flags", output);
fputs(")", output);
fputs("\n  (", output);
fputs(":ipv6-only", output);
fputs(" ", output);
fprintf(output, "%d", UV_TCP_IPV6ONLY);
fputs("\n  #.(cl:progn (cl:warn 'cffi-grovel:missing-definition :name
'IPV6-ONLY) -1)", output);
fputs(")", output);
fputs(")\n", output);

(Continue reading)

Luís Oliveira | 6 Dec 16:40 2014

Fwd: Passed: cffi/cffi#1 (master - 6cf6892)


I've just finished setting up Travis CI for the CFFI repository. This means that each commit and pull request will be tested automatically. If an unexpected test fails, the commit author gets a notification similar to one I'm forwarding only with more red.

Currently only SBCL (32, and 64-bit) and CCL (64-bit) are being tested because the other Lisps fail to even execute the suite on the test box.

(The setup bits come from that I hope you may find useful in your own lisp projects.)


---------- Forwarded message ----------
From: Travis CI <notifications <at>>
Date: Sat, Dec 6, 2014 at 3:31 PM
Subject: Passed: cffi/cffi#1 (master - 6cf6892)
To: loliveira <at>

cffi / cffi (master)
Build #1 passed.
2 minutes and 22 seconds
Luís Oliveira 6cf6892 Changeset →
  Test using Travis CI

Want to know about upcoming build environment updates?

Would you like to stay up-to-date with the upcoming Travis CI build environment updates? We set up a mailing list for you! Sign up here.

Documentation about Travis CI
For help please join our IRC channel
Choose who receives these build notification emails in your configuration file.

Would you like to test your private code?

Travis Pro could be your new best friend!

Travis CI is powered by

Luís Oliveira
Cffi-devel mailing list
Cffi-devel <at>
Stelian Ionescu | 26 Nov 17:39 2014


Once upon a time Launchpad was the best in open-source and Github's
issue tracker was unusable, but that's no longer the case. How about we
officially switch to Github ?


Stelian Ionescu a.k.a. fe[nl]ix
Quidquid latine dictum sit, altum videtur.

Cffi-devel mailing list
Cffi-devel <at>
FAU | 25 Nov 11:06 2014

inline decfun

I'm wondering if it as any effect to declaim inline a function defined
by defcfun?
FAU | 24 Nov 02:13 2014

clear foreign memory


Lets say I want to keep around blocks of foreign memory but I need to
clear them before I reuse them what would be the best way to do it?

In C we could use memset() is there such an equivalent for CFFI?

Luís Oliveira | 23 Nov 23:16 2014

pkg-flags (was: Re: Cannot load cffi-libffi)

OK, so I see two needs for pkg-flags here then.

1. finding headers that aren't in the standard locations and wouldn't
otherwise be found.
2. finding headers for a specific version of a library.

I think the current committed behaviour works nicely for use case #1.
Use case #2, which you've raised, suggests that ignoring a missing
pkg-config is a bad default. What about adding making it an option?

Also, if we're going to cater to use case #2, then perhaps we should
support a list of alternatives à la define-foreign-library. What do
you think?

Finally, how about renaming the directive to pkg-config-cflags? (I can
sort of imagine we might want a pkg-config-lfags for wrappers at some
point in the future.)


Luís Oliveira

Cffi-devel mailing list
Cffi-devel <at>
Luís Oliveira | 22 Nov 16:02 2014

Issue tracker (still) lives at Launchpad


I'm not sure how, but the issue tracker for CFFI's GitHub repository
was somehow enabled. We still use Launchpad for bug tracking -- -- so I've closed all the issues on
github and moved the one that still needs fixing to launchpad.

Sorry for the confusion.



Luís Oliveira

Cffi-devel mailing list
Cffi-devel <at>
Liam Healy | 20 Nov 19:36 2014

Cannot load cffi-libffi

On Debian/Ubuntu and SBCL, I cannot load the latest cffi-libffi

To load "cffi-libffi":
  Load 1 ASDF system:
; Loading "cffi-libffi"
; pkg-config libffi --cflags
; cc -m64 NIL -I/home/healy/languages/lisp/cffi/ -o /home/healy/.cache/common-lisp/sbcl- /home/healy/.cache/common-lisp/sbcl-

debugger invoked on a CFFI-GROVEL:GROVEL-ERROR in thread #<THREAD "main thread" RUNNING {1002BEE843}>: External process exited with code 1.
Command was: "cc" "-m64" "NIL" "-I/home/healy/languages/lisp/cffi/" "-o" "/home/healy/.cache/common-lisp/sbcl-" "/home/healy/.cache/common-lisp/sbcl-"
Output was:
cc: error: NIL: No such file or directory

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [RETRY                        ] Retry PROCESS-OP on #<GROVEL-FILE "cffi-libffi" "libffi" "libffi">.
  1: [ACCEPT                       ] Continue, treating PROCESS-OP on #<GROVEL-FILE "cffi-libffi" "libffi" "libffi"> as having been successful.
  2:                                 Retry ASDF operation.
  3: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the configuration.
  4: [ABORT                        ] Give up on "cffi-libffi"
  5:                                 Exit debugger, returning to top level.

(CFFI-GROVEL:GROVEL-ERROR "External process exited with code ~S.~ <at>
                     Command was: ~S~{ ~S~}~ <at>
                     Output was:~%~A" 1 "cc" ("-m64" "NIL" "-I/home/healy/languages/lisp/cffi/" "-o" "/home/healy/.cache/common-lisp/sbcl-" "/home/healy/.cache/common-lisp/sbcl-") "cc: error: NIL: No such file or directory

I bisected this down to this commit:
     4d5479d692f07c641d3218c4728fa43287528366 is the first bad commit
     commit 4d5479d692f07c641d3218c4728fa43287528366
     Author: Sumant Oemrawsingh <soemraws <at>>
     Date:   Fri Oct 31 19:03:54 2014 +0100

         Find cc-flags for libffi using pkg-config on linux.

     :040000 040000 2dec1750de47713e34eb726a561dec296a927a17 2a4da151f69703e60f54c8881a84a6a0dcc9d471 M    libffi

Cffi-devel mailing list
Cffi-devel <at>
FAU | 5 Nov 08:53 2014

Callbacks & Lambdas


I'm kinda new to CFFI.

Is there a reliable/portable way to have lambdas called as a callback
from a foreign C function?  I assume there's not though.

I could imagine it could be simulated (by a dispatcher callback or
something) so I'm wondering if somebody has done something like that
before and may share insight into her/his design.

FAU | 1 Nov 22:09 2014

defcstruct &key size


Apparently SIZE is not evaluated at macro expansion time.

I basically want to pass the name of a foreign function as SIZE and have
it evaluated.

What would be the best way to do that?

Currently I'm doing this:

(eval-when (:compile-toplevel :load-toplevel :execute)
  (cffi:define-foreign-library libfoo
    (:unix ""))
  (cffi:load-foreign-library 'libfoo)
  (cffi:defctype size :uint)
  (cffi:defcfun ("foo_size" foo-size) size))

    ((m ()
	`(cffi:defcstruct (foo-struct :size ,(eval-when
(:compile-toplevel :load-toplevel :execute) (foo-size)))
			  (data :pointer))))