Disable Common Lisp / UFFI 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:
William S Fulton 2019-02-04 20:01:05 +00:00
commit f63d0db21b
12 changed files with 12 additions and 119 deletions

View file

@ -12,7 +12,7 @@ generates the wrapper code needed to make C and C++ code accessible
from other programming languages including Perl, Python, Tcl, Ruby, from other programming languages including Perl, Python, Tcl, Ruby,
PHP, C#, Go, Java, Javascript, Lua, Scheme (Guile, MzScheme, CHICKEN), PHP, C#, Go, Java, Javascript, Lua, Scheme (Guile, MzScheme, CHICKEN),
D, Ocaml, Octave, R, Scilab, Common Lisp (CLISP, D, Ocaml, Octave, R, Scilab, Common Lisp (CLISP,
Allegro CL, CFFI, UFFI). SWIG can also export its parse tree in Allegro CL, CFFI). SWIG can also export its parse tree in
the form of XML and Lisp s-expressions. Major applications of SWIG the form of XML and Lisp s-expressions. Major applications of SWIG
include generation of scripting language extension modules, rapid include generation of scripting language extension modules, rapid
prototyping, testing, and user interface development for large prototyping, testing, and user interface development for large

View file

@ -7,6 +7,10 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
Version 4.0.0 (in progress) Version 4.0.0 (in progress)
=========================== ===========================
2019-02-04: wsfulton
[UFFI] #1447 Common Lisp UFFI has been disabled as a target language in SWIG as part of a
clean up to remove target languages that have been neglected/not functional.
2019-02-04: wsfulton 2019-02-04: wsfulton
[Pike] #1447 Pike has been disabled as a target language in SWIG as part of a [Pike] #1447 Pike has been disabled as a target language in SWIG as part of a
clean up to remove target languages that have been neglected/not functional. clean up to remove target languages that have been neglected/not functional.

View file

@ -129,7 +129,7 @@ It is significant to note that, while this is a vendor-specific
module, we would like to acknowledge the current and ongoing module, we would like to acknowledge the current and ongoing
work by developers in the open source lisp community that are work by developers in the open source lisp community that are
working on similar interfaces to implementation-independent working on similar interfaces to implementation-independent
foreign function interfaces (UFFI or CFFI, for example). Such foreign function interfaces (CFFI, for example). Such
work can only benefit the lisp community, and we would not work can only benefit the lisp community, and we would not
be unhappy to see some enterprising folk use this work to add be unhappy to see some enterprising folk use this work to add
to it. to it.

View file

