Xapian-bindings 1.4.18 (2021-01-14):

Portability:

* Support macOS 11.0 - AC_CANONICAL_HOST identifies this as darwin20, which
  wasn't caught by our glob pattern.  Patch from FX Coudert in
  https://github.com/xapian/xapian/pull/319

CSharp:

* Wrap const std::string* parameters to accept a string or null in C#.  See #204.

Java:

* Wrap const std::string* parameters to accept a String or null in Java.

Perl:

* Fix minor documentation typo.

Xapian-bindings 1.4.17 (2020-08-21):

* No user-visible change except for bumping the version to indicate
  compatibility with Xapian-core 1.4.17.

Xapian-bindings 1.4.16 (2020-06-08):

General:

* Remove code to support SVN snapshots since we stopped using SVN more than 5
  years ago.

* Ignore overloads for logical ops, *, /.  These were already ignored for
  several languages, and aren't actually usefully wrapped for any of the other
  languages.

CSharp:

* Work around mono terminfo parsing bug in more cases.  With this, "make",
  "make check", "make install" and "make uninstall" all work on Ubuntu 18.10.
  Patch from Dipanshu Garg, fixes https://github.com/xapian/xapian/pull/287 and
  #801.

Lua:

* Allow passing a Lua function as a MatchSpy.  This was supposed to be
  supported already, but the typemaps weren't set up.

* On platforms where sizeof(long) is 4, SWIG was wrapping Xapian::BAD_VALUENO
  as a negative constant in Lua, which was then rejected by a check which
  disallows passing negative values for unsigned C++ types.  We now direct SWIG
  to handle Xapian::valueno as double (which is what numbers in Lua usually
  actually are) which gives us an unsigned constant, and also eliminates the
  negative value check.

* Correct documentation - get_description() is wrapped as tostring() in Lua,
  not str() as we previously claimed.

* Add test coverage for passing Lua function for a Stopper.

Perl:

* Resolve the remaining issues and remove the "experimental" marker:

  + Add search_xapian_compat() function which sets up aliases in the
    Search::Xapian namespace to aid writing code which uses either
    Search::Xapian or this module.

  + Allow passing Perl sub for simpler Xapian functor classes.  This fills in a
    missing feature compared to Search::Xapian.  See #523.

  + Remove useless PerlStopper class which was an incomplete copy of the
    apparently non-functional Search::Xapian::PerlStopper.  We now support
    passing a Perl sub for a Stopper object.

  + Adjust some method names to match Search::Xapian.  Iterators now support
    inc() (and dec() where the C++ class supports operator--) like
    Search::Xapian, rather than increment() and prev().  Reported by Eric Wong
    in #523.

  + Drop undocumented and unexpected extra equals() method.

  + Provide compatibility with ENQ_ASCENDING, etc constants.  SWIG wraps these
    as $Xapian::Enquire::ASCENDING, which better matches the C++ API, but
    Search::Xapian wraps this as Search::Xapian::ENQ_ASCENDING, etc so provide
    those too for compatibility.  Reported by Eric Wong in #523.

  + Drop stringification and int conversion overloads.  These seem more
    confusing than helpful, and overloading stringification works badly
    with SWIG-generated bindings.

  + Document remaining known differences from Search::Xapian.

* Update recently tested versions in README.

* Improve documentation.

* Fix t/02pod.t to look for files in right directory.

Ruby:

* Don't print iterator sizes to stdout.  This was some debugging accidentally
  left in as part of a change in 1.4.12.  Patch from Dan Callaghan.

Xapian-bindings 1.4.15 (2020-02-24):

Perl:

* Improve comment about App::Prove.

Ruby:

* Support Ruby 2.7.

Xapian-bindings 1.4.14 (2019-11-23):

Python:

* Remove broken replicationtest.py.  It's never worked reliably, and because
  of that was disabled shortly after being added over a decade ago.
  Unsurprisingly it's bit-rotted at least a bit since.  Nobody seems interested
  in fixing it, so it's time to just get rid of it.  Closes #320.

Python3:

* Remove broken replicationtest.py.  It's never worked reliably, and because
  of that was disabled shortly after being added over a decade ago.
  Unsurprisingly it's bit-rotted at least a bit since.  Nobody seems interested
  in fixing it, so it's time to just get rid of it.  Closes #320.

Xapian-bindings 1.4.13 (2019-10-14):

General:

* Omit SWIG exception handling for destructors.  Since C++11, destructors can't
  throw by default and we don't override that default, so there's no point
  adding exception handling code for them.

* Ensure doccomments.i is distributed.  If you unpacked a distribution tarball,
  configured it and then ran "make dist" python/doccomments.i and
  python3/doccomments.i would be missing unless you configured the tree with
  --enable-maintainer-mode.

PHP:

* Check for php-config5.6 and php-config5.5 in configure as these versioned
  names are used in some packages (such as those from the ondrej/php PPA).

PHP7:

* Work around build failure on Illuminos.  Fixes
  https://trac.xapian.org/ticket/793, reported by Amitai Schleier.

Ruby:

* smoketest.rb: Use #push not #append on Array to restore compatibility with
  Ruby < 2.5 (broken by changes in 1.4.12).

* Expand tabs in Ruby code since using spaces for indentation seems to be
  preferred Ruby style.

* Remove trailing `;` from Ruby code.

Xapian-bindings 1.4.12 (2019-07-23):

Documentation:

* Update bindings HACKING document.  Reported as out of date by Niwesh Gupta.

CSharp:

* Work around mono terminfo parsing bug - older cli-sn fails with e.g.
  TERM=xterm-256color due to: https://github.com/mono/mono/issues/6752
  Encountered on Kubuntu 18.10 and debugged by Tejasvi Tomar.  Seems to be
  fixed in the mono version in Debian buster.

Perl:

* Suppress warnings from older Perl headers due to use of constructs which look
  like C++11 user-defined literals.  They're fixed in newer versions so they're
  just noise in our build.  We were working around these in the CI build, so
  drop that workaround as we want to make the build warning-clean for users
  too.  Reported by daniel93 on #xapian.

Python3:

* Fix build for changes in Sphinx 2.0 (which drops support for sphinx.main()).
  Fixes #778, reported by karolyi.  Also reported by Gaurav Arora.

* We now throw UnicodeEncodeError for bad Unicode string input.  Previously
  cases such as a lone surrogate would be handled by quietly skipping the bad
  codepoints when converting to UTF-8 to pass to Xapian.

* We no longer use the deprecated old-style Py_UNICODE API, which currently
  gives deprecation warnings and is slated to be removed in Python 4.0.

Ruby:

* Add support for block iteration.  All the iterator methods in the Ruby API
  now accept an optional block.  If no block is given an array is returned so
  existing code will still work.  Partly based on a patch in
  https://github.com/xapian/xapian/pull/232 from Cong Ding.

* Add missing wrappers for all the C++ methods returning iterators which
  weren't wrapped for Ruby.  Fixes #777, reported by do.

* Suppress warnings from Ruby 2.3 headers due to use of register and
  constructs which look like C++11 user-defined literals.  They're fixed in
  newer versions so they're just noise in our build.  We were working around
  these in the CI build, so drop that workaround as we want to make the build
  warning-clean for users too.  Reported by daniel93 on #xapian.

* smoketest.rb: Don't leave temporary databases behind in /tmp.

Xapian-bindings 1.4.11 (2019-03-02):

CSharp:

* Make MatchAll and MatchNothing readonly.

Java:

* Simplify load-time setup of Query.OP_OR, etc which are provided for
  compatibility with the original hand-written JNI bindings.

PHP:

* We now load the module for "make check" using -d extension=xapian which
  avoids needing to turn off safe_mode and turn on enable_dl, and matches how
  the module is usually loaded in production use.

PHP7:

* Fix access to already released memory during PHP module shutdown, which often
  didn't cause visible problems, but could result in segmentation faults, bus
  errors, etc.

* Fix generated code to compile when using a ZTS-enabled build of PHP.

* We now load the module for "make check" using -d extension=xapian which
  avoids needing to turn off safe_mode and turn on enable_dl, and matches how
  the module is usually loaded in production use.

Xapian-bindings 1.4.10 (2019-02-12):

Documentation:

* Use https for URLs where supported.

General:

* Wrap new DatabaseClosedError and DatabaseNotFoundError exceptions.
  See #772 and #773.  Patches from Vaibhav Kansagara.

* Update expected query descriptions in tests for the xapian-core
  change to produce flatter Query trees.

* Workaround Perl 5.28 -i quirk when postprocessing SWIG-generated code.
  The commands in question are only run when maintainer-mode is enabled.

CSharp:

* C++ constant Xapian::BAD_VALUENO is now wrapped without using a getter.
  This shouldn't affect existing user code.

Java:

* C++ constant Xapian::BAD_VALUENO is now wrapped as Java constant
  Xapian.BAD_VALUENO.  The previous Java wrapping as function
  Xapian.getBAD_VALUENO() is still supported for compatibility with
  existing code.

* Remove redundant std::string initialisation.

Lua:

* C++ constant Xapian::BAD_VALUENO is now wrapped as a constant rather than
  an immutable attribute.  This shouldn't affect existing user code.

Perl:

* C++ constant Xapian::BAD_VALUENO is now wrapped as Perl constant
  Xapian::BAD_VALUENO.  The previous Perl wrapping as variable
  $Xapian::BAD_VALUENO is still supported for compatibility with existing
  code.

* Note in the POD documentation that the Error base classes which are abstract
  in C++ don't have a new method in Perl.

PHP:

* C++ constant Xapian::BAD_VALUENO is now wrapped as PHP constant
  Xapian::BAD_VALUENO.  The previous PHP wrapping as function
  Xapian::BAD_VALUENO_get() is still supported for compatibility with existing
  code.

* Remove code to work around a SWIG bug which was fixed in 2006.

PHP7:

* C++ constant Xapian::BAD_VALUENO is now wrapped as PHP constant
  Xapian::BAD_VALUENO.  The previous PHP wrapping as function
  Xapian::BAD_VALUENO_get() is still supported for compatibility with existing
  code.

* configure: Check for php-config7.3 and php-config7.2 as well as
  php-config7.1, php-config7.0 and php-config.

* Correct references to PHP5 in PHP7 script comments.

* Remove some C code which is no longer needed with PHP7.

Ruby:

* C++ constant Xapian::BAD_VALUENO is now wrapped as Ruby constant
  Xapian::BAD_VALUENO.  The previous Ruby wrapping as function
  Xapian::BAD_VALUENO() is still supported for compatibility with existing
  code.

* We now recommend using String#encode instead of the Iconv class, since the
  latter is no longer included with Ruby.

Tcl:

* C++ constant Xapian::BAD_VALUENO is now wrapped as a constant rather than
  variable which can't be written to.  This shouldn't affect existing user
  code.

Xapian-bindings 1.4.9 (2018-11-02):

PHP7:

* Fix to build with upcoming PHP 7.3 release, which changes array_init()
  to not return a value instead of always returning the constant SUCCESS.
  We were checking this return value but no longer do.

Xapian-bindings 1.4.8 (2018-10-25):

Perl:

* Wrap new STEM_SOME_FULL_POS constant.

* Add STEM_ALL_Z to qpstem export tag and POD docs.

* Fix Perl bindings documentation typos.

Python:

* Fix RST formatting warning during build.

Python3:

* Fix RST formatting warning during build.

Xapian-bindings 1.4.7 (2018-07-19):

Ruby:

* Fix -Wconversion-null warnings with newer GCC.

Xapian-bindings 1.4.6 (2018-07-02):

Documentation:

* Stop using "probabilistic" to mean "weighted" - we've supported other
  families of weighting schemes since 1.3.2.

Packaging:

* Use https for tarball URLs in .spec files.  This provides protection against
  MITM attacks on people building packages using these spec files, and is also
  slightly more efficient as the http: URLs redirect to the https: versions
  anyway.

CSharp:

* Use SWIG_exception() to handle exceptions.  It seems this didn't used to work
  with older SWIG, but it does with current versions, and using it means that
  we skip any return value translation logic when an exception has been thrown.

Java:

* Use SWIG_exception() to handle exceptions.  It seems this didn't used to work
  with older SWIG, but it does with current versions, and using it means that
  we skip any return value translation logic when an exception has been thrown.

* Fix leaks in binary std::string typemaps.  These are used for document values
  and serialised data.

* Improve VPATH build.  Previously we looked for class files and java sources
  in srcdir first, then in builddir.  That's backwards from how autotools
  VPATH builds search for targets and prerequisites so reverse this order to
  make handling of Java files more consistent.

Perl:

* Invoke prove via the App::Prove module.  This avoids potentially using
  prove from a different Perl installation to perl (previously the user
  needed to manually specify the corresponding PROVE= if they specify PERL= to
  configure).  In particular this is useful on macOS when using Perl from
  homebrew.

* Improve Perl Enquire::set_docid_order documentation by syncing improvements
  from the C++ API docs.

Python:

* Support sphinx >= 1.7 while still working with < 1.7.  Patch from
  James Aylett.

* Suppress clang -Wdeprecated-register warnings about uses register in C code
  in Python.h.  We can't do anything about these other than suppress them.

Python3:

* Support sphinx >= 1.7 while still working with < 1.7.  Patch from
  James Aylett.

* Suppress clang -Wdeprecated-register warnings about uses register in C code
  in Python.h.  We can't do anything about these other than suppress them
  (and they appear to have been removed in Python 3.4 and later).

* Remove unused MSet::__cmp__ extend method.  This was used in Python 2, but
  Python 3 does things differently.  There doesn't seem a good reason to
  provide comparison operations for MSet objects, and we don't for other
  classes, so let's just drop this feature - it seems nobody has noticed it has
  gone.

* Simplify generated wrapper post-processing.

Xapian-bindings 1.4.5 (2017-10-16):

Documentation:

* HACKING: Add details of Debian PHP7 packages to install for development.

General:

* Use a pattern match to ignore methods meant for internal use only rather
  than having to list them all - they're consistently named to end with an
  underscore.

* Stop using deprecated Xapian::percent typedef in bindings-specific code.
  Deprecation warnings are suppressed when building the bindings (because the
  bindings usually still need to wrap deprecated C++ features) so this probably
  has no user-visible consequences.

Java:

* Fix JNI code to be compatible with Java 6 and earlier, where the final
  parameter of SetByteArrayRegion() was not const.  This also seems to affect
  GCJ (though GCJ was removed in GCC 7).  The incompatibility was introduced in
  1.4.4.

Lua:

* Support subclassing of RangeProcessor in Lua.

Perl:

* Add CLONE_SKIP to RangeProcessor and subclases to avoid double deletion
  if the Perl threads module is in use.

* Keep references for set RangeProcessor objects, like how we do for
  ValueRangeProcessor and various other functor objects.

* Use RangeProcessor instead of ValueRangeProcessor in perl examples, as
  ValueRangeProcessor is now deprecated.

PHP:

* Keep references for set RangeProcessor objects, like how we do for
  ValueRangeProcessor and various other functor objects.

* Add type hints to QueryParser::add_rangeprocessor().

PHP7:

* Keep references for set RangeProcessor objects, like how we do for
  ValueRangeProcessor and various other functor objects.

* Add type hints to QueryParser::add_rangeprocessor().

* Fix PHP7 "make check" to use right path separator.  It was using the PHP5
  one, which in general is going to be the same but we won't have probed for
  that unless we're also building the PHP5 bindings, which means "make check"
  failed for PHP7 unless you also had the PHP5 bindings enabled.

Python3:

* Fix "make check" under Python 3.2, which was broken in 1.4.4 because Python
  3.2 doesn't support the u'foo' syntax.

* Copy over Python2 check which aims to catch any internal functions, methods,
  constants, etc which have accidentally been wrapped.

Ruby:

* Fix dependency generation for Ruby SWIG command (only relevant at all if
  you configure with --enable-maintainer-mode).

Xapian-bindings 1.4.4 (2017-04-19):

General:

* Update tests for xapian-core changes to avoid unnecessary "0 *" in query
  descriptions in certain cases.

Packaging:

* Ship java.i in tarball.

Java:

* Handle object serialisations and document values as Java byte[].  These will
  usually contain binary data, so Java String doesn't work well and byte[] is a
  much better fit.

* Correct various errors in java examples and documentation on how to run them.

* Fix java examples not to abuse doc values as fields - use the document data
  instead.

* "make clean" now removes additional class files.

PHP7:

* Update version of SWIG required to >= 3.0.12 so that the code generated
  for PHP7 no longer results in a segmentation fault on module unload with
  PHP 7.1.  Fixes #748, reported by Victor Sakovich.

Python:

* Fix QueryParser methods add_boolean_prefix() and add_prefix() to accept a
  string for the `grouping` parameter.  Reported by Jameson Graef Rollins in
  https://bugs.debian.org/849722

* Fix configure --with-python to fail if sphinx isn't found.  Patch from
  Patricio Paez.  Fixes #749.

Python3:

* Fix QueryParser methods add_boolean_prefix() and add_prefix() to accept a
  string for the `grouping` parameter.  Reported by Jameson Graef Rollins in
  https://bugs.debian.org/849722

Xapian-bindings 1.4.3 (2017-01-25):

Python:

* Remove compatibility code for Python < 2.5 - 1.4.x requires Python >= 2.6.

* Avoid unnecessary pointer indirection in XapianSWIG_anystring() helper
  function, which should be a little more efficient and makes the Python 2
  code more closely match the Python 3 code.

Ruby:

* "make clean" should only remove docs/xapian.rb if configure option
  --enable-documentation was used to enable all rules to rebuild documentation.
  Reported by Samuel Williams on xapian-discuss.

* Fix make rule for running rdoc for the cases where srcdir != builddir.

* Use 'test a = b' rather than 'test a == b' - the former is portable, the
  latter a bashism.  In many cases the autotools will set SHELL = /bin/bash in
  the makefiles, but if it doesn't and /bin/sh isn't bash, then this will
  cause "make install" and "make uninstall" to fail for the Ruby bindings.

Xapian-bindings 1.4.2 (2016-12-26):

General:

* configure: Fail with clear error with xapian-core < 1.4.0.

* Work around OS X "System Integrity Protection".  We can't address the problem
  of being unable to run tests against an uninstalled tree when the interpreter
  is in a system directory (you have to "make install" in xapian-core for that
  case), but we can at least make this work for interpreters which aren't in
  system directories.

Java:

* Disable parallel make for java subdirectory as it causes random build
  failures.  Reported by Lucas Nussbaum in https://bugs.debian.org/848733

* Disable automatic use of -Xcheck:jni for now as it seems to report false
  positives with OpenJDK 8 and 9.

PHP:

* Generates smaller PHP wrappers by only emitting each unique arginfo
  combination once (~6% saving in stripped extension module size for
  PHP7 on x86_64 Linux).

* Fix to work again with a version of PHP5 built with ZTS enabled (which is the
  default on Microsoft Windows).

* Add support for PHP7.

* Drop workaround for PHP4 from test code.

Python:

* Handle sphinx-build being a shell script wrapper by invoking sphinx.main()
  from a command line Python code snippet.  Reported by Alex Dunn in
  https://github.com/xapian/xapian/pull/126 and solved with help from James
  Aylett.

* Hold python reference to set RangeProcessor objects - until #714 is fixed we
  need to keep such a reference (as we already do for ValueRangeProcessor and
  several other classes).

Python3:

* Handle sphinx-build being a shell script wrapper by invoking sphinx.main()
  from a command line Python code snippet.  Reported by Alex Dunn in
  https://github.com/xapian/xapian/pull/126 and solved with help from James
  Aylett.

* Hold python reference to set RangeProcessor objects - until #714 is fixed we
  need to keep such a reference (as we already do for ValueRangeProcessor and
  several other classes).

Ruby:

* Use more conventional Ruby variable names in the examples (Ruby convention
  uses underscores not camelcase) and fix comma/space transposition in a couple
  of places.

Xapian-bindings 1.4.1 (2016-10-21):

Documentation:

* Fix --disable-documentation - in maintainer-mode, we still tried to make
  docs/index.html for most of the bindings, which failed because the rule to do
  so was disabled.

General:

* Update for additions to C++ API.

* When a backend is disabled in the xapian-core we're building against, we
  have a stub version of any factory functions so the bindings still have
  something to wrap.  Update these for 1.4:
  + Disable stub for InMemory::open() when
    XAPIAN_BINDINGS_SKIP_DEPRECATED_DB_FACTORIES is defined (Perl, Python3).
  + Add new optional flags parameter to both overloaded forms of
    Remote::open_writable().

Portability:

* Drop compiler options that are no longer useful:
  + -fshow-column is the default in all GCC versions we now support
    (checked as GCC 4.6).
  + -Wno-long-long is no longer necessary now that we require C++11 where
    "long long" is a standard type.

Java:

* Use a cleaner technique to insert the Java code to load JNI library into the
  generated wrapper - we now use "%pragma(java) jniclasscode" instead of using
  Perl to post-process the generated wrapper.  Suggested by James Aylett.

* Run Java tests with -Xcheck:jni if supported, which should help catch any
  any bugs in the JNI code.

* Fix configure to find jni_md.h under Cygwin.  There doesn't seem to be an way
  to automatically determine the machine-dependent JNI include path, so add
  another case to use "win32" on Cygwin.  Reported by John Bankert on
  xapian-discuss.

* Add more special cases to find jni_md.h on Cygwin, OS X, *BSD, AIX.
  There doesn't seem to be an explicit list of these directories anywhere, but
  grepping the OpenJDK 8 source code finds additional values "darwin" and
  "aix", *BSD seems to use "bsd", and Cygwin uses "win32" (reported by John
  Bankert on xapian-discuss).

* Generate xapian.jar rather than xapian_jni.jar - the fact that JNI is
  involved is really just an implementation detail.

* SmokeTest.java: Add simple test of subclassing FieldProcessor.

Perl:

* Merge Perl POD doc improvements from Search::Xapian.  The most notable
  improvement is a number of methods previously lacking docs now have them.

* Fix typo in POD docs for Perl bindings ("outputing" -> "outputting").
  Reported by knowledgejunkie in #730.

Python:

* Fix repr() to not return None.  Reported by Stuart Prescott on IRC.

* Fix Python2 bindings to work out of the box.  SWIG changed the code it
  generates for importing the compiled module in a recent version, and
  the newer code no longer works with the wrapper renamed to
  xapian/__init__.py.  There's currently no way to configure SWIG to produce
  what we need so for now we run a "fixup" script over the generated wrapper
  which replaces the complex import code with a single statement which does
  what we want.  It also strips out various unneeded code, mostly to do with
  handling Python 3.x (which we don't need since we have an entirely
  separate set of bindings for that).  Reported by James Aylett in #731.
  The way we were importing the bindings to generate the .pyc and .pyo
  files was masking this problem, so rework that as suggested by James.

* Make sphinx docs dependent on SWIG wrapper.  Without this dependency,
  parallel builds (make -j) may attempt to schedule the sphinx doc build before
  the relevant wrapper has been compiled and moved into position.  This won't
  result in a build failure, but will silently omit API docs that sphinx
  would otherwise include.  Patch from James Aylett.

* doxy2swig: Specify encoding when reading doxygen's XML output so UTF-8 in
  doxygen comments is handled.  Patch from Vivek Pal.

* Specify Python2 wrapper encoding is UTF-8.  This is needed when we pick up
  doxygen comments from the C++ API which contain UTF-8.  For Python3, the
  default source encoding is UTF-8, so we don't need the equivalent change
  there.

Python3:

* Fix repr() to not return None.  Reported by Stuart Prescott on IRC.

* Fix Python3 bindings to work out of the box.  SWIG changed the code it
  generates for importing the compiled module in a recent version, and
  the newer code no longer works with the wrapper renamed to
  xapian/__init__.py.  There's currently no way to configure SWIG to produce
  what we need so for now we run a "fixup" script over the generated wrapper
  which replaces the complex import code with a single statement which does
  what we want.  It also strips out various unneeded code, mostly to do with
  handling Python 2.x (which we don't need since we have an entirely
  separate set of bindings for that).  Reported by James Aylett in #731.
  The way we were importing the bindings to generate the .pyc and .pyo
  files was masking this problem, so rework that as suggested by James.

* Make sphinx docs dependent on SWIG wrapper.  Without this dependency,
  parallel builds (make -j) may attempt to schedule the sphinx doc build before
  the relevant wrapper has been compiled and moved into position.  This won't
  result in a build failure, but will silently omit API docs that sphinx
  would otherwise include.  Patch from James Aylett.

* Fix memory leak converting string from Python to C++.
  XapianSWIG_anystring_as_ptr() was failing to flag the returned value as
  allocated, so it wasn't being deleted.  Reported by Sean Robinson in #729.

Xapian-bindings 1.4.0 (2016-06-24):

Documentation:

* Mark SWIG-generated Java and Perl bindings as "experimental" until we've
  had a chance to sort out any remaining changes we want to make.

Xapian-bindings 1.3.7 (2016-06-01):

Documentation:

* Remove long out-dated reference to tinderbox.

General:

* Use SWIG 3.0.9 to generate the bindings.  There's nothing very important to
  us in the changes since the git snapshot we were using - mostly this means
  we're using a released version, which seems preferable.

Tcl:

* Fix segfault in tcl bindings "make check".  The location of tclConfig.sh
  wasn't being found, so libtclstub wasn't being linked to, which is required
  with Tcl >= 8.6.

Xapian-bindings 1.3.6 (2016-05-09):

General:

* Update for changes to the C++ API.

* Use WritableDatabase::commit() instead of flush() in testcases, as the
  latter is now formally deprecated.

Java:

* Fix syntax error in SmokeTest.java, introduced by the DB_BACKEND_INMEMORY
  change.  Noted on #xapian-discuss by Aakash Muttineni.

* Update Java TODO list.

* SmokeTest.java: Port over version checks from SmokeTest.cs.

* Update list of recently tested JDK versions.

Lua:

* Note Lua bindings work with Lua 5.3.

Perl:

* Explicitly specify POD docs encoding as utf8.  Fixes warning in generated
  HTML docs.

* Convert POD to HTML when building from a source tarball - the conversion
  code comes as standard with Perl.  In 1.3.5 we were failing to ship the HTML
  output, as reported by Anthony Basile.

* For extra robustness, convert POD to HTML using the bundled Pod::Html module
  from the Perl interpreter found by configure, rather than assuming pod2html
  is on PATH, and the right one (this matters more now that it's not just
  people building from git who build these docs).

* Improve Perl bindings POD documentation.

* Remove workaround for Perl macro vs C++11 header.  SWIG 3.0.6 and later adds
  a different workaround to the generated C++ wrapper file, and we require SWIG
  3.0.8 for a Python fix, so we no longer need our workaround.

Python:

* Fix "make check" in VPATH build.  Nothing seems to have changed in our build
  system, so I'm guessing this is now required due to a change in the code SWIG
  generates.

Python3:

* Fix "make check" in VPATH build.  Nothing seems to have changed in our build
  system, so I'm guessing this is now required due to a change in the code SWIG
  generates.

* Fix install location for python3 docs.  They were being install to the same
  path as the python docs - now the path includes "python3" instead of
  "python".

Ruby:

* Increase minimum Ruby version to 2.1, as older versions are no longer
  supported by the Ruby developers.

Xapian-bindings 1.3.5 (2016-04-01):

This release includes all changes from 1.2.23 which are relevant.

Documentation:

* Fix to install docs when not in maintainer-mode.

* Note open_stub() is deprecated (most of the bindings already noted this, but
  now ruby and tcl do too).

General:

* Update for changes to the C++ API.

* PostingSource is now fully wrapped for the bindings.  Fixes #499, reported by
  Joost Cassee.

* Ship swig-depcomp and doxy2swig scripts in the source tarball.

* Add installcheck-local make targets for most languages - these run the
  testsuites using the installed bindings.

CSharp:

* configure: Stop checking for obsolete mono compiler names - gmcs, smcs and
  dmcs were all deprecated in Mono 2.11.

* configure: Strip out handling of DotGNU - it's been inactive for years, and
  was officially "decommissioned" in December 2012.

* README: Update list of mono versions recently tested with.

Lua:

* smoketest.lua: Fix to work with newer lua - coercing a number to a string
  now appends ".0" for whole numbers.

Perl:

* Run pod2html with explicit --podpath=. - recent versions of pod2html seem to
  need this to correctly handle references to other Xapian classes.  Reported
  on #xapian-discuss by HowManny and abhishek_rand0wn.

Python:

* Run sphinx at build time.  It's an extra tool for people building from source
  to have to install, but its output is rather large (this change reduces our
  tar.xz size by ~20%), and its output includes a source-less minified copy of
  jquery.

Python3:

* Run sphinx at build time.  It's an extra tool for people building from source
  to have to install, but its output is rather large (this change reduces our
  tar.xz size by ~20%), and its output includes a source-less minified copy of
  jquery.

* Fix handling of integer values larger than a C int by bootstraping with a
  newer version of SWIG.  Fixes #703, reported by Barry Warsaw.

* Remove xapian.inmemory_open() - we've deprecated the corresponding C++
  function, and the Python3 bindings haven't yet had a stable release.

Ruby:

* Run rdoc at build time - it is included as part of the Ruby core
  distribution, so we can assume it is available if ruby is, and avoid shipping
  its rather large generated output in our source tarball.

Xapian-bindings 1.3.4 (2016-01-01):

This release includes all changes from 1.2.22 which are relevant.

General:

* Wrap new and changed features in C++ API.

* PostingSource set_maxweight() is now accessible to the bindings.  Fixes #498,
  reported by Richard Boulton.

* configure script now defaults to looking for xapian-config-1.3.  This is now
  automatically done for development series (odd middle component of the
  version number), but not for stable series (even middle component).  Fixes
  #695, reported by Jorge C. Leitão

PHP:

* Make PHP 5.5 the minimum officially supported version, as 5.4 has now reached
  EOL.

* In the examples, when iterating an MSet with foreach, don't throw the docid
  away as $dummy, put it in $docid and use it - the code looks cleaner, and
  this avoids an extra call to C++ to get the docid on each iteration.

Python:

* Drop support for Python 2.5.

Python3:

* Document installation of Python 3 bindings.  Fixes #694, reported by Jorge C.
  Leitão.

* Fix testsuite for changes in Python 3.5.  Fixes #690, patch from UsusDei.

* Handle renaming of .pyo to .opt-1.pyc files due to PEP-0488.  Fixes #689,
  patch from UsusDei.

* Fix Python 3 version check to accept 3.10.

Xapian-bindings 1.3.3 (2015-06-01):

This release includes all changes from 1.2.20-1.2.21 which are relevant.

Documentation:

* INSTALL: IRIX is past EOL so drop information about IRIX make.

General:

* Add DB_RETRY_LOCK as a constant to wrap.

* Don't wrap Query::LEAF_* - they're for internal use in xapian-core.

