function(resolve_keyboard KEYBOARD KEYBOAD_FOLDER_ABS_STR) message(STATUS "Resolving ${KEYBOARD}") if(EXISTS "${CMAKE_SOURCE_DIR}/keyboards/${KEYBOARD}") message(STATUS "Found in repo: ${KEYBOARD}") set(${KEYBOAD_FOLDER_ABS_STR} "${CMAKE_SOURCE_DIR}/keyboards/${KEYBOARD}" PARENT_SCOPE) return() endif() if(EXISTS "${CMAKE_SOURCE_DIR}/build/keyboard_repository/${KEYBOARD}") message(STATUS "Already checked out: ${KEYBOARD}") set(${KEYBOAD_FOLDER_ABS_STR} "${CMAKE_SOURCE_DIR}/build/keyboard_repository/${KEYBOARD}" PARENT_SCOPE) return() endif() file(READ ${CMAKE_SOURCE_DIR}/data/keyboards.json KEYBOARDS_JSON) string(JSON KEYBOARD_SLUG ERROR_VARIABLE JSON_ERROR GET ${KEYBOARDS_JSON} ${KEYBOARD}) if(${JSON_ERROR} STREQUAL "NOTFOUND") message(STATUS "Found ${KEYBOARD_SLUG}") if(${KEYBOARD_SLUG} MATCHES "^@([0-9a-zA-Z_]+/[0-9a-zA-Z_]+)") # keyboard slug is mapped to a github repo set(GIT_SLUG ${CMAKE_MATCH_1}) # string(MAKE_C_IDENTIFIER ${KEYBOARD} KEYBOARD_NAME) message(STATUS "Cloning ${GIT_SLUG}") find_package(Git QUIET) if(GIT_FOUND) file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/build/keyboard_repository/${KEYBOARD}") execute_process(COMMAND ${GIT_EXECUTABLE} clone "https://github.com/${GIT_SLUG}.git" . WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/build/keyboard_repository/${KEYBOARD}" RESULT_VARIABLE GIT_SUBMOD_RESULT) if(NOT GIT_SUBMOD_RESULT EQUAL "0") message(FATAL_ERROR "git clone failed with ${GIT_SUBMOD_RESULT}") endif() else() message("Git not found - skipping submodule update") endif() set(${KEYBOAD_FOLDER_ABS_STR} "${CMAKE_SOURCE_DIR}/build/keyboard_repository/${KEYBOARD}" PARENT_SCOPE) else() message(FATAL_ERROR "Didn't match") endif() else() message(FATAL_ERROR "Couldn't find") # set(${RESULT_STR} "NOTFOUND" PARENT_SCOPE) endif() endfunction()