Skip to content

Commit 4d14395

Browse files
committed
Implement support a CMKR_CACHE environment variable
Closes #17
1 parent 3dd3368 commit 4d14395

File tree

1 file changed

+31
-4
lines changed

1 file changed

+31
-4
lines changed

cmake/cmkr.cmake

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,45 @@ else()
5353
endif()
5454

5555
# Use cached cmkr if found
56-
set(CMKR_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/_cmkr_${CMKR_TAG}")
56+
if(DEFINED ENV{CMKR_CACHE} AND EXISTS "$ENV{CMKR_CACHE}")
57+
set(CMKR_DIRECTORY_PREFIX "$ENV{CMKR_CACHE}")
58+
string(REPLACE "\\" "/" CMKR_DIRECTORY_PREFIX "${CMKR_DIRECTORY_PREFIX}")
59+
if(NOT CMKR_DIRECTORY_PREFIX MATCHES "\\/$")
60+
set(CMKR_DIRECTORY_PREFIX "${CMKR_DIRECTORY_PREFIX}/")
61+
endif()
62+
else()
63+
set(CMKR_DIRECTORY_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/_cmkr_")
64+
endif()
65+
set(CMKR_DIRECTORY "${CMKR_DIRECTORY_PREFIX}${CMKR_TAG}")
5766
set(CMKR_CACHED_EXECUTABLE "${CMKR_DIRECTORY}/bin/${CMKR_EXECUTABLE_NAME}")
5867

59-
if(NOT CMKR_CACHED_EXECUTABLE STREQUAL CMKR_EXECUTABLE AND CMKR_EXECUTABLE MATCHES "^${CMAKE_CURRENT_BINARY_DIR}/_cmkr")
60-
message(AUTHOR_WARNING "[cmkr] Upgrading '${CMKR_EXECUTABLE}' to '${CMKR_CACHED_EXECUTABLE}'")
61-
unset(CMKR_EXECUTABLE CACHE)
68+
# Handle upgrading logic
69+
if(CMKR_EXECUTABLE AND NOT CMKR_CACHED_EXECUTABLE STREQUAL CMKR_EXECUTABLE)
70+
if(CMKR_EXECUTABLE MATCHES "^${CMAKE_CURRENT_BINARY_DIR}/_cmkr")
71+
if(DEFINED ENV{CMKR_CACHE} AND EXISTS "$ENV{CMKR_CACHE}")
72+
message(AUTHOR_WARNING "[cmkr] Switching to cached cmkr: '${CMKR_CACHED_EXECUTABLE}'")
73+
if(EXISTS "${CMKR_CACHED_EXECUTABLE}")
74+
set(CMKR_EXECUTABLE "${CMKR_CACHED_EXECUTABLE}" CACHE FILEPATH "Full path to cmkr executable" FORCE)
75+
else()
76+
unset(CMKR_EXECUTABLE CACHE)
77+
endif()
78+
else()
79+
message(AUTHOR_WARNING "[cmkr] Upgrading '${CMKR_EXECUTABLE}' to '${CMKR_CACHED_EXECUTABLE}'")
80+
unset(CMKR_EXECUTABLE CACHE)
81+
endif()
82+
elseif(DEFINED ENV{CMKR_CACHE} AND EXISTS "$ENV{CMKR_CACHE}" AND CMKR_EXECUTABLE MATCHES "^${CMKR_DIRECTORY_PREFIX}")
83+
message(AUTHOR_WARNING "[cmkr] Upgrading cached '${CMKR_EXECUTABLE}' to '${CMKR_CACHED_EXECUTABLE}'")
84+
unset(CMKR_EXECUTABLE CACHE)
85+
endif()
6286
endif()
6387

6488
if(CMKR_EXECUTABLE AND EXISTS "${CMKR_EXECUTABLE}")
6589
message(VERBOSE "[cmkr] Found cmkr: '${CMKR_EXECUTABLE}'")
6690
elseif(CMKR_EXECUTABLE AND NOT CMKR_EXECUTABLE STREQUAL CMKR_CACHED_EXECUTABLE)
6791
message(FATAL_ERROR "[cmkr] '${CMKR_EXECUTABLE}' not found")
92+
elseif(NOT CMKR_EXECUTABLE AND EXISTS "${CMKR_CACHED_EXECUTABLE}")
93+
set(CMKR_EXECUTABLE "${CMKR_CACHED_EXECUTABLE}" CACHE FILEPATH "Full path to cmkr executable" FORCE)
94+
message(STATUS "[cmkr] Found cached cmkr: '${CMKR_EXECUTABLE}'")
6895
else()
6996
set(CMKR_EXECUTABLE "${CMKR_CACHED_EXECUTABLE}" CACHE FILEPATH "Full path to cmkr executable" FORCE)
7097
message(VERBOSE "[cmkr] Bootstrapping '${CMKR_EXECUTABLE}'")

0 commit comments

Comments
 (0)