Skip to content

Commit dab2a9e

Browse files
committed
Upgrade required cmake version to 3.15 (refs #357)
1 parent 408e4f9 commit dab2a9e

22 files changed

+400
-509
lines changed

Diff for: .ignore

-1
This file was deleted.

Diff for: CMakeLists.txt

+62-62
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55

66
# CMake version
7-
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
7+
cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
88

99

1010
#
@@ -28,33 +28,56 @@ endif()
2828
include(cmake/Custom.cmake)
2929

3030
# Set policies
31-
set_policy(CMP0054 NEW) # ENABLE CMP0054: Only interpret if() arguments as variables or keywords when unquoted.
32-
set_policy(CMP0042 NEW) # ENABLE CMP0042: MACOSX_RPATH is enabled by default.
33-
set_policy(CMP0063 NEW) # ENABLE CMP0063: Honor visibility properties for all target types.
34-
set_policy(CMP0069 NEW) # ENABLE CMP0069: INTERPROCEDURAL_OPTIMIZATION is enforced when enabled.
35-
set_policy(CMP0072 NEW) # ENABLE CMP0072: FindOpenGL prefers GLVND by default when available.
36-
set_policy(CMP0077 NEW) # ENABLE CMP0077: option() honors normal variables.
31+
set_policy(CMP0054 NEW) # ENABLE CMP0054: Only interpret if() arguments as variables or keywords when unquoted.
32+
set_policy(CMP0042 NEW) # ENABLE CMP0042: MACOSX_RPATH is enabled by default.
33+
set_policy(CMP0063 NEW) # ENABLE CMP0063: Honor visibility properties for all target types.
34+
set_policy(CMP0069 NEW) # ENABLE CMP0069: INTERPROCEDURAL_OPTIMIZATION is enforced when enabled.
35+
set_policy(CMP0072 NEW) # ENABLE CMP0072: FindOpenGL prefers GLVND by default when available.
36+
set_policy(CMP0077 NEW) # ENABLE CMP0077: option() honors normal variables.
37+
set_policy(CMP0120 OLD) # DISABLE CMP0120: The WriteCompilerDetectionHeader module is removed.
3738

3839
# Include cmake modules
3940
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
4041

4142
include(GenerateExportHeader)
42-
43-
set(WriterCompilerDetectionHeaderFound NOTFOUND)
44-
# This module is only available with CMake >=3.1, so check whether it could be found
45-
# BUT in CMake 3.1 this module doesn't recognize AppleClang as compiler, so just use it as of CMake 3.2
46-
if (${CMAKE_VERSION} VERSION_GREATER "3.2")
47-
include(WriteCompilerDetectionHeader OPTIONAL RESULT_VARIABLE WriterCompilerDetectionHeaderFound)
48-
endif()
49-
50-
if (${CMAKE_VERSION} VERSION_GREATER "3.9")
51-
include(CheckIPOSupported OPTIONAL RESULT_VARIABLE CheckIPOSupportedFound)
52-
endif()
43+
include(WriteCompilerDetectionHeader)
44+
include(CheckIPOSupported OPTIONAL RESULT_VARIABLE CheckIPOSupportedFound)
5345

5446
# Include custom cmake modules
47+
include(cmake/Coverage.cmake)
48+
include(cmake/GenerateTemplateExportHeader.cmake)
5549
include(cmake/GetGitRevisionDescription.cmake)
5650
include(cmake/HealthCheck.cmake)
57-
include(cmake/GenerateTemplateExportHeader.cmake)
51+
52+
#
53+
# Project configuration options
54+
#
55+
56+
# Project options
57+
option(BUILD_SHARED_LIBS "Build shared instead of static libraries." ON)
58+
option(OPTION_SELF_CONTAINED "Create a self-contained install with all dependencies." OFF)
59+
option(OPTION_BUILD_TESTS "Build tests." OFF)
60+
option(OPTION_BUILD_DOCS "Build documentation." OFF)
61+
option(OPTION_BUILD_TOOLS "Build tools." ON)
62+
option(OPTION_BUILD_EXAMPLES "Build examples." ON)
63+
option(OPTION_BUILD_WITH_BOOST_THREAD "Use boost::thread instead of std::thread." OFF)
64+
option(OPTION_BUILD_CHECK "Enable source code check targets" OFF)
65+
option(OPTION_BUILD_OWN_KHR_HEADERS "Build and deploy glbinding with in-source KHR headers." OFF)
66+
option(OPTION_BUILD_WITH_LTO "Build with Link-time Optimization (may break AppleClang)" OFF)
67+
option(OPTION_USE_GIT_INFORMATION "Fetches commit information from the git source repository" ON)
68+
option(OPTION_ENABLE_COVERAGE "Add coverage information." OFF)
69+
70+
# Get git revision
71+
if (OPTION_USE_GIT_INFORMATION AND GLBINDING_BUILD_AS_ROOT)
72+
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
73+
string(SUBSTRING "${GIT_SHA1}" 0 12 GIT_REV)
74+
if(NOT GIT_SHA1)
75+
set(GIT_REV "0")
76+
endif()
77+
else()
78+
set(GIT_SHA1 "")
79+
set(GIT_REV "0")
80+
endif()
5881

5982

6083
#
@@ -68,33 +91,17 @@ set(META_AUTHOR_ORGANIZATION "CG Internals GmbH")
6891
set(META_AUTHOR_DOMAIN "https://github.com/cginternals/glbinding/")
6992
set(META_AUTHOR_MAINTAINER "[email protected]")
7093
set(META_VERSION_MAJOR "3")
71-
set(META_VERSION_MINOR "4")
94+
set(META_VERSION_MINOR "5")
7295
set(META_VERSION_PATCH "0")
7396
set(META_VERSION_REVISION "${GIT_REV}")
7497
set(META_VERSION "${META_VERSION_MAJOR}.${META_VERSION_MINOR}.${META_VERSION_PATCH}")
7598
set(META_NAME_VERSION "${META_PROJECT_NAME} v${META_VERSION} (${META_VERSION_REVISION})")
76-
set(META_CMAKE_INIT_SHA "c472829f01df4c99c7bd3fa96bcf6854b3dd44f1")
99+
set(META_CMAKE_INIT_SHA "1915e8c3eb77bc67c14de7ced94f0623e889416a")
100+
set(META_CMAKE_INIT_BRANCH "cmake-3.15")
77101

78102
string(MAKE_C_IDENTIFIER ${META_PROJECT_NAME} META_PROJECT_ID)
79103
string(TOUPPER ${META_PROJECT_ID} META_PROJECT_ID)
80104

81-
#
82-
# Project configuration options
83-
#
84-
85-
# Project options
86-
option(BUILD_SHARED_LIBS "Build shared instead of static libraries." ON)
87-
option(OPTION_SELF_CONTAINED "Create a self-contained install with all dependencies." OFF)
88-
option(OPTION_BUILD_TESTS "Build tests." OFF)
89-
option(OPTION_BUILD_DOCS "Build documentation." OFF)
90-
option(OPTION_BUILD_TOOLS "Build tools." ON)
91-
option(OPTION_BUILD_EXAMPLES "Build examples." ON)
92-
option(OPTION_BUILD_WITH_BOOST_THREAD "Use boost::thread instead of std::thread." OFF)
93-
option(OPTION_BUILD_CHECK "Enable source code check targets" OFF)
94-
option(OPTION_BUILD_OWN_KHR_HEADERS "Build and deploy glbinding with in-source KHR headers." OFF)
95-
option(OPTION_BUILD_WITH_LTO "Build with Link-time Optimization (may break AppleClang)" OFF)
96-
option(OPTION_USE_GIT_INFORMATION "Fetches commit information from the git source repository" ON)
97-
98105

99106
#
100107
# Declare project
@@ -105,19 +112,13 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON)
105112
set(IDE_FOLDER "")
106113

107114
# Declare project
108-
project(${META_PROJECT_NAME} C CXX)
115+
project(${META_PROJECT_NAME}
116+
VERSION ${META_VERSION}
117+
DESCRIPTION ${META_PROJECT_DESCRIPTION}
118+
)
109119

110-
# Get git revision
111-
if (OPTION_USE_GIT_INFORMATION AND GLBINDING_BUILD_AS_ROOT)
112-
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
113-
string(SUBSTRING "${GIT_SHA1}" 0 12 GIT_REV)
114-
if(NOT GIT_SHA1)
115-
set(GIT_REV "0")
116-
endif()
117-
else()
118-
set(GIT_SHA1 "")
119-
set(GIT_REV "0")
120-
endif()
120+
enable_language(C)
121+
enable_language(CXX)
121122

122123
# Set output directories
123124
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
@@ -128,25 +129,24 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
128129
file(WRITE "${PROJECT_BINARY_DIR}/VERSION" "${META_NAME_VERSION}")
129130

130131

131-
#
132-
# Compiler settings and options
133-
#
134-
135-
include(cmake/CompileOptions.cmake)
136-
137-
138132
#
139133
# Project Health Check Setup
140134
#
141135

142136
# Add cmake-init template check cmake targets
143-
add_check_template_target(${META_CMAKE_INIT_SHA})
137+
add_check_template_target(${META_CMAKE_INIT_SHA} ${META_CMAKE_INIT_BRANCH})
144138

145139
# Configure health check tools
146-
if(OPTION_BUILD_CHECK)
147-
enable_cppcheck(On)
148-
enable_clang_tidy(On)
149-
endif()
140+
enable_cppcheck(ON)
141+
enable_clang_tidy(ON)
142+
enable_coverage(${OPTION_ENABLE_COVERAGE})
143+
144+
145+
#
146+
# Compiler settings and options
147+
#
148+
149+
include(cmake/CompileOptions.cmake)
150150

151151

152152
#

Diff for: appveyor.yml

+6-4
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ version: '{build}'
22
branches:
33
only:
44
- master
5-
clone_folder: c:\projects\glbinding
5+
clone_folder: c:\projects\cmake-init
66
image:
7+
- Visual Studio 2015
78
- Visual Studio 2017
89
- Visual Studio 2019
910
configuration:
@@ -21,19 +22,20 @@ matrix:
2122
# skip unsupported combinations
2223
init:
2324
- set arch=
24-
- if "%arch%"=="Win64" ( set arch= Win64)
25+
- if "%arch%"=="Win64" ( set arch= x64)
2526
- echo %arch%
2627
- echo %APPVEYOR_BUILD_WORKER_IMAGE%
28+
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" ( set generator="Visual Studio 15 2017" )
29+
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" ( set generator="Visual Studio 14 2015" )
2730
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( set generator="Visual Studio 16 2019" )
28-
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" ( set generator="Visual Studio 15 2017%arch%" )
2931
- echo %generator%
3032

3133
before_build:
3234
- cmd: |-
3335
mkdir build
3436
cd build
3537
cmake --version
36-
cmake .. -G %generator%
38+
cmake .. -G %generator% -A %arch%
3739
3840
build:
3941
project: c:\projects\glbinding\build\glbinding.sln

Diff for: cmake/CheckTemplate.cmake

+6-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
# Get cmake-init latest commit SHA on master
44
#
55

6+
if(NOT APPLIED_CMAKE_INIT_BRANCH)
7+
set(APPLIED_CMAKE_INIT_BRANCH "master")
8+
endif ()
9+
610
file(DOWNLOAD
7-
"https://api.github.com/repos/cginternals/cmake-init/commits/master"
11+
"https://api.github.com/repos/cginternals/cmake-init/commits/${APPLIED_CMAKE_INIT_BRANCH}"
812
"${PROJECT_BINARY_DIR}/cmake-init.github.data"
913
)
1014
file(READ
@@ -45,5 +49,5 @@ endif()
4549
if(${APPLIED_CMAKE_INIT_SHA} STREQUAL ${CMAKE_INIT_SHA})
4650
message(STATUS "cmake-init template is up-to-date (${CMAKE_INIT_SHA})")
4751
else()
48-
message(STATUS "cmake-init template needs an update https://github.com/cginternals/cmake-init/compare/${APPLIED_CMAKE_INIT_SHA}...master")
52+
message(STATUS "cmake-init template needs an update https://github.com/cginternals/cmake-init/compare/${APPLIED_CMAKE_INIT_SHA}...${APPLIED_CMAKE_INIT_BRANCH}")
4953
endif()

Diff for: cmake/CompileOptions.cmake

+17-8
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ endif()
1919

2020
set(DEFAULT_PROJECT_OPTIONS
2121
DEBUG_POSTFIX "d"
22-
CXX_STANDARD 11 # Not available before CMake 3.1; see below for manual command line argument addition
22+
CXX_STANDARD 11
2323
LINKER_LANGUAGE "CXX"
2424
POSITION_INDEPENDENT_CODE ON
2525
CXX_VISIBILITY_PRESET "hidden"
@@ -71,7 +71,7 @@ set(DEFAULT_COMPILE_OPTIONS_PRIVATE)
7171
set(DEFAULT_COMPILE_OPTIONS_PUBLIC)
7272

7373
# MSVC compiler options
74-
if (MSVC)
74+
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC")
7575
set(DEFAULT_COMPILE_OPTIONS_PRIVATE ${DEFAULT_COMPILE_OPTIONS_PRIVATE}
7676
$<$<CXX_COMPILER_ID:MSVC>:
7777
/MP # -> build with multiple processes
@@ -145,16 +145,17 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU" OR "${CMAKE_CXX_COMPILER_ID}" MATCH
145145

146146
# -Wreturn-stack-address # gives false positives
147147
>
148+
149+
$<$<BOOL:${OPTION_COVERAGE_ENABLED}>:
150+
-fprofile-arcs
151+
-ftest-coverage
152+
>
153+
148154
)
149155
set(DEFAULT_COMPILE_OPTIONS_PUBLIC ${DEFAULT_COMPILE_OPTIONS_PUBLIC}
150156
$<$<PLATFORM_ID:Darwin>:
151157
-pthread
152158
>
153-
154-
# Required for CMake < 3.1; should be removed if minimum required CMake version is raised.
155-
$<$<VERSION_LESS:${CMAKE_VERSION},3.1>:
156-
-std=c++11
157-
>
158159
)
159160
endif ()
160161

@@ -166,10 +167,18 @@ set(DEFAULT_LINKER_OPTIONS)
166167

167168
# Use pthreads on mingw and linux
168169
if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU" OR "${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
169-
set(DEFAULT_LINKER_OPTIONS
170+
set(DEFAULT_LINKER_OPTIONS ${DEFAULT_LINKER_OPTIONS}
170171
PUBLIC
171172
-pthread
172173
)
174+
175+
if (${OPTION_COVERAGE_ENABLED})
176+
set(DEFAULT_LINKER_OPTIONS ${DEFAULT_LINKER_OPTIONS}
177+
PUBLIC
178+
-fprofile-arcs
179+
-ftest-coverage
180+
)
181+
endif ()
173182
endif()
174183

175184
if(NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC")

Diff for: cmake/Coverage.cmake

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
2+
include(${CMAKE_CURRENT_LIST_DIR}/Gcov.cmake)
3+
4+
set(OPTION_COVERAGE_ENABLED OFF)
5+
6+
set(LCOV_EXCLUDE_COVERAGE
7+
${LCOV_EXCLUDE_COVERAGE}
8+
"\"*/googletest/*\""
9+
"\"*v1*\""
10+
"\"/usr/*\""
11+
)
12+
13+
# Function to register a target for enabled coverage report
14+
function(generate_coverage_report target)
15+
if(NOT TARGET coverage)
16+
add_custom_target(coverage)
17+
18+
set_target_properties(coverage
19+
PROPERTIES
20+
FOLDER "Maintenance"
21+
EXCLUDE_FROM_DEFAULT_BUILD 1
22+
)
23+
endif()
24+
25+
if (${OPTION_COVERAGE_ENABLED})
26+
generate_lcov_report(coverage-${target} ${target} ${ARGN})
27+
add_dependencies(coverage coverage-${target})
28+
endif()
29+
endfunction()
30+
31+
# Enable or disable coverage
32+
function(enable_coverage status)
33+
if(NOT ${status})
34+
set(OPTION_COVERAGE_ENABLED ${status} PARENT_SCOPE)
35+
message(STATUS "Coverage lcov skipped: Manually disabled")
36+
37+
return()
38+
endif()
39+
40+
find_package(lcov)
41+
42+
if(NOT lcov_FOUND)
43+
set(OPTION_COVERAGE_ENABLED OFF PARENT_SCOPE)
44+
message(STATUS "Coverage lcov skipped: lcov not found")
45+
46+
return()
47+
endif()
48+
49+
set(OPTION_COVERAGE_ENABLED ${status} PARENT_SCOPE)
50+
message(STATUS "Coverage report enabled")
51+
endfunction()

Diff for: cmake/Custom.cmake

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ function(source_group_by_path PARENT_PATH REGEX GROUP)
2424

2525
string(REPLACE "/" "\\" FILEPATH "${FILEPATH}")
2626

27-
source_group("${GROUP}\\${FILEPATH}" REGULAR_EXPRESSION "${REGEX}" FILES ${FILENAME})
27+
source_group("${GROUP}\\${FILEPATH}" REGULAR_EXPRESSION "${REGEX}" FILES ${FILENAME})
2828

2929
endforeach()
3030

Diff for: cmake/Findcppcheck.cmake

+6
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,17 @@
55

66
include(FindPackageHandleStandardArgs)
77

8+
# work around CMP0053, see http://public.kitware.com/pipermail/cmake/2014-November/059117.html
9+
set(PROGRAMFILES_x86_ENV "PROGRAMFILES(x86)")
10+
811
find_program(cppcheck_EXECUTABLE
912
NAMES
1013
cppcheck
1114
PATHS
1215
"${CPPCHECK_DIR}"
16+
"$ENV{CPPCHECK_DIR}"
17+
"$ENV{PROGRAMFILES}/Cppcheck"
18+
"$ENV{${PROGRAMFILES_x86_ENV}}/Cppcheck"
1319
)
1420

1521
find_package_handle_standard_args(cppcheck

0 commit comments

Comments
 (0)