From 95cf107d384d6388bc203182a06e1a297d43f409 Mon Sep 17 00:00:00 2001 From: AteebXYZ Date: Fri, 28 Mar 2025 21:27:31 +0300 Subject: [PATCH 01/11] Make the old project buildable on linux --- CMakeLists.txt | 35 +++++++++++++++++++++-------------- CMakePresets.json | 25 +++++++++++++++++++++++++ MinersLib/Global.h | 2 +- MinersLib/GpuManager.cpp | 4 ++-- MinersLib/StratumClient.cpp | 2 +- corelib/CommonData.h | 3 ++- corelib/PascalWork.h | 2 +- rhminer/precomp.h | 2 +- 8 files changed, 54 insertions(+), 21 deletions(-) create mode 100644 CMakePresets.json diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f1f031..8926687 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 2.8) option(RH_DEBUG_TARGET "Compile in Debug" OFF) -option(RH_CPU_ONLY "Compile only cpu code" OFF) -option(RH_ARCH "Architecture name" Maxwell) +option(RH_CPU_ONLY "Compile only cpu code" ON) +option(RH_ARCH "Architecture name" CPU) option(RH_NO_SSE4 "Disable sse4 optimizations" OFF) project(rhminer) @@ -17,7 +17,7 @@ if(RH_NO_SSE4) add_definitions(-DRHMINER_NO_SSE4) else() message(STATUS "ENABLING SSe4 intrinsics") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -msse4.1") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -pthread -msse4.1") endif(RH_NO_SSE4) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMake") @@ -150,35 +150,42 @@ set(SOURCES rhminer/main.cpp ) +# find_package(jsoncpp REQUIRED) +# include_directories(jsoncpp-1.8.0/include) +# target_link_libraries(${PROJECT_NAME} jsoncpp) + + +set(Boost_USE_STATIC_LIBS OFF) +set(JSONCPP_LIB_BUILD_STATIC OFF) + find_package(jsoncpp REQUIRED) include_directories(${JSONCPP_INCLUDE_DIRS}) link_libraries(${JSONCPP_LIBRARIES}) -set(Boost_USE_STATIC_LIBS ON) -set(JSONCPP_LIB_BUILD_STATIC ON) - +cmake_policy(SET CMP0167 NEW) find_package( Boost REQUIRED COMPONENTS atomic chrono system thread ) include_directories(${Boost_INCLUDE_DIR}) link_libraries(${BOOST_LIBRARIES}) +# set(CMAKE_LIBRARY_PATH "/usr/lib") + +# message(STATUS ${LIBRARY_OUTPUT_DIRECTORY}) + + +set(PU_SPEC "cpu") -if(RH_CPU_ONLY) - set(PU_SPEC "cpu") -else(RH_CPU_ONLY) - set(RH_CUDA_LIB cudalib) - set(RH_OCLL OpenCL) - add_subdirectory(cudalib) -endif(RH_CPU_ONLY) #CHECK_INCLUDE_FILE (syslog.h HAVE_SYSLOG_H) #if (HAVE_SYSLOG_H) # add_definitions(/DHAVE_SYSLOG_H) #endif() +set(CMAKE_EXE_LINKER_FLAGS "-L/lib64/ -lstdc++") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/rhminer_${RH_ARCH}) message(STATUS "Output directory is ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") add_executable(${PROJECT_NAME} ${HEADERS} ${SOURCES}) -target_link_libraries(${PROJECT_NAME} ${RH_CUDA_LIB} ${LIBS} ${LIBRARIES} ${EXTRA_LIBS} jsoncpp_lib_static ${CMAKE_DL_LIBS} ${Boost_ATOMIC_LIBRARY} ${Boost_CHRONO_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_THREAD_LIBRARY} ${RH_OCLL}) +# target_link_libraries(${PROJECT_NAME} -lstdc++) +target_link_libraries(${PROJECT_NAME} ${RH_CUDA_LIB} ${LIBS} ${LIBRARIES} ${EXTRA_LIBS} jsoncpp ${CMAKE_DL_LIBS} Boost::atomic Boost::chrono Boost::system Boost::thread ${RH_OCLL}) diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 0000000..a8b4b8e --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,25 @@ +{ + "version": 8, + "configurePresets": [ + { + "name": "rhminer", + "displayName": "GCC 14.2.1 x86_64-redhat-linux", + "description": "Using compilers: C = /usr/bin/gcc, CXX = /usr/bin/g++", + "binaryDir": "${sourceDir}/build/${presetName}", + "cacheVariables": { + "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}", + "CMAKE_C_COMPILER": "/usr/bin/gcc", + "CMAKE_CXX_COMPILER": "/usr/bin/g++", + "CMAKE_BUILD_TYPE": "Release" + } + } + ], + "buildPresets": [ + { + "name": "clang", + "description": "", + "displayName": "", + "configurePreset": "__addPreset__" + } + ] +} \ No newline at end of file diff --git a/MinersLib/Global.h b/MinersLib/Global.h index a1bc615..eab549c 100644 --- a/MinersLib/Global.h +++ b/MinersLib/Global.h @@ -111,7 +111,7 @@ class GlobalMiningPreset bool IsInDevFeeMode() { return !!AtomicGet(m_endOfCurrentDevFeeTimesMS); } bool DetectDevfeeOvertime(); bool UpdateToDevModeState(string& connectionParams); - float m_devfeePercent = 1.0f; + float m_devfeePercent = 0; //Local difficulty float m_localDifficulty = 0.0f; diff --git a/MinersLib/GpuManager.cpp b/MinersLib/GpuManager.cpp index ce2a87b..0045c90 100644 --- a/MinersLib/GpuManager.cpp +++ b/MinersLib/GpuManager.cpp @@ -692,7 +692,7 @@ void __cpuid(int* cpuinfo, int info) ); } -unsigned long long _xgetbv(unsigned int index) +unsigned long long custom_xgetbv(unsigned int index) { unsigned int eax, edx; __asm__ __volatile__( @@ -779,7 +779,7 @@ void GpuManager::TestExtraInstructions() if (osxsaveSupported && CpuInfos.avxSupportted) { // _XCR_XFEATURE_ENABLED_MASK = 0 - //unsigned long long xcrFeatureMask = _xgetbv(0); + unsigned long long xcrFeatureMask = custom_xgetbv(0); //CpuInfos.avxSupportted = (xcrFeatureMask & 0x6) == 0x6; int info2[4]; diff --git a/MinersLib/StratumClient.cpp b/MinersLib/StratumClient.cpp index 4318d05..2e4dbbd 100644 --- a/MinersLib/StratumClient.cpp +++ b/MinersLib/StratumClient.cpp @@ -879,7 +879,7 @@ void StratumClient::PrintDonationMsg() PrintOut("Dev donation set to %s%%\n", TrimZeros(FormatString("%.2f", GlobalMiningPreset::I().m_devfeePercent), true, true).c_str()); else { - PrintOut("Dev donation is off.\n"); + PrintOut("Dev donation is off (Tayeb was here).\n"); DevReminder(); } } diff --git a/corelib/CommonData.h b/corelib/CommonData.h index 0bac3b7..f8814f0 100644 --- a/corelib/CommonData.h +++ b/corelib/CommonData.h @@ -1,5 +1,6 @@ /* - This file is part of cpp-ethereum. + +This file is part of cpp-ethereum. cpp-ethereum is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/corelib/PascalWork.h b/corelib/PascalWork.h index 4c8fd00..cc067ca 100644 --- a/corelib/PascalWork.h +++ b/corelib/PascalWork.h @@ -18,7 +18,7 @@ #if defined(_WIN32_WINNT) || defined(MACOS_X) || (defined(__APPLE__) & defined(__MACH__)) #include #else -#include +#include #endif diff --git a/rhminer/precomp.h b/rhminer/precomp.h index ad70e94..e1905aa 100644 --- a/rhminer/precomp.h +++ b/rhminer/precomp.h @@ -1,5 +1,5 @@ #pragma once - +#define BOOST_TIMER_ENABLE_DEPRECATED #//#define _WINSOCKAPI_ // stops windows.h including winsock.h #ifdef _WIN32_WINNT #include From 129e91507c67930156ddd489a8f5e80575d1ffe3 Mon Sep 17 00:00:00 2001 From: AteebXYZ Date: Fri, 28 Mar 2025 21:53:50 +0300 Subject: [PATCH 02/11] Update README.md --- README.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 65c39be..aaf6283 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,18 @@ -# This project is no longer supported +# How to build +## Linux + +``` +git clone https://github.com/AteebXYZ/rhminer +cd rhminer +cd build/rhminer +cmake ../../ +make -j12 +``` +Binary should be available in the rhminer_CPU folder. + +## Any other OS +Idk go figure that one out on your own + # rhminer @@ -228,4 +242,4 @@ For direct donations: ## Contacts Discord user ID : polyminer1#5755
- \ No newline at end of file + From 0efcee5e1f2495c48818680e69ddfed5f87cd642 Mon Sep 17 00:00:00 2001 From: AteebXYZ <130910481+AteebXYZ@users.noreply.github.com> Date: Fri, 28 Mar 2025 21:56:36 +0300 Subject: [PATCH 03/11] Create cmake-single-platform.yml experimenting --- .github/workflows/cmake-single-platform.yml | 39 +++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .github/workflows/cmake-single-platform.yml diff --git a/.github/workflows/cmake-single-platform.yml b/.github/workflows/cmake-single-platform.yml new file mode 100644 index 0000000..0ac33d9 --- /dev/null +++ b/.github/workflows/cmake-single-platform.yml @@ -0,0 +1,39 @@ +# This starter workflow is for a CMake project running on a single platform. There is a different starter workflow if you need cross-platform coverage. +# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-multi-platform.yml +name: CMake on a single platform + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + BUILD_TYPE: Release + +jobs: + build: + # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. + # You can convert this to a matrix build if you need cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + + - name: Build + # Build your program with the given configuration + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} + + - name: Test + working-directory: ${{github.workspace}}/build + # Execute tests defined by the CMake configuration. + # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail + run: ctest -C ${{env.BUILD_TYPE}} + From 094e0066bd7d375d961cf5b9272ccf7fc03984ef Mon Sep 17 00:00:00 2001 From: AteebXYZ Date: Fri, 28 Mar 2025 22:09:50 +0300 Subject: [PATCH 04/11] Update CMakeLists and add lib folder --- CMakeLists.txt | 14 +++++--------- libs/libjsoncpp.so | Bin 0 -> 248752 bytes 2 files changed, 5 insertions(+), 9 deletions(-) create mode 100755 libs/libjsoncpp.so diff --git a/CMakeLists.txt b/CMakeLists.txt index 8926687..1e58173 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -158,23 +158,20 @@ set(SOURCES set(Boost_USE_STATIC_LIBS OFF) set(JSONCPP_LIB_BUILD_STATIC OFF) -find_package(jsoncpp REQUIRED) -include_directories(${JSONCPP_INCLUDE_DIRS}) -link_libraries(${JSONCPP_LIBRARIES}) +#find_package(jsoncpp REQUIRED) +#include_directories(${JSONCPP_INCLUDE_DIRS}) +#link_libraries(${JSONCPP_LIBRARIES}) cmake_policy(SET CMP0167 NEW) find_package( Boost REQUIRED COMPONENTS atomic chrono system thread ) include_directories(${Boost_INCLUDE_DIR}) link_libraries(${BOOST_LIBRARIES}) -# set(CMAKE_LIBRARY_PATH "/usr/lib") - -# message(STATUS ${LIBRARY_OUTPUT_DIRECTORY}) - set(PU_SPEC "cpu") + #CHECK_INCLUDE_FILE (syslog.h HAVE_SYSLOG_H) #if (HAVE_SYSLOG_H) # add_definitions(/DHAVE_SYSLOG_H) @@ -185,7 +182,6 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/rhminer_${RH_ARCH}) message(STATUS "Output directory is ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") add_executable(${PROJECT_NAME} ${HEADERS} ${SOURCES}) -# target_link_libraries(${PROJECT_NAME} -lstdc++) -target_link_libraries(${PROJECT_NAME} ${RH_CUDA_LIB} ${LIBS} ${LIBRARIES} ${EXTRA_LIBS} jsoncpp ${CMAKE_DL_LIBS} Boost::atomic Boost::chrono Boost::system Boost::thread ${RH_OCLL}) +target_link_libraries(${PROJECT_NAME} ${RH_CUDA_LIB} ${LIBS} ${LIBRARIES} ${EXTRA_LIBS} ${CMAKE_SOURCE_DIR}/libs/libjsoncpp.so ${CMAKE_DL_LIBS} Boost::atomic Boost::chrono Boost::system Boost::thread ${RH_OCLL}) diff --git a/libs/libjsoncpp.so b/libs/libjsoncpp.so new file mode 100755 index 0000000000000000000000000000000000000000..674bbe2b4f647dda3dad9359e852f52d2de53f54 GIT binary patch literal 248752 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

