Liam Healy | 21 Oct 23:47 2014
Picon

Debian depends/recommends

I don't know who packages CFFI for Debian, but whoever that is: it would be good to have a depends/recommends on libffi-dev, so the user can load cffi-libffi.

Liam
_______________________________________________
Cffi-devel mailing list
Cffi-devel <at> common-lisp.net
http://mailman.common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
Scott Turner | 4 Oct 05:58 2014
Picon

Problem With Lapack Libraries from Cygwin

I have been using the Lisp Linear Algebra package (LLA) for about a year.  It provides a Common Lisp interface to the BLAS and LAPACK libraries using CFFI.  I use SBCL on Windows and have been loading the BLAS and LAPACK libraries from Cygwin64.

A couple of days ago I updated my Cygwin installation (because of the Shellshock vulnerability) and now when I load these libraries, my SBCL process crashes after a second or two.

CL-USER> (ql:quickload "cffi")
To load "cffi":
  Load 1 ASDF system:
    cffi
; Loading "cffi"
; Loading system definition for alexandria from C:/Users/Dad/quicklisp/dists/quicklisp/software/alexandria-20140826-git/alexandria.asd
; Registering #<SYSTEM "alexandria">
; Loading system definition for trivial-features from C:/Users/Dad/quicklisp/dists/quicklisp/software/trivial-features-20130312-git/trivial-features.asd
; Registering #<SYSTEM "trivial-features">
; Loading system definition for babel from C:/Users/Dad/quicklisp/dists/quicklisp/software/babel-20140713-git/babel.asd
; Registering #<SYSTEM "babel">
.
("cffi")
CL-USER> (cffi:load-foreign-library "CYGBLAS-0.DLL")
#<CFFI:FOREIGN-LIBRARY CYGBLAS-0.DLL-872 "CYGBLAS-0.DLL">
(crashed)

The two libraries I load (CYGBLAS-0.DLL and CYGLAPACK-0.DLL) have not changed in about a year.  Other libraries (such as the DLLs found in Windows/System32) load without a problem.   The Lapack libraries in the Cygwin32 distribution are not recognized as valid Win32 applications by CFFI.  I've tried older versions of SBCL and CFFI with no success.

I've replicated the problem exactly on a second machine.  It should be easy to test:  Install SBCL, install Cygwin64, install CFFI, and then try (cffi:load-foreign-library "CYGBLAS-0.DLL"). You may have to provide the full path.  Sometimes it takes a short while for the process to crash.

I'm very baffled by the problem, and I hope someone on this list will have a fix or some ideas on how to debug the situation.  I'd also appreciate it if someone would see if the problem replicates on their machine.  Also, if someone has a source for alternate DLLs for BLAS and LAPACK that CFFI can load on Windows, I could try those to see if they have the same problem.

Thanks!

Scott Turner



_______________________________________________
Cffi-devel mailing list
Cffi-devel <at> common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
Luís Oliveira | 21 Sep 19:25 2014
Picon

CFFI 0.14.0 released

Hello,

I've just released CFFI 0.14.0.
https://github.com/cffi/cffi/wiki/NEWS#version-0140

Cheers,

--

-- 
Luís Oliveira
http://kerno.org/~luis/

_______________________________________________
Cffi-devel mailing list
Cffi-devel <at> common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
Mirko Vukovic | 18 Sep 16:36 2014
Picon

Native GSLL on Windows: Q on osicat and cffi/libffi

Hello,

