diff --git a/CHANGES b/CHANGES new file mode 100644 index 000000000..85242793c --- /dev/null +++ b/CHANGES @@ -0,0 +1,2132 @@ +SWIG (Simplified Wrapper and Interface Generator) + +1/11/00 : Dave Beazley & Dustin Mitchell + Completely reorganized the SWIG directory structure. The + basic organization is now: + + Source/ SWIG source code + Lib/ SWIG library files (swig_lib) + Doc/ Documentation + Examples/ Examples + + More directories will be added as needed. + +12/08/99: Loic Dachary (loic@senga.org) + Enhanced package handling for perl5 and c++. + + With new option -hide Foo::Bar, every perl5 object (Frob) is + qualified by Foo::Bar::Frob. The package name is solely used + to encapsulate C/C++ wrappers output in _wrap.c and the + corresponding perl package in .pm. Note that a package + name may contain :: (Frob::Nitz) and will be relative to the + package name provided by -hide (Foo::Bar::Frob::Nitz). + + In *_wrap.c, SWIG_init macro is used. Was previously defined + but not used and simplifies code. + + Added typemap(perl5,perl5in) and typemap(perl5,perl5out) that + do the equivalent of typemap(perl5,in) and typemap(perl5,out) + but contain perl code and applies to wrappers generated by + -shadow. + + Lacking proper regression tests I used + Examples/perl5/{c++,constraint,defarg,except, + graph/graph[1234],multinherit,nested,shadow,simple,tree, + typemaps/{argv,argv2,arraymember,database,file,ignore,integer, + output,passref,reference,return}}/. I ran swig with and without + the patches, diff the generatedsources, run the .pl files + and checked that the results are identical. In all those examples + I had no error. + +11/21/99: Modified the Tcl module to provide full variable linking capabilities + to all datatypes. In previous versions, a pair of accessor functions + were created for datatypes incompatible with the Tcl_LinkVar() function. + Now, we simply use variable traces to support everything. This may + break scripts that rely upon the older behavior. + *** POTENTIAL INCOMPATIBILITY *** + +11/21/99: Added slight tweak to wrapper generator to collect local variables + of similar type. Produces somewhat more compact wrapper code. + +11/20/99: Modified the Tcl module to use SWIG_GetArgs() to parse + arguments. This is a technique borrowed from Python in which + arguments are converted using a format string convention similiar + to fprintf(). This results in a *substantial* reduction in the + size of the resulting wrapper code with only a modest runtime overhead + in going through the extra conversion function. + +11/13/99: Completely rewrote the class/structure generation code for the + Tcl module. Now, a small set of runtime functions are used + to implement the functionality for all classes (instead of a + massive amount of runtime code being generated for each class). + Class specific information is simply encoded in a series of + static tables. This results in a *HUGE* reduction in wrapper + code size--especially for C++. + +11/13/99: Removed the -tcl (Tcl 7.x) module. Tcl 8.0 is now several + years old and the defacto standard--no real reason to keep + supporting the old version at this point. + +11/13/99: Cleaned up -c option for Python module. The pyexp.swg file + is now gone. + +11/13/99: Fixed external declarations to work better with static linking + on Windows. Static linking should now be possible by defining + the -DSTATIC_LINK option on the command line. Patch contributed + by Alberto Fonseca. + +11/5/99 : Fixed an obscure code generation bug related to the generation + of default constructors. Bug reported by Brad Clements. + +11/5/99 : Fixed a few memory problems found by purify. + +11/5/99 : Officially deprecated the -htcl, -htk, and -plugin options + from the Tcl and Tcl8 modules. + +10/26/99: Removed unused variable from python/typemaps.i. Patch + contributed by Keith Davidson. + +8/16/99 : Added _WIN32 symbol to libraries to better support Windows. + +8/16/99 : Deprecated the Perl4 module. It is no longer included in the + distribution and no longer supported. In the entire 3 years SWIG + has been around I never received a single comment about it so I'm + assuming no one will miss it... + +8/16/99 : Modified the type-checking code to register type mappings using a + table instead of repeated calls to SWIG_RegisterMapping(). This + reduces the size of the module initialization function somewhat. + +8/15/99 : Cleaned up the pointer type-checking code in the Tcl module. + +8/15/99 : Many changes to the libraries to support runtime libraries. + +8/13/99 : Eliminated C++ compiler warning messages about extern "C" linkage. + +8/13/99 : Some cleanup of Python .swg files to better support runtime libraries + on Windows. + +8/13/99 : Modified the %pragma directive to attach pragmas declared inside + a class definition to the class itself. For example: + + class foo { + ... + %pragma(python) addtomethod = "insert:print `hello world'" + ... + } + + Most people don't need to worry about how this works. For people + writing backend modules, class-based pragmas work like this: + + lang->cpp_open_class() // Open a class + lang->cpp_pragma() // Supply pragmas + ... // Emit members + + lang->cpp_close_class() // Close the class + + All of the pragmas are passed first since they might be used to + affect the code generation of other members. Please see + the Python module for an example. Patches contributed + by Robin Dunn. + +8/13/99 : Patch to Python shadow classes to eliminate ignored + exception errors in destructors. Patch contributed + by Robin Dunn. + +8/11/99 : Minor patch to swig_lib/python/swigptr.swg (added SWIGSTATIC + declaration). Patch contributed by Lyle Johnson. + +8/11/99 : Added FIRSTKEY/NEXTKEY methods to Perl5 shadow classes + Patch contributed by Dennis Marsa. + +8/11/99 : Modified Python module so that NULL pointers are returned + and passed as 'None.' Patch contributed by Tal Shalif. + +8/10/99 : Fixed missing 'int' specifiers in various places. + +8/10/99 : Added Windows makefile for Runtime libraries. Contributed + by Bob Techentin. + +8/10/99 : Fixed minor problem in Python runtime makefile introduced + by keyword arguments. + +8/8/99 : Changed $target of perl5(out) typemap from ST(0) to + ST(argvi). Patch contributed by Geoffrey Hort. + +8/8/99 : Fixed bug in typemap checking related to the ANY keyword + in arrays and ignored arguments. Error reported by + Geoffrey Hort. + +8/8/99 : %enabledoc and %disabledoc directives can now be used + inside class/structure definitions. However, no check + is made to see if they are balanced (i.e., a %disabledoc + directive inside a class does not have to have a matching + %enabledoc in the same class). + +8/8/99 : Keyword argument handling is now supported in the Python + module. For example: + + int foo(char *bar, int spam, double x); + + Can be called from Python as + + foo(x = 3.4, bar="hello", spam=42) + + To enable this feature, run SWIG with the '-keyword' command + line option. Mixing keyword and default arguments + should work as well. Unnamed arguments are assigned names + such as "arg1", "arg2", etc... + + *** POTENTIAL INCOMPATIBILITY *** + Functions with duplicate argument names such as + bar(int *OUTPUT, int *OUTPUT) will likely cause problematic + wrapper code to be generated. To fix this, use different + names or use %apply to map typemaps to alternate names. + +8/8/99 : Handling of the 'this' pointer has been changed in Python shadow + classes. Previously, dereferencing of '.this' occured in the + Python shadow class itself. Now, this step occurs in the C + wrappers using the following function: + + SWIG_GetPtrObj(PyObject *, void **ptr, char *type) + + This function can accept either a string containing a pointer + or a shadow class instance with a '.this' attribute of + appropriate type. This change allows the following: + + 1. The real shadow class instance for an object is + passed to the C wrappers where it can be examined/modified + by typemaps. + + 2. Handling of default/keyword arguments is now greatly + simplified. + + 3. The Python wrapper code is much more simple. + + Plus, it eliminated more than 300 lines of C++ code in the + Python module. + + *** CAVEAT : This requires the abstract object interface. + It should work with Python 1.4, but probably nothing older + than that. + + +8/8/99 : Fixed handling of "const" and pointers in classes. In particular, + declarations such as + + class foo { + ... + const char *msg; + const int *iptr; + } + + are handled as assignable variables as opposed to constant + values (this is the correct behavior in C/C++). Note: + declarations such as "char *const msg" are still unsupported. + Constants declared at the global level using const are also + broken (because I have a number of interfaces that rely upon + this behavior). + + *** POTENTIAL INCOMPATIBILITY *** This may break interfaces that + mistakenly treat 'const char *' types as constant values. + +8/8/99 : Modified the parser to support bit-fields. For example: + + typedef struct { + unsigned int is_keyword : 1; + unsigned int is_extern : 1; + unsigned int is_static : 1; + } flags; + + Bit-fields can only be applied to integer types and their + are other restrictions. SWIG performs no such type-checking + (although the C compiler will catch problems when it tries to + compile the wrapper code). + +8/8/99 : Removed trailing space of $basetype substitution in typemaps. + This is to allow things like this: + + %typemap(python, argout) spam** OUTPUT{ + ... + char* a = "$basetype_p"; + ... + } + + (Patch suggested by Nathan Dunfield). + +6/22/99 : Made a very slight tweak to the Perl5 shadow class + code that allows typemaps to alter the return type + of objects (to support polymorphic types). Patch + contributed by Drake Diedrich. + +4/8/99 : Fixed null pointer handling bug in Perl module. + Patch contributed by Junio Hamano. + +3/17/99 : Fixed bug in perl5ptr.swg for ActiveState Perl. + Patch contributed by Greg Anderson. + +2/27/99 : Eliminated segmentation fault when Swig runs on + empty files. + +2/27/99 : Added patch to Guile module to eliminate unused + variables. Contributed by Mike Simons. + +2/27/99 : Fixed problem with %addmethods returning references. + +2/27/99 : Fixed Runtime/Makefile. Patch contributed by + Mike Romberg. + +2/27/99 : Incorporated patches to the type-checker. + +2/27/99 : Fixed problem with -exportall switch and shadow classes + in Perl5 module. Patch contributed by Dennis Marsa. + +2/27/99 : Modified Perl5 module to recognize 'undef' as a NULL char *. + Patch contributed by Junio Hamano. + +2/27/99 : Fixed the Perl5 module to support the newer versions of + ActiveState Perl for Win32. + +2/27/99 : Fixed the include order of files specified with the + -I option. + +Version 1.1 Patch 5 (February 5, 1998) +====================================== +2/4/98 : Fixed a bug in the configure script when different package + locations are specified (--with-tclincl, etc...). + +2/2/98 : Fixed name-clash bug related to the switch to C macros for accessor + functions. The new scheme did not work correctly for objects + with members such as 'obj', 'val', etc... Fixed the bug by + appending the word 'swig' to macro argument names. Patch + contributed by Rudy Albachten. + +2/2/98 : Slight fix to the Perl5 module to eliminate warning messages + about 'varname used only once : possible typo'. Fix + contributed by Rudy Albachten. + +1/9/98 : Fixed a bug in the Perl 5 module related to the creation of + constants and shadow classes. + +1/9/98 : Fixed linking bug with Python 1.5 embed.i library file. + +Version 1.1 Patch 4 (January 4, 1998) +===================================== + +1/4/98 : Changed structured of the Examples directory to be more friendly + to Borland C++. + +1/4/98 : Added the function Makefile.win.bc for compiling the examples + under Borland 5.2. + +1/4/98 : Slight change to the perl5 module and C++ compilation. The + 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 > + + was getting munged into Foo> 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 *a, vector *b); + + When used, the entire name 'vector' 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. + + + + + + + + + + + + + + + + diff --git a/install-sh b/install-sh new file mode 100755 index 000000000..0ff4b6a08 --- /dev/null +++ b/install-sh @@ -0,0 +1,119 @@ +#!/bin/sh + +# +# install - install a program, script, or datafile +# This comes from X11R5; it is not part of GNU. +# +# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ +# +# This script is compatible with the BSD install script, but was written +# from scratch. +# + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" + +instcmd="$mvprog" +chmodcmd="" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +fi + +if [ x"$dst" = x ] +then + echo "install: no destination specified" + exit 1 +fi + + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + +if [ -d $dst ] +then + dst="$dst"/`basename $src` +fi + +# Make a temp file name in the proper directory. + +dstdir=`dirname $dst` +dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + +$doit $instcmd $src $dsttmp + +# and set any options; do chmod last to preserve setuid bits + +if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi +if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi +if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi +if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi + +# Now rename the file to the real destination. + +$doit $rmcmd $dst +$doit $mvcmd $dsttmp $dst + + +exit 0