aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/CMakeLists.txt
diff options
context:
space:
mode:
authorNicole Mazzuca <mazzucan@outlook.com>2019-08-09 11:16:35 -0700
committernicole mazzuca <mazzucan@outlook.com>2019-08-16 19:40:53 -0700
commit300e21d59ebfe42e118cf4e97887f0680fbcfa2f (patch)
treebe8e7550056df9f049044e05dbcb2e5c0910662b /toolsrc/CMakeLists.txt
parent5d1751dfda36199ae307825e38c80c3dc283b075 (diff)
downloadvcpkg-300e21d59ebfe42e118cf4e97887f0680fbcfa2f.tar.gz
vcpkg-300e21d59ebfe42e118cf4e97887f0680fbcfa2f.zip
[vcpkg] Major tool CMakeLists.txt updates
- Add the "VCPKG_DEVELOPMENT_WARNINGS" flag - setting "WERROR" will also set this flag - This flag is set by default - on GCC/clang, this will pass '-Wall -Wextra -Wpedantic -Werror' - on GCC, this will additionally pass '-Wmissing-declarations' - on clang, this will additionally pass '-Wmissing-prototypes' - on MSVC, this will pass '-W4 -WX' - On Visual Studio 2017 and later, pass '-permissive-' - Change the source for fallout of these changes - add `format` subcommand - formats all C++ source and header files using clang-format - move `include/vcpkg-test/catch.h` to `include/catch2/catch.hpp` - pass CONFIGURE_DEPENDS to file(GLOB)
Diffstat (limited to 'toolsrc/CMakeLists.txt')
-rw-r--r--toolsrc/CMakeLists.txt91
1 files changed, 57 insertions, 34 deletions
diff --git a/toolsrc/CMakeLists.txt b/toolsrc/CMakeLists.txt
index 7245179f2..3ae7cdae5 100644
--- a/toolsrc/CMakeLists.txt
+++ b/toolsrc/CMakeLists.txt
@@ -2,10 +2,17 @@ cmake_minimum_required(VERSION 3.14)
project(vcpkg C CXX)
-OPTION(BUILD_TESTING "Option for enabling testing" ON)
-OPTION(VCPKG_BUILD_BENCHMARKING "Option for enabling benchmarking" OFF)
OPTION(DEFINE_DISABLE_METRICS "Option for disabling metrics" OFF)
OPTION(VCPKG_ALLOW_APPLE_CLANG "Option for allowing apple clang" OFF)
+OPTION(VCPKG_DEVELOPMENT_WARNINGS "Option for turning on all warnings, and making them errors" ON)
+OPTION(BUILD_TESTING "Option for enabling testing" ON)
+OPTION(VCPKG_BUILD_BENCHMARKING "Option for enabling benchmarking" OFF)
+
+# for backwards compatibility with existing code
+if (WERROR)
+ set(VCPKG_DEVELOPMENT_WARNINGS On)
+endif()
+
if (DEFINE_DISABLE_METRICS)
set(DISABLE_METRICS_VALUE "1")
@@ -27,33 +34,10 @@ If you would like to try anyway, pass --allowAppleClang to bootstrap.sh.")
endif()
elseif(CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang")
set(CLANG 1)
-elseif(MSVC)
- add_compile_options(/FC)
-else()
+elseif(NOT MSVC)
message(FATAL_ERROR "Unknown compiler: ${CMAKE_CXX_COMPILER_ID}")
endif()
-if(GCC OR (CLANG AND NOT MSVC))
- if(WERROR)
- add_compile_options(-Wall -Wno-unknown-pragmas -Werror)
- endif()
-endif()
-
-if (DEFINE_DISABLE_METRICS)
- set(DISABLE_METRICS_VALUE "1")
-else()
- set(DISABLE_METRICS_VALUE "0")
-endif()
-
-file(GLOB_RECURSE VCPKGLIB_SOURCES src/vcpkg/*.cpp)
-
-add_library(vcpkglib OBJECT ${VCPKGLIB_SOURCES})
-add_executable(vcpkg src/vcpkg.cpp $<TARGET_OBJECTS:vcpkglib>)
-
-target_compile_features(vcpkg PRIVATE cxx_std_17)
-target_compile_definitions(vcpkg PRIVATE -DDISABLE_METRICS=${DISABLE_METRICS_VALUE})
-target_include_directories(vcpkg PRIVATE include)
-
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
@@ -61,7 +45,7 @@ add_definitions(-DDISABLE_METRICS=${DISABLE_METRICS_VALUE})
include_directories(include)
link_libraries(Threads::Threads)
-if(CLANG)
+if(CLANG AND NOT MSVC)
include(CheckCXXSourceCompiles)
check_cxx_source_compiles("#include <iostream>
int main() { return __GLIBCXX__; }" USES_LIBSTDCXX)
@@ -73,31 +57,70 @@ if(CLANG)
endif()
if(GCC OR (CLANG AND USES_LIBSTDCXX))
- target_link_libraries(vcpkg PRIVATE stdc++fs)
+ link_libraries(stdc++fs)
elseif(CLANG AND NOT MSVC)
- target_link_libraries(vcpkg PRIVATE c++fs)
+ link_libraries(c++fs)
endif()
-if(GCC OR CLANG)
+if(MSVC)
+ # either MSVC, or clang-cl
+ add_compile_options(-FC)
+
+ if (MSVC_VERSION GREATER 1900)
+ # Visual Studio 2017 or later
+ add_compile_options(-std:c++17 -permissive-)
+ else()
+ # Visual Studio 2015
+ add_compile_options(-std:c++latest)
+ endif()
+
+ if(VCPKG_DEVELOPMENT_WARNINGS)
+ string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ add_compile_options(-W4 -WX)
+
+ if (CLANG)
+ add_compile_options(-Wmissing-prototypes -Wno-missing-field-initializers)
+ endif()
+ endif()
+elseif(GCC OR CLANG)
add_compile_options(-std=c++1z)
- if(WERROR)
- add_compile_options(-Wall -Wno-unknown-pragmas -Werror)
+
+ if(VCPKG_DEVELOPMENT_WARNINGS)
+ add_compile_options(-Wall -Wextra -Wpedantic -Wno-unknown-pragmas -Wno-missing-field-initializers -Werror)
+
+ # GCC and clang have different names for the same warning
+ if (GCC)
+ add_compile_options(-Wmissing-declarations)
+ elseif(CLANG)
+ add_compile_options(-Wmissing-prototypes)
+ endif()
endif()
endif()
+file(GLOB_RECURSE VCPKGLIB_SOURCES CONFIGURE_DEPENDS src/vcpkg/*.cpp)
+
+add_library(vcpkglib OBJECT ${VCPKGLIB_SOURCES})
+add_executable(vcpkg src/vcpkg.cpp $<TARGET_OBJECTS:vcpkglib>)
+
if (BUILD_TESTING)
- file(GLOB_RECURSE VCPKGTEST_SOURCES src/vcpkg-test/*.cpp)
+ file(GLOB_RECURSE VCPKGTEST_SOURCES CONFIGURE_DEPENDS src/vcpkg-test/*.cpp)
enable_testing()
add_executable(vcpkg-test
${VCPKGTEST_SOURCES}
$<TARGET_OBJECTS:vcpkglib>)
- add_test(NAME default COMMAND vcpkg-test [${TEST_NAME}])
+ add_test(NAME default COMMAND vcpkg-test)
if (VCPKG_BUILD_BENCHMARKING)
target_compile_options(vcpkg-test PRIVATE -DCATCH_CONFIG_ENABLE_BENCHMARKING)
endif()
+
+ find_program(CLANG_FORMAT clang-format)
+ if (CLANG_FORMAT)
+ file(GLOB_RECURSE VCPKG_FORMAT_SOURCES CONFIGURE_DEPENDS src/*.cpp include/pch.h include/vcpkg/*.h include/vcpkg-test/*.h)
+ add_custom_target(format COMMAND ${CLANG_FORMAT} -i -verbose ${VCPKG_FORMAT_SOURCES})
+ endif()
endif()
if(MSVC)