Skip to content

Commit 704da02

Browse files
committed
Refactor cmake files to use validator as standalone library
1 parent b872cdb commit 704da02

File tree

4 files changed

+106
-13
lines changed

4 files changed

+106
-13
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
CMakeLists.txt.user
2+
__pycache__
3+
*.pyc
4+
.DS_Store

CMakeLists.txt

Lines changed: 76 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
CMAKE_MINIMUM_REQUIRED (VERSION 3.12)
12
PROJECT(dracoshavalidator)
23

34
SET (HEADERS
@@ -134,19 +135,81 @@ SET (HEADERS
134135
include/dracosha/validator/detail/default_adapter_impl.ipp
135136
)
136137

137-
SET (SOURCES
138-
)
138+
IF (DRACOSHA_VALIDATOR_SRC)
139+
140+
MESSAGE(STATUS "Use cpp-validator library as part of Dracosha library")
139141

140-
BUILD_DRACOSHA_MODULE()
142+
BUILD_DRACOSHA_MODULE()
141143

142-
INCLUDE(dracosha/deps/fmt)
143-
IF (NOT FMT_HEADER_ONLY)
144+
INCLUDE(dracosha/deps/fmt)
144145
TARGET_LINK_LIBRARIES(${PROJECT_NAME} INTERFACE fmt)
145-
ENDIF(NOT FMT_HEADER_ONLY)
146-
IF (NOT SYSTEM_FMTLIB)
147-
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} INTERFACE "${DRACOSHA_SOURCE_DIR}/3rdparty/fmt/include")
148-
ENDIF()
149-
150-
IF (INSTALL_DEV)
151-
INCLUDE(dracosha/Install)
152-
ENDIF (INSTALL_DEV)
146+
147+
IF (INSTALL_DEV)
148+
INCLUDE(dracosha/Install)
149+
ENDIF (INSTALL_DEV)
150+
151+
ADD_DEFINITIONS(-DDRACOSHA_VALIDATOR_FMT)
152+
153+
ELSE (DRACOSHA_VALIDATOR_SRC)
154+
155+
MESSAGE(STATUS "Use standalone cpp-validator library")
156+
157+
FIND_PACKAGE(Boost 1.65 REQUIRED)
158+
159+
OPTION(VALIDATOR_WITH_TESTS "Build tests for cpp-validator library" OFF)
160+
OPTION(VALIDATOR_WITH_EXAMPLES "Build examples for cpp-validator library" OFF)
161+
162+
OPTION(VALIDATOR_WITH_FMT "Use libfmt backend for formatting" On)
163+
164+
ADD_LIBRARY(${PROJECT_NAME} INTERFACE)
165+
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include ${Boost_INCLUDE_DIR})
166+
167+
IF (VALIDATOR_WITH_FMT)
168+
169+
MESSAGE(STATUS "Use libfmt for formatting in cpp-validator library")
170+
ADD_DEFINITIONS(-DDRACOSHA_VALIDATOR_FMT)
171+
172+
FIND_PATH(FMT_INCLUDE_DIRECTORY fmt/format.h
173+
PATHS ${FMT_INCLUDE_DIR}
174+
${FMT_ROOT}/include
175+
DOC "libfmt headers directory"
176+
)
177+
IF(NOT FMT_INCLUDE_DIRECTORY)
178+
MESSAGE(FATAL_ERROR "Could not find libfmt headers: install libfmt (don't forget to set FMT_ROOT if not in system path) or run cmake with -DVALIDATOR_WITH_FMT=No")
179+
ENDIF()
180+
181+
MESSAGE(STATUS "Using fmt headers from ${FMT_INCLUDE_DIRECTORY}")
182+
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} INTERFACE ${FMT_INCLUDE_DIRECTORY})
183+
184+
IF (NOT FMT_HEADER_ONLY)
185+
186+
FIND_LIBRARY(FMT_LIBRARY fmt
187+
PATHS ${FMT_LIB_DIR}
188+
${FMT_ROOT}/lib
189+
DOC "libfmt library"
190+
)
191+
IF(NOT FMT_LIBRARY)
192+
MESSAGE(FATAL_ERROR "Could not find libfmt library: install libfmt that is not header-only or run cmake with -DFMT_HEADER_ONLY=Yes")
193+
ENDIF()
194+
195+
MESSAGE(STATUS "Using fmt library ${FMT_LIBRARY}")
196+
TARGET_LINK_LIBRARIES(${PROJECT_NAME} INTERFACE ${FMT_LIBRARY})
197+
198+
ENDIF(NOT FMT_HEADER_ONLY)
199+
200+
ELSE(VALIDATOR_WITH_FMT)
201+
202+
MESSAGE(STATUS "Use std::stringstream for formatting in cpp-validator library")
203+
204+
ENDIF(VALIDATOR_WITH_FMT)
205+
206+
IF (VALIDATOR_WITH_TESTS)
207+
208+
MESSAGE(STATUS "Build tests for cpp-validator library")
209+
ADD_SUBDIRECTORY(test)
210+
211+
ENDIF(VALIDATOR_WITH_TESTS)
212+
213+
INSTALL(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/dracosha" DESTINATION include)
214+
215+
ENDIF(DRACOSHA_VALIDATOR_SRC)

test/CMakeLists.txt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
PROJECT(dracoshavalidator-test)
2+
3+
FIND_PACKAGE(Boost 1.65 COMPONENTS unit_test_framework REQUIRED)
4+
5+
IF(MSVC)
6+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W3 -DWIN32 -EHsc -DBOOST_ALL_NO_LIB")
7+
ELSE(MSVC)
8+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-all -fno-omit-frame-pointer")
9+
ENDIF(MSVC)
10+
11+
SET(SOURCES
12+
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
13+
)
14+
15+
ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCES})
16+
17+
SET (VALIDATOR_TEST_SRC ${CMAKE_CURRENT_SOURCE_DIR})
18+
19+
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/test.cmake)
20+
21+
TARGET_LINK_LIBRARIES(${PROJECT_NAME} dracoshavalidator ${Boost_LIBRARIES})
22+
23+
ENABLE_TESTING()
24+
ADD_TEST(${PROJECT_NAME} ${PROJECT_NAME})

test/main.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#define BOOST_TEST_MODULE DracoshaLibsTest
2+
#include <boost/test/unit_test.hpp>

0 commit comments

Comments
 (0)