I have built GSLL (Lieam Healy's Gnu Scientific Library interface) on CCL on Windows 7.  I used Cygwin's version of the MinGW GCC compiler suite.  GSLL runs nicely with vast majority of tests passing (77 failures, 6 execution errors). 

Main point is that this is Windows native: GSL, CCL, MinGW.

However my build procedure includes some hacks.  I am wondering if they are
- correct
- is there a cleaner/better way of doing them.

At one step I am hard-coding some constants that originate in /usr/include/sys/stat.h into one of osicat's files.  (I copied that code from a link that I post in the instructions).

I am wondering if I can avoid this step by teaching cffi and grovel about that file stat.h

I have put the instructions for GSLL+CCL+Win7 on github (http://github.com/mirkov/gsll-ccl-MinGW).  There you will find a section OSICAT JWBM where I list the modifications. 

A few lines below you will find also some modifications I did in cffi/libffi/lilbffi-windows32.lisp.  Same question applies.

Thanks,

Mirko
_______________________________________________
Cffi-devel mailing list
Cffi-devel <at> common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
Joeish W | 12 Jul 10:51 2014
Picon

How do I make the :actual-type of a define-foreign-type a (:pointer (:struct ...))

 I have a define-foreign-type, translate-to-foreign, translate-from-foreign and a defclass at bottom of this page

  These four sections of code make up my types. At the top of the code is a defcstruct that, I am trying to make a part of my types  by changing the :actual-type in the define-foreign-type to:  

   (:actual-type '(:pointer (:struct rect1))).

The :actual-type is normally :pointer and that makes it so the defcfun at the bottom of code section compiles no problem.  When I compile the code here I get an error in my defcun saying that "(:pointer (:struct rect1)) is not a cffi type".  Why is it doing this and how can I make the actual type of my define-foreign-type a (:pointer (:struct rect1))?  The reason I would like to do this is so I can convert the C data to lisp data as soon as possible. If this won't work and you have any other suggestions on how to do this professionally. pls let me know. Thank you.


;;;;Code

(cffi:defcstruct rect1
(x :int)
(y :int)
(width :int)
(height :int))
 
 
(define-foreign-type rect ()
((garbage-collect :reader garbage-collect :initform nil :initarg
:garbage-collect))
(:actual-type '(:pointer (:struct rect1)))
(:simple-parser rect))
 
 
(defclass cv-rect ()
((c-pointer :reader c-pointer :initarg :c-pointer)))
 
 
(defmethod translate-to-foreign ((lisp-value cv-rect) (c-type rect))
(values (c-pointer lisp-value) lisp-value))
 
 
(defmethod translate-from-foreign (c-pointer (c-type rect))
(let ((rectangle (make-instance 'cv-rect :c-pointer c-pointer)))
(when (garbage-collect c-type)
(tg:finalize rectangle (lambda () (del-rect c-pointer))))
rectangle))
 
 
 
(defcfun ("cv_create_Rect4" rect-4) rect
"RECT constructor."
(x :int)
(y :int)
(width :int)
(height :int))

_______________________________________________
Cffi-devel mailing list
Cffi-devel <at> common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
Robert P. Goldman | 16 Jun 22:09 2014

Quick documentation note

On line 610 of cffi-manual.texinfo, there's an impnote that states that
CFFI-grovel is not part of CFFI.  But later, we learn that it is.  Maybe
replace this implementation note with a cross-ref to the CFFI-grovel
chapter?

Best,
r
Joeish W | 27 May 22:29 2014
Picon

How do I wrap a C/C++ struct with a nested union

I'm trying to wrap this struct, CvDTreeSplit. Normally I just use swig to wrap them but in this case when I wrap the C++ struct, CvDTreeSplit, below, I get this error in swig:

 Warning 312: Nested union not currently supported (ignored).

So the output ends up being the defcstruct at the bottom of the page.  Not sure where to go from here. Can someone wrap this struct for me so I'll know how to wrap structs, with nested unions, containing structs and C arrays, in the future.


struct CvDTreeSplit
{
    int var_idx;
    int condensed_idx;
    int inversed;
    float quality;
    CvDTreeSplit* next;
    union
    {
        int subset[2];
        struct
        {
            float c;
            int split_point;
        }
        ord;
    };
};

(cffi:defcstruct CvDTreeSplit
    (var_idx :int)
    (condensed_idx :int)
    (inversed :int)
    (quality :float)
    (next :pointer))

_______________________________________________
Cffi-devel mailing list
Cffi-devel <at> common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
Anton Vodonosov | 27 May 02:56 2014
Picon

Could you make a release please?

Hi, could you make a release please?

I am very interested in commit bb629a853a to be in Quicklisp.

Quicklisp currently grabs cffi from
http http://common-lisp.net/project/cffi/releases/cffi_latest.tar.gz

Best regards,
- Anton
Joeish W | 16 May 23:33 2014
Picon

Is there anything in CFFI where I can cast an integer to a char and the result is a letter..

This is the code I'm referring to :

        char c = (char)waitKey();

        if( c == 27 )
            break;

        if( c == 'r' )
        {.....

The function waitKey, above, outputs an integer as return and it's being cast to a char to make the result a letter. Can this be done in CFFI. I have a CFFI wrapper for waitKey btw, that has an :int return
 
_______________________________________________
Cffi-devel mailing list
Cffi-devel <at> common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
Joeish W | 8 May 23:24 2014
Picon

What is wrong with this 2d array of pointers

I was hoping someone could look at this and help me debug it.

I'm getting:

(FOREIGN-ALLOC :POINTER :INITIAL-ELEMENT (NULL-POINTER))
is not of type
SB-SYS:SYSTEM-AREA-POINTER. when I run it.



(foreign-array-alloc #2A((

(foreign-alloc :pointer :initial-element (null-pointer))
(foreign-alloc :pointer :initial-element (null-pointer)))
((foreig n-alloc :pointer :initial-element (null-pointer))
(foreign-alloc :pointer :initial-element (null-pointer)))
((foreign-alloc :pointer :initial-element (null-pointer))
(foreign-alloc :pointer :initial-element (null-pointer)))
((foreign-alloc :pointer :initial-element (null-pointer))
(foreign-alloc :pointer :initial-element (null-pointer)))) '(:array :pointer 4 2))

 
_______________________________________________
Cffi-devel mailing list
Cffi-devel <at> common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
Joeish W | 7 May 10:04 2014
Picon

I can use a little professional advice on my new memory management technique(read this for a fun idea)

Probably about 30% of my functions need some sort of memory management. I wanted to use the TG(Trivial Garbage) finalizers for automatic MM but they were twice as slow as my original functions. So I decided to use 3 forms of MM in my library WITH-* macros, manual and finalizers. As for the finalizer part of my library, I wanted to call all my functions by the same name as well so I tried 2 things. First I wrapped everything in conditionals so I could call by the same name but that was a bit slow...so I decided to create a clone of my library named "GC" that had all the same functions but they were finalized. so If, while in my original package, where I normally use with-* macros because they are quickest, I needed one, I could append a "gc::" before the function I wanted to use and bam!, a finalized version of the function I wanted to use, with the same name(save for the gc::) and as fast as possible. The only caveat is If I use one finalizer I have to append a "gc::" to thee front of every function that takes that function as input. Once the branching for that function is over, I can do whatever I want with the rest of the functions in my code..Now I can tell you this is awesome and fun to use....but is there another better way

_______________________________________________
Cffi-devel mailing list
Cffi-devel <at> common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel

Gmane