Skip to content

Commit d4d9bcc

Browse files
author
Matthieu Longo
committed
Refactoring: patch CMakeLists.txt
1 parent 395a256 commit d4d9bcc

File tree

6 files changed

+222
-379
lines changed

6 files changed

+222
-379
lines changed

CMakeLists.txt

+102-89
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,106 @@ set(JSONLDCPP_VERSION ${JSONLDCPP_VERSION_MAJOR}.${JSONLDCPP_VERSION_MINOR}.${JS
2727
set(JSONLDCPP_PROJECT "jsonld-cpp" CACHE STRING "Project Name")
2828

2929
# 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()
3061

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+
##########################################
3465

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+
###############################
3673

37-
set(JSONLDCPP_BUILD_EXAMPLES ON CACHE BOOL "Build example executables")
74+
include (CheckCCompilerFlag)
75+
include (CheckCXXCompilerFlag)
3876

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()
40114

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()
42122

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}")
43130

44131
# Log settings
45132

@@ -51,101 +138,27 @@ message(STATUS "JSONLDCPP_VERSION : " ${JSONLDCPP_VERSION})
51138
message(STATUS "JSONLDCPP_BUILD_TESTS : " ${JSONLDCPP_BUILD_TESTS})
52139
message(STATUS "JSONLDCPP_BUILD_EXAMPLES : " ${JSONLDCPP_BUILD_EXAMPLES})
53140

54-
message(STATUS "INSTALL_JSONLDCPP : " ${INSTALL_JSONLDCPP})
55141
message(STATUS "CMAKE_BUILD_TYPE : " ${CMAKE_BUILD_TYPE})
56142
message(STATUS "CMAKE_INSTALL_PREFIX : " ${CMAKE_INSTALL_PREFIX})
57143
message(STATUS "CMAKE_TOOLCHAIN_FILE : " ${CMAKE_TOOLCHAIN_FILE})
58144

59145
message(STATUS "---------------------------------------------------")
60146

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-
69147
# Project
70148

71149
project(${JSONLDCPP_PROJECT} VERSION ${JSONLDCPP_VERSION}
72150
DESCRIPTION "Digital Contract Design's C++ implementation of JSON-LD"
73151
HOMEPAGE_URL "https://github.com/dcdpr/jsonld-cpp"
74152
LANGUAGES CXX )
75153

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)
131155
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)
145157
endif()
146158

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()

examples/CMakeLists.txt

+17-24
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,17 @@
1-
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
2-
3-
project("jsonld-cpp-examples" VERSION ${JSONLDCPP_VERSION}
4-
LANGUAGES CXX )
5-
6-
find_package(jsonld-cpp ${JSONLDCPP_VERSION} CONFIG REQUIRED)
7-
8-
add_executable(jsonld2rdf jsonld2rdf.cpp)
9-
10-
# Misc properties
11-
12-
target_compile_features(jsonld2rdf PRIVATE cxx_std_11)
13-
set_target_properties(jsonld2rdf PROPERTIES CXX_EXTENSIONS OFF)
14-
15-
# Set version
16-
17-
target_compile_definitions(jsonld2rdf PRIVATE -DJSONLDCPP_VERSION_MAJOR=${JSONLDCPP_VERSION_MAJOR})
18-
target_compile_definitions(jsonld2rdf PRIVATE -DJSONLDCPP_VERSION_MINOR=${JSONLDCPP_VERSION_MINOR})
19-
target_compile_definitions(jsonld2rdf PRIVATE -DJSONLDCPP_VERSION_PATCH=${JSONLDCPP_VERSION_PATCH})
20-
21-
# Link
22-
23-
target_link_libraries(jsonld2rdf jsonld-cpp::jsonld-cpp)
24-
1+
set(TARGET_jsonld2rdf jsonld2rdf)
2+
3+
set(jsonld2rdf_src jsonld2rdf.cpp)
4+
set_source_files_properties(${jsonld2rdf_src} PROPERTIES LANGUAGE "CXX")
5+
6+
add_executable(${TARGET_jsonld2rdf} ${jsonld2rdf_src})
7+
target_compile_definitions(${TARGET_jsonld2rdf}
8+
PRIVATE
9+
-DJSONLDCPP_VERSION_MAJOR=${JSONLDCPP_VERSION_MAJOR}
10+
-DJSONLDCPP_VERSION_MINOR=${JSONLDCPP_VERSION_MINOR}
11+
-DJSONLDCPP_VERSION_PATCH=${JSONLDCPP_VERSION_PATCH})
12+
target_link_libraries(${TARGET_jsonld2rdf} PRIVATE jsonld-cpp)
13+
14+
install(TARGETS ${TARGET_jsonld2rdf}
15+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
16+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
17+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

0 commit comments

Comments
 (0)