                                                                -*-text-*-


==> For instructions on how to get swig bindings working, read the
     INSTALL file in this directory.


SVN HEADER -> SWIG MODULE
-------------------------

Subversion has a bunch of include files, some which are interesting for
wrapping with language bindings, and others which are simple type
declarations and constants. Below is the table which maps each header
to its disposition:

INCLUDE           SWIG MODULE NAME
svn_auth.h        _core (some symbols)
svn_base64.h      (1)
svn_client.h      _client
svn_cmdline.h     (2)
svn_config.h      _core (some symbols)
svn_ctype.h       (1)
svn_dav.h         (2)
svn_delta.h       _delta
svn_diff.h        _diff
svn_error.h       (2)
svn_error_codes.h _core
svn_fs.h          _fs
svn_hash.h        (1)
svn_io.h          _core (only stream functions)
svn_md5.h         (1)
svn_opt.h         _core (some symbols)
svn_path.h        _core (some symbols, 1)
svn_pools.h       _core (only pool manipulation)
svn_props.h       _core (some symbols)
svn_quoprint.h    (1)
svn_ra.h          _ra
svn_ra_svn.h      (2)
svn_repos.h       _repos
svn_sorts.h       (1)
svn_string.h      (3)
svn_subst.h       (2)
svn_test.h        (2)
svn_time.h        _core (some symbols)
svn_types.h       (3)
svn_utf.h         (1)
svn_version.h     _core (some symbols)
svn_wc.h          _wc
svn_xml.h         (1)

apr*.h            (3)

(1) It is assumed that the binding languages will provide this
    functionality separately.
    ### HELP: Java does not provide base-64 natively.  Should we wrap
    ### SVN's with SWIG, or include a stand-alone ASF implementation
    ### (such as from Jakarta Commons Codec)?

(2) No significant/interesting functionality to export.

(3) A SWIG interface file exists, but only to export types used by other
    modules.  No binding module is actually constructed from this
    header.


SWIG MODULES
------------

We will produce a number of modules/classes, expecting the binding
languages to organize these into a package, and present the Subversion
libraries' API in a manner familiar to programmers of a given
language.  For instance, the Python bindings are handled as follows:

svn.core
svn.client
svn.delta
svn.fs
svn.ra
svn.repos
svn.wc




THUNK EDITORS
-------------

"Thunk" is Windows programming term describing a "go between."  Our
SWIG bindings generally implement editors in C which delegate to the
language-specific extension API (e.g. its C API for Python, JNI for
Java, etc.).  This transitional object implements a Subversion editor
interface, allowing it to be passed between its native library code
and the runtime of the language which the bindings were written for.




SWIG INTERFACE FILE CODING NOTES
--------------------------------

Always place %{ #include "foo.h" ... %} sections above any code which
will actually cause SWIG to generate wrappers.  This is because those
wrappers may need declarations from the headers to be valid C.
Practically, this means that the %{ ... %} block should be above any
"%include *.h" statements (%includes of *.i files are fine, since they
should be self-sufficient).

