Fost 4 release now out

Created 25th March, 2011 04:47 (UTC), last edited 25th March, 2011 04:58 (UTC)

Over the last few days we've been tagging the release of Fost 4. There are a number of significant changes and updates this time:

  • A new asynchronous logging library.
  • Wrappers for boost::spirit::parse which grab a lock on a mutex, sidestepping the threading problem in the Spirit library.
  • A large number of small changes in various internet protocol handlers and utility classes and functions.

The biggest problem that we have at the moment is supporting all of the Boost version. The problem isn't the libraries themselves, but the Boost build system. At the moment Fost 4 support Boost versions back to 1.38 on most platforms and back even earlier on some. The problem that we have is keeping the build system working with all of these versions of Boost build, not to mention odd versions that are packaged.

Our plan for the next release is to pick a stable version of Boost build and to use that for building Fost (but not the Boost versions). This will give us a single stable build system to work on which means that we will be able to get predictable handling of build paths and tools like Doxygen.

The next version is due out in June 2011.

Linux & Mac
svn co fost-hello
cd fost-hello

On the Mac you will need to set DYLD_LIBRARY_PATH before running hello-world-d

export DYLD_LIBRARY_PATH=dist/lib
svn co fost-hello
cd fost-hello
Boost\build hello\compile

Download locations

Everything is available through our Subversion repository. Below are the locations for the tagged releases for Fost components.

Detailed change log

  • Updated the build system so that there is a new fost-integration-test target that will create a test executable that can be run at any later stage as well as run the tests during the build process.
  • The jcursor constructor can now take up to four arguments and build a cursor path from them.
  • JSON to JSON coercions are now supported and logging now accepts any parameter type which is coercable to JSON.
  • Added a new basic logging library.
  • The build system now supports installation based on the location set in the PREFIX envrionment variable. If the path is relative then it is relative to the location of the Jamroot file that is being built.
  • Added a wrapper function for boost::spirit::parse which grabs a mutex forcing serialisation of the use of the parser to get around a threading bug in Spirit.
  • Catching of incorrect exceptions in tests now shows the full text of the caught exception.
  • Improved the display of exceptions by forcing them to use printOn.
  • fostlib::string instances are now constructible from a wider range of iterators, including fostlib::string::const_iterator.
  • Implemented a more full version of the email address parser so it can handle names as well as well as email addresses.
  • Fixed a bug that was causing the protocol to be lost when a relative URL was being generated.
  • The URL parser now supports (at least some) custom query string formats. Also added in limited %XX decoding in the query string values.
  • Added a very simple HTTP PUT based log sink for shipping logs to another machine.
  • URLs are now usable directly as keys in STL containers as std::less is supported.
  • FOST authentication for the server version of requests is now supported.
  • fostlib::email_address instances can now be coerced from their JSON representation.
  • A new attach member on fostlib::mime_envelope allows for easier addition of mime types into the envelope.
  • The MIME type for MIME envelopes can now be set and the iterator for the data is now implemented.
  • The SMTP client now tracks its state and doesn't try to close the connection if it's not in a proper idle state.
  • Errors connecting to sockets are now reported as instances of fostlib::exceptions::connect_failure. Socket errors are now all sub-classes of fostlib::exceptions::socket_error. Reads now also time out and throw a fostlib::exceptions::read_timout exception. The configuration setting
    [Network settings]
    Read time out=30
    sets the number of seconds that the read time out value should have.
  • We now support push_back into the JSON data from the local transaction in the JSON database.