commit
09118fa230
14
.gitignore
vendored
14
.gitignore
vendored
@ -9,3 +9,17 @@
|
|||||||
/doc/doxygen_*.db
|
/doc/doxygen_*.db
|
||||||
/thirdparty/lib
|
/thirdparty/lib
|
||||||
/intermediate
|
/intermediate
|
||||||
|
|
||||||
|
# Temporary files created during CMake build
|
||||||
|
CMakeCache.txt
|
||||||
|
CMakeFiles
|
||||||
|
cmake_install.cmake
|
||||||
|
CTestTestfile.cmake
|
||||||
|
Makefile
|
||||||
|
RapidJSON*.cmake
|
||||||
|
RapidJSON.pc
|
||||||
|
Testing
|
||||||
|
/googletest
|
||||||
|
install_manifest.txt
|
||||||
|
Doxyfile
|
||||||
|
DartConfiguration.tcl
|
||||||
|
39
.travis.yml
39
.travis.yml
@ -6,36 +6,35 @@ compiler:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
matrix:
|
matrix:
|
||||||
- CONF=debug BITS=64
|
- CONF=debug ARCH=x86_64 ARCH_FLAGS=""
|
||||||
- CONF=release BITS=64
|
- CONF=release ARCH=x86_64 ARCH_FLAGS=""
|
||||||
- CONF=debug BITS=32
|
- CONF=debug ARCH=x86 ARCH_FLAGS="-m32"
|
||||||
- CONF=release BITS=32
|
- CONF=release ARCH=x86 ARCH_FLAGS="-m32"
|
||||||
global:
|
global:
|
||||||
- GITHUB_REPO='miloyip/rapidjson'
|
- GITHUB_REPO='miloyip/rapidjson'
|
||||||
- DEFINES='-DRAPIDJSON_HAS_STDSTRING'
|
|
||||||
- secure: "HrsaCb+N66EG1HR+LWH1u51SjaJyRwJEDzqJGYMB7LJ/bfqb9mWKF1fLvZGk46W5t7TVaXRDD5KHFx9DPWvKn4gRUVkwTHEy262ah5ORh8M6n/6VVVajeV/AYt2C0sswdkDBDO4Xq+xy5gdw3G8s1A4Inbm73pUh+6vx+7ltBbk="
|
- secure: "HrsaCb+N66EG1HR+LWH1u51SjaJyRwJEDzqJGYMB7LJ/bfqb9mWKF1fLvZGk46W5t7TVaXRDD5KHFx9DPWvKn4gRUVkwTHEy262ah5ORh8M6n/6VVVajeV/AYt2C0sswdkDBDO4Xq+xy5gdw3G8s1A4Inbm73pUh+6vx+7ltBbk="
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- sudo add-apt-repository -y ppa:codegear/release
|
- sudo apt-get install -qq cmake doxygen valgrind
|
||||||
- sudo apt-get update -qq
|
- if [ "$ARCH" = "x86" ]; then sudo apt-get install -qq g++-multilib libc6-dbg:i386; fi
|
||||||
- sudo apt-get install -qq premake4 valgrind
|
|
||||||
- if [ "$BITS" = 32 ]; then sudo apt-get install -qq g++-multilib libc6-dbg:i386; fi
|
|
||||||
|
|
||||||
install: true
|
install: true
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- (cd build && premake4 'gmake')
|
- mkdir build
|
||||||
|
- >
|
||||||
|
(cd build && cmake
|
||||||
|
-DRAPIDJSON_HAS_STDSTRING=ON
|
||||||
|
-DCMAKE_VERBOSE_MAKEFILE=ON
|
||||||
|
-DCMAKE_BUILD_TYPE=$CONF
|
||||||
|
-DCMAKE_C_FLAGS="$ARCH_FLAGS" ..)
|
||||||
# hack to avoid Valgrind bug (https://bugs.kde.org/show_bug.cgi?id=326469),
|
# hack to avoid Valgrind bug (https://bugs.kde.org/show_bug.cgi?id=326469),
|
||||||
# exposed by merging PR#163 (using -march=native)
|
# exposed by merging PR#163 (using -march=native)
|
||||||
- (cd build/gmake && sed -i 's/march=native/msse4.2/' *.make)
|
# - (cd build/gmake && sed -i 's/march=native/msse4.2/' *.make)
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- make -C build/gmake -f test.make config=${CONF}${BITS}
|
- cd build
|
||||||
- make -C build/gmake -f example.make config=${CONF}${BITS}
|
- make tests
|
||||||
- if [ "$CONF" = "debug" ] && ( objdump -t -C intermediate/${CONF}/gmake/unittest/x${BITS}/namespacetest.o | grep rapidjson ) ; then echo "Symbol check failed!" ; false; fi
|
- make examples
|
||||||
- pushd bin
|
- ctest -V
|
||||||
- ./unittest_${CONF}_x${BITS}_gmake
|
- make travis_doc
|
||||||
- valgrind --leak-check=full --error-exitcode=1 ./unittest_${CONF}_x${BITS}_gmake
|
|
||||||
- if [ "$CONF" = "release" ]; then ./perftest_${CONF}_x${BITS}_gmake; fi
|
|
||||||
- popd
|
|
||||||
- ./build/travis-doxygen.sh;
|
|
||||||
|
98
CMakeLists.txt
Normal file
98
CMakeLists.txt
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
||||||
|
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules)
|
||||||
|
|
||||||
|
PROJECT(RapidJSON CXX)
|
||||||
|
|
||||||
|
set(LIB_MAJOR_VERSION "0")
|
||||||
|
set(LIB_MINOR_VERSION "12")
|
||||||
|
set(LIB_PATCH_VERSION "0")
|
||||||
|
set(LIB_VERSION_STRING "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_PATCH_VERSION}")
|
||||||
|
|
||||||
|
# compile in release with debug info mode by default
|
||||||
|
SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Build Type")
|
||||||
|
|
||||||
|
# Build all binaries in a separate directory
|
||||||
|
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
|
option(RAPIDJSON_BUILD_DOC "Build rapidjson documentation." ON)
|
||||||
|
option(RAPIDJSON_BUILD_EXAMPLES "Build rapidjson examples." ON)
|
||||||
|
option(RAPIDJSON_BUILD_TESTS "Build rapidjson perftests and unittests." ON)
|
||||||
|
|
||||||
|
option(RAPIDJSON_HAS_STDSTRING "" OFF)
|
||||||
|
if(RAPIDJSON_HAS_STDSTRING)
|
||||||
|
add_definitions(-DRAPIDJSON_HAS_STDSTRING)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
#add extra search paths for libraries and includes
|
||||||
|
SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "The directory the headers are installed in")
|
||||||
|
SET(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE STRING "Directory where lib will install")
|
||||||
|
SET(DOC_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}" CACHE PATH "Path to the documentation")
|
||||||
|
|
||||||
|
IF(UNIX OR CYGWIN)
|
||||||
|
SET(_CMAKE_INSTALL_DIR "${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME}")
|
||||||
|
ELSEIF(WIN32)
|
||||||
|
SET(_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/cmake")
|
||||||
|
ENDIF()
|
||||||
|
SET(CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" CACHE PATH "The directory cmake fiels are installed in")
|
||||||
|
|
||||||
|
|
||||||
|
include_directories(${CMAKE_SOURCE_DIR}/include)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${RAPIDJSON_CXX_FLAGS}")
|
||||||
|
|
||||||
|
if(RAPIDJSON_BUILD_DOC)
|
||||||
|
add_subdirectory(doc)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_target(travis_doc)
|
||||||
|
add_custom_command(TARGET travis_doc
|
||||||
|
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/travis-doxygen.sh)
|
||||||
|
|
||||||
|
if(RAPIDJSON_BUILD_EXAMPLES)
|
||||||
|
add_subdirectory(example)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(RAPIDJSON_BUILD_TESTS)
|
||||||
|
add_subdirectory(test)
|
||||||
|
include(CTest)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# pkg-config
|
||||||
|
IF (UNIX OR CYGWIN)
|
||||||
|
CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
|
||||||
|
@ONLY)
|
||||||
|
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
|
||||||
|
DESTINATION "${LIB_INSTALL_DIR}/pkgconfig"
|
||||||
|
COMPONENT pkgconfig)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
install(FILES readme.md
|
||||||
|
DESTINATION "${DOC_INSTALL_DIR}"
|
||||||
|
COMPONENT doc)
|
||||||
|
|
||||||
|
install(DIRECTORY include/rapidjson
|
||||||
|
DESTINATION "${INCLUDE_INSTALL_DIR}"
|
||||||
|
COMPONENT dev)
|
||||||
|
|
||||||
|
install(DIRECTORY example/
|
||||||
|
DESTINATION "${DOC_INSTALL_DIR}/examples"
|
||||||
|
COMPONENT examples)
|
||||||
|
|
||||||
|
# Provide config and version files to be used by other applications
|
||||||
|
# ===============================
|
||||||
|
|
||||||
|
export(PACKAGE ${PROJECT_NAME})
|
||||||
|
|
||||||
|
# cmake-modules
|
||||||
|
CONFIGURE_FILE(${PROJECT_NAME}Config.cmake.in
|
||||||
|
${PROJECT_NAME}Config.cmake
|
||||||
|
@ONLY)
|
||||||
|
CONFIGURE_FILE(${PROJECT_NAME}ConfigVersion.cmake.in
|
||||||
|
${PROJECT_NAME}ConfigVersion.cmake
|
||||||
|
@ONLY)
|
||||||
|
INSTALL(FILES
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
|
||||||
|
DESTINATION "${CMAKE_INSTALL_DIR}"
|
||||||
|
COMPONENT dev)
|
22
CMakeModules/FindGTestSrc.cmake
Normal file
22
CMakeModules/FindGTestSrc.cmake
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
SET(GTEST_SEARCH_PATH
|
||||||
|
"${GTEST_SOURCE_DIR}"
|
||||||
|
"${CMAKE_SOURCE_DIR}/thirdparty/gtest")
|
||||||
|
|
||||||
|
IF(UNIX)
|
||||||
|
LIST(INSERT GTEST_SEARCH_PATH 1 "/usr/src/gtest")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
FIND_PATH(GTEST_SOURCE_DIR
|
||||||
|
NAMES CMakeLists.txt src/gtest_main.cc
|
||||||
|
PATHS ${GTEST_SEARCH_PATH})
|
||||||
|
|
||||||
|
# Debian installs gtest include directory in /usr/include, thus need to look
|
||||||
|
# for include directory separately from source directory.
|
||||||
|
FIND_PATH(GTEST_INCLUDE_DIR
|
||||||
|
NAMES gtest/gtest.h
|
||||||
|
PATH_SUFFIXES include
|
||||||
|
PATHS ${GTEST_SEARCH_PATH})
|
||||||
|
|
||||||
|
find_package_handle_standard_args(GTestSrc DEFAULT_MSG
|
||||||
|
GTEST_SOURCE_DIR
|
||||||
|
GTEST_INCLUDE_DIR)
|
4
RapidJSON.pc.in
Normal file
4
RapidJSON.pc.in
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Name: @PROJECT_NAME@
|
||||||
|
Description: RapidJSON is a JSON parser and generator for C++ inspired by RapidXml.
|
||||||
|
Version: @LIB_VERSION_STRING@
|
||||||
|
Cflags: -I${includedir}
|
3
RapidJSONConfig.cmake.in
Normal file
3
RapidJSONConfig.cmake.in
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
get_filename_component(RAPIDJSON_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||||||
|
set(RAPIDJSON_INCLUDE_DIRS "@INCLUDE_INSTALL_DIR@")
|
||||||
|
message(STATUS "RapidJSON found. Headers: ${RAPIDJSON_INCLUDE_DIRS}")
|
10
RapidJSONConfigVersion.cmake.in
Normal file
10
RapidJSONConfigVersion.cmake.in
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
SET(PACKAGE_VERSION "@LIB_VERSION_STRING@")
|
||||||
|
|
||||||
|
IF (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
|
||||||
|
SET(PACKAGE_VERSION_EXACT "true")
|
||||||
|
ENDIF (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
|
||||||
|
IF (NOT PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION)
|
||||||
|
SET(PACKAGE_VERSION_COMPATIBLE "true")
|
||||||
|
ELSE (NOT PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION)
|
||||||
|
SET(PACKAGE_VERSION_UNSUITABLE "true")
|
||||||
|
ENDIF (NOT PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION)
|
@ -1,5 +0,0 @@
|
|||||||
@echo off
|
|
||||||
premake4 vs2005
|
|
||||||
premake4 vs2008
|
|
||||||
premake4 vs2010
|
|
||||||
premake4 gmake
|
|
@ -1,5 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
premake4 vs2005
|
|
||||||
premake4 vs2008
|
|
||||||
premake4 vs2010
|
|
||||||
premake4 gmake
|
|
@ -1,161 +0,0 @@
|
|||||||
function setTargetObjDir(outDir)
|
|
||||||
for _, cfg in ipairs(configurations()) do
|
|
||||||
for _, plat in ipairs(platforms()) do
|
|
||||||
local action = _ACTION or ""
|
|
||||||
|
|
||||||
local prj = project()
|
|
||||||
|
|
||||||
--"_debug_win32_vs2008"
|
|
||||||
local suffix = "_" .. cfg .. "_" .. plat .. "_" .. action
|
|
||||||
|
|
||||||
targetPath = outDir
|
|
||||||
|
|
||||||
suffix = string.lower(suffix)
|
|
||||||
|
|
||||||
local obj_path = "../intermediate/" .. cfg .. "/" .. action .. "/" .. prj.name
|
|
||||||
|
|
||||||
obj_path = string.lower(obj_path)
|
|
||||||
|
|
||||||
configuration {cfg, plat}
|
|
||||||
targetdir(targetPath)
|
|
||||||
objdir(obj_path)
|
|
||||||
targetsuffix(suffix)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function linkLib(libBaseName)
|
|
||||||
for _, cfg in ipairs(configurations()) do
|
|
||||||
for _, plat in ipairs(platforms()) do
|
|
||||||
local action = _ACTION or ""
|
|
||||||
|
|
||||||
local prj = project()
|
|
||||||
|
|
||||||
local cfgName = cfg
|
|
||||||
|
|
||||||
--"_debug_win32_vs2008"
|
|
||||||
local suffix = "_" .. cfgName .. "_" .. plat .. "_" .. action
|
|
||||||
|
|
||||||
libFullName = libBaseName .. string.lower(suffix)
|
|
||||||
|
|
||||||
configuration {cfg, plat}
|
|
||||||
links(libFullName)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
solution "test"
|
|
||||||
configurations { "debug", "release" }
|
|
||||||
platforms { "x32", "x64" }
|
|
||||||
|
|
||||||
location ("./" .. (_ACTION or ""))
|
|
||||||
language "C++"
|
|
||||||
flags { "ExtraWarnings" }
|
|
||||||
|
|
||||||
configuration "debug"
|
|
||||||
defines { "DEBUG" }
|
|
||||||
flags { "Symbols" }
|
|
||||||
|
|
||||||
configuration "release"
|
|
||||||
defines { "NDEBUG" }
|
|
||||||
flags { "Optimize" }
|
|
||||||
|
|
||||||
configuration "vs*"
|
|
||||||
defines { "_CRT_SECURE_NO_WARNINGS" }
|
|
||||||
|
|
||||||
configuration "gmake"
|
|
||||||
buildoptions "-march=native -Wall -Wextra"
|
|
||||||
|
|
||||||
project "gtest"
|
|
||||||
kind "StaticLib"
|
|
||||||
|
|
||||||
defines { "GTEST_HAS_PTHREAD=0" }
|
|
||||||
|
|
||||||
files {
|
|
||||||
"../thirdparty/gtest/src/gtest-all.cc",
|
|
||||||
"../thirdparty/gtest/src/**.h",
|
|
||||||
}
|
|
||||||
|
|
||||||
includedirs {
|
|
||||||
"../thirdparty/gtest/",
|
|
||||||
"../thirdparty/gtest/include",
|
|
||||||
}
|
|
||||||
|
|
||||||
setTargetObjDir("../thirdparty/lib")
|
|
||||||
|
|
||||||
project "unittest"
|
|
||||||
kind "ConsoleApp"
|
|
||||||
|
|
||||||
if _ACTION == "gmake" then
|
|
||||||
buildoptions "-Werror -Weffc++ -Wswitch-default"
|
|
||||||
end
|
|
||||||
|
|
||||||
files {
|
|
||||||
"../include/**.h",
|
|
||||||
"../test/unittest/**.cpp",
|
|
||||||
"../test/unittest/**.h",
|
|
||||||
}
|
|
||||||
|
|
||||||
includedirs {
|
|
||||||
"../include/",
|
|
||||||
"../thirdparty/gtest/include/",
|
|
||||||
}
|
|
||||||
|
|
||||||
libdirs "../thirdparty/lib"
|
|
||||||
|
|
||||||
setTargetObjDir("../bin")
|
|
||||||
|
|
||||||
linkLib "gtest"
|
|
||||||
links "gtest"
|
|
||||||
|
|
||||||
project "perftest"
|
|
||||||
kind "ConsoleApp"
|
|
||||||
|
|
||||||
files {
|
|
||||||
"../include/**.h",
|
|
||||||
"../test/perftest/**.cpp",
|
|
||||||
"../test/perftest/**.h",
|
|
||||||
}
|
|
||||||
|
|
||||||
includedirs {
|
|
||||||
"../include/",
|
|
||||||
"../thirdparty/gtest/include/",
|
|
||||||
"../thirdparty/",
|
|
||||||
}
|
|
||||||
|
|
||||||
libdirs "../thirdparty/lib"
|
|
||||||
|
|
||||||
setTargetObjDir("../bin")
|
|
||||||
|
|
||||||
linkLib "gtest"
|
|
||||||
links "gtest"
|
|
||||||
|
|
||||||
solution "example"
|
|
||||||
configurations { "debug", "release" }
|
|
||||||
platforms { "x32", "x64" }
|
|
||||||
location ("./" .. (_ACTION or ""))
|
|
||||||
language "C++"
|
|
||||||
flags { "ExtraWarnings" }
|
|
||||||
includedirs "../include/"
|
|
||||||
|
|
||||||
configuration "debug"
|
|
||||||
defines { "DEBUG" }
|
|
||||||
flags { "Symbols" }
|
|
||||||
|
|
||||||
configuration "release"
|
|
||||||
defines { "NDEBUG" }
|
|
||||||
flags { "Optimize", "EnableSSE2" }
|
|
||||||
|
|
||||||
configuration "vs*"
|
|
||||||
defines { "_CRT_SECURE_NO_WARNINGS" }
|
|
||||||
|
|
||||||
configuration "gmake"
|
|
||||||
buildoptions "-Werror -Wall -Wextra -Weffc++ -Wswitch-default"
|
|
||||||
|
|
||||||
local examplepaths = os.matchdirs("../example/*")
|
|
||||||
for _, examplepath in ipairs(examplepaths) do
|
|
||||||
project(path.getname(examplepath))
|
|
||||||
kind "ConsoleApp"
|
|
||||||
files(examplepath .. "/*")
|
|
||||||
setTargetObjDir("../bin")
|
|
||||||
end
|
|
23
doc/CMakeLists.txt
Normal file
23
doc/CMakeLists.txt
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
find_package(Doxygen)
|
||||||
|
|
||||||
|
IF(NOT DOXYGEN_FOUND)
|
||||||
|
MESSAGE(STATUS "No Doxygen found. Documentation won't be built")
|
||||||
|
ELSE()
|
||||||
|
file(GLOB SOURCES ${CMAKE_SOURCE_DIR}/include/*)
|
||||||
|
file(GLOB MARKDOWN_DOC ${CMAKE_SOURCE_DIR}/doc/*.md)
|
||||||
|
list(APPEND MARKDOWN_DOC ${CMAKE_SOURCE_DIR}/readme.md)
|
||||||
|
|
||||||
|
CONFIGURE_FILE(Doxyfile.in Doxyfile @ONLY)
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT html
|
||||||
|
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/html
|
||||||
|
DEPENDS ${MARKDOWN_DOC} ${SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
add_custom_target(doc ALL DEPENDS html)
|
||||||
|
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html
|
||||||
|
DESTINATION ${DOC_INSTALL_DIR}
|
||||||
|
COMPONENT doc)
|
||||||
|
ENDIF()
|
@ -58,7 +58,7 @@ PROJECT_LOGO =
|
|||||||
# entered, it will be relative to the location where doxygen was started. If
|
# entered, it will be relative to the location where doxygen was started. If
|
||||||
# left blank the current directory will be used.
|
# left blank the current directory will be used.
|
||||||
|
|
||||||
OUTPUT_DIRECTORY = ./doc
|
OUTPUT_DIRECTORY = @CMAKE_CURRENT_BINARY_DIR@
|
||||||
|
|
||||||
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
|
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
|
||||||
# directories (in 2 levels) under the output directory of each output format and
|
# directories (in 2 levels) under the output directory of each output format and
|
||||||
@ -764,18 +764,18 @@ WARN_LOGFILE =
|
|||||||
# spaces.
|
# spaces.
|
||||||
# Note: If this tag is empty the current directory is searched.
|
# Note: If this tag is empty the current directory is searched.
|
||||||
|
|
||||||
INPUT = ./include/rapidjson/rapidjson.h \
|
INPUT = readme.md \
|
||||||
./include/ \
|
include/rapidjson/rapidjson.h \
|
||||||
./readme.md \
|
include/ \
|
||||||
./doc/features.md \
|
doc/features.md \
|
||||||
./doc/tutorial.md \
|
doc/tutorial.md \
|
||||||
./doc/stream.md \
|
doc/stream.md \
|
||||||
./doc/encoding.md \
|
doc/encoding.md \
|
||||||
./doc/dom.md \
|
doc/dom.md \
|
||||||
./doc/sax.md \
|
doc/sax.md \
|
||||||
./doc/performance.md \
|
doc/performance.md \
|
||||||
./doc/internals.md \
|
doc/internals.md \
|
||||||
./doc/faq.md
|
doc/faq.md
|
||||||
|
|
||||||
# This tag can be used to specify the character encoding of the source files
|
# This tag can be used to specify the character encoding of the source files
|
||||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||||
@ -920,7 +920,7 @@ FILTER_SOURCE_PATTERNS =
|
|||||||
# (index.html). This can be useful if you have a project on for instance GitHub
|
# (index.html). This can be useful if you have a project on for instance GitHub
|
||||||
# and want to reuse the introduction page also for the doxygen output.
|
# and want to reuse the introduction page also for the doxygen output.
|
||||||
|
|
||||||
USE_MDFILE_AS_MAINPAGE = ./readme.md
|
USE_MDFILE_AS_MAINPAGE = readme.md
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# Configuration options related to source browsing
|
# Configuration options related to source browsing
|
@ -31,7 +31,7 @@ User can customize these template parameters.
|
|||||||
|
|
||||||
## Encoding {#Encoding}
|
## Encoding {#Encoding}
|
||||||
|
|
||||||
The `Encoding` parameter specifies the encoding of JSON String value in memory. Possible options are `UTF8`, `UTF16`, `UTF32`. Note that, these 3 types are also template class. `UTF8<>` is `UTF8<char>`, which means using char to store the characters. You may refer to [Encoding](encoding.md) for details.
|
The `Encoding` parameter specifies the encoding of JSON String value in memory. Possible options are `UTF8`, `UTF16`, `UTF32`. Note that, these 3 types are also template class. `UTF8<>` is `UTF8<char>`, which means using char to store the characters. You may refer to [Encoding](doc/encoding.md) for details.
|
||||||
|
|
||||||
Suppose a Windows application would query localization strings stored in JSON files. Unicode-enabled functions in Windows use UTF-16 (wide character) encoding. No matter what encoding was used in JSON files, we can store the strings in UTF-16 in memory.
|
Suppose a Windows application would query localization strings stored in JSON files. Unicode-enabled functions in Windows use UTF-16 (wide character) encoding. No matter what encoding was used in JSON files, we can store the strings in UTF-16 in memory.
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ GenericDocument& GenericDocument::Parse(const Ch* str);
|
|||||||
GenericDocument& GenericDocument::Parse(const Ch* str);
|
GenericDocument& GenericDocument::Parse(const Ch* str);
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
|
|
||||||
The examples of [tutorial](tutorial.md) uses (9) for normal parsing of string. The examples of [stream](stream.md) uses the first three. *In situ* parsing will be described soon.
|
The examples of [tutorial](doc/tutorial.md) uses (9) for normal parsing of string. The examples of [stream](doc/stream.md) uses the first three. *In situ* parsing will be described soon.
|
||||||
|
|
||||||
The `parseFlags` are combination of the following bit-flags:
|
The `parseFlags` are combination of the following bit-flags:
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
1. What is RapidJSON?
|
1. What is RapidJSON?
|
||||||
|
|
||||||
RapidJSON is a C++ library for parsing and generating JSON. You may check all [features](features.md) of it.
|
RapidJSON is a C++ library for parsing and generating JSON. You may check all [features](doc/features.md) of it.
|
||||||
|
|
||||||
2. Why is RapidJSON named so?
|
2. Why is RapidJSON named so?
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
This tutorial introduces the basics of the Document Object Model(DOM) API.
|
This tutorial introduces the basics of the Document Object Model(DOM) API.
|
||||||
|
|
||||||
As shown in [Usage at a glance](readme.md), a JSON can be parsed into DOM, and then the DOM can be queried and modified easily, and finally be converted back to JSON.
|
As shown in [Usage at a glance](@ref index), a JSON can be parsed into DOM, and then the DOM can be queried and modified easily, and finally be converted back to JSON.
|
||||||
|
|
||||||
[TOC]
|
[TOC]
|
||||||
|
|
||||||
@ -512,4 +512,4 @@ This tutorial shows the basics of DOM tree query and manipulation. There are sev
|
|||||||
5. [Performance](doc/performance.md) shows some in-house and third-party benchmarks.
|
5. [Performance](doc/performance.md) shows some in-house and third-party benchmarks.
|
||||||
6. [Internals](doc/internals.md) describes some internal designs and techniques of RapidJSON.
|
6. [Internals](doc/internals.md) describes some internal designs and techniques of RapidJSON.
|
||||||
|
|
||||||
You may also refer to the [FAQ](faq.md), API documentation, examples and unit tests.
|
You may also refer to the [FAQ](doc/faq.md), API documentation, examples and unit tests.
|
||||||
|
21
example/CMakeLists.txt
Normal file
21
example/CMakeLists.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# Copyright (c) 2011 Milo Yip (miloyip@gmail.com)
|
||||||
|
# Copyright (c) 2013 Rafal Jeczalik (rjeczalik@gmail.com)
|
||||||
|
# Distributed under the MIT License (see license.txt file)
|
||||||
|
|
||||||
|
set(EXAMPLES
|
||||||
|
capitalize
|
||||||
|
condense
|
||||||
|
messagereader
|
||||||
|
pretty
|
||||||
|
prettyauto
|
||||||
|
serialize
|
||||||
|
simpledom
|
||||||
|
simplereader
|
||||||
|
simplewriter
|
||||||
|
tutorial)
|
||||||
|
|
||||||
|
foreach (example ${EXAMPLES})
|
||||||
|
add_executable(${example} ${example}/${example}.cpp)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
add_custom_target(examples ALL DEPENDS ${EXAMPLES})
|
29
readme.md
29
readme.md
@ -41,21 +41,28 @@ Users can build and run the unit tests on their platform/compiler.
|
|||||||
|
|
||||||
RapidJSON is a header-only C++ library. Just copy the `include/rapidjson` folder to system or project's include path.
|
RapidJSON is a header-only C++ library. Just copy the `include/rapidjson` folder to system or project's include path.
|
||||||
|
|
||||||
To build the tests and examples:
|
RapidJSON uses following software as its dependencies:
|
||||||
|
* [CMake](http://www.cmake.org) as a general build tool
|
||||||
|
* (optional)[Doxygen](http://www.goxygen.org) to build documentation
|
||||||
|
* (optional)[googletest](https://code.google.com/p/googletest/) for unit and performance testing
|
||||||
|
|
||||||
|
To generate user documentation and run tests please proceed with the steps below:
|
||||||
1. Execute `git submodule update --init` to get the files of thirdparty submodules (google test).
|
1. Execute `git submodule update --init` to get the files of thirdparty submodules (google test).
|
||||||
2. Obtain [premake4](http://industriousone.com/premake/download).
|
2. Create directory called `build` in rapidjson source directory.
|
||||||
3. Copy premake4 executable to `rapidjson/build` (or system path).
|
3. Change to `build` directory and run `cmake ..` command to configure your build. Windows users can do the same with cmake-gui application.
|
||||||
4. Change directory to `rapidjson/build/`, run `premake.bat` on Windows, `premake.sh` on Linux or other platforms.
|
4. On Windows, build the solution found in the build directory. On Linux, run `make` from the build directory.
|
||||||
5. On Windows, build the solution at `rapidjson/build/vs2008/` or `/vs2010/`.
|
|
||||||
6. On other platforms, run GNU `make` at `rapidjson/build/gmake/` (e.g., `make -f test.make config=release32`; `make -f example.make config=debug32`).
|
|
||||||
7. On success, the executables are generated at `rapidjson/bin`.
|
|
||||||
|
|
||||||
To build the [Doxygen](http://doxygen.org) documentation:
|
On successfull build you will find compiled test and example binaries in `bin`
|
||||||
|
directory. The generated documentation will be available in `doc/html`
|
||||||
|
directory of the build tree. To run tests after finished build please run `make
|
||||||
|
test` or `ctest` from your build tree. You can get detailed output using `ctest
|
||||||
|
-V` command.
|
||||||
|
|
||||||
1. Obtain and install [Doxygen](http://doxygen.org/download.html).
|
It is possible to install library system-wide by running `make install` command
|
||||||
2. In the top-level directory, run `doxygen build/Doxyfile`.
|
from the build tree with administrative privileges. This will install all files
|
||||||
3. Browse the generated documentation in `doc/html`.
|
according to system preferences. Once RapidJSON is installed, it is possible
|
||||||
|
to use it from other CMake projects by adding `find_package(RapidJSON)` line to
|
||||||
|
your CMakeLists.txt.
|
||||||
|
|
||||||
## Usage at a glance
|
## Usage at a glance
|
||||||
|
|
||||||
|
19
test/CMakeLists.txt
Normal file
19
test/CMakeLists.txt
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
find_package(GTestSrc)
|
||||||
|
|
||||||
|
IF(GTESTSRC_FOUND)
|
||||||
|
enable_testing()
|
||||||
|
|
||||||
|
if (WIN32 AND (NOT CYGWIN) AND (NOT MINGW))
|
||||||
|
set(gtest_disable_pthreads ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_subdirectory(${GTEST_SOURCE_DIR} ${CMAKE_BINARY_DIR}/googletest)
|
||||||
|
include_directories(${GTEST_INCLUDE_DIR})
|
||||||
|
|
||||||
|
set(TEST_LIBRARIES gtest gtest_main)
|
||||||
|
|
||||||
|
add_custom_target(tests ALL)
|
||||||
|
add_subdirectory(perftest)
|
||||||
|
add_subdirectory(unittest)
|
||||||
|
|
||||||
|
ENDIF(GTESTSRC_FOUND)
|
16
test/perftest/CMakeLists.txt
Normal file
16
test/perftest/CMakeLists.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
set(PERFTEST_SOURCES
|
||||||
|
misctest.cpp
|
||||||
|
perftest.cpp
|
||||||
|
platformtest.cpp
|
||||||
|
rapidjsontest.cpp)
|
||||||
|
|
||||||
|
add_executable(perftest ${PERFTEST_SOURCES})
|
||||||
|
target_link_libraries(perftest ${TEST_LIBRARIES})
|
||||||
|
|
||||||
|
add_dependencies(tests perftest)
|
||||||
|
|
||||||
|
IF(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug"))
|
||||||
|
add_test(NAME perftest
|
||||||
|
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/perftest
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
|
||||||
|
ENDIF()
|
32
test/unittest/CMakeLists.txt
Normal file
32
test/unittest/CMakeLists.txt
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
set(UNITTEST_SOURCES
|
||||||
|
documenttest.cpp
|
||||||
|
encodedstreamtest.cpp
|
||||||
|
encodingstest.cpp
|
||||||
|
filestreamtest.cpp
|
||||||
|
jsoncheckertest.cpp
|
||||||
|
readertest.cpp
|
||||||
|
unittest.cpp
|
||||||
|
unittest.h
|
||||||
|
valuetest.cpp
|
||||||
|
writertest.cpp)
|
||||||
|
|
||||||
|
add_library(namespacetest STATIC namespacetest.cpp)
|
||||||
|
|
||||||
|
add_executable(unittest ${UNITTEST_SOURCES})
|
||||||
|
target_link_libraries(unittest ${TEST_LIBRARIES} namespacetest)
|
||||||
|
|
||||||
|
add_dependencies(tests unittest)
|
||||||
|
|
||||||
|
add_test(NAME unittest
|
||||||
|
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/unittest
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
|
||||||
|
|
||||||
|
add_test(NAME valgrind_unittest
|
||||||
|
COMMAND valgrind --leak-check=full --error-exitcode=1 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/unittest
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
|
||||||
|
|
||||||
|
IF((NOT MSVC) AND (CMAKE_BUILD_TYPE STREQUAL "Debug"))
|
||||||
|
add_test(NAME symbol_check
|
||||||
|
COMMAND sh -c "objdump -t -C libnamespacetest.a | grep rapidjson ; test $? -ne 0"
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
ENDIF()
|
@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
SUDO=sudo
|
|
||||||
DOXYGEN_VER=doxygen-1.8.7
|
DOXYGEN_VER=doxygen-1.8.7
|
||||||
DOXYGEN_TAR=${DOXYGEN_VER}.linux.bin.tar.gz
|
DOXYGEN_TAR=${DOXYGEN_VER}.linux.bin.tar.gz
|
||||||
DOXYGEN_URL="http://ftp.stack.nl/pub/users/dimitri/${DOXYGEN_TAR}"
|
DOXYGEN_URL="http://ftp.stack.nl/pub/users/dimitri/${DOXYGEN_TAR}"
|
||||||
@ -51,19 +50,18 @@ doxygen_install()
|
|||||||
{
|
{
|
||||||
wget -O - "${DOXYGEN_URL}" | \
|
wget -O - "${DOXYGEN_URL}" | \
|
||||||
tar xz -C ${TMPDIR-/tmp} ${DOXYGEN_VER}/bin/doxygen
|
tar xz -C ${TMPDIR-/tmp} ${DOXYGEN_VER}/bin/doxygen
|
||||||
$SUDO install -m 755 ${TMPDIR-/tmp}/${DOXYGEN_VER}/bin/doxygen \
|
export PATH="${TMPDIR-/tmp}/${DOXYGEN_VER}/bin:$PATH"
|
||||||
${DOXYGEN_BIN};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
doxygen_run()
|
doxygen_run()
|
||||||
{
|
{
|
||||||
cd "${TRAVIS_BUILD_DIR}";
|
cd "${TRAVIS_BUILD_DIR}";
|
||||||
doxygen build/Doxyfile;
|
doxygen ${TRAVIS_BUILD_DIR}/build/doc/Doxyfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
gh_pages_prepare()
|
gh_pages_prepare()
|
||||||
{
|
{
|
||||||
cd "${TRAVIS_BUILD_DIR}/doc";
|
cd "${TRAVIS_BUILD_DIR}/build/doc";
|
||||||
[ ! -d "html" ] || \
|
[ ! -d "html" ] || \
|
||||||
abort "Doxygen target directory already exists."
|
abort "Doxygen target directory already exists."
|
||||||
git --version
|
git --version
|
||||||
@ -78,7 +76,7 @@ gh_pages_prepare()
|
|||||||
}
|
}
|
||||||
|
|
||||||
gh_pages_commit() {
|
gh_pages_commit() {
|
||||||
cd "${TRAVIS_BUILD_DIR}/doc/html";
|
cd "${TRAVIS_BUILD_DIR}/build/doc/html";
|
||||||
git add --all;
|
git add --all;
|
||||||
git diff-index --quiet HEAD || git commit -m "Automatic doxygen build";
|
git diff-index --quiet HEAD || git commit -m "Automatic doxygen build";
|
||||||
}
|
}
|
||||||
@ -102,7 +100,7 @@ gh_pages_push() {
|
|||||||
[ "${#GH_TOKEN}" -eq 40 ] || \
|
[ "${#GH_TOKEN}" -eq 40 ] || \
|
||||||
abort "GitHub token invalid: found ${#GH_TOKEN} characters, expected 40."
|
abort "GitHub token invalid: found ${#GH_TOKEN} characters, expected 40."
|
||||||
|
|
||||||
cd "${TRAVIS_BUILD_DIR}/doc/html";
|
cd "${TRAVIS_BUILD_DIR}/build/doc/html";
|
||||||
# setup credentials (hide in "set -x" mode)
|
# setup credentials (hide in "set -x" mode)
|
||||||
git remote set-url --push origin "${GITHUB_URL}"
|
git remote set-url --push origin "${GITHUB_URL}"
|
||||||
git config credential.helper 'store'
|
git config credential.helper 'store'
|
Loading…
x
Reference in New Issue
Block a user