Disable Common Lisp / CLISP target language
Clean up to disable target languages that have been neglected/not functional. Target language be fully deleted in SWIG 4.1 unless a new maintainer brings it up to an acceptable status (experimental or supported). Issue #1447
This commit is contained in:
parent
df51dc8e8f
commit
cb4bd26422
11 changed files with 10 additions and 284 deletions
|
|
@ -19,10 +19,8 @@
|
|||
<li><a href="#Lisp_nn6">Generating CFFI bindings for C++ code</a>
|
||||
<li><a href="#Lisp_nn7">Inserting user code into generated files</a>
|
||||
</ul>
|
||||
<li><a href="#Lisp_nn8">CLISP</a>
|
||||
<ul>
|
||||
<li><a href="#Lisp_nn9">Additional Commandline Options </a>
|
||||
<li><a href="#Lisp_nn10">Details on CLISP bindings</a>
|
||||
</ul>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
@ -38,8 +36,7 @@
|
|||
There are more than 9 different implementations of common lisp which
|
||||
are available, all have different foreign function
|
||||
interfaces. SWIG currently supports only the Allegro Common
|
||||
Lisp, Common Foreign Function Interface(CFFI), CLisp
|
||||
foreign function interfaces.
|
||||
Lisp, Common Foreign Function Interface(CFFI).
|
||||
</p>
|
||||
<H2><a name="Lisp_nn2">29.1 Allegro Common Lisp</a></H2>
|
||||
|
||||
|
|
@ -80,15 +77,6 @@ swig -cffi -module <i>module-name</i> <i>file-name</i>
|
|||
<H3><a name="Lisp_nn4">29.2.1 Additional Commandline Options </a></H3>
|
||||
|
||||
|
||||
<p>
|
||||
The following table list the additional commandline options available for the CLISP module. They can also be seen by using:
|
||||
</p>
|
||||
|
||||
<div class="code"><pre>
|
||||
swig -cffi -help
|
||||
</pre></div>
|
||||
<br/>
|
||||
|
||||
<table summary="CFFI specific options">
|
||||
<tr>
|
||||
<th> CFFI specific options</th>
|
||||
|
|
@ -621,192 +609,5 @@ Note that the block <tt>%{ ... %}</tt> is effectively a shortcut for
|
|||
</p>
|
||||
|
||||
|
||||
<H2><a name="Lisp_nn8">29.3 CLISP</a></H2>
|
||||
|
||||
|
||||
<p>
|
||||
<a href="http://clisp.cons.org">CLISP</a> is a feature-loaded
|
||||
implementation of common lisp which is portable across most of the
|
||||
operating system environments and hardware. CLISP includes an
|
||||
interpreter, a compiler, a debugger, CLOS, MOP, a foreign
|
||||
language interface, i18n, regular expressions, a socket
|
||||
interface, and more. An X11 interface is available through CLX,
|
||||
Garnet and CLUE/CLIO. Command line editing is provided by
|
||||
readline. CLISP runs Maxima, ACL2 and many other Common Lisp
|
||||
packages.
|
||||
</p>
|
||||
<p>
|
||||
To run the clisp module of SWIG requires very little effort, you
|
||||
just need to execute:
|
||||
</p>
|
||||
<div class="code"><pre>
|
||||
swig -clisp -module <i>module-name</i> <i>file-name</i>
|
||||
|
||||
</pre></div>
|
||||
|
||||
<p>
|
||||
Because of the high level nature of the CLISP FFI, the bindings
|
||||
generated by SWIG may not be absolutely correct, and you may need
|
||||
to modify them. The good thing is that you don't need to complex
|
||||
interface file for the CLISP module. The CLISP module tries to
|
||||
produce code which is both human readable and easily modifiable.
|
||||
</p>
|
||||
<H3><a name="Lisp_nn9">29.3.1 Additional Commandline Options </a></H3>
|
||||
|
||||
|
||||
<p>
|
||||
The following table list the additional commandline options available for the CLISP module. They can also be seen by using:
|
||||
</p>
|
||||
|
||||
<div class="code"><pre>
|
||||
swig -clisp -help
|
||||
</pre></div>
|
||||
<br/>
|
||||
<table summary="CLISP specific options">
|
||||
<tr>
|
||||
<th>CLISP specific options</th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>-extern-all</td>
|
||||
<td>If this option is given then clisp definitions for all the functions<br/>
|
||||
and global variables will be created otherwise only definitions for<br/>
|
||||
externed functions and variables are created.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>-generate-typedef</td>
|
||||
<td>If this option is given then def-c-type will be used to generate<br/>
|
||||
shortcuts according to the typedefs in the input.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<H3><a name="Lisp_nn10">29.3.2 Details on CLISP bindings</a></H3>
|
||||
|
||||
|
||||
<p>
|
||||
As mentioned earlier the CLISP bindings generated by SWIG may need
|
||||
some modifications. The clisp module creates a lisp file with
|
||||
the same name as the module name. This
|
||||
lisp file contains a 'defpackage' declaration, with the
|
||||
package name same as the module name. This package uses the
|
||||
'common-lisp' and 'ffi' packages. Also, package exports all
|
||||
the functions, structures and variables for which an ffi
|
||||
binding was generated.<br/>
|
||||
After generating the defpackage statement, the clisp module also
|
||||
sets the default language.
|
||||
|
||||
<div class="targetlang"><pre>
|
||||
(defpackage :test
|
||||
(:use :common-lisp :ffi)
|
||||
(:export
|
||||
:make-bar
|
||||
:bar-x
|
||||
:bar-y
|
||||
:bar-a
|
||||
:bar-b
|
||||
:bar-z
|
||||
:bar-n
|
||||
:pointer_func
|
||||
:func123
|
||||
:make-cfunr
|
||||
:lispsort_double
|
||||
:test123))
|
||||
|
||||
(in-package :test)
|
||||
|
||||
(default-foreign-language :stdc)
|
||||
</pre></div>
|
||||
<p>
|
||||
The ffi wrappers for functions and variables are generated as shown
|
||||
below. When functions have arguments of type "double * array",
|
||||
SWIG doesn't knows whether it is an 'out' argument or it is
|
||||
an array which will be passed, so SWIG plays it safe by
|
||||
declaring it as an '(array (ffi:c-ptr DOUBLE-FLOAT))'. For
|
||||
arguments of type "int **z[100]" where SWIG has more
|
||||
information, i.e., it knows that 'z' is an array of pointers to
|
||||
pointers of integers, SWIG defines it to be '(z (ffi:c-ptr
|
||||
(ffi:c-array (ffi:c-ptr (ffi:c-ptr ffi:int)) 100)))'
|
||||
</p>
|
||||
<div class="code"><pre>
|
||||
extern "C" {
|
||||
int pointer_func(void (*ClosureFun)( void* _fun, void* _data, void* _evt ), int y);
|
||||
|
||||
int func123(div_t * x, int **z[100], int y[][1000][10]);
|
||||
|
||||
void lispsort_double (int n, double * array);
|
||||
|
||||
void test123(float x , double y);
|
||||
|
||||
}
|
||||
</pre></div>
|
||||
<div class="targetlang"><pre>
|
||||
(ffi:def-call-out pointer_func
|
||||
(:name "pointer_func")
|
||||
(:arguments (ClosureFun (ffi:c-function (:arguments (arg0 (ffi:c-pointer NIL))
|
||||
(arg1 (ffi:c-pointer NIL))
|
||||
(arg2 (ffi:c-pointer NIL)))
|
||||
(:return-type NIL)))
|
||||
(y ffi:int))
|
||||
(:return-type ffi:int)
|
||||
(:library +library-name+))
|
||||
|
||||
(ffi:def-call-out func123
|
||||
(:name "func123")
|
||||
(:arguments (x (ffi:c-pointer div_t))
|
||||
(z (ffi:c-ptr (ffi:c-array (ffi:c-ptr (ffi:c-ptr ffi:int)) 100)))
|
||||
(y (ffi:c-ptr (ffi:c-ptr (ffi:c-array ffi:int (1000 10))))))
|
||||
(:return-type ffi:int)
|
||||
(:library +library-name+))
|
||||
|
||||
|
||||
(ffi:def-call-out lispsort_double
|
||||
(:name "lispsort_double")
|
||||
(:arguments (n ffi:int)
|
||||
(array (ffi:c-ptr DOUBLE-FLOAT)))
|
||||
(:return-type NIL)
|
||||
(:library +library-name+))
|
||||
|
||||
(ffi:def-call-out test123
|
||||
(:name "test")
|
||||
(:arguments (x SINGLE-FLOAT)
|
||||
(y DOUBLE-FLOAT))
|
||||
(:return-type NIL)
|
||||
(:library +library-name+))
|
||||
|
||||
</pre></div>
|
||||
|
||||
<p>
|
||||
The module also handles strutcures and #define constants as shown
|
||||
below. SWIG automatically adds the constructors and accessors
|
||||
created for the struct to the list of symbols exported by the
|
||||
package.
|
||||
</p>
|
||||
<div class="code"><pre>
|
||||
struct bar {
|
||||
short x, y;
|
||||
char a, b;
|
||||
int *z[1000];
|
||||
struct bar * n;
|
||||
};
|
||||
|
||||
#define max 1000
|
||||
</pre></div>
|
||||
<div class="targetlang"><pre>
|
||||
(ffi:def-c-struct bar
|
||||
(x :type ffi:short)
|
||||
(y :type ffi:short)
|
||||
(a :type character)
|
||||
(b :type character)
|
||||
(z :type (ffi:c-array (ffi:c-ptr ffi:int) 1000))
|
||||
(n :type (ffi:c-pointer bar)))
|
||||
|
||||
(defconstant max 1000)
|
||||
|
||||
</pre></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue