First approach to clean out (#165)
* First approach to clean out * Update readme remove example * Correct readme for install and json integration
This commit is contained in:
parent
cc05de9327
commit
639e09b6f9
157
CMakeLists.txt
157
CMakeLists.txt
@ -45,73 +45,28 @@ set_target_properties(nlohmann_json_schema_validator
|
|||||||
VERSION ${PROJECT_VERSION}
|
VERSION ${PROJECT_VERSION}
|
||||||
SOVERSION 1)
|
SOVERSION 1)
|
||||||
|
|
||||||
# if used as a sub-directory, do not create install-rules -
|
# disable tests and examples if project is not super project
|
||||||
# because of the dependency to nlohmann_json.
|
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
||||||
set(JSON_VALIDATOR_INSTALL ON)
|
# I am top-level project.
|
||||||
|
set(JSON_VALIDATOR_IS_TOP_LEVEL TRUE)
|
||||||
# here we decice how nlohmann::json is found and used to build this project
|
|
||||||
|
|
||||||
# first, check whether a nlohmann_json::nlohmann_json target exists already
|
|
||||||
# -> we are used as a sub-directory from within another project
|
|
||||||
if(TARGET nlohmann_json::nlohmann_json)
|
|
||||||
message(STATUS "Found nlohmann_json::nlohmann_json-target - linking with it")
|
|
||||||
target_link_libraries(
|
|
||||||
nlohmann_json_schema_validator
|
|
||||||
PUBLIC nlohmann_json::nlohmann_json)
|
|
||||||
|
|
||||||
set(JSON_VALIDATOR_INSTALL OFF)
|
|
||||||
set(BUILD_TESTS OFF)
|
|
||||||
set(BUILD_EXAMPLES OFF)
|
|
||||||
|
|
||||||
elseif(TARGET nlohmann_json) # or nlohmann_json, we are used a sub-project next to nlohmann-json's git repo
|
|
||||||
message(STATUS "Found nlohmann_json-target - linking with it")
|
|
||||||
target_link_libraries(
|
|
||||||
nlohmann_json_schema_validator
|
|
||||||
PUBLIC nlohmann_json)
|
|
||||||
set(JSON_VALIDATOR_INSTALL OFF)
|
|
||||||
set(BUILD_TESTS OFF)
|
|
||||||
set(BUILD_EXAMPLES OFF)
|
|
||||||
|
|
||||||
else()
|
|
||||||
if (NOT IS_ABSOLUTE ${nlohmann_json_DIR}) # make nlohmann_json_DIR absolute
|
|
||||||
get_filename_component(nlohmann_json_DIR
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${nlohmann_json_DIR}"
|
|
||||||
REALPATH)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(nlohmann_json_orignal_DIR ${nlohmann_json_DIR}) # save path for later use
|
|
||||||
|
|
||||||
# find nlohmann_json-cmake-package
|
|
||||||
find_package(nlohmann_json QUIET)
|
|
||||||
|
|
||||||
if(TARGET nlohmann_json::nlohmann_json)
|
|
||||||
message(STATUS "Found nlohmann_json-cmake-package - linking with it")
|
|
||||||
target_link_libraries(
|
|
||||||
nlohmann_json_schema_validator
|
|
||||||
PUBLIC nlohmann_json::nlohmann_json)
|
|
||||||
else()
|
|
||||||
|
|
||||||
# find nlohmann/json.hpp
|
|
||||||
|
|
||||||
message(STATUS ${nlohmann_json_orignal_DIR})
|
|
||||||
|
|
||||||
find_path(JSON_HPP nlohmann/json.hpp
|
|
||||||
PATHS ${nlohmann_json_orignal_DIR})
|
|
||||||
|
|
||||||
if(EXISTS ${JSON_HPP}/nlohmann/json.hpp)
|
|
||||||
message(STATUS "Found nlohmann/json.hpp in given path: ${JSON_HPP}")
|
|
||||||
target_include_directories(
|
|
||||||
nlohmann_json_schema_validator
|
|
||||||
PUBLIC $<BUILD_INTERFACE:${JSON_HPP}>)
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "could not find nlohmann/json.hpp or any related cmake-target. Please set nlohmann_json_DIR.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# nlohmann_json_DIR has to be reset (for later use in tests)
|
|
||||||
set(nlohmann_json_DIR ${JSON_HPP})
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(JSON_VALIDATOR_IS_TOP_LEVEL)
|
||||||
|
set(BUILD_TESTS ON)
|
||||||
|
set(BUILD_EXAMPLES ON)
|
||||||
|
else()
|
||||||
|
set(BUILD_TESTS OFF)
|
||||||
|
set(BUILD_EXAMPLES OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT TARGET nlohmann_json::nlohmann_json)
|
||||||
|
find_package(nlohmann_json REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
nlohmann_json_schema_validator
|
||||||
|
PUBLIC nlohmann_json::nlohmann_json)
|
||||||
|
|
||||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR
|
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR
|
||||||
"${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
"${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||||
target_compile_options(nlohmann_json_schema_validator
|
target_compile_options(nlohmann_json_schema_validator
|
||||||
@ -141,16 +96,14 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(JSON_VALIDATOR_INSTALL)
|
install(TARGETS nlohmann_json_schema_validator
|
||||||
install(TARGETS nlohmann_json_schema_validator
|
EXPORT ${PROJECT_NAME}Targets
|
||||||
EXPORT ${PROJECT_NAME}Targets
|
LIBRARY DESTINATION lib
|
||||||
LIBRARY DESTINATION lib
|
ARCHIVE DESTINATION lib
|
||||||
ARCHIVE DESTINATION lib
|
RUNTIME DESTINATION bin)
|
||||||
RUNTIME DESTINATION bin)
|
|
||||||
|
|
||||||
install(FILES src/nlohmann/json-schema.hpp
|
install(FILES src/nlohmann/json-schema.hpp
|
||||||
DESTINATION include/nlohmann)
|
DESTINATION include/nlohmann)
|
||||||
endif()
|
|
||||||
|
|
||||||
if (BUILD_EXAMPLES)
|
if (BUILD_EXAMPLES)
|
||||||
# simple nlohmann_json_schema_validator-executable
|
# simple nlohmann_json_schema_validator-executable
|
||||||
@ -173,40 +126,36 @@ if (BUILD_TESTS)
|
|||||||
add_subdirectory(test)
|
add_subdirectory(test)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(JSON_VALIDATOR_INSTALL)
|
# Set Up the Project Targets and Config Files for CMake
|
||||||
# Set Up the Project Targets and Config Files for CMake
|
|
||||||
|
|
||||||
# Set the install path to the cmake config files (Relative, so install works correctly under Hunter as well)
|
# Set the install path to the cmake config files (Relative, so install works correctly under Hunter as well)
|
||||||
set(INSTALL_CMAKE_DIR "lib/cmake/${PROJECT_NAME}")
|
set(INSTALL_CMAKE_DIR "lib/cmake/${PROJECT_NAME}")
|
||||||
set(INSTALL_CMAKEDIR_ROOT share/cmake)
|
set(INSTALL_CMAKEDIR_ROOT share/cmake)
|
||||||
|
|
||||||
# Install Targets
|
# Install Targets
|
||||||
install(EXPORT ${PROJECT_NAME}Targets
|
install(EXPORT ${PROJECT_NAME}Targets
|
||||||
FILE ${PROJECT_NAME}Targets.cmake
|
FILE ${PROJECT_NAME}Targets.cmake
|
||||||
DESTINATION "${INSTALL_CMAKE_DIR}")
|
DESTINATION "${INSTALL_CMAKE_DIR}")
|
||||||
|
|
||||||
|
|
||||||
include(CMakePackageConfigHelpers)
|
include(CMakePackageConfigHelpers)
|
||||||
write_basic_package_version_file(
|
write_basic_package_version_file(
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
|
||||||
VERSION ${PROJECT_VERSION}
|
VERSION ${PROJECT_VERSION}
|
||||||
COMPATIBILITY SameMajorVersion
|
COMPATIBILITY SameMajorVersion
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
configure_package_config_file(
|
configure_package_config_file(
|
||||||
${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in
|
${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
|
||||||
|
INSTALL_DESTINATION ${INSTALL_CMAKEDIR_ROOT}/${PROJECT_NAME}
|
||||||
|
)
|
||||||
|
|
||||||
|
install(
|
||||||
|
FILES
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
|
||||||
INSTALL_DESTINATION ${INSTALL_CMAKEDIR_ROOT}/${PROJECT_NAME}
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
|
||||||
)
|
DESTINATION
|
||||||
|
${INSTALL_CMAKE_DIR}
|
||||||
install(
|
)
|
||||||
FILES
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
|
|
||||||
DESTINATION
|
|
||||||
${INSTALL_CMAKE_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
endif()
|
|
||||||
|
|||||||
58
README.md
58
README.md
@ -105,23 +105,12 @@ In your initial call to cmake simply add:
|
|||||||
cmake [..] -DBUILD_SHARED_LIBS=ON [..]
|
cmake [..] -DBUILD_SHARED_LIBS=ON [..]
|
||||||
```
|
```
|
||||||
|
|
||||||
## Providing access to nlohmann-json
|
## nlohmann-json integration
|
||||||
|
|
||||||
The CMake-file of this libraries tries several ways to ultimately include
|
As nlohmann-json is a dependency, this library tries find it.
|
||||||
`nlohmann/json.hpp`
|
|
||||||
|
|
||||||
During the cmake-configurate-step there are 3 tries done trying to
|
The cmake-configuration first checks if nlohmann-json is available as a cmake-target. This may be the case, because it is used as a submodule in a super-project which already provides and uses nlohmann-json.
|
||||||
access nlohmann-json:
|
Otherwise, it calls `find_package` for nlohmann-json and requires nlohmann-json to be installed on the system.
|
||||||
|
|
||||||
1. link with a nlohmann_json::nlohmann_json-target,
|
|
||||||
2. find the nlohmann_json-cmake-package and link with nlohmann_json::nlohmann_json-target or
|
|
||||||
3. find path to `nlohmann/json.hpp`.
|
|
||||||
|
|
||||||
1 is there to make it work when this project is added as
|
|
||||||
a sub-directory (via `add_subdirectory()`), 2 and 3 can be
|
|
||||||
assisted by setting the `nlohmann_json_DIR`-variable.
|
|
||||||
|
|
||||||
For 1 there is an example of you to do in example/cmake-submodule.
|
|
||||||
|
|
||||||
### Building with Hunter package manager
|
### Building with Hunter package manager
|
||||||
|
|
||||||
@ -136,14 +125,7 @@ cmake [..] -DHUNTER_ENABLED=ON [..]
|
|||||||
Adding this library as a subdirectory to a parent project is one way of
|
Adding this library as a subdirectory to a parent project is one way of
|
||||||
building it.
|
building it.
|
||||||
|
|
||||||
If the parent project
|
If the parent project already used `find_package()` to find the CMake-package of nlohmann_json or includes it as a submodule likewise.
|
||||||
|
|
||||||
- already used `find_package()` to find the CMake-package of nlohmann_json, method 1 will work.
|
|
||||||
- uses the git-repo of nlohmann_json as a subdirectory, method 1 will work.
|
|
||||||
- sets nlohmann_json_DIR, method 2 or 3 will work.
|
|
||||||
|
|
||||||
Afterwards a target called `nlohmann_json_schema_validator`
|
|
||||||
is available in order to compile and link.
|
|
||||||
|
|
||||||
### Building directly, finding a CMake-package. (short)
|
### Building directly, finding a CMake-package. (short)
|
||||||
|
|
||||||
@ -153,22 +135,7 @@ CMake's `find_package()` to be used.
|
|||||||
This library is using this mechanism if `nlohmann_json::nlohmann_json`-target
|
This library is using this mechanism if `nlohmann_json::nlohmann_json`-target
|
||||||
does not exist.
|
does not exist.
|
||||||
|
|
||||||
The variable `nlohmann_json_DIR` can be used to help `find_package()` find this package.
|
### Install
|
||||||
|
|
||||||
### Building directly: provide a path to where to find json.hpp
|
|
||||||
|
|
||||||
The last method before fataling out is by providing a path where the file json.hpp can be found.
|
|
||||||
|
|
||||||
The variable `nlohmann_json_DIR` has to be used to point to the path
|
|
||||||
where `json.hpp` is found in a subdirectory called `nlohmann`, e.g.:
|
|
||||||
|
|
||||||
`json.hpp` is located in `/path/to/nlohmann/json.hpp`. The `cmake`-command has to be run as follows:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cmake -Dnlohmann_json_DIR=/path/to [..]
|
|
||||||
```
|
|
||||||
|
|
||||||
### Method 1 - long version
|
|
||||||
|
|
||||||
Since version 2.1.0 this library can be installed and CMake-package-files will be
|
Since version 2.1.0 this library can be installed and CMake-package-files will be
|
||||||
created accordingly. If the installation of nlohmann-json and this library
|
created accordingly. If the installation of nlohmann-json and this library
|
||||||
@ -176,7 +143,6 @@ is done into default unix-system-paths CMake will be able to find this
|
|||||||
library by simply doing:
|
library by simply doing:
|
||||||
|
|
||||||
```CMake
|
```CMake
|
||||||
find_package(nlohmann_json REQUIRED)
|
|
||||||
find_package(nlohmann_json_schema_validator REQUIRED)
|
find_package(nlohmann_json_schema_validator REQUIRED)
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -187,18 +153,6 @@ target_link_libraries(<your-target> [..] nlohmann_json_schema_validator)
|
|||||||
```
|
```
|
||||||
to build and link.
|
to build and link.
|
||||||
|
|
||||||
If a custom path has been used to install this library (and nlohmann-json), `find_package()`
|
|
||||||
needs a hint for where to find the package-files, it can be provided by setting the following variables
|
|
||||||
|
|
||||||
```CMake
|
|
||||||
cmake .. \
|
|
||||||
-Dnlohmann_json_DIR=<path/to/>lib/cmake/nlohmann_json \
|
|
||||||
-Dnlohmann_json_schema_validator_DIR:PATH=<path/to/>/lib/cmake/nlohmann_json_schema_validator
|
|
||||||
```
|
|
||||||
|
|
||||||
Note that if the this library is used as cmake-package, nlohmann-json also has
|
|
||||||
to be used a cmake-package.
|
|
||||||
|
|
||||||
## Code
|
## Code
|
||||||
|
|
||||||
See also `app/json-schema-validate.cpp`.
|
See also `app/json-schema-validate.cpp`.
|
||||||
|
|||||||
@ -1,24 +0,0 @@
|
|||||||
cmake_minimum_required(VERSION 3.2)
|
|
||||||
|
|
||||||
project(simple-json-validator-as-submodule-test)
|
|
||||||
|
|
||||||
# absolute-path
|
|
||||||
set(PATH_TO_NLOHMANN_JSON_REPO $ENV{HOME}/devel/upstream/json)
|
|
||||||
|
|
||||||
# build shared library
|
|
||||||
set(BUILD_SHARED_LIBS ON)
|
|
||||||
|
|
||||||
# JSON library
|
|
||||||
option(JSON_BuildTests OFF)
|
|
||||||
add_subdirectory(${PATH_TO_NLOHMANN_JSON_REPO}
|
|
||||||
json-binary-dir
|
|
||||||
EXCLUDE_FROM_ALL)
|
|
||||||
|
|
||||||
# JSON SCHEMA VALIDATOR library
|
|
||||||
option(BUILD_TESTS OFF)
|
|
||||||
add_subdirectory(../..
|
|
||||||
json-validator-binary-dir
|
|
||||||
EXCLUDE_FROM_ALL)
|
|
||||||
|
|
||||||
add_executable(validate validate.cpp)
|
|
||||||
target_link_libraries(validate nlohmann_json_schema_validator)
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
#include <nlohmann/json-schema.hpp>
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
nlohmann::json schema_json{{"type", "number"}};
|
|
||||||
nlohmann::json_schema::json_validator validator;
|
|
||||||
|
|
||||||
validator.set_root_schema(schema_json);
|
|
||||||
|
|
||||||
validator.validate(1);
|
|
||||||
try {
|
|
||||||
validator.validate("\"1\"");
|
|
||||||
} catch (const std::exception &e) {
|
|
||||||
std::cerr << "expected exception: " << e.what() << "\n";
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user