7
7
cmake_minimum_required (VERSION 2.8)
8
8
project (Uri)
9
9
10
+ option (Uri_BUILD_TESTS "Build the URI tests." ON )
11
+ option (Uri_BUILD_DOCS "Build the URI documentation." ON )
12
+ option (Uri_FULL_WARNINGS "Build the library with all warnings turned on." ON )
13
+ option (Uri_WARNINGS_AS_ERRORS "Treat warnings as errors." ON )
14
+
10
15
find_package (Threads REQUIRED)
11
16
12
17
set (CMAKE_VERBOSE_MAKEFILE true )
@@ -20,51 +25,68 @@ if (${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
20
25
else ()
21
26
message (FATAL_ERROR "No C++ 11 support (Compiler does not define -std=c++11)." )
22
27
endif ()
28
+
29
+ if (Uri_FULL_WARNINGS)
30
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" )
31
+ endif ()
32
+
33
+ if (Uri_WARNINGS_AS_ERRORS)
34
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror" )
35
+ endif ()
36
+
23
37
message ("C++ Flags: ${CMAKE_CXX_FLAGS} link flags: ${CMAKE_CXX_LINK_FLAGS} " )
24
38
elseif (${CMAKE_CXX_COMPILER_ID} MATCHES Clang)
25
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -ftemplate-depth=1024" )
26
- if (NOT CPP-NETLIB_DISABLE_LIBCXX)
39
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
40
+
41
+ if (NOT Uri_DISABLE_LIBCXX)
27
42
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++" )
28
43
endif ()
44
+
45
+ if (Uri_FULL_WARNINGS)
46
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" )
47
+ endif ()
48
+
49
+ if (Uri_WARNINGS_AS_ERRORS)
50
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror" )
51
+ endif ()
52
+
29
53
message ("C++ Flags: ${CMAKE_CXX_FLAGS} link flags: ${CMAKE_CXX_LINK_FLAGS} " )
30
54
endif ()
31
55
32
56
33
57
if (MSVC )
34
- add_definitions (-D_SCL_SECURE_NO_WARNINGS -D_VARIADIC_MAX=10)
35
- endif (MSVC )
36
- if (WIN32 )
37
- add_definitions (-D_WIN32_WINNT=0x0501)
38
- endif (WIN32 )
39
-
40
- foreach (flag_var
41
- CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
42
- CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO )
43
- if (${flag_var} MATCHES "/MD" )
58
+ message (FATAL_ERROR "The current implementation uses features that aren't fully implemented on MSVC." )
59
+
60
+ foreach (flag_var
61
+ CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
62
+ CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO )
63
+ if (${flag_var} MATCHES "/MD" )
44
64
string (REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var} }" )
45
- endif (${flag_var} MATCHES "/MD" )
46
- endforeach (flag_var)
65
+ endif (${flag_var} MATCHES "/MD" )
66
+ endforeach (flag_var)
67
+ endif (MSVC )
47
68
48
69
include_directories (${Uri_SOURCE_DIR} /src ${Uri_SOURCE_DIR} /include )
49
70
50
71
add_subdirectory (src)
51
72
52
73
# Testing
53
- if (CMAKE_PROJECT_NAME STREQUAL "Uri" OR CPP-NETLIB_BUILD_TESTS)
74
+ if (Uri_BUILD_TESTS)
75
+ message (STATUS "Configuring tests" )
54
76
enable_testing ()
55
77
add_subdirectory (deps/googletest)
56
78
add_subdirectory (test )
57
79
endif ()
58
80
59
81
# Documentation
60
- find_package (Doxygen)
61
- if (DOXYGEN_FOUND)
62
- if (NOT DEFINED CPP-NETLIB_GENERATE_DOCS)
82
+ if (Uri_BUILD_DOCS)
83
+ message ("Configuring documentation" )
84
+ find_package (Doxygen)
85
+ if (DOXYGEN_FOUND)
63
86
configure_file (${CMAKE_CURRENT_SOURCE_DIR} /Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR} /Doxyfile @ONLY)
64
87
add_custom_target (doc
65
88
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR} /Doxyfile
66
89
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
67
90
COMMENT "Generating API documentation with Doxygen" VERBATIM )
68
- set (CPP-NETLIB_GENERATE_DOCS ON )
69
91
endif ()
70
- endif (DOXYGEN_FOUND )
92
+ endif ()
0 commit comments