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,
PHP, C#, Go, Java, Javascript, Lua, Scheme (Guile, MzScheme, CHICKEN),
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
include generation of scripting language extension modules, rapid
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)
===========================
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
[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.

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
work by developers in the open source lisp community that are
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
be unhappy to see some enterprising folk use this work to add
to it.

View file

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

View file

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

View file

@ -1467,46 +1467,6 @@ cffi_clean:
rm -f core @EXTRA_CLEAN@
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 ######
##################################################################

View file

@ -75,7 +75,6 @@ skip-lua = test -n "@SKIP_LUA@"
skip-allegrocl = test -n "@SKIP_ALLEGROCL@"
skip-clisp = test -n "@SKIP_CLISP@"
skip-cffi = test -n "@SKIP_CFFI@"
skip-uffi = test -n "@SKIP_UFFI@"
skip-r = test -n "@SKIP_R@"
skip-scilab = test -n "@SKIP_SCILAB@"
skip-go = test -n "@SKIP_GO@"
@ -119,7 +118,6 @@ check-aliveness:
@$(skip-csharp) || ./$(TARGET) -csharp -help
@$(skip-allegrocl)|| ./$(TARGET) -allegrocl -help
@$(skip-clisp) || ./$(TARGET) -clisp -help
@$(skip-uffi) || ./$(TARGET) -uffi -help
@$(skip-cffi) || ./$(TARGET) -cffi -help
@$(skip-lua) || ./$(TARGET) -lua -help
@$(skip-r) || ./$(TARGET) -r -help
@ -150,7 +148,6 @@ check-versions: \
check-lua-version \
check-allegrocl-version \
check-clisp-version \
check-uffi-version \
check-cffi-version \
check-r-version \
check-scilab-version \
@ -188,7 +185,6 @@ check-examples: \
check-lua-examples \
check-allegrocl-examples \
check-clisp-examples \
check-uffi-examples \
check-cffi-examples \
check-r-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)
allegrocl_examples :=
clisp_examples :=
uffi_examples :=
cffi_examples :=
r_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/r/check.list)
scilab_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/scilab/check.list)
@ -257,7 +252,6 @@ check-test-suite: \
check-lua-test-suite \
check-allegrocl-test-suite \
check-clisp-test-suite \
check-uffi-test-suite \
check-cffi-test-suite \
check-chicken-test-suite \
check-r-test-suite \
@ -309,7 +303,6 @@ all-test-suite: \
all-lua-test-suite \
all-allegrocl-test-suite \
all-clisp-test-suite \
all-uffi-test-suite \
all-cffi-test-suite \
all-chicken-test-suite \
all-r-test-suite \
@ -337,7 +330,6 @@ broken-test-suite: \
broken-lua-test-suite \
broken-allegrocl-test-suite \
broken-clisp-test-suite \
broken-uffi-test-suite \
broken-cffi-test-suite \
broken-chicken-test-suite \
broken-r-test-suite \
@ -476,7 +468,7 @@ install-main:
@$(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 \
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
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
including Perl, Python, Tcl, Ruby, PHP, Java, C#, D, Go, Lua,
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
Lisp s-expressions.

View file

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

View file

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

48
TODO
View file

@ -275,54 +275,6 @@ Mzscheme
** 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
-----
These first three will remove most of the warnings from most of the

View file

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