git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@48 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2132 lines
83 KiB
Text
2132 lines
83 KiB
Text
SWIG (Simplified Wrapper and Interface Generator)
|
|
|
|
1/11/00 : Dave Beazley & Dustin Mitchell
|
|
Completely reorganized the SWIG directory structure. The
|
|
basic organization is now:
|
|
|
|
Source/ SWIG source code
|
|
Lib/ SWIG library files (swig_lib)
|
|
Doc/ Documentation
|
|
Examples/ Examples
|
|
|
|
More directories will be added as needed.
|
|
|
|
12/08/99: Loic Dachary (loic@senga.org)
|
|
Enhanced package handling for perl5 and c++.
|
|
|
|
With new option -hide Foo::Bar, every perl5 object (Frob) is
|
|
qualified by Foo::Bar::Frob. The package name is solely used
|
|
to encapsulate C/C++ wrappers output in <module>_wrap.c and the
|
|
corresponding perl package in <module>.pm. Note that a package
|
|
name may contain :: (Frob::Nitz) and will be relative to the
|
|
package name provided by -hide (Foo::Bar::Frob::Nitz).
|
|
|
|
In *_wrap.c, SWIG_init macro is used. Was previously defined
|
|
but not used and simplifies code.
|
|
|
|
Added typemap(perl5,perl5in) and typemap(perl5,perl5out) that
|
|
do the equivalent of typemap(perl5,in) and typemap(perl5,out)
|
|
but contain perl code and applies to wrappers generated by
|
|
-shadow.
|
|
|
|
Lacking proper regression tests I used
|
|
Examples/perl5/{c++,constraint,defarg,except,
|
|
graph/graph[1234],multinherit,nested,shadow,simple,tree,
|
|
typemaps/{argv,argv2,arraymember,database,file,ignore,integer,
|
|
output,passref,reference,return}}/. I ran swig with and without
|
|
the patches, diff the generatedsources, run the .pl files
|
|
and checked that the results are identical. In all those examples
|
|
I had no error.
|
|
|
|
11/21/99: Modified the Tcl module to provide full variable linking capabilities
|
|
to all datatypes. In previous versions, a pair of accessor functions
|
|
were created for datatypes incompatible with the Tcl_LinkVar() function.
|
|
Now, we simply use variable traces to support everything. This may
|
|
break scripts that rely upon the older behavior.
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
11/21/99: Added slight tweak to wrapper generator to collect local variables
|
|
of similar type. Produces somewhat more compact wrapper code.
|
|
|
|
11/20/99: Modified the Tcl module to use SWIG_GetArgs() to parse
|
|
arguments. This is a technique borrowed from Python in which
|
|
arguments are converted using a format string convention similiar
|
|
to fprintf(). This results in a *substantial* reduction in the
|
|
size of the resulting wrapper code with only a modest runtime overhead
|
|
in going through the extra conversion function.
|
|
|
|
11/13/99: Completely rewrote the class/structure generation code for the
|
|
Tcl module. Now, a small set of runtime functions are used
|
|
to implement the functionality for all classes (instead of a
|
|
massive amount of runtime code being generated for each class).
|
|
Class specific information is simply encoded in a series of
|
|
static tables. This results in a *HUGE* reduction in wrapper
|
|
code size--especially for C++.
|
|
|
|
11/13/99: Removed the -tcl (Tcl 7.x) module. Tcl 8.0 is now several
|
|
years old and the defacto standard--no real reason to keep
|
|
supporting the old version at this point.
|
|
|
|
11/13/99: Cleaned up -c option for Python module. The pyexp.swg file
|
|
is now gone.
|
|
|
|
11/13/99: Fixed external declarations to work better with static linking
|
|
on Windows. Static linking should now be possible by defining
|
|
the -DSTATIC_LINK option on the command line. Patch contributed
|
|
by Alberto Fonseca.
|
|
|
|
11/5/99 : Fixed an obscure code generation bug related to the generation
|
|
of default constructors. Bug reported by Brad Clements.
|
|
|
|
11/5/99 : Fixed a few memory problems found by purify.
|
|
|
|
11/5/99 : Officially deprecated the -htcl, -htk, and -plugin options
|
|
from the Tcl and Tcl8 modules.
|
|
|
|
10/26/99: Removed unused variable from python/typemaps.i. Patch
|
|
contributed by Keith Davidson.
|
|
|
|
8/16/99 : Added _WIN32 symbol to libraries to better support Windows.
|
|
|
|
8/16/99 : Deprecated the Perl4 module. It is no longer included in the
|
|
distribution and no longer supported. In the entire 3 years SWIG
|
|
has been around I never received a single comment about it so I'm
|
|
assuming no one will miss it...
|
|
|
|
8/16/99 : Modified the type-checking code to register type mappings using a
|
|
table instead of repeated calls to SWIG_RegisterMapping(). This
|
|
reduces the size of the module initialization function somewhat.
|
|
|
|
8/15/99 : Cleaned up the pointer type-checking code in the Tcl module.
|
|
|
|
8/15/99 : Many changes to the libraries to support runtime libraries.
|
|
|
|
8/13/99 : Eliminated C++ compiler warning messages about extern "C" linkage.
|
|
|
|
8/13/99 : Some cleanup of Python .swg files to better support runtime libraries
|
|
on Windows.
|
|
|
|
8/13/99 : Modified the %pragma directive to attach pragmas declared inside
|
|
a class definition to the class itself. For example:
|
|
|
|
class foo {
|
|
...
|
|
%pragma(python) addtomethod = "insert:print `hello world'"
|
|
...
|
|
}
|
|
|
|
Most people don't need to worry about how this works. For people
|
|
writing backend modules, class-based pragmas work like this:
|
|
|
|
lang->cpp_open_class() // Open a class
|
|
lang->cpp_pragma() // Supply pragmas
|
|
... // Emit members
|
|
|
|
lang->cpp_close_class() // Close the class
|
|
|
|
All of the pragmas are passed first since they might be used to
|
|
affect the code generation of other members. Please see
|
|
the Python module for an example. Patches contributed
|
|
by Robin Dunn.
|
|
|
|
8/13/99 : Patch to Python shadow classes to eliminate ignored
|
|
exception errors in destructors. Patch contributed
|
|
by Robin Dunn.
|
|
|
|
8/11/99 : Minor patch to swig_lib/python/swigptr.swg (added SWIGSTATIC
|
|
declaration). Patch contributed by Lyle Johnson.
|
|
|
|
8/11/99 : Added FIRSTKEY/NEXTKEY methods to Perl5 shadow classes
|
|
Patch contributed by Dennis Marsa.
|
|
|
|
8/11/99 : Modified Python module so that NULL pointers are returned
|
|
and passed as 'None.' Patch contributed by Tal Shalif.
|
|
|
|
8/10/99 : Fixed missing 'int' specifiers in various places.
|
|
|
|
8/10/99 : Added Windows makefile for Runtime libraries. Contributed
|
|
by Bob Techentin.
|
|
|
|
8/10/99 : Fixed minor problem in Python runtime makefile introduced
|
|
by keyword arguments.
|
|
|
|
8/8/99 : Changed $target of perl5(out) typemap from ST(0) to
|
|
ST(argvi). Patch contributed by Geoffrey Hort.
|
|
|
|
8/8/99 : Fixed bug in typemap checking related to the ANY keyword
|
|
in arrays and ignored arguments. Error reported by
|
|
Geoffrey Hort.
|
|
|
|
8/8/99 : %enabledoc and %disabledoc directives can now be used
|
|
inside class/structure definitions. However, no check
|
|
is made to see if they are balanced (i.e., a %disabledoc
|
|
directive inside a class does not have to have a matching
|
|
%enabledoc in the same class).
|
|
|
|
8/8/99 : Keyword argument handling is now supported in the Python
|
|
module. For example:
|
|
|
|
int foo(char *bar, int spam, double x);
|
|
|
|
Can be called from Python as
|
|
|
|
foo(x = 3.4, bar="hello", spam=42)
|
|
|
|
To enable this feature, run SWIG with the '-keyword' command
|
|
line option. Mixing keyword and default arguments
|
|
should work as well. Unnamed arguments are assigned names
|
|
such as "arg1", "arg2", etc...
|
|
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
Functions with duplicate argument names such as
|
|
bar(int *OUTPUT, int *OUTPUT) will likely cause problematic
|
|
wrapper code to be generated. To fix this, use different
|
|
names or use %apply to map typemaps to alternate names.
|
|
|
|
8/8/99 : Handling of the 'this' pointer has been changed in Python shadow
|
|
classes. Previously, dereferencing of '.this' occured in the
|
|
Python shadow class itself. Now, this step occurs in the C
|
|
wrappers using the following function:
|
|
|
|
SWIG_GetPtrObj(PyObject *, void **ptr, char *type)
|
|
|
|
This function can accept either a string containing a pointer
|
|
or a shadow class instance with a '.this' attribute of
|
|
appropriate type. This change allows the following:
|
|
|
|
1. The real shadow class instance for an object is
|
|
passed to the C wrappers where it can be examined/modified
|
|
by typemaps.
|
|
|
|
2. Handling of default/keyword arguments is now greatly
|
|
simplified.
|
|
|
|
3. The Python wrapper code is much more simple.
|
|
|
|
Plus, it eliminated more than 300 lines of C++ code in the
|
|
Python module.
|
|
|
|
*** CAVEAT : This requires the abstract object interface.
|
|
It should work with Python 1.4, but probably nothing older
|
|
than that.
|
|
|
|
|
|
8/8/99 : Fixed handling of "const" and pointers in classes. In particular,
|
|
declarations such as
|
|
|
|
class foo {
|
|
...
|
|
const char *msg;
|
|
const int *iptr;
|
|
}
|
|
|
|
are handled as assignable variables as opposed to constant
|
|
values (this is the correct behavior in C/C++). Note:
|
|
declarations such as "char *const msg" are still unsupported.
|
|
Constants declared at the global level using const are also
|
|
broken (because I have a number of interfaces that rely upon
|
|
this behavior).
|
|
|
|
*** POTENTIAL INCOMPATIBILITY *** This may break interfaces that
|
|
mistakenly treat 'const char *' types as constant values.
|
|
|
|
8/8/99 : Modified the parser to support bit-fields. For example:
|
|
|
|
typedef struct {
|
|
unsigned int is_keyword : 1;
|
|
unsigned int is_extern : 1;
|
|
unsigned int is_static : 1;
|
|
} flags;
|
|
|
|
Bit-fields can only be applied to integer types and their
|
|
are other restrictions. SWIG performs no such type-checking
|
|
(although the C compiler will catch problems when it tries to
|
|
compile the wrapper code).
|
|
|
|
8/8/99 : Removed trailing space of $basetype substitution in typemaps.
|
|
This is to allow things like this:
|
|
|
|
%typemap(python, argout) spam** OUTPUT{
|
|
...
|
|
char* a = "$basetype_p";
|
|
...
|
|
}
|
|
|
|
(Patch suggested by Nathan Dunfield).
|
|
|
|
6/22/99 : Made a very slight tweak to the Perl5 shadow class
|
|
code that allows typemaps to alter the return type
|
|
of objects (to support polymorphic types). Patch
|
|
contributed by Drake Diedrich.
|
|
|
|
4/8/99 : Fixed null pointer handling bug in Perl module.
|
|
Patch contributed by Junio Hamano.
|
|
|
|
3/17/99 : Fixed bug in perl5ptr.swg for ActiveState Perl.
|
|
Patch contributed by Greg Anderson.
|
|
|
|
2/27/99 : Eliminated segmentation fault when Swig runs on
|
|
empty files.
|
|
|
|
2/27/99 : Added patch to Guile module to eliminate unused
|
|
variables. Contributed by Mike Simons.
|
|
|
|
2/27/99 : Fixed problem with %addmethods returning references.
|
|
|
|
2/27/99 : Fixed Runtime/Makefile. Patch contributed by
|
|
Mike Romberg.
|
|
|
|
2/27/99 : Incorporated patches to the type-checker.
|
|
|
|
2/27/99 : Fixed problem with -exportall switch and shadow classes
|
|
in Perl5 module. Patch contributed by Dennis Marsa.
|
|
|
|
2/27/99 : Modified Perl5 module to recognize 'undef' as a NULL char *.
|
|
Patch contributed by Junio Hamano.
|
|
|
|
2/27/99 : Fixed the Perl5 module to support the newer versions of
|
|
ActiveState Perl for Win32.
|
|
|
|
2/27/99 : Fixed the include order of files specified with the
|
|
-I option.
|
|
|
|
Version 1.1 Patch 5 (February 5, 1998)
|
|
======================================
|
|
2/4/98 : Fixed a bug in the configure script when different package
|
|
locations are specified (--with-tclincl, etc...).
|
|
|
|
2/2/98 : Fixed name-clash bug related to the switch to C macros for accessor
|
|
functions. The new scheme did not work correctly for objects
|
|
with members such as 'obj', 'val', etc... Fixed the bug by
|
|
appending the word 'swig' to macro argument names. Patch
|
|
contributed by Rudy Albachten.
|
|
|
|
2/2/98 : Slight fix to the Perl5 module to eliminate warning messages
|
|
about 'varname used only once : possible typo'. Fix
|
|
contributed by Rudy Albachten.
|
|
|
|
1/9/98 : Fixed a bug in the Perl 5 module related to the creation of
|
|
constants and shadow classes.
|
|
|
|
1/9/98 : Fixed linking bug with Python 1.5 embed.i library file.
|
|
|
|
Version 1.1 Patch 4 (January 4, 1998)
|
|
=====================================
|
|
|
|
1/4/98 : Changed structured of the Examples directory to be more friendly
|
|
to Borland C++.
|
|
|
|
1/4/98 : Added the function Makefile.win.bc for compiling the examples
|
|
under Borland 5.2.
|
|
|
|
1/4/98 : Slight change to the perl5 module and C++ compilation. The
|
|
<math.h> library is now included before any Perl headers
|
|
because Perl the extern "C" linkage of math.h screws alot
|
|
of things up (especially on Windows).
|
|
|
|
1/2/98 : Change to the Python module that reduces the number of constants
|
|
created by C++ classes, inheritance, and shadow classes. This
|
|
modification may introduce a few slight incompatibilities if
|
|
you attempt to use the non-shadow class interface with shadow
|
|
classes enabled. Patch contributed by Mike Romberg.
|
|
|
|
1/2/98 : Support for Tcl 8.0 namespaces has been added. This *replaces*
|
|
the original SWIG mechanism that assumed [incr Tcl] namespaces.
|
|
To use namespaces, simply run SWIG with the following options
|
|
|
|
swig -tcl -namespace foo.i
|
|
|
|
This places everything in a namespace that matches
|
|
the module name
|
|
|
|
swig -tcl -namespace -prefix bar foo.i
|
|
|
|
This places everything in the namespace 'bar'
|
|
|
|
The use of namespaces is new in Tcl 8.0. However, the wrapper code
|
|
generated by SWIG will still work with all versions of Tcl newer
|
|
than and including Tcl 7.3/Tk3.6 even if the -namespace option is
|
|
used.
|
|
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
This change may break existing applications that relied on the
|
|
-prefix and -namespace options.
|
|
|
|
1/2/98 : Added the following constants to the Tcl wrapper code
|
|
|
|
SWIG_name - Name of the SWIG module
|
|
SWIG_prefix - Prefix/namespace appended to command names
|
|
SWIG_namespace - Name of the namespace
|
|
|
|
SWIG library writers can use these to their advantages.
|
|
|
|
1/2/98 : Fixed a bug in the Tcl8 module related to the creation of
|
|
pointer constants (the function SWIG_MakePtr was missing from
|
|
the wrapper code).
|
|
|
|
1/2/98 : Added the consthash.i library file to the Tcl and Tcl8 modules.
|
|
|
|
1/1/98 : Changed and cleaned up the Python typemaps.i file. The following
|
|
significant changes were made :
|
|
|
|
1. The OUTPUT typemap now returns Python tuples instead of
|
|
lists. Lists can be returned as before by using the
|
|
L_OUTPUT type. If compatibility with older versions
|
|
is needed, run SWIG with the -DOUTPUT_LIST option.
|
|
|
|
2. The BOTH typemap has been renamed to INOUT. For backwards
|
|
compatibility, the "BOTH" method still exists however.
|
|
|
|
3. Output typemaps now generate less code than before.
|
|
|
|
Changes to typemaps.i may break existing Python scripts that assume
|
|
output in the form of a list.
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
12/31/97: Fixed long overdue problems with the testing scripts and certain
|
|
makefiles that required the use of the bash shell. Everything should
|
|
work properly with the standard Bourne shell (sh) now.
|
|
|
|
12/31/97: Modified typemaps to allow $basetype as a valid local variable.
|
|
This allows for all sorts of bizarre hackish typemaps that
|
|
do cool things. Patch contributed by Dominique Dumont.
|
|
|
|
12/31/97: Switched accessor functions generated for member data to
|
|
C preprocessor macros (except in cases involving typemaps
|
|
or char *).
|
|
|
|
12/31/97: Fixed a bug related to C++ member data involving references.
|
|
|
|
12/31/97: Changed accessor functions for C++ member functions to
|
|
preprocessor macros. This cleans up the wrapper code
|
|
and results in fewer function definitions.
|
|
|
|
12/31/97: Changed the default C constructor to use calloc() instead
|
|
of malloc()
|
|
|
|
12/30/97: Changed the creation of constants in the Perl5 module.
|
|
For all practical purposes, they should work in exactly the
|
|
same way as before except that they now require much less
|
|
wrapper code. Modules containing large numbers of
|
|
constants may see greater than a 50% reduction in wrapper
|
|
code size.
|
|
|
|
12/30/97: Modified the Python module to be more intelligent about the
|
|
creation of constants. SWIG no longer generates redundant
|
|
global variables and the size of the module initialization
|
|
function should be reduced. (Many thanks to Jim Fulton).
|
|
|
|
12/29/97: Fixed a bug in C++ code generation related to member functions,
|
|
default arguments, and references.
|
|
|
|
12/29/97: Fixed configure script and a few makefiles to support Python 1.5
|
|
|
|
12/29/97: Added 'embed15.i' library file. This file should be used to
|
|
staticly link versions of Python 1.5. To make it the default,
|
|
simply copy 'swig_lib/python/embed15.i' to 'swig_lib/python/embed.i'
|
|
|
|
Version 1.1 Patch 3 (November 24, 1997)
|
|
========================================
|
|
|
|
11/23/97: Fixed a bug in the Perl5 module with shadow classes and
|
|
static class functions that return class instances.
|
|
Note : The fix for this bug requires a slight restructuring of
|
|
of the .pm files created by SWIG.
|
|
|
|
11/23/97: Fixed a bug in the Tcl/Tcl8 modules related to variable linking
|
|
of character arrays. If you declared a global variable 'char foo[10]',
|
|
the generated wrapper code would either cause a segmentation fault
|
|
immediately upon loading or weird memory corruption elsewhere.
|
|
This should now be fixed although character arrays can only be
|
|
read-only.
|
|
|
|
11/23/97: Fixed a bug with the %import directive that caused it to
|
|
fail if files were imported from directories other than
|
|
the current working directory.
|
|
|
|
11/23/97: Fixed incorrect diagnostic message in the ASCII documentation
|
|
module.
|
|
|
|
11/23/97: Changed the behavior of the -o option when used with shadow
|
|
classes. If -o was used to specify both the pathname and filename
|
|
of SWIG's output such as
|
|
|
|
swig -o /home/swig/wrapper.c -shadow -perl5 foo.i
|
|
|
|
The wrapper code would be placed the file specified with -o,
|
|
but the .pm file and documentation would be placed in the
|
|
directory where SWIG was run. Now, these files are placed
|
|
in the same directory as the file specified with the -o option.
|
|
This change is also needed for proper operation on the
|
|
Macintosh.
|
|
|
|
11/23/97: Added a 'this()' method to Perl5 shadow classes. This can
|
|
be used to return the normal pointer value from a shadow
|
|
class that is represented as a tied hash. To use just
|
|
invoke as a method like this :
|
|
|
|
$l = new List; # Create an object
|
|
$ptr = $l->this(); # Get the normal pointer value
|
|
|
|
*** NEW FEATURE ***
|
|
|
|
11/23/97: Fixed the Tcl 8 pointer.i library file (which was completely
|
|
broken in 1.1p2).
|
|
|
|
11/23/97: Modified the Perl5 type-checker to fix a few problems
|
|
with global variables of pointer types and to allow
|
|
tied hashes to be used interchangably with normal
|
|
pointer values.
|
|
|
|
11/23/97: Modified the typemap mechanism to allow output
|
|
typemaps of type 'void'. These were ignored previously,
|
|
but now if you specify,
|
|
|
|
%typemap(lang,out) void {
|
|
... return a void ...
|
|
}
|
|
|
|
You can change or assign a return value to the function.
|
|
|
|
11/23/97: Fixed processing of 'bool' datatypes in the Python module.
|
|
|
|
11/23/97: Fixed minor parsing error with C++ initializers. For example,
|
|
|
|
class B : public A {
|
|
public:
|
|
B() : A() { ... };
|
|
...
|
|
}
|
|
|
|
11/23/97: Fixed the Tcl8 module so that C functions that call back into
|
|
Tcl don't corrupt the return result object (SWIG was gathering
|
|
the result object too early which leads to problems if subsequent
|
|
Tcl calls are made).
|
|
|
|
11/23/97: Fixed a code generation bug in the Python module when two or
|
|
more output parameters were used as the first arguments of a
|
|
function. For example :
|
|
|
|
%include typemaps.i
|
|
void foo(double *OUTPUT, double *OUTPUT, double a);
|
|
|
|
Previously, doing this resulted in the creation of an
|
|
extraneous comma in the output, resulting in a C syntax error.
|
|
|
|
11/22/97: Fixed a bug when template handling that was stripping whitespace
|
|
around nested templates. For example :
|
|
|
|
Foo<Bar<double> >
|
|
|
|
was getting munged into Foo<Bar>> which is a syntax error in
|
|
in the C++ compiler.
|
|
|
|
11/22/97: Fixed bugs in the Borland C++ makefiles.
|
|
|
|
11/22/97: Fixed memory corruption bug when processing integer
|
|
arguments in Tcl8 module.
|
|
|
|
11/21/97: Fixed a bug in the Runtime/Makefile related to Tcl 8.
|
|
|
|
11/21/97: Fixed a bug with the %new directive and Perl5 shadow classes.
|
|
No longer generates a perl syntax error.
|
|
|
|
11/9/97 : Changed a strncpy() to strcpy() in the pointer type-checker.
|
|
This results in a substantial performance improvement in
|
|
type-checking.
|
|
|
|
10/29/97: Fixed a bug in the code generation of default arguments and
|
|
user-defined types. For example :
|
|
|
|
void foo(Vector a, Vector b = d);
|
|
|
|
should now work properly.
|
|
|
|
Version 1.1 Patch 2 (September 4, 1997)
|
|
=======================================
|
|
9/4/97 : Fixed problem with handling of virtual functions that
|
|
was introduced by some changes in the C++ module.
|
|
|
|
Version 1.1 Patch 1 (August 27, 1997)
|
|
=====================================
|
|
|
|
8/26/97 : Fixed compilation and run-time bugs with Tcl 8.0 final.
|
|
|
|
8/21/97 : Fixed code generation bug with arrays appearing as arguments
|
|
to C++ member functions. For example :
|
|
|
|
class Foo {
|
|
public:
|
|
void Bar(int a[20][20]);
|
|
};
|
|
|
|
There is still a bug using arrays with added methods
|
|
however.
|
|
|
|
8/20/97 : Fixed a bug with generating the code for added methods
|
|
involving pass-by-value.
|
|
|
|
8/19/97 : Modified the typemapper to substitute the '$arg' value
|
|
when declaring local variables. For example :
|
|
|
|
%typemap(in) double * (double temp_$arg) {
|
|
... do something ...
|
|
}
|
|
|
|
When applied to a real function such as the following :
|
|
|
|
void foo(double *a, double *b, double *result);
|
|
|
|
three local variables will be created as follows :
|
|
|
|
double temp_a;
|
|
double temp_b;
|
|
double temp_result;
|
|
|
|
This can be used when writing multiple typemaps that need
|
|
to access the same local variables.
|
|
|
|
|
|
7/27/97 : Fixed a variety of problems with the %apply directive and arrays.
|
|
The following types of declarations should now work :
|
|
|
|
%apply double [ANY] { Real [ANY] };
|
|
%apply double [4] { double [10] };
|
|
|
|
A generic version of apply like this :
|
|
|
|
%apply double { Real };
|
|
|
|
should now work--even if arrays involving doubles and Reals are
|
|
used later.
|
|
|
|
7/27/97 : Changed warning message about "Array X has been converted to Y" to
|
|
only appear if running SWIG in verbose mode.
|
|
|
|
7/27/97 : Added the variables $parmname and $basemangle to the typemap
|
|
generator. $parmname is the name of the parameter used
|
|
when the typemap was matched. It may be "" if no parameter
|
|
was used. $basemangle is a mangled version of the base
|
|
datatype. Sometimes used for array handling.
|
|
|
|
7/27/97 : Changed the behavior of output arguments with Python shadow classes.
|
|
Originally, if a function returned an object 'Foo', the shadow class
|
|
mechanism would create code like this :
|
|
|
|
def return_foo():
|
|
val = FooPtr(shadowc.return_foo())
|
|
val.this = 1
|
|
return val
|
|
|
|
The problem with this is that typemaps allow a user to redefine
|
|
the output behavior of a function--as a result, we can no longer
|
|
make any assumptions about the return type being a pointer or
|
|
even being a single value for that matter (it could be a list,
|
|
tuple, etc...). If SWIG detects the use of output typemaps
|
|
(either "out" or "argout") it returns the result unmodified like
|
|
this :
|
|
|
|
def return_foo():
|
|
val = shadowc.return_foo()
|
|
return val
|
|
|
|
In this case, it is up to the user to figure out what to do
|
|
with the return value (including the possibility of converting it
|
|
into a Python class).
|
|
|
|
7/26/97 : Fixed a parsing problem with types like 'unsigned long int',
|
|
'unsigned short int', etc...
|
|
|
|
7/24/97 : Minor bug fix to Tcl 8 module to parse enums properly. Also
|
|
fixed a memory corruption problem in the type-checker.
|
|
(patch contributed by Henry Rowley.
|
|
|
|
7/24/97 : Added Python-tuple typemaps contributed by Robin Dunn.
|
|
|
|
7/24/97 : Incorporated some changes to the Python module in support of
|
|
Mark Hammond's COM support. I'm not entirely sure they
|
|
work yet however. Needs documentation and testing.
|
|
|
|
7/24/97 : Fixed code generation bugs when structures had array members
|
|
and typemaps were used. For example :
|
|
|
|
%typemap(memberin) double [20][20] {
|
|
... get a double [20][20] ...
|
|
}
|
|
struct Foo {
|
|
double a[20][20];
|
|
}
|
|
|
|
Originally, this would generate a compiler-type error when
|
|
the wrapper code was compiled. Now, a helper function like
|
|
this is generated :
|
|
|
|
double *Foo_a_set(Foo *a, double val[20][20]) {
|
|
... memberin typemap here ...
|
|
return (double *) val;
|
|
}
|
|
|
|
When writing typemaps, one can assume that the source variable
|
|
is an array of the *same* type as the structure member. This
|
|
may break some codes that managed to work around the array bug.
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
7/13/97 : Fixed bug in Perl5 module when using C global variables that
|
|
are pointers. When used in function calls and other operations,
|
|
the value of the pointer would be invalid---causing core
|
|
dumps and other problems. SWIG implements global variables
|
|
using Perl magic variables. As it turns out, the error
|
|
was caused by the fact that the pointer-extraction code
|
|
was somehow bypassing the procedure used to resolve magical
|
|
variables (hence, leaving the value undefined). To fix
|
|
the problem, SWIG now explicitly resolves magic before
|
|
extracting pointer values.
|
|
|
|
7/12/97 : Eliminated the last remnants of free() and malloc() from
|
|
the SWIG compiler.
|
|
|
|
7/12/97 : Fixed parsing problems with typemaps involving arrays and
|
|
temporary variables of arrays. Also made it possible for
|
|
SWIG to handle typemaps like this :
|
|
|
|
%typemap(in) double [ANY] (double temp[$dim0]) {
|
|
... store data in temp[$dim0] ...
|
|
}
|
|
|
|
Not only does this typemap match any double [] array, it
|
|
creates a local variable with precisely the right dimensions.
|
|
(ie. $dim0 gets filled in with the real number of dimensions).
|
|
Of course, off the record, this will be a way to add more
|
|
functionality to the typemaps.i libraries.
|
|
|
|
7/9/97 : Fixed some problems with Perl5, static linking, and shadow
|
|
classes. When statically linking multiple modules together, write
|
|
a top-level interface file like this when shadow classes are not
|
|
used :
|
|
|
|
%module swig, foo, bar, glob;
|
|
%include perlmain.i
|
|
|
|
When shadow classes are used, the module names have an extra 'c'
|
|
appended so it should read as :
|
|
|
|
%module swig, fooc, barc, globc;
|
|
%include perlmain.i
|
|
|
|
When linking multiple modules, consider using the SWIG runtime
|
|
library.
|
|
|
|
7/8/97 : Incorporated fixed versions of the Borland C++ Makefiles.
|
|
|
|
7/8/97 : First cut at trying to eliminate excessive compiler warnings.
|
|
As it turns out, alot of warnings go away if you just make
|
|
declarations like this
|
|
|
|
clientData = clientData;
|
|
|
|
in the resulting wrapper code. Most compilers should just
|
|
ignore this code (at least would can hope).
|
|
|
|
7/8/97 : Fixed bizarre code generation bug with typemaps and C++ classes.
|
|
In some cases, typemaps containing printf formatting strings such as
|
|
|
|
%typemap(memberout) int * {
|
|
printf("%d",42);
|
|
}
|
|
|
|
Would generate completely bogus code with garbage replacing
|
|
the '%d'. Caused by one faulty use of printf (wasn't able to find
|
|
any other occurences).
|
|
|
|
7/7/97 : Fixed bug in Python shadow class generation with non-member
|
|
functions that are returning more than one value.
|
|
|
|
7/7/97 : Incorporated modifications to make SWIG work with Guile 1.2.
|
|
Still need to test it out, but it is rumored to work.
|
|
|
|
7/2/97 : Fixed some bugs related to output arguments and Python shadow
|
|
classes. If an output argument is detected, SWIG assumes
|
|
that the result is a list and handles it appropriately.
|
|
If the normal return type of an function is an object,
|
|
it will be converted into a shadow class as before, but
|
|
with the assumption that it is the first element of a
|
|
list. *** NOTE : This behavior has been subsequently changed ***
|
|
|
|
6/29/97 : Changed EXPORT to SWIGEXPORT in all of the language modules.
|
|
Should provide better compatibility with Windows.
|
|
|
|
6/29/97 : Modified Python shadow classes so that output arguments
|
|
work correctly (when typemaps are used).
|
|
|
|
Version 1.1 (June 24, 1997)
|
|
===========================
|
|
|
|
6/24/97 : Fixed Objective-C constructor bug when working with Perl5
|
|
shadow classes.
|
|
|
|
6/23/97 : Fixed some parsing problems with Objective-C. Declarations
|
|
such as the following should work now :
|
|
|
|
- foo : (int) a with: (int) b;
|
|
|
|
6/22/97 : Added SWIG Runtime library. This library contains
|
|
the SWIG pointer type-checker and support functions
|
|
that are normally included in every module. By using
|
|
the library, it is easier to work with multiple SWIG
|
|
generated modules.
|
|
|
|
6/22/97 : Fixed minor bug in Perl5 module related to static linking
|
|
of multiple modules.
|
|
|
|
6/22/97 : Fixed some bugs with the %import directive. When used with
|
|
Perl5 shadow classes, this generates a 'require' statement
|
|
to load in external modules.
|
|
|
|
6/22/97 : Added -swiglib option. This prints out the location of the
|
|
SWIG library and exits. This option is only really useful to
|
|
configuration tools that are looking for SWIG and its library
|
|
location (e.g. autoconf, configure, etc...).
|
|
|
|
6/21/97 : Fixed export bug with Perl5.004 on Windows-NT.
|
|
|
|
6/20/97 : Minor change to code generation of class/structure members in
|
|
order to work better with typemaps. Should have no noticable
|
|
impact on existing SWIG modules.
|
|
|
|
6/19/97 : Added -t option. This allows SWIG to load a typemap file before
|
|
processing any declarations. For example :
|
|
|
|
swig -t typemaps.i -python example.i
|
|
|
|
At most, only one typemap file can be specified in this manner.
|
|
*** NEW FEATURE ***
|
|
|
|
6/18/97 : Need a Makefile fast? Type
|
|
|
|
swig [-tcl, -perl5, -python] -co Makefile
|
|
|
|
and you will get a Makefile specific to that target language.
|
|
You just need to modify it for your application and you're
|
|
ready to run.
|
|
|
|
6/18/97 : Completed the -ci option. This option checks a file into the
|
|
SWIG library. It should be used in conjunction with a
|
|
language option. For example :
|
|
|
|
swig -tcl -ci foobar.i
|
|
|
|
Checks the file foobar.i into the Tcl part of the library.
|
|
In order to check a file into the general library (accessible
|
|
to all languages modules), do the following
|
|
|
|
swig -ci -o ../foobar.i foobar.i
|
|
|
|
(Admittedly this looks a little strange but is unavoidable).
|
|
The check-in option is primarily designed for SWIG maintenance
|
|
and library development. The command will fail if the user does
|
|
not have write permission to the SWIG library. Third party library
|
|
extensions can easily install themselves by simply providing
|
|
a shell script that uses 'swig -ci' to install the appropriate
|
|
library files. It is not necessary to know where the SWIG library
|
|
is located if you use this mechanism.
|
|
*** NEW FEATURE ***
|
|
|
|
6/16/97 : Fixed a bug in shadow class generation when %name() was applied
|
|
to a class definition. Unfortunately, fixing the bug required
|
|
a change in the Language C API by adding an extra argument to
|
|
the Language::cpp_class_decl() function. This may break
|
|
SWIG C++ extensions.
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
6/15/97 : Added a warning message if no module name is specified with the
|
|
%module directive or -module option.
|
|
|
|
6/15/97 : Fixed line number bug when reporting errors for undefined
|
|
base classes.
|
|
|
|
6/15/97 : Added new %rename directive. This allows the forward declaration
|
|
of a renaming. For example :
|
|
|
|
%rename OldName NewName;
|
|
|
|
.... later ...
|
|
int OldName(int);
|
|
|
|
Unlike %name, %rename will rename any occurence of the old name.
|
|
This applies to functions, variables, class members and so forth.
|
|
There is no way to disable %rename once set, but you can change the
|
|
name by redeclaring it to something else.
|
|
*** NEW FEATURE ***
|
|
|
|
6/15/97 : Improved the implementation of the %name directive so that it
|
|
could be used with conditional compilation :
|
|
|
|
#ifdef SWIG
|
|
%name(NewName)
|
|
#endif
|
|
int OldName(int);
|
|
|
|
6/15/97 : Added support for functions with no return datatype. In this case,
|
|
SWIG assumes a return type of 'int'.
|
|
|
|
6/11/97 : Improved error reporting in the parser. It should be a little
|
|
less sensitive to errors that occur inside class definitions
|
|
now. Also reports errors for function pointers.
|
|
|
|
6/11/97 : Made '$' a legal symbol in identifiers. This is to support
|
|
some Objective-C libraries. Some compilers (such as gcc) may also
|
|
allow identifiers to contain a $ in C/C++ code as well (this is
|
|
an obscure feature of C). When '$' appears in identifier, SWIG
|
|
remaps it to the string '_S_' when creating the scripting language
|
|
function. Thus a function 'foo$bar' would be called 'foo_S_bar'.
|
|
|
|
6/11/97 : Fixed bug in Python shadow classes with __repr__ method. If
|
|
supplied by the user, it was ignored, but now it should work.
|
|
|
|
6/9/97 : Fixed the Tcl 8.0 module to work with Tcl 8.0b1. SWIG is no
|
|
longer compatible with *any* alpha release of Tcl 8.0.
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
6/7/97 : Put a maximal error count in (currently set to 20). SWIG will bail out
|
|
if it generates more errors than this (useful for preventing SWIG
|
|
from printing 4000 syntax errors when it gets confused).
|
|
|
|
6/7/97 : Fixed segmentation fault when parsing variable length arguments.
|
|
|
|
6/7/97 : Minor change to Perl5 module. C++ static functions are now
|
|
put in the same package as their class when using shadow classes.
|
|
|
|
6/7/97 : Centralized the naming of functions, members, wrappers etc... By
|
|
centralizing the naming scheme, it should be possible to make
|
|
some multi-file optimizations. Also, it should be possible to
|
|
change SWIG's naming scheme (perhaps a new feature to be added
|
|
later).
|
|
|
|
6/2/97 : Added 'arginit' typemap. This can be used to assign initial values
|
|
to function arguments. Doing so makes it somewhat easier to detect
|
|
improper argument passing when working with other typemaps.
|
|
|
|
6/2/97 : Fixed code generation bug when read-only variables were inherited
|
|
into other classes. Under inheritance, the variables would
|
|
become writable, but this has now been corrected.
|
|
|
|
5/30/97 : An empty %name() directive is no longer allowed or supported.
|
|
This directive was originally used to strip the prefix
|
|
off of a class or structure. Unfortunately, this never really
|
|
seemed to work right and it complicated the C++ code generator
|
|
significantly. As far as I can tell no one uses it, so it
|
|
is now history. *** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
5/28/97 : Fixed a parsing bug with #define and C++ comments. Declarations
|
|
such as the following now work properly :
|
|
|
|
#define CONST 4 // A Comment
|
|
|
|
5/28/97 : Made some performance improvements to the SWIG String class.
|
|
(only affects the SWIG compiler itself).
|
|
|
|
5/28/97 : Modified the parser to skip template definitions and issue a
|
|
warning message.
|
|
|
|
5/28/97 : Preliminary support for parameterized types added (ie. templates).
|
|
Types such as the following should pass through the SWIG compiler
|
|
|
|
void foo(vector<complex> *a, vector<double> *b);
|
|
|
|
When used, the entire name 'vector<complex>' becomes the name
|
|
of the datatype. Due to space limitations in datatype
|
|
representations, the name should not exceed 96 characters.
|
|
|
|
Note : This is only part of what is needed for template support.
|
|
Template class definitions are not yet supported by SWIG.
|
|
|
|
The template notation above may also be used when specifying
|
|
Objective-C protocol lists.
|
|
*** NEW FEATURE ***
|
|
|
|
5/24/97 : First cut at Objective-C support added. As it turns out, almost
|
|
everything can be handled with only a few minor modifications to
|
|
the C++ module.
|
|
*** NEW FEATURE ***
|
|
|
|
5/23/97 : Fixed repeated definition bug in multiple inheritance handling
|
|
when multiple base classes share a common base class (ie.
|
|
the evil diamond).
|
|
|
|
5/21/97 : Fixed rather embarrassing typo that worked its way into the
|
|
Tests/Build directory.
|
|
|
|
5/19/97 : Fixed code generation bug when using native methods and
|
|
shadow classes with Python and Perl5 modules.
|
|
|
|
5/19/97 : Modified the %apply directive slightly so that it would work
|
|
with pointers a little better. For example :
|
|
|
|
%apply unsigned long { DWORD };
|
|
|
|
Applies *all* typemaps associated with "unsigned long" to
|
|
"DWORD". This now includes pointers to the two datatypes.
|
|
For example, a typemap applied to "unsigned long **" would
|
|
also be applied to any occurrence of "DWORD **" as well.
|
|
|
|
5/19/97 : Fixed an ownership assignment bug in the Perl5 module when
|
|
class members were returning new objects belonging to
|
|
different classes.
|
|
|
|
5/17/97 : Added a few more typemap variables.
|
|
|
|
$name - Name of function/variable/member
|
|
$basetype - Base datatype (type without pointers)
|
|
$argnum - Argument number
|
|
|
|
5/16/97 : Fixed embarrassing underscore error in local variable
|
|
allocator.
|
|
|
|
5/16/97 : Fixed namespace clash bug in parameterized typemaps
|
|
when creating arrays as new local variables.
|
|
|
|
5/15/97 : Fixed some bugs with inheritance of added methods across
|
|
multiple files. SWIG now uses names of base classes
|
|
when generating such functions.
|
|
|
|
5/14/97 : Finished support for default typemaps. Primarily used
|
|
internally, they can be used to match the basic
|
|
built-in datatypes used inside of SWIG. You can
|
|
specify them in interface files as well like this :
|
|
|
|
%typemap(tcl,in) int SWIG_DEFAULT_TYPE {
|
|
$target = atoi($target);
|
|
}
|
|
|
|
Unlike normal typemaps, this default map will get applied
|
|
to *all* integer datatypes encountered, including those
|
|
renamed with typedef, etc...
|
|
|
|
5/13/97 : Fixed substring bug in type checker.
|
|
|
|
5/12/97 : Fixed bug in parameterized typemaps when declaring local
|
|
variables of structures.
|
|
|
|
Version 1.1 Beta6 (May 9, 1997)
|
|
===============================
|
|
|
|
5/9/97 : Fixed bizarre NULL pointer handling bug in Perl5 module.
|
|
|
|
5/8/97 : Fixed mysterious segmentation fault when running SWIG on an
|
|
empty file.
|
|
|
|
5/7/97 : The code generator will now replace the special symbol "$cleanup"
|
|
with the cleanup code specified with the "freearg" typemap.
|
|
This change needed to properly manage memory and exceptions.
|
|
|
|
5/5/97 : Added the 'typemaps.i' library file. This contains a
|
|
variety of common typemaps for input values, pointers,
|
|
and so on.
|
|
|
|
5/5/97 : Changed behavior of "argout" typemap in Python module.
|
|
Old versions automatically turned the result into a
|
|
Python list. The new version does nothing, leaving the
|
|
implementation up to the user. This provides more flexibility
|
|
but may break older codes that rely on typemaps.
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
5/5/97 : Fixed bug in Python module related to the interaction of
|
|
"argout" and "ignore" typemaps.
|
|
|
|
5/5/97 : Fixed bug in Python module that would generate incorrect code
|
|
if all function arguments are "ignored".
|
|
|
|
5/4/97 : Added %apply and %clear directives. These form a higher level
|
|
interface to the typemap mechanism. In a nutshell, they
|
|
can be used to change the processing of various datatypes without
|
|
ever having to write a typemap. See the SWIG documentation
|
|
for more details. ** NEW FEATURE **
|
|
|
|
5/4/97 : Added a local variable extension to the typemap handler.
|
|
For example :
|
|
|
|
%typemap(tcl,in) double *(double temp) {
|
|
temp = atof($source);
|
|
$target = &temp;
|
|
}
|
|
|
|
In this case, 'temp' is a local variable that exists
|
|
in the entire wrapper function (not just the typemap
|
|
code). This mechanism provides better support for
|
|
certain types of argument handling and also makes it
|
|
possible to write thread-safe typemaps. Any number
|
|
local variables can be declared by supplying a comma
|
|
separated list. Local variables are guaranteed to be
|
|
unique, even if the same typemap is applied many times
|
|
in a given function.
|
|
** Not currently supported in Perl4 or Guile modules.
|
|
|
|
5/2/97 : Fixed processing of %ifdef, %endif, %if, etc... (These are
|
|
SWIG equivalents of the C preprocessor directives that
|
|
can pass through the C preprocessor without modification).
|
|
|
|
5/2/97 : Fixed major (but subtle) bug in the run-time type checker
|
|
related to searching and type-checking for C++ inheritance.
|
|
To make a long story short, if you had two classes named
|
|
"Foo" and "FooObject" the type checker would sometimes
|
|
get confused and be unable to locate "Foo" in an internal
|
|
table.
|
|
|
|
5/2/97 : Fixed some bugs in the -co option.
|
|
|
|
4/24/97 : Pointer library added to the SWIG library.
|
|
|
|
4/19/97 : Added the %new directive. This is a "hint" that can be used
|
|
to tell SWIG that a function is returning a new object. For
|
|
example :
|
|
|
|
%new Foo *create_foo();
|
|
|
|
This tells SWIG that create_foo() is creating a new object
|
|
and returning a pointer to it. Many language modules may
|
|
choose to ignore the hint, but when working with shadow classes,
|
|
the %new is used to handle proper ownership of objects.
|
|
|
|
%new can also be used with dynamically allocated strings.
|
|
For example :
|
|
|
|
%new char *create_string();
|
|
|
|
When used, all of the language modules will automatically cleanup
|
|
the returned string--eliminating memory leaks.
|
|
** NEW FEATURE **
|
|
|
|
4/19/97 : Added a new typemap "newfree". This is used in conjunction with
|
|
the %new directive and can be used to change the method by which
|
|
a new object returned by a function is deleted.
|
|
|
|
4/19/97 : The symbol "__cplusplus" is now defined in the SWIG interpreter
|
|
when running with the -c++ option.
|
|
|
|
4/17/97 : Added support for static member functions when used inside the
|
|
%addmethods directive.
|
|
|
|
4/15/97 : Added a special typemap symbol PREVIOUS that can be used to
|
|
restore a previous typemap. For example :
|
|
|
|
%typemap(tcl,in) int * = PREVIOUS;
|
|
|
|
This is primarily used in library files.
|
|
|
|
4/13/97 : Added %pragma directive for Perl5 module. Two new pragmas are
|
|
available :
|
|
|
|
%pragma(perl5) code = "string"
|
|
%pragma(perl5) include = "file.pl"
|
|
|
|
Both insert code into the .pm file created by SWIG. This can
|
|
be used to automatically customize the .pm file created by SWIG.
|
|
|
|
4/13/97 : Scanner modified to only recognize C++ keywords when the -c++
|
|
option has been specified. This provides support for C programs
|
|
that make use of these keywords for identifiers.
|
|
SWIG may need to be explicitly run with the -c++ option when
|
|
compiling C++ code (this was allowed, but not recommended in
|
|
previous versions). **POTENTIAL INCOMPATIBILITY**
|
|
|
|
4/11/97 : Fixed a rather nasty bug in the Perl5 module related to using
|
|
variable linking with complex datatypes and pointers. On Unix,
|
|
code would work (somehow), but would cause an access violation
|
|
under Windows-NT. The fix should correct the problem,
|
|
but there may still be a problem using global variables of
|
|
complex datatypes in conjunction with shadow classes. Fortunately,
|
|
this sort of thing seems to be relatively rare (considering
|
|
that the bug has been around for more than a year - yikes!).
|
|
|
|
4/11/97 : Fixed bizarre constant evaluation bug in Perl5 code generation
|
|
when running under Windows-NT.
|
|
|
|
4/8/97 : Bug when using default arguments and C++ references fixed.
|
|
|
|
4/8/97 : Fixed code generation bugs in Python and Perl5 modules related to
|
|
using class renaming (applying the %name directive to a class
|
|
definition) and shadow classes.
|
|
|
|
4/7/97 : Fixed minor bugs in swigptr.swg, tcl8ptr.swg, and perl5ptr.swg to
|
|
prevent infinite loops when weird datatypes are passed.
|
|
|
|
3/29/97 : 'Makefile.win' added. This is used to build most of the examples
|
|
in the Examples directory under Windows NT/95.
|
|
|
|
3/27/97 : Fixes to SWIG's error return codes. SWIG now returns non-zero
|
|
exit codes for certain kinds of errors (which makes it more
|
|
friendly to makefiles). An overhaul of the error handling
|
|
is on the to-do list and will probably show up in a later release.
|
|
|
|
3/25/97 : Bug fix. "freearg" and "argout" typemaps have been fixed in
|
|
the Perl5 module. In previous versions, function input parameters
|
|
and function output parameters shared the same memory space--causing
|
|
all sorts of nasty problems when trying to pass perl values by
|
|
reference. SWIG now internally makes a "copy" (which is really
|
|
just a pointer) of affected parameters and uses that. This
|
|
is done transparently so there is no noticable impact on any
|
|
SWIG generated modules. This change is probably only noticable
|
|
to expert users.
|
|
|
|
3/25/97 : Added type-check to verbose and stat mode. SWIG will now generate a list
|
|
of all datatypes that were used but undefined (useful for tracking
|
|
down weird bugs). This is enabled with the -v option (which
|
|
is now officially known as "overly verbose" mode) or the -stat option.
|
|
|
|
3/25/97 : Slight change to the parser to make include guards work correctly.
|
|
For example :
|
|
|
|
#ifndef INTERFACE_I
|
|
#define INTERFACE_I
|
|
%module foobar.i
|
|
... declarations ...
|
|
#endif
|
|
|
|
3/24/97 : %checkout directive added. This allows an interface file to
|
|
extract files from the SWIG library and place them in the
|
|
current directory. This can be used to extract scripts and
|
|
other helper code that might be associated with library files.
|
|
For example :
|
|
|
|
%checkout array.tcl
|
|
|
|
Will look for a file "array.tcl" in the library and copy it
|
|
to the current directory. If the file already exists in the
|
|
directory, this directive does nothing (it will not overwrite an
|
|
existing file). This only an experimental feature for now.
|
|
|
|
3/24/97 : SWIG will now look in the SWIG Library for a file if it can't
|
|
find it in the current directory. As a result, it is easy to
|
|
make modules from SWIG library files. For example, if you
|
|
want to make a Python module from the SWIG timers library, just
|
|
type this in any directory :
|
|
|
|
swig -python timers.i
|
|
|
|
You will get the files timers_wrap.c and timers_wrap.doc in
|
|
the current directory that you can now compile. The file
|
|
remains in the SWIG library (although you can check it out
|
|
using the -co option). *** New Feature ***
|
|
|
|
3/24/97 : -co option added to SWIG to allow easy access to the SWIG library.
|
|
When used, this instructs SWIG to check out a library file and
|
|
place it in the current directory. For example :
|
|
|
|
unix > swig -co array.i
|
|
array.i checked out from the SWIG library
|
|
unix >
|
|
|
|
Once in your directory you can customize the file to suit your
|
|
particular purposes. The checkout option makes it easy to
|
|
grab library files without knowing anything about the SWIG
|
|
installation, but it also makes it possible to start
|
|
including scripts, C code, and other miscellaneous files
|
|
in the library. For example, you could put a cool script
|
|
in the library and check it out whenever you wanted to use it.
|
|
*** New Feature ***
|
|
|
|
3/24/97 : #pragma export directives added to Tcl output for compiling
|
|
shared libraries on the Mac.
|
|
|
|
3/24/97 : Minor changes to wish.i and tclsh.i library files to provide
|
|
support for the Macintosh.
|
|
|
|
3/19/97 : SWIG's policy towards NULL pointers has been relaxed. The
|
|
policy of requiring a special compiler directive -DALLOW_NULL
|
|
to use NULL pointers is no longer supported. While this may
|
|
seem "unsafe", it turns out that you can use a "check"
|
|
typemap to achieve some safety. For example :
|
|
|
|
%typemap(perl5,check) Node * {
|
|
if (!$target)
|
|
croak("NULL Pointers not allowed.");
|
|
}
|
|
|
|
This prevents any NULL value of a "Node *" pointer to be
|
|
passed to a function. (I think this is much cleaner
|
|
than the old -DALLOW_NULL hack anyways).
|
|
|
|
3/19/97 : Fixed pointer handling errors in Perl5 module. Modules no
|
|
longer core dump when a Perl reference is inadvertently
|
|
passed in as a C pointer.
|
|
|
|
3/18/97 : Added a "check" typemap. This can be used to check the
|
|
validity of function input values. For example :
|
|
|
|
%typemap(perl5,check) int posint {
|
|
if ($target < 0)
|
|
croak("Argument is not a positive integer");
|
|
}
|
|
|
|
3/18/97 : Added an $arg variable to Tcl typemaps. This makes it easier
|
|
to return argument values by "reference".
|
|
|
|
3/18/97 : Fixed a code generation bug when using C++ references and
|
|
the %addmethods directive.
|
|
|
|
3/18/97 : Fixed a few glitches in the typemap module with respect to
|
|
chaining. For example :
|
|
|
|
%typemap(tcl,in) int {
|
|
$in // Inserts prexisting typemap
|
|
printf("Received a %d\n", $target);
|
|
}
|
|
|
|
This has been allowed for quite some time, but didn't work
|
|
if no existing typemap was defined. Now, it still doesn't
|
|
work if no existing typemap is defined, but it issues a
|
|
warning message. There is some support using default typemaps,
|
|
but none of the language modules take advantage of it. This
|
|
should be considered experimental at this time.
|
|
|
|
Version 1.1b5 Patch 1 (March 16, 1997)
|
|
======================================
|
|
|
|
3/16/97 : Fixed references bug with C++ code generation.
|
|
|
|
3/16/97 : Fixed initialization bug in the documentation system that
|
|
was causing weird problems.
|
|
|
|
3/16/97 : Fixed fatal bug with -c option in the Python module.
|
|
|
|
3/13/97 : Fixed bug in the documentation system involving the %text directive
|
|
and sorting. In the old system, %text entries would float to the
|
|
top of a section because they were "nameless". Now they are
|
|
attached to the previous declaration and will stay in the proper
|
|
location relative to the previous entry.
|
|
|
|
Version 1.1b5 (March 12, 1997)
|
|
==============================
|
|
|
|
3/11/97 : Fixed compilation problems introduced by Tcl/Tk 8.0a2.
|
|
*** INCOMPATIBILITY *** SWIG no longer works with Tcl/Tk 8.0a1.
|
|
|
|
3/10/97 : Fixed bug with ignored arguments and C++ member functions in
|
|
the Python module.
|
|
|
|
3/9/97 : Parsing bugs with nested class definitions and privately
|
|
declared nested class definitions fixed.
|
|
|
|
3/9/97 : Fixed a few minor code generation bugs with C++ classes and
|
|
constructors. In some cases, the resulting wrapper code
|
|
would not compile properly. SWIG now attempts to use
|
|
the default copy constructor instead.
|
|
|
|
3/8/97 : Added a -l option to SWIG that allows additional SWIG library files
|
|
to be grabbed without having them specified in the interface file.
|
|
This makes it easier to keep the interface file clean and move certain
|
|
options into a Makefile. For example :
|
|
|
|
swig -tcl example.i # Build a normal Tcl extension
|
|
swig -tcl -lwish.i example.i # Build it as a wish extension
|
|
# by including the 'wish.i' file.
|
|
|
|
swig -python example.i # Build a dynamically loaded extension
|
|
swig -python -lembed.i example.i # Build a static extension
|
|
|
|
These kinds of options could previously be accomplished with
|
|
conditional compilation such as :
|
|
|
|
%module example
|
|
...
|
|
#ifdef STATIC
|
|
%include embed.i
|
|
#endif
|
|
|
|
3/8/97 : Incorporated changes to Guile module to use the new gh interface
|
|
in FSF Guile 1.0. The older gscm interface used in Cygnus
|
|
Guile releases is no longer supported by SWIG.
|
|
|
|
3/8/97 : Cleaned up the Tcl Netscape plugin example. It should work with
|
|
version 1.1 of the plugin now.
|
|
|
|
3/8/97 : Added better array support to the typemap module. The keyword
|
|
ANY can now be used to match any array dimension. For example :
|
|
|
|
%typemap(tcl,in) double [ANY] {
|
|
... get an array ...
|
|
}
|
|
|
|
This will match any single-dimensional double array. The array
|
|
dimension is passed in the variables $dim0, $dim1, ... $dim9. For
|
|
example :
|
|
|
|
%typemap(tcl,in) double [ANY][ANY][ANY] {
|
|
printf("Received a double[%d][%d][%d]\n",$dim0,$dim1,$dim2);
|
|
}
|
|
|
|
Any typemap involving a specific array dimension will override any
|
|
specified with the ANY tag. Thus, a %typemap(tcl,in) double [5][4][ANY] {}
|
|
would override a double [ANY][ANY][ANY]. However, overuse of the ANY
|
|
tag in arrays of high-dimensions may not work as you expect due to
|
|
the pattern matching rule used. For example, which of the following
|
|
typemaps has precedence?
|
|
|
|
%typemap(in) double [ANY][5] {} // Avoid this!
|
|
%typemap(in) double [5][ANY] {}
|
|
|
|
3/7/97 : Fixed a number of bugs related to multi-dimensional array handling.
|
|
Typedefs involving multi-dimensional arrays now works correctly.
|
|
For example :
|
|
|
|
typedef double MATRIX[4][4];
|
|
|
|
...
|
|
extern double foo(MATRIX a);
|
|
|
|
Typecasting of pointers into multi-dimensional arrays is now
|
|
implemented properly when making C/C++ function calls.
|
|
|
|
3/6/97 : Fixed potentially dangerous bug in the Tcl Object-oriented
|
|
interface. Well, actually, didn't fix it but issued a
|
|
Tcl error instead. The bug would manifest itself as follows:
|
|
|
|
% set l [List] # Create an object
|
|
...
|
|
% set m [List -this $l] # Make $m into an object assuming $l
|
|
# contains a pointer.
|
|
# Since $m == $l, $l gets destroyed
|
|
# (since its the same command name)
|
|
% $m insert Foo
|
|
Segmentation fault # Note : the list no longer exists!
|
|
|
|
Now, an error will be generated instead of redefining the command.
|
|
As in :
|
|
|
|
% set l [List]
|
|
...
|
|
% set m [List -this $l]
|
|
Object name already exists!
|
|
|
|
Use catch{} to ignore the error.
|
|
|
|
3/3/97 : Better support for enums added. Datatypes of 'enum MyEnum'
|
|
and typedefs such as 'typedef enum MyEnum Foo;' now work.
|
|
|
|
3/3/97 : Parser modified to ignore constructor initializers such as :
|
|
|
|
class Foo : public Bar {
|
|
int a,b;
|
|
public:
|
|
Foo(int i) : a(0), b(i), Bar(i,0) { };
|
|
};
|
|
|
|
3/3/97 : Modified parser to ignore C++ exception specifications such as :
|
|
|
|
int foo(double) throw(X,Y);
|
|
|
|
3/3/97 : Added %import directive. This works exactly like %extern
|
|
except it tells the language module that the declarations are
|
|
coming from a separate module. This is usually only
|
|
needed when working with shadow classes.
|
|
|
|
3/2/97 : Changed pointer type-checker to be significantly more
|
|
efficient when working with derived datatypes. This
|
|
has been accomplished by storing type-mappings in sorted
|
|
order, using binary search schemes, and caching recently
|
|
used datatypes. For SWIG generated C++ modules that
|
|
make a large number of C function calls with derived types,
|
|
this could result in speedups of between 100 and 50000 percent.
|
|
However, due to the required sorting operation, module
|
|
loading time may increased slightly when there are lots of
|
|
datatypes.
|
|
|
|
3/2/97 : Fixed some C++ compilation problems with Python
|
|
embed.i library files.
|
|
|
|
2/27/97 : Slight change to C++ code generation to use copy constructors
|
|
when returning complex data type by value.
|
|
|
|
2/26/97 : Fixed bug in Python module with -c option.
|
|
|
|
2/26/97 : Slight tweak of parser to allow trailing comma in enumerations
|
|
such as
|
|
|
|
enum Value (ALE, STOUT, LAGER, };
|
|
|
|
2/25/97 : Fixed code generation bug in Tcl module when using the
|
|
%name() directive on a classname.
|
|
|
|
2/25/97 : Finished code-size optimization of C++ code generation with
|
|
inheritance of attributes. Inherited attributes now
|
|
only generate one set of wrapper functions that are re-used
|
|
in any derived classes. This could provide big code
|
|
size improvements in some scripting language interfaces.
|
|
|
|
2/25/97 : Perl5 module modified to support both the Unix and Windows
|
|
versions. The windows version has been tested with the
|
|
Activeware port of Perl 5.003 running under Windows 95.
|
|
The C source generated by SWIG should compile without
|
|
modification under both versions of Perl, but is now
|
|
even more hideous than before.
|
|
|
|
2/25/97 : Modified parser to allow scope resolution operation to
|
|
appear in expressions and default arguments as in :
|
|
|
|
void foo(int a = Bar::defvalue);
|
|
|
|
2/25/97 : Fixed bug when resolving symbols inside C++ classes.
|
|
For example :
|
|
|
|
class Foo {
|
|
public:
|
|
enum Value {ALE, STOUT, LAGER};
|
|
...
|
|
void defarg(Value v = STOUT);
|
|
|
|
};
|
|
|
|
2/24/97 : Fixed bug with member functions returning void *.
|
|
|
|
2/23/97 : Modified Python module to be better behaved under Windows
|
|
|
|
- Module initialization function is now properly exported.
|
|
It should not be neccessary to explicitly export this function
|
|
yourself.
|
|
|
|
- Bizarre compilation problems when compiling the SWIG wrapper
|
|
code as ANSI C under Visual C++ 4.x fixed.
|
|
|
|
- Tested with both the stock Python-1.4 distribution and Pythonwin
|
|
running under Win95.
|
|
|
|
2/19/97 : Fixed typedef handling bug in Perl5 shadow classes.
|
|
|
|
2/19/97 : Added exception support. To use it, do the following :
|
|
|
|
%except(lang) {
|
|
... try part of the exception ...
|
|
$function
|
|
... catch part of exception ...
|
|
}
|
|
|
|
$function is a SWIG variable that will be replaced by the
|
|
actual C/C++ function call in a wrapper function. Thus,
|
|
a real exception specification might look like this :
|
|
|
|
%except(perl5) {
|
|
try {
|
|
$function
|
|
} catch (char *& sz) {
|
|
... process an exception ...
|
|
} catch(...) {
|
|
croak("Unknown exception. Bailing out...");
|
|
}
|
|
}
|
|
|
|
2/19/97 : Added support for managing generic code fragments (needed
|
|
for exceptions).
|
|
|
|
2/19/97 : Fixed some really obscure typemap scoping bugs in the C++
|
|
handler.
|
|
|
|
2/18/97 : Cleaned up perlmain.i file by removing some problematic,
|
|
but seemingly unnecessary declarations.
|
|
|
|
2/18/97 : Optimized handling of member functions under inheritance.
|
|
SWIG can now use wrapper functions generated for a
|
|
base class instead of regenerating wrappers for
|
|
the same functions in a derived class. This could
|
|
make a drastic reduction in wrapper code size for C++
|
|
applications with deep inheritance hierarchies and
|
|
lots of functions.
|
|
|
|
2/18/97 : Additional methods specified with %addmethods can now
|
|
be inherited along with normal C++ member functions.
|
|
|
|
2/18/97 : Minor internal fixes to make SWIG's string handling a little
|
|
safer.
|
|
|
|
2/16/97 : Moved some code generation of Tcl shadow classes to
|
|
library files.
|
|
|
|
2/16/97 : Fixed documentation error of '-configure' method in
|
|
Tcl modules.
|
|
|
|
2/16/97 : Modified Perl5 module slightly to allow typemaps
|
|
to use Perl references.
|
|
|
|
2/12/97 : Fixed argument checking bug that was introduced by
|
|
default arguments (function calls with too many
|
|
arguments would still be executed). Functions now
|
|
must have the same number of arguments as C version
|
|
(with possibility of default/optional arguments
|
|
still supported).
|
|
|
|
2/12/97 : Fixed default argument bug in Perl5 module when
|
|
generating wrapper functions involving default
|
|
arguments of complex datatypes.
|
|
|
|
2/12/97 : Fixed typemap scoping problems. For example :
|
|
|
|
%typemap(tcl,in) double {
|
|
.. get a double ..
|
|
}
|
|
|
|
class Foo {
|
|
public:
|
|
double bar(double);
|
|
}
|
|
|
|
%typemap(tcl,in) double {
|
|
.. new get double ..
|
|
}
|
|
|
|
Would apply the second typemap to all functions in Foo
|
|
due to delayed generation of C++ wrapper code (clearly this
|
|
is not the desired effect). Problem has been fixed by
|
|
assigning unique numerical identifiers to every datatype in
|
|
an interface file and recording the "range of effect" of each
|
|
typemap.
|
|
|
|
2/11/97 : Added support for "ignore" and "default" typemaps. Only use
|
|
if you absolutely know what you're doing.
|
|
|
|
2/9/97 : Added automatic creation of constructors and destructors for
|
|
C structs and C++ classes that do not specify any sort of
|
|
constructor or destructor. This feature can be enabled by
|
|
running SWIG with the '-make_default' option or by inserting
|
|
the following pragma into an interface file :
|
|
|
|
%pragma make_default
|
|
|
|
The following pragma disables automatic constructor generation
|
|
|
|
%pragma no_default
|
|
|
|
2/9/97 : Added -make_default option for producing default constructors
|
|
and destructors for classes without them.
|
|
|
|
2/9/97 : Changed the syntax of the SWIG %pragma directive to
|
|
%pragma option=value or %pragma(lang) option=value.
|
|
This change makes the syntax a little more consistent
|
|
between general pragmas and language-specific pragmas.
|
|
The old syntax still works, but will probably be phased
|
|
out (a warning message is currently printed).
|
|
|
|
2/9/97 : Improved Tcl support of global variables that are of
|
|
structures, classes, and unions.
|
|
|
|
2/9/97 : Fixed C++ compilation problem in Python 'embed.i' library file.
|
|
|
|
2/9/97 : Fixed missing return value in perlmain.i library file.
|
|
|
|
2/9/97 : Fixed Python shadow classes to return an AttributeError when
|
|
undefined attributes are accessed (older versions returned
|
|
a NameError).
|
|
|
|
2/9/97 : Fixed bug when %addmethods is used after a class definition whose
|
|
last section is protected or private.
|
|
|
|
2/8/97 : Made slight changes in include file processing to support
|
|
the Macintosh.
|
|
|
|
2/8/97 : Extended swigmain.cxx to provide a rudimentary Macintosh interface.
|
|
It's a really bad interface, but works until something better
|
|
is written.
|
|
|
|
1/29/97 : Fixed type-casting bug introduced by 1.1b4 when setting/getting the
|
|
value of global variables involving complex data types.
|
|
|
|
1/29/97 : Removed erroneous white space before an #endif in the code generated
|
|
by the Python module (was causing errors on DEC Alpha compilers).
|
|
|
|
1/26/97 : Fixed errors when using default/optional arguments in Python shadow
|
|
shadow classes.
|
|
|
|
1/23/97 : Fixed bug with nested %extern declarations.
|
|
|
|
1/21/97 : Fixed problem with typedef involving const datatypes.
|
|
|
|
1/21/97 : Somewhat obscure, but serious bug with having multiple levels
|
|
of typedefs fixed. For example :
|
|
|
|
typedef char *String;
|
|
typedef String Name;
|
|
|
|
Version 1.1 Beta4 (January 16, 1997)
|
|
====================================
|
|
|
|
Note : SWIG 1.1b3 crashed and burned shortly after take off due
|
|
to a few major run-time problems that surfaced after release.
|
|
This release should fix most, if not all, of those problems.
|
|
|
|
1/16/97 : Fixed major memory management bug on Linux
|
|
|
|
1/14/97 : Fixed bug in functions returning constant C++ references.
|
|
|
|
1/14/97 : Modified C++ module to handle datatypes better.
|
|
|
|
1/14/97 : Modified parser to allow a *single* scope resolution
|
|
operator in datatypes. Ie : Foo::bar. SWIG doesn't
|
|
yet handle nested classes, so this should be
|
|
sufficient for now.
|
|
|
|
1/14/97 : Modified parser to allow typedef inside a C++ class.
|
|
|
|
1/14/97 : Fixed some problems related to datatypes defined inside
|
|
a C++ class. SWIG was not generating correct code,
|
|
but a new scoping mechanism and method for handling
|
|
datatypes inside a C++ class have been added.
|
|
|
|
1/14/97 : Changed enumerations to use the value name instead
|
|
of any values that might have appeared in the interface
|
|
file. This makes the code a little more friendly to
|
|
C++ compilers.
|
|
|
|
1/14/97 : Removed typedef bug that made all enumerations
|
|
equivalent to each other in the type checker (since
|
|
it generated alot of unnecessary code).
|
|
|
|
Version 1.1 Beta3 (January 9, 1997)
|
|
====================================
|
|
|
|
Note : A *huge* number of changes related to ongoing modifications.
|
|
|
|
1. Support for C++ multiple inheritance added.
|
|
|
|
2. Typemaps added.
|
|
|
|
3. Some support for nested structure definitions added.
|
|
|
|
4. Default argument handling added.
|
|
|
|
5. -c option added for building bare wrapper code modules.
|
|
|
|
6. Rewrote Pointer type-checking to support multiple inheritance
|
|
correctly.
|
|
|
|
7. Tcl 8.0 module added.
|
|
|
|
8. Perl4 and Guile modules resurrected from the dead (well, they
|
|
at least work again).
|
|
|
|
9. New Object Oriented Tcl interface added.
|
|
|
|
10. Bug fixes to Perl5 shadow classes.
|
|
|
|
11. Cleaned up many of the internal modules of the parser.
|
|
|
|
12. Tons of examples and testing modules added.
|
|
|
|
13. Fixed bugs related to use of "const" return values.
|
|
|
|
14. Fixed bug with C++ member functions returning void *.
|
|
|
|
15. Changed SWIG configuration script.
|
|
|
|
Version 1.1 Beta2 (December 3, 1996)
|
|
====================================
|
|
|
|
1. Completely rewrote the SWIG documentation system. The changes
|
|
involved are too numerous to mention. Basically, take everything
|
|
you knew about the old system, throw them out, and read the
|
|
file Doc/doc.ps.
|
|
|
|
2. Limited support for #if defined() added.
|
|
|
|
3. Type casts are now allowed in constant expressions. ie
|
|
|
|
#define A (int) 3
|
|
|
|
4. Added support for typedef lists. For example :
|
|
|
|
typedef struct {
|
|
double x,y,z;
|
|
} Vector, *VectorPtr;
|
|
|
|
5. New SWIG directives (related to documentation system)
|
|
|
|
%style
|
|
%localstyle
|
|
%subsection
|
|
%subsubsection
|
|
|
|
6. Reorganized the C++ handling and made it a little easier to
|
|
work with internally.
|
|
|
|
7. Fixed problem with inheriting data members in Python
|
|
shadow classes.
|
|
|
|
8. Fixed symbol table problems with shadow classes in both
|
|
Python and Perl.
|
|
|
|
9. Fixed annoying segmentation fault bug in wrapper code
|
|
generated for Perl5.
|
|
|
|
10. Fixed bug with %addmethods directive. Now it can be placed
|
|
anywhere in a class.
|
|
|
|
11. More test cases added to the SWIG self-test. Documentation
|
|
tests are now performed along with other things.
|
|
|
|
12. Reorganized the SWIG library a little bit and set it up to
|
|
self-document itself using SWIG.
|
|
|
|
13. Lots and lots of minor bug fixes (mostly obscure, but bugs
|
|
nonetheless).
|
|
|
|
|
|
Version 1.1 Beta1 (October 30, 1996)
|
|
====================================
|
|
|
|
1. Added new %extern directive for handling multiple files
|
|
|
|
2. Perl5 shadow classes added
|
|
|
|
3. Rewrote conditional compilation to work better
|
|
|
|
4. Added 'bool' datatype
|
|
|
|
5. %{,%} block is now optional.
|
|
|
|
6. Fixed some bugs in the Python shadow class module
|
|
|
|
7. Rewrote all of the SWIG tests to be more informative
|
|
(and less scary).
|
|
|
|
8. Rewrote parameter list handling to be more memory
|
|
efficient and flexible.
|
|
|
|
9. Changed parser to ignore 'static' declarations.
|
|
|
|
10. Initializers are now ignored. For example :
|
|
|
|
struct FooBar a = {3,4,5};
|
|
|
|
11. Somewhat better parsing of arrays (although it's
|
|
usually just a better error message now).
|
|
|
|
12. Lot's of minor bug fixes.
|
|
|
|
|
|
Version 1.0 Final (August 31, 1996)
|
|
===================================
|
|
1. Fixed minor bug in C++ module
|
|
|
|
2. Fixed minor bug in pointer type-checker when using
|
|
-DALLOW_NULL.
|
|
|
|
3. Fixed configure script to work with Python 1.4beta3
|
|
|
|
4. Changed configure script to allow compilation without
|
|
yacc or bison.
|
|
|
|
Version 1.0 Final (August 28, 1996)
|
|
===================================
|
|
|
|
1. Changed parser to support more C/C++ datatypes (well,
|
|
more variants). Types like "unsigned", "short int",
|
|
"long int", etc... now work.
|
|
|
|
2. "unions" added to parser.
|
|
|
|
3. Use of "typedef" as in :
|
|
|
|
typedef struct {
|
|
double x,y,z;
|
|
} Vector;
|
|
|
|
Now works correctly. The name of the typedef is used as
|
|
the structure name.
|
|
|
|
4. Conditional compilation with #ifdef, #else, #endif, etc...
|
|
added.
|
|
|
|
5. New %disabledoc, %enabledoc directives allow documentation
|
|
to selectively be disabled for certain parts of a wrapper
|
|
file.
|
|
|
|
6. New Python module supports better variable linking, constants,
|
|
and shadow classes.
|
|
|
|
7. Perl5 module improved with better compatibility with XS
|
|
and xsubpp. SWIG pointers and now created so that they
|
|
are compatible with xsubpp pointers.
|
|
|
|
8. Support for [incr Tcl] namespaces added to Tcl module.
|
|
|
|
9. %pragma directive added.
|
|
|
|
10. %addmethods directive added.
|
|
|
|
11. %native directive added to allow pre-existing wrapper functions
|
|
to be used.
|
|
|
|
12. Wrote configure script for SWIG installation.
|
|
|
|
13. Function pointers now allowed with typedef statements.
|
|
|
|
14. %typedef modified to insert a corresponding C typedef into
|
|
the output file.
|
|
|
|
15. Fixed some problems related to C++ references.
|
|
|
|
16. New String and WrapperFunction classes add to make generating
|
|
wrapper code easier.
|
|
|
|
17. Fixed command line option processing to eliminate core dumps
|
|
and to allow help messages.
|
|
|
|
18. Lot's of minor bug fixes to almost all code modules
|
|
|
|
|
|
Version 1.0 Beta 3 (Patch 1) July 17, 1996
|
|
==========================================
|
|
|
|
1.0 Final is not quite ready yet, but this release fixes a
|
|
number of immediate problems :
|
|
|
|
1. Compiler errors when using -strict 1 type checking have been fixed.
|
|
|
|
2. Pointer type checker now recognizes pointers of the form
|
|
_0_Type correctly.
|
|
|
|
3. A few minor fixes were made in the Makefile
|
|
|
|
Version 1.0 Beta 3 (June 14, 1996)
|
|
===================================
|
|
|
|
|
|
There are lots of changes in this release :
|
|
|
|
1. SWIG is now invoked using the "swig" command instead of "wrap".
|
|
Hey, swig sounds cooler.
|
|
|
|
2. The SWIG_LIB environment variable can be set to change the
|
|
location where SWIG looks for library files.
|
|
|
|
3. C++ support has been added. You should use the -c++ option
|
|
to enable it.
|
|
|
|
4. The %init directive has been replaced by the %module directive.
|
|
%module constructs a valid name for the initialization function
|
|
for whatever target language you're using (actually this makes
|
|
SWIG files a little cleaner). The old %init directive still works.
|
|
|
|
5. The syntax of the %name directive has been changed. Use of the
|
|
old one should generate a warning message, but may still work.
|
|
|
|
6. To support Tcl/Tk on non-unix platforms, SWIG imports a file called
|
|
swigtcl.cfg from the $(SWIG_LIB)/tcl directory. I don't have access
|
|
to an NT machine, but this file is supposedly allows SWIG to
|
|
produce wrapper code that compiles on both UNIX and non UNIX machines.
|
|
If this doesn't work, you'll have to edit the file swigtcl.cfg. Please
|
|
let me know if this doesn't work so I can update the file as
|
|
necessary.
|
|
|
|
7. The SWIG run-time typechecker has been improved. You can also
|
|
now redefine how it works by supplying a file called "swigptr.cfg"
|
|
in the same directory as your SWIG interface files. By default,
|
|
SWIG reads this file from $(SWIG_LIB)/config.
|
|
|
|
8. The documentation system has been changed to support the following :
|
|
|
|
- Documentation order is printed in interface file order by
|
|
default. This can be overridden by putting an %alpha
|
|
directive in the beginning of the interface file.
|
|
|
|
- You can supply additional documentation text using
|
|
|
|
%text %{ put your text here %}
|
|
|
|
- A few minor bugs were fixed.
|
|
|
|
9. A few improvements have been made to the handling of command line
|
|
options (but it's still not finished).
|
|
|
|
10. Lots of minor bug fixes in most of the language modules have been
|
|
made.
|
|
|
|
11. Filenames have been changed to 8.3 for compatibility with a SWIG
|
|
port to non-unix platforms (work in progress).
|
|
|
|
12. C++ file suffix is now .cxx (for same reason).
|
|
|
|
13. The documentation has been upgraded significantly and is now
|
|
around 100 pages. I added new examples and a section on
|
|
C++. The documentation now includes a Table of Contents.
|
|
|
|
14. The SWIG Examples directory is still woefully sparse, but is
|
|
getting better.
|
|
|
|
Special notice about C++
|
|
------------------------
|
|
This is the first version of SWIG to support C++ parsing. Currently
|
|
the C++ is far from complete, but seems to work for simple cases.
|
|
No work has been done to add special C++ processing to any of
|
|
the target languages. See the user manual for details about how
|
|
C++ is handled. If you find problems with the C++ implementation,
|
|
please let me know. Expect major improvements in this area.
|
|
|
|
Note : I have only successfully used SWIG and C++ with Tcl and
|
|
Python.
|
|
|
|
Notice about Version 1.0Final
|
|
-----------------------------
|
|
|
|
Version 1.0B3 is the last Beta release before version 1.0 Final is
|
|
released. I have frozen the list of features supported in version 1.0
|
|
and will only fix bugs as they show up. Work on SWIG version 2.0 is
|
|
already in progress, but is going to result in rather significant
|
|
changes to SWIG's internal structure (hopefully for the better). No
|
|
anticipated date for version 2.0 is set, but if you've got an idea,
|
|
let me know.
|
|
|
|
Version 1.0 Beta 2 (April 26, 1996)
|
|
===================================
|
|
This release is identical to Beta1 except a few minor bugs are
|
|
fixed and the SWIG library has been updated to work with Tcl 7.5/Tk 4.1.
|
|
A tcl7.5 examples directory is now included.
|
|
|
|
- Fixed a bug in the Makefile that didn't install the libraries
|
|
correctly.
|
|
|
|
- SWIG Library files are now updated to work with Tcl 7.5 and Tk 4.1.
|
|
|
|
- Minor bug fixes in other modules.
|
|
|
|
|
|
Version 1.0 Beta 1 (April 10, 1996).
|
|
=====================================
|
|
This is the first "semi-official" release of SWIG. It has a
|
|
number of substantial improvements over the Alpha release. These
|
|
notes are in no particular order--hope I remembered everything....
|
|
|
|
1. Tcl/Tk
|
|
|
|
SWIG is known to work with Tcl7.3, Tk3.6 and later versions.
|
|
I've also tested SWIG with expect-5.19.
|
|
|
|
Normally SWIG expects to use the header files "tcl.h" and "tk.h".
|
|
Newer versions of Tcl/Tk use version numbers. You can specify these
|
|
in SWIG as follows :
|
|
|
|
% wrap -htcl tcl7.4.h -htk tk4.0.h example.i
|
|
|
|
Of course, I prefer to simply set up symbolic links between "tcl.h" and
|
|
the most recent stable version on the machine.
|
|
|
|
2. Perl4
|
|
|
|
This implementation has been based on Perl-4.035. SWIG's interface to
|
|
Perl4 is based on the documentation provided in the "Programming Perl"
|
|
book by Larry Wall, and files located in the "usub" directory of the
|
|
Perl4 distribution.
|
|
|
|
In order to compile with Perl4, you'll need to link with the uperl.o
|
|
file found in the Perl4 source directory. You may want to move this
|
|
file to a more convenient location.
|
|
|
|
3. Perl5
|
|
|
|
This is a somewhat experimental implementation, but is alot less
|
|
buggy than the alpha release. SWIG operates independently of
|
|
the XS language and xsubpp supplied with Perl5. Currently SWIG
|
|
produces the necessary C code and .pm file needed to dynamically
|
|
load a module into Perl5.
|
|
|
|
To support Perl5's notion of modules and packages (as with xsubpp),
|
|
you can use the following command line options :
|
|
|
|
% wrap -perl5 -module MyModule -package MyPackage example.i
|
|
|
|
Note : In order for dynamic loading to be effective, you need to be
|
|
careful about naming. For a module named "MyModule", you'll need to
|
|
create a shared object file called "MyModule.so" using something like
|
|
|
|
% ld -shared my_obj.o -o MyModule.so
|
|
|
|
The use of the %init directive must match the module name since Perl5
|
|
calls a function "boot_ModuleName" in order to initialize things.
|
|
See the Examples directory for some examples of how to get things
|
|
to work.
|
|
|
|
4. Python1.3
|
|
|
|
This is the first release supporting Python. The Python port is
|
|
experimental and may be rewritten. Variable linkage is done through
|
|
functions which is sort of a kludge. I also think it would be nice
|
|
to import SWIG pointers into Python as a new object (instead of strings).
|
|
Of course, this needs a little more work.
|
|
|
|
5. Guile3
|
|
|
|
If you really want to live on the edge, pick up a copy of Guile-iii and
|
|
play around with this. This is highly experimental---especially since
|
|
I'm not sure what the official state of Guile is these days. This
|
|
implementation may change at any time should I suddenly figure out better
|
|
ways to do things.
|
|
|
|
6. Extending SWIG
|
|
|
|
SWIG is written in C++ although I tend to think of the code as mostly
|
|
being ANSI C with a little inheritance thrown in. Each target language
|
|
is implemented as a C++ class that can be plugged into the system.
|
|
If you want to add your own modifications, see Appendix C of the user
|
|
manual. Then take a look at the "user" directory which contains some
|
|
code for building your own extenions.
|
|
|
|
7. The SWIG library
|
|
|
|
The SWIG library is still incomplete. Some of the files mentioned in
|
|
the user manual are unavailable. These files will be made available
|
|
when they are ready. Subscribe to the SWIG mailing list for announcements
|
|
and updates.
|
|
|
|
8. SWIG Documentation
|
|
|
|
I have sometimes experienced problems viewing the SWIG documentation in
|
|
some postscript viewers. However, the documentation seems to print
|
|
normally. I'm working on making much of the documentation online,
|
|
but this takes time.
|
|
|
|
Version 0.1 Alpha (February 9, 1996)
|
|
====================================
|
|
|
|
1. Run-time type-checking of SWIG pointers. Pointers are now represented
|
|
as strings with both numeric and encoded type information. This makes
|
|
it a little harder to shoot yourself in the foot (and it eliminates
|
|
some segmentation faults and other oddities).
|
|
|
|
2. Python 1.3 now supported.
|
|
|
|
3. #define and enum can be used to install constants.
|
|
|
|
4. Completely rewrote the %include directive and made it alot more powerful.
|
|
|
|
5. Restructured the SWIG library to make it work better.
|
|
|
|
6. Various bug fixes to Tcl, Perl4, Perl5, and Guile implementations.
|
|
|
|
7. Better implementation of %typedef directive.
|
|
|
|
8. Made some changes to SWIG's class structure to make it easier to expand.
|
|
SWIG is now built into a library file that you can use to make your
|
|
own extenions.
|
|
|
|
9. Made extensive changes to the documentation.
|
|
|
|
10. Minor changes to the SWIG parser to make it use less memory.
|
|
Also took out some extraneous rules that were undocumented and
|
|
didn't work in the first place.
|
|
|
|
11. The SWIG library files "tclsh", "wish", "expect", etc... in the first
|
|
release have been restructured and renamed to "tclsh.i", "wish.i",
|
|
and so on.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|