diff --git a/.gitignore b/.gitignore index 7420697..91121c2 100644 --- a/.gitignore +++ b/.gitignore @@ -10,8 +10,6 @@ /libs/ /doc/doxyfile /dist/ -#/version -#/include/json/version.h # MSVC project files: *.sln diff --git a/CMakeLists.txt b/CMakeLists.txt index 381d08b..b4eb830 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,11 +63,18 @@ if(NOT DEFINED CMAKE_BUILD_TYPE) endif() project(JSONCPP - VERSION 1.9.0 # [.[.[.]]] + # Note: version must be updated in three places when doing a release. This + # annoying process ensures that amalgamate, CMake, and meson all report the + # correct version. + # 1. /meson.build + # 2. /include/json/version.h + # 3. /CMakeLists.txt + # IMPORTANT: also update the SOVERSION!! + VERSION 1.9.2 # [.[.[.]]] LANGUAGES CXX) message(STATUS "JsonCpp Version: ${JSONCPP_VERSION_MAJOR}.${JSONCPP_VERSION_MINOR}.${JSONCPP_VERSION_PATCH}") -set( JSONCPP_SOVERSION 21 ) +set( JSONCPP_SOVERSION 22 ) option(JSONCPP_WITH_TESTS "Compile and (for jsoncpp_check) run JsonCpp test executables" ON) option(JSONCPP_WITH_POST_BUILD_UNITTEST "Automatically run unit-tests as a post build step" ON) @@ -89,10 +96,6 @@ set(DEBUG_LIBNAME_SUFFIX "" CACHE STRING "Optional suffix to append to the libra set(JSONCPP_USE_SECURE_MEMORY "0" CACHE STRING "-D...=1 to use memory-wiping allocator for STL" ) -# File version.h is only regenerated on CMake configure step -configure_file( "${PROJECT_SOURCE_DIR}/src/lib_json/version.h.in" - "${PROJECT_BINARY_DIR}/include/json/version.h" - NEWLINE_STYLE UNIX ) configure_file( "${PROJECT_SOURCE_DIR}/version.in" "${PROJECT_BINARY_DIR}/version" NEWLINE_STYLE UNIX ) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b7e4ab7..3e14b2b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,7 +26,6 @@ Then, LIB_TYPE=shared #LIB_TYPE=static meson --buildtype ${BUILD_TYPE} --default-library ${LIB_TYPE} . build-${LIB_TYPE} - #ninja -v -C build-${LIB_TYPE} test # This stopped working on my Mac. ninja -v -C build-${LIB_TYPE} cd build-${LIB_TYPE} meson test --no-rebuild --print-errorlogs diff --git a/amalgamate.py b/amalgamate.py old mode 100644 new mode 100755 index c12215a..7b41e2e --- a/amalgamate.py +++ b/amalgamate.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python + """Amalgamate json-cpp library sources into a single source and header file. Works with python2.6+ and python3.4+. @@ -9,6 +11,9 @@ import os import os.path import sys +INCLUDE_PATH = "include/json" +SRC_PATH = "src/lib_json" + class AmalgamationFile: def __init__(self, top_dir): self.top_dir = top_dir @@ -66,15 +71,15 @@ def amalgamate_source(source_top_dir=None, header.add_text("/// If defined, indicates that the source file is amalgamated") header.add_text("/// to prevent private header inclusion.") header.add_text("#define JSON_IS_AMALGAMATION") - header.add_file("include/json/version.h") - header.add_file("include/json/allocator.h") - header.add_file("include/json/config.h") - header.add_file("include/json/forwards.h") - header.add_file("include/json/features.h") - header.add_file("include/json/value.h") - header.add_file("include/json/reader.h") - header.add_file("include/json/writer.h") - header.add_file("include/json/assertions.h") + header.add_file(os.path.join(INCLUDE_PATH, "version.h")) + header.add_file(os.path.join(INCLUDE_PATH, "allocator.h")) + header.add_file(os.path.join(INCLUDE_PATH, "config.h")) + header.add_file(os.path.join(INCLUDE_PATH, "forwards.h")) + header.add_file(os.path.join(INCLUDE_PATH, "features.h")) + header.add_file(os.path.join(INCLUDE_PATH, "value.h")) + header.add_file(os.path.join(INCLUDE_PATH, "reader.h")) + header.add_file(os.path.join(INCLUDE_PATH, "writer.h")) + header.add_file(os.path.join(INCLUDE_PATH, "assertions.h")) header.add_text("#endif //ifndef JSON_AMALGAMATED_H_INCLUDED") target_header_path = os.path.join(os.path.dirname(target_source_path), header_include_path) @@ -94,8 +99,8 @@ def amalgamate_source(source_top_dir=None, header.add_text("/// If defined, indicates that the source file is amalgamated") header.add_text("/// to prevent private header inclusion.") header.add_text("#define JSON_IS_AMALGAMATION") - header.add_file("include/json/config.h") - header.add_file("include/json/forwards.h") + header.add_file(os.path.join(INCLUDE_PATH, "config.h")) + header.add_file(os.path.join(INCLUDE_PATH, "forwards.h")) header.add_text("#endif //ifndef JSON_FORWARD_AMALGAMATED_H_INCLUDED") target_forward_header_path = os.path.join(os.path.dirname(target_source_path), @@ -116,12 +121,11 @@ def amalgamate_source(source_top_dir=None, #endif """) source.add_text("") - lib_json = "src/lib_json" - source.add_file(os.path.join(lib_json, "json_tool.h")) - source.add_file(os.path.join(lib_json, "json_reader.cpp")) - source.add_file(os.path.join(lib_json, "json_valueiterator.inl")) - source.add_file(os.path.join(lib_json, "json_value.cpp")) - source.add_file(os.path.join(lib_json, "json_writer.cpp")) + source.add_file(os.path.join(SRC_PATH, "json_tool.h")) + source.add_file(os.path.join(SRC_PATH, "json_reader.cpp")) + source.add_file(os.path.join(SRC_PATH, "json_valueiterator.inl")) + source.add_file(os.path.join(SRC_PATH, "json_value.cpp")) + source.add_file(os.path.join(SRC_PATH, "json_writer.cpp")) print("Writing amalgamated source to %r" % target_source_path) source.write_to(target_source_path) diff --git a/doc/jsoncpp.dox b/doc/jsoncpp.dox index 47efc8a..f340591 100644 --- a/doc/jsoncpp.dox +++ b/doc/jsoncpp.dox @@ -3,7 +3,7 @@ \section _intro Introduction JSON (JavaScript Object Notation) - is a lightweight data-interchange format. + is a lightweight data-interchange format. Here is an example of JSON data: \verbatim @@ -23,14 +23,14 @@ Here is an example of JSON data: { // Default encoding for text "encoding" : "UTF-8", - + // Plug-ins loaded at start-up "plug-ins" : [ "python", "c++", // trailing comment "ruby" ], - + // Tab indent size // (multi-line comment) "indent" : { /*embedded comment*/ "length" : 3, "use_space": true } @@ -67,7 +67,7 @@ const Json::Value plugins = root["plug-ins"]; // Iterate over the sequence elements. for ( int index = 0; index < plugins.size(); ++index ) loadPlugIn( plugins[index].asString() ); - + // Try other datatypes. Some are auto-convertible to others. foo::setIndentLength( root["indent"].get("length", 3).asInt() ); foo::setIndentUseSpace( root["indent"].get("use_space", true).asBool() ); @@ -124,7 +124,7 @@ reader->parse(start, stop, &value2, &errs); \endcode \section _pbuild Build instructions -The build instructions are located in the file +The build instructions are located in the file README.md in the top-directory of the project. The latest version of the source is available in the project's GitHub repository: @@ -132,7 +132,7 @@ The latest version of the source is available in the project's GitHub repository jsoncpp \section _news What's New? -The description of latest changes can be found in +The description of latest changes can be found in the NEWS wiki . @@ -152,7 +152,7 @@ The description of latest changes can be found in \section _license License See file LICENSE in the top-directory of the project. -Basically JsonCpp is licensed under MIT license, or public domain if desired +Basically JsonCpp is licensed under MIT license, or public domain if desired and recognized in your jurisdiction. \author Baptiste Lepilleur (originator) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index facfab1..dc40d95 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,6 +1,5 @@ file(GLOB INCLUDE_FILES "json/*.h") install(FILES ${INCLUDE_FILES} - ${PROJECT_BINARY_DIR}/include/json/version.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/json) diff --git a/include/json/reader.h b/include/json/reader.h index f8158cf..adbe299 100644 --- a/include/json/reader.h +++ b/include/json/reader.h @@ -378,7 +378,7 @@ bool JSON_API parseFromStream(CharReader::Factory const&, /** \brief Read from 'sin' into 'root'. * * Always keep comments from the input JSON. - * + * * This can be used to read a file into a particular sub-object. * For example: * \code diff --git a/include/json/version.h b/include/json/version.h new file mode 100644 index 0000000..ff94372 --- /dev/null +++ b/include/json/version.h @@ -0,0 +1,28 @@ +#ifndef JSON_VERSION_H_INCLUDED +#define JSON_VERSION_H_INCLUDED + +// Note: version must be updated in three places when doing a release. This +// annoying process ensures that amalgamate, CMake, and meson all report the +// correct version. +// 1. /meson.build +// 2. /include/json/version.h +// 3. /CMakeLists.txt +// IMPORTANT: also update the SOVERSION!! + +#define JSONCPP_VERSION_STRING "1.9.2" +#define JSONCPP_VERSION_MAJOR 1 +#define JSONCPP_VERSION_MINOR 9 +#define JSONCPP_VERSION_PATCH 2 +#define JSONCPP_VERSION_QUALIFIER +#define JSONCPP_VERSION_HEXA \ + ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | \ + (JSONCPP_VERSION_PATCH << 8)) + +#ifdef JSONCPP_USING_SECURE_MEMORY +#undef JSONCPP_USING_SECURE_MEMORY +#endif +#define JSONCPP_USING_SECURE_MEMORY 0 +// If non-zero, the library zeroes any memory that it has allocated before +// it frees its memory. + +#endif // JSON_VERSION_H_INCLUDED diff --git a/meson.build b/meson.build index 8de947c..d1f4989 100644 --- a/meson.build +++ b/meson.build @@ -1,7 +1,15 @@ project( 'jsoncpp', 'cpp', - version : '1.9.0', + + # Note: version must be updated in three places when doing a release. This + # annoying process ensures that amalgamate, CMake, and meson all report the + # correct version. + # 1. /meson.build + # 2. /include/json/version.h + # 3. /CMakeLists.txt + # IMPORTANT: also update the SOVERSION!! + version : '1.9.2', default_options : [ 'buildtype=release', 'cpp_std=c++11', @@ -9,25 +17,6 @@ project( license : 'Public Domain', meson_version : '>= 0.50.0') -jsoncpp_ver_arr = meson.project_version().split('.') -jsoncpp_major_version = jsoncpp_ver_arr[0] -jsoncpp_minor_version = jsoncpp_ver_arr[1] -jsoncpp_patch_version = jsoncpp_ver_arr[2] - -jsoncpp_cdata = configuration_data() -jsoncpp_cdata.set('JSONCPP_VERSION', meson.project_version()) -jsoncpp_cdata.set('JSONCPP_VERSION_MAJOR', jsoncpp_major_version) -jsoncpp_cdata.set('JSONCPP_VERSION_MINOR', jsoncpp_minor_version) -jsoncpp_cdata.set('JSONCPP_VERSION_PATCH', jsoncpp_patch_version) -jsoncpp_cdata.set('JSONCPP_USE_SECURE_MEMORY',0) - -jsoncpp_gen_sources = configure_file( - input : 'src/lib_json/version.h.in', - output : 'version.h', - configuration : jsoncpp_cdata, - install : true, - install_dir : join_paths(get_option('prefix'), get_option('includedir'), 'json') -) jsoncpp_headers = [ 'include/json/allocator.h', @@ -39,6 +28,7 @@ jsoncpp_headers = [ 'include/json/json.h', 'include/json/reader.h', 'include/json/value.h', + 'include/json/version.h', 'include/json/writer.h'] jsoncpp_include_directories = include_directories('include') @@ -56,13 +46,12 @@ endif jsoncpp_lib = library( 'jsoncpp', - [ jsoncpp_gen_sources, - jsoncpp_headers, + [ jsoncpp_headers, 'src/lib_json/json_tool.h', 'src/lib_json/json_reader.cpp', 'src/lib_json/json_value.cpp', 'src/lib_json/json_writer.cpp'], - soversion : 21, + soversion : 22, install : true, include_directories : jsoncpp_include_directories, cpp_args: dll_export_flag) @@ -79,7 +68,7 @@ jsoncpp_dep = declare_dependency( include_directories : jsoncpp_include_directories, link_with : jsoncpp_lib, version : meson.project_version(), - sources : jsoncpp_gen_sources) + ) # tests python = import('python3').find_python() diff --git a/src/lib_json/CMakeLists.txt b/src/lib_json/CMakeLists.txt index 2392092..0fa2f59 100644 --- a/src/lib_json/CMakeLists.txt +++ b/src/lib_json/CMakeLists.txt @@ -45,9 +45,9 @@ set( PUBLIC_HEADERS ${JSONCPP_INCLUDE_DIR}/json/features.h ${JSONCPP_INCLUDE_DIR}/json/value.h ${JSONCPP_INCLUDE_DIR}/json/reader.h + ${JSONCPP_INCLUDE_DIR}/json/version.h ${JSONCPP_INCLUDE_DIR}/json/writer.h ${JSONCPP_INCLUDE_DIR}/json/assertions.h - ${PROJECT_BINARY_DIR}/include/json/version.h ) source_group( "Public API" FILES ${PUBLIC_HEADERS} ) @@ -57,8 +57,7 @@ set(jsoncpp_sources json_reader.cpp json_valueiterator.inl json_value.cpp - json_writer.cpp - version.h.in) + json_writer.cpp) # Install instructions for this target if(JSONCPP_WITH_CMAKE_PACKAGE) diff --git a/src/lib_json/version.h.in b/src/lib_json/version.h.in deleted file mode 100644 index 4cf439c..0000000 --- a/src/lib_json/version.h.in +++ /dev/null @@ -1,22 +0,0 @@ -// DO NOT EDIT. This file (and "version") is a template used by the build system -// (either CMake or Meson) to generate a "version.h" header file. -#ifndef JSON_VERSION_H_INCLUDED -#define JSON_VERSION_H_INCLUDED - -#define JSONCPP_VERSION_STRING "@JSONCPP_VERSION@" -#define JSONCPP_VERSION_MAJOR @JSONCPP_VERSION_MAJOR@ -#define JSONCPP_VERSION_MINOR @JSONCPP_VERSION_MINOR@ -#define JSONCPP_VERSION_PATCH @JSONCPP_VERSION_PATCH@ -#define JSONCPP_VERSION_QUALIFIER -#define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) \ - | (JSONCPP_VERSION_MINOR << 16) \ - | (JSONCPP_VERSION_PATCH << 8)) - -#ifdef JSONCPP_USING_SECURE_MEMORY -#undef JSONCPP_USING_SECURE_MEMORY -#endif -#define JSONCPP_USING_SECURE_MEMORY @JSONCPP_USE_SECURE_MEMORY@ -// If non-zero, the library zeroes any memory that it has allocated before -// it frees its memory. - -#endif // JSON_VERSION_H_INCLUDED diff --git a/version.txt b/version.txt deleted file mode 100644 index bfa363e..0000000 --- a/version.txt +++ /dev/null @@ -1 +0,0 @@ -1.8.4