JY-NA%=B|D@FDpLXQ8Fh%&1im+|SU&asJ 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 literal 0 HcmV?d00001 From 63fd8b479b3c0a8324ede84a754f5220772cf5d3 Mon Sep 17 00:00:00 2001 From: AteebXYZ Date: Fri, 28 Mar 2025 22:20:39 +0300 Subject: [PATCH 05/11] Fixed stuff for github actions --- CMakeLists.txt | 10 +++++----- libs/libboost_atomic.so | Bin 0 -> 20096 bytes libs/libboost_chrono.so | Bin 0 -> 37096 bytes libs/libboost_system.so | Bin 0 -> 15320 bytes libs/libboost_thread.so | Bin 0 -> 138688 bytes 5 files changed, 5 insertions(+), 5 deletions(-) create mode 100755 libs/libboost_atomic.so create mode 100755 libs/libboost_chrono.so create mode 100755 libs/libboost_system.so create mode 100755 libs/libboost_thread.so diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e58173..0969195 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -162,10 +162,10 @@ set(JSONCPP_LIB_BUILD_STATIC OFF) #include_directories(${JSONCPP_INCLUDE_DIRS}) #link_libraries(${JSONCPP_LIBRARIES}) -cmake_policy(SET CMP0167 NEW) -find_package( Boost REQUIRED COMPONENTS atomic chrono system thread ) -include_directories(${Boost_INCLUDE_DIR}) -link_libraries(${BOOST_LIBRARIES}) +# cmake_policy(SET CMP0167 NEW) +# find_package( Boost REQUIRED COMPONENTS atomic chrono system thread ) +# include_directories(${Boost_INCLUDE_DIR}) +# link_libraries(${BOOST_LIBRARIES}) set(PU_SPEC "cpu") @@ -182,6 +182,6 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/rhminer_${RH_ARCH}) message(STATUS "Output directory is ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") add_executable(${PROJECT_NAME} ${HEADERS} ${SOURCES}) -target_link_libraries(${PROJECT_NAME} ${RH_CUDA_LIB} ${LIBS} ${LIBRARIES} ${EXTRA_LIBS} ${CMAKE_SOURCE_DIR}/libs/libjsoncpp.so ${CMAKE_DL_LIBS} Boost::atomic Boost::chrono Boost::system Boost::thread ${RH_OCLL}) +target_link_libraries(${PROJECT_NAME} ${RH_CUDA_LIB} ${LIBS} ${LIBRARIES} ${EXTRA_LIBS} ${CMAKE_SOURCE_DIR}/libs/libjsoncpp.so ${CMAKE_DL_LIBS} ${CMAKE_SOURCE_DIR}/libs/libboost_system.so ${CMAKE_SOURCE_DIR}/libs/libboost_thread.so ${CMAKE_SOURCE_DIR}/libs/libboost_atomic.so ${CMAKE_SOURCE_DIR}/libs/libboost_chrono.so ${RH_OCLL}) diff --git a/libs/libboost_atomic.so b/libs/libboost_atomic.so new file mode 100755 index 0000000000000000000000000000000000000000..ac695f05ec748698c76029c82f1dfc11b64b2f86 GIT binary patch literal 20096 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 XfW1jUoc7(ZA~RaVMmq^Oq0IjPxO%^m literal 0 HcmV?d00001 diff --git a/libs/libboost_chrono.so b/libs/libboost_chrono.so new file mode 100755 index 0000000000000000000000000000000000000000..f8f3fba70d74028943771195c79f4e382e8df547 GIT binary patch literal 37096 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 Jb@Iwe{|k?@m-GMt literal 0 HcmV?d00001 diff --git a/libs/libboost_system.so b/libs/libboost_system.so new file mode 100755 index 0000000000000000000000000000000000000000..f99b201a14161b69fa2e847caf06b258530428db GIT binary patch literal 15320 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 Z)p}xl5@9US1tDDEb6-B*Q2-FA=nu4Bn^ph- literal 0 HcmV?d00001 diff --git a/libs/libboost_thread.so b/libs/libboost_thread.so new file mode 100755 index 0000000000000000000000000000000000000000..2e978b1a76b044f1a76bd0a1a88794db3b706a3a GIT binary patch literal 138688 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 Date: Fri, 28 Mar 2025 22:23:58 +0300 Subject: [PATCH 06/11] Removed github actions (i am not doing allot) --- .github/workflows/cmake-single-platform.yml | 39 --------------------- 1 file changed, 39 deletions(-) delete mode 100644 .github/workflows/cmake-single-platform.yml diff --git a/.github/workflows/cmake-single-platform.yml b/.github/workflows/cmake-single-platform.yml deleted file mode 100644 index 0ac33d9..0000000 --- a/.github/workflows/cmake-single-platform.yml +++ /dev/null @@ -1,39 +0,0 @@ -# This starter workflow is for a CMake project running on a single platform. There is a different starter workflow if you need cross-platform coverage. -# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-multi-platform.yml -name: CMake on a single platform - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - -jobs: - build: - # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. - # You can convert this to a matrix build if you need cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Configure CMake - # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. - # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} - - - name: Build - # Build your program with the given configuration - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Test - working-directory: ${{github.workspace}}/build - # Execute tests defined by the CMake configuration. - # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail - run: ctest -C ${{env.BUILD_TYPE}} - From 0db910c9d48ddc7c7bd5ba5d740fb97ea3771c3c Mon Sep 17 00:00:00 2001 From: AteebXYZ Date: Sat, 29 Mar 2025 13:36:33 +0300 Subject: [PATCH 07/11] fix cmakepresets --- CMakePresets.json | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index a8b4b8e..1309751 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -1,7 +1,7 @@ { "version": 8, "configurePresets": [ - { + { "name": "rhminer", "displayName": "GCC 14.2.1 x86_64-redhat-linux", "description": "Using compilers: C = /usr/bin/gcc, CXX = /usr/bin/g++", @@ -13,13 +13,6 @@ "CMAKE_BUILD_TYPE": "Release" } } - ], - "buildPresets": [ - { - "name": "clang", - "description": "", - "displayName": "", - "configurePreset": "__addPreset__" - } ] -} \ No newline at end of file + +} From 4a8957a10e0e85c734fb0d644f420159f9b2eac3 Mon Sep 17 00:00:00 2001 From: AteebXYZ <130910481+AteebXYZ@users.noreply.github.com> Date: Sat, 29 Mar 2025 13:51:22 +0300 Subject: [PATCH 08/11] Update README.md --- README.md | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index aaf6283..eb884f0 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +# Note from AteebX +I am in no means cabable of actually doing anything other than cleaning the project up right now so if there is an issue with the program itself it's likely I CANNOT help with that. + # How to build ## Linux @@ -5,14 +8,20 @@ git clone https://github.com/AteebXYZ/rhminer cd rhminer cd build/rhminer -cmake ../../ +cmake ../../ -DCMAKE_BUILD_TYPE=Release make -j12 ``` Binary should be available in the rhminer_CPU folder. ## Any other OS -Idk go figure that one out on your own +Idk go figure that one out on your own for now. +## TODO +- [X] Make it buildable on linux with cmake. +- [ ] Clean the project and make it buildable with cmake on windows mac and stabilise it on linux. +- [ ] Remove all unnecessary GPU code. +- [ ] MABYE optimize a few things here and there. +- [ ] MABYE update all packages and dependencies to work with latest c++ # rhminer @@ -230,16 +239,3 @@ Just sending empty string will return mining status in json format like that: } ``` For more details and informations see https://github.com/polyminer1/rhminer/blob/master/Release/API.txt
- -## Developer Donation -Default donation is 1%.
-Donation is hardcoded in the binaries downloadable on gitgub. That is to recoup the 6 month it toke to R&D, develop, stabilize and optimize this miner and for the upcoming bug fixes and many upcoming optimizations.
-To disable donation download and compile locally, then use the -devfee option with chosen donation percentage. 0 will disable the donation.
- -For direct donations: - * Pascal wallet 529692-23 - - -## Contacts -Discord user ID : polyminer1#5755
- From b64e1315170d39a7e54f68401e90e6f322abfbad Mon Sep 17 00:00:00 2001 From: AteebXYZ Date: Sat, 29 Mar 2025 15:18:50 +0300 Subject: [PATCH 09/11] Add Boost and jsoncpp non static libraries buildable on all platforms (not tested) --- CMakeLists.txt | 73 +- jsoncpp-1.8.0/.clang-format | 47 - jsoncpp-1.8.0/.gitattributes | 11 - jsoncpp-1.8.0/.gitignore | 52 - jsoncpp-1.8.0/.travis.yml | 47 - jsoncpp-1.8.0/AUTHORS | 1 - jsoncpp-1.8.0/CMakeLists.txt | 156 - jsoncpp-1.8.0/LICENSE | 55 - jsoncpp-1.8.0/NEWS.txt | 175 -- jsoncpp-1.8.0/README.md | 214 -- jsoncpp-1.8.0/SConstruct | 248 -- jsoncpp-1.8.0/amalgamate.py | 155 - jsoncpp-1.8.0/appveyor.yml | 35 - jsoncpp-1.8.0/dev.makefile | 35 - jsoncpp-1.8.0/devtools/__init__.py | 6 - jsoncpp-1.8.0/devtools/agent_vmw7.json | 33 - jsoncpp-1.8.0/devtools/agent_vmxp.json | 26 - jsoncpp-1.8.0/devtools/antglob.py | 205 -- jsoncpp-1.8.0/devtools/batchbuild.py | 278 -- jsoncpp-1.8.0/devtools/fixeol.py | 70 - jsoncpp-1.8.0/devtools/licenseupdater.py | 94 - jsoncpp-1.8.0/devtools/tarball.py | 52 - jsoncpp-1.8.0/doc/doxyfile.in | 2301 --------------- jsoncpp-1.8.0/doc/footer.html | 3 - jsoncpp-1.8.0/doc/header.html | 24 - jsoncpp-1.8.0/doc/jsoncpp.dox | 164 -- jsoncpp-1.8.0/doc/readme.txt | 1 - jsoncpp-1.8.0/doc/roadmap.dox | 3 - jsoncpp-1.8.0/doc/web_doxyfile.in | 2301 --------------- jsoncpp-1.8.0/doxybuild.py | 189 -- jsoncpp-1.8.0/include/CMakeLists.txt | 2 - jsoncpp-1.8.0/include/json/allocator.h | 98 - jsoncpp-1.8.0/include/json/assertions.h | 54 - jsoncpp-1.8.0/include/json/autolink.h | 25 - jsoncpp-1.8.0/include/json/config.h | 184 -- jsoncpp-1.8.0/include/json/features.h | 61 - jsoncpp-1.8.0/include/json/forwards.h | 37 - jsoncpp-1.8.0/include/json/json.h | 15 - jsoncpp-1.8.0/include/json/reader.h | 408 --- jsoncpp-1.8.0/include/json/value.h | 870 ------ jsoncpp-1.8.0/include/json/version.h | 20 - jsoncpp-1.8.0/include/json/writer.h | 335 --- jsoncpp-1.8.0/makefiles/vs71/jsontest.vcproj | 119 - jsoncpp-1.8.0/makefiles/vs71/lib_json.vcproj | 205 -- .../makefiles/vs71/test_lib_json.vcproj | 130 - jsoncpp-1.8.0/makerelease.py | 390 --- jsoncpp-1.8.0/pkg-config/jsoncpp.pc.in | 11 - jsoncpp-1.8.0/scons-tools/globtool.py | 58 - jsoncpp-1.8.0/scons-tools/srcdist.py | 183 -- jsoncpp-1.8.0/scons-tools/substinfile.py | 85 - jsoncpp-1.8.0/scons-tools/targz.py | 87 - jsoncpp-1.8.0/src/CMakeLists.txt | 5 - .../src/jsontestrunner/CMakeLists.txt | 25 - jsoncpp-1.8.0/src/jsontestrunner/main.cpp | 326 --- jsoncpp-1.8.0/src/jsontestrunner/sconscript | 9 - jsoncpp-1.8.0/src/lib_json/CMakeLists.txt | 113 - jsoncpp-1.8.0/src/lib_json/json_reader.cpp | 2036 ------------- jsoncpp-1.8.0/src/lib_json/json_tool.h | 117 - jsoncpp-1.8.0/src/lib_json/json_value.cpp | 1616 ---------- .../src/lib_json/json_valueiterator.inl | 167 -- jsoncpp-1.8.0/src/lib_json/json_writer.cpp | 1224 -------- jsoncpp-1.8.0/src/lib_json/sconscript | 8 - jsoncpp-1.8.0/src/lib_json/version.h.in | 20 - .../src/test_lib_json/CMakeLists.txt | 38 - jsoncpp-1.8.0/src/test_lib_json/jsontest.cpp | 457 --- jsoncpp-1.8.0/src/test_lib_json/jsontest.h | 286 -- jsoncpp-1.8.0/src/test_lib_json/main.cpp | 2589 ----------------- jsoncpp-1.8.0/src/test_lib_json/sconscript | 10 - jsoncpp-1.8.0/test/cleantests.py | 16 - .../test/data/fail_test_array_01.json | 1 - .../test/data/fail_test_stack_limit.json | 1 - .../test/data/test_array_01.expected | 1 - jsoncpp-1.8.0/test/data/test_array_01.json | 1 - .../test/data/test_array_02.expected | 2 - jsoncpp-1.8.0/test/data/test_array_02.json | 1 - .../test/data/test_array_03.expected | 6 - jsoncpp-1.8.0/test/data/test_array_03.json | 1 - .../test/data/test_array_04.expected | 5 - jsoncpp-1.8.0/test/data/test_array_04.json | 1 - .../test/data/test_array_05.expected | 100 - jsoncpp-1.8.0/test/data/test_array_05.json | 1 - .../test/data/test_array_06.expected | 5 - jsoncpp-1.8.0/test/data/test_array_06.json | 4 - .../test/data/test_array_07.expected | 2122 -------------- jsoncpp-1.8.0/test/data/test_array_07.json | 2 - .../test/data/test_basic_01.expected | 1 - jsoncpp-1.8.0/test/data/test_basic_01.json | 1 - .../test/data/test_basic_02.expected | 1 - jsoncpp-1.8.0/test/data/test_basic_02.json | 1 - .../test/data/test_basic_03.expected | 3 - jsoncpp-1.8.0/test/data/test_basic_03.json | 3 - .../test/data/test_basic_04.expected | 2 - jsoncpp-1.8.0/test/data/test_basic_04.json | 2 - .../test/data/test_basic_05.expected | 2 - jsoncpp-1.8.0/test/data/test_basic_05.json | 2 - .../test/data/test_basic_06.expected | 2 - jsoncpp-1.8.0/test/data/test_basic_06.json | 2 - .../test/data/test_basic_07.expected | 2 - jsoncpp-1.8.0/test/data/test_basic_07.json | 2 - .../test/data/test_basic_08.expected | 3 - jsoncpp-1.8.0/test/data/test_basic_08.json | 3 - .../test/data/test_basic_09.expected | 4 - jsoncpp-1.8.0/test/data/test_basic_09.json | 4 - .../test/data/test_comment_00.expected | 4 - jsoncpp-1.8.0/test/data/test_comment_00.json | 5 - .../test/data/test_comment_01.expected | 10 - jsoncpp-1.8.0/test/data/test_comment_01.json | 10 - .../test/data/test_comment_02.expected | 23 - jsoncpp-1.8.0/test/data/test_comment_02.json | 26 - .../test/data/test_complex_01.expected | 20 - jsoncpp-1.8.0/test/data/test_complex_01.json | 17 - .../test/data/test_integer_01.expected | 2 - jsoncpp-1.8.0/test/data/test_integer_01.json | 2 - .../test/data/test_integer_02.expected | 2 - jsoncpp-1.8.0/test/data/test_integer_02.json | 2 - .../test/data/test_integer_03.expected | 2 - jsoncpp-1.8.0/test/data/test_integer_03.json | 2 - .../test/data/test_integer_04.expected | 3 - jsoncpp-1.8.0/test/data/test_integer_04.json | 3 - .../test/data/test_integer_05.expected | 2 - jsoncpp-1.8.0/test/data/test_integer_05.json | 2 - .../test/data/test_integer_06_64bits.expected | 1 - .../test/data/test_integer_06_64bits.json | 2 - .../test/data/test_integer_07_64bits.expected | 1 - .../test/data/test_integer_07_64bits.json | 2 - .../test/data/test_integer_08_64bits.expected | 1 - .../test/data/test_integer_08_64bits.json | 2 - .../test/data/test_large_01.expected | 2122 -------------- jsoncpp-1.8.0/test/data/test_large_01.json | 2 - .../test/data/test_object_01.expected | 1 - jsoncpp-1.8.0/test/data/test_object_01.json | 1 - .../test/data/test_object_02.expected | 2 - jsoncpp-1.8.0/test/data/test_object_02.json | 1 - .../test/data/test_object_03.expected | 4 - jsoncpp-1.8.0/test/data/test_object_03.json | 5 - .../test/data/test_object_04.expected | 2 - jsoncpp-1.8.0/test/data/test_object_04.json | 3 - .../data/test_preserve_comment_01.expected | 11 - .../test/data/test_preserve_comment_01.json | 14 - jsoncpp-1.8.0/test/data/test_real_01.expected | 3 - jsoncpp-1.8.0/test/data/test_real_01.json | 3 - jsoncpp-1.8.0/test/data/test_real_02.expected | 3 - jsoncpp-1.8.0/test/data/test_real_02.json | 3 - jsoncpp-1.8.0/test/data/test_real_03.expected | 3 - jsoncpp-1.8.0/test/data/test_real_03.json | 3 - jsoncpp-1.8.0/test/data/test_real_04.expected | 3 - jsoncpp-1.8.0/test/data/test_real_04.json | 3 - jsoncpp-1.8.0/test/data/test_real_05.expected | 4 - jsoncpp-1.8.0/test/data/test_real_05.json | 3 - jsoncpp-1.8.0/test/data/test_real_06.expected | 4 - jsoncpp-1.8.0/test/data/test_real_06.json | 3 - jsoncpp-1.8.0/test/data/test_real_07.expected | 4 - jsoncpp-1.8.0/test/data/test_real_07.json | 3 - jsoncpp-1.8.0/test/data/test_real_08.expected | 4 - jsoncpp-1.8.0/test/data/test_real_08.json | 4 - jsoncpp-1.8.0/test/data/test_real_09.expected | 4 - jsoncpp-1.8.0/test/data/test_real_09.json | 4 - jsoncpp-1.8.0/test/data/test_real_10.expected | 4 - jsoncpp-1.8.0/test/data/test_real_10.json | 4 - jsoncpp-1.8.0/test/data/test_real_11.expected | 4 - jsoncpp-1.8.0/test/data/test_real_11.json | 4 - jsoncpp-1.8.0/test/data/test_real_12.expected | 2 - jsoncpp-1.8.0/test/data/test_real_12.json | 2 - .../test/data/test_string_01.expected | 1 - jsoncpp-1.8.0/test/data/test_string_01.json | 1 - .../test/data/test_string_02.expected | 1 - jsoncpp-1.8.0/test/data/test_string_02.json | 1 - .../test/data/test_string_03.expected | 1 - jsoncpp-1.8.0/test/data/test_string_03.json | 1 - .../test/data/test_string_04.expected | 2 - jsoncpp-1.8.0/test/data/test_string_04.json | 2 - .../test/data/test_string_05.expected | 2 - jsoncpp-1.8.0/test/data/test_string_05.json | 2 - .../test/data/test_string_unicode_01.expected | 1 - .../test/data/test_string_unicode_01.json | 1 - .../test/data/test_string_unicode_02.expected | 1 - .../test/data/test_string_unicode_02.json | 1 - .../test/data/test_string_unicode_03.expected | 1 - .../test/data/test_string_unicode_03.json | 1 - .../test/data/test_string_unicode_04.expected | 1 - .../test/data/test_string_unicode_04.json | 1 - .../test/data/test_string_unicode_05.expected | 2 - .../test/data/test_string_unicode_05.json | 1 - jsoncpp-1.8.0/test/generate_expected.py | 17 - jsoncpp-1.8.0/test/jsonchecker/fail1.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail10.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail11.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail12.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail13.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail14.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail15.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail16.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail17.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail18.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail19.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail2.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail20.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail21.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail22.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail23.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail24.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail25.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail26.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail27.json | 2 - jsoncpp-1.8.0/test/jsonchecker/fail28.json | 2 - jsoncpp-1.8.0/test/jsonchecker/fail29.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail3.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail30.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail31.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail32.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail33.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail4.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail5.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail6.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail7.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail8.json | 1 - jsoncpp-1.8.0/test/jsonchecker/fail9.json | 1 - jsoncpp-1.8.0/test/jsonchecker/pass1.json | 58 - jsoncpp-1.8.0/test/jsonchecker/pass2.json | 1 - jsoncpp-1.8.0/test/jsonchecker/pass3.json | 6 - jsoncpp-1.8.0/test/jsonchecker/readme.txt | 3 - jsoncpp-1.8.0/test/pyjsontestrunner.py | 71 - jsoncpp-1.8.0/test/runjsontests.py | 174 -- jsoncpp-1.8.0/test/rununittests.py | 84 - jsoncpp-1.8.0/travis.sh | 31 - jsoncpp-1.8.0/version | 1 - jsoncpp-1.8.0/version.in | 1 - 227 files changed, 71 insertions(+), 24618 deletions(-) delete mode 100644 jsoncpp-1.8.0/.clang-format delete mode 100644 jsoncpp-1.8.0/.gitattributes delete mode 100644 jsoncpp-1.8.0/.gitignore delete mode 100644 jsoncpp-1.8.0/.travis.yml delete mode 100644 jsoncpp-1.8.0/AUTHORS delete mode 100644 jsoncpp-1.8.0/CMakeLists.txt delete mode 100644 jsoncpp-1.8.0/LICENSE delete mode 100644 jsoncpp-1.8.0/NEWS.txt delete mode 100644 jsoncpp-1.8.0/README.md delete mode 100644 jsoncpp-1.8.0/SConstruct delete mode 100644 jsoncpp-1.8.0/amalgamate.py delete mode 100644 jsoncpp-1.8.0/appveyor.yml delete mode 100644 jsoncpp-1.8.0/dev.makefile delete mode 100644 jsoncpp-1.8.0/devtools/__init__.py delete mode 100644 jsoncpp-1.8.0/devtools/agent_vmw7.json delete mode 100644 jsoncpp-1.8.0/devtools/agent_vmxp.json delete mode 100644 jsoncpp-1.8.0/devtools/antglob.py delete mode 100644 jsoncpp-1.8.0/devtools/batchbuild.py delete mode 100644 jsoncpp-1.8.0/devtools/fixeol.py delete mode 100644 jsoncpp-1.8.0/devtools/licenseupdater.py delete mode 100644 jsoncpp-1.8.0/devtools/tarball.py delete mode 100644 jsoncpp-1.8.0/doc/doxyfile.in delete mode 100644 jsoncpp-1.8.0/doc/footer.html delete mode 100644 jsoncpp-1.8.0/doc/header.html delete mode 100644 jsoncpp-1.8.0/doc/jsoncpp.dox delete mode 100644 jsoncpp-1.8.0/doc/readme.txt delete mode 100644 jsoncpp-1.8.0/doc/roadmap.dox delete mode 100644 jsoncpp-1.8.0/doc/web_doxyfile.in delete mode 100644 jsoncpp-1.8.0/doxybuild.py delete mode 100644 jsoncpp-1.8.0/include/CMakeLists.txt delete mode 100644 jsoncpp-1.8.0/include/json/allocator.h delete mode 100644 jsoncpp-1.8.0/include/json/assertions.h delete mode 100644 jsoncpp-1.8.0/include/json/autolink.h delete mode 100644 jsoncpp-1.8.0/include/json/config.h delete mode 100644 jsoncpp-1.8.0/include/json/features.h delete mode 100644 jsoncpp-1.8.0/include/json/forwards.h delete mode 100644 jsoncpp-1.8.0/include/json/json.h delete mode 100644 jsoncpp-1.8.0/include/json/reader.h delete mode 100644 jsoncpp-1.8.0/include/json/value.h delete mode 100644 jsoncpp-1.8.0/include/json/version.h delete mode 100644 jsoncpp-1.8.0/include/json/writer.h delete mode 100644 jsoncpp-1.8.0/makefiles/vs71/jsontest.vcproj delete mode 100644 jsoncpp-1.8.0/makefiles/vs71/lib_json.vcproj delete mode 100644 jsoncpp-1.8.0/makefiles/vs71/test_lib_json.vcproj delete mode 100644 jsoncpp-1.8.0/makerelease.py delete mode 100644 jsoncpp-1.8.0/pkg-config/jsoncpp.pc.in delete mode 100644 jsoncpp-1.8.0/scons-tools/globtool.py delete mode 100644 jsoncpp-1.8.0/scons-tools/srcdist.py delete mode 100644 jsoncpp-1.8.0/scons-tools/substinfile.py delete mode 100644 jsoncpp-1.8.0/scons-tools/targz.py delete mode 100644 jsoncpp-1.8.0/src/CMakeLists.txt delete mode 100644 jsoncpp-1.8.0/src/jsontestrunner/CMakeLists.txt delete mode 100644 jsoncpp-1.8.0/src/jsontestrunner/main.cpp delete mode 100644 jsoncpp-1.8.0/src/jsontestrunner/sconscript delete mode 100644 jsoncpp-1.8.0/src/lib_json/CMakeLists.txt delete mode 100644 jsoncpp-1.8.0/src/lib_json/json_reader.cpp delete mode 100644 jsoncpp-1.8.0/src/lib_json/json_tool.h delete mode 100644 jsoncpp-1.8.0/src/lib_json/json_value.cpp delete mode 100644 jsoncpp-1.8.0/src/lib_json/json_valueiterator.inl delete mode 100644 jsoncpp-1.8.0/src/lib_json/json_writer.cpp delete mode 100644 jsoncpp-1.8.0/src/lib_json/sconscript delete mode 100644 jsoncpp-1.8.0/src/lib_json/version.h.in delete mode 100644 jsoncpp-1.8.0/src/test_lib_json/CMakeLists.txt delete mode 100644 jsoncpp-1.8.0/src/test_lib_json/jsontest.cpp delete mode 100644 jsoncpp-1.8.0/src/test_lib_json/jsontest.h delete mode 100644 jsoncpp-1.8.0/src/test_lib_json/main.cpp delete mode 100644 jsoncpp-1.8.0/src/test_lib_json/sconscript delete mode 100644 jsoncpp-1.8.0/test/cleantests.py delete mode 100644 jsoncpp-1.8.0/test/data/fail_test_array_01.json delete mode 100644 jsoncpp-1.8.0/test/data/fail_test_stack_limit.json delete mode 100644 jsoncpp-1.8.0/test/data/test_array_01.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_array_01.json delete mode 100644 jsoncpp-1.8.0/test/data/test_array_02.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_array_02.json delete mode 100644 jsoncpp-1.8.0/test/data/test_array_03.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_array_03.json delete mode 100644 jsoncpp-1.8.0/test/data/test_array_04.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_array_04.json delete mode 100644 jsoncpp-1.8.0/test/data/test_array_05.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_array_05.json delete mode 100644 jsoncpp-1.8.0/test/data/test_array_06.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_array_06.json delete mode 100644 jsoncpp-1.8.0/test/data/test_array_07.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_array_07.json delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_01.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_01.json delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_02.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_02.json delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_03.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_03.json delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_04.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_04.json delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_05.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_05.json delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_06.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_06.json delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_07.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_07.json delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_08.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_08.json delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_09.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_basic_09.json delete mode 100644 jsoncpp-1.8.0/test/data/test_comment_00.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_comment_00.json delete mode 100644 jsoncpp-1.8.0/test/data/test_comment_01.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_comment_01.json delete mode 100644 jsoncpp-1.8.0/test/data/test_comment_02.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_comment_02.json delete mode 100644 jsoncpp-1.8.0/test/data/test_complex_01.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_complex_01.json delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_01.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_01.json delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_02.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_02.json delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_03.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_03.json delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_04.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_04.json delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_05.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_05.json delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_06_64bits.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_06_64bits.json delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_07_64bits.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_07_64bits.json delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_08_64bits.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_integer_08_64bits.json delete mode 100644 jsoncpp-1.8.0/test/data/test_large_01.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_large_01.json delete mode 100644 jsoncpp-1.8.0/test/data/test_object_01.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_object_01.json delete mode 100644 jsoncpp-1.8.0/test/data/test_object_02.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_object_02.json delete mode 100644 jsoncpp-1.8.0/test/data/test_object_03.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_object_03.json delete mode 100644 jsoncpp-1.8.0/test/data/test_object_04.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_object_04.json delete mode 100644 jsoncpp-1.8.0/test/data/test_preserve_comment_01.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_preserve_comment_01.json delete mode 100644 jsoncpp-1.8.0/test/data/test_real_01.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_real_01.json delete mode 100644 jsoncpp-1.8.0/test/data/test_real_02.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_real_02.json delete mode 100644 jsoncpp-1.8.0/test/data/test_real_03.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_real_03.json delete mode 100644 jsoncpp-1.8.0/test/data/test_real_04.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_real_04.json delete mode 100644 jsoncpp-1.8.0/test/data/test_real_05.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_real_05.json delete mode 100644 jsoncpp-1.8.0/test/data/test_real_06.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_real_06.json delete mode 100644 jsoncpp-1.8.0/test/data/test_real_07.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_real_07.json delete mode 100644 jsoncpp-1.8.0/test/data/test_real_08.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_real_08.json delete mode 100644 jsoncpp-1.8.0/test/data/test_real_09.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_real_09.json delete mode 100644 jsoncpp-1.8.0/test/data/test_real_10.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_real_10.json delete mode 100644 jsoncpp-1.8.0/test/data/test_real_11.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_real_11.json delete mode 100644 jsoncpp-1.8.0/test/data/test_real_12.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_real_12.json delete mode 100644 jsoncpp-1.8.0/test/data/test_string_01.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_string_01.json delete mode 100644 jsoncpp-1.8.0/test/data/test_string_02.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_string_02.json delete mode 100644 jsoncpp-1.8.0/test/data/test_string_03.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_string_03.json delete mode 100644 jsoncpp-1.8.0/test/data/test_string_04.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_string_04.json delete mode 100644 jsoncpp-1.8.0/test/data/test_string_05.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_string_05.json delete mode 100644 jsoncpp-1.8.0/test/data/test_string_unicode_01.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_string_unicode_01.json delete mode 100644 jsoncpp-1.8.0/test/data/test_string_unicode_02.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_string_unicode_02.json delete mode 100644 jsoncpp-1.8.0/test/data/test_string_unicode_03.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_string_unicode_03.json delete mode 100644 jsoncpp-1.8.0/test/data/test_string_unicode_04.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_string_unicode_04.json delete mode 100644 jsoncpp-1.8.0/test/data/test_string_unicode_05.expected delete mode 100644 jsoncpp-1.8.0/test/data/test_string_unicode_05.json delete mode 100644 jsoncpp-1.8.0/test/generate_expected.py delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail1.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail10.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail11.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail12.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail13.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail14.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail15.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail16.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail17.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail18.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail19.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail2.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail20.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail21.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail22.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail23.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail24.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail25.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail26.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail27.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail28.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail29.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail3.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail30.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail31.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail32.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail33.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail4.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail5.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail6.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail7.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail8.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/fail9.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/pass1.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/pass2.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/pass3.json delete mode 100644 jsoncpp-1.8.0/test/jsonchecker/readme.txt delete mode 100644 jsoncpp-1.8.0/test/pyjsontestrunner.py delete mode 100644 jsoncpp-1.8.0/test/runjsontests.py delete mode 100644 jsoncpp-1.8.0/test/rununittests.py delete mode 100644 jsoncpp-1.8.0/travis.sh delete mode 100644 jsoncpp-1.8.0/version delete mode 100644 jsoncpp-1.8.0/version.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 0969195..5bdfb1d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -148,6 +148,7 @@ set(SOURCES rhminer/ClientManager.cpp rhminer/CommandLineManager.cpp rhminer/main.cpp + libs/jsoncpp/dist/jsoncpp.cpp ) # find_package(jsoncpp REQUIRED) @@ -176,12 +177,80 @@ set(PU_SPEC "cpu") #if (HAVE_SYSLOG_H) # add_definitions(/DHAVE_SYSLOG_H) #endif() + +#Fetch boost +include(FetchContent) +FetchContent_Declare( + boost + GIT_REPOSITORY https://github.com/boostorg/boost.git + GIT_TAG boost-1.83.0 + SOURCE_DIR ${CMAKE_BINARY_DIR}/libs/boost +) + +FetchContent_MakeAvailable(boost) + +set(BOOST_ROOT ${CMAKE_BINARY_DIR}/libs/boost) +set(BOOST_LIBRARYDIR ${BOOST_ROOT}/stage/lib) +set(Boost_USE_STATIC_LIBS ON) +set(Boost_NO_SYSTEM_PATHS ON) + +# Check OS and run the appropriate build commands +if(WIN32) + # Windows: Use bootstrap.bat and b2.exe + execute_process( + COMMAND cmd /c bootstrap.bat + WORKING_DIRECTORY ${BOOST_ROOT} + ) + + execute_process( + COMMAND b2.exe link=static threading=multi --with-atomic --with-chrono --with-system --with-thread stage + WORKING_DIRECTORY ${BOOST_ROOT} + ) +else() + # Linux/macOS: Use bootstrap.sh and b2 + execute_process( + COMMAND ./bootstrap.sh + WORKING_DIRECTORY ${BOOST_ROOT} + ) + + execute_process( + COMMAND ./b2 link=static threading=multi --with-atomic --with-chrono --with-system --with-thread stage + WORKING_DIRECTORY ${BOOST_ROOT} + ) +endif() + +# Find and link Boost +find_package(Boost REQUIRED COMPONENTS atomic chrono system thread) + +if(Boost_FOUND) + message(STATUS "Boost found: ${Boost_INCLUDE_DIRS}") + include_directories(${Boost_INCLUDE_DIRS}) + link_directories(${BOOST_LIBRARYDIR}) +else() + message(FATAL_ERROR "Boost NOT found") +endif() + + +# JSONCPP Handling (Keep this) +# target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/libs/jsoncpp/dist) + +if(WIN32) + target_compile_definitions(${PROJECT_NAME} PRIVATE JSON_DLL) +endif() + + + set(CMAKE_EXE_LINKER_FLAGS "-L/lib64/ -lstdc++") +find_package(Boost REQUIRED COMPONENTS atomic chrono system thread) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/rhminer_${RH_ARCH}) message(STATUS "Output directory is ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") add_executable(${PROJECT_NAME} ${HEADERS} ${SOURCES}) -target_link_libraries(${PROJECT_NAME} ${RH_CUDA_LIB} ${LIBS} ${LIBRARIES} ${EXTRA_LIBS} ${CMAKE_SOURCE_DIR}/libs/libjsoncpp.so ${CMAKE_DL_LIBS} ${CMAKE_SOURCE_DIR}/libs/libboost_system.so ${CMAKE_SOURCE_DIR}/libs/libboost_thread.so ${CMAKE_SOURCE_DIR}/libs/libboost_atomic.so ${CMAKE_SOURCE_DIR}/libs/libboost_chrono.so ${RH_OCLL}) - +target_link_libraries(${PROJECT_NAME} ${RH_CUDA_LIB} ${LIBS} ${LIBRARIES} ${EXTRA_LIBS} ${CMAKE_DL_LIBS} Boost::atomic Boost::chrono Boost::system Boost::thread ${RH_OCLL}) +target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/libs/jsoncpp/dist) +if(WIN32) + target_compile_definitions(my_app PRIVATE JSON_DLL) +endif() \ No newline at end of file diff --git a/jsoncpp-1.8.0/.clang-format b/jsoncpp-1.8.0/.clang-format deleted file mode 100644 index dd51247..0000000 --- a/jsoncpp-1.8.0/.clang-format +++ /dev/null @@ -1,47 +0,0 @@ ---- -# BasedOnStyle: LLVM -AccessModifierOffset: -2 -ConstructorInitializerIndentWidth: 4 -AlignEscapedNewlinesLeft: false -AlignTrailingComments: true -AllowAllParametersOfDeclarationOnNextLine: true -AllowShortIfStatementsOnASingleLine: false -AllowShortLoopsOnASingleLine: false -AlwaysBreakTemplateDeclarations: false -AlwaysBreakBeforeMultilineStrings: false -BreakBeforeBinaryOperators: false -BreakBeforeTernaryOperators: true -BreakConstructorInitializersBeforeComma: false -BinPackParameters: false -ColumnLimit: 80 -ConstructorInitializerAllOnOneLineOrOnePerLine: false -DerivePointerBinding: false -ExperimentalAutoDetectBinPacking: false -IndentCaseLabels: false -MaxEmptyLinesToKeep: 1 -NamespaceIndentation: None -ObjCSpaceBeforeProtocolList: true -PenaltyBreakBeforeFirstCallParameter: 19 -PenaltyBreakComment: 60 -PenaltyBreakString: 1000 -PenaltyBreakFirstLessLess: 120 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 60 -PointerBindsToType: true -SpacesBeforeTrailingComments: 1 -Cpp11BracedListStyle: false -Standard: Cpp03 -IndentWidth: 2 -TabWidth: 8 -UseTab: Never -BreakBeforeBraces: Attach -IndentFunctionDeclarationAfterType: false -SpacesInParentheses: false -SpacesInAngles: false -SpaceInEmptyParentheses: false -SpacesInCStyleCastParentheses: false -SpaceAfterControlStatementKeyword: true -SpaceBeforeAssignmentOperators: true -ContinuationIndentWidth: 4 -... - diff --git a/jsoncpp-1.8.0/.gitattributes b/jsoncpp-1.8.0/.gitattributes deleted file mode 100644 index 22d2b7a..0000000 --- a/jsoncpp-1.8.0/.gitattributes +++ /dev/null @@ -1,11 +0,0 @@ -* text=auto -*.h text -*.cpp text -*.json text -*.in text -*.sh eol=lf -*.bat eol=crlf -*.vcproj eol=crlf -*.vcxproj eol=crlf -*.sln eol=crlf -devtools/agent_vm* eol=crlf diff --git a/jsoncpp-1.8.0/.gitignore b/jsoncpp-1.8.0/.gitignore deleted file mode 100644 index 4b721f0..0000000 --- a/jsoncpp-1.8.0/.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -/build/ -*.pyc -*.swp -*.actual -*.actual-rewrite -*.process-output -*.rewrite -/bin/ -/buildscons/ -/libs/ -/doc/doxyfile -/dist/ -#/version -#/include/json/version.h - -# MSVC project files: -*.sln -*.vcxproj -*.filters -*.user -*.sdf -*.opensdf -*.suo - -# MSVC build files: -*.lib -*.obj -*.tlog/ -*.pdb - -# CMake-generated files: -CMakeFiles/ -*.cmake -pkg-config/jsoncpp.pc -jsoncpp_lib_static.dir/ - -# In case someone runs cmake in the root-dir: -/CMakeCache.txt -/Makefile -/include/Makefile -/src/Makefile -/src/jsontestrunner/Makefile -/src/jsontestrunner/jsontestrunner_exe -/src/lib_json/Makefile -/src/test_lib_json/Makefile -/src/test_lib_json/jsoncpp_test -*.a - -# eclipse project files -.project -.cproject -/.settings/ diff --git a/jsoncpp-1.8.0/.travis.yml b/jsoncpp-1.8.0/.travis.yml deleted file mode 100644 index b5ac60a..0000000 --- a/jsoncpp-1.8.0/.travis.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Build matrix / environment variable are explained on: -# http://about.travis-ci.org/docs/user/build-configuration/ -# This file can be validated on: -# http://lint.travis-ci.org/ -# See also -# http://stackoverflow.com/questions/22111549/travis-ci-with-clang-3-4-and-c11/30925448#30925448 -# to allow C++11, though we are not yet building with -std=c++11 - -install: -# /usr/bin/gcc is 4.6 always, but gcc-X.Y is available. -- if [ "$CXX" = "g++" ]; then export CXX="g++-4.9" CC="gcc-4.9"; fi -# /usr/bin/clang has a conflict with gcc, so use clang-X.Y. -- if [ "$CXX" = "clang++" ]; then export CXX="clang++-3.5" CC="clang-3.5"; fi -- echo ${PATH} -- ls /usr/local -- ls /usr/local/bin -- export PATH=/usr/local/bin:/usr/bin:${PATH} -- echo ${CXX} -- ${CXX} --version -- which valgrind -addons: - apt: - sources: - - ubuntu-toolchain-r-test - - llvm-toolchain-precise-3.5 - - george-edison55-precise-backports # cmake 3.2.3 - packages: - - cmake - - cmake-data - - gcc-4.9 - - g++-4.9 - - clang-3.5 - - valgrind -os: - - linux -language: cpp -compiler: - - gcc - - clang -script: ./travis.sh -env: - matrix: - - SHARED_LIB=ON STATIC_LIB=ON CMAKE_PKG=ON BUILD_TYPE=release VERBOSE_MAKE=false - - SHARED_LIB=OFF STATIC_LIB=ON CMAKE_PKG=OFF BUILD_TYPE=debug VERBOSE_MAKE=true VERBOSE -notifications: - email: false -sudo: false diff --git a/jsoncpp-1.8.0/AUTHORS b/jsoncpp-1.8.0/AUTHORS deleted file mode 100644 index c0fbbee..0000000 --- a/jsoncpp-1.8.0/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Baptiste Lepilleur diff --git a/jsoncpp-1.8.0/CMakeLists.txt b/jsoncpp-1.8.0/CMakeLists.txt deleted file mode 100644 index 330ea54..0000000 --- a/jsoncpp-1.8.0/CMakeLists.txt +++ /dev/null @@ -1,156 +0,0 @@ -# vim: et ts=4 sts=4 sw=4 tw=0 - -CMAKE_MINIMUM_REQUIRED(VERSION 3.1) -PROJECT(jsoncpp) -ENABLE_TESTING() - -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) -OPTION(JSONCPP_WITH_WARNING_AS_ERROR "Force compilation to fail if a warning occurs" OFF) -OPTION(JSONCPP_WITH_STRICT_ISO "Issue all the warnings demanded by strict ISO C and ISO C++" ON) -OPTION(JSONCPP_WITH_PKGCONFIG_SUPPORT "Generate and install .pc files" ON) -OPTION(JSONCPP_WITH_CMAKE_PACKAGE "Generate and install cmake package files" OFF) -OPTION(BUILD_SHARED_LIBS "Build jsoncpp_lib as a shared library." OFF) -OPTION(BUILD_STATIC_LIBS "Build jsoncpp_lib static library." ON) - -# Ensures that CMAKE_BUILD_TYPE is visible in cmake-gui on Unix -IF(NOT WIN32) - IF(NOT CMAKE_BUILD_TYPE) - SET(CMAKE_BUILD_TYPE Release CACHE STRING - "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Coverage." - FORCE) - ENDIF() -ENDIF() - -# Enable runtime search path support for dynamic libraries on OSX -IF(APPLE) - SET(CMAKE_MACOSX_RPATH 1) -ENDIF() - -# Adhere to GNU filesystem layout conventions -INCLUDE(GNUInstallDirs) - -SET(DEBUG_LIBNAME_SUFFIX "" CACHE STRING "Optional suffix to append to the library name for a debug build") - -# Set variable named ${VAR_NAME} to value ${VALUE} -FUNCTION(set_using_dynamic_name VAR_NAME VALUE) - SET( "${VAR_NAME}" "${VALUE}" PARENT_SCOPE) -ENDFUNCTION() - -# Extract major, minor, patch from version text -# Parse a version string "X.Y.Z" and outputs -# version parts in ${OUPUT_PREFIX}_MAJOR, _MINOR, _PATCH. -# If parse succeeds then ${OUPUT_PREFIX}_FOUND is TRUE. -MACRO(jsoncpp_parse_version VERSION_TEXT OUPUT_PREFIX) - SET(VERSION_REGEX "[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9_]+)?") - IF( ${VERSION_TEXT} MATCHES ${VERSION_REGEX} ) - STRING(REGEX MATCHALL "[0-9]+|-([A-Za-z0-9_]+)" VERSION_PARTS ${VERSION_TEXT}) - LIST(GET VERSION_PARTS 0 ${OUPUT_PREFIX}_MAJOR) - LIST(GET VERSION_PARTS 1 ${OUPUT_PREFIX}_MINOR) - LIST(GET VERSION_PARTS 2 ${OUPUT_PREFIX}_PATCH) - set_using_dynamic_name( "${OUPUT_PREFIX}_FOUND" TRUE ) - ELSE( ${VERSION_TEXT} MATCHES ${VERSION_REGEX} ) - set_using_dynamic_name( "${OUPUT_PREFIX}_FOUND" FALSE ) - ENDIF() -ENDMACRO() - -# Read out version from "version" file -#FILE(STRINGS "version" JSONCPP_VERSION) -#SET( JSONCPP_VERSION_MAJOR X ) -#SET( JSONCPP_VERSION_MINOR Y ) -#SET( JSONCPP_VERSION_PATCH Z ) -SET( JSONCPP_VERSION 1.8.0 ) -jsoncpp_parse_version( ${JSONCPP_VERSION} JSONCPP_VERSION ) -#IF(NOT JSONCPP_VERSION_FOUND) -# MESSAGE(FATAL_ERROR "Failed to parse version string properly. Expect X.Y.Z") -#ENDIF(NOT JSONCPP_VERSION_FOUND) -SET( JSONCPP_SOVERSION 11 ) -SET( JSONCPP_USE_SECURE_MEMORY "0" CACHE STRING "-D...=1 to use memory-wiping allocator for STL" ) - -MESSAGE(STATUS "JsonCpp Version: ${JSONCPP_VERSION_MAJOR}.${JSONCPP_VERSION_MINOR}.${JSONCPP_VERSION_PATCH}") -# File version.h is only regenerated on CMake configure step -CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/src/lib_json/version.h.in" - "${PROJECT_SOURCE_DIR}/include/json/version.h" - NEWLINE_STYLE UNIX ) -CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/version.in" - "${PROJECT_SOURCE_DIR}/version" - NEWLINE_STYLE UNIX ) - -MACRO(UseCompilationWarningAsError) - IF(MSVC) - # Only enabled in debug because some old versions of VS STL generate - # warnings when compiled in release configuration. - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /WX ") - ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") - IF(JSONCPP_WITH_STRICT_ISO) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic-errors") - ENDIF() - ENDIF() -ENDMACRO() - -# Include our configuration header -INCLUDE_DIRECTORIES( ${jsoncpp_SOURCE_DIR}/include ) - -IF(MSVC) - # Only enabled in debug because some old versions of VS STL generate - # unreachable code warning when compiled in release configuration. - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W4 ") -ENDIF() - -# Require C++11 support, prefer ISO C++ over GNU variants, -# as relying solely on ISO C++ is more portable. -SET(CMAKE_CXX_STANDARD 11) -SET(CMAKE_CXX_STANDARD_REQUIRED ON) -SET(CMAKE_CXX_EXTENSIONS OFF) - -IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - # using regular Clang or AppleClang - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Werror=conversion -Werror=sign-compare") -ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - # using GCC - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Wextra") - # not yet ready for -Wsign-conversion - - IF(JSONCPP_WITH_STRICT_ISO AND NOT JSONCPP_WITH_WARNING_AS_ERROR) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=conversion -pedantic") - ENDIF() -ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - # using Intel compiler - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Wextra -Werror=conversion") - - IF(JSONCPP_WITH_STRICT_ISO AND NOT JSONCPP_WITH_WARNING_AS_ERROR) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic") - ENDIF() -ENDIF() - -FIND_PROGRAM(CCACHE_FOUND ccache) -IF(CCACHE_FOUND) - SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) - SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) -ENDIF(CCACHE_FOUND) - -IF(JSONCPP_WITH_WARNING_AS_ERROR) - UseCompilationWarningAsError() -ENDIF() - -IF(JSONCPP_WITH_PKGCONFIG_SUPPORT) - CONFIGURE_FILE( - "pkg-config/jsoncpp.pc.in" - "pkg-config/jsoncpp.pc" - @ONLY) - INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkg-config/jsoncpp.pc" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") -ENDIF() - -IF(JSONCPP_WITH_CMAKE_PACKAGE) - INSTALL(EXPORT jsoncpp - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/jsoncpp - FILE jsoncppConfig.cmake) -ENDIF() - -# Build the different applications -ADD_SUBDIRECTORY( src ) - -#install the includes -ADD_SUBDIRECTORY( include ) diff --git a/jsoncpp-1.8.0/LICENSE b/jsoncpp-1.8.0/LICENSE deleted file mode 100644 index ca2bfe1..0000000 --- a/jsoncpp-1.8.0/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -The JsonCpp library's source code, including accompanying documentation, -tests and demonstration applications, are licensed under the following -conditions... - -The author (Baptiste Lepilleur) explicitly disclaims copyright in all -jurisdictions which recognize such a disclaimer. In such jurisdictions, -this software is released into the Public Domain. - -In jurisdictions which do not recognize Public Domain property (e.g. Germany as of -2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is -released under the terms of the MIT License (see below). - -In jurisdictions which recognize Public Domain property, the user of this -software may choose to accept it either as 1) Public Domain, 2) under the -conditions of the MIT License (see below), or 3) under the terms of dual -Public Domain/MIT License conditions described here, as they choose. - -The MIT License is about as close to Public Domain as a license can get, and is -described in clear, concise terms at: - - http://en.wikipedia.org/wiki/MIT_License - -The full text of the MIT License follows: - -======================================================================== -Copyright (c) 2007-2010 Baptiste Lepilleur - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, copy, -modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -======================================================================== -(END LICENSE TEXT) - -The MIT license is compatible with both the GPL and commercial -software, affording one all of the rights of Public Domain with the -minor nuisance of being required to keep the above copyright notice -and license text in the source code. Note also that by accepting the -Public Domain "license" you can re-license your copy using whatever -license you like. diff --git a/jsoncpp-1.8.0/NEWS.txt b/jsoncpp-1.8.0/NEWS.txt deleted file mode 100644 index 5733fcd..0000000 --- a/jsoncpp-1.8.0/NEWS.txt +++ /dev/null @@ -1,175 +0,0 @@ -New in SVN ----------- - - * Updated the type system's behavior, in order to better support backwards - compatibility with code that was written before 64-bit integer support was - introduced. Here's how it works now: - - * isInt, isInt64, isUInt, and isUInt64 return true if and only if the - value can be exactly represented as that type. In particular, a value - constructed with a double like 17.0 will now return true for all of - these methods. - - * isDouble and isFloat now return true for all numeric values, since all - numeric values can be converted to a double or float without - truncation. Note however that the conversion may not be exact -- for - example, doubles cannot exactly represent all integers above 2^53 + 1. - - * isBool, isNull, isString, isArray, and isObject now return true if and - only if the value is of that type. - - * isConvertibleTo(fooValue) indicates that it is safe to call asFoo. - (For each type foo, isFoo always implies isConvertibleTo(fooValue).) - asFoo returns an approximate or exact representation as appropriate. - For example, a double value may be truncated when asInt is called. - - * For backwards compatibility with old code, isConvertibleTo(intValue) - may return false even if type() == intValue. This is because the value - may have been constructed with a 64-bit integer larger than maxInt, - and calling asInt() would cause an exception. If you're writing new - code, use isInt64 to find out whether the value is exactly - representable using an Int64, or asDouble() combined with minInt64 and - maxInt64 to figure out whether it is approximately representable. - -* Value - - Patch #10: BOOST_FOREACH compatibility. Made Json::iterator more - standard compliant, added missing iterator_category and value_type - typedefs (contribued by Robert A. Iannucci). - -* Compilation - - - New CMake based build system. Based in part on contribution from - Igor Okulist and Damien Buhl (Patch #14). - - - New header json/version.h now contains version number macros - (JSONCPP_VERSION_MAJOR, JSONCPP_VERSION_MINOR, JSONCPP_VERSION_PATCH - and JSONCPP_VERSION_HEXA). - - - Patch #11: added missing JSON_API on some classes causing link issues - when building as a dynamic library on Windows - (contributed by Francis Bolduc). - - - Visual Studio DLL: suppressed warning "C4251: : - needs to have dll-interface to be used by..." via pragma push/pop - in json-cpp headers. - - - Added Travis CI intregration: https://travis-ci.org/blep/jsoncpp-mirror - -* Bug fixes - - Patch #15: Copy constructor does not initialize allocated_ for stringValue - (contributed by rmongia). - - - Patch #16: Missing field copy in Json::Value::iterator causing infinite - loop when using experimental internal map (#define JSON_VALUE_USE_INTERNAL_MAP) - (contributed by Ming-Lin Kao). - - - New in JsonCpp 0.6.0: - --------------------- - -* Compilation - - - LD_LIBRARY_PATH and LIBRARY_PATH environment variables are now - propagated to the build environment as this is required for some - compiler installation. - - - Added support for Microsoft Visual Studio 2008 (bug #2930462): - The platform "msvc90" has been added. - - 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 amalgamated source and header generation (a la sqlite). - Refer to README.md section "Generating amalgamated source and header" - for detail. - -* Value - - - Removed experimental ValueAllocator, it caused static - initialization/destruction order issues (bug #2934500). - The DefaultValueAllocator has been inlined in code. - - - Added support for 64 bits integer: - - Types Json::Int64 and Json::UInt64 have been added. They are aliased - to 64 bits integers on system that support them (based on __int64 on - Microsoft Visual Studio platform, and long long on other platforms). - - Types Json::LargestInt and Json::LargestUInt have been added. They are - aliased to the largest integer type supported: - either Json::Int/Json::UInt or Json::Int64/Json::UInt64 respectively. - - Json::Value::asInt() and Json::Value::asUInt() still returns plain - "int" based types, but asserts if an attempt is made to retrieve - a 64 bits value that can not represented as the return type. - - Json::Value::asInt64() and Json::Value::asUInt64() have been added - to obtain the 64 bits integer value. - - Json::Value::asLargestInt() and Json::Value::asLargestUInt() returns - the integer as a LargestInt/LargestUInt respectively. Those functions - functions are typically used when implementing writer. - - The reader attempts to read number as 64 bits integer, and fall back - to reading a double if the number is not in the range of 64 bits - integer. - - Warning: Json::Value::asInt() and Json::Value::asUInt() now returns - long long. This changes break code that was passing the return value - to *printf() function. - - Support for 64 bits integer can be disabled by defining the macro - JSON_NO_INT64 (uncomment it in json/config.h for example), though - it should have no impact on existing usage. - - - The type Json::ArrayIndex is used for indexes of a JSON value array. It - is an unsigned int (typically 32 bits). - - - Array index can be passed as int to operator[], allowing use of literal: - Json::Value array; - array.append( 1234 ); - int value = array[0].asInt(); // did not compile previously - - - Added float Json::Value::asFloat() to obtain a floating point value as a - float (avoid lost of precision warning caused by used of asDouble() - to initialize a float). - -* Reader - - - Renamed Reader::getFormatedErrorMessages() to getFormattedErrorMessages. - Bug #3023708 (Formatted has 2 't'). The old member function is deprecated - but still present for backward compatibility. - -* Tests - - - Added test to ensure that the escape sequence "\/" is corrected handled - by the parser. - -* Bug fixes - - - Bug #3139677: JSON [1 2 3] was incorrectly parsed as [1, 3]. Error is now - correctly detected. - - - Bug #3139678: stack buffer overflow when parsing a double with a - length of 32 characters. - - - Fixed Value::operator <= implementation (had the semantic of operator >=). - Found when adding unit tests for comparison operators. - - - Value::compare() is now const and has an actual implementation with - unit tests. - - - Bug #2407932: strpbrk() can fail for NULL pointer. - - - Bug #3306345: Fixed minor typo in Path::resolve(). - - - Bug #3314841/#3306896: errors in amalgamate.py - - - Fixed some Coverity warnings and line-endings. - -* License - - - See file LICENSE for details. Basically JsonCpp is now licensed under - MIT license, or public domain if desired and recognized in your jurisdiction. - Thanks to Stephan G. Beal [http://wanderinghorse.net/home/stephan/]) who - helped figuring out the solution to the public domain issue. diff --git a/jsoncpp-1.8.0/README.md b/jsoncpp-1.8.0/README.md deleted file mode 100644 index 93c8d1f..0000000 --- a/jsoncpp-1.8.0/README.md +++ /dev/null @@ -1,214 +0,0 @@ -Introduction ------------- - -[JSON][json-org] is a lightweight data-interchange format. It can represent -numbers, strings, ordered sequences of values, and collections of name/value -pairs. - -[json-org]: http://json.org/ - -[JsonCpp][] is a C++ library that allows manipulating JSON values, including -serialization and deserialization to and from strings. It can also preserve -existing comment in unserialization/serialization steps, making it a convenient -format to store user input files. - -[JsonCpp]: http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html - -## A note on backward-compatibility -* `1.y.z` is built with C++11. -* `0.y.z` can be used with older compilers. -* Major versions maintain binary-compatibility. - -# Using JsonCpp in your project ------------------------------ -The recommended approach to integrating JsonCpp in your project is to include -the [amalgamated source](#generating-amalgamated-source-and-header) (a single -`.cpp` file and two `.h` files) in your project, and compile and build as you -would any other source file. This ensures consistency of compilation flags and -ABI compatibility, issues which arise when building shared or static -libraries. See the next section for instructions. - -The `include/` should be added to your compiler include path. Jsoncpp headers -should be included as follow: - - #include - -If JsonCpp was built as a dynamic library on Windows, then your project needs to -define the macro `JSON_DLL`. - -Generating amalgamated source and header ----------------------------------------- -JsonCpp is provided with a script to generate a single header and a single -source file to ease inclusion into an existing project. The amalgamated source -can be generated at any time by running the following command from the -top-directory (this requires Python 2.6): - - python amalgamate.py - -It is possible to specify header name. See the `-h` option for detail. - -By default, the following files are generated: -* `dist/jsoncpp.cpp`: source file that needs to be added to your project. -* `dist/json/json.h`: corresponding header file for use in your project. It is - equivalent to including `json/json.h` in non-amalgamated source. This header - only depends on standard headers. -* `dist/json/json-forwards.h`: header that provides forward declaration of all - JsonCpp types. - -The amalgamated sources are generated by concatenating JsonCpp source in the -correct order and defining the macro `JSON_IS_AMALGAMATION` to prevent inclusion -of other headers. - -# Contributing to JsonCpp - -Building and testing with CMake -------------------------------- -[CMake][] is a C++ Makefiles/Solution generator. It is usually available on most -Linux system as package. On Ubuntu: - - sudo apt-get install cmake - -[CMake]: http://www.cmake.org - -Note that Python is also required to run the JSON reader/writer tests. If -missing, the build will skip running those tests. - -When running CMake, a few parameters are required: - -* a build directory where the makefiles/solution are generated. It is also used - to store objects, libraries and executables files. -* the generator to use: makefiles or Visual Studio solution? What version or - Visual Studio, 32 or 64 bits solution? - -Steps for generating solution/makefiles using `cmake-gui`: - -* Make "source code" point to the source directory. -* Make "where to build the binary" point to the directory to use for the build. -* Click on the "Grouped" check box. -* Review JsonCpp build options (tick `BUILD_SHARED_LIBS` to build as a - dynamic library). -* Click the configure button at the bottom, then the generate button. -* The generated solution/makefiles can be found in the binary directory. - -Alternatively, from the command-line on Unix in the source directory: - - mkdir -p build/debug - cd build/debug - cmake -DCMAKE_BUILD_TYPE=debug -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DARCHIVE_INSTALL_DIR=. -G "Unix Makefiles" ../.. - make - -Running `cmake -h` will display the list of available generators (passed using -the `-G` option). - -By default CMake hides compilation commands. This can be modified by specifying -`-DCMAKE_VERBOSE_MAKEFILE=true` when generating makefiles. - -Building and testing with SCons -------------------------------- -**Note:** The SCons-based build system is deprecated. Please use CMake; see the -section above. - -JsonCpp can use [Scons][] as a build system. Note that SCons requires Python to -be installed. - -[SCons]: http://www.scons.org/ - -Invoke SCons as follows: - - scons platform=$PLATFORM [TARGET] - -where `$PLATFORM` may be one of: - -* `suncc`: Sun C++ (Solaris) -* `vacpp`: Visual Age C++ (AIX) -* `mingw` -* `msvc6`: Microsoft Visual Studio 6 service pack 5-6 -* `msvc70`: Microsoft Visual Studio 2002 -* `msvc71`: Microsoft Visual Studio 2003 -* `msvc80`: Microsoft Visual Studio 2005 -* `msvc90`: Microsoft Visual Studio 2008 -* `linux-gcc`: Gnu C++ (linux, also reported to work for Mac OS X) - -If you are building with Microsoft Visual Studio 2008, you need to set up the -environment by running `vcvars32.bat` (e.g. MSVC 2008 command prompt) before -running SCons. - -## Running the tests manually -You need to run tests manually only if you are troubleshooting an issue. - -In the instructions below, replace `path/to/jsontest` with the path of the -`jsontest` executable that was compiled on your platform. - - cd test - # This will run the Reader/Writer tests - python runjsontests.py path/to/jsontest - - # This will run the Reader/Writer tests, using JSONChecker test suite - # (http://www.json.org/JSON_checker/). - # Notes: not all tests pass: JsonCpp is too lenient (for example, - # it allows an integer to start with '0'). The goal is to improve - # strict mode parsing to get all tests to pass. - python runjsontests.py --with-json-checker path/to/jsontest - - # This will run the unit tests (mostly Value) - python rununittests.py path/to/test_lib_json - - # You can run the tests using valgrind: - python rununittests.py --valgrind path/to/test_lib_json - -## Running the tests using scons -Note that tests can be run using SCons using the `check` target: - - scons platform=$PLATFORM check - -Building the documentation --------------------------- -Run the Python script `doxybuild.py` from the top directory: - - python doxybuild.py --doxygen=$(which doxygen) --open --with-dot - -See `doxybuild.py --help` for options. - -Adding a reader/writer test ---------------------------- -To add a test, you need to create two files in test/data: - -* a `TESTNAME.json` file, that contains the input document in JSON format. -* a `TESTNAME.expected` file, that contains a flatened representation of the - input document. - -The `TESTNAME.expected` file format is as follows: - -* each line represents a JSON element of the element tree represented by the - input document. -* each line has two parts: the path to access the element separated from the - element value by `=`. Array and object values are always empty (i.e. - represented by either `[]` or `{}`). -* element path: `.` represents the root element, and is used to separate object - members. `[N]` is used to specify the value of an array element at index `N`. - -See the examples `test_complex_01.json` and `test_complex_01.expected` to better -understand element paths. - -Understanding reader/writer test output ---------------------------------------- -When a test is run, output files are generated beside the input test files. -Below is a short description of the content of each file: - -* `test_complex_01.json`: input JSON document. -* `test_complex_01.expected`: flattened JSON element tree used to check if - parsing was corrected. -* `test_complex_01.actual`: flattened JSON element tree produced by `jsontest` - from reading `test_complex_01.json`. -* `test_complex_01.rewrite`: JSON document written by `jsontest` using the - `Json::Value` parsed from `test_complex_01.json` and serialized using - `Json::StyledWritter`. -* `test_complex_01.actual-rewrite`: flattened JSON element tree produced by - `jsontest` from reading `test_complex_01.rewrite`. -* `test_complex_01.process-output`: `jsontest` output, typically useful for - understanding parsing errors. - -License -------- -See the `LICENSE` file for details. In summary, JsonCpp is licensed under the -MIT license, or public domain if desired and recognized in your jurisdiction. diff --git a/jsoncpp-1.8.0/SConstruct b/jsoncpp-1.8.0/SConstruct deleted file mode 100644 index f3a73f7..0000000 --- a/jsoncpp-1.8.0/SConstruct +++ /dev/null @@ -1,248 +0,0 @@ -""" -Notes: -- shared library support is buggy: it assumes that a static and dynamic library can be build from the same object files. This is not true on many platforms. For this reason it is only enabled on linux-gcc at the current time. - -To add a platform: -- add its name in options allowed_values below -- add tool initialization for this platform. Search for "if platform == 'suncc'" as an example. -""" - -import os -import os.path -import sys - -JSONCPP_VERSION = open(File('#version').abspath,'rt').read().strip() -DIST_DIR = '#dist' - -options = Variables() -options.Add( EnumVariable('platform', - 'Platform (compiler/stl) used to build the project', - 'msvc71', - allowed_values='suncc vacpp mingw msvc6 msvc7 msvc71 msvc80 msvc90 linux-gcc'.split(), - ignorecase=2) ) - -try: - platform = ARGUMENTS['platform'] - if platform == 'linux-gcc': - CXX = 'g++' # not quite right, but env is not yet available. - import commands - version = commands.getoutput('%s -dumpversion' %CXX) - platform = 'linux-gcc-%s' %version - print "Using platform '%s'" %platform - LD_LIBRARY_PATH = os.environ.get('LD_LIBRARY_PATH', '') - LD_LIBRARY_PATH = "%s:libs/%s" %(LD_LIBRARY_PATH, platform) - os.environ['LD_LIBRARY_PATH'] = LD_LIBRARY_PATH - print "LD_LIBRARY_PATH =", LD_LIBRARY_PATH -except KeyError: - print 'You must specify a "platform"' - sys.exit(2) - -print "Building using PLATFORM =", platform - -rootbuild_dir = Dir('#buildscons') -build_dir = os.path.join( '#buildscons', platform ) -bin_dir = os.path.join( '#bin', platform ) -lib_dir = os.path.join( '#libs', platform ) -sconsign_dir_path = Dir(build_dir).abspath -sconsign_path = os.path.join( sconsign_dir_path, '.sconsign.dbm' ) - -# Ensure build directory exist (SConsignFile fail otherwise!) -if not os.path.exists( sconsign_dir_path ): - os.makedirs( sconsign_dir_path ) - -# Store all dependencies signature in a database -SConsignFile( sconsign_path ) - -def make_environ_vars(): - """Returns a dictionnary with environment variable to use when compiling.""" - # PATH is required to find the compiler - # TEMP is required for at least mingw - # LD_LIBRARY_PATH & co is required on some system for the compiler - vars = {} - for name in ('PATH', 'TEMP', 'TMP', 'LD_LIBRARY_PATH', 'LIBRARY_PATH'): - if name in os.environ: - vars[name] = os.environ[name] - return vars - - -env = Environment( ENV = make_environ_vars(), - toolpath = ['scons-tools'], - tools=[] ) #, tools=['default'] ) - -if platform == 'suncc': - env.Tool( 'sunc++' ) - env.Tool( 'sunlink' ) - env.Tool( 'sunar' ) - env.Append( CCFLAGS = ['-mt'] ) -elif platform == 'vacpp': - env.Tool( 'default' ) - env.Tool( 'aixcc' ) - env['CXX'] = 'xlC_r' #scons does not pick-up the correct one ! - # using xlC_r ensure multi-threading is enabled: - # http://publib.boulder.ibm.com/infocenter/pseries/index.jsp?topic=/com.ibm.vacpp7a.doc/compiler/ref/cuselect.htm - env.Append( CCFLAGS = '-qrtti=all', - LINKFLAGS='-bh:5' ) # -bh:5 remove duplicate symbol warning -elif platform == 'msvc6': - env['MSVS_VERSION']='6.0' - for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']: - env.Tool( tool ) - env['CXXFLAGS']='-GR -GX /nologo /MT' -elif platform == 'msvc70': - env['MSVS_VERSION']='7.0' - for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']: - env.Tool( tool ) - env['CXXFLAGS']='-GR -GX /nologo /MT' -elif platform == 'msvc71': - env['MSVS_VERSION']='7.1' - for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']: - env.Tool( tool ) - env['CXXFLAGS']='-GR -GX /nologo /MT' -elif platform == 'msvc80': - env['MSVS_VERSION']='8.0' - for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']: - env.Tool( tool ) - env['CXXFLAGS']='-GR -EHsc /nologo /MT' -elif platform == 'msvc90': - env['MSVS_VERSION']='9.0' - # Scons 1.2 fails to detect the correct location of the platform SDK. - # So we propagate those from the environment. This requires that the - # user run vcvars32.bat before compiling. - if 'INCLUDE' in os.environ: - env['ENV']['INCLUDE'] = os.environ['INCLUDE'] - if 'LIB' in os.environ: - env['ENV']['LIB'] = os.environ['LIB'] - for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']: - env.Tool( tool ) - env['CXXFLAGS']='-GR -EHsc /nologo /MT' -elif platform == 'mingw': - env.Tool( 'mingw' ) - env.Append( CPPDEFINES=[ "WIN32", "NDEBUG", "_MT" ] ) -elif platform.startswith('linux-gcc'): - env.Tool( 'default' ) - env.Append( LIBS = ['pthread'], CCFLAGS = os.environ.get("CXXFLAGS", "-Wall"), LINKFLAGS=os.environ.get("LDFLAGS", "") ) - env['SHARED_LIB_ENABLED'] = True -else: - print "UNSUPPORTED PLATFORM." - env.Exit(1) - -env.Tool('targz') -env.Tool('srcdist') -env.Tool('globtool') - -env.Append( CPPPATH = ['#include'], - LIBPATH = lib_dir ) -short_platform = platform -if short_platform.startswith('msvc'): - short_platform = short_platform[2:] -# Notes: on Windows you need to rebuild the source for each variant -# Build script does not support that yet so we only build static libraries. -# This also fails on AIX because both dynamic and static library ends with -# extension .a. -env['SHARED_LIB_ENABLED'] = env.get('SHARED_LIB_ENABLED', False) -env['LIB_PLATFORM'] = short_platform -env['LIB_LINK_TYPE'] = 'lib' # static -env['LIB_CRUNTIME'] = 'mt' -env['LIB_NAME_SUFFIX'] = '${LIB_PLATFORM}_${LIB_LINK_TYPE}${LIB_CRUNTIME}' # must match autolink naming convention -env['JSONCPP_VERSION'] = JSONCPP_VERSION -env['BUILD_DIR'] = env.Dir(build_dir) -env['ROOTBUILD_DIR'] = env.Dir(rootbuild_dir) -env['DIST_DIR'] = DIST_DIR -if 'TarGz' in env['BUILDERS']: - class SrcDistAdder: - def __init__( self, env ): - self.env = env - def __call__( self, *args, **kw ): - apply( self.env.SrcDist, (self.env['SRCDIST_TARGET'],) + args, kw ) - env['SRCDIST_BUILDER'] = env.TarGz -else: # If tarfile module is missing - class SrcDistAdder: - def __init__( self, env ): - pass - def __call__( self, *args, **kw ): - pass -env['SRCDIST_ADD'] = SrcDistAdder( env ) -env['SRCDIST_TARGET'] = os.path.join( DIST_DIR, 'jsoncpp-src-%s.tar.gz' % env['JSONCPP_VERSION'] ) - -env_testing = env.Clone( ) -env_testing.Append( LIBS = ['json_${LIB_NAME_SUFFIX}'] ) - -def buildJSONExample( env, target_sources, target_name ): - env = env.Clone() - env.Append( CPPPATH = ['#'] ) - exe = env.Program( target=target_name, - source=target_sources ) - env['SRCDIST_ADD']( source=[target_sources] ) - global bin_dir - return env.Install( bin_dir, exe ) - -def buildJSONTests( env, target_sources, target_name ): - jsontests_node = buildJSONExample( env, target_sources, target_name ) - check_alias_target = env.Alias( 'check', jsontests_node, RunJSONTests( jsontests_node, jsontests_node ) ) - env.AlwaysBuild( check_alias_target ) - -def buildUnitTests( env, target_sources, target_name ): - jsontests_node = buildJSONExample( env, target_sources, target_name ) - check_alias_target = env.Alias( 'check', jsontests_node, - RunUnitTests( jsontests_node, jsontests_node ) ) - env.AlwaysBuild( check_alias_target ) - -def buildLibrary( env, target_sources, target_name ): - static_lib = env.StaticLibrary( target=target_name + '_${LIB_NAME_SUFFIX}', - source=target_sources ) - global lib_dir - env.Install( lib_dir, static_lib ) - if env['SHARED_LIB_ENABLED']: - shared_lib = env.SharedLibrary( target=target_name + '_${LIB_NAME_SUFFIX}', - source=target_sources ) - env.Install( lib_dir, shared_lib ) - env['SRCDIST_ADD']( source=[target_sources] ) - -Export( 'env env_testing buildJSONExample buildLibrary buildJSONTests buildUnitTests' ) - -def buildProjectInDirectory( target_directory ): - global build_dir - target_build_dir = os.path.join( build_dir, target_directory ) - target = os.path.join( target_directory, 'sconscript' ) - SConscript( target, build_dir=target_build_dir, duplicate=0 ) - env['SRCDIST_ADD']( source=[target] ) - - -def runJSONTests_action( target, source = None, env = None ): - # Add test scripts to python path - jsontest_path = Dir( '#test' ).abspath - sys.path.insert( 0, jsontest_path ) - data_path = os.path.join( jsontest_path, 'data' ) - import runjsontests - return runjsontests.runAllTests( os.path.abspath(source[0].path), data_path ) - -def runJSONTests_string( target, source = None, env = None ): - return 'RunJSONTests("%s")' % source[0] - -import SCons.Action -ActionFactory = SCons.Action.ActionFactory -RunJSONTests = ActionFactory(runJSONTests_action, runJSONTests_string ) - -def runUnitTests_action( target, source = None, env = None ): - # Add test scripts to python path - jsontest_path = Dir( '#test' ).abspath - sys.path.insert( 0, jsontest_path ) - import rununittests - return rununittests.runAllTests( os.path.abspath(source[0].path) ) - -def runUnitTests_string( target, source = None, env = None ): - return 'RunUnitTests("%s")' % source[0] - -RunUnitTests = ActionFactory(runUnitTests_action, runUnitTests_string ) - -env.Alias( 'check' ) - -srcdist_cmd = env['SRCDIST_ADD']( source = """ - AUTHORS README.md SConstruct - """.split() ) -env.Alias( 'src-dist', srcdist_cmd ) - -buildProjectInDirectory( 'src/jsontestrunner' ) -buildProjectInDirectory( 'src/lib_json' ) -buildProjectInDirectory( 'src/test_lib_json' ) -#print env.Dump() - diff --git a/jsoncpp-1.8.0/amalgamate.py b/jsoncpp-1.8.0/amalgamate.py deleted file mode 100644 index 9cb2d08..0000000 --- a/jsoncpp-1.8.0/amalgamate.py +++ /dev/null @@ -1,155 +0,0 @@ -"""Amalgate json-cpp library sources into a single source and header file. - -Works with python2.6+ and python3.4+. - -Example of invocation (must be invoked from json-cpp top directory): -python amalgate.py -""" -import os -import os.path -import sys - -class AmalgamationFile: - def __init__(self, top_dir): - self.top_dir = top_dir - self.blocks = [] - - def add_text(self, text): - if not text.endswith("\n"): - text += "\n" - self.blocks.append(text) - - def add_file(self, relative_input_path, wrap_in_comment=False): - def add_marker(prefix): - self.add_text("") - self.add_text("// " + "/"*70) - self.add_text("// %s of content of file: %s" % (prefix, relative_input_path.replace("\\","/"))) - self.add_text("// " + "/"*70) - self.add_text("") - add_marker("Beginning") - f = open(os.path.join(self.top_dir, relative_input_path), "rt") - content = f.read() - if wrap_in_comment: - content = "/*\n" + content + "\n*/" - self.add_text(content) - f.close() - add_marker("End") - self.add_text("\n\n\n\n") - - def get_value(self): - return "".join(self.blocks).replace("\r\n","\n") - - def write_to(self, output_path): - output_dir = os.path.dirname(output_path) - if output_dir and not os.path.isdir(output_dir): - os.makedirs(output_dir) - f = open(output_path, "wb") - f.write(str.encode(self.get_value(), 'UTF-8')) - f.close() - -def amalgamate_source(source_top_dir=None, - target_source_path=None, - header_include_path=None): - """Produces amalgated source. - Parameters: - source_top_dir: top-directory - target_source_path: output .cpp path - header_include_path: generated header path relative to target_source_path. - """ - print("Amalgating header...") - header = AmalgamationFile(source_top_dir) - header.add_text("/// Json-cpp amalgated header (http://jsoncpp.sourceforge.net/).") - header.add_text('/// It is intended to be used with #include "%s"' % header_include_path) - header.add_file("LICENSE", wrap_in_comment=True) - header.add_text("#ifndef JSON_AMALGATED_H_INCLUDED") - header.add_text("# define JSON_AMALGATED_H_INCLUDED") - header.add_text("/// If defined, indicates that the source file is amalgated") - 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") # Not available here. - 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_text("#endif //ifndef JSON_AMALGATED_H_INCLUDED") - - target_header_path = os.path.join(os.path.dirname(target_source_path), header_include_path) - print("Writing amalgated header to %r" % target_header_path) - header.write_to(target_header_path) - - base, ext = os.path.splitext(header_include_path) - forward_header_include_path = base + "-forwards" + ext - print("Amalgating forward header...") - header = AmalgamationFile(source_top_dir) - header.add_text("/// Json-cpp amalgated forward header (http://jsoncpp.sourceforge.net/).") - header.add_text('/// It is intended to be used with #include "%s"' % forward_header_include_path) - header.add_text("/// This header provides forward declaration for all JsonCpp types.") - header.add_file("LICENSE", wrap_in_comment=True) - header.add_text("#ifndef JSON_FORWARD_AMALGATED_H_INCLUDED") - header.add_text("# define JSON_FORWARD_AMALGATED_H_INCLUDED") - header.add_text("/// If defined, indicates that the source file is amalgated") - 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_text("#endif //ifndef JSON_FORWARD_AMALGATED_H_INCLUDED") - - target_forward_header_path = os.path.join(os.path.dirname(target_source_path), - forward_header_include_path) - print("Writing amalgated forward header to %r" % target_forward_header_path) - header.write_to(target_forward_header_path) - - print("Amalgating source...") - source = AmalgamationFile(source_top_dir) - source.add_text("/// Json-cpp amalgated source (http://jsoncpp.sourceforge.net/).") - source.add_text('/// It is intended to be used with #include "%s"' % header_include_path) - source.add_file("LICENSE", wrap_in_comment=True) - source.add_text("") - source.add_text('#include "%s"' % header_include_path) - source.add_text(""" -#ifndef JSON_IS_AMALGAMATION -#error "Compile with -I PATH_TO_JSON_DIRECTORY" -#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")) - - print("Writing amalgated source to %r" % target_source_path) - source.write_to(target_source_path) - -def main(): - usage = """%prog [options] -Generate a single amalgated source and header file from the sources. -""" - from optparse import OptionParser - parser = OptionParser(usage=usage) - parser.allow_interspersed_args = False - parser.add_option("-s", "--source", dest="target_source_path", action="store", default="dist/jsoncpp.cpp", - help="""Output .cpp source path. [Default: %default]""") - parser.add_option("-i", "--include", dest="header_include_path", action="store", default="json/json.h", - help="""Header include path. Used to include the header from the amalgated source file. [Default: %default]""") - parser.add_option("-t", "--top-dir", dest="top_dir", action="store", default=os.getcwd(), - help="""Source top-directory. [Default: %default]""") - parser.enable_interspersed_args() - options, args = parser.parse_args() - - msg = amalgamate_source(source_top_dir=options.top_dir, - target_source_path=options.target_source_path, - header_include_path=options.header_include_path) - if msg: - sys.stderr.write(msg + "\n") - sys.exit(1) - else: - print("Source succesfully amalagated") - -if __name__ == "__main__": - main() diff --git a/jsoncpp-1.8.0/appveyor.yml b/jsoncpp-1.8.0/appveyor.yml deleted file mode 100644 index f4966a3..0000000 --- a/jsoncpp-1.8.0/appveyor.yml +++ /dev/null @@ -1,35 +0,0 @@ -# This is a comment. - -version: build.{build} - -os: Windows Server 2012 R2 - -clone_folder: c:\projects\jsoncpp - -platform: - - Win32 - - x64 - -configuration: - - Debug - - Release - -# scripts to run before build -before_build: - - echo "Running cmake..." - - cd c:\projects\jsoncpp - - cmake --version - - set PATH=C:\Program Files (x86)\MSBuild\14.0\Bin;%PATH% - - if %PLATFORM% == Win32 cmake . - - if %PLATFORM% == x64 cmake -G "Visual Studio 12 2013 Win64" . - -build: - project: jsoncpp.sln # path to Visual Studio solution or project - -deploy: - provider: GitHub - auth_token: - secure: K2Tp1q8pIZ7rs0Ot24ZMWuwr12Ev6Tc6QkhMjGQxoQG3ng1pXtgPasiJ45IDXGdg - on: - branch: master - appveyor_repo_tag: true diff --git a/jsoncpp-1.8.0/dev.makefile b/jsoncpp-1.8.0/dev.makefile deleted file mode 100644 index d288b16..0000000 --- a/jsoncpp-1.8.0/dev.makefile +++ /dev/null @@ -1,35 +0,0 @@ -# This is only for jsoncpp developers/contributors. -# We use this to sign releases, generate documentation, etc. -VER?=$(shell cat version) - -default: - @echo "VER=${VER}" -sign: jsoncpp-${VER}.tar.gz - gpg --armor --detach-sign $< - gpg --verify $<.asc - # Then upload .asc to the release. -jsoncpp-%.tar.gz: - curl https://github.com/open-source-parsers/jsoncpp/archive/$*.tar.gz -o $@ -dox: - python doxybuild.py --doxygen=$$(which doxygen) --in doc/web_doxyfile.in - rsync -va --delete dist/doxygen/jsoncpp-api-html-${VER}/ ../jsoncpp-docs/doxygen/ - # Then 'git add -A' and 'git push' in jsoncpp-docs. -build: - mkdir -p build/debug - cd build/debug; cmake -DCMAKE_BUILD_TYPE=debug -DBUILD_SHARED_LIBS=ON -G "Unix Makefiles" ../.. - make -C build/debug - -# Currently, this depends on include/json/version.h generated -# by cmake. -test-amalgamate: - python2.7 amalgamate.py - python3.4 amalgamate.py - cd dist; gcc -I. -c jsoncpp.cpp - -valgrind: - valgrind --error-exitcode=42 --leak-check=full ./build/debug/src/test_lib_json/jsoncpp_test - -clean: - \rm -rf *.gz *.asc dist/ - -.PHONY: build diff --git a/jsoncpp-1.8.0/devtools/__init__.py b/jsoncpp-1.8.0/devtools/__init__.py deleted file mode 100644 index d18a521..0000000 --- a/jsoncpp-1.8.0/devtools/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright 2010 Baptiste Lepilleur -# Distributed under MIT license, or public domain if desired and -# recognized in your jurisdiction. -# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -# module diff --git a/jsoncpp-1.8.0/devtools/agent_vmw7.json b/jsoncpp-1.8.0/devtools/agent_vmw7.json deleted file mode 100644 index cd7b777..0000000 --- a/jsoncpp-1.8.0/devtools/agent_vmw7.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "cmake_variants" : [ - {"name": "generator", - "generators": [ - {"generator": [ - "Visual Studio 7 .NET 2003", - "Visual Studio 9 2008", - "Visual Studio 9 2008 Win64", - "Visual Studio 10", - "Visual Studio 10 Win64", - "Visual Studio 11", - "Visual Studio 11 Win64" - ] - }, - {"generator": ["MinGW Makefiles"], - "env_prepend": [{"path": "c:/wut/prg/MinGW/bin"}] - } - ] - }, - {"name": "shared_dll", - "variables": [ - ["BUILD_SHARED_LIBS=true"], - ["BUILD_SHARED_LIBS=false"] - ] - }, - {"name": "build_type", - "build_types": [ - "debug", - "release" - ] - } - ] -} diff --git a/jsoncpp-1.8.0/devtools/agent_vmxp.json b/jsoncpp-1.8.0/devtools/agent_vmxp.json deleted file mode 100644 index f82a077..0000000 --- a/jsoncpp-1.8.0/devtools/agent_vmxp.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "cmake_variants" : [ - {"name": "generator", - "generators": [ - {"generator": [ - "Visual Studio 6", - "Visual Studio 7", - "Visual Studio 8 2005" - ] - } - ] - }, - {"name": "shared_dll", - "variables": [ - ["BUILD_SHARED_LIBS=true"], - ["BUILD_SHARED_LIBS=false"] - ] - }, - {"name": "build_type", - "build_types": [ - "debug", - "release" - ] - } - ] -} diff --git a/jsoncpp-1.8.0/devtools/antglob.py b/jsoncpp-1.8.0/devtools/antglob.py deleted file mode 100644 index c272f66..0000000 --- a/jsoncpp-1.8.0/devtools/antglob.py +++ /dev/null @@ -1,205 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 -# Copyright 2009 Baptiste Lepilleur -# Distributed under MIT license, or public domain if desired and -# recognized in your jurisdiction. -# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -from __future__ import print_function -from dircache import listdir -import re -import fnmatch -import os.path - - -# These fnmatch expressions are used by default to prune the directory tree -# while doing the recursive traversal in the glob_impl method of glob function. -prune_dirs = '.git .bzr .hg .svn _MTN _darcs CVS SCCS ' - -# These fnmatch expressions are used by default to exclude files and dirs -# while doing the recursive traversal in the glob_impl method of glob function. -##exclude_pats = prune_pats + '*~ #*# .#* %*% ._* .gitignore .cvsignore vssver.scc .DS_Store'.split() - -# These ant_glob expressions are used by default to exclude files and dirs and also prune the directory tree -# while doing the recursive traversal in the glob_impl method of glob function. -default_excludes = ''' -**/*~ -**/#*# -**/.#* -**/%*% -**/._* -**/CVS -**/CVS/** -**/.cvsignore -**/SCCS -**/SCCS/** -**/vssver.scc -**/.svn -**/.svn/** -**/.git -**/.git/** -**/.gitignore -**/.bzr -**/.bzr/** -**/.hg -**/.hg/** -**/_MTN -**/_MTN/** -**/_darcs -**/_darcs/** -**/.DS_Store ''' - -DIR = 1 -FILE = 2 -DIR_LINK = 4 -FILE_LINK = 8 -LINKS = DIR_LINK | FILE_LINK -ALL_NO_LINK = DIR | FILE -ALL = DIR | FILE | LINKS - -_ANT_RE = re.compile(r'(/\*\*/)|(\*\*/)|(/\*\*)|(\*)|(/)|([^\*/]*)') - -def ant_pattern_to_re(ant_pattern): - """Generates a regular expression from the ant pattern. - Matching convention: - **/a: match 'a', 'dir/a', 'dir1/dir2/a' - a/**/b: match 'a/b', 'a/c/b', 'a/d/c/b' - *.py: match 'script.py' but not 'a/script.py' - """ - rex = ['^'] - next_pos = 0 - sep_rex = r'(?:/|%s)' % re.escape(os.path.sep) -## print 'Converting', ant_pattern - for match in _ANT_RE.finditer(ant_pattern): -## print 'Matched', match.group() -## print match.start(0), next_pos - if match.start(0) != next_pos: - raise ValueError("Invalid ant pattern") - if match.group(1): # /**/ - rex.append(sep_rex + '(?:.*%s)?' % sep_rex) - elif match.group(2): # **/ - rex.append('(?:.*%s)?' % sep_rex) - elif match.group(3): # /** - rex.append(sep_rex + '.*') - elif match.group(4): # * - rex.append('[^/%s]*' % re.escape(os.path.sep)) - elif match.group(5): # / - rex.append(sep_rex) - else: # somepath - rex.append(re.escape(match.group(6))) - next_pos = match.end() - rex.append('$') - return re.compile(''.join(rex)) - -def _as_list(l): - if isinstance(l, basestring): - return l.split() - return l - -def glob(dir_path, - includes = '**/*', - excludes = default_excludes, - entry_type = FILE, - prune_dirs = prune_dirs, - max_depth = 25): - include_filter = [ant_pattern_to_re(p) for p in _as_list(includes)] - exclude_filter = [ant_pattern_to_re(p) for p in _as_list(excludes)] - prune_dirs = [p.replace('/',os.path.sep) for p in _as_list(prune_dirs)] - dir_path = dir_path.replace('/',os.path.sep) - entry_type_filter = entry_type - - def is_pruned_dir(dir_name): - for pattern in prune_dirs: - if fnmatch.fnmatch(dir_name, pattern): - return True - return False - - def apply_filter(full_path, filter_rexs): - """Return True if at least one of the filter regular expression match full_path.""" - for rex in filter_rexs: - if rex.match(full_path): - return True - return False - - def glob_impl(root_dir_path): - child_dirs = [root_dir_path] - while child_dirs: - dir_path = child_dirs.pop() - for entry in listdir(dir_path): - full_path = os.path.join(dir_path, entry) -## print 'Testing:', full_path, - is_dir = os.path.isdir(full_path) - if is_dir and not is_pruned_dir(entry): # explore child directory ? -## print '===> marked for recursion', - child_dirs.append(full_path) - included = apply_filter(full_path, include_filter) - rejected = apply_filter(full_path, exclude_filter) - if not included or rejected: # do not include entry ? -## print '=> not included or rejected' - continue - link = os.path.islink(full_path) - is_file = os.path.isfile(full_path) - if not is_file and not is_dir: -## print '=> unknown entry type' - continue - if link: - entry_type = is_file and FILE_LINK or DIR_LINK - else: - entry_type = is_file and FILE or DIR -## print '=> type: %d' % entry_type, - if (entry_type & entry_type_filter) != 0: -## print ' => KEEP' - yield os.path.join(dir_path, entry) -## else: -## print ' => TYPE REJECTED' - return list(glob_impl(dir_path)) - - -if __name__ == "__main__": - import unittest - - class AntPatternToRETest(unittest.TestCase): -## def test_conversion(self): -## self.assertEqual('^somepath$', ant_pattern_to_re('somepath').pattern) - - def test_matching(self): - test_cases = [ ('path', - ['path'], - ['somepath', 'pathsuffix', '/path', '/path']), - ('*.py', - ['source.py', 'source.ext.py', '.py'], - ['path/source.py', '/.py', 'dir.py/z', 'z.pyc', 'z.c']), - ('**/path', - ['path', '/path', '/a/path', 'c:/a/path', '/a/b/path', '//a/path', '/a/path/b/path'], - ['path/', 'a/path/b', 'dir.py/z', 'somepath', 'pathsuffix', 'a/somepath']), - ('path/**', - ['path/a', 'path/path/a', 'path//'], - ['path', 'somepath/a', 'a/path', 'a/path/a', 'pathsuffix/a']), - ('/**/path', - ['/path', '/a/path', '/a/b/path/path', '/path/path'], - ['path', 'path/', 'a/path', '/pathsuffix', '/somepath']), - ('a/b', - ['a/b'], - ['somea/b', 'a/bsuffix', 'a/b/c']), - ('**/*.py', - ['script.py', 'src/script.py', 'a/b/script.py', '/a/b/script.py'], - ['script.pyc', 'script.pyo', 'a.py/b']), - ('src/**/*.py', - ['src/a.py', 'src/dir/a.py'], - ['a/src/a.py', '/src/a.py']), - ] - for ant_pattern, accepted_matches, rejected_matches in list(test_cases): - def local_path(paths): - return [ p.replace('/',os.path.sep) for p in paths ] - test_cases.append((ant_pattern, local_path(accepted_matches), local_path(rejected_matches))) - for ant_pattern, accepted_matches, rejected_matches in test_cases: - rex = ant_pattern_to_re(ant_pattern) - print('ant_pattern:', ant_pattern, ' => ', rex.pattern) - for accepted_match in accepted_matches: - print('Accepted?:', accepted_match) - self.assertTrue(rex.match(accepted_match) is not None) - for rejected_match in rejected_matches: - print('Rejected?:', rejected_match) - self.assertTrue(rex.match(rejected_match) is None) - - unittest.main() diff --git a/jsoncpp-1.8.0/devtools/batchbuild.py b/jsoncpp-1.8.0/devtools/batchbuild.py deleted file mode 100644 index 0eb0690..0000000 --- a/jsoncpp-1.8.0/devtools/batchbuild.py +++ /dev/null @@ -1,278 +0,0 @@ -from __future__ import print_function -import collections -import itertools -import json -import os -import os.path -import re -import shutil -import string -import subprocess -import sys -import cgi - -class BuildDesc: - def __init__(self, prepend_envs=None, variables=None, build_type=None, generator=None): - self.prepend_envs = prepend_envs or [] # [ { "var": "value" } ] - self.variables = variables or [] - self.build_type = build_type - self.generator = generator - - def merged_with(self, build_desc): - """Returns a new BuildDesc by merging field content. - Prefer build_desc fields to self fields for single valued field. - """ - return BuildDesc(self.prepend_envs + build_desc.prepend_envs, - self.variables + build_desc.variables, - build_desc.build_type or self.build_type, - build_desc.generator or self.generator) - - def env(self): - environ = os.environ.copy() - for values_by_name in self.prepend_envs: - for var, value in list(values_by_name.items()): - var = var.upper() - if type(value) is unicode: - value = value.encode(sys.getdefaultencoding()) - if var in environ: - environ[var] = value + os.pathsep + environ[var] - else: - environ[var] = value - return environ - - def cmake_args(self): - args = ["-D%s" % var for var in self.variables] - # skip build type for Visual Studio solution as it cause warning - if self.build_type and 'Visual' not in self.generator: - args.append("-DCMAKE_BUILD_TYPE=%s" % self.build_type) - if self.generator: - args.extend(['-G', self.generator]) - return args - - def __repr__(self): - return "BuildDesc(%s, build_type=%s)" % (" ".join(self.cmake_args()), self.build_type) - -class BuildData: - def __init__(self, desc, work_dir, source_dir): - self.desc = desc - self.work_dir = work_dir - self.source_dir = source_dir - self.cmake_log_path = os.path.join(work_dir, 'batchbuild_cmake.log') - self.build_log_path = os.path.join(work_dir, 'batchbuild_build.log') - self.cmake_succeeded = False - self.build_succeeded = False - - def execute_build(self): - print('Build %s' % self.desc) - self._make_new_work_dir() - self.cmake_succeeded = self._generate_makefiles() - if self.cmake_succeeded: - self.build_succeeded = self._build_using_makefiles() - return self.build_succeeded - - def _generate_makefiles(self): - print(' Generating makefiles: ', end=' ') - cmd = ['cmake'] + self.desc.cmake_args() + [os.path.abspath(self.source_dir)] - succeeded = self._execute_build_subprocess(cmd, self.desc.env(), self.cmake_log_path) - print('done' if succeeded else 'FAILED') - return succeeded - - def _build_using_makefiles(self): - print(' Building:', end=' ') - cmd = ['cmake', '--build', self.work_dir] - if self.desc.build_type: - cmd += ['--config', self.desc.build_type] - succeeded = self._execute_build_subprocess(cmd, self.desc.env(), self.build_log_path) - print('done' if succeeded else 'FAILED') - return succeeded - - def _execute_build_subprocess(self, cmd, env, log_path): - process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=self.work_dir, - env=env) - stdout, _ = process.communicate() - succeeded = (process.returncode == 0) - with open(log_path, 'wb') as flog: - log = ' '.join(cmd) + '\n' + stdout + '\nExit code: %r\n' % process.returncode - flog.write(fix_eol(log)) - return succeeded - - def _make_new_work_dir(self): - if os.path.isdir(self.work_dir): - print(' Removing work directory', self.work_dir) - shutil.rmtree(self.work_dir, ignore_errors=True) - if not os.path.isdir(self.work_dir): - os.makedirs(self.work_dir) - -def fix_eol(stdout): - """Fixes wrong EOL produced by cmake --build on Windows (\r\r\n instead of \r\n). - """ - return re.sub('\r*\n', os.linesep, stdout) - -def load_build_variants_from_config(config_path): - with open(config_path, 'rb') as fconfig: - data = json.load(fconfig) - variants = data[ 'cmake_variants' ] - build_descs_by_axis = collections.defaultdict(list) - for axis in variants: - axis_name = axis["name"] - build_descs = [] - if "generators" in axis: - for generator_data in axis["generators"]: - for generator in generator_data["generator"]: - build_desc = BuildDesc(generator=generator, - prepend_envs=generator_data.get("env_prepend")) - build_descs.append(build_desc) - elif "variables" in axis: - for variables in axis["variables"]: - build_desc = BuildDesc(variables=variables) - build_descs.append(build_desc) - elif "build_types" in axis: - for build_type in axis["build_types"]: - build_desc = BuildDesc(build_type=build_type) - build_descs.append(build_desc) - build_descs_by_axis[axis_name].extend(build_descs) - return build_descs_by_axis - -def generate_build_variants(build_descs_by_axis): - """Returns a list of BuildDesc generated for the partial BuildDesc for each axis.""" - axis_names = list(build_descs_by_axis.keys()) - build_descs = [] - for axis_name, axis_build_descs in list(build_descs_by_axis.items()): - if len(build_descs): - # for each existing build_desc and each axis build desc, create a new build_desc - new_build_descs = [] - for prototype_build_desc, axis_build_desc in itertools.product(build_descs, axis_build_descs): - new_build_descs.append(prototype_build_desc.merged_with(axis_build_desc)) - build_descs = new_build_descs - else: - build_descs = axis_build_descs - return build_descs - -HTML_TEMPLATE = string.Template(''' - - $title - - - - - - - - $th_vars - - - - $th_build_types - - - -$tr_builds - -
Variables
Build type
-''') - -def generate_html_report(html_report_path, builds): - report_dir = os.path.dirname(html_report_path) - # Vertical axis: generator - # Horizontal: variables, then build_type - builds_by_generator = collections.defaultdict(list) - variables = set() - build_types_by_variable = collections.defaultdict(set) - build_by_pos_key = {} # { (generator, var_key, build_type): build } - for build in builds: - builds_by_generator[build.desc.generator].append(build) - var_key = tuple(sorted(build.desc.variables)) - variables.add(var_key) - build_types_by_variable[var_key].add(build.desc.build_type) - pos_key = (build.desc.generator, var_key, build.desc.build_type) - build_by_pos_key[pos_key] = build - variables = sorted(variables) - th_vars = [] - th_build_types = [] - for variable in variables: - build_types = sorted(build_types_by_variable[variable]) - nb_build_type = len(build_types_by_variable[variable]) - th_vars.append('%s' % (nb_build_type, cgi.escape(' '.join(variable)))) - for build_type in build_types: - th_build_types.append('%s' % cgi.escape(build_type)) - tr_builds = [] - for generator in sorted(builds_by_generator): - tds = [ '%s\n' % cgi.escape(generator) ] - for variable in variables: - build_types = sorted(build_types_by_variable[variable]) - for build_type in build_types: - pos_key = (generator, variable, build_type) - build = build_by_pos_key.get(pos_key) - if build: - cmake_status = 'ok' if build.cmake_succeeded else 'FAILED' - build_status = 'ok' if build.build_succeeded else 'FAILED' - cmake_log_url = os.path.relpath(build.cmake_log_path, report_dir) - build_log_url = os.path.relpath(build.build_log_path, report_dir) - td = 'CMake: %s' % ( build_status.lower(), cmake_log_url, cmake_status.lower(), cmake_status) - if build.cmake_succeeded: - td += '
Build: %s' % ( build_log_url, build_status.lower(), build_status) - td += '' - else: - td = '' - tds.append(td) - tr_builds.append('%s' % '\n'.join(tds)) - html = HTML_TEMPLATE.substitute( title='Batch build report', - th_vars=' '.join(th_vars), - th_build_types=' '.join(th_build_types), - tr_builds='\n'.join(tr_builds)) - with open(html_report_path, 'wt') as fhtml: - fhtml.write(html) - print('HTML report generated in:', html_report_path) - -def main(): - usage = r"""%prog WORK_DIR SOURCE_DIR CONFIG_JSON_PATH [CONFIG2_JSON_PATH...] -Build a given CMake based project located in SOURCE_DIR with multiple generators/options.dry_run -as described in CONFIG_JSON_PATH building in WORK_DIR. - -Example of call: -python devtools\batchbuild.py e:\buildbots\jsoncpp\build . devtools\agent_vmw7.json -""" - from optparse import OptionParser - parser = OptionParser(usage=usage) - parser.allow_interspersed_args = True -# parser.add_option('-v', '--verbose', dest="verbose", action='store_true', -# help="""Be verbose.""") - parser.enable_interspersed_args() - options, args = parser.parse_args() - if len(args) < 3: - parser.error("Missing one of WORK_DIR SOURCE_DIR CONFIG_JSON_PATH.") - work_dir = args[0] - source_dir = args[1].rstrip('/\\') - config_paths = args[2:] - for config_path in config_paths: - if not os.path.isfile(config_path): - parser.error("Can not read: %r" % config_path) - - # generate build variants - build_descs = [] - for config_path in config_paths: - build_descs_by_axis = load_build_variants_from_config(config_path) - build_descs.extend(generate_build_variants(build_descs_by_axis)) - print('Build variants (%d):' % len(build_descs)) - # assign build directory for each variant - if not os.path.isdir(work_dir): - os.makedirs(work_dir) - builds = [] - with open(os.path.join(work_dir, 'matrix-dir-map.txt'), 'wt') as fmatrixmap: - for index, build_desc in enumerate(build_descs): - build_desc_work_dir = os.path.join(work_dir, '%03d' % (index+1)) - builds.append(BuildData(build_desc, build_desc_work_dir, source_dir)) - fmatrixmap.write('%s: %s\n' % (build_desc_work_dir, build_desc)) - for build in builds: - build.execute_build() - html_report_path = os.path.join(work_dir, 'batchbuild-report.html') - generate_html_report(html_report_path, builds) - print('Done') - - -if __name__ == '__main__': - main() - diff --git a/jsoncpp-1.8.0/devtools/fixeol.py b/jsoncpp-1.8.0/devtools/fixeol.py deleted file mode 100644 index b55e146..0000000 --- a/jsoncpp-1.8.0/devtools/fixeol.py +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright 2010 Baptiste Lepilleur -# Distributed under MIT license, or public domain if desired and -# recognized in your jurisdiction. -# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -from __future__ import print_function -import os.path -import sys - -def fix_source_eol(path, is_dry_run = True, verbose = True, eol = '\n'): - """Makes sure that all sources have the specified eol sequence (default: unix).""" - if not os.path.isfile(path): - raise ValueError('Path "%s" is not a file' % path) - try: - f = open(path, 'rb') - except IOError as msg: - print("%s: I/O Error: %s" % (file, str(msg)), file=sys.stderr) - return False - try: - raw_lines = f.readlines() - finally: - f.close() - fixed_lines = [line.rstrip('\r\n') + eol for line in raw_lines] - if raw_lines != fixed_lines: - print('%s =>' % path, end=' ') - if not is_dry_run: - f = open(path, "wb") - try: - f.writelines(fixed_lines) - finally: - f.close() - if verbose: - print(is_dry_run and ' NEED FIX' or ' FIXED') - return True -## -## -## -##def _do_fix(is_dry_run = True): -## from waftools import antglob -## python_sources = antglob.glob('.', -## includes = '**/*.py **/wscript **/wscript_build', -## excludes = antglob.default_excludes + './waf.py', -## prune_dirs = antglob.prune_dirs + 'waf-* ./build') -## for path in python_sources: -## _fix_python_source(path, is_dry_run) -## -## cpp_sources = antglob.glob('.', -## includes = '**/*.cpp **/*.h **/*.inl', -## prune_dirs = antglob.prune_dirs + 'waf-* ./build') -## for path in cpp_sources: -## _fix_source_eol(path, is_dry_run) -## -## -##def dry_fix(context): -## _do_fix(is_dry_run = True) -## -##def fix(context): -## _do_fix(is_dry_run = False) -## -##def shutdown(): -## pass -## -##def check(context): -## # Unit tests are run when "check" target is used -## ut = UnitTest.unit_test() -## ut.change_to_testfile_dir = True -## ut.want_to_see_test_output = True -## ut.want_to_see_test_error = True -## ut.run() -## ut.print_results() diff --git a/jsoncpp-1.8.0/devtools/licenseupdater.py b/jsoncpp-1.8.0/devtools/licenseupdater.py deleted file mode 100644 index 6f82361..0000000 --- a/jsoncpp-1.8.0/devtools/licenseupdater.py +++ /dev/null @@ -1,94 +0,0 @@ -"""Updates the license text in source file. -""" -from __future__ import print_function - -# An existing license is found if the file starts with the string below, -# and ends with the first blank line. -LICENSE_BEGIN = "// Copyright " - -BRIEF_LICENSE = LICENSE_BEGIN + """2007-2010 Baptiste Lepilleur -// Distributed under MIT license, or public domain if desired and -// recognized in your jurisdiction. -// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -""".replace('\r\n','\n') - -def update_license(path, dry_run, show_diff): - """Update the license statement in the specified file. - Parameters: - path: path of the C++ source file to update. - dry_run: if True, just print the path of the file that would be updated, - but don't change it. - show_diff: if True, print the path of the file that would be modified, - as well as the change made to the file. - """ - with open(path, 'rt') as fin: - original_text = fin.read().replace('\r\n','\n') - newline = fin.newlines and fin.newlines[0] or '\n' - if not original_text.startswith(LICENSE_BEGIN): - # No existing license found => prepend it - new_text = BRIEF_LICENSE + original_text - else: - license_end_index = original_text.index('\n\n') # search first blank line - new_text = BRIEF_LICENSE + original_text[license_end_index+2:] - if original_text != new_text: - if not dry_run: - with open(path, 'wb') as fout: - fout.write(new_text.replace('\n', newline)) - print('Updated', path) - if show_diff: - import difflib - print('\n'.join(difflib.unified_diff(original_text.split('\n'), - new_text.split('\n')))) - return True - return False - -def update_license_in_source_directories(source_dirs, dry_run, show_diff): - """Updates license text in C++ source files found in directory source_dirs. - Parameters: - source_dirs: list of directory to scan for C++ sources. Directories are - scanned recursively. - dry_run: if True, just print the path of the file that would be updated, - but don't change it. - show_diff: if True, print the path of the file that would be modified, - as well as the change made to the file. - """ - from devtools import antglob - prune_dirs = antglob.prune_dirs + 'scons-local* ./build* ./libs ./dist' - for source_dir in source_dirs: - cpp_sources = antglob.glob(source_dir, - includes = '''**/*.h **/*.cpp **/*.inl''', - prune_dirs = prune_dirs) - for source in cpp_sources: - update_license(source, dry_run, show_diff) - -def main(): - usage = """%prog DIR [DIR2...] -Updates license text in sources of the project in source files found -in the directory specified on the command-line. - -Example of call: -python devtools\licenseupdater.py include src -n --diff -=> Show change that would be made to the sources. - -python devtools\licenseupdater.py include src -=> Update license statement on all sources in directories include/ and src/. -""" - from optparse import OptionParser - parser = OptionParser(usage=usage) - parser.allow_interspersed_args = False - parser.add_option('-n', '--dry-run', dest="dry_run", action='store_true', default=False, - help="""Only show what files are updated, do not update the files""") - parser.add_option('--diff', dest="show_diff", action='store_true', default=False, - help="""On update, show change made to the file.""") - parser.enable_interspersed_args() - options, args = parser.parse_args() - update_license_in_source_directories(args, options.dry_run, options.show_diff) - print('Done') - -if __name__ == '__main__': - import sys - import os.path - sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) - main() - diff --git a/jsoncpp-1.8.0/devtools/tarball.py b/jsoncpp-1.8.0/devtools/tarball.py deleted file mode 100644 index 2e72717..0000000 --- a/jsoncpp-1.8.0/devtools/tarball.py +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright 2010 Baptiste Lepilleur -# Distributed under MIT license, or public domain if desired and -# recognized in your jurisdiction. -# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE - -from contextlib import closing -import os -import tarfile - -TARGZ_DEFAULT_COMPRESSION_LEVEL = 9 - -def make_tarball(tarball_path, sources, base_dir, prefix_dir=''): - """Parameters: - tarball_path: output path of the .tar.gz file - sources: list of sources to include in the tarball, relative to the current directory - base_dir: if a source file is in a sub-directory of base_dir, then base_dir is stripped - from path in the tarball. - prefix_dir: all files stored in the tarball be sub-directory of prefix_dir. Set to '' - to make them child of root. - """ - base_dir = os.path.normpath(os.path.abspath(base_dir)) - def archive_name(path): - """Makes path relative to base_dir.""" - path = os.path.normpath(os.path.abspath(path)) - common_path = os.path.commonprefix((base_dir, path)) - archive_name = path[len(common_path):] - if os.path.isabs(archive_name): - archive_name = archive_name[1:] - return os.path.join(prefix_dir, archive_name) - def visit(tar, dirname, names): - for name in names: - path = os.path.join(dirname, name) - if os.path.isfile(path): - path_in_tar = archive_name(path) - tar.add(path, path_in_tar) - compression = TARGZ_DEFAULT_COMPRESSION_LEVEL - with closing(tarfile.TarFile.open(tarball_path, 'w:gz', - compresslevel=compression)) as tar: - for source in sources: - source_path = source - if os.path.isdir(source): - for dirpath, dirnames, filenames in os.walk(source_path): - visit(tar, dirpath, filenames) - else: - path_in_tar = archive_name(source_path) - tar.add(source_path, path_in_tar) # filename, arcname - -def decompress(tarball_path, base_dir): - """Decompress the gzipped tarball into directory base_dir. - """ - with closing(tarfile.TarFile.open(tarball_path)) as tar: - tar.extractall(base_dir) diff --git a/jsoncpp-1.8.0/doc/doxyfile.in b/jsoncpp-1.8.0/doc/doxyfile.in deleted file mode 100644 index 57c61c2..0000000 --- a/jsoncpp-1.8.0/doc/doxyfile.in +++ /dev/null @@ -1,2301 +0,0 @@ -# Doxyfile 1.8.5 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = "JsonCpp" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = %JSONCPP_VERSION% - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify an logo or icon that is included in -# the documentation. The maximum height of the logo should not exceed 55 pixels -# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo -# to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = %DOC_TOPDIR% - -# 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 -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese- -# Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto, Farsi, -# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en, -# Korean, Korean-en, Latvian, Norwegian, Macedonian, Persian, Polish, -# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, -# Turkish, Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = %TOPDIR% - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = %TOPDIR%/include - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = YES - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a -# new page for each member. If set to NO, the documentation of a member will be -# part of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 3 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = "testCaseSetup=\link CppUT::TestCase::setUp() setUp()\endlink" \ - "testCaseRun=\link CppUT::TestCase::run() run()\endlink" \ - "testCaseTearDown=\link CppUT::TestCase::tearDown() tearDown()\endlink" \ - "json_ref=JSON (JavaScript Object Notation)" - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. -# -# Note For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by by putting a % sign in front of the word -# or globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = YES - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = NO - -# This flag is only useful for Objective-C code. When set to YES local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO these classes will be included in the various overviews. This option has -# no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = YES - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the -# todo list. This list is created by putting \todo commands in the -# documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the -# test list. This list is created by putting \test commands in the -# documentation. -# The default value is: YES. - -GENERATE_TESTLIST = NO - -# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = NO - -# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES the list -# will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. Do not use file names with spaces, bibtex cannot handle them. See -# also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO doxygen will only warn about wrong or incomplete parameter -# documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = %WARNING_LOG_PATH% - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. -# Note: If this tag is empty the current directory is searched. - -INPUT = ../include \ - ../src/lib_json \ - . - -# 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 -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank the -# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, -# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, -# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, -# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, -# *.qsf, *.as and *.js. - -FILE_PATTERNS = *.h \ - *.cpp \ - *.inl \ - *.dox - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = .. - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER ) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (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. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES, then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = NO - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = %HTML_OUTPUT% - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = header.html - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = footer.html - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- -# defined cascading style sheet that is included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefor more robust against future updates. -# Doxygen will copy the style sheet file to the output directory. For an example -# see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the stylesheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = YES - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = %HTML_HELP% - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = jsoncpp-%JSONCPP_VERSION%.chm - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler ( hhc.exe). If non-empty -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = "c:\Program Files\HTML Help Workshop\hhc.exe" - -# The GENERATE_CHI flag controls if a separate .chi index file is generated ( -# YES) or that it should be included in the master .chm file ( NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = YES - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated ( -# YES) or a normal table of contents ( NO) in the .chm file. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = YES - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = YES - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using prerendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /


- - diff --git a/jsoncpp-1.8.0/doc/header.html b/jsoncpp-1.8.0/doc/header.html deleted file mode 100644 index 4b2a5e9..0000000 --- a/jsoncpp-1.8.0/doc/header.html +++ /dev/null @@ -1,24 +0,0 @@ - - - -JsonCpp - JSON data format manipulation library - - - - - - - - - - - -
- - JsonCpp project page - - - JsonCpp home page -
- -
diff --git a/jsoncpp-1.8.0/doc/jsoncpp.dox b/jsoncpp-1.8.0/doc/jsoncpp.dox deleted file mode 100644 index 47efc8a..0000000 --- a/jsoncpp-1.8.0/doc/jsoncpp.dox +++ /dev/null @@ -1,164 +0,0 @@ -/** -\mainpage -\section _intro Introduction - -JSON (JavaScript Object Notation) - is a lightweight data-interchange format. - -Here is an example of JSON data: -\verbatim -{ - "encoding" : "UTF-8", - "plug-ins" : [ - "python", - "c++", - "ruby" - ], - "indent" : { "length" : 3, "use_space": true } -} -\endverbatim -JsonCpp supports comments as meta-data: -\code -// Configuration options -{ - // 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 } -} -\endcode - -\section _features Features -- read and write JSON document -- attach C++ style comments to element during parsing -- rewrite JSON document preserving original comments - -Notes: Comments used to be supported in JSON but were removed for -portability (C like comments are not supported in Python). Since -comments are useful in configuration/input file, this feature was -preserved. - -\section _example Code example - -\code -Json::Value root; // 'root' will contain the root value after parsing. -std::cin >> root; - -// You can also read into a particular sub-value. -std::cin >> root["subtree"]; - -// Get the value of the member of root named 'encoding', -// and return 'UTF-8' if there is no such member. -std::string encoding = root.get("encoding", "UTF-8" ).asString(); - -// Get the value of the member of root named 'plug-ins'; return a 'null' value if -// there is no such member. -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() ); - -// Since Json::Value has an implicit constructor for all value types, it is not -// necessary to explicitly construct the Json::Value object. -root["encoding"] = foo::getCurrentEncoding(); -root["indent"]["length"] = foo::getCurrentIndentLength(); -root["indent"]["use_space"] = foo::getCurrentIndentUseSpace(); - -// If you like the defaults, you can insert directly into a stream. -std::cout << root; -// Of course, you can write to `std::ostringstream` if you prefer. - -// If desired, remember to add a linefeed and flush. -std::cout << std::endl; -\endcode - -\section _advanced Advanced usage - -Configure *builders* to create *readers* and *writers*. For -configuration, we use our own `Json::Value` (rather than -standard setters/getters) so that we can add -features without losing binary-compatibility. - -\code -// For convenience, use `writeString()` with a specialized builder. -Json::StreamWriterBuilder wbuilder; -wbuilder["indentation"] = "\t"; -std::string document = Json::writeString(wbuilder, root); - -// Here, using a specialized Builder, we discard comments and -// record errors as we parse. -Json::CharReaderBuilder rbuilder; -rbuilder["collectComments"] = false; -std::string errs; -bool ok = Json::parseFromStream(rbuilder, std::cin, &root, &errs); -\endcode - -Yes, compile-time configuration-checking would be helpful, -but `Json::Value` lets you -write and read the builder configuration, which is better! In other words, -you can configure your JSON parser using JSON. - -CharReaders and StreamWriters are not thread-safe, but they are re-usable. -\code -Json::CharReaderBuilder rbuilder; -cfg >> rbuilder.settings_; -std::unique_ptr const reader(rbuilder.newCharReader()); -reader->parse(start, stop, &value1, &errs); -// ... -reader->parse(start, stop, &value2, &errs); -// etc. -\endcode - -\section _pbuild Build instructions -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: - -jsoncpp - -\section _news What's New? -The description of latest changes can be found in - - the NEWS wiki -. - -\section _rlinks Related links -- JSON Specification and alternate language implementations. -- YAML A data format designed for human readability. -- UTF-8 and Unicode FAQ. - -\section _plinks Old project links -- https://sourceforge.net/projects/jsoncpp/ -- http://jsoncpp.sourceforge.net -- http://sourceforge.net/projects/jsoncpp/files/ -- http://jsoncpp.svn.sourceforge.net/svnroot/jsoncpp/trunk/ -- http://jsoncpp.sourceforge.net/old.html - -\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 -and recognized in your jurisdiction. - -\author Baptiste Lepilleur (originator) -\author Christopher Dunn (primary maintainer) -\version \include version -We make strong guarantees about binary-compatibility, consistent with -the Apache versioning scheme. -\sa version.h -*/ diff --git a/jsoncpp-1.8.0/doc/readme.txt b/jsoncpp-1.8.0/doc/readme.txt deleted file mode 100644 index 0e42cdf..0000000 --- a/jsoncpp-1.8.0/doc/readme.txt +++ /dev/null @@ -1 +0,0 @@ -The documentation is generated using doxygen (http://www.doxygen.org). diff --git a/jsoncpp-1.8.0/doc/roadmap.dox b/jsoncpp-1.8.0/doc/roadmap.dox deleted file mode 100644 index 12294bb..0000000 --- a/jsoncpp-1.8.0/doc/roadmap.dox +++ /dev/null @@ -1,3 +0,0 @@ -/*! \page roadmap JsonCpp roadmap - Moved to: https://github.com/open-source-parsers/jsoncpp/wiki/Roadmap -*/ diff --git a/jsoncpp-1.8.0/doc/web_doxyfile.in b/jsoncpp-1.8.0/doc/web_doxyfile.in deleted file mode 100644 index 07d6819..0000000 --- a/jsoncpp-1.8.0/doc/web_doxyfile.in +++ /dev/null @@ -1,2301 +0,0 @@ -# Doxyfile 1.8.5 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = "JsonCpp" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = %JSONCPP_VERSION% - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify an logo or icon that is included in -# the documentation. The maximum height of the logo should not exceed 55 pixels -# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo -# to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = %DOC_TOPDIR% - -# 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 -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese- -# Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto, Farsi, -# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en, -# Korean, Korean-en, Latvian, Norwegian, Macedonian, Persian, Polish, -# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, -# Turkish, Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = %TOPDIR% - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = %TOPDIR%/include - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = YES - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a -# new page for each member. If set to NO, the documentation of a member will be -# part of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 3 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = "testCaseSetup=\link CppUT::TestCase::setUp() setUp()\endlink" \ - "testCaseRun=\link CppUT::TestCase::run() run()\endlink" \ - "testCaseTearDown=\link CppUT::TestCase::tearDown() tearDown()\endlink" \ - "json_ref=JSON (JavaScript Object Notation)" - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. -# -# Note For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by by putting a % sign in front of the word -# or globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = YES - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = NO - -# This flag is only useful for Objective-C code. When set to YES local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO these classes will be included in the various overviews. This option has -# no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = YES - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the -# todo list. This list is created by putting \todo commands in the -# documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the -# test list. This list is created by putting \test commands in the -# documentation. -# The default value is: YES. - -GENERATE_TESTLIST = NO - -# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = NO - -# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES the list -# will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. Do not use file names with spaces, bibtex cannot handle them. See -# also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO doxygen will only warn about wrong or incomplete parameter -# documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = %WARNING_LOG_PATH% - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. -# Note: If this tag is empty the current directory is searched. - -INPUT = ../include \ - ../src/lib_json \ - . - -# 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 -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank the -# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, -# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, -# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, -# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, -# *.qsf, *.as and *.js. - -FILE_PATTERNS = *.h \ - *.cpp \ - *.inl \ - *.dox - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = .. - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER ) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (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. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES, then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = NO - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = %HTML_OUTPUT% - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = header.html - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = footer.html - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- -# defined cascading style sheet that is included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefor more robust against future updates. -# Doxygen will copy the style sheet file to the output directory. For an example -# see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the stylesheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = YES - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = %HTML_HELP% - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = jsoncpp-%JSONCPP_VERSION%.chm - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler ( hhc.exe). If non-empty -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = "c:\Program Files\HTML Help Workshop\hhc.exe" - -# The GENERATE_CHI flag controls if a separate .chi index file is generated ( -# YES) or that it should be included in the master .chm file ( NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = YES - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated ( -# YES) or a normal table of contents ( NO) in the .chm file. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = YES - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = YES - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using prerendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /