Skip to content

Commit 97f1c5c

Browse files
committed
Fix a bug when there are regex characters in the path
Closes #61
1 parent 5b6d9c3 commit 97f1c5c

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

cmake/cmkr.cmake

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ else()
5858
endif()
5959

6060
# Use cached cmkr if found
61-
if(DEFINED ENV{CMKR_CACHE} AND EXISTS "$ENV{CMKR_CACHE}")
61+
if(DEFINED ENV{CMKR_CACHE})
6262
set(CMKR_DIRECTORY_PREFIX "$ENV{CMKR_CACHE}")
6363
string(REPLACE "\\" "/" CMKR_DIRECTORY_PREFIX "${CMKR_DIRECTORY_PREFIX}")
6464
if(NOT CMKR_DIRECTORY_PREFIX MATCHES "\\/$")
@@ -72,10 +72,27 @@ endif()
7272
set(CMKR_DIRECTORY "${CMKR_DIRECTORY_PREFIX}${CMKR_TAG}")
7373
set(CMKR_CACHED_EXECUTABLE "${CMKR_DIRECTORY}/bin/${CMKR_EXECUTABLE_NAME}")
7474

75+
# Helper function to check if a string starts with a prefix
76+
# Cannot use MATCHES, see: https://github.com/build-cpp/cmkr/issues/61
77+
function(cmkr_startswith str prefix result)
78+
string(LENGTH "${prefix}" prefix_length)
79+
string(LENGTH "${str}" str_length)
80+
if(prefix_length LESS_EQUAL str_length)
81+
string(SUBSTRING "${str}" 0 ${prefix_length} str_prefix)
82+
if(prefix STREQUAL str_prefix)
83+
set("${result}" ON PARENT_SCOPE)
84+
return()
85+
endif()
86+
endif()
87+
set("${result}" OFF PARENT_SCOPE)
88+
endfunction()
89+
7590
# Handle upgrading logic
7691
if(CMKR_EXECUTABLE AND NOT CMKR_CACHED_EXECUTABLE STREQUAL CMKR_EXECUTABLE)
77-
if(CMKR_EXECUTABLE MATCHES "^${CMAKE_CURRENT_BINARY_DIR}/_cmkr")
78-
if(DEFINED ENV{CMKR_CACHE} AND EXISTS "$ENV{CMKR_CACHE}")
92+
cmkr_startswith("${CMKR_EXECUTABLE}" "${CMAKE_CURRENT_BINARY_DIR}/_cmkr" CMKR_STARTSWITH_BUILD)
93+
cmkr_startswith("${CMKR_EXECUTABLE}" "${CMKR_DIRECTORY_PREFIX}" CMKR_STARTSWITH_CACHE)
94+
if(CMKR_STARTSWITH_BUILD)
95+
if(DEFINED ENV{CMKR_CACHE})
7996
message(AUTHOR_WARNING "[cmkr] Switching to cached cmkr: '${CMKR_CACHED_EXECUTABLE}'")
8097
if(EXISTS "${CMKR_CACHED_EXECUTABLE}")
8198
set(CMKR_EXECUTABLE "${CMKR_CACHED_EXECUTABLE}" CACHE FILEPATH "Full path to cmkr executable" FORCE)
@@ -86,7 +103,7 @@ if(CMKR_EXECUTABLE AND NOT CMKR_CACHED_EXECUTABLE STREQUAL CMKR_EXECUTABLE)
86103
message(AUTHOR_WARNING "[cmkr] Upgrading '${CMKR_EXECUTABLE}' to '${CMKR_CACHED_EXECUTABLE}'")
87104
unset(CMKR_EXECUTABLE CACHE)
88105
endif()
89-
elseif(DEFINED ENV{CMKR_CACHE} AND EXISTS "$ENV{CMKR_CACHE}" AND CMKR_EXECUTABLE MATCHES "^${CMKR_DIRECTORY_PREFIX}")
106+
elseif(DEFINED ENV{CMKR_CACHE} AND CMKR_STARTSWITH_CACHE)
90107
message(AUTHOR_WARNING "[cmkr] Upgrading cached '${CMKR_EXECUTABLE}' to '${CMKR_CACHED_EXECUTABLE}'")
91108
unset(CMKR_EXECUTABLE CACHE)
92109
endif()

0 commit comments

Comments
 (0)