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 8b0efa2..ba70329 100644 --- a/README.txt +++ b/README.txt @@ -90,11 +90,37 @@ 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/ should be added to your compiler include path. jsoncpp headers +should be included as follow: + #include 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..13de15c 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 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/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