11
2- cmake_minimum_required ( VERSION 2.6 )
3- project ( scitokens-cpp )
2+ cmake_minimum_required ( VERSION 3.10)
43
5- option ( BUILD_UNITTESTS "Build the scitokens-cpp unit tests" OFF )
6- option ( EXTERNAL_GTEST "Use an external/pre-installed copy of GTest" OFF )
4+ project ( scitokens-cpp
5+ DESCRIPTION "A C++ Library to interface to scitokens"
6+ VERSION 0.7.0
7+ LANGUAGES CXX)
78
8- set ( CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR} /cmake )
9+ option ( SCITOKENS_BUILD_UNITTESTS "Build the scitokens-cpp unit tests" OFF )
10+ option ( SCITOKENS_EXTERNAL_GTEST "Use an external/pre-installed copy of GTest" OFF )
11+ option ( SCTOKENS_WARNINGS_ARE_ERRORS "Turn compiler warnings into build errors" OFF )
12+
13+ set ( CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR} /cmake;${CMAKE_MODULE_PATH} " )
14+
15+ set ( CMAKE_BUILD_TYPE RelWithDebInfo) # -g -O2
916
1017include (GNUInstallDirs)
1118
1219find_package ( jwt-cpp REQUIRED )
1320find_package ( CURL REQUIRED )
1421find_package ( UUID REQUIRED )
1522
16- if ( CMAKE_COMPILER_IS_GNUCXX )
17- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror" )
18- endif ()
19-
20- if ( CMAKE_COMPILER_IS_GNUCC )
21- set (CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror" )
22- endif ()
23-
24- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
25- set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g" )
26-
27-
2823if ( APPLE )
2924
3025find_package ( OpenSSL REQUIRED )
@@ -40,34 +35,45 @@ pkg_check_modules(LIBCRYPTO REQUIRED libcrypto)
4035pkg_check_modules(OPENSSL REQUIRED openssl)
4136pkg_check_modules(SQLITE REQUIRED sqlite3)
4237
43- # pkg_check_modules fails to return an absolute path on RHEL7. Set the
44- # link directories accordingly.
45- link_directories (${OPENSSL_LIBRARY_DIRS} ${LIBCRYPTO_LIBRARY_DIRS} )
4638endif ()
4739
48- include_directories ( "${PROJECT_SOURCE_DIR} " ${JWT_CPP_INCLUDES} ${CURL_INCLUDES} ${OPENSSL_INCLUDE_DIRS} ${LIBCRYPTO_INCLUDE_DIRS} ${SQLITE_INCLUDE_DIRS} ${UUID_INCLUDE_DIRS} )
49-
5040add_library (SciTokens SHARED src/scitokens.cpp src/scitokens_internal.cpp src/scitokens_cache.cpp)
51- target_link_libraries (SciTokens ${OPENSSL_LIBRARIES} ${LIBCRYPTO_LIBRARIES} ${CURL_LIBRARIES} ${SQLITE_LIBRARIES} ${UUID_LIBRARIES} )
41+ target_compile_features (SciTokens PUBLIC cxx_std_11) # Use at least C++11 for building and when linking to scitokens
42+ target_compile_options (SciTokens PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wall $<$<BOOL :${SCITOKENS_WARNINGS_ARE_ERRORS} >:-Werror>>)
43+ target_include_directories (SciTokens PUBLIC ${JWT_CPP_INCLUDES} "${PROJECT_SOURCE_DIR} /src" PRIVATE ${CURL_INCLUDES} ${OPENSSL_INCLUDE_DIRS} ${LIBCRYPTO_INCLUDE_DIRS} ${SQLITE_INCLUDE_DIRS} ${UUID_INCLUDE_DIRS} )
44+
45+ target_link_libraries (SciTokens PUBLIC ${OPENSSL_LIBRARIES} ${LIBCRYPTO_LIBRARIES} ${CURL_LIBRARIES} ${SQLITE_LIBRARIES} ${UUID_LIBRARIES} )
46+ if (UNIX )
47+ # pkg_check_modules fails to return an absolute path on RHEL7. Set the
48+ # link directories accordingly.
49+ target_link_directories (SciTokens PUBLIC ${OPENSSL_LIBRARY_DIRS} ${LIBCRYPTO_LIBRARY_DIRS} )
50+ endif ()
5251
5352if ( NOT APPLE AND UNIX )
5453set_target_properties (SciTokens PROPERTIES LINK_FLAGS "-Wl,--version-script=${PROJECT_SOURCE_DIR} /configs/export-symbols" )
5554endif ()
5655
5756add_executable (scitokens-test src/test .cpp)
57+ #target_include_directories(scitokens-test PRIVATE "${PROJECT_SOURCE_DIR}" ${JWT_CPP_INCLUDES} ${CURL_INCLUDES} ${OPENSSL_INCLUDE_DIRS} ${LIBCRYPTO_INCLUDE_DIRS} ${SQLITE_INCLUDE_DIRS} ${UUID_INCLUDE_DIRS})
58+ target_include_directories (scitokens-test PRIVATE "${PROJECT_SOURCE_DIR} " ${JWT_CPP_INCLUDES} )
5859target_link_libraries (scitokens-test SciTokens)
60+ target_compile_options (scitokens-test PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wall $<$<BOOL :${SCITOKENS_WARNINGS_ARE_ERRORS} >:-Werror>>)
5961
6062add_executable (scitokens-verify src/verify.cpp)
6163target_link_libraries (scitokens-verify SciTokens)
64+ target_compile_options (scitokens-verify PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wall $<$<BOOL :${SCITOKENS_WARNINGS_ARE_ERRORS} >:-Werror>>)
6265
6366add_executable (scitokens-test -access src/test_access.cpp)
6467target_link_libraries (scitokens-test -access SciTokens)
68+ target_compile_options (scitokens-test -access PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wall $<$<BOOL :${SCITOKENS_WARNINGS_ARE_ERRORS} >:-Werror>>)
6569
6670add_executable (scitokens-list-access src/list_access.cpp)
6771target_link_libraries (scitokens-list-access SciTokens)
72+ target_compile_options (scitokens-list-access PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wall $<$<BOOL :${SCITOKENS_WARNINGS_ARE_ERRORS} >:-Werror>>)
6873
6974add_executable (scitokens-create src/create.cpp)
7075target_link_libraries (scitokens-create SciTokens)
76+ target_compile_options (scitokens-create PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wall $<$<BOOL :${SCITOKENS_WARNINGS_ARE_ERRORS} >:-Werror>>)
7177
7278get_directory_property (TARGETS BUILDSYSTEM_TARGETS)
7379install (
@@ -86,8 +92,8 @@ set_target_properties(
8692 SOVERSION "0"
8793 )
8894
89- if ( BUILD_UNITTESTS )
90- if ( NOT EXTERNAL_GTEST )
95+ if ( SCITOKENS_BUILD_UNITTESTS )
96+ if ( NOT SCITOKENS_EXTERNAL_GTEST )
9197include (ExternalProject)
9298ExternalProject_Add(gtest
9399 PREFIX external/gtest
0 commit comments