function(get_target_filename OUTPUT TARGET)
get_target_property(_TYPE "${TARGET}" TYPE)
get_target_property(_PREFIX "${TARGET}" PREFIX)
if(NOT _PREFIX AND NOT _PREFIX STREQUAL "")
set(_PREFIX "${CMAKE_${_TYPE}_PREFIX}")
endif()
get_target_property(_BASENAME "${TARGET}" OUTPUT_NAME)
if(NOT _BASENAME)
get_target_property(_BASENAME "${TARGET}" NAME)
endif()
get_target_property(_SUFFIX "${TARGET}" SUFFIX)
if(NOT _SUFFIX AND NOT _SUFFIX STREQUAL "")
set(_SUFFIX "${CMAKE_${_TYPE}_SUFFIX}")
endif()
set(${OUTPUT} "${_PREFIX}${_BASENAME}${_SUFFIX}" PARENT_SCOPE)
endfunction()
function(xcode_create_scheme)
if (NOT CMAKE_GENERATOR STREQUAL "Xcode")
return()
endif()
cmake_parse_arguments(XCSCHEME "" "TARGET;TYPE;NAME" "ARGS;OPTIONAL_ARGS" ${ARGN})
if(XCSCHEME_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "xcode_create_scheme() called with unrecognized arguments: ${XCSCHEME_UNPARSED_ARGUMENTS}")
endif()
if(NOT XCSCHEME_TARGET)
message(FATAL_ERROR "xcode_create_scheme() called without required argument TARGET")
endif()
if(NOT XCSCHEME_TYPE)
get_target_property(_TYPE "${XCSCHEME_TARGET}" TYPE)
if (_TYPE MATCHES "^.*_LIBRARY$")
set(XCSCHEME_TYPE "library")
elseif(_TYPE STREQUAL "EXECUTABLE")
set(XCSCHEME_TYPE "executable")
else()
message(FATAL_ERROR "xcode_create_scheme() could not determine type of ${XCSCHEME_TARGET}")
endif()
endif()
if(NOT XCSCHEME_NAME)
set(XCSCHEME_NAME "${XCSCHEME_TARGET}")
endif()
set(XCODEPROJ_PATH "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.xcodeproj")
set(XCSCHEME_OUTPUT_FILE "${XCODEPROJ_PATH}/xcshareddata/xcschemes/${XCSCHEME_NAME}.xcscheme")
# Prevent overwriting of the scheme file on every CMake rerun.
if (EXISTS "${XCSCHEME_OUTPUT_FILE}")
return()
endif()
file(RELATIVE_PATH XCSCHEME_CONTAINER "${CMAKE_SOURCE_DIR}" "${XCODEPROJ_PATH}")
string(RANDOM LENGTH 24 ALPHABET "0123456789ABCDEF" XCSCHEME_BLUEPRINT_ID)
get_target_filename(XCSCHEME_BUILDABLE_NAME "${XCSCHEME_TARGET}")
set(XCSCHEME_BLUEPRINT_NAME "${XCSCHEME_TARGET}")
set(XCSCHEME_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
set(XCSCHEME_NODE_EXECUTABLE "${NodeJS_EXECUTABLE}")
get_filename_component(XCSCHEME_NODE_PATH "${NodeJS_EXECUTABLE}" DIRECTORY)
set(XCSCHEME_COMMAND_LINE_ARGS "")
foreach(_ARG IN LISTS XCSCHEME_ARGS)
set(XCSCHEME_COMMAND_LINE_ARGS "${XCSCHEME_COMMAND_LINE_ARGS}\n \n ")
endforeach()
foreach(_ARG IN LISTS XCSCHEME_OPTIONAL_ARGS)
set(XCSCHEME_COMMAND_LINE_ARGS "${XCSCHEME_COMMAND_LINE_ARGS}\n \n ")
endforeach()
configure_file(
"${CMAKE_SOURCE_DIR}/cmake/${XCSCHEME_TYPE}.xcscheme"
"${XCSCHEME_OUTPUT_FILE}")
endfunction()