Blame cmake/FindFeature.cmake

Packit 1fb8d4
Packit 1fb8d4
# types: DISABLED < RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED
Packit 1fb8d4
Packit 1fb8d4
macro(find_feature _feature _type _purpose _description)
Packit 1fb8d4
Packit 1fb8d4
	string(TOUPPER ${_feature} _feature_upper)
Packit 1fb8d4
	string(TOLOWER ${_type} _type_lower)
Packit 1fb8d4
Packit 1fb8d4
	if(${_type} STREQUAL "DISABLED")
Packit 1fb8d4
		set(_feature_default "OFF")
Packit 1fb8d4
		message(STATUS "Skipping ${_type_lower} feature ${_feature} for ${_purpose} (${_description})")
Packit 1fb8d4
	else()
Packit 1fb8d4
		if(${_type} STREQUAL "REQUIRED")
Packit 1fb8d4
			set(_feature_default "ON")
Packit 1fb8d4
			message(STATUS "Finding ${_type_lower} feature ${_feature} for ${_purpose} (${_description})")
Packit 1fb8d4
			find_package(${_feature} REQUIRED)
Packit 1fb8d4
		elseif(${_type} STREQUAL "RECOMMENDED")
Packit 1fb8d4
			if(NOT ${WITH_${_feature_upper}})
Packit 1fb8d4
				set(_feature_default "OFF")
Packit 1fb8d4
				message(STATUS "Skipping ${_type_lower} feature ${_feature} for ${_purpose} (${_description})")
Packit 1fb8d4
			else()
Packit 1fb8d4
				set(_feature_default "ON")
Packit 1fb8d4
				message(STATUS "Finding ${_type_lower} feature ${_feature} for ${_purpose} (${_description})")
Packit 1fb8d4
				message(STATUS "    Disable feature ${_feature} using \"-DWITH_${_feature_upper}=OFF\"")
Packit 1fb8d4
				find_package(${_feature})
Packit 1fb8d4
			endif()
Packit 1fb8d4
		elseif(${_type} STREQUAL "OPTIONAL")
Packit 1fb8d4
			if(${WITH_${_feature_upper}})
Packit 1fb8d4
				set(_feature_default "ON")
Packit 1fb8d4
				message(STATUS "Finding ${_type_lower} feature ${_feature} for ${_purpose} (${_description})")
Packit 1fb8d4
				find_package(${_feature} REQUIRED)
Packit 1fb8d4
			else()
Packit 1fb8d4
				set(_feature_default "OFF")
Packit 1fb8d4
				message(STATUS "Skipping ${_type_lower} feature ${_feature} for ${_purpose} (${_description})")
Packit 1fb8d4
				message(STATUS "    Enable feature ${_feature} using \"-DWITH_${_feature_upper}=ON\"")
Packit 1fb8d4
			endif()
Packit 1fb8d4
		else()
Packit 1fb8d4
			set(_feature_default "ON")
Packit 1fb8d4
			message(STATUS "Finding ${_type_lower} feature ${_feature} for ${_purpose} (${_description})")
Packit 1fb8d4
			find_package(${_feature})
Packit 1fb8d4
		endif()
Packit 1fb8d4
		
Packit 1fb8d4
Packit 1fb8d4
		if(NOT ${${_feature_upper}_FOUND})
Packit 1fb8d4
			if(${_feature_default})
Packit 1fb8d4
				message(WARNING "    feature ${_feature} was requested but could not be found! ${_feature_default} / ${${_feature_upper}_FOUND}")
Packit 1fb8d4
			endif()
Packit 1fb8d4
			set(_feature_default "OFF")
Packit 1fb8d4
		endif()
Packit 1fb8d4
Packit 1fb8d4
		option(WITH_${_feature_upper} "Enable feature ${_feature} for ${_purpose}" ${_feature_default})
Packit 1fb8d4
Packit 1fb8d4
		set_package_properties(${_feature} PROPERTIES
Packit 1fb8d4
			TYPE ${_type}
Packit 1fb8d4
			PURPOSE "${_purpose}"
Packit 1fb8d4
			DESCRIPTION "${_description}")
Packit 1fb8d4
	endif()
Packit 1fb8d4
endmacro(find_feature)
Packit 1fb8d4