diff --git a/NEWS.txt b/NEWS.txt index 3f75156..7978c0a 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -13,6 +13,10 @@ Notes: you need to setup the environment by running vcvars32.bat (e.g. MSVC 2008 command prompt in start menu) before running scons. + - Added support for amalgated source and header generation (a la sqlite). + Refer to README.txt section "Generating amalgated source and header" + for detail. + * Value - Removed experimental ValueAllocator, it caused static diff --git a/README.txt b/README.txt index 2dcbd8b..ba70329 100644 --- a/README.txt +++ b/README.txt @@ -5,8 +5,8 @@ JSON (JavaScript Object Notation) is a lightweight data-interchange format. It can represent integer, real number, string, an ordered sequence of value, and a collection of name/value pairs. -JsonCpp is a simple API to manipulate JSON value, handle serialization -and unserialization to string. +JsonCpp (http://jsoncpp.sourceforge.net/) is a simple API to manipulate +JSON value, handle serialization and unserialization to string. It can also preserve existing comment in unserialization/serialization steps, making it a convenient format to store user input files. @@ -90,6 +90,39 @@ Notes that the documentation is also available for download as a tarball. The documentation of the latest release is available online at: http://jsoncpp.sourceforge.net/ +* Generating amalgated source and header + ====================================== + +JsonCpp is provided with a script to generate a single header and a single +source file to ease inclusion in an existing project. + +The amalgated source can be generated at any time by running the following +command from the top-directory (requires python 2.6): + +python amalgate.py + +It is possible to specify header name. See -h options for detail. By default, +the following files are generated: +- dist/jsoncpp.cpp: source file that need to be added to your project +- dist/json/json.h: header file corresponding to use in your project. It is +equivalent to including json/json.h in non-amalgated source. This header +only depends on standard headers. +- dist/json/json-forwards.h: header the provides forward declaration +of all JsonCpp types. This typically what should be included in headers to +speed-up compilation. + +The amalgated sources are generated by concatenating JsonCpp source in the +correct order and defining macro JSON_IS_AMALGATED to prevent inclusion of +other headers. + +* Using json-cpp in your project: + =============================== + +include/ should be added to your compiler include path. jsoncpp headers +should be included as follow: + +#include + * Adding a reader/writer test: ============================ diff --git a/doc/roadmap.dox b/doc/roadmap.dox index 1ec0ab6..c7f14d5 100644 --- a/doc/roadmap.dox +++ b/doc/roadmap.dox @@ -1,14 +1,4 @@ /*! \page roadmap JsonCpp roadmap - \section ms_64bits Adds support for 64 bits integer - There has been many request to add support for 64 bits integer. Use case for this are: - - time is nowdays commonly represented with a 64 bits integer - - 64 bits integer are frequently used as primary key id in many systems - - Plans to add support is: - - must be optional, a configuration option since not all platforms provides 64 bits integer types. - - move definition of Int and UInt from forwards.h to config.h, with the required platform magic. - - C++ defines no standard to define 64 bits integer. Rely on msvc extension, and long long type that - is widely supported. \section ms_release Makes JsonCpp ready for release - Build system clean-up: - Fix build on Windows (shared-library build is broken) @@ -34,7 +24,7 @@ Some typical use-case involve an application specific structure to/from a JSON document. - Event base parser to allow unserializing a Json document directly in datastructure instead of using the intermediate Json::Value. - - "Stream" based parser to serialized a Json document without using Json::Value as input. + - Stream based parser to serialized a Json document without using Json::Value as input. - Performance oriented parser/writer: - Provides an event based parser. Should allow pulling & skipping events for ease of use. - Provides a JSON document builder: fast only. diff --git a/include/json/config.h b/include/json/config.h index 6344729..24991d5 100644 --- a/include/json/config.h +++ b/include/json/config.h @@ -28,6 +28,12 @@ /// instead of C assert macro. # define JSON_USE_EXCEPTION 1 +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +/// Remarks: it is automatically defined in the generated amalgated header. +// #define JSON_IS_AMALGATED + + # ifdef JSON_IN_CPPTL # include # ifndef JSON_USE_CPPTL diff --git a/include/json/features.h b/include/json/features.h index fd8e350..0b53db1 100644 --- a/include/json/features.h +++ b/include/json/features.h @@ -6,7 +6,9 @@ #ifndef CPPTL_JSON_FEATURES_H_INCLUDED # define CPPTL_JSON_FEATURES_H_INCLUDED +#if !defined(JSON_IS_AMALGATED) # include "forwards.h" +#endif // if !defined(JSON_IS_AMALGATED) namespace Json { diff --git a/include/json/forwards.h b/include/json/forwards.h index dd32fa0..083d44f 100644 --- a/include/json/forwards.h +++ b/include/json/forwards.h @@ -6,7 +6,9 @@ #ifndef JSON_FORWARDS_H_INCLUDED # define JSON_FORWARDS_H_INCLUDED +#if !defined(JSON_IS_AMALGATED) # include "config.h" +#endif // if !defined(JSON_IS_AMALGATED) namespace Json { diff --git a/include/json/reader.h b/include/json/reader.h index 2cd94eb..5e4c32a 100644 --- a/include/json/reader.h +++ b/include/json/reader.h @@ -6,8 +6,10 @@ #ifndef CPPTL_JSON_READER_H_INCLUDED # define CPPTL_JSON_READER_H_INCLUDED +#if !defined(JSON_IS_AMALGATED) # include "features.h" # include "value.h" +#endif // if !defined(JSON_IS_AMALGATED) # include # include # include @@ -49,7 +51,9 @@ namespace Json { bool collectComments = true ); /** \brief Read a Value from a JSON document. - * \param document UTF-8 encoded string containing the document to read. + * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string of the document to read. + \ Must be >= beginDoc. * \param root [out] Contains the root value of the document if it was * successfully parsed. * \param collectComments \c true to collect comment and allow writing them back during diff --git a/include/json/value.h b/include/json/value.h index 14464e4..66821ab 100644 --- a/include/json/value.h +++ b/include/json/value.h @@ -6,7 +6,9 @@ #ifndef CPPTL_JSON_H_INCLUDED # define CPPTL_JSON_H_INCLUDED +#if !defined(JSON_IS_AMALGATED) # include "forwards.h" +#endif // if !defined(JSON_IS_AMALGATED) # include # include diff --git a/include/json/writer.h b/include/json/writer.h index 2ee13de..cb0bd9b 100644 --- a/include/json/writer.h +++ b/include/json/writer.h @@ -6,7 +6,9 @@ #ifndef JSON_WRITER_H_INCLUDED # define JSON_WRITER_H_INCLUDED +#if !defined(JSON_IS_AMALGATED) # include "value.h" +#endif // if !defined(JSON_IS_AMALGATED) # include # include # include diff --git a/makerelease.py b/makerelease.py index 9b59180..a6e330e 100644 --- a/makerelease.py +++ b/makerelease.py @@ -6,7 +6,7 @@ Example of invocation (use to test the script): python makerelease.py --platform=msvc6,msvc71,msvc80,msvc90,mingw -ublep 0.6.0 0.7.0-dev When testing this script: -python makerelease.py --force --retag --platform=msvc6,msvc71,msvc80,mingw -ublep test-0.5.0 test-0.6.0-dev +python makerelease.py --force --retag --platform=msvc6,msvc71,msvc80,mingw -ublep test-0.6.0 test-0.6.1-dev Example of invocation when doing a release: python makerelease.py 0.5.0 0.6.0-dev @@ -23,6 +23,7 @@ import tempfile import os import time from devtools import antglob, fixeol, tarball +import amalgate SVN_ROOT = 'https://jsoncpp.svn.sourceforge.net/svnroot/jsoncpp/' SVN_TAG_ROOT = SVN_ROOT + 'tags/jsoncpp' @@ -322,6 +323,14 @@ Warning: --force should only be used when developping/testing the release script print 'Generating source tarball to', source_tarball_path tarball.make_tarball( source_tarball_path, [export_dir], export_dir, prefix_dir=source_dir ) + amalgated_tarball_path = 'dist/%s-amalgated.tar.gz' % source_dir + print 'Generating amalgated source tarball to', amalgated_tarball_path + amalgated_dir = 'dist/amalgated' + amalgate.amalgate_source( export_dir, '%s/jsoncpp.cpp' % amalgated_dir, 'json/json.h' ) + amalgated_source_dir = 'jsoncpp-src-amalgated' + release_version + tarball.make_tarball( amalgated_tarball_path, [amalgated_dir], + amalgated_dir, prefix_dir=amalgated_source_dir ) + # Decompress source tarball, download and install scons-local distcheck_dir = 'dist/distcheck' distcheck_top_dir = distcheck_dir + '/' + source_dir diff --git a/src/lib_json/json_internalarray.inl b/src/lib_json/json_internalarray.inl index 66d838e..3a532ad 100644 --- a/src/lib_json/json_internalarray.inl +++ b/src/lib_json/json_internalarray.inl @@ -4,7 +4,8 @@ // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE // included by json_value.cpp -// everything is within Json namespace + +namespace Json { // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// @@ -451,3 +452,5 @@ ValueInternalArray::compare( const ValueInternalArray &other ) const } return 0; } + +} // namespace Json diff --git a/src/lib_json/json_internalmap.inl b/src/lib_json/json_internalmap.inl index d0dd62a..f2fa160 100644 --- a/src/lib_json/json_internalmap.inl +++ b/src/lib_json/json_internalmap.inl @@ -4,7 +4,8 @@ // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE // included by json_value.cpp -// everything is within Json namespace + +namespace Json { // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// @@ -610,3 +611,5 @@ ValueInternalMap::distance( const IteratorState &x, const IteratorState &y ) increment( it ); return offset; } + +} // namespace Json diff --git a/src/lib_json/json_reader.cpp b/src/lib_json/json_reader.cpp index 0d59c46..7c594e2 100644 --- a/src/lib_json/json_reader.cpp +++ b/src/lib_json/json_reader.cpp @@ -3,9 +3,11 @@ // recognized in your jurisdiction. // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE -#include -#include -#include "json_tool.h" +#if !defined(JSON_IS_AMALGATED) +# include +# include +# include "json_tool.h" +#endif // if !defined(JSON_IS_AMALGATED) #include #include #include diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp index ce1dec3..c810417 100644 --- a/src/lib_json/json_value.cpp +++ b/src/lib_json/json_value.cpp @@ -3,9 +3,14 @@ // recognized in your jurisdiction. // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE +#if !defined(JSON_IS_AMALGATED) +# include +# include +# ifndef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR +# include "json_batchallocator.h" +# endif // #ifndef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR +#endif // if !defined(JSON_IS_AMALGATED) #include -#include -#include #include #include #include @@ -14,9 +19,6 @@ # include #endif #include // size_t -#ifndef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR -# include "json_batchallocator.h" -#endif // #ifndef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR #define JSON_ASSERT_UNREACHABLE assert( false ) #define JSON_ASSERT( condition ) assert( condition ); // @todo <= change this into an exception throw @@ -70,6 +72,7 @@ releaseStringValue( char *value ) free( value ); } +} // namespace Json // ////////////////////////////////////////////////////////////////// @@ -79,13 +82,16 @@ releaseStringValue( char *value ) // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// -#ifdef JSON_VALUE_USE_INTERNAL_MAP -# include "json_internalarray.inl" -# include "json_internalmap.inl" -#endif // JSON_VALUE_USE_INTERNAL_MAP +#if !defined(JSON_IS_AMALGATED) +# ifdef JSON_VALUE_USE_INTERNAL_MAP +# include "json_internalarray.inl" +# include "json_internalmap.inl" +# endif // JSON_VALUE_USE_INTERNAL_MAP # include "json_valueiterator.inl" +#endif // if !defined(JSON_IS_AMALGATED) +namespace Json { // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// diff --git a/src/lib_json/json_valueiterator.inl b/src/lib_json/json_valueiterator.inl index bd7c8d2..7457ca3 100644 --- a/src/lib_json/json_valueiterator.inl +++ b/src/lib_json/json_valueiterator.inl @@ -4,8 +4,8 @@ // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE // included by json_value.cpp -// everything is within Json namespace +namespace Json { // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// @@ -295,3 +295,5 @@ ValueIterator::operator =( const SelfType &other ) copy( other ); return *this; } + +} // namespace Json diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp index f101cbc..8c4c180 100644 --- a/src/lib_json/json_writer.cpp +++ b/src/lib_json/json_writer.cpp @@ -3,8 +3,10 @@ // recognized in your jurisdiction. // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE -#include -#include "json_tool.h" +#if !defined(JSON_IS_AMALGATED) +# include +# include "json_tool.h" +#endif // if !defined(JSON_IS_AMALGATED) #include #include #include diff --git a/version b/version index 7defe1e..8d1042e 100644 --- a/version +++ b/version @@ -1 +1 @@ -0.6.0-dev \ No newline at end of file +0.6.0-rc1 \ No newline at end of file