diff --git a/.travis.yml b/.travis.yml index e5b56eb..87f2926 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,4 +14,4 @@ script: - cmake --build . --target all -- after_script: - - ctest + - ctest diff --git a/CMakeLists.txt b/CMakeLists.txt index fb24877..a10a49f 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,15 +60,17 @@ endif() message(${CMAKE_INSTALL_INCLUDEDIR}) - + set(CPACK_PACKAGE_VERSION_MAJOR 4) set(CPACK_PACKAGE_VERSION_MINOR 0) set(CPACK_PACKAGE_VERSION_PATCH 8) set(CPACK_PACKAGE_DESCRIPTION "A C++ JSON Parser/Generator Implemented with Boost Spirit") include(CPack) - + +set(EXPORT_HEADERS ) INSTALL( FILES + json_spirit/json_spirit_global.h json_spirit/json_spirit.h json_spirit/json_spirit_error_position.h json_spirit/json_spirit_reader.h @@ -80,4 +82,4 @@ INSTALL( json_spirit/json_spirit_writer_template.h json_spirit/json_spirit_writer_options.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/json_spirit) - + diff --git a/json_spirit/CMakeLists.txt b/json_spirit/CMakeLists.txt index 23da64c..10d4e2b 100755 --- a/json_spirit/CMakeLists.txt +++ b/json_spirit/CMakeLists.txt @@ -15,13 +15,19 @@ SET(JSON_SPIRIT_SRCS FIND_PACKAGE(Boost 1.34 REQUIRED) INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR}) - + OPTION(BUILD_STATIC_LIBS "Build static libraries" OFF) if(BUILD_STATIC_LIBS) ADD_LIBRARY(json_spirit STATIC ${JSON_SPIRIT_SRCS}) - install(TARGETS json_spirit ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + install(TARGETS json_spirit ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) else(BUILD_STATIC_LIBS) ADD_LIBRARY(json_spirit SHARED ${JSON_SPIRIT_SRCS}) - install(TARGETS json_spirit LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + if(WIN32) + install(TARGETS json_spirit RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(TARGETS json_spirit ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + else() + install(TARGETS json_spirit LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + endif() + endif(BUILD_STATIC_LIBS) diff --git a/json_spirit/json_spirit_global.h b/json_spirit/json_spirit_global.h new file mode 100644 index 0000000..07a7d2c --- /dev/null +++ b/json_spirit/json_spirit_global.h @@ -0,0 +1,18 @@ +#ifndef JSON_SPIRIT_GLOBAL_H +#define JSON_SPIRIT_GLOBAL_H + +#if (defined _WIN32) || (defined _WIN64) + #define DECL_EXPORT __declspec(dllexport) + #define DECL_IMPORT __declspec(dllimport) +#else + #define DECL_EXPORT + #define DECL_IMPORT +#endif + +#if defined(json_spirit_EXPORTS) +# define json_spirit_EXPORT DECL_EXPORT +#else +# define json_spirit_EXPORT DECL_IMPORT +#endif + +#endif \ No newline at end of file diff --git a/json_spirit/json_spirit_reader.h b/json_spirit/json_spirit_reader.h index a6cfac7..50cc6f5 100755 --- a/json_spirit/json_spirit_reader.h +++ b/json_spirit/json_spirit_reader.h @@ -11,6 +11,7 @@ # pragma once #endif +#include "json_spirit_global.h" #include "json_spirit_value.h" #include "json_spirit_error_position.h" #include @@ -20,43 +21,43 @@ namespace json_spirit // functions to reads a JSON values #ifdef JSON_SPIRIT_VALUE_ENABLED - bool read( const std::string& s, Value& value ); - bool read( std::istream& is, Value& value ); - bool read( std::string::const_iterator& begin, std::string::const_iterator end, Value& value ); + json_spirit_EXPORT bool read( const std::string& s, Value& value ); + json_spirit_EXPORT bool read( std::istream& is, Value& value ); + json_spirit_EXPORT bool read( std::string::const_iterator& begin, std::string::const_iterator end, Value& value ); - void read_or_throw( const std::string& s, Value& value ); - void read_or_throw( std::istream& is, Value& value ); - void read_or_throw( std::string::const_iterator& begin, std::string::const_iterator end, Value& value ); + json_spirit_EXPORT void read_or_throw( const std::string& s, Value& value ); + json_spirit_EXPORT void read_or_throw( std::istream& is, Value& value ); + json_spirit_EXPORT void read_or_throw( std::string::const_iterator& begin, std::string::const_iterator end, Value& value ); #endif #if defined( JSON_SPIRIT_WVALUE_ENABLED ) && !defined( BOOST_NO_STD_WSTRING ) - bool read( const std::wstring& s, wValue& value ); - bool read( std::wistream& is, wValue& value ); - bool read( std::wstring::const_iterator& begin, std::wstring::const_iterator end, wValue& value ); + json_spirit_EXPORT bool read( const std::wstring& s, wValue& value ); + json_spirit_EXPORT bool read( std::wistream& is, wValue& value ); + json_spirit_EXPORT bool read( std::wstring::const_iterator& begin, std::wstring::const_iterator end, wValue& value ); - void read_or_throw( const std::wstring& s, wValue& value ); - void read_or_throw( std::wistream& is, wValue& value ); - void read_or_throw( std::wstring::const_iterator& begin, std::wstring::const_iterator end, wValue& value ); + json_spirit_EXPORT void read_or_throw( const std::wstring& s, wValue& value ); + json_spirit_EXPORT void read_or_throw( std::wistream& is, wValue& value ); + json_spirit_EXPORT void read_or_throw( std::wstring::const_iterator& begin, std::wstring::const_iterator end, wValue& value ); #endif #ifdef JSON_SPIRIT_MVALUE_ENABLED - bool read( const std::string& s, mValue& value ); - bool read( std::istream& is, mValue& value ); - bool read( std::string::const_iterator& begin, std::string::const_iterator end, mValue& value ); + json_spirit_EXPORT bool read( const std::string& s, mValue& value ); + json_spirit_EXPORT bool read( std::istream& is, mValue& value ); + json_spirit_EXPORT bool read( std::string::const_iterator& begin, std::string::const_iterator end, mValue& value ); - void read_or_throw( const std::string& s, mValue& value ); - void read_or_throw( std::istream& is, mValue& value ); - void read_or_throw( std::string::const_iterator& begin, std::string::const_iterator end, mValue& value ); + json_spirit_EXPORT void read_or_throw( const std::string& s, mValue& value ); + json_spirit_EXPORT void read_or_throw( std::istream& is, mValue& value ); + json_spirit_EXPORT void read_or_throw( std::string::const_iterator& begin, std::string::const_iterator end, mValue& value ); #endif #if defined( JSON_SPIRIT_WMVALUE_ENABLED ) && !defined( BOOST_NO_STD_WSTRING ) - bool read( const std::wstring& s, wmValue& value ); - bool read( std::wistream& is, wmValue& value ); - bool read( std::wstring::const_iterator& begin, std::wstring::const_iterator end, wmValue& value ); + json_spirit_EXPORT bool read( const std::wstring& s, wmValue& value ); + json_spirit_EXPORT bool read( std::wistream& is, wmValue& value ); + json_spirit_EXPORT bool read( std::wstring::const_iterator& begin, std::wstring::const_iterator end, wmValue& value ); - void read_or_throw( const std::wstring& s, wmValue& value ); - void read_or_throw( std::wistream& is, wmValue& value ); - void read_or_throw( std::wstring::const_iterator& begin, std::wstring::const_iterator end, wmValue& value ); + json_spirit_EXPORT void read_or_throw( const std::wstring& s, wmValue& value ); + json_spirit_EXPORT void read_or_throw( std::wistream& is, wmValue& value ); + json_spirit_EXPORT void read_or_throw( std::wstring::const_iterator& begin, std::wstring::const_iterator end, wmValue& value ); #endif } diff --git a/json_spirit/json_spirit_writer.h b/json_spirit/json_spirit_writer.h index 2722780..f60dc07 100755 --- a/json_spirit/json_spirit_writer.h +++ b/json_spirit/json_spirit_writer.h @@ -11,6 +11,7 @@ # pragma once #endif +#include "json_spirit_global.h" #include "json_spirit_value.h" #include "json_spirit_writer_options.h" #include @@ -20,44 +21,44 @@ namespace json_spirit // these functions to convert JSON Values to text #ifdef JSON_SPIRIT_VALUE_ENABLED - void write( const Value& value, std::ostream& os, unsigned int options = 0 ); - std::string write( const Value& value, unsigned int options = 0 ); + json_spirit_EXPORT void write( const Value& value, std::ostream& os, unsigned int options = 0 ); + json_spirit_EXPORT std::string write( const Value& value, unsigned int options = 0 ); #endif #ifdef JSON_SPIRIT_MVALUE_ENABLED - void write( const mValue& value, std::ostream& os, unsigned int options = 0 ); - std::string write( const mValue& value, unsigned int options = 0 ); + json_spirit_EXPORT void write( const mValue& value, std::ostream& os, unsigned int options = 0 ); + json_spirit_EXPORT std::string write( const mValue& value, unsigned int options = 0 ); #endif #if defined( JSON_SPIRIT_WVALUE_ENABLED ) && !defined( BOOST_NO_STD_WSTRING ) - void write( const wValue& value, std::wostream& os, unsigned int options = 0 ); - std::wstring write( const wValue& value, unsigned int options = 0 ); + json_spirit_EXPORT void write( const wValue& value, std::wostream& os, unsigned int options = 0 ); + json_spirit_EXPORT std::wstring write( const wValue& value, unsigned int options = 0 ); #endif #if defined( JSON_SPIRIT_WMVALUE_ENABLED ) && !defined( BOOST_NO_STD_WSTRING ) - void write( const wmValue& value, std::wostream& os, unsigned int options = 0 ); - std::wstring write( const wmValue& value, unsigned int options = 0 ); + json_spirit_EXPORT void write( const wmValue& value, std::wostream& os, unsigned int options = 0 ); + json_spirit_EXPORT std::wstring write( const wmValue& value, unsigned int options = 0 ); #endif // these "formatted" versions of the "write" functions are the equivalent of the above functions // with option "pretty_print" #ifdef JSON_SPIRIT_VALUE_ENABLED - void write_formatted( const Value& value, std::ostream& os ); - std::string write_formatted( const Value& value ); + json_spirit_EXPORT void write_formatted( const Value& value, std::ostream& os ); + json_spirit_EXPORT std::string write_formatted( const Value& value ); #endif #ifdef JSON_SPIRIT_MVALUE_ENABLED - void write_formatted( const mValue& value, std::ostream& os ); - std::string write_formatted( const mValue& value ); + json_spirit_EXPORT void write_formatted( const mValue& value, std::ostream& os ); + json_spirit_EXPORT std::string write_formatted( const mValue& value ); #endif #if defined( JSON_SPIRIT_WVALUE_ENABLED ) && !defined( BOOST_NO_STD_WSTRING ) - void write_formatted( const wValue& value, std::wostream& os ); - std::wstring write_formatted( const wValue& value ); + json_spirit_EXPORT void write_formatted( const wValue& value, std::wostream& os ); + json_spirit_EXPORT std::wstring write_formatted( const wValue& value ); #endif #if defined( JSON_SPIRIT_WMVALUE_ENABLED ) && !defined( BOOST_NO_STD_WSTRING ) - void write_formatted( const wmValue& value, std::wostream& os ); - std::wstring write_formatted( const wmValue& value ); + json_spirit_EXPORT void write_formatted( const wmValue& value, std::wostream& os ); + json_spirit_EXPORT std::wstring write_formatted( const wmValue& value ); #endif } diff --git a/json_test/json_spirit_value_test.cpp b/json_test/json_spirit_value_test.cpp index e055dae..faab022 100755 --- a/json_test/json_spirit_value_test.cpp +++ b/json_test/json_spirit_value_test.cpp @@ -381,9 +381,15 @@ namespace Container_constructor_runner() { vector< double > vd = list_of( 1.2 )( 1.3 ); test_container_constructor( vd ); + #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900) + vector< int > vi = { 1 }; test_container_constructor( vi ); + vi = { 1, 2 }; test_container_constructor( vi ); + vi = { 1, 2, 3 }; test_container_constructor( vi ); + #else vector< int > vi = list_of( 1 ); test_container_constructor( vi ); vi = list_of( 1 )( 2 ); test_container_constructor( vi ); vi = list_of( 1 )( 2 )( 3 ); test_container_constructor( vi ); + #endif list< double > ld = list_of( 1.2 )( 1.3 ); test_container_constructor( ld ); list< int > li = list_of( 1 ); test_container_constructor( li ); li = list_of( 1 )( 2 ); test_container_constructor( li ); @@ -447,9 +453,15 @@ namespace } vector< double > vd = list_of( 1.2 )( 1.3 ); test_variant_array_constructor< double > ( vd ); + #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900) + vector< int > vi = { 1 }; test_variant_array_constructor< int >( vi ); + vi = { 1, 2 }; test_variant_array_constructor< int >( vi ); + vi = { 1, 2, 3 }; test_variant_array_constructor< int >( vi ); + #else vector< int > vi = list_of( 1 ); test_variant_array_constructor< int >( vi ); vi = list_of( 1 )( 2 ); test_variant_array_constructor< int >( vi ); vi = list_of( 1 )( 2 )( 3 ); test_variant_array_constructor< int >( vi ); + #endif list< double > ld = list_of( 1.2 )( 1.3 ); test_variant_array_constructor< double >( ld ); list< int > li = list_of( 1 ); test_variant_array_constructor< int >( li ); li = list_of( 1 )( 2 ); test_variant_array_constructor< int >( li );