# SPDX-License-Identifier: Apache-2.0

# dtc is an optional dependency
find_program(DTC dtc)

if(DTC)
	# Parse the 'dtc --version' output to find the installed version.
	set(MIN_DTC_VERSION 1.4.6)
	execute_process(
		COMMAND
		${DTC} --version
		OUTPUT_VARIABLE dtc_version_output
		ERROR_VARIABLE  dtc_error_output
		RESULT_VARIABLE dtc_status
		)

	if(${dtc_status} EQUAL 0)
		string(REGEX MATCH "Version: DTC ([0-9]+[.][0-9]+[.][0-9]+).*" out_var ${dtc_version_output})

		# Since it is optional, an outdated version is not an error. If an
		# outdated version is discovered, print a warning and proceed as if
		# DTC were not installed.
		if(${CMAKE_MATCH_1} VERSION_GREATER ${MIN_DTC_VERSION})
			message(STATUS "Found dtc: ${DTC} (found suitable version \"${CMAKE_MATCH_1}\", minimum required is \"${MIN_DTC_VERSION}\")")
		else()
			message(WARNING
				"Could NOT find dtc: Found unsuitable version \"${CMAKE_MATCH_1}\", but required is at least \"${MIN_DTC_VERSION}\" (found ${DTC}). Optional devicetree error checking with dtc will not be performed.")
			set(DTC DTC-NOTFOUND)
		endif()
	else()
		message(WARNING
			"Could NOT find working dtc: Found dtc (${DTC}), but failed to load with:\n ${dtc_error_output}")
		set(DTC DTC-NOTFOUND)
	endif()
endif()

# gperf is an optional dependency
find_program(GPERF gperf)

# openocd is an optional dependency
find_program(OPENOCD openocd)
	
# bossac is an optional dependency
find_program(BOSSAC bossac)

# imgtool is an optional dependency (the build may also fall back to
# scripts/imgtool.py in the mcuboot repository if that's present in
# some cases)
find_program(IMGTOOL imgtool)

find_program(MKIMAGE mkimage)

find_program(SHELL sh REQUIRED)

find_program(GREP grep REQUIRED)

find_program(BC bc REQUIRED)
