SWIG (Simplified Wrapper and Interface Generator)
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.