@ -24,7 +24,6 @@
<li><a href="#Lisp_nn9">Additional Commandline Options </a> <li><a href="#Lisp_nn9">Additional Commandline Options </a>
<li><a href="#Lisp_nn10">Details on CLISP bindings</a> <li><a href="#Lisp_nn10">Details on CLISP bindings</a>
</ul> </ul>
<li><a href="#Lisp_nn11">UFFI </a>
</ul> </ul>
</div> </div>
<!-- INDEX --> <!-- INDEX -->
@ -39,7 +38,7 @@
There are more than 9 different implementations of common lisp which There are more than 9 different implementations of common lisp which
are available, all have different foreign function are available, all have different foreign function
interfaces. SWIG currently supports only the Allegro Common interfaces. SWIG currently supports only the Allegro Common
Lisp, Common Foreign Function Interface(CFFI), CLisp and UFFI Lisp, Common Foreign Function Interface(CFFI), CLisp
foreign function interfaces. foreign function interfaces.
</p> </p>
<H2><a name="Lisp_nn2">29.1 Allegro Common Lisp</a></H2> <H2><a name="Lisp_nn2">29.1 Allegro Common Lisp</a></H2>
@ -56,8 +55,8 @@
<p> <p>
CFFI, the Common Foreign Function Interface, is a portable foreign CFFI, the Common Foreign Function Interface, is a portable foreign
function interface for ANSI Common Lisp systems, similar in function interface for ANSI Common Lisp systems.
spirit to UFFI. Unlike UFFI, CFFI requires only a small set of CFFI requires only a small set of
low-level functionality from the Lisp implementation, such as low-level functionality from the Lisp implementation, such as
calling a foreign function by name, allocating foreign memory, calling a foreign function by name, allocating foreign memory,
and dereferencing pointers. and dereferencing pointers.
@ -809,8 +808,5 @@ struct bar {
</pre></div> </pre></div>
<H2><a name="Lisp_nn11">29.4 UFFI </a></H2>
</body> </body>
</html> </html>

View file

@ -140,7 +140,6 @@ Supported Target Language Options
-scilab - Generate Scilab wrappers -scilab - Generate Scilab wrappers
-sexp - Generate Lisp S-Expressions wrappers -sexp - Generate Lisp S-Expressions wrappers
-tcl - Generate Tcl wrappers -tcl - Generate Tcl wrappers
-uffi - Generate Common Lisp / UFFI wrappers
-xml - Generate XML wrappers -xml - Generate XML wrappers
Experimental Target Language Options Experimental Target Language Options

View file

@ -1467,46 +1467,6 @@ cffi_clean:
rm -f core @EXTRA_CLEAN@ rm -f core @EXTRA_CLEAN@
rm -f *.@OBJEXT@ *@SO@ rm -f *.@OBJEXT@ *@SO@
##################################################################
##### UFFI ######
##################################################################
UFFI = @UFFIBIN@
UFFI_SCRIPT=$(RUNME).lisp
uffi: $(SRCDIR_SRCS)
$(SWIG) -uffi $(SWIGOPT) -o $(ISRCS) $(INTERFACEPATH)
# $(CC) -c $(CCSHARED) $(CPPFLAGS) $(CFLAGS) $(ISRCS) $(INCLUDES) $(SRCDIR_SRCS)
# $(LDSHARED) $(CFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(LIBS) -o $(LIBPREFIX)$(TARGET)$(SO)
uffi_cpp: $(SRCDIR_SRCS)
$(SWIG) -c++ -uffi $(SWIGOPT) -o $(ICXXSRCS) $(INTERFACEPATH)
# $(CXX) -c $(CCSHARED) $(CPPFLAGS) $(CXXFLAGS) $(ICXXSRCS) $(SRCDIR_SRCS) $(SRCDIR_CXXSRCS) $(INCLUDES)
# $(CXXSHARED) $(CXXFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(LIBS) $(CPP_DLLIBS) -o $(LIBPREFIX)$(TARGET)$(SO)
# -----------------------------------------------------------------
# Run UFFI example
# -----------------------------------------------------------------
uffi_run:
$(RUNTOOL) $(UFFI) -batch -s $(UFFI_SCRIPT) $(RUNPIPE)
# -----------------------------------------------------------------
# Version display
# -----------------------------------------------------------------
uffi_version:
$(UFFI) --version
# -----------------------------------------------------------------
# Cleaning the UFFI examples
# -----------------------------------------------------------------
uffi_clean:
rm -f *_wrap* *~ .~*
rm -f core @EXTRA_CLEAN@
rm -f *.@OBJEXT@ *@SO@
################################################################## ##################################################################
##### R ###### ##### R ######
################################################################## ##################################################################

View file

@ -75,7 +75,6 @@ skip-lua = test -n "@SKIP_LUA@"
skip-allegrocl = test -n "@SKIP_ALLEGROCL@" skip-allegrocl = test -n "@SKIP_ALLEGROCL@"
skip-clisp = test -n "@SKIP_CLISP@" skip-clisp = test -n "@SKIP_CLISP@"
skip-cffi = test -n "@SKIP_CFFI@" skip-cffi = test -n "@SKIP_CFFI@"
skip-uffi = test -n "@SKIP_UFFI@"
skip-r = test -n "@SKIP_R@" skip-r = test -n "@SKIP_R@"
skip-scilab = test -n "@SKIP_SCILAB@" skip-scilab = test -n "@SKIP_SCILAB@"
skip-go = test -n "@SKIP_GO@" skip-go = test -n "@SKIP_GO@"
@ -119,7 +118,6 @@ check-aliveness:
@$(skip-csharp) || ./$(TARGET) -csharp -help @$(skip-csharp) || ./$(TARGET) -csharp -help
@$(skip-allegrocl)|| ./$(TARGET) -allegrocl -help @$(skip-allegrocl)|| ./$(TARGET) -allegrocl -help
@$(skip-clisp) || ./$(TARGET) -clisp -help @$(skip-clisp) || ./$(TARGET) -clisp -help
@$(skip-uffi) || ./$(TARGET) -uffi -help
@$(skip-cffi) || ./$(TARGET) -cffi -help @$(skip-cffi) || ./$(TARGET) -cffi -help
@$(skip-lua) || ./$(TARGET) -lua -help @$(skip-lua) || ./$(TARGET) -lua -help
@$(skip-r) || ./$(TARGET) -r -help @$(skip-r) || ./$(TARGET) -r -help
@ -150,7 +148,6 @@ check-versions: \
check-lua-version \ check-lua-version \
check-allegrocl-version \ check-allegrocl-version \
check-clisp-version \ check-clisp-version \
check-uffi-version \
check-cffi-version \ check-cffi-version \
check-r-version \ check-r-version \
check-scilab-version \ check-scilab-version \
@ -188,7 +185,6 @@ check-examples: \
check-lua-examples \ check-lua-examples \
check-allegrocl-examples \ check-allegrocl-examples \
check-clisp-examples \ check-clisp-examples \
check-uffi-examples \
check-cffi-examples \ check-cffi-examples \
check-r-examples \ check-r-examples \
check-scilab-examples \ check-scilab-examples \
@ -212,7 +208,6 @@ csharp_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/csharp/check.list)
lua_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/lua/check.list) lua_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/lua/check.list)
allegrocl_examples := allegrocl_examples :=
clisp_examples := clisp_examples :=
uffi_examples :=
cffi_examples := cffi_examples :=
r_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/r/check.list) r_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/r/check.list)
scilab_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/scilab/check.list) scilab_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/scilab/check.list)
@ -257,7 +252,6 @@ check-test-suite: \
check-lua-test-suite \ check-lua-test-suite \
check-allegrocl-test-suite \ check-allegrocl-test-suite \
check-clisp-test-suite \ check-clisp-test-suite \
check-uffi-test-suite \
check-cffi-test-suite \ check-cffi-test-suite \
check-chicken-test-suite \ check-chicken-test-suite \
check-r-test-suite \ check-r-test-suite \
@ -309,7 +303,6 @@ all-test-suite: \
all-lua-test-suite \ all-lua-test-suite \
all-allegrocl-test-suite \ all-allegrocl-test-suite \
all-clisp-test-suite \ all-clisp-test-suite \
all-uffi-test-suite \
all-cffi-test-suite \ all-cffi-test-suite \
all-chicken-test-suite \ all-chicken-test-suite \
all-r-test-suite \ all-r-test-suite \
@ -337,7 +330,6 @@ broken-test-suite: \
broken-lua-test-suite \ broken-lua-test-suite \
broken-allegrocl-test-suite \ broken-allegrocl-test-suite \
broken-clisp-test-suite \ broken-clisp-test-suite \
broken-uffi-test-suite \
broken-cffi-test-suite \ broken-cffi-test-suite \
broken-chicken-test-suite \ broken-chicken-test-suite \
broken-r-test-suite \ broken-r-test-suite \
@ -476,7 +468,7 @@ install-main:
@$(INSTALL_PROGRAM) $(TARGET) $(DESTDIR)$(BIN_DIR)/`echo $(TARGET_NOEXE) | sed '$(transform)'`@EXEEXT@ @$(INSTALL_PROGRAM) $(TARGET) $(DESTDIR)$(BIN_DIR)/`echo $(TARGET_NOEXE) | sed '$(transform)'`@EXEEXT@
lib-languages = typemaps tcl perl5 python guile java mzscheme ruby php ocaml octave \ lib-languages = typemaps tcl perl5 python guile java mzscheme ruby php ocaml octave \
chicken csharp allegrocl clisp lua cffi uffi r go d javascript javascript/jsc \ chicken csharp allegrocl clisp lua cffi r go d javascript javascript/jsc \
javascript/v8 scilab xml javascript/v8 scilab xml
lib-modules = std lib-modules = std

2
README
View file

@ -5,7 +5,7 @@ Version: 4.0.0 (in progress)
Tagline: SWIG is a compiler that integrates C and C++ with languages Tagline: SWIG is a compiler that integrates C and C++ with languages
including Perl, Python, Tcl, Ruby, PHP, Java, C#, D, Go, Lua, including Perl, Python, Tcl, Ruby, PHP, Java, C#, D, Go, Lua,
Octave, R, Scheme (Guile, MzScheme/Racket, CHICKEN), Scilab, Octave, R, Scheme (Guile, MzScheme/Racket, CHICKEN), Scilab,
Ocaml, Common Lisp (CLISP, Allegro CL, CFFI, UFFI). Ocaml, Common Lisp (CLISP, Allegro CL, CFFI).
SWIG can also export its parse tree into XML and SWIG can also export its parse tree into XML and
Lisp s-expressions. Lisp s-expressions.

View file

@ -79,7 +79,6 @@ eswig_SOURCES = CParse/cscanner.c \
Modules/swigmain.cxx \ Modules/swigmain.cxx \
Modules/tcl8.cxx \ Modules/tcl8.cxx \
Modules/typepass.cxx \ Modules/typepass.cxx \
Modules/uffi.cxx \
Modules/utils.cxx \ Modules/utils.cxx \
Modules/xml.cxx \ Modules/xml.cxx \
Preprocessor/cpp.c \ Preprocessor/cpp.c \

View file

