+* Load and preprocess the api definition.
+
+ - Perform a bunch of 'fix up' processing on the data structures such
+ as inserting anonymous types which are not generated by the plugin.
+
+ - Create a full dependency tree for the objects
+ specificallyreferenced by the api definition so only objects and
+ functions of interest are included.
+
+ - Resolve all the various export options using some rules and store
+ the information about the selected options onto target objects.
+
+Then generate-api produces the java files from a combination of the
+processed data definitions and the api definition.
+
+* Export 'libraries'. These are static classes of functions and/or
+ constants.
+
+ - Can include static methods. Methods can have per-method template
+ overrides.
+
+ - Can include constants.
+
+* Export 'structures'. These represent C pointers.
+
+ - struct/union have a MemorySegment, a layout, and potentially
+ accessors for fields.
+
+ - anonymous structures just have a MemoryAddress and no accessors.
+
+ - Can include static and member methods. Methods can have per-method
+ template overrides.
+
+ - Can include constants.
+
+* Export 'calls'. These are function interfaces for function pointers.
+
+ - The interface is the java form of the call.
+
+ - If available a typedef name is used, otherwise the names are mapped
+ to a mangled name of the form Call_<args>_<return>.
+
+ - An upcall factory creates an upcall to an instance of a hidden
+ trampline interface which performs the mapping of arguments to java
+ and returns to c.
+
+ - A downcall factory creates a downcall which maps the java call to
+ native and back.
+
+ - Both factories return a record of type FunctionPointer<type> which
+ contains both a NativeSymbol and the java interface instance so they
+ can be used from either environment.
+
+* Export 'constants'. These are referenced enums or any defines which
+ haven't been included in any other library or struct.
+
+ - enums are mapped to an interface with fields of:
+ 'static final int FOO = xx'
+ of
+ 'static final long FOO = xx'
+
+ - defines are mapped to a matching native type which includes
+ floating point types and strings in addition to all the integral
+ types.
+
+lib/code.pm is used to generate some of the code and handle
+templating. Common code templates are defined in lib/code.api but can
+be extended or replaced by a given api file.
+
+lib/method.pm is used to generate per-field (struct) and per-argument
+(function) sub-templates for mapping c to and from java. The
+sub-templates it uses are defined in lib/types.api but again they can
+be extended or replaced by a given api file.
+
+Status
+------