* Fix "make install" from a git tree configured with --disable-documentation.
  (Fixes #658, reported by Germán M. Bravo)

* Fix "make install" when building from git with --disable-documentation.

* Fix to handle a VPATH build from a tarball when the generated docs will be in
  $(srcdir).

* Update testcases for lazy wildcard expansion change in xapian-core.

* Update for addition of XAPIAN_NOEXCEPT.

* Don't wrap internal methods of Xapian::Weight.

Portability:

* Require a compiler with good C++11 support, like xapian-core now does.

* doxygen_xml.conf.in: Update to avoid warnings about obsolete tags from newer
  doxygen.

* configure: Update check for -fvisibility to match xapian-core's.

CSharp:

* Fix configure test for whether $CLI can run CSharp programs - previously it
  would always fail, which would mean that the CSharp tests wouldn't be run on
  platforms where CSharp programs can't be run directly.

Java:

* java/docs/examples/SimpleSearch.java: Update to actually build and work.

Lua:

* The Lua bindings are no longer considered to be "experimental" (in reality
  they haven't been for some time).

Perl:

* Add a "LICENSE" section to the main POD.

* Add 'use strict' to all testcases, and add missing instances of 'my' that
  this change uncovered.

* Wrap new WILDCARD_LIMIT_* constants as constants.

Python:

* Don't release the GIL when constructing a Query object from a sequence of
  Query objects and/or strings.

* python/smoketest.py: Add new testcase to catch any internal functions,
  methods, constants, etc which have accidentally been wrapped.

Python3:

* The Python3 bindings are no longer considered to be "experimental".

* Don't release the GIL when constructing a Query object from a sequence of
  Query objects and/or strings.  (fixes #346)

* python3/pythontest.py: Expand comment about disabling test_import_star under
  threads.

Tcl:

* Require Tcl 8.5 as older versions are no longer supported upstream, and this
  version added ::tcl::pkgconfig, which makes the configure tests simpler and
  more reliable.

* Adjust precedence of the typecheck typemap for wrapping constructing a query
  from a Tcl list so that we disambiguate this from the new OP_WILDCARD
  constructor correctly.

Xapian-bindings 1.3.2 (2014-11-24):

This release includes all changes from 1.2.16-1.2.19 which are relevant.

Documentation:

* Convert HTML docs to reStructured text.  (Patch from Mayank Chaudhary)

* Update for deprecation of Xapian::Chert::open().

* Update for renaming of "brass" backend to "glass".

* Remove SVN "$Date" placeholders as they aren't expanded by git, and the "last
  updated" information isn't all that informative anyway - there can still be
  stale information even if the file was updated very recently.

General:

* Releases and snapshots are now bootstrapped using a more recent version of
  SWIG (a git snapshot from after the 3.0.3 release).

* configure: Fix SWIG version check to accept 3.x, and update the minimum
  accepted version to be what we actually currently want.

* Wrap new C++ API features, and in particular all the new weighting schemes,
  the changes to opening databases, and Xapian::Snipper.

* Wrap Xapian::Database::check() for the bindings ignoring the std::ostream*
  argument which the C++ API takes.  If opts != 0, then output is sent to
  stdout, otherwise no output is produced.

* Object descriptions are now always valid UTF-8. (see #620)

* Provide a SimpleStopper constructor which provides the ability to initialise
  from a stopword list in a file.  Based on patch from Assem Chelli.

CSharp:

* README: Note that C# bindings now need .NET 2 or later (because that's what
  SWIG-generated code now requires).

Java:

* Add testcase that FLAG_SPELLING is now wrapped in a usable way.  Patch from
  Anish Kanchan.  (see #616, reported by "Naveen")

Lua:

* Document that constants can now be accessed using CLASS.CONSTANT as well as
  CLASS_CONSTANT.

Perl:

* Move the new SWIG-based Perl bindings into a 'Xapian' module, to smooth the
  overlap with the hand-coded XS 'Search::Xapian' module.

* Perl tests are ordering-dependent, so use .NOTPARALLEL to avoid problems
  during parallel builds.

* Use croak_sv() or ERRSV if defined.

PHP:

* Make PHP 5.4 the minimum version we officially support, as 5.3 has now
  reached EOL.

* Wrap Xapian iterator classes as PHP iterators - requires PHP 5.5 for full
  support, under PHP 5.4 you can't use `foreach ($it as $k => $c)`, but
  `foreach ($it as $c)` works and allows iterating through the equivalent of
  C++ operator* on the iterator.  (fixes#652)

* Fix handling of an exception thrown from a PHP implementation of
  FieldProcessor::apply().

* smoketest.php: Add tests of get_eset() with an ExpandDecider and with a min
  weight threshold.

* In current PHP releases, dl() is disabled in most SAPIs, and even where
  available it will now only look in the configured extension directory.  The
  upshot is that there no longer seems to be a sane way to install the PHP
  bindings without being root.  Fixes #661, reported by Felix Ostmann.

Python2:

* The python testsuite already tested if any constants weren't marked with
  the CONSTANT macro in xapian-headers.i, but the resulting error didn't
  clearly point to the actual problem.  Now we report the names of any
  such constants.

* In the testsuite, use the xapian.WritableDatabase constructor rather than
  chert_open() - that code dates back to when chert was the only disk-based
  backend to support valuestreams, but flint was the default backend.

* Fix typo in code to keep a reference to a FieldProcessor object, reported by
  Germán M. Bravo in github PR59.

* Generate Python API docs with Sphinx.  (Fixes #138, patch from Assem Chelli)

Python3:

* Python 3 support has been split off into its own subdirectory, and should now
  be usable.  3.2 is the minimum supported version currently.  Existing code
  will need updating for Python 3, and the wrapped API is necessarily different
  in how Unicode is handled, so we've dropped deprecated features (such as
  'MSet.items' and 'ESet.items') from the Python 3 bindings.  (see #346)

* Fix typo in code to keep a reference to a FieldProcessor object, reported by
  Germán M. Bravo in github PR59.

* Generate Python API docs with Sphinx.  (Fixes #138, patch from Assem Chelli)

Ruby:

* configure: Don't prefer ruby1.8 to ruby when looking for a ruby interpreter -
  these days it's more likely to ignore ruby 1.9 or 2.0 rather than avoid
  picking ruby 1.6.

Xapian-bindings 1.3.1 (2013-05-03):

This release includes all changes from 1.2.10-1.2.15 which are relevant.

Documentation:

* HACKING: Document Debian packages needed for each language.

General:

* Wrap new C++ API features.

* Use new XAPIAN_NOTHROW markers in C++ API headers to avoid generating
  unnecessary exception handling code where we call such functions and
  methods.

* Tweak wrapping of Query from list constructor so the needed number of
  elements get preallocated.

* Ignore Query(Query::Internal&) constructor, which is for internal use
  only.

* For all languages except C# and Java, wrap the functions declared in
  xapian/dbfactory.h by getting SWIG to parse the header.  This means we now
  wrap the WritableDatabase form of Xapian::Auto::open_stub() for these
  languages.

* swig-depcomp: Script which wraps invoking SWIG, tells it to generate
  dependencies, and adjusts the generated dependencies to work in our build
  system.

* Remove support for 'configure --enable-quiet', 'make QUIET=' and 'make
  QUIET=y' - automake now supports 'configure --enable-silent-rules', 'make
  V=1' and 'make V=0' which are broadly equivalent and more standard.

* Fix the tests to work with the new automake parallel test driver.

Portability:

* Improve workaround which allows building against an uninstalled xapian-core
  on OS X - this should now work with any uninstalled xapian-core (not only in
  a tree with the same layout as an SVN or git checkout) and it also won't try
  to build against "../xapian-core/.libs" just because it happens to exist.
  (Fixes #322)

CSharp:

* configure: The variable to specify the interpreter is now CLI (was MONO, but
  didn't actually work properly).

Java:

* Document that we aim to support JDK 1.6 (Java 6) and later.

* Avoid generating a temporary C++ vector of Query objects when constructing
  a Query from a Java array of Query objects or a Java array of strings.

* Implement and test MSetIterator, ESetIterator.  Fix PostingIterator,
  ValueIterator, and TermIterator.

* Add Enquire.getMatchingTerms().

* Use JAVACFLAGS when running JAVAC to allow extra flags to be specified when
  building, e.g. "make JAVACFLAGS=-g".

* java/SmokeTest.java: Avoid using System.err.printf() which fails to compile
  with (the rather elderly) ECJ 3.3.1.

Perl:

* Fix PostingIterator wrapper to work.

* Update list of unwrapped things in POD documentation.

* Improve test coverage.

* perl/t/10query.t: Adjust regexp which checks expected error message to work
  with Perl 5.16, which adds a '.' after "at foo line 123".  (ticket#610)

* Probe for the test running tool 'prove' in configure.

PHP:

* Avoid using zend_error_noreturn() as it doesn't work with all builds of PHP.
  Instead we now wrap it in a SWIG_FAIL() function which we annotate as
  "noreturn" for GCC to avoids warnings.  This also reduces the size of the
  compiled PHP module by 6%.

* php/smoketest.php: Add more tests of geospatial API.

Python:

* Drop support for Python 2.4.

* python/smoketest2.py: Add more testcases.

* python/smoketest2.py: Improve reporting of test failures for certain
  testcases.

* Update Python 3 tests from Python 2 versions using 2to3.

Xapian-bindings 1.3.0 (2012-03-14):

Documentation:

* In maintainer builds, run doxygen to generate XML for the bindings in the
  bindings build system, not as a side-effect in xapian-core's.  (ticket#262)

General:

* Wrap new geospatial API.

* Wrap new database checking API.

* Deprecated features scheduled for removal in 1.3.0 have been removed.

* Wrap ExpandDecider even if we don't have director support - there's a
  ExpandDeciderFilterTerms subclass which is useful in itself, though it still
  needs some typemap work to actually get it usefully wrapped.

* configure:

  + Add --disable-visibility option to match xapian-core.

  + Add -fshow-column for GCC.

  + Don't put -Werror in SWIG_FLAGS - instead put it in a new SWIG_WERROR
    variable, so that it's easy to override it if you're getting a new warning
    from SWIG but want to just ignore it for the time being.

* Exception handling now uses Error::get_description() rather than get_type +
  ": " + get_msg().  In many cases this is the same, but if context or errno
  are available, get_description() includes them.  Catch and report
  std::exception rather than handling it as an unknown error (so in particular
  std::bad_alloc will now be reported more helpfully).

CSharp:

* Avoid generating unwanted wrapper sources
  SWIGTYPE_p_std__vectorT_std__string_t.cs and
  SWIGTYPE_p_std__vectorT_Xapian__Query_t.cs.

Java:

* The hand-coded JNI Java bindings have been removed and the SWIG-based Java
  bindings promoted in their place.  This means almost the entire C++ API is
  now wrapped for Java, but the downside is there are some changes required
  to existing code.  Overall we feel the short-term pain is worth the long
  term benefits of having Java bindings which stay up to date.

* java/SmokeTest.java: Add test that string passing is zero byte safe.

Lua:

* Improve error messages.

Perl:

* Fix "Use of qw(...) as parentheses is deprecated" warnings in test cases with
  Perl 5.14.

* Fix Search::Xapian::Query->new() to work.

* Enable warnings for all test cases and make them fatal.

* Add "use Carp;" where we use functions from that module.

* Improve POD docs for Document and TermGenerator methods - "weight" is
  misleading, so use "wdfinc" and "wdfdec" like the C++ API docs do.

* The Query constructor which takes an array of subqueries is now wrapped more
  efficiently - previous a temporary C++ std::vector was built but now we avoid
  doing this.

PHP:

* PHP >= 5.3 is now required.

* Add PHP type hints to the class wrappers.  Fixes ticket#577.

* The XapianQuery constructor which takes an array of subqueries is now
  wrapped more efficiently - previous a temporary C++ std::vector was built
  but now we avoid doing this.

Python:

* Python >= 2.4 is now required.

* Remove deprecated Stem_get_available_languages().

* Hide away the deprecated non-pythonic iterators - we still need them to
  implement the pythonic iterators, so we can't entirely remove them.

* Replace SWIG's thread locking with code which does nothing unless threads
  are already initialised, to avoid the overhead of thread locking in the
  common case of single-threaded Python code.  This seems to be about 5-10%
  faster for pythontest2.py modified to repeat the tests 100 times.

* Handle the GIL in a way which also works in sub-interpreters.  Fixes ticket
  #364.

* The Query constructor which takes an array of subqueries is now wrapped more
  efficiently - previous a temporary C++ std::vector was built but now we avoid
  doing this.

Ruby:

* The XapianQuery constructor which takes an array of subqueries is now
  wrapped more efficiently - previous a temporary C++ std::vector was built
  but now we avoid doing this.

Tcl:

* The XapianQuery constructor which takes an array of subqueries is now
  wrapped more efficiently - previous a temporary C++ std::vector was built
  but now we avoid doing this.

Xapian-bindings 1.2.23 (2016-03-28):

Documentation:

* Update links to Xapian website and trac to use https, which is now supported,
  thanks to James Aylett.

PHP:

* Check that the PHP interpreter we find is actually PHP5, and if not look
  harder.  On current Debian unstable, php-config5 --php-binary reports
  /usr/bin/php which can be PHP7.

* Document that PHP7 isn't currently supported, and explicitly check for and
  reject it in configure.

Ruby:

* configure: Stop preferring rdoc-1.8 to rdoc (this only happened in a
  fall-back case when rdoc wasn't found in the same directory as the ruby
  interpreter).

Xapian-bindings 1.2.22 (2015-12-29):

Documentation:

* Stop maintaining ChangeLog files.  They make merging patches harder, and stop
  'git cherry-pick' from working as it should.  The git repo history should be
  sufficient for complying with GPLv2 2(a).

General:

* Stop wrapping internal methods of Xapian::Weight.

* Return Error::get_description() rather than get_type + ": " + get_msg().  In
  many cases this is the same, but if context or errno are available,
  get_description() includes them.

* Catch and report std::exception rather than handling it as an unknown error
  (so in particular std::bad_alloc will now be reported more helpfully).

CSharp:

* Fix configure test for whether $MONO can run CSharp programs - previously it
  would always fail, which would mean that the CSharp tests would only be run
  on systems where CSharp programs can be run directly.

Lua:

* Send stderr from lua version check to config.log instead of letting it appear
  on the terminal.

PHP:

* Fix memory leak and crash when using PHP subclasses of Xapian functors.

* Subclasses of XapianMatchSpy and XapianPostingSource with implicit
  constructors now work.

Python:

* Add new testcase to catch any internal functions, methods, constants, etc
  which have accidentally been wrapped.

Xapian-bindings 1.2.21 (2015-05-20):

Lua:

* README: Remove note about the Lua bindings being experimental - it's not
  really been true for some time now.

Perl:

* Wrap missing constants OP_SYNONYM and STEM_ALL_Z.

* Add workaround for Perl defining a seed() macro which breaks compilation with
  GCC in C++11 mode (due to <algorithm> now pulling in random number generation
  classes with a method called seed).

* Update list of unwrapped things in POD documentation.

* Perl tests are ordering-dependent, so use .NOTPARALLEL to avoid problems
  during parallel builds.

* Add test coverage for Enquire::set_collapse_key() with 1 and 2 parameters.

* Add test that we can create all the stemmers returned by
  Stem::get_available_languages().

* t/symbol-test.t: If the symboltest module build fails, skip the test - it's
  likely due to external reasons, like incompatible compiler flags being taken
  from Perl's Config module, due to Perl having been built with a different
  compiler to Xapian.

* Use croak_sv() or ERRSV if defined.

PHP:

* README: Remove note about the subclassing bug with PHP 5.4 and later - that
  was fixed in 1.2.19.

Python:

* README: Add note that 1.3.2 has Python 3 support, and that this will be in
  stable release 1.4.0.

Ruby:

* smoketest.rb: Fix "warning: assigned but unused variable - mset".

* Ship generate-rdoc-stubs in the tarball.  Reported by Matthias Klose in
  https://bugs.debian.org/782270

Xapian-bindings 1.2.20 (2015-03-04):

Portability:

* configure: Avoid using \? in sed command in Lua detection - it isn't
  supported by all sed implementations.

Lua:

* configure: Rework LUA_SO checks to be clearer and to properly handle LUA_SO
  being specified without a leading '.'.

* configure: Add an example of specifying LUA_SO to --help output.

PHP:

* Remove text about subclassing bug with PHP 5.4 and later - that was fixed in
  1.2.19.

* In current PHP releases, dl() is disabled in most SAPIs, and even where
  available it will now only look in the configured extension directory.  The
  upshot is that there no longer seems to be a sane way to install the PHP
  bindings without being root, so update the documentation to reflect this.
  Fixes #661, reported by Felix Ostmann.

Xapian-bindings 1.2.19 (2014-10-21):

PHP:

* Fix up SWIG generated C++ wrapper code so that subclassing of wrapped classes
  in PHP works with PHP 5.4 and later.  (Fixes #652, reported by Sebastian
  Gottfried)

* Fix XapianQueryParser::set_stopper() and XapianTermGenerator::set_stopper()
  which were getting incorrectly wrapped such that they didn't actually do
  anything.  Fixes #659, reported by jmienert.  This bug was introduced by the
  reference tracking fix in 1.2.14.

Ruby:

* README: Note that Ruby 2.1 works too.

Xapian-bindings 1.2.18 (2014-06-22):

Documentation:

* README: Add links to Erlang and Node.js bindings.

Lua:

* lua/smoketest.lua: Change expect() parameter order to the more natural (got,
  expected), which most of the calls already used, and fix up the few calls
  which passed (expected, got).

PHP:

* php/smoketest.php: Add missing "exit(1);" after reporting failure of check
  that MatchDecider returns an MSet with the expected docid in.  Luckily this
  wasn't masking a test failure.

Python:

* python/pythontest.py: There's no longer a need to use chert_open() explicitly
  - chert is the default backend now, and both chert and brass support the
  required functionality for the tests which do this, so this just needlessly
  causes the tests to fail if chert is disabled in xapian-core.

* configure: If the Python version is too new or too old, only report it once
  not twice.

Ruby:

* configure: Fix Ruby bindings to build on Windows (and other platforms where
  allow_undefined_flag=unsupported. (fixes#634, reported by Alexis Denis)

Xapian-bindings 1.2.17 (2014-01-29):

Portability:

* Improve workaround which allows building against an uninstalled xapian-core
  on OS X - this should now work with any uninstalled xapian-core (not only in
  a tree with the same layout as an SVN or git checkout) and it also won't try
  to build against "../xapian-core/.libs" just because it happens to exist.
  (Backported from 1.3.1; fixes #322)

Python:

* configure: Some distros now point /usr/bin/python at Python 3, so the check
  for a Python 2 interpreter now checks for 'python2' first, and checks that
  the version of found interpreter is 2.x.

Ruby:

* Tweak configure to work with Ruby 2.0.

Tcl:

* Link against -ltclstubX.Y for Tcl 8.5 and later (reported by Sergei Golovan
  in https://bugs.debian.org/724830).

* Use a better check for TCL_INC for Tcl 8.5 and later.

Xapian-bindings 1.2.16 (2013-12-04):

Documentation:

* README: Note that the SWIG Perl bindings should replace the XS ones in 1.4.x.

General:

* Compress source tarballs with xz instead of gzip.

* configure: Handle git snapshot naming.

Portability:

* configure: Update list of platforms where we tell libtool not to link in
  deplibs to match the list used for xapian-core.

Perl:

* Pass 0 instead of NULL for non-pointer parameter to av_fetch (spotted due to
  GCC 4.7 warning).

* symboltest.t: Pass $CPPFLAGS and $CXXFLAGS from the environment through to
  the sub-build, fixing failure when built with CPPFLAGS=-D_GLIBCXX_DEBUG.

PHP:

* smoketest.php: If running under PHP >= 5.4, skip the tests we know will fail
  with a message explaining this.

Python:

* Provide bindings version in xapian.__version__ as per PEP 396.  (see #346)

* python/docs/examples/simpleexpand.py: Use Pythonic iteration over the ESet.

* pythontest.py: Fix testcase checking we get an exception from using
  non-random-access iterators after then have advanced - previously these
  didn't actually test as fully as intended.

Ruby:

* Omit internal classes and methods from the rdocs.

Xapian-bindings 1.2.15 (2013-04-16):

General:

* Fix configure --enable-quiet option to actually work for the bindings.

Perl:

* Fix doc typo: "as as" -> "as a"

Ruby:

* Fix deprecation warning in configure from Ruby 1.9.3.

Xapian-bindings 1.2.14 (2013-03-14):

Python:

* Fix typo in doccomment.

PHP:

* Keep references to the PHP wrapper object when an object is set on another
  object.  (fixes #614)

Tcl:

* Allow TCL_INC to be passed to configure.  (fixes #612)

Xapian-bindings 1.2.13 (2012-11-09):

CSharp:

* configure: Overhaul checks for C# tools to use modern names in preference.

Lua:

* Fix examples to use str(query) to get the query description.  (Fixes #600)

* Document that get_description() is mapped to str(), and end() to _end().

* Fix functor wrappers which return strings to be zero-byte clean.

Perl:

* Forward port tests of StringValueRangeProcessor with a prefix or suffix from
  1.2's XS Search::Xapian.  (ticket#607)

* Update testsuite not to use UNIVERSAL::isa() as a function, since doing so
  is deprecated.

PHP:

* Document that subclassing Xapian classes in PHP currently doesn't work with
  PHP 5.4.

Xapian-bindings 1.2.12 (2012-06-27):

No changes since 1.2.11 except to bump the version - this release was made to
fix an incorrect library version information update in xapian-core 1.2.11.

Xapian-bindings 1.2.11 (2012-06-26):

General:

* Ship the scripts which generate the except.i files for Lua, Perl and Python.

Perl:

* In generated C++ code, pass 0 instead of NULL for non-pointer parameter to
  av_fetch() (spotted due to GCC 4.7 warning).

PHP:

* Fix "make check" to work for PHP when building from a release tarball with
  srcdir != builddir.

* Work around "undefined symbol: zend_error_noreturn" error.

Xapian-bindings 1.2.10 (2012-05-09):

CSharp:

* Use -keyfile and -keycontainer options to the C# compiler, because it warns
  us to do this instead of setting them in AssemblyInfo.cs.

* Use diff's -c option when comparing the files SWIG generated against those we
  were expecting to get as the output should be easier to understand.

* Sort both the lists of expected and of found SWIG-generated sources with
  Perl, to avoid problems with locale-specific sort orders.

Java-SWIG:

* Remove now superfluous old check that SWIG generated at least the sources we
  want - we now check it generated *exactly* the sources we want.

* Use diff's -c option when comparing the files SWIG generated against those we
  were expecting to get as the output should be easier to understand.

* Sort both the lists of expected and of found SWIG-generated sources with
  Perl, to avoid problems with locale-specific sort orders.

Lua:

* Now works with Lua 5.2.

* "require 'xapian'" now returns the module table.  (ticket #593)

* lua/smoketest.lua: Improve reporting of test failures.

Perl:

* Avoid importing isa from UNIVERSAL to fix Perl 5.12 deprecation warning.

* Remove #! lines with -W to fix "Name "Test::More::TODO" used only once:
  possible typo at /usr/share/perl/5.14/Exporter/Heavy.pm line 190." warnings.

Python:

* python/docs/examples/simpleexpand.py: Update to not use deprecated MSet
  iteration features which have been removed on trunk.  This also fixes a
  segfault if there are no matches and no documents are explicitly marked as
  relevant.

* python/testsuite2.py: Explicitly suggest "make check VERBOSE=1" as a simple
  way to rerun tests with verbose output.

Ruby:

* configure: Make sure the ruby subdirectory exists before trying to create
  ruby/rubyio.h, so this works in a VPATH build from a clean tree.

Xapian-bindings 1.2.9 (2012-03-08):

Java:

* configure: Fix test for jni.h to try looking for jni.h relative to the real
  location of javac, which should work for more JDKs.

Lua:

* Handle an exception from C++ by raising a xapian.Error object as an error in
  Lua.

* Rename get_description() methods to __tostring(), so that you can use write
  tostring(obj) in Lua.

* configure: Honour LUA_LIB if already set.  Fixes #581.

* configure: Improve probing for LUA_LIB, and also probe for LUA_SO so we
  support platforms where the compiled Lua module isn't called .so.

Perl:

* Add tests of Document::get_docid().

PHP:

* Add a test that Query constructor taking OP_NEAR with a window size works.

Python:

* python/testsuite2.py: Don't run off the traceback looking for a test function
  if the exception wasn't from a test function.

Xapian-bindings 1.2.8 (2011-12-13):

Lua:

* Wrap user-subclassable functor objects by allowing the user to pass a
  Lua function where the functor object would be passed in the C++ API.

PHP:

* Fix "PHP Notice:  Undefined variable: r in xapian.php".  (Fixes bug#576)

* The PHP bindings will now work again with a version of PHP built with ZTS
  enabled (which is the default on Microsoft Windows).  This was broken by
  the changes to support subclassing in PHP in the version of SWIG used since
  1.2.6.

Python:

* Add a module docstring.  (Fixes bug #573)

* The python testsuite now checks for object leaks during each testcase.

* In test_matchingterms_iter, run the code we're testing for leaks twice, and
  only check for leaks the second time to avoid falsely reporting a leak when
  some cached value gets initialised under Python 2.5.

Ruby:

* Wrap optional prefix parameter to Database::allterms.

Xapian-bindings 1.2.7 (2011-08-10):

Documentation:

* INSTALL: Pull in a few updates from the latest version of the automake
  document which this file was originally based on.  Add in the missing
  copyright and licensing information.

* INSTALL: Add --with-lua to list of options.

* INSTALL,README: It's no longer noteworthy that Mac OS X 10.1 and 10.2 aren't
  supported as Apple ditched them long ago, so drop this as a "Known Issue" in
  INSTALL and instead just say "Mac OS X >= 10.3" in the discussion of
  supported platforms in the README.

* HACKING: Update and start section on deprecation warnings for the bindings.

General:

* Add missing wrappers for Database::has_positions() and
  TermIterator::positionlist_count(), and correct the return type of
  Database::get_doclength() from double to Xapian::termcount.

CSharp:

* README: Note a recent version of Mono which we've tested the C# bindings
  with.

* Check that exactly the sources we expect are generated, and add some sources
  which were missing from the list.

* Fix "make uninstall" so the compiled C++ module (typically _XapianSharp.so)
  gets removed.

* Fix iterator ++ and -- so that the reference to the object isn't released
  prematurely, which was causing an occasional crash if the garbage collection
  happened at just the wrong moment,

* Add test coverage for QueryParser.ParseQuery() with flags argument.

* Wrap Query::MatchAll and Query::MatchNothing. (ticket#158)

Java:

* SmokeTest.java: Fix == comparisons with strings to use equals().

* Add test that string passing is zero byte safe.

* Fix MyExpandDecider.accept() to really check the passed parameter.

Java-SWIG:

* Put the SWIG-generated Java bindings in package org.xapian.

* Wrap Query::MatchAll and Query::MatchNothing. (ticket#158)

* SmokeTest.java: Fix == comparisons with literal strings to use equals()

* Add test that string passing is zero byte safe.

* Fix MyExpandDecider.accept() to really check the passed parameter.

* Fix the compile JNI code to have a .jnilib extension on Mac OS X.

* Create an HTML documentation page based on java/README.

* Copy java examples from the hand-coded JNI ones.

* docs/examples/SimpleIndex.java: Update to use commit() rather than flush().

* Check that exactly the sources we expect are generated, and add some sources
  which were missing from the list.

Lua:

* Merge latest Lua changes from Xiaona Han.

* lua/smoketest.lua: Add simple test for Database::positionlist_begin().

* simpleexpand.lua: Don't try to add anything to the RSet if there are no
  matches.

Perl:

* Sync updates to examples from XS Search::Xapian:

  + Require Perl >= 5.6 so we can "use warnings;".

  + Loop over file using while() (which reads a line per iteration) not
    foreach() (which reads the whole file up front).

* Wrap MatchAll and MatchNothing for Perl (as Search::Xapian::Query::MatchAll
  and Search::Xapian::Query::MatchNothing).  (ticket#158)

* perl/t/termgenerator.t: Test TermIterator::index_text() with two arguments.

* perl/Makefile.am: Fix "make check".

* perl/t/symbol-test.t: Fix to work when built against an installed
  xapian-core.  (ticket#558)

PHP:

* php/smoketest.php: Install an error handler so the test fails if there are
  any errors, warnings, notices, etc.

* Change PHP examples and test program to use 'include "xapian.php"' like user
  code should (rather than 'include "php5/xapian.php"' as they did previously).

* Wrap MatchAll and MatchNothing for PHP as XapianQuery::MatchAll() and
  XapianQuery::MatchNothing(). (ticket#158)

Ruby:

* Wrap MatchAll and MatchNothing for Ruby.  (ticket#158)

Xapian-bindings 1.2.6 (2011-06-12):

General:

* SWIG-based bindings are now generated with a newer version of SWIG
  (ticket#538).

Portability:

* On Mac OS X 10.5 or later, and 10.4 on x86, build Java JNI library with a
  .jnilib extension as we do for older versions.

CSharp:

* Upgrading to newer SWIG fixes issues with strings with newer C# versions.

Java:

* Fix memory leaks when functions taking string parameters throw exceptions.

* Previously a hash table was used to map Java objects to C++ ones, but we
  now just cast the address of the C++ object to a jlong (which is 64 bits
  so will hold a pointer on current platforms).  This is more efficient and
  avoids the need for thread locks around accesses to the hash table.

* Remove explicit checks for NULL around calls to delete.

* Mark makefiles which build Java code as .NOTPARALLEL to avoid race conditions
  during parallel builds.

Lua:

* Add support for Lua, which is being developed by Xiaona Han during GSoC this
  year.  The current support should be regarded as experimental - it passes
  its automated tests, but the details of the Lua API are likely to evolve as
  the project progresses.

Perl:

* README: say that Perl bindings probably need Perl 5.8 or later.

PHP:

* Directors now work for PHP (ticket#488).  New simplematchdecider.php example.

Python:

* python/pythontest2.py: With Python 2.7, gc.collect() doesn't always collect
  all the garbage, so repeat until no further objects are freed.
  (https://bugs.debian.org/625679 and https://bugs.gentoo.org/349484).

Ruby:

* ruby/smoketest.rb: Older Ruby 1.8.x doesn't have Dir.mktmpdir() - just skip
  the compaction tests for these versions.

Xapian-bindings 1.2.5 (2011-04-04):

Documentation:

* README: Update info on SWIG-based Perl bindings.

* INSTALL: Copy new Multi-Arch section from xapian-core/INSTALL.  Replace VPATH
  section with better equivalent from xapian-core/INSTALL.

General:

* Wrap ESet::get_eset() with min_wt parameter (new in C++ API in 1.2.5).

* configure: If xapian-core is a different release series, promote the
  mismatched versions warning to an error.

Portability:

* Mac OS X: Don't override MACOSX_DEPLOYMENT_TARGET on 10.5 and later, or
  10.4 on x86, as the default if unset on these versions is the current OS
  version.  (ticket#541)

* python/pythontest2.py: In test_compactor(), close any open databases before
  removing the directory as you can't delete an open database on Microsoft
  Windows.  (ticket#526)

CSharp:

* Don't pass extra flags to Microsoft's gacutil.  (ticket#516)

* Clarify the licence is GPL "version 2 or later" in the meta information
  we put in the module.

Python:

* Remove old and broken Enquire.get_matching_terms() method.  We deprecated
  Enquire.get_matching_terms() in 1.0.x, and removed it in 1.1.0, but
  accidentally left an older version of get_matching_terms() exposed.

* Remove broken implementation of MSet.__contains__.  This appears never to
  have worked, and to have been broken for at least the past 3.5 years without
  anyone mentioning it, and is probably of little use anyway, so no need to
  deprecate.

* python/docs/index.html: Document that MSet.items and ESet.items are
  deprecated, and what to use instead.  Note that MSET_DOCUMENT never worked on
  the tuple returned by MSet.items.  (ticket#531)

* Add test coverage for mset.items.

Ruby:

* Add test coverage for Xapian::Compactor.

* Handle an empty response to $RUBY --version specially.  This gives a less
  opaque error in cases where the user specified RUBY but the value given
  wasn't an executable file.

Xapian-bindings 1.2.4 (2010-12-19):

General:

* Wrap the new Xapian::Compactor class.  The resolve_duplicate_metadata()
  virtual method is wrapped for subclassing for Python and Ruby currently.

* Eliminate separate Makefile.am in the docs subdirectory of each language
  subdirectory and just inline any rules into the main sub-Makefile.am, which
  allows more of the build to run in parallel.

* Don't ship some files which are generated at build time.

* configure: Need python in maintainer mode to run doxy2swig.py.

Packaging:

* RPM: Package the Perl bindings.

* RPM: Don't package _XapianSharp.la.

Portability:

* For Mac OS X builds, set DYLD_LIBRARY_PATH to allow tests to find an
  uninstalled Xapian library.  See ticket #322.

* configure: Fix typo in code to set PYTHON_LIBS under cygwin.  (ticket#509)

CSharp:

* Don't install _XapianSharp.la.

Perl:

* Merge SWIG-based Perl bindings originally developed by Kosei Moriyama during
  GSoC 2009.  These are close to being a compatible replacement for the
  hand-coded XS bindings in Search::Xapian but also offer a more complete
  wrapping of the C++ API.  We're planning to replace the XS bindings with the
  SWIG ones for easier maintenance.  We encourage you to try them and let us
  know how you get on - particularly if you find cases where code which works
  with the XS bindings doesn't work with the SWIG ones.

PHP:

* Document that iterators shouldn't be dereferenced or advanced when at their
  end points (ticket#520).

Python:

* Fix memory leaks in typemaps which return Python lists.

* MatchSpy can now be subclassed in Python.  Remote use isn't currently
  supported.

* configure: Use sys.version_info tuple, rather than string splicing which
  assumes the Python "major.minor" is 3 characters (which would fail if Python
  2.10 were ever released, for example).

Xapian-bindings 1.2.3 (2010-08-24):

Packaging:

* xapian-bindings.spec: Don't run autoreconf - it's no longer required.

Xapian-bindings 1.2.2 (2010-06-27):

* No user-visible change except for bumping the version to indicate
  compatibility with Xapian-core 1.2.2.

Xapian-bindings 1.2.1 (2010-06-22):

This release includes all changes from 1.0.21 which are relevant.

General:

* Wrap Xapian::StemImplementation.  Currently this has only been tested for
  Python.  (ticket#448)

Guile:

* Remove non-functional disabled guile bindings left over from Open Muscat
  days - if someone wanted to add guile bindings, it would be easier to start
  from scratch.

Java-SWIG:

* Update list of generated java sources in the SWIG-based Java bindings.

PHP:

* zend_throw_exception() returns, so return control to PHP directly after
  calling it to avoid needless extra work and possible issues.

Python:

* Fix "from xapian import *".  (ticket#477)

* Fix testcase weight_normalise - a change in xapian-core means that
  get_max_possible() can now return zero for a non-existent term, so don't
  blindly calculate the reciprocal of it.

* python/replicationtest2.py: Extend to check that changesets get applied
  correctly.

* python/smoketest2.py: Check len(mset) works (improving test coverage of
  Python-specific wrapping).

Xapian-bindings 1.2.0 (2010-04-28):

This release includes all changes from 1.0.20 which are relevant.

Portability:

* configure: Tell libtool not to link in deplibs on platforms where we know
  they aren't needed.

* configure: On Linux, extract the library search path from ldconfig which
  gives us the default entries reliably.

Xapian-bindings 1.1.5 (2010-04-15):

This release includes all changes from 1.0.19 which are relevant.

Tcl:

* tcl8/docs/index.html: Document WritableDatabase::close() as a way to
  sidestep the whole destructor issue.  (ticket#62)

Xapian-bindings 1.1.4 (2010-02-15):

This release includes all changes from 1.0.18 which are relevant.

General:

* Update for the new Brass backend and other C++ API changes.

* Wrap Database::get_doclength_lower_bound(),
  Database::get_doclength_upper_bound(), Database::get_wdf_upper_bound(),
  Database::valuestream_begin() and Database::valuestream_end() for all
  languages. (ticket#431)

* Wrap ValueIterator::skip_to() and ValueIterator::check() for all languages.

Python:

* Wrap valuestreams as Database.valuestream(), returning a ValueStreamIter
  object which dereferences to a ValueStreamItem object,

* Fix Enquire.clear_matchspies() wrapper which crashed in 1.1.3.

Ruby:

* Add safe wrapper for the valuestream iterator.

Xapian-bindings 1.1.3 (2009-11-18):

This release includes all changes from 1.0.15-1.0.17 which are relevant.

General:

* configure: Default to looking for xapian-config-1.1 unless XAPIAN_CONFIG is
  specified.

* Wrap the new MatchSpy class, and associated features.

* Don't wrap PostingSource::serialise(), Weight::serialise() and
  Weight::unserialise() as they aren't useful from the bindings.

* Update for the Sorter to KeyMaker changes.

PHP:

* Fix PHP bindings to build when PHP has been compiled in multithreaded mode,
  as it standardly is on Microsoft Windows.  Fixes #411.

* Merged the PHP "smoketest" back together now we don't need to support
  PHP4 now.

Python:

* Fix a memory leak on error (in theory - we've not got a way to generate this
  error, so haven't been able to reproduce the leak or test the fix).

Xapian-bindings 1.1.2 (2009-07-23):

This release includes all changes from 1.0.14 which are relevant to trunk.

Python:

* Several changes towards fully supporting Python 3, but more work is required.
  (ticket#246)

Xapian-bindings 1.1.1 (2009-06-09):

This release includes all changes from 1.0.13 which are relevant to trunk.

General:

* Wrap the recently added extra parameter to Enquire::set_collapse_key().

CSharp:

* Document that Query::MatchAll and Query::MatchNothing aren't wrapped for
  C# yet, and to use Query("") and Query() instead.

* configure: If we don't find a C# compiler, don't test an empty command name
  further which saves a fork and avoids an odd looking message.

PHP:

* Document that Query::MatchAll and Query::MatchNothing aren't wrapped for
  PHP yet, and to use Query("") and Query() instead.

Python:

* Wrap Query::MatchAll and Query::MatchNothing for Python and document how they
  are wrapped (ticket#158).

* python/smoketest2.py,python/smoketest3.py: Update tests with FLAG_PARTIAL to
  expect SYNONYM in generated query.

Ruby:

* Document that Query::MatchAll and Query::MatchNothing aren't wrapped for
  Ruby yet, and to use Query("") and Query() instead.

Tcl:

* Wrap Query::MatchAll and Query::MatchNothing for Tcl and document how they
  are wrapped (ticket#158).

Xapian-bindings 1.1.0 (2009-04-22):

Documentation:

* INSTALL: Python 2.6 and later look in ~/.local for Python modules so update
  the instructions to suggest users use this standard location for installing
  without root access.

General:

* All deprecated features slated for removal in 1.1.0 have been removed.

* All new C++ API features have been wrapped.  Also, since we now supply some
  standard MatchDecider subclasses, we now wrap Enquire::get_mset() so that
  these can be passed in even for languages for which SWIG doesn't support
  subclassing.

Packaging:

* xapian-bindings.spec: Updated to reflect the new Python packaging.

Portability:

* configure: Use XAPIAN_CXXFLAGS for test compiles since it may include options
  to put the compiler into ISO C++ mode).

PHP:

* PHP4 support has been removed, since PHP4 is no longer supported upstream
  as of 2008-08-08.

Python:

* Python 2.3 or later is now required.  2.2 is essentially unsupported
  upstream.

* The import method used has been changed (by using a newer SWIG version)
  and no longer gives a warning with Python 2.6.

* Initial support for Python 3.0 has been added.  This currently doesn't
  work correctly and should be treated as experimental. (ticket#346)

* The newer SWIG version handles exceptions in director methods correctly
  so we no longer need our workaround for ticket #289.

* Database::metadata_keys_begin() and Database::metadata_keys_end() are
  wrapped for Python as Database.metadata_keys().

* The Python bindings are now installed as a python package, with the
  files in a xapian subdirectory, hiding the internal _xapian module
  better.

* Python now flags deprecation warnings for the single argument form and old
  parameter name (ascending) in set_sort_by_key(), set_sort_by_value() and
  friends.

Xapian-bindings 1.0.23 (2011-01-14):

Portability:

* configure: Fix typo in code to set PYTHON_LIBS under cygwin.  (ticket#509)

PHP:

* Document that iterators shouldn't be dereferenced or advanced when at their
  end points (ticket#520).

Python:

* Fix memory leaks in typemaps which return Python lists.

Xapian-bindings 1.0.22 (2010-10-03):

Packaging:

* RPM: Don't package _XapianSharp.la.

CSharp:

* Don't install _XapianSharp.la.

Python:

* configure: Use sys.version_info tuple, rather than string splicing which
  assumes the Python "major.minor" is 3 characters (which would fail if Python
  2.10 were ever released, for example).

* Add test_xapian_star.py to distribution - fixes failure of "test_import_star"
  testcase in pythontest.py.

Xapian-bindings 1.0.21 (2010-06-18):

Python:

* xapian.BAD_VALUENO is now wrapped as a constant rather than variable which
  can't be written to. (ticket#297)

* Fix cleaning of test directories to use "rm -rf" rather than "rm -f".

* Add test to check that "from xapian import *" works.

Xapian-bindings 1.0.20 (2010-04-27):

Python:

* Set PYTHONDONTWRITEBYTECODE=1 in the environment to prevent Python from
  generating .pyc files in srcdir for Python >= 2.6, and use a Bourne shell
  trap to delete them after running tests for older versions of Python.
  (ticket#315)

Ruby:

* configure: Fix typo so path to ruby is reported if Ruby < 1.8 is found.

Xapian-bindings 1.0.19 (2010-04-15):

Tcl:

* tcl8/docs/index.html: Improve wording in a few places.

Xapian-bindings 1.0.18 (2010-02-14):

General:

* Wrap new C++ API method Document::add_boolean_term().

Ruby:

* Generate entries in the Ruby rdocs for all classes which aren't documented
  because of Ruby-specific methods.  Fixes ticket#417.

* Avoid absolute paths in the generated rdocs.

Xapian-bindings 1.0.17 (2009-11-18):

Packaging:

* Improve RPM package summaries - the files are needed to *use* scripts as well
  as to develop them.  Use "Tcl" instead of "TCL" as the former is more
  conventional.

Portability:

* python/Makefile.am: Restore the "./" path to the sourced file
  libtoolconfig.tmp as ksh requires it.

Java:

* Fix memory leak when passing a MatchDecider to Enquire::get_mset().

Xapian-bindings 1.0.16 (2009-09-10):

Python:

* Improved docstrings for QueryParser::set_default_op() and
  QueryParser::get_default_op() (automatically generated from changes in
  xapian-core).

Xapian-bindings 1.0.15 (2009-08-26):

Python:

* Don't break long words when wrapping text in the generated API documentation
  comments as this was causing identifiers to be broken in two.

Xapian-bindings 1.0.14 (2009-07-21):

General:

* configure: If $CSC is empty, don't try to run it.  This was a cosmetic bug
  and the only side-effect was an odd looking message.

Python:

* Rename methods at build-time using SWIG rather than a run-time in Python, as
  the latter approach adds a small time overhead when the module is being
  loaded.

Ruby:

* Fix to accept an integer value > MAXINT for a double parameter.

Xapian-bindings 1.0.13 (2009-05-23):

Packaging:

* xapian-bindings.spec: Update C# packaging for rename of XapianSharp.so to
  _XapianSharp.so in 1.0.11.

* xapian-bindings.spec: Update Tcl8 packaging for where we now install the
  bindings since 1.0.6.

PHP:

* Backport fix from SWIG SVN for misuse of formatted error function in
  SWIG-generated code.

Python:

* Change the SWIG-generated wrapper code so it doesn't attempt to acquire
  Python's Global Interpreter Lock (GIL) in situations where we know that it
  will already be locked.  This avoids some dead-locks with mod_python (due to
  mod_python bugs which are apparently unlikely to ever be fixed), and results
  in smaller wrappers which run a little faster (in tests with Xapian on x86-64
  Ubuntu 9.04, the stripped wrapper library was 11% smaller and ran 2.7%
  faster). (ticket#185)

* README,python/docs/index.html: Update documentation of the above mod_python
  issue and also document the related mod_wsgi issue.  The status is now that
  everything seems to work if you stick to the main interpreter (ticket#364).

* Backport fix from SWIG SVN for misuse of formatted error function in
  SWIG-generated code.

* python/docs/examples/simplematchdecider.py: Read "avoid_value" from the
  second parameter, not the third.

* python/docs/examples/simplematchdecider.py,
  python/docs/examples/simplesearch.py: Make use of str.join() for simpler,
  clearer code.

Ruby:

* README: Note that the testsuite fails due to a bug in the test/unit module in
  Ruby 1.9.0, but applications using the bindings should work, and that the
  testsuite works with Ruby 1.9.1.  Drop all mention of Ruby 1.6.x as that
  appears to be completely dead both upstream and in the wild.

Xapian-bindings 1.0.12 (2009-04-19):

Documentation:

* INSTALL: Add a note about being able to pass variables to configure to pick
  which of several parallel installations of a language to build for.

Python:

* python/pythontest.py: Round the weights returned for the OP_SCALE_WEIGHT
  test to avoid failing due to rounding differences.

* python/testsuite.py: Remove bare except: handlers from testsuite, so Ctrl-C
  stop the whole testsuite, not just the currently running testcase.

Xapian-bindings 1.0.11 (2009-03-15):

Documentation:

* README: Note that 1.0.x doesn't (and isn't currently planned to) support
  Python 3, and possible current issues with Ruby 1.9.

Portability:

* Merge fixes from Cygwin Ports, so bindings should build out of the box on
  Cygwin.

Python:

* python/docs/examples/: Use str(obj) rather than obj.get_description() (the
  latter is deprecated, and support was removed in 1.0.0).

* Add support for using the new name ("reverse") for the second argument of
  set_sort_by_key() and set_sort_by_value() and friends as a named parameter.
  The old name ("ascending") is still supported, but will be deprecated in
  1.1.0.

* Keep Python references to Sorter, Stopper, and ValueRangeProcessor objects
  which get set on other objects to avoid segmentation faults if they go out
  of scope before the object they are set on does.  (ticket#341)

Ruby:

* Fixes for Ruby 1.9 compatibility (ticket#323).  The test harness currently
  fails so "make check" doesn't pass, but code using the bindings should work.

Xapian-bindings 1.0.10 (2008-12-23):

Python:

* Need to clean testsuite.pyc from srcdir since that's where it gets generated
  as things stand (upstream fix for Debian bug 506090).

Xapian-bindings 1.0.9 (2008-10-31):

General:

* configure: Add support for "--enable-quiet" like xapian-core and omega have.

* Wrap new Database::metadata_keys_begin() and Database::metadata_keys_end()
  methods.

Xapian-bindings 1.0.8 (2008-09-04):

General:

* configure: Report bug report URL in --help output.

Python:

* Fix mangling of exceptions thrown from Python subclasses of Xapian classes.
  (bug#289)

* Fix memory leaks in the xapian.Query constructor.  (bug#294)

Xapian-bindings 1.0.7 (2008-07-14):

Documentation:

* Document how all the database factory functions and library version functions
  are wrapped for all languages.

General:

* Fix to build against a xapian-core which has quartz and/or flint disabled.

* The "program" version of Remote::open() has been wrapped for some time, so
  update the documentation which said it wasn't.

Packaging:

* xapian-bindings.spec: Remove "www." from xapian.org and oligarchy.co.uk URLs.

Portability:

* For Java, Python, and Ruby, use the libtool -shrext option to specify a
  different module extension rather than our own ugly bodge.

Java:

* Make passing string from Java to C++ zero-byte safe.  It doesn't appear to be
  simple to make C++ to Java work though.

PHP:

* Add test that OP_VALUE_GE works for PHP.

Python:

* Several corrections to the Python documentation.

* configure: Fix problem with building under mingw.

Ruby:

* Include simplematchdecider.rb example.

* smoketest.rb: Test the version reporting functions.

Tcl:

* Include simpleexpand.tcl example.

* Fix where the Tcl module gets installed.

* README: Note that Tcl 8.3 and earlier are no longer supported by upstream.

Xapian-bindings 1.0.6 (2008-03-17):

General:

* Wrap OP_VALUE_GE and OP_VALUE_LE and the new Query constructor which they are
  used with.

* configure: Correct the required SWIG version given in an error message.

PHP:

* php/smoketest.php: Add note that this script should be run using 'make check'
  in the build tree (rather than trying to copy it to a webserver as someone
  recently tried to).

* php/smoketest.php: Fix to work under PHP4.

Python:

* The Python module now always has the extension which Python expects, which
  fixes a failure on Mac OS X.

Ruby:

* Automatically install/uninstall the Ruby rdoc-generated documentation along
  with the ruby bindings.

Tcl:

* configure: Sort out the default value of TCL_LIB, which could end up being
  under /usr/share in xapian-bindings 1.0.4 and 1.0.5.

Xapian-bindings 1.0.5 (2007-12-21):

General:

* Wrap Xapian::Sorter and subclasses.

* Wrap Enquire::set_sort_by_key(), Enquire::set_sort_by_key_then_relevance(),
  and Enquire::set_sort_by_relevance_then_key().

* Factor out the code to protect multitarget rules against parallel make, and
  fix it to handle the source being changed while the rule is executing, and to
  correctly return an error code if we fail while trying to recover from the
  removal of a target of a multi-target rule.

* configure: Improve the clarity of the error given when none of the tools
  needed for any supported language are found.

* configure: SWIG 1.3.32 has now been released, so require at least this
  released version for maintainer builds.

Java:

* Add explicit '#include <cstring>' to fix build with the latest snapshots of
  GCC 4.3.

* configure: Log the output of trying to compile conftest.java in config.log;
  if the test fails, report whether the failure was compiling or running the
  test program.

* Check for directory existence rather than calling mkdir unconditionally as
  despite the "(ignored)", the error message seems to confuse some people.

PHP:

* Add feature test for XapianMultiValueSorter.

* php/smoketest5.php: Fix use of Database_get_document to new style OO
  interface.  Fix the error reported when the PHP5 exception test fails.

* php/smoketest.php: Add feature test to confirm that optional arguments to
  XapianQuery's "term" constructor are wrapped.

Python:

* Don't drop the GIL when calling Xapian.MSet.items and Xapian.ESet.items -
  these properties build a python list, so dropping the GIL isn't safe and
  may cause undefined behaviour in multithreaded environments.

* configure: Update error message to reflect requirement for at least python
  2.2.

* configure: Change "print foo" to "print(foo)" in python version checks, for
  compatibility with python 3.0.

Ruby:

* The Ruby bindings now work on Mac OS X (the Ruby module's extension was
  previously incorrect).

* Run "rdoc" to generate HTML for the Ruby-specific API documentation which
  ruby/docs/index.html previously had a dead link to.

Tcl:

* configure: Overhaul code to find tcl.h since the old version no longer worked
  with Debian unstable.

* tcl8/docs/index.html: Update documentation to cover flint and mention that
  quartz is now deprecated.

* Remove code to handle `const char *' exceptions - as of 1.0.0 the QueryParser
  throws QueryParserError instead.

Xapian-bindings 1.0.4 (2007-10-30):

General:

* Wrap new OP_SCALE_WEIGHT query operator, and corresponding Query constructor.
  Add feature tests for all languages.

* The "bindings.html" file documenting each of the bindings has been renamed to
  "index.html".

Packaging:

* Fix the PHP Makefile.am to work with autoconf < 2.60 to fix RPM builds for
  older distros.

Portability:

* Fix warnings when compiling with GCC 4.2.

PHP:

* Update to newer SWIG SVN snapshot to fix memory leaks in wrapped constructors
  and methods/functions which return a wrapped class.

* For PHP4, wrap Xapian::sortable_serialise() as xapian_sortable_serialise()
  and Xapian::sortable_unserialise() as xapian_sortable_unserialise().

* Document how non-class functions are wrapped.

* Fix wrapping of NumberValueRangeProcessor for PHP4.

* smoketest.php: Split the regression test for bug#193 into separate
  versions for PHP4 and PHP5 as the previous version only worked for PHP5.

Python:

* python/docs/index.html: Promote the Pythonic iterators, and deprecate the
  non-pythonic iterators.  Make it clearer that the "sequence API" is
  deprecated.

* Add test of a custom ValueRangeProcessor (ie, one written in python).

* Update the examples to use the new-style attributes to access MSet item
  values rather than the old-style MSET_* constants.

* Document MSET_DOCUMENT.

Ruby:

* smoketest.rb: Rename test of metadata access methods which had been named the
  same as the matchdecider test due to a copy-and-paste error.

Xapian-bindings 1.0.3 (2007-09-28):

General:

* Wrap new methods Database::get_metadata() and
  WritableDatabase::set_metadata().

* "make uninstall" now removes the loadable module we install for each of
  the bindings.

* "make distcheck" now works.

* Distribution tarballs are now in the POSIX "ustar" format since it saves
  about 40KB and we need to use it for xapian-core anyway.

Packaging:

* RPMs: Package xapian.php.

CSharp:

* Remove wrapper for ValueRangeProcessor::operator(), since it can't be
  usefully used currently.

Java:

* Remove wrappers for the Muscat36 backend, which has now been dropped from the
  C++ library.

* "make clean" now removes the class files generated for inner classes.

PHP:

* Add feature test for DateValueRangeProcessor when used with QueryParser.

* ValueRangeProcessor::apply() can now be called from PHP (bug#193).  This
  isn't actually very useful, since you can't subclass it in PHP currently.

* Fixed wrapping of Enquire::set_cutoff() - previously this would only work
  if the third parameter was specified and a floating point number (e.g. 0.0).

* php/docs/bindings.html: Fix errors in example code.

Python:

* ValueRangeProcessor::operator() is now wrapped as a __call__ method in
  Python which takes two strings and returns a 3-tuple (value_number,
  modified_begin, modified_end).  Previously this always failed with a
  type error, so this doesn't break existing code.

* python/pythontest.py: Interpret any commandline arguments as a list of
  tests to be run (the default is to run all tests).

* README,python/docs/bindings.html: Add a note about the problems with
  mod-python (as described in bug #185).

* python/pythontest.py: Delete the database handles before deleting a database
  to fix problems running the Python tests on MS Windows (bug#179).

* "make clean" now removes testsuite.pyc.

Ruby:

* Check for RUBY_INC, RUBY_LIB, and RUBY_LIB_ARCH in the environment or on
  the configure command-line.  The defaults for RUBY_LIB and RUBY_LIB_ARCH are
  now the site-specific directories, which is more correct when building
  from source.  Debian packages, etc can override this by setting RUBY_LIB and
  RUBY_LIB_ARCH.

Tcl:

* Check for TCL_LIB in the environment or on the configure command-line to
  allow installing without root access more cleanly.

Xapian-bindings 1.0.2 (2007-07-05):

Documentation:

* Document use of PYTHON_LIB and PHP_EXTENSION_DIR instead of pylibdir and
  phpextdir.

* Remove documentation of removed "--with-swig" configure option.

General:

* Add methods of NumberValueRangeProcessor for serialising and
  unserialising doubles.

* Add methods and constants supporting spelling correction and synonyms.

* Value of XAPIAN_CONFIG supplied to configure is now passed to distcheck,
  to ensure that it works with uninstalled copies of Xapian.

* Value of PYTHON_LIB supplied to configure is now respected - previously
  it was documented, but ignored.

* Add support for supplying PHP_EXTENSION_DIR to configure.

* Change to using "%include", rather than reproducing contents of header
  files, for "queryparser.h", "document.h" and "postingiterator.h".

* Add new form of get_mset() which allows a matchspy matchdecider to be
  set.

* RPMs: Don't mention %makeinstall in a .spec file comment as that makes RPM
  explode.  Add in a missing "mv" in the command for installing tcl8
  documentation.

CSharp:

* Fix rule handling parallel make to include xapian_wrap.h

PHP:

* Install xapian.php as <PREFIX>/share/php<PHPMAJOR>/xapian.php.  There
  doesn't seem to be a standard location, but this works for Debian at
  least, and it seems better to at least try to install it.

* Rename ValueRangeProcessor and subclasses and TermGenerator to have a Xapian
  prefix for PHP4.

Python:

* Fix a threading problem: the GIL was not being acquired in the exception
  handling code before setting the Python exception state, leading to
  various memory corruption symptoms in threaded programs.

* Add special iterators to Database for synonyms, synonym_keys and
  spellings.

* Add test cases for OP_VALUE_RANGE queries, getting spelling corrections,
  synonym iterators and spelling iterators.

* In the test suite, expect_query() now adds "Xapian::Query(" and ")" around
  the expected description to make the tests more readable.

Xapian-bindings 1.0.1 (2007-06-11):

Documentation:

* NEWS: Fix the recent headings which said "Xapian-core" to say
  "Xapian-bindings".

General:

* Wrap Xapian::Query constructor for creating ValueRange queries.

* Wrap new forms of Xapian::Database::allterms_begin() and allterms_end()
  which take a prefix.

Packaging:

* RPMs: Use "make install" instead of %makeinstall to avoid doubled
  %{buildroot} prefix on most files which we then have to work around.

CSharp:

* SimpleIndex now uses Xapian.TermGenerator.

* SimpleSearch now uses Xapian.QueryParser.

* New SimpleExpand example.

* Document explicitly how STEM_SOME constants are currently wrapped.

* Update GetTermName() reference in documentation to GetTerm().

* SmokeTest.cs: Update comment about Portable.NET bug - the bug is fixed in
  their CVS repo, and the fix should be in their 0.8.2 release.

Java:

* `configure --help' documented that environmental variable JNI_INCLUDE_DIR was
  looked at, but in fact its value was read but ignored.  We now use it as the
  first place to look for jni.h.

* configure will now automatically add an extra "-I" for the
  linux/solaris/win32 subdirectory which Sun's JDK requires.

* Document JAVA_HOME and JDK_HOME in ./configure --help and mark them as
  "precious" so their values are preserved for when configure is automatically
  rerun.

PHP:

* Enquire::get_mset(first, maxitems, omrset) now works for PHP5.

* The PHP examples have been rewritten to be clearer and to make use of the
  new XapianTermGenerator class.

Python:

* Python examples now use xapian.QueryParser and xapian.TermGenerator.

* Add support for prefix-restricted pythonic allterms iterators.

* Update documentation in a couple of places to refer to updated replacements
  for MSetIterator.

* Change testsuite output to be more vim-friendly (vim should be able to jump
  to the right lines now).

* __str__ on Xapian::Error now includes extra information in some cases (the
  error_string and context, if they are set).

* python/smoketest.py: Eliminate uses of the legacy sequence API.

* python/pythontest.py: The legacy sequence API is only supported for Python
  2.3 and later, so don't run tests for it when running under Python 2.2.

* We now generate and install xapian.pyo as well as xapian.pyc.

Ruby:

* The Ruby examples now use the Xapian::QueryParser and Xapian::TermGenerator
  classes.

* Add missing rename for the C++ TermGenerator::set_document() method so it can
  be used as "tg.document = doc" in Ruby.

* Fixed compilation on Mac OS X and warning from GCC on 32-bit Linux platforms.

Tcl:

* tcl8/docs/examples/simpleexpand.tcl: New example to demonstrate relevance
  feedback, based on C++ simpleexpand.cc.

* tcl8/docs/example/simpleindex.tcl: New simpler example making use of the
  TermGenerator class.

* tcl8/docs/example/simplesearch.tcl: New simpler example making use of the
  QueryParser class.

* tcl8/docs/bindings.html: Document how constants are wrapped.

* Update smoketest and examples to require version 1.0.0 - previously this
  required 0.9.6, which failed since TCL doesn't accept differing major
  version numbers.

* pkgIndex.tcl is now generated by configure.

Packaging:

* The required automake version has been lowered to 1.8.3, so RPMs can now be
  built on RHEL 4 and SLES 9.

Xapian-bindings 1.0.0 (2007-05-17):

Documentation:

* Document Unicode support for each language.

* Assorted minor improvements and typo fixes.

General:

* Add wrappers for ExpandDecider, and Enquire::get_eset() variants which use
  it, for languages where SWIG supports directors.

* Wrap new features: TermGenerator, ValueRangeProcessor hierarchy, the
  OP_VALUE_RANGE query operator, the new overloaded form of parse_query, which
  allows the "default_prefix" argument to be supplied, QueryParser flags
  FLAG_PURE_NOT and FLAG_PARTIAL.

* Deprecated Xapian::Stem's stem_word() method in favour of apply().

* Remove wrappers for deprecated features removed from the C++ API (see
  docs/deprecation.html in xapian-core for full details and upgrade
  information).

* Deprecate ESetIterator::get_termname() in favour of ESetIterator::get_term().

* QueryParserError is now a real error, so remove special handling for "const
  char *" exceptions.

* Use a stamp file in "make" rules with multiple targets so that parallel
  make works.

* configure: Now quotes $PYTHON, etc so that you can specify a program with
  arguments.

* configure: If the user specifies a program which doesn't exist (e.g.
  PYTHON=/opt/bin/ptyhon) don't autoprobe after failing to find it.

* configure: Disable probes for f77, gcj, and rc completely by preventing
  the probe code from even appearing in configure - this reduces the size of
  configure by 28% and should speed it up significantly.

* configure: If the version check against the xapian-core version detects a
  mismatch, we now issue a warning rather than a hard error since if you're
  careful this can work.  The warning is issued late on in configure, so it's
  harder for the user to miss.

* configure: The --with-swig option has been removed.  It no longer has a
  purpose as we now ship the files which are generated by SWIG.

Portability:

* The PHP bindings can now be built with MSVC for Microsoft Windows.

CSharp:

* When using Mono 1.2, we must build with gmcs (the C# 2.0 compiler) rather
  than mcs to avoid segmentation faults at runtime due to unimplemented
  features in mcs.  Document this, and update configure to prefer gmcs.

* The return type of MatchDecider::operator() is now `bool' rather than `int'
  (in line with the same change in the C++ API).

* Xapian.Stem.StemWord() deprecated in favour of Xapian.Stem.Apply().

Java:

* The Java bindings have been updated to use C++ replacements for deprecated
  methods, so they still build.  The Java wrappers still provide the old
  deprecated names for now though.  The longer term plan is to replace the
  hand-written JNI with SWIG generated wrappers (work has now begun on this)
  which is likely to require some API changes, and it seems more sensible to
  make any changes to align with C++ API changes at the same time.

* Enquire.getQuery() is implemented entirely in Java, so strip out the unused
  MyQuery mechanism, and so fix a memory link which it caused (bug#105).

PHP:

* Fix undefined behaviour in get_matching_terms().

* Document the (existing) renaming of methods which are PHP reserved words
  (empty() to is_empty() and clone() to clone_object()).

* Deprecated Xapian::Stem's stem_word() method in favour of apply().

Python:

* The Python bindings now throw exceptions as classes with a hierarchy which
  mirrors that of the C++ Xapian::Error and its subclasses.  The xapian.Error
  base class inherits from the standard Python Exception class.

* All Python methods which accept strings can now be passed either a unicode
  object or a simple string.  Strings are returned as simple strings: unicode
  input will be returned as utf-8 encoded output.  The documentation now
  contains a "Unicode" section.

* The Python bindings should now be usable more efficiently from threaded
  Python applications since we now use SWIG's -threads option when generating
  them, so that the GIL is released during long-running Xapian operations
  (bug#137).

* Most classes, methods, functions, etc now have docstrings which are either
  automatically extracted from the C++ documentation comments, or overridden by
  more appropriate versions.

* Most of the Pythonic iterators now return an object instead of a sequence,
  which means they now lazily fetch the information which previously had to be
  fetched to put it in the sequence.  The old sequence API is supported for
  compatibility, but is scheduled for removal in Xapian 1.1.0.

* Those Python iterators which have skip_to() methods now return the item
  skipped to, and next() will return the following item.  Previously, they
  returned None, and next() returned the item skipped to.  Several bugs in the
  skip_to() wrappers were fixed.

* Because of the lazy access, some objects returned by iterators will raise
  an error if the lazy evaluation happens after the iterator has moved on
  (since the underlying Xapian API doesn't allow efficient access to the
  information in this situation).  The exact semantics are defined in the
  docstrings for each iterator.

* Those Pythonic iterators which return only a list of terms now return
  simple strings, instead of a sequence or an object containing the term.  This
  is an incompatible change with earlier releases.  The affected iterators are
  Enquire.matching_terms, Query.__iter__, QueryParser.stoplist and
  QueryParser.unstemlist.

* The contents of an MSet can now be iterated in the standard Python way.
  The iteration will return MSetItem objects.  The __contains__ and __getitem__
  methods are also implemented, allowing the "in" and [] operators to work.
  MSet.__getitem__ is a synonym for MSet.get_hit.

* MSet.get_hit() now returns an MSetItem object instead of an MSetIterator,
  so that lazy access to its attributes is supported.  MSetItem has some
  deprecated methods which mimic the MSetIterator interface to allow old code
  to work without modification until release 1.1.0.

* MSetItem provides access to the collapse_key and collapse_count, which
  weren't accessible from the sequence returned by the iterators before this
  release.

* Out-of-range access to MSets will now raise an IndexError - it used to
  cause undefined behaviour (usually a crash).

* The Python testsuite is now much more extensive, and supports colour output
  and verbosity levels, much like the C++ testsuite.  Tests of deprecated
  features are separated out, so that they can easily be removed when the
  features are removed.  The Python tests currently focus mainly on Python
  specific iterators and related functionality - general Xapian behaviour is
  tested by the C++ testsuite.

* The pure Python code in the bindings now uses new-style classes, since we
  have required Python >= 2.2 since Xapian release 0.9.9.

* Enquire.get_matching_terms is now deprecated - use Enquire.matching_terms
  instead.

* The get_description() method which many classes support has been deprecated
  in favour of new more pythonic __str__ methods, so that the str() builtin can
  be used.  get_description() is deprecated and scheduled for removal in 1.1.0.

Ruby:

* We no longer regard the Ruby bindings as "beta quality", so remove the
  warning from their documentation.

* Document that that C++ operator() becomes the method "call" in Ruby.

* Don't read termfreq in safe wrapper for Document::termlist_begin().  Don't
  read wdf in safe wrapper for Database::allterms_begin() (bug#133).

Tcl:

* Deprecated Xapian::Stem's stem_word() method in favour of apply().

Xapian-bindings 0.9.10.1 (2007-04-04):

PHP:

* Fix PHP5 class wrapper generation in a few cases for overloaded methods with
  default parameters.  The most notable case was a missing Query constructor
  which meant that QueryParser was unusable.

* Fix compilation of the PHP4 bindings with ZTS-enabled versions of PHP
  (which mostly seems to mean the MS Windows version).

* Fix PHP5 crash on exit with ZTS-enabled versions of PHP (which mostly
  seems to mean the MS Windows version).

* Add note to the documentation that PHP examples are written for CLI version
  of PHP, but that the bindings work with any version.

* Add check to all PHP examples that they are being run under a CLI version of
  PHP.

Python:

* simpleexpand.py: Print each term's expand weight as a floating point value,
  not an integer.

Ruby:

* INSTALL: document how to install Xapian's Ruby bindings in your home
  directory.

Xapian-bindings 0.9.10 (2007-03-04):

Java:

* Under Mac OS X, automatically look in the standard location for jni.h,
  and automatically rename the JNI library we build to ".jnilib", as is
  required by the OS X JVM.

* java/README: Note success with Sun's JDK 1.5.0_06-b05, plus the requirement
  to add the linux header directory to the include path when using this JDK.

* Add missing default constructor for RSet class - it's not much use without
  this!

* Fix Enquire.getESet() to actually work.

* Fix bug in ESetIterator.hasNext().

* Fix MatchDecider and ExpandDecider so subclassing in Java actually works.

* Fix memory leak with some JVMs in the "Query from array" constructor.

* Fix memory leak in Enquire.setQuery().

* SmokeTest.java: Add regression tests for RSet default constructor,
  Enquire.getESet(), ESetIterator.hasNext(), MatchDecider, ExpandDecider.
  Add feature tests for Enquire.getQuery(), and to make sure we get passed
  the right document in a java subclass of MatchDecider.

* configure: Look for jni.h in $JAVA_HOME/include and $JDK_HOME/include if the
  respective variables are set.

PHP:

* Update the documentation to fix out-of-date information and document the
  differences between the PHP4 and PHP5 wrappers.

* Update the examples to use the new Object Oriented API, and provide versions
  for both PHP4 and PHP5.

* Add a "simpleexpand" example.

* For PHP4, Xapian::DB_CREATE_OR_OPEN should be wrapped as
  Xapian_DB_CREATE_OR_OPEN not DB_CREATE_OR_OPEN, so wrap it with the
  new name, but keep the old name for now for backward compatibility.

* configure: Try `$(PHP_CONFIG) --php-binary` when looking for a PHP
  interpreter - this works with PHP5.

* configure: Remove the sanity check for PHP_EXTENSION_DIR added in Xapian
  0.9.8 - if Xapian is the first PHP extension to be installed, the extension
  directory may not exist and "make install" will create it.

* configure: If zend.h isn't found and configure was run with "--with-php",
  exit with an error rather than automatically disabling PHP support.

Python:

* Fix a problem which preventing building for Python 2.5 on 64 bit platforms.

Packaging:

* RPMs: Add support for passing "--without python" to rpmbuild.  Document the
  various "--without" options in a comment at the start of the .spec file.

* RPMs: Remove "." from the end of the Summary.

Xapian-bindings 0.9.9 (2006-11-09):

Documentation:

* Ship our custom INSTALL file rather than the generic one from autoconf which
  we've accidentally been shipping instead since 0.9.5.

General:

* Wrap Flint::open() and Flint::open_writable().

* configure: Require SWIG 1.3.30 (1.3.30 isn't out yet, but 1.3.30rc1 is
  suitable).

Python:

* Generate the bindings using SWIG 1.3.30rc1 which fixes a build error on 64
  bit platforms with Python 2.5.

Packaging:

* RPMs: Prevent binaries getting an rpath for /usr/lib64 on FC6.

* RPMs: The Python bindings now require Python >= 2.2.

Portability:

* configure: Remove unnecessary backticks from tclsh version test.

Xapian-bindings 0.9.8 (2006-11-02):

General:

* Wrap the "prog" form of Remote::open() (which is suitable for general purpose
  use as of 0.9.7) and the Remote::open_writable() methods (new in 0.9.7).

* The C++ method QueryParser::parse_query() current throws "std:string"
  exceptions if there's a parse error.  Previously the bindings didn't catch
  these.  Now we catch them and handle them as if they were exceptions of
  type Xapian::QueryParserError (in anticipation of this changing in
  xapian-core).  Added testcases for this for PHP, Python, and C#.

* configure: Note that SWIG is only useful for Xapian developers in --help
  output.

* configure: If we failed to find any languages to build for, give a more
  helpful message.

CSharp:

* SmokeTest.cs: Fix warning about unused variable in OP_ELITE_SET check.

Java:

* configure: Fix check for jni.h in /usr/lib/jvm/java-gcj/include to actually
  work rather than using the cached failure of the first jni.h check.

* SmokeTest.java: Fix check for value of Query.OP_ELITE_SET.

* SmokeTest.java: Avoid gcj "set but not used" warning.

PHP:

* configure: Sanity check PHP_EXTENSION_DIR and PHP_INC.

* smoketest4.php,smoketest5.php: Check the exception message given by the
  DocNotFoundError testcase.

Python:

* Drop support for Python 2.1.

Xapian-bindings 0.9.7 (2006-10-10):

Documentation:

* NEWS: Fix the recent headings which said "Xapian-core" to say
  "Xapian-bindings".

General:

* Specify required automake version in the call to AM_INIT_AUTOMAKE in
  configure.ac.

* If we're building with GCC 4.0 or higher, pass -fvisibility=hidden when
  compiling SWIG generated code which makes the compiled modules a few percent
  smaller and perhaps a little faster.

* Wrap the newly implemented transaction API.

* configure: Use "-fno-strict-aliasing" when compiling all the SWIG bindings
  (this option was supposed to be used to compile the Python bindings from
  0.9.3 onwards, but this wasn't actually working correctly).

* Use CVS snapshot of SWIG to generate files (fixes bugs #83, #85).

* In maintainer-mode, "make clean" now removes the SWIG generated files
  which would otherwise only be removed on "make maintainer-clean".

CSharp:

* Xapian::MatchDecider can now be subclassed in C#.

* The value of OP_ELITE_SET was wrong in C# which caused an error if you tried
  to use it.  This has been fixed and a regression test added.

* SmokeTest.cs: Added exception handling test.

Java:

* Correct two misuses of delete to delete[].  Fixes bug#78.

* configure: We need to look for jni.h in /usr/lib/jvm/java-gcj/include on some
  Debian and Ubuntu boxes at least.

PHP:

* We now generate class wrappers for PHP5.

* We now generate proxy classes for PHP4, which is an incompatible change
  from previous versions of xapian-bindings.  A perl script to upgrade
  your scripts is included.

* smoketest.php:

  + Now that we're throwing PHP exceptions with PHP5 we need separate versions
    of the exception handling test for PHP4 and PHP5.  Fixes bug#76.

  + Rely on xapian.php to load the extension module for us.

  + Fix error messages to show PHP code, not Python code.

* When running smoketest.php, pass the "-q" option to php, which suppresses
  HTTP header output for PHP < 4.3 and is ignored for compatibility by more
  recent versions of PHP.

* configure: Fix typo - PHP_tried should be PHP_found.  This might have caused
  the PHP interpreter not to be found in some cases when it was actually
  available, but it's only used to run the smoketest not for building the
  bindings.

Python:

* configure: Fixed check for PYTHON_PATHSEP to use $PYTHON rather than python,
  and also report the check and its result to the user.

* python/Makefile.am: xapian.pyc can't be generated until _xapian.la has been
  built, so add an explicit dependency so that this works reliably in parallel
  builds.  Fixes bug#77.

* In examples and documentation, don't call the MatchDecider class/object
  "matcher", since we use the term "matcher" to mean something else in
  the library documentation.

* smoketest.py:

  + Add test of exception handling.

  + Add test that MatchDecider can be subclassed successfully.

* Wrap TermIterator::skip_to() so that it can be used from the TermIter
  pythonic iterator class.

Ruby:

* Xapian::MatchDecider can now be subclassed in Ruby.

* configure: Look for ruby interpreter as "ruby1.8" since it's called that
  (with no "ruby" alias) on Ubuntu dapper at least.

* simplesearch.rb: Lowercase terms before stemming.  "First ten" is inaccurate
  since we may have less than 10 matches, so say "1-<N>" instead.

* simplematchdecider.rb: Implemented.

Tcl:

* Implement saner exception handling for Tcl and document it.

* smoketest.tcl:

  + Add check that xapian::Query_OP_ELITE_SET has the right value.

  + Rework how the smoketest gets run to eliminate special code for using
    uninstalled bindings from smoketest.tcl itself.  This allows the smoketest
    to be run using installed bindings, and also makes it a better example
    program.

  + Add test for exception handling.

  + Send error messages to stderr.

  + Add comment about Tcl storing zero bytes as \xc0\x80.

* simpleindex.tcl,simplesearch.tcl: Print $errorCode in the exception handler.

* For SVN snapshots, remove any _svn6789 suffix from the Xapian version number
  used for the Tcl bindings.

Xapian-bindings 0.9.6 (2006-05-15):

Documentation:

* INSTALL: Add section describing how to install without root access.

General:

* Updated to reflect the renaming of Xapian::xapian_version_string and
  companions to Xapian::version_string.

* Wrap optional length parameter to Enquire::set_query().

* In PHP, Python, and Tcl bindings, rename get_document_id to get_docid for
  consistency.  Keep get_document_id as an alias for now for backward
  compatibility.

* Fixed ESet::empty() to return bool instead of Xapian::termcount (this was
  probably a largely harmless error).

* Stop SWIG from adding exception handling wrappers to the calls which return
  version strings, since they can't throw exceptions.

* xapian.i: Removed superfluous "const" from return type "docid" which is just
  a typedef for an unsigned integer type.

* configure: Add some missing "checking ..." messages so the user has more idea
  what is going on.

* Language specific util.i files can now define
  XAPIAN_TERMITERATOR_PAIR_OUTPUT_TYPEMAP and
  XAPIAN_MIXED_VECTOR_QUERY_INPUT_TYPEMAP to indicate which optional typemaps
  are provided for each language.  This avoids needing to keep this
  information in two different places.

* xapian.i: Uncomment commented-out parameter names and fix duplicate
  parameter names (for the benefit of bindings which use the parameter names,
  like the OO PHP5 patch for SWIG I'm working on...)

Portability:

* configure: Fix warning flags passed for Intel C++ compiler.

CSharp:

* We now support building with Portable.NET.

* Note that the passing of strings from C# into Xapian and back isn't currently
  zero byte safe.  If you try to handle string containing zero bytes, you'll
  find they get truncated at the zero byte.

* C# bindings now build and pass tests when srcdir != builddir.

* In configure.ac, the "#" in "C#" seems to sometimes confuse autoconf so
  always say "CSharp" instead.

* Not all machines are set up to run compiled C# programs when invoked
  directly, so get configure to check if we can, and otherwise see if using
  mono or ilrun works.  If not, just skip the C# tests.

* configure: If "mcs" isn't found, we now look for a CSharp compiler as "gmcs"
  (alternative name for "mcs"), "cscc" (Portable.NET), and then "csc"
  (Microsoft, but we check it isn't the unrelated Chicken csc program.)

* Move the C# specific %rename list to csharp/util.i.

* Store the strong name key in the key container so we reuse it for later
  builds.

* Wrap the version functions as more sensible names and document them (and
  continue to provide the older undocumented names for now just in case anyone
  was using them.)

* Set the version of XapianSharp.dll correctly when building a snapshot from
  SVN and set informational attributes (which e.g. MS Windows Explorer shows.)

* SmokeTest.cs: Add test of version functions.

Guile:

* The Guile bindings don't work and aren't being actively worked on, so we're
  no longer including them in the distributed tarball to avoid disappointing
  users who notice a "guile" subdirectory.  It also makes the download smaller.

Java:

* Simplify (and improve portability of) run-java-test by using "libtool
  --mode=execute"'s -dlopen option.

* Need to make sure "built" subdirectory exists or building from clean fails.

* Fix "make check" to work when srcdir != builddir.

PHP:

* Using "php -c myphp.ini" still loads the system php.ini (at least for PHP
  4.3.10), so use "php -n" and then set the options we specifically want using
  "-d".

* Fix the smoketest invocation to work better when srcdir != builddir.

* Look for PHP interpreter first in prefix given by "php-config --prefix".

* Fix SWIG_RuntimeError to be handled as an exception in PHP5.

* simplesearch.php: MAX_PROB_TERM_LENGTH isn't used here so remove it.

* smoketest.php:

  + Add test for version reporting functions

  + If a test fails, say which one to aid debugging.

  + Added simple test that zero-bytes are handled correctly when passing
    strings to and from Xapian.

Python:

* README: Note that Python bindings have been built with MSVC.

* Install xapian.py and xapian.pyc as _DATA not _SCRIPTS because we don't want
  to make them executable (they don't have a #! line).

* simplematchdecider.py: Rename confusingly-named "mymatcher" to
  "mymatchdecider".  Add description of what this example does.

* simpleexpand.py: Don't define MAX_PROB_TERM_LENGTH as it isn't used.

* smoketest.py: Added simple test that zero-bytes are handled when passing
  strings to and from Xapian.

Ruby:

* Added new Ruby bindings from Paul Legato.

Tcl:

* smoketest.tcl:

  + Add test for version reporting functions

  + If a test fails, say which one to aid debugging.

  + Added simple test that zero-bytes are handled correctly when passing
    strings to and from Xapian.

Xapian-bindings 0.9.5 (2006-04-08):

Documentation:

* HACKING,README: Split off HACKING to contain information which is only
  relevant to those wishing to modify the bindings.

General:

* SWIG-based bindings are now built with SWIG 1.3.29.

* configure: Report which languages we're building bindings for just before
  configure finishes.

* xapian.i: Make the stub definitions for disabled backends static.

* configure: Don't quote $PHP in AC_PATH_PROGS to avoid "checking for ... no"
  message.

* xapian.i: Wrap new method Enquire::set_sort_by_relevance_then_value().

Packaging:

* RPMs: xapian-bindings.spec.in: Use "%{_libdir}" instead of "/usr/lib" for
  Python bindings to support 64 bit systems.

* RPMs: Package the C# bindings.

Portability:

* java/run-java-test: Fix to work on platforms where LD_LIBRARY_PATH has a
  different name.

* configure: Detect Intel's C++ compiler and set suitable warning flags to
  avoid noise from compiling generated code.

CSharp:

* Rename Database::GetDoccount() to Database::GetDocCount() for consistency.

Guile:

* configure: Disable --with-guile since Guile support doesn't currently work.

Java:

* Override deprecation warnings for Xapian methods/functions/etc.

* SmokeTest.java: Write a helpful diagnostic to stderr if a check fails so we
  have some idea what went wrong!

* Rework how we include headers to get hash_map to avoid compiler warnings
  since it's usually not in the std namespace nowadays.

* Previously the "all" target also ran the "install" target, but this has
  proved very problematic, so change "make check" to use the uninstalled JNI
  glue library, and update the instructions to say that "make install" is now
  required.

* Use JAVA_PATHSEP when specifying the classpath for compiling .java files to
  .class files.

* README: Note that some platforms need "-pthread" or similar flags.

* Add a new Query constructor wrapper which take an OP_xxx and an array of
  Query objects.

* Compiling a .java file to a .class file now deletes the .jar file to ensure
  it gets updated.

PHP:

* php -n avoids reading any php.ini, but the compiled in default may be to
  enable the dubiously named "safe_mode" which prevents dl() being used so
  "make check" fails.  So instead provide a very simple php.ini which turns off
  safe_mode and makes sure enable_dl is on.

* Fix handling of bool parameters when resolving overloaded methods and/or
  default arguments.  This fixes Enquire_sort_by_value() to work when the
  second argument is specified.  Added regression test for this case.

* simpleindex.php: Lowercase terms before stemming.  Fixes bug#73.

* Fix segmentation fault when PHP "Null" is passed where C++ wants an object
  passed by reference.  Fixes bug#74.

* simpleindex.php: Flushing after every call to WritableDatabase_add_document
  isn't required and will kill performance, so stop doing it.  Fixes bug#75.

Python:

* Use the fairly new "swig -O" option for the "modern" python bindings as
  it generates a smaller glue library and runs faster.  Some of the features
  enabled also work on python 2.1, so enable these for the "olde" bindings.

* configure: Catch the case where the user has python installed but not the
  module "distutils.sysconfig" and explain that they probably need to install a
  python-dev or python-devel package.

* "make check" now works in VPATH builds.

* smoketest.py: If a check fails, write a diagnostic message to stderr so we
  know which check it was!

* smoketest.py: catch Exception objects and print them.

* smoketest.py: Add feature tests for the various pythonic iterator
  wrappers

* python/docs/bindings.html: Document the Pythonic iterators.

* Fix TermIter not to try to read termfreqs or positions if they aren't
  meaningful for the current TermIter.

Xapian-bindings 0.9.4 (2006-02-21):

Documentation:

* COPYING: Updated FSF address.

General:

* Wrap Stopper::get_description().

* Wrap xapian_version_string() and related functions.

Portability:

* If we're overriding MACOSX_DEPLOYMENT_TARGET then override it for commands
  run from "make" too.

PHP:

* Fix so that generated code compiles with ZTS-enabled PHP (which is the
  default on Windows).

Python:

* smoketest.py: Test wrapping of xapian_version_string() and related functions.

Xapian-bindings 0.9.3 (2006-02-16):

Documentation:

* README: Updated and expanded (now covers supported platforms, and lists
  criteria which bindings for an additional language need to fulfil before
  we're likely to accept them).

* INSTALL: Updated and improved.

* TODO: Move C#-specific TODO to top level so we can track to-do items for
  all languages.

General:

* configure: Change how the user selects which bindings to build.  If no
  --with* arguments are passed, then we default to building bindings we detect
  the required tools for (as before).  But instead of requiring the user to
  deselect all bindings they don't actually want, we now let them select the
  bindings they do want.  So "./configure --with-python" will only build the
  python bindings (and will fail if the required tools aren't installed).

* Every wrapped method contains exception handling code.  The bulk of this
  is now factored out into a single helper function, which cuts the compile
  time by around a factor of 3 and halves the size of the stripped library
  (figures are for Tcl on x86_64).

* configure: Rework how XAPIAN_CXXFLAGS is passed through so that the user can
  override CXXFLAGS in the make invocation like so: make CXXFLAGS=-g

* configure: Bump required SWIG version to 1.3.28 and drop the special
  requirement for 1.3.22 for PHP (hurrah!)  Note that you don't need
  SWIG to install the bindings - SWIG is run by the Xapian developers
  so these updated requirements are only relevant if you want to modify
  the bindings.

* Eliminate separate Makefile in each examples subdirectory, which makes the
  build system simpler, smaller, and a little faster.

* xapian.i: Include default constructors for all classes so that SWIG knows it
  doesn't have to use SwigValueWrapper for them, which makes the bindings code
  a bit smaller and faster.  Also stop SWIG using SwigValueWrapper for
  std::pair<...>.

* configure: Document special environmental variables which configure
  recognises.  Enhance handling of environmental variables so you can
  e.g. './configure PYTHON=python23' (previously you had to give a full
  path in such environmental variables or they would be ignored.

Packaging:

* RPM spec file:

  + Automatically detect the python version.

  + Rename "php4" references to "php".

  + Automatically detect the PHP extension directory.

  + Relax Tcl requirement to >= 8.1, since that's what we actually require.

  + Add support for "--without php" and --without tcl8" options to rpmbuild.

Portability:

* configure: On Mac OS X, ensure MACOSX_DEPLOYMENT_TARGET is set to at least
  10.3.  This is required to link the bindings, and it doesn't seem to be
  possible to link them on 10.1 or 10.2 anyway.

* configure: Add -lstdc++ to XAPIAN_LIBS if we're using GCC.  OpenBSD needs it
  to be explicitly specified and libtool correctly handles platforms where it
  would have been implicitly linked with anyway.

* Try to enable PHP bindings to build out of the box on cygwin (needs testing).

* configure: Add missing ";;" on the last alternative in some case statements.

* Only pass -no-undefined on platforms where it is required in order to link a
  shared library at all (it causes problems on Mac OS X in some cases).

CSharp:

* This release includes a lot of improvements for the C# bindings.  They're
  now pretty much on a par with the other language bindings.

* Added documentation and examples.

* Method and function names are now renamed to match C# conventions
  (e.g. from get_description() to GetDescription()).  This is obviously an
  incompatible change, but the C# bindings haven't been suitable for real world
  use prior to this release.

* Optional parameters are now wrapped so no longer need be specified
  explicitly.

* Overload ++ and -- for iterators.

* Overload == and != for iterators.  Now comparisons with the end iterator
  work as expected, and SmokeTest passes.

* SmokeTest now reports exceptions verbosely.

* Xapian::InMemory::open() is now wrapped as Xapian.InMemory.Open(), and
  similarly for other database factory functions.

* Heed compatibility warnings from mcs and use different forms for
  command-line switches to the C# compiler (presumably for compatibility with
  Microsoft's compiler, though the warnings don't actually say that
  explicitly).

Guile:

* Rewrote guile/util.i.  The old version caused SWIG warnings and wasn't
  zero-byte safe.  The guile bindings are still a long way from actually
  working though.

Java:

* Wrap optional second parameter (query length) to Enquire::set_query().

* configure now probes for the Java path separator, which we then use to
  separate entries in the java -classpath command line option so we can
  build on platforms where it isn't ":".

* SmokeTest.java: Expand to test more features.

* java/README:

  + Note that the bindings work with the Eclipse javac and GIJ 4.0.1.

  + Add note about how wrapped methods are named.

* Query.java: OP_* code 9 no longer exists, so add it to those rejected by the
  validity check.

* Query.java: Comment out unused code.

* Fixed memory leak in Query-from-array-of-strings constructor.

* Eliminate the "_errormap" hashmap - we don't need to use RTTI here, since
  Xapian::Error subclasses can tell you their typename directly (using
  get_type()).

PHP:

* Some problems with overloaded methods in PHP have been fixed by a major
  overhaul of SWIG's PHP support.  So we no longer rename such methods
  for PHP.  This is an incompatible change, but it's easy to update your
  PHP scripts (just change new_Query_from_term_pair -> new_Query, etc).

* Previously the documentation and simpleindex.php suggested that you
  should call delete_CLASS().  This was incorrect and resulted in a
  double-free() in some cases, so we've fixed the documentation and
  examples and eliminated the delete_CLASS() wrappers.  This is another
  incompatible change, but again easy to update for.

* We now support PHP5 as well as PHP4, so the configure test now looks
  for either and all references to "PHP4" or "php4" have been adjusted.

* PHP5 supports exceptions, so throw exceptions under PHP5.  For PHP4
  we now handle DocNotFoundError and FeatureUnavailableError by issuing a
  warning and making the method return "Null".  This isn't ideal, but it's
  the best we can easily do without proper exceptions.

* For the smoketest, instead of using "$(PHP) -c $(srcdir)" and having an
  empty php.ini in srcdir (which we were failing to distribute anyway), use
  "$(PHP) -n" which tells PHP not to use any php.ini file.

* Update PHP documentation to include new features.

* Redo Xapian section in phpinfo() to look more like most other modules.

* You can now construct a Query object from an array of strings or Query
  objects (or even a mixture).

* PHP examples now give a more useful error message if a database can't be
  opened.

* smoketest.php: Expanded the tests performed, including feature tests for
  the new Query-from-list constuctor.

* simplesearch.php: Use newly wrapped Query-from-list constructor.

* Use std::string::data() instead of c_str() as it may be more efficient for
  some STL implementations.

* Enquire::get_matching_terms() now generates the PHP list directly from the
  TermIterator rather than constructing a temporary C++ std::list, which is
  faster and requires less temporary memory.

Python:

* The Python constructor xapian.Query(OP, LIST_OF_STRINGS [, PARAM]) works
  once again (it has been broken since 0.9.0).  Added a regression test to
  help keep this working.

* Enhance the above constructor to accept any Python sequence (e.g. a tuple
  instead of a list).  Also the sequence can contain xapian.Query objects or
  strings or a mixture.  Documented these enhancements.

* smoketest.py: Expanded the tests performed.

* Convert C++ strings to python ones in a zero-byte clean way.

* Added more error checking of the results of calls into the python
  interpreter.

* If using GCC, compile the python bindings with -fno-strict-aliasing (python
  itself is compiled with this option to avoid problems and it appears we ought
  to use it too to avoid the risk of hitting the same problems, although I'm
  not aware of anyone actually encountering such problems).

* When making xapian.pyc, "import _xapian;" before we "import xapian;" to
  avoid creating a broken xapian.pyc is the shared library can't be loaded for
  some reason.

* Enquire::get_matching_terms() now generates the Python list directly from the
  TermIterator rather than constructing a temporary C++ std::list, which is
  faster and requires less temporary memory.

Tcl:

* Terms with a leading underscore now work (thanks to changes in SWIG).

* Implement custom typemaps for Tcl, so that you can now construct a Query from
  a list of Query objects and/or strings, and Enquire::get_matching_terms is
  now wrapped.

* simplesearch.tcl: Use the new Query from list constructor.

* simplesearch.tcl: Fix to lowercase and stem query terms.

* simpleindex.tcl: Tweak regex to not tokenise "foo--bar" as "foo-" and "bar".

* simpleindex.tcl,simplesearch.tcl: Need explicit "xapian::" on constants.

Xapian-bindings 0.9.2 (2005-07-15):

General:

* Added wrappers for new optional flags argument to QueryParser::parse_query().

CSharp:

* Enhance configure to check that "mcs" is actually GNU Mono mcs and not
  another tool with the same name.

Java:

* Include SmokeTest.java in the distribution so "make check" works.

* Added success report for Sun java 1.4.1_01a.

Python:

* When converting a python list to vector<string> we know the number of elements
  so reserve that number in the vector.

Xapian-bindings 0.9.1 (2005-06-06):

General:

* Releases are now created using libtool 1.5.18 and automake 1.9.5.

Tcl:

* Updated documentation to include information from Michael Schlenker about how
  to delete a database object such that the destructor gets called.

Xapian-bindings 0.9.0 (2005-05-13):

General:

* Updated SWIG-based bindings to latest Xapian API

* Improve support for building the bindings on MS Windows:

  + Provide stub versions of any backend functions which are disabled in the
    library we're wrapping to avoid a link failure on MS Windows (where the
    remote backend is automatically disabled).  These stubs just throw
    Xapian::FeatureUnavailableError.

  + Add -no-undefined to *_la_LDFLAGS.

  + Use $(PATH_SEPARATOR) or Python's os.pathsep instead of ':' where
    appropriate.

  + For python, paths for finding headers and installing libraries are now
    handled so they work on MS Windows; an extra static library needs to be
    linked in too.

* Wrap the Muscat36 Database factory functions (easy to do now we have stubs
  for disabled backends).

* Don't wrap MSet::max_size() as it's there for STL compatibility rather than
  being useful functionality.

* configure: Fix all SWIG warnings and pass -Werror to SWIG so any which get
  introduced in future get fixed.

* configure: Fix version test to allow for _svn6789 suffix which SVN snapshots
  have.

* Generate SWIG bindings with SWIG 1.3.24 (except for PHP which we still use
  1.3.22 for as more recent versions don't work with methods with optional
  arguments - the arguments become non-optional!)

Guile:

* configure: Disable guile by default, as it needs more work.

Java:

* Updated to compile against 0.9.0 API.

* Added missing make rule to build SmokeTestWrap.class to "make check" works.

* Wrap optional parameters to Query(term) constructor.

PHP4:

* For PHP4, rename default Database constructor to Database_empty
  instead of suppressing the much more useful Database(const string &path)
  constructor.

* Use a blank config file when running PHP4 tests to avoid problems
  when the bindings are already installed as an extension which is
  loaded automatically in the default config.

* configure.ac: If configure can't find the PHP interpreter (as php4 or php),
  it probably just means it's not in PATH.  We only need it for running tests,
  so substitute a trivial shell script which just exits with code 77 so PHP
  tests are skipped (previously we substituted "missing" which caused the tests
  to fail).

Python:

* Added Python-style iterators ESetIter, TermIter, PostingIter, PositionIter,
  and ValueIter.

* configure: If python is found, also check that Python.h exists (it may not be
  if the python-dev package (or similar) isn't installed).

Xapian-bindings 0.8.5.1 (2005-02-23):

General:

* configure: Run compiler feature tests using the C++ compiler, not the C
  compiler.

* Allow bindings version to have an extra "patchlevel", yet still match with
  corresponding xapian-core version (e.g. 0.8.5.1 and 0.8.5);

Java:

* Added a missing .java source file and removed several unused ones.

* Fixed several glitches in the java bindings automake build system.

* Use "-Wno-unused" when compiling JNI C++ code to ignore harmless
  warnings in generated code (we were carefully passing "-Wunused"
  which is the opposite of what is needed!)

* Fixed a couple of warnings from GCJ.

* Wrapped a few missing methods added since Eric created the bindings.  There
  are still some missing methods - there's now a (probably incomplete) list in
  java/README.

* Added various useful bits of information to java/README.

* Tweaked SimpleSearch.java to be more like the C++ version.

PHP4:

* 0.8.5 was generated with SWIG 1.3.24, but PHP support is broken there so
  we now generate the PHP bindings with SWIG 1.3.22 and everything else with
  a more recent version.

* configure: Check for "php" as a program name as well as "php4", and
  fall-back to missing so the error message from "make check" is better.

Xapian-bindings 0.8.5 (2004-12-23):

General:

* INSTALL: Added non-generic installation instructions.

Python:

* Fixed bytecode compilation of xapian.py.  xapian.pyc was being generated in
  the same directory as xapian.py, but Makefile.am was looking in current
  directory when installing it.  Additionally, VPATH builds were broken.
  These problems were introduced by changes in 0.8.4.

Xapian-bindings 0.8.4 (2004-12-08):

General:

* README: Now clearly says which languages we currently support, which people
  are working on, etc.

* Instead of requiring the user to have a really recent SWIG installed, ship
  the files SWIG generates.  Disable all the SWIG rules unless configure is run
  with --enable-maintainer-mode to make sure they aren't triggered accidentally
  (e.g. by make with dodgy VPATH).

* configure: Require SWIG 1.3.22 or higher (but note that SWIG is no longer
  needed if you just want to install the bindings).

* Wrap the new Database and WritableDatabase constructors which replace
  Auto::open().

* It turns out that we do need to wrap MSet::MSet() (wrapping removed in 0.8.2)
  (for example, simpleexpand.py needs it).

* In the Query constructor which takes a vector of terms, only call set_window
  if window is non-zero.  Otherwise things go wrong if we're passed an empty
  vector.

* Second argument to Document::add_posting() isn't optional, but xapian.i
  indicated that it was.

* xapian.i: Added wrappers for Xapian::Weight and standard subclasses.
  Deriving your own weight class in the scripting language isn't currently
  supported.

* xapian.i: %name is deprecated, so use %rename instead.  This also works
  around a bug in SWIG 1.3.23.

* configure: Removed pointless probe for a C compiler - everything we compile
  is C++.

* configure: Reinstated the check that the bindings version matches the version
  of the xapian library.  It was added in 0.8.2, but accidentally removed in
  0.8.3.

* Use newly added option `xapian-config --swigflags` which (a) avoids always
  passing -I/usr/include which could cause problems if we're using a Xapian
  install not in /usr and there's another one in /usr and (b) avoids problems
  if `xapian-config --cxxflags` contains flags other than -I<something>.

CSharp:

* Richard Boulton has put together bindings for C#.  These build successfully
  with the Mono tools, but the smoketest currently fails.  Unclear if the
  problem is the bindings or the smoketest code.

Guile:

* The guile bindings now build successfully, so we've enabled the guile
  detection machinery in configure.  They're untested though (we don't
  know guile!) so success or failure reports are encouraged!

PHP4:

* Mention the example scripts near the start of the documentation, not right at
  the end.

* Remove documentation explicitly saying how we wrap Xapian::QueryParser and
  Xapian::Stem since we wrap them exactly as we wrap everything else we don't
  mention!

Python:

* Make overloaded Query(Query::op, vector<string>*, termpos) constructor
  work in Python.

* Changed examples to use the newly wrapped Query from list of terms ctor.

* Mention the example scripts near the start of the documentation, not right at
  the end.

* python/Makefile.am: Added xapian_wrap.h as a target for the rule which runs
  SWIG.

* Remove documentation explicitly saying how we wrap Xapian::QueryParser and
  Xapian::Stem since we wrap them exactly as we wrap everything else we don't
  mention!

* Mention simpleexpand example in documentation.

* Examples now report messages for Xapian exceptions.

* Removed MAX_PROB_TERM_LENGTH from example scripts which don't use it.

* Make the example MatchDecider exclude documents matching a value, rather than
  a term.  The latter is a very inefficient way to do what AND_NOT does, and we
  don't want examples to mislead like that.

* python/docs/bindings.html: Note that you can construct a query
  from a list of terms, even if you can't from a list of queries.
  Add HTML links to the examples.

* simpleindex.py: Trim spaces from the start as well as from the end of each
  line.  Simplify the loop slightly.

Tcl:

* Wrap in a tcl8 namespace "Xapian".

* Added a smoketest.

* Translated simpleindex and simplesearch into Tcl.

* Set the Tcl package version.

* Create pkgIndex.tcl so the package can be loaded in the usual Tcl way.

* Install in "xapian<VERSION>" directory in the conventional Tcl way.

* Added documentation for tcl8 bindings.

* Use the TCL_STUBS mechanism so that compiled extensions are portable between
  different versions of Tcl.  This needs Tcl 8.1, so bump the required Tcl
  version (was 8.0).

* configure.ac: Noted that the bindings can easily be compiled for use with
  Tcl 8.0, in case anybody needs that for some reason.

* Don't wrap the factory functions which return a quartz WritableDatabase as
  the destructor never gets called so changes aren't flushed and the lock file
  isn't removed.

Xapian-bindings 0.8.3 (2004-09-20):

General:

* Fixed mismatching versions of libtool used to produce configure and
  ltmain.sh.  The obvious symptom was ".so" missing from the shared object
  names.

* RPM spec file contributed by Fabrice Colin.  Currently this packages Python,
  PHP4, and Tcl bindings.

Java:

* Pass -classpath to javac to fix build problems.

* Make sure errors subdirectory is built before we try to build the jar file.

* Fixed "make install" to not give libtool error.

PHP4:

* Include PHP4 documentation and exmples in the tarball.

* Reverted "Use special SWIG PHP ldflags when linking the PHP glue library."
  change from 0.8.2 - it turns out we only need to pass these flags if we use
  swig's -noruntime option (which we don't do).

Python:

* Use swig's -modern switch for Python 2.2 and up - it gives cleaner, leaner,
  faster Python wrapper code.

Tcl:

* Don't install xapian.la.

* Improved configure check for tcl.h to work with Fedora Core 2.

Xapian-bindings 0.8.2 (2004-09-13):

General:

* Added wrappers for recently added methods: ESet::back() and
  Database::get_lastdocid(), and wrap the new optional third parameter
  to Enquire::set_sorting().

* No longer wrap MSet::MSet() - it's not of use in scripting languages.

* Wrap operator-- as prev() for MSetIterator and ESetIterator.

* Wrap Quartz, InMemory, and Remote database factory functions as
  quartz_open(), inmemory_open(), and remote_open().

* Added missing wrappers for static Stem::get_available_languages() and
  Stem::get_description().

* Wrap renamed method Query::empty() (was Query::is_empty()).

* Remove renaming of other empty() methods to is_empty() (but keep is_empty()
  as an alias for now).

* Require autoconf 2.59 and automake 1.8.5.

* configure: Added check that the bindings version matches the version of
  the xapian library.

* configure: Check if we're using GCC and only pass GCC specific warning
  control options if we are.

* configure: When running with GCC, also pass -Wno-uninitialized so the
  SWIG glue builds without warnings.

* README: Updated list of languages which SWIG supports.

PHP4:

* Document that the 2 argument form of Xapian::Auto::open() for opening a
  writable database is wrapped as open_writable() (bug #32).

* Include Xapian version in output from phpinfo().

* Build the SWIG glue library like we build the others rather than using
  SWIG's -phpfull option.  This avoids problems with newer automake versions
  and means we can build against an uninstalled xapian library.

* Corrected documentation to refer to Xapian::DB_* not Xapian::Auto::DB_*.
  Fixed documentation of how Xapian::Query::OP_* are wrapped.

* Use special SWIG PHP ldflags when linking the PHP glue library.

* simplesearch.py now works with multi-term queries.

* Added documentation on how to install the PHP4 bindings.

* Added a simple testcase to at least ensure the PHP4 bindings can be
  initialised and some simple operations work.

Python:

* configure: Now checks for Python >= 2.1 which we need for __cmp__ and __eq__.

* Don't install _xapian.la and _xapian.a.

* Byte compile xapian.py to xapian.pyc and install it.

* Suppress SWIG warning about MatchDecider::operator() director discarding
  const.

* "make clean" no longer leaves "xapian_wrap.h" behind.

* Added a simple testcase to at least ensure the python bindings can be
  initialised and some simple operations work.

Tcl8:

* configure: Disable building tcl8 bindings if the headers are missing
  (probably because the tcl8.X-dev package isn't installed).

Xapian-bindings 0.8.1 (2004-06-30):

General:

* configure: Require SWIG 1.3.20 or higher (previously was 1.3.14).

* Add "-I/usr/include" to the swig line.  This is needed when xapian is
  installed with a prefix of /usr, since "xapian-config --cxxflags" carefully
  doesn't emit -I/usr/include in this situation (because it causes problems
  with some GCC versions).

* Fixed the %exception handler to cover all the exceptions Xapian can throw,
  not just a subset.

Java:

* Removed wrappers for unused error classes which have been pruned from C++.

* Make finalize() methods of Database and WritableDatabase public so they can
  be called from by the user.

* Document Document.add_term_nopos() as deprecated.

PHP4:

* Make sure that PHP bindings build a module which exports get_module() so PHP
  is able to load it.

* Configure now checks that phpize can actually be run, rather than just that
  it's executable (test -x isn't portable anyhow).

* Added basic documentation and examples to PHP4 bindings.

* Rename overloaded methods and constructors.

* Add simple access to the prefixes map in QueryParser.

* Correct simpleindex ports to never generate empty termnames.

Python:

* configure: Use $PYTHON instead of python when running python to determine
  library and include paths and version number.

* Actually ship python examples and documentation.

Xapian-bindings 0.8.0 (2004-04-20):

* README: Started collecting information on supporting Xapian from even
  more languages.

* Added configure tests to enable bindings only where the necessary tools
  are installed and have a supported version.  ./configure --without-LANGUAGE
  allows particular languages to be forcibly disabled.

* Added Xapian::Document::add_term() - the new name for add_term_nopos().

* A couple of Xapian::Query constructors weren't being wrapped - fixed.

* Added Eric B. Ridge's JNI bindings for Java.  The JNI bindings themselves
  have been well tested, but integration with the xapian-bindings configure
  system hasn't been tested at all - please alert us to any problems.

* Xapian can now be used from TCL.

* Python: MSet now provides a Python iterator.

* Python: OMMSET_* and OMESET_* renamed to MSET_* and ESET_*.

* Python: enable directors for MatchDecider, to allow subclassing in Python.

* Python: Added basic documentation, and some examples.