@ -50,7 +50,6 @@ extern "C" {
Language *swig_scilab(void); Language *swig_scilab(void);
Language *swig_sexp(void); Language *swig_sexp(void);
Language *swig_tcl(void); Language *swig_tcl(void);
Language *swig_uffi(void);
Language *swig_xml(void); Language *swig_xml(void);
} }
@ -88,7 +87,7 @@ static TargetLanguageModule modules[] = {
{"-sexp", swig_sexp, "Lisp S-Expressions", Supported}, {"-sexp", swig_sexp, "Lisp S-Expressions", Supported},
{"-tcl", swig_tcl, "Tcl", Supported}, {"-tcl", swig_tcl, "Tcl", Supported},
{"-tcl8", swig_tcl, NULL, Supported}, {"-tcl8", swig_tcl, NULL, Supported},
{"-uffi", swig_uffi, "Common Lisp / UFFI", Supported}, {"-uffi", NULL, "Common Lisp / UFFI", Disabled},
{"-xml", swig_xml, "XML", Supported}, {"-xml", swig_xml, "XML", Supported},
{NULL, NULL, NULL, Disabled} {NULL, NULL, NULL, Disabled}
}; };

48
TODO
View file

@ -275,54 +275,6 @@ Mzscheme
** Add shadow class support for the Swindle system. ** Add shadow class support for the Swindle system.
Common Lisp
-----------
* Random thoughts by mkoeppe on supporting Common Lisp implementations:
There are many different Foreign Function Interfaces (FFI) for
the various CL implementations. Probably SWIG should interface
to UFFI, a least-common-denominator FFI that supports many
implementations.
Via the s-expression SWIG module we can export SWIG's parse
tree and import it into CL. It remains to check if all
relevant information is dumped (for instance, the type
information). Experimental code is available to generate
low-level UFFI declarations from this parse tree.
However, for wrapping C++, we also need to create C wrappers
because most FFIs cannot directly import C++. A CL SWIG module
could be exporting both these wrappers and UFFI declarations.
I have experimental code (not checked in yet) that does this.
This is fine for generating low-level wrappers. But how do we
support user typemaps (like converting lists and vectors to C
arrays on input)? We have to generate Lisp code that does the
conversion and then calls the low-level wrapper. If we
generate Lisp code, it should be beautiful and readable.
Therefore, we need at least a Lisp pretty printer. A Lisp
pretty printer works best when the Lisp program is represented
not as text but as Lisp data. Moreover, typemap writers will
feel very much constrained by SWIG's capabilities for
generating wrapper code, when compared to writing Lisp macros.
Thus we would need half a re-implementation of Lisp in SWIG to
make users happy.
The solution could be the following:
** Build a SWIG library (again) and load it into a Common Lisp
implementation.
The FFI declarations could be written manually, or this could
be bootstrapped via the s-expression module or the primitive
UFFI wrappers. This should be easy because SWIG's API is quite
simple.
The embedded SWIG would be driven by a CL program. High-level
typemaps would be written as Lisp programs that generate Lisp
code.
ALLEGROCL ALLEGROCL
----- -----
These first three will remove most of the warnings from most of the These first three will remove most of the warnings from most of the

View file

@ -2846,12 +2846,6 @@ SKIP_CFFI=
#fi #fi
AC_SUBST(SKIP_CFFI) AC_SUBST(SKIP_CFFI)
SKIP_UFFI=
#if test -z "$UFFIBIN" ; then
SKIP_UFFI="1"
#fi
AC_SUBST(SKIP_UFFI)
SKIP_SCILAB= SKIP_SCILAB=
if test -z "$SCILAB"; then if test -z "$SCILAB"; then
SKIP_SCILAB="1" SKIP_SCILAB="1"
@ -2978,7 +2972,6 @@ AC_CONFIG_FILES([
Examples/test-suite/allegrocl/Makefile Examples/test-suite/allegrocl/Makefile
Examples/test-suite/clisp/Makefile Examples/test-suite/clisp/Makefile
Examples/test-suite/cffi/Makefile Examples/test-suite/cffi/Makefile
Examples/test-suite/uffi/Makefile
Examples/test-suite/r/Makefile Examples/test-suite/r/Makefile
Examples/test-suite/go/Makefile Examples/test-suite/go/Makefile
Source/Makefile Source/Makefile
@ -3047,7 +3040,6 @@ test -n "$SKIP_R" || langs="${langs}r "
test -n "$SKIP_RUBY" || langs="${langs}ruby " test -n "$SKIP_RUBY" || langs="${langs}ruby "
test -n "$SKIP_SCILAB" || langs="${langs}scilab " test -n "$SKIP_SCILAB" || langs="${langs}scilab "
test -n "$SKIP_TCL" || langs="${langs}tcl " test -n "$SKIP_TCL" || langs="${langs}tcl "
test -n "$SKIP_UFFI" || langs="${langs}uffi "
echo " echo "
The SWIG test-suite and examples are configured for the following languages: The SWIG test-suite and examples are configured for the following languages: