Skip to content

Commit 5caec27

Browse files
authored
Merge pull request #269 from aminya/vcpkg
2 parents d856abd + 8505a53 commit 5caec27

File tree

6 files changed

+93
-27
lines changed

6 files changed

+93
-27
lines changed

src/Clang.cmake

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
include_guard()
2+
3+
set(ProjectOptions_SRC_DIR "${CMAKE_CURRENT_LIST_DIR}")
4+
5+
# detect clang
6+
function(is_clang value)
7+
if(clang
8+
OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
9+
OR ("${DETECTED_CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND "${DETECTED_CMAKE_C_COMPILER_ID}"
10+
STREQUAL "Clang")
11+
)
12+
set(${value} ON PARENT_SCOPE)
13+
return()
14+
endif()
15+
16+
# if the compiler is unknown by CMake
17+
if(NOT CMAKE_CXX_COMPILER
18+
AND NOT CMAKE_C_COMPILER
19+
AND NOT CMAKE_CXX_COMPILER_ID
20+
AND NOT CMAKE_C_COMPILER_ID
21+
)
22+
23+
# if clang is inferred by cmake later
24+
include("${ProjectOptions_SRC_DIR}/DetectCompiler.cmake")
25+
detect_compiler()
26+
27+
if((DETECTED_CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND DETECTED_CMAKE_C_COMPILER_ID STREQUAL
28+
"Clang")
29+
)
30+
set(${value} ON PARENT_SCOPE)
31+
return()
32+
endif()
33+
34+
endif()
35+
36+
set(${value} OFF PARENT_SCOPE)
37+
endfunction()
38+
39+
# configure clang toolchain for vcpkg
40+
macro(configure_clang_vcpkg)
41+
if(WIN32)
42+
is_clang(_is_clang)
43+
if(${_is_clang})
44+
# Disable /utf-8 flag in the vcpkg toolchain file
45+
# https://github.com/microsoft/vcpkg/blob/e590c2b30c08caf1dd8d612ec602a003f9784b7d/scripts/toolchains/windows.cmake#L68
46+
message(STATUS "Disabling /utf-8 flag in the vcpkg toolchain file for Clang")
47+
set(VCPKG_SET_CHARSET_FLAG "OFF" CACHE STRING "Vcpkg set charset flag" FORCE)
48+
endif()
49+
endif()
50+
endmacro()

src/DetectCompiler.cmake

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,41 @@ set(ProjectOptions_SRC_DIR "${CMAKE_CURRENT_LIST_DIR}")
55
# includes a separate CMakeLists.txt file to detect the CXX/C compilers before project is called
66
# Using a separate file ensures that the current scope is not contaminated by the variable
77
macro(detect_compiler)
8-
find_program(CMAKE_EXECUTABLE cmake)
9-
execute_process(
10-
COMMAND
11-
"${CMAKE_EXECUTABLE}" -S "${ProjectOptions_SRC_DIR}/detect_compiler" -B
12-
"${CMAKE_CURRENT_BINARY_DIR}/detect_compiler" -G "${CMAKE_GENERATOR}" "--log-level=ERROR"
13-
"-Wno-dev"
14-
OUTPUT_QUIET
8+
if(NOT
9+
(DETECTED_CMAKE_CXX_COMPILER
10+
AND DETECTED_CMAKE_C_COMPILER
11+
AND DETECTED_CMAKE_CXX_COMPILER_ID
12+
AND DETECTED_CMAKE_C_COMPILER_ID
13+
AND DETECTED_CMAKE_SYSTEM_PROCESSOR
14+
AND DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR)
1515
)
1616

17-
# parse the detected compilers from the cache
18-
set(cache_variables
19-
CMAKE_CXX_COMPILER
20-
CMAKE_CXX_COMPILER_ID
21-
CMAKE_C_COMPILER
22-
CMAKE_C_COMPILER_ID
23-
CMAKE_SYSTEM_PROCESSOR
24-
CMAKE_HOST_SYSTEM_PROCESSOR
25-
)
26-
foreach(cache_var ${cache_variables})
27-
file(STRINGS "${CMAKE_CURRENT_BINARY_DIR}/detect_compiler/CMakeCache.txt"
28-
"DETECTED_${cache_var}" REGEX "^${cache_var}:STRING=(.*)$"
17+
find_program(CMAKE_EXECUTABLE cmake)
18+
execute_process(
19+
COMMAND
20+
"${CMAKE_EXECUTABLE}" -S "${ProjectOptions_SRC_DIR}/detect_compiler" -B
21+
"${CMAKE_CURRENT_BINARY_DIR}/detect_compiler" -G "${CMAKE_GENERATOR}" "--log-level=ERROR"
22+
"-Wno-dev"
23+
OUTPUT_QUIET
2924
)
30-
string(REGEX REPLACE "^${cache_var}:STRING=(.*)$" "\\1" "DETECTED_${cache_var}"
31-
"${DETECTED_${cache_var}}"
25+
26+
# parse the detected compilers from the cache
27+
set(cache_variables
28+
CMAKE_CXX_COMPILER
29+
CMAKE_CXX_COMPILER_ID
30+
CMAKE_C_COMPILER
31+
CMAKE_C_COMPILER_ID
32+
CMAKE_SYSTEM_PROCESSOR
33+
CMAKE_HOST_SYSTEM_PROCESSOR
3234
)
33-
endforeach()
35+
foreach(cache_var ${cache_variables})
36+
file(STRINGS "${CMAKE_CURRENT_BINARY_DIR}/detect_compiler/CMakeCache.txt"
37+
"DETECTED_${cache_var}" REGEX "^${cache_var}:STRING=(.*)$"
38+
)
39+
string(REGEX REPLACE "^${cache_var}:STRING=(.*)$" "\\1" "DETECTED_${cache_var}"
40+
"${DETECTED_${cache_var}}"
41+
)
42+
endforeach()
43+
44+
endif()
3445
endmacro()

src/Git.cmake

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ Wait for the git lock file to be released
499499
Input variables:
500500
501501
- ``REPOSITORY_PATH``: The path to the repository
502-
- ``TIMEOUT_COUNTER``: The number of times to wait before timing out
502+
- ``TIMEOUT_COUNTER``: The number of times to wait before timing out, each time 1 seconds (defaults to 120)
503503
504504
]]
505505
function(git_wait)
@@ -511,7 +511,7 @@ function(git_wait)
511511
endif()
512512

513513
if("${_fun_TIMEOUT_COUNTER}" STREQUAL "")
514-
set(_fun_TIMEOUT_COUNTER 20)
514+
set(_fun_TIMEOUT_COUNTER 120)
515515
endif()
516516

517517
set(counter 0)
@@ -520,8 +520,11 @@ function(git_wait)
520520
while(NOT EXISTS "${_fun_REPOSITORY_PATH}/.git/index"
521521
OR EXISTS "${_fun_REPOSITORY_PATH}/.git/index.lock"
522522
)
523-
message(STATUS "Waiting for git lock file...[${counter}/${_fun_TIMEOUT_COUNTER}]")
524-
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 0.5 COMMAND_ERROR_IS_FATAL LAST)
523+
if(${counter} EQUAL 0)
524+
message(STATUS "Waiting for git lock file\n")
525+
endif()
526+
527+
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1 COMMAND_ERROR_IS_FATAL LAST)
525528

526529
math(EXPR counter "${counter} + 1")
527530
if(${counter} GREATER ${_fun_TIMEOUT_COUNTER})

src/Index.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ include("${ProjectOptions_SRC_DIR}/Doxygen.cmake")
3838
include("${ProjectOptions_SRC_DIR}/StaticAnalyzers.cmake")
3939
include("${ProjectOptions_SRC_DIR}/VCEnvironment.cmake")
4040
include("${ProjectOptions_SRC_DIR}/MinGW.cmake")
41+
include("${ProjectOptions_SRC_DIR}/Clang.cmake")
4142
include("${ProjectOptions_SRC_DIR}/DetectCompiler.cmake")
4243
include("${ProjectOptions_SRC_DIR}/CrossCompiler.cmake")
4344
include("${ProjectOptions_SRC_DIR}/DynamicProjectOptions.cmake")

src/VCEnvironment.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ macro(msvc_toolchain)
6060
include(FetchContent)
6161
FetchContent_Declare(
6262
_msvc_toolchain GIT_REPOSITORY "https://github.com/MarkSchofield/WindowsToolchain.git"
63-
GIT_TAG "v0.9.0"
63+
GIT_TAG "v0.10.0"
6464
)
6565
FetchContent_MakeAvailable(_msvc_toolchain)
6666
include("${_msvc_toolchain_SOURCE_DIR}/Windows.MSVC.toolchain.cmake")

src/Vcpkg.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ macro(run_vcpkg)
232232
_checkout_vcpkg_repository()
233233

234234
configure_mingw_vcpkg()
235+
# configure_clang_vcpkg()
235236

236237
# add the vcpkg toolchain
237238
_add_vcpkg_toolchain()

0 commit comments

Comments
 (0)