77cmake_minimum_required (VERSION 2.8)
88project (Uri)
99
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+
1015find_package (Threads REQUIRED)
1116
1217set (CMAKE_VERBOSE_MAKEFILE true )
@@ -20,51 +25,68 @@ if (${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
2025 else ()
2126 message (FATAL_ERROR "No C++ 11 support (Compiler does not define -std=c++11)." )
2227 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+
2337 message ("C++ Flags: ${CMAKE_CXX_FLAGS} link flags: ${CMAKE_CXX_LINK_FLAGS} " )
2438elseif (${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)
2742 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++" )
2843 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+
2953 message ("C++ Flags: ${CMAKE_CXX_FLAGS} link flags: ${CMAKE_CXX_LINK_FLAGS} " )
3054endif ()
3155
3256
3357if (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" )
4464 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 )
4768
4869include_directories (${Uri_SOURCE_DIR} /src ${Uri_SOURCE_DIR} /include )
4970
5071add_subdirectory (src)
5172
5273# Testing
53- if (CMAKE_PROJECT_NAME STREQUAL "Uri" OR CPP-NETLIB_BUILD_TESTS)
74+ if (Uri_BUILD_TESTS)
75+ message (STATUS "Configuring tests" )
5476 enable_testing ()
5577 add_subdirectory (deps/googletest)
5678 add_subdirectory (test )
5779endif ()
5880
5981# 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)
6386 configure_file (${CMAKE_CURRENT_SOURCE_DIR} /Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR} /Doxyfile @ONLY)
6487 add_custom_target (doc
6588 ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR} /Doxyfile
6689 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
6790 COMMENT "Generating API documentation with Doxygen" VERBATIM )
68- set (CPP-NETLIB_GENERATE_DOCS ON )
6991 endif ()
70- endif (DOXYGEN_FOUND )
92+ endif ()
0 commit comments