@@ -27,19 +27,106 @@ set(JSONLDCPP_VERSION ${JSONLDCPP_VERSION_MAJOR}.${JSONLDCPP_VERSION_MINOR}.${JS
27
27
set (JSONLDCPP_PROJECT "jsonld-cpp" CACHE STRING "Project Name" )
28
28
29
29
# Test settings
30
+ option (JSONLDCPP_BUILD_TESTS "Build test executables" ON )
31
+ # Examples settings
32
+ option (JSONLDCPP_BUILD_EXAMPLES "Build example executables" ON )
33
+ # Load conanbuildinfo.cmake
34
+ option (USE_CONAN "If Conan is installed, use Conan to pull the project dependencies" OFF )
35
+
36
+ ###############
37
+ # Conan support
38
+ ###############
39
+
40
+ find_program (CONAN_BIN conan)
41
+ if (CONAN_BIN AND USE_CONAN)
42
+ message (STATUS "Found conan C++ package manager: ${CONAN_BIN} " )
43
+ find_file (CONANFILE NAMES "conanfile.txt" HINTS "${CMAKE_SOURCE_DIR} " )
44
+ if (CONANFILE)
45
+ message (STATUS "Found ${CONANFILE} " )
46
+ if (NOT EXISTS "${CMAKE_BINARY_DIR} /conanbuildinfo.cmake" )
47
+ message (STATUS "Trying to execute 'conan install'" )
48
+ get_filename_component (CONANFILE_DIR ${CONANFILE} DIRECTORY )
49
+ execute_process (COMMAND conan install ${CONANFILE_DIR} --build =missing)
50
+ endif ()
51
+ endif ()
52
+
53
+ if (EXISTS "${CMAKE_BINARY_DIR} /conanbuildinfo.cmake" )
54
+ include (${CMAKE_BINARY_DIR} /conanbuildinfo.cmake)
55
+ message (STATUS "conan_basic_setup()" )
56
+ conan_basic_setup(TARGETS)
57
+ else ()
58
+ message (WARNING "Please run 'conan install' if you plan to use conan" )
59
+ endif ()
60
+ endif ()
30
61
31
- set (JSONLDCPP_BUILD_TESTS ON CACHE BOOL "Build test executables" )
32
- set (JSONLDCPP_BUILD_GOOGLETEST ON CACHE BOOL "Build googletest for testing" )
33
- set (JSONLDCPP_BUILD_RAPIDCHECK ON CACHE BOOL "Build rapidcheck for testing" )
62
+ ##########################################
63
+ # Local CMake scripts and finders (if any )
64
+ ##########################################
34
65
35
- # Examples settings
66
+ if (EXISTS "${CMAKE_SOURCE_DIR} /cmake/Modules/" )
67
+ set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR} /cmake/Modules/" )
68
+ endif ()
69
+
70
+ ###############################
71
+ # Check compiler's capabilities
72
+ ###############################
36
73
37
- set (JSONLDCPP_BUILD_EXAMPLES ON CACHE BOOL "Build example executables" )
74
+ include (CheckCCompilerFlag)
75
+ include (CheckCXXCompilerFlag)
38
76
39
- # Install
77
+ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
78
+ set (CMAKE_COMPILER_IS_CLANG true )
79
+ elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
80
+ set (CMAKE_COMPILER_IS_MSVC true )
81
+ endif ()
82
+
83
+ if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
84
+ find_program (LINKER_BIN gold)
85
+ if (LINKER_BIN)
86
+ set (LINKER_BIN "gold" )
87
+ else ()
88
+ find_program (LINKER_BIN ld.gold)
89
+ if (LINKER_BIN)
90
+ set (LINKER_BIN "ld.gold" )
91
+ else ()
92
+ set (LINKER_BIN "ld" )
93
+ endif ()
94
+ endif ()
95
+
96
+ if (CMAKE_COMPILER_IS_GNUCXX)
97
+ add_compile_options (-fdiagnostics-color=always)
98
+ elseif (CMAKE_COMPILER_IS_CLANG)
99
+ add_compile_options (-fcolor-diagnostics)
100
+ endif ()
101
+
102
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" )
103
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra" )
104
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror" )
105
+ #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
106
+ #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
107
+ #set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fsanitize=address")
108
+
109
+ CHECK_CXX_COMPILER_FLAG("-fuse-ld=${LINKER_BIN} " USE_LINKER_LD_GOLD)
110
+ if (USE_LINKER_LD_GOLD)
111
+ set (CMAKE_SHARED_LINKER_FLAGS "-fuse-ld=${LINKER_BIN} ${CMAKE_SHARED_LINKER_FLAGS} " )
112
+ endif ()
113
+ endif ()
40
114
41
- set (INSTALL_JSONLDCPP ON CACHE BOOL "Enable installation" )
115
+ set (CMAKE_CXX_STANDARD 17)
116
+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
117
+ set (CMAKE_CXX_EXTENSIONS OFF )
118
+
119
+ if (${CMAKE_HOST_SYSTEM_NAME} MATCHES "Darwin" )
120
+ set (CMAKE_MACOSX_RPATH OFF )
121
+ endif ()
42
122
123
+ message (STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX} " )
124
+ set (CMAKE_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_PREFIX} /include" )
125
+ set (CMAKE_INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX} /lib" )
126
+ set (CMAKE_INSTALL_BINDIR "${CMAKE_INSTALL_PREFIX} /bin" )
127
+ message (STATUS "CMAKE_INSTALL_INCLUDEDIR: ${CMAKE_INSTALL_INCLUDEDIR} " )
128
+ message (STATUS "CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR} " )
129
+ message (STATUS "CMAKE_INSTALL_BINDIR: ${CMAKE_INSTALL_BINDIR} " )
43
130
44
131
# Log settings
45
132
@@ -51,101 +138,27 @@ message(STATUS "JSONLDCPP_VERSION : " ${JSONLDCPP_VERSION})
51
138
message (STATUS "JSONLDCPP_BUILD_TESTS : " ${JSONLDCPP_BUILD_TESTS} )
52
139
message (STATUS "JSONLDCPP_BUILD_EXAMPLES : " ${JSONLDCPP_BUILD_EXAMPLES} )
53
140
54
- message (STATUS "INSTALL_JSONLDCPP : " ${INSTALL_JSONLDCPP} )
55
141
message (STATUS "CMAKE_BUILD_TYPE : " ${CMAKE_BUILD_TYPE} )
56
142
message (STATUS "CMAKE_INSTALL_PREFIX : " ${CMAKE_INSTALL_PREFIX} )
57
143
message (STATUS "CMAKE_TOOLCHAIN_FILE : " ${CMAKE_TOOLCHAIN_FILE} )
58
144
59
145
message (STATUS "---------------------------------------------------" )
60
146
61
- if (NOT DEFINED CMAKE_INSTALL_PREFIX )
62
- set (installDir ${CMAKE_CURRENT_BINARY_DIR} /install )
63
- else ()
64
- set (installDir ${CMAKE_INSTALL_PREFIX} )
65
- endif ()
66
- message (STATUS "installDir : " ${installDir} )
67
-
68
-
69
147
# Project
70
148
71
149
project (${JSONLDCPP_PROJECT} VERSION ${JSONLDCPP_VERSION}
72
150
DESCRIPTION "Digital Contract Design's C++ implementation of JSON-LD"
73
151
HOMEPAGE_URL "https://github.com/dcdpr/jsonld-cpp"
74
152
LANGUAGES CXX )
75
153
76
-
77
- # Super build...
78
- include (ExternalProject)
79
-
80
- # Add subdirectories for external dependencies
81
-
82
- ExternalProject_Add(cpr
83
- SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR} /external/cpr
84
- INSTALL_DIR ${installDir}
85
- CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH =<INSTALL_DIR>
86
- -DCPR_BUILD_TESTS=OFF
87
- )
88
-
89
- ExternalProject_Add(uriparser
90
- SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR} /external/uriparser
91
- INSTALL_DIR ${installDir}
92
- CMAKE_ARGS -DCMAKE_PREFIX_PATH:PATH =<INSTALL_DIR>
93
- -DCMAKE_INSTALL_PREFIX:PATH =<INSTALL_DIR>
94
- -DURIPARSER_BUILD_DOCS=OFF
95
- -DURIPARSER_BUILD_TESTS=OFF
96
- -DURIPARSER_BUILD_TOOLS=OFF
97
- -DURIPARSER_BUILD_CHAR=ON
98
- -DURIPARSER_BUILD_WCHAR_T=ON
99
- -DURIPARSER_ENABLE_INSTALL=ON
100
- )
101
-
102
- ExternalProject_Add(http-link-header-cpp
103
- SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR} /external/http-link-header-cpp
104
- GIT_REPOSITORY https://github.com/dcdpr/http-link-header-cpp.git
105
- GIT_TAG origin/main
106
- INSTALL_DIR ${installDir}
107
- CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
108
- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
109
- -DCMAKE_PREFIX_PATH:PATH =<INSTALL_DIR>
110
- -DCMAKE_INSTALL_PREFIX:PATH =<INSTALL_DIR>
111
- DEPENDS uriparser
112
- )
113
-
114
- # Add local subdirectories
115
-
116
- ExternalProject_Add(jsonld-cpp-library
117
- SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR} /jsonld-cpp
118
- INSTALL_DIR ${installDir}
119
- CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
120
- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
121
- -DCMAKE_PREFIX_PATH:PATH =<INSTALL_DIR>
122
- -DCMAKE_INSTALL_PREFIX:PATH =<INSTALL_DIR>
123
- -DJSONLDCPP_VERSION=${JSONLDCPP_VERSION}
124
- -DINSTALL_JSONLDCPP=${INSTALL_JSONLDCPP}
125
- -DJSONLDCPP_BUILD_TESTS=${JSONLDCPP_BUILD_TESTS}
126
- -DJSONLDCPP_BUILD_GOOGLETEST=${JSONLDCPP_BUILD_GOOGLETEST}
127
- -DJSONLDCPP_BUILD_RAPIDCHECK=${JSONLDCPP_BUILD_RAPIDCHECK}
128
- DEPENDS uriparser http-link-header-cpp cpr
129
- )
130
-
154
+ add_subdirectory (jsonld-cpp)
131
155
if (JSONLDCPP_BUILD_EXAMPLES)
132
-
133
- ExternalProject_Add(jsonld-cpp-examples
134
- SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR} /examples
135
- INSTALL_DIR ${installDir}
136
- CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
137
- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
138
- -DCMAKE_PREFIX_PATH:PATH =<INSTALL_DIR>
139
- -DCMAKE_INSTALL_PREFIX:PATH =<INSTALL_DIR>
140
- -DJSONLDCPP_VERSION=${JSONLDCPP_VERSION}
141
- INSTALL_COMMAND ""
142
- DEPENDS jsonld-cpp-library
143
- )
144
-
156
+ add_subdirectory (examples)
145
157
endif ()
146
158
147
- add_custom_target (
148
- test
149
- COMMAND ctest
150
- WORKING_DIRECTORY jsonld-cpp-library-prefix /src/jsonld-cpp-library-build /test /testjsonld-cpp
151
- DEPENDS jsonld-cpp-library)
159
+ if (JSONLDCPP_BUILD_TESTS)
160
+ enable_testing ()
161
+ add_subdirectory (test )
162
+ else ()
163
+ message (STATUS "Skipping unit tests" )
164
+ endif ()
0 commit comments