69 lines
3.5 KiB
CMake
69 lines
3.5 KiB
CMake
function(ensureNinjaPath)
|
|
if ((NOT DEFINED CMAKE_MAKE_PROGRAM OR NOT EXISTS "${CMAKE_MAKE_PROGRAM}" OR NOT CMAKE_MAKE_PROGRAM) AND (CMAKE_GENERATOR STREQUAL "Ninja" OR CMAKE_GENERATOR STREQUAL "Ninja Multi-Config"))
|
|
find_program(NINJA_EXECUTABLE ninja)
|
|
|
|
set(CMAKE_MAKE_PROGRAM "")
|
|
set(CMAKE_MAKE_PROGRAM "" PARENT_SCOPE)
|
|
|
|
if(NINJA_EXECUTABLE AND EXISTS "${NINJA_EXECUTABLE}")
|
|
set(CMAKE_MAKE_PROGRAM "${NINJA_EXECUTABLE}")
|
|
set(CMAKE_MAKE_PROGRAM "${NINJA_EXECUTABLE}" CACHE FILEPATH "Make program")
|
|
set(CMAKE_MAKE_PROGRAM "${NINJA_EXECUTABLE}" PARENT_SCOPE)
|
|
endif()
|
|
|
|
if (NOT CMAKE_MAKE_PROGRAM OR NOT EXISTS "${CMAKE_MAKE_PROGRAM}")
|
|
set(PROGRAMDATA_PATH "$ENV{ProgramData}")
|
|
file(TO_CMAKE_PATH "${PROGRAMDATA_PATH}" PROGRAMDATA_PATH)
|
|
|
|
if (PROGRAMDATA_PATH AND EXISTS "${PROGRAMDATA_PATH}")
|
|
file(GLOB_RECURSE FOUND_NINJA_EXE "${PROGRAMDATA_PATH}/chocolatey/bin/ninja.exe")
|
|
|
|
if(FOUND_NINJA_EXE)
|
|
list(GET FOUND_NINJA_EXE 0 FOUND_CMAKE_MAKE_PROGRAM)
|
|
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}")
|
|
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}" CACHE FILEPATH "Make program")
|
|
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}" PARENT_SCOPE)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if (NOT CMAKE_MAKE_PROGRAM OR NOT EXISTS "${CMAKE_MAKE_PROGRAM}")
|
|
set(LOCALAPPDATA_PATH "$ENV{LOCALAPPDATA}")
|
|
file(TO_CMAKE_PATH "${LOCALAPPDATA_PATH}" LOCALAPPDATA_PATH)
|
|
|
|
if (LOCALAPPDATA_PATH AND EXISTS "${LOCALAPPDATA_PATH}")
|
|
file(GLOB_RECURSE FOUND_NINJA_EXE "${LOCALAPPDATA_PATH}/Microsoft/WinGet/Packages/Ninja-build.Ninja_Microsoft.Winget.*/ninja.exe")
|
|
|
|
if(FOUND_NINJA_EXE)
|
|
list(GET FOUND_NINJA_EXE 0 FOUND_CMAKE_MAKE_PROGRAM)
|
|
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}")
|
|
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}" CACHE FILEPATH "Make program")
|
|
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}" PARENT_SCOPE)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if (NOT CMAKE_MAKE_PROGRAM OR NOT EXISTS "${CMAKE_MAKE_PROGRAM}")
|
|
foreach(PATH IN LISTS PROGRAMFILES_PATHS)
|
|
file(GLOB_RECURSE FOUND_NINJA_EXE
|
|
"${PATH}/Microsoft Visual Studio/*/CMake/Ninja/ninja.exe"
|
|
"${PATH}/Microsoft Visual Studio/**/*/CMake/Ninja/ninja.exe"
|
|
"${PATH}/Microsoft Visual Studio/*/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe"
|
|
"${PATH}/Microsoft Visual Studio/**/*/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe")
|
|
|
|
if(FOUND_NINJA_EXE)
|
|
list(GET FOUND_NINJA_EXE 0 FOUND_CMAKE_MAKE_PROGRAM)
|
|
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}")
|
|
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}" CACHE FILEPATH "Make program")
|
|
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}" PARENT_SCOPE)
|
|
break()
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
if (NOT CMAKE_MAKE_PROGRAM OR NOT EXISTS "${CMAKE_MAKE_PROGRAM}")
|
|
message(FATAL_ERROR "Ninja build system not found. Please install Ninja or Visual Studio Build Tools.")
|
|
endif()
|
|
endif()
|
|
endfunction()
|