Current development version (0.13-SNAPSHOT)

...

Version 0.12 (20150308)

- Added `-library foo -dependencies bar,baz` to generate `@Library("foo", dependencies = {"bar", "baz"})` (issue #535)
- Added JNA-only -forceStringSignatures option to force String and String[] params even with char* and char** (as opposed to const char* and const char**) (issue #476)
- Added -skipDeprecated option for JNA output (issue #480)
- Added -forceNames option to issue Name annotations for all supported entities (issue #443)
- Added `@Name` support to all entities (issue #443)
- Added partial support for C++ namespaces with GCC-compiled libraries (issue #446)
- Added a new "peer pointer" constructor to JNA structures (issue #442, thanks to topikachu@ for the patch!)
- Added -publicRawBindings and -noRawBindings options (since -genRawBindings is now the default)
- Added support for JNA 4.0.0 (implement getFieldOrder in all structs, see issue #384)
- Added support for node.js target runtime (see example of bindings: https://github.com/ochafik/node-opencl)
- Added -optionalFunctions option to tag functions with `@org.bridj.ann.Optional`
- Added mechanism to skip generation of entities (-skipStructs, -skipEnums, -skipFunctions)
- Added -noStaticInit option for BridJ
- Added -extractDeclarations option to create an interface with all the methods and types of a library (BridJ-specific)
- Improved harvesting of header comments: go further away before the declaration, and remove leading * in oxygen comment lines (issue #481)
- Improved raw mode for BridJ callbacks: in raw mode, generate two crossed callbacks, one of which must be overridden.
- Reverted to by-default chunks parsing, and added -parseInOnePiece instead of -parseChunks (makes parsing more robust to syntax errors)
- Moved to ECJ 4.2.2
- Dropped support for bit fields in JNA structs (users should implement bit manipulation logic manually or use BridJ: JNAerator's fork of JNA that added this feature incurred too much maintenance work).
- Dropped old shared library (DLL, Mach-O) scanning code, superseded by dyncall/dynload and BridJ's demanglers.
- Fixed missing actual name in raw native methods (issue #499, thanks to @washley for the patch!)
- Fixed handling of `const char * const *` params for JNA runtime (issue #476)
- Fixed duplicate bindings with -reification, caused by interaction with interface extraction feature (issue #500)
- Fixed duplicate & mismatching `@Name` annotations with -beautifyNames (issue #460)
- Fixed routing of simple callback with ptr-ptr arg (e.g. `typedef void* (*F3)(int** pptr)`)
- Fixed pointer casts in constants (issue #132)
- Fixed some GLib parsing issues: type literals of null TypeRefs, support signatures with va_list / __gnuc_va_list and __builtin_va_list, and fixed NPE (issue #132)
- Fixed parsing of exotic enums (issue #459)
- Fixed parsing of many Objective-C (property) attributes
- Fixed case-sensitivity of C/C++ modifiers, which prevented some variables from being parsed (issue #449)
- Fixed parsing of unsigned long constants (issue #362, issue #374)
- Fixed generation of raw bindings for callback return types (issue #386)
- Fixed generation of raw bindings with varargs (issue #386, patch contributed by twitwi!)
- Fixed generation of pointer to fake pointer for JNA target (issue #403)
- Fixed handling of library names with hyphens (issue #260)
- Fixed support of identifiers with Object method names (issue #375)
- Fixed support of enums inside objc classes (issue #370)
- Fixed parsing of `@optional` and `@required` objective-c annotations (issue #369)
- Fixed UTF32Char, added VOID, CHAR and byte as predefined types (issue #363)
- Fixed silent disappearance of struct field conversion errors (issue #390)
- Fixed pom files for Maven output modes (removed rococoa dependency by default, added commented repo needed by it)
- Fixed resolution of typedef'd structs when the typedef name was chosen as "better" than the original struct tag (issue #367)
- Fixed restitution of hex constants (issue #362)
- Fixed parsing of __restrict__ args
- Fixed parsing of MinGW system headers (issue #373)
- Fixed wrong use of stdcall mapper outside Windows in JNAerator Runtime
- Fixed recursive typedefs
- Fixed typedefs of forward-declared enums and structs (issue #430)
- Fixed handling of large unicode values (issue #401)
- Fixed warnings for getFieldOrder (issue #408)
- Fixed handling of constant array sizes that depend on enums for BridJ (issue #354)
- Fixed handling of hypens in package names (issue #260)
- Fixed OSGi imports (issue #429, thanks to Michael Werle for the pull request!)
...

Version 0.11 (20130107)

- Fixed infinite loops in simple typedefs (issue #288)
- Fixed some -beautifyNames cases (issue #315)
- Fixed parsing of some C++ templates (including template constructors)
- Fixed "long long" regression
- Fixed JNAeratorMojo.config documentation (issue #330)
- Fixed long / long long / short pointer function return types
- Fixed generation of BridJ C++ constructors
- Fixed enum names that collide with Java identifiers (issue #334)
- Added a type definition override switch, useful force mismatching 32/64bits types to some predefined types (for instance, -TmyVal=intptr_t) 
- Added raw bindings generation for BridJ
- Added parsing of 'using' C++ statements
- Added TypeRef.resolvedJavaIdentifier
- Added parser support for `complex double` (cf. complex.h)
- Added test for BridJ raw signatures
- Moved to ECJ 3.7.2
- Moved to JNA 3.4.0
- Refactored type resolution and conversion
- Rationalized CompilerUtils classpath + bootclasspath

Version 0.10 (20120415, commit 6bc061dfce06b941086a29f696195e82fbaffbdc)

- Release artifacts are available in Maven Central
- Fixed generation of large long values
- Fixed conditional parsing of __in modifier (and COM modifiers in general)
- Fixed generation of globals and variables included more than once
- Fixed parsing of unary '-' operator
- Fixed parsing of C++ constructors and class inheritance
- Fixed parsing of default values for type name template arguments
- Fixed parsing of const type mutator (fixes `void f(struct x * const);`) (issue #205)
- Fixed parsing of null char escape '\0' (issue #214)
- Fixed conversion of `int a; f(&a);`
- Fixed handling of "long int" and "short int" (issue #267)
- Fixed parsing of __declspec, __attribute__ and some modifiers-related regressions
- Fixed conversion of __inline functions when -convertBodies is on
- Fixed NPE in JNAeratorUtils.findBestPlainStorageName (issue #258)
- Fixed parsing of empty strings (spotted by @ENargit in issue #255)
- Fixed generation of typedefs (issue #273)
0 Fixed generation of casted constants (issue #96)
- Fixed generation of unnamed structs and unions (issue #94)
- Fixed multidimensional array sizes for JNA target (issue #165)
- Fixed handling of hexadecimal constants (issue #296)
- Fixed conversion of comments for BridJ target runtime
- Fixed generation of BridJ calling conventions (issue #282)
- Fixed handling of __stdcall function pointers and functions (issue #282)
- Fixed mapping of bool for JNA(erator) target runtime (issue #289)
- Fixed parsing of malloc, free and many potential modifiers (issue #278 and issue #280)
- Fixed handling of unicode library paths (issue #276)
- Fixed parsing of friend members in C++ classes, and of assignment operators (operator+=, ...)
- Fixed generation of very simple edge cases "long f();", "short f();", "f();" (issue #270)
- Changed naming of anonymous function pointer types : `void f(void (*arg)());` now yields callback `f_arg_callback`
- Enhanced handling of parsing failures : faster failover to "sliced" parsing, reduced verbosity of errors
- Added Maven output modes and -mode switch to choose between Jar, StandaloneJar, Directory, Maven, AutoGeneratedMaven (deprecated -noJar and -noComp)
- Added support for MSVC asm soups + added -removeInlineAsm hack switch that tries to regex-remove __asm soups that still cannot be parsed out
- Added support for BridJ's bundled libraries mechanism and paths (+ enforce them using an enum param)
- Added parsing of expression initializer blocks `v = { 1, 2, 3};`
- Added preservation of original textual representation of constants
- Added tr1 to default C++ includes
- Generate symbols of all files in directories where any file was explicitly listed
- Added support for command-line definition of macros with arguments : -Df(x)=whatever
- Added conversion of `malloc(x * y * sizeof(whatever))`
- Removed C++ name mangling feature for JNA target runtime (was simplistic anyway)

Version 0.9.9 (20111107, 1cad7b05da2e89ce53246f30b181159ef8fce0c3)

- Default runtime target is now BridJ: use -runtime JNAerator to retain old behaviour 
- Added option -emptyStructsAsForwardDecls to force generation of opaque pointers for empty structs (even if they inherit from other empty structs)
- Fixed Maven plugin : 
	- add generated files to compilation sources
	- now use "generate" goal (issue #152)
- Fixed handling of the empty package
- Fixed verbose mode (logs used to self-overwrite between different parsed files)
- Fixed rare package/className clash in pretty-printer (issue #182)
- Fixed C++ / Object.class method name clashes
- Fixed regression on fake pointers with JNA-based runtimes
- Fixed parsing of large unsigned longs
- Fixed generation of multiple anonymous enums (issue #96)
- Fixed BridJ enum items that refer to other items
- Fixed generation of string constant expressions cast as Pointers (only for JNAerator and BridJ runtimes)
- Fixed -runtime JNA target bug that used JNAerator target for generated library loading code (issue #95 @ jnaerator)
- Fixed varargs & param name generation for BridJ (thanks to Eric Emonet for the fix : https://github.com/ochafik/nativelibs4java/commit/74b59d5152333bf2d7f9d9613662f5fc3c1ecaf2)
- Enhanced BridJ runtime : only use CRuntime when there's no C++ contents
- Updated to ANTLR 3.4
- Updated runtime to JNA 3.3.0

Version 0.9.8 (r2128, 20110621)

- Better COM JNAeration for BridJ (now supports and converts __declspec(uuid("xxx")) attributes !)
- Accept some ill-formed constructs (mismatched extern "C" { ... }) for better cross-files parsing
- Fixed JNAeration of nested dependent constants defines
- Fixed automatic macro definitions : don't override already defined macros
- Fixed parsing of singleton extern "C" definitions (without curly braces)
- Fixed issue 86 (http://code.google.com/p/jnaerator/issues/detail?id=86) : generate proper array creation code for empty structs with the JNA runtime.
- Fixed issue 85 (http://code.google.com/p/jnaerator/issues/detail?id=85) : generate proper constant pointer casting code for BridJ : `#define PTR ((void*)-1)` generates `Pointer<?> PTR = Pointer.pointerToAddress(-1);`
- Fixed generation of enums
- Fixed typing of (constant) boolean expressions

Version 0.9.7 (r1817, 20110329)

- Fixed generation of typed pointers (+ introduced undefined types for BridJ runtime)
- Added generation of globals for BridJ
- Added -parseInOneChunk option to control parsing more finely (forces regular, non isolated-mode parsing, which is more correct but also more fragile)
- Fixed enum renaming (issue 82: http://code.google.com/p/jnaerator/issues/detail?id=82)
- Fixed unescaped quotes in string defines (issue 79: http://code.google.com/p/jnaerator/issues/detail?id=79)
- Fixed some exotic function pointer syntax (issue 84: http://code.google.com/p/jnaerator/issues/detail?id=84)
- Fixed binding of Windows' BOOL type for BridJ: it's int, not boolean !!!

Version 0.9.6 (r1638, 20110204)

- Added explicit call to setFieldOrder in JNAerated JNA structures (no need for BridJ, which has its @Field annotations to guarantee proper order)
- Enhanced parsing and AST generation of C/C++ expressions
- Fixed BridJ inherited struct fields indexes computation

Version 0.9.5 (r1330, 20101011):

- Moved to JNA 3.2.7
- Support anonymous bit fields : struct S { int :7; int b; }
- Better beautification of underscored typedefs : typedef struct _Toto___ { ... } Toto; now handled properly
- Extended -I command line syntax to include files directly (which does the same as an #include statement) : files are parsed but their content is not targetted for code generation
- Added -beautifyNames switch to transform some_func() into someFunc()
(http://code.google.com/p/jnaerator/issues/detail?id=59)
- Fixed names with dollars (and Scala struct field setters in particular !)
- Added -scalaStructSetters option
- Fixed callbacks fields
- Fixed studio JVM hanging issue (http://code.google.com/p/jnaerator/issues/detail?id=66)
- JNAerator Studio now launched when there's no command line args (JAR is double-clickable, at last !)
- Fixed struct** fields (PointerByReference instead of faulty Struct.ByReference[] !)
- Changed name of callbacks's single method from "invoke" to "apply" (to make them Scala-friendly)
- Fixed parsing of large files (reverted EASILY_DEBUGGABLE_BUT_FRAGILE_PARSING_MODE to false)
- Added __restrict keyword
- Added -synchronized switch to mark generated methods as synchronized (only in direct-mode JNA and BridJ outputs)
- Fixed generation of BridJ enums, constants and arrays
- Parse(skip) GCC inline assembler (__asm__)
- Parse some ObjectiveC 2 constructs : @package, @required and @optional member modifiers + new @property syntax
- Fixed parser regressions (0x7f, +10)
- Added experimental reification feature for BridJ output (-reification switch) : transforms functions that have a first "this-like" pointer argument into methods of the
corresponding pointer type. 
	Instead of getting :
	{{{
	public native static TestLibrary.GXEntity gxCreateEntity(int someParam);
	public native static void gxEntitySetValue(TestLibrary.GXEntity entity, int key,
	int value);
	public native static int gxEntityGetValue(TestLibrary.GXEntity entity, int key);
	/// Pointer to unknown (opaque) type
	public static class GXEntity extends TypedPointer {
			public GXEntity(long address) {
					super(address);
			}
			public GXEntity(Pointer address) {
					super(address);
			}
	};
	}}}
	You'd get the assembly-optimizable BridJ binding :
	{{{
	native static @Ptr long gxCreateEntity(int someParam);
	native static void gxEntitySetValue(@Ptr long entity, int key, int value);
	native static int gxEntityGetValue(@Ptr long entity, int key);
	public static class GXEntity extends TypedPointer {
			public GXEntity(long address) {
					super(address);
			}
			public GXEntity(Pointer address) {
					super(address);
			}
			public static GXEntity create(int someParam) {
					long ret = gxCreateEntity(someParam);
					return ret == null ? null : new GXEntity(ret);
			}
			public void setValue(int key, int value) {
					gxEntitySetValue(this.peer, key, value);
			}
			public int getValue(int key) {
					return gxEntityGetValue(this.peer, key);
			}
	}
	}}}

Version 0.9.4 (r1067@nl4j, 20100717)

- better C/C++ parsing (cast operators, templates, anonymous structs...)
- fixed JNAerator issues #63 ("JNA runtime does not
support bit fields"), #64 ("on Windows, use
%ProgramFiles%" to infer Visual Studio install directory.")
- enhanced BridJ runtime generation support
- enhanced debug output in verbose mode
- Added -beanStructs command line option to generate getters and setters for JNA (issue 62 @ jnaerator)

Version 0.9.3 (r760@nl4j, 20100121)

- Fixed parsing of some common C expressions (better tolerates inline functions)
- Fixed parsing of OpenCL source codes (used by JavaCL Generator project on NativeLibs4Java/JavaCL project)
- Introduced experimental lightweight structures support (use new "-runtime JNAeratorNL4JStructs" switch)
- Added automatic import statements generation to make source code smaller and easier to read (use new -noAutoImports switch to disable).

Version 0.9.2 (r886, 20081030):

- Fixed issue #31 : parse unnamed "char *const *" function arguments
- Fixed issue #35 : byref, byval, in, out and bycopy can now be used in most contexts (general case of issue #22 is still not fixed, though)
- Fixed regression on structs with callbacks
- Added "oneway" Objective C modifier
- Allow java-only modifiers, declspec and gcc attributes as identifiers (native, transient, dllimport...)
- Fixed issue #38 : Function pointer pointers were completely broken
- Fixed regression since maven move : missed objectivec static forwards exclusion list
- Deprecated Structure.toArray(), renamed to Structure.castToArray().
- Added static Structure.newArray(Class<? extends Structure>, int length)
- JNAerating a typed static newArray(int length) for each structure
- Added "C type" comment to struct fields with non-primitive types
- Deprecated StringPointer
- Added basic output customization capabilities with -choicesOut & -choice switches : syntax is one line of the C function declaration, then n lines of corresponding Java declarations, each function block being separated by an empty line. 
- Fixed issue #39 : Failure to parse define with expression containing a cast
- Fixed long constants being generated as NativeLong (now long)
- Fixed regression with function pre-comments
- Fixed generation of references to constants defined in other libraries
- size_t is now mapped to NativeSize. Classes NativeSizeByReference & GlobalNativeSize have also been added, along with a backwards compatibility switch -sizeAsLong (and a switch -gccLong to treat 'long' as 'size_t')
- Fixed primitive type promotion of constants (NativeLong -> long)
- Added -ifRegexMatch switch 
- Define __STDC__ in auto configuration
- Fixed issue #44: Hypens in header names translate to hyphens in class names
- Byref & globals mapping of NSInteger now uses NativeSizeByReference and GlobalNativeSize, instead of NativeLong derivates


