SWIG 1.1 Porting Guide June 22, 1997 Interface files =============== Interface files written for SWIG 1.0 should work with SWIG 1.1. However, the following features are now deprecated or have been replaced by a better version. Warning messages may be issued in certain cases. 1. The %{,%} block is no longer required in interface files. 2. The '%init funcname' directive is no longer supported. Use '%module modname' instead. 3. The %alpha and %raw directives are no longer supported due to the documentation system rewrite. Use the following instead : %style nosort %style sort 4. The %name() directive can no longer be applied with an 'empty' name. This was allowed for classes and structures in 1.0, but is no longer allowed in 1.1. 5. NULL pointers are now allowed in function calls. The -DALLOW_NULL flag is obsolete and ignored. To prevent NULL pointers from being passed, the SWIG constraints.i library file can be used instead : %include constraints.i %apply Pointer NONNULL { void *, Vector * }; SWIG C++ API ============ The 'Language' class used to build SWIG modules has changed and is no longer fully compatible with SWIG 1.0 (this was unavoidable). As a result, language modules written for 1.0 will need to be modified to work with 1.1. Please read the chapter on "Extending SWIG" for all of the gory details. 1. The declare_const() method now has an extra argument void declare_const(char *name, char *iname, DataType *type, char *value); 2. The set_module() method now takes a NULL-terminated list of module names : void set_module(char *modname, char **other_modules); 3. A new method create_command() is now required. void create_command(char *cname, char *scriptname); This function is used to create scripting language commands and is needed to support some code-generation optimization features in version 1.1. 4. The following functions are deprecated and no longer required in a Language module : usage_var() usage_func() usage_const() set_init() 5. The following functions have been modified in the C++ API cpp_open_class() cpp_inherit() cpp_static_var() * ADDED * cpp_close_start() * DELETED * 6. The documentation system has been completely rewritten. Language modules must now produce their own documentation entries. 7. Typemaps. Use of typemaps is language specific. Old SWIG modules will have to be modified in order to use them effectively. 8. New language methods (optional) type_mangle(DataType *t); add_typedef(DataType *t, char *name); cpp_class_decl(char *classname, char *ctyle, char *name); pragma(char *lang, char *op, char *value); import(char *filename); 9. Other changes. Changes have been made to virtually all SWIG datatypes and internal functions. Old language modules may run into compatibilities here and there. 10. An example. Perhaps the best way to port an old language module to SWIG 1.1 is look at an older module in the 1.1 release. The Perl4 module is a good example of a 1.0 module that has been retrofitted to work in SWIG 1.1. Rewriting a language module =========================== SWIG 1.1 provides a number of advanced features (like typemaps) that greatly simplify the process of writing a language module. You may consider looking the Examples/lang example to see a "modern" language module. Unlike the old approach, the new system involves about 75% less C++ coding and is significantly more flexible.