SWIG (Simplified Wrapper and Interface Generator)


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.




 











