162306a36Sopenharmony_ci#!/bin/sh
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
362306a36Sopenharmony_ci#
462306a36Sopenharmony_ci# Print the C compiler name and its version in a 5 or 6-digit form.
562306a36Sopenharmony_ci# Also, perform the minimum version check.
662306a36Sopenharmony_ci
762306a36Sopenharmony_ciset -e
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci# Print the C compiler name and some version components.
1062306a36Sopenharmony_ciget_c_compiler_info()
1162306a36Sopenharmony_ci{
1262306a36Sopenharmony_ci	cat <<- EOF | "$@" -E -P -x c - 2>/dev/null
1362306a36Sopenharmony_ci	#if defined(__clang__)
1462306a36Sopenharmony_ci	Clang	__clang_major__  __clang_minor__  __clang_patchlevel__
1562306a36Sopenharmony_ci	#elif defined(__GNUC__)
1662306a36Sopenharmony_ci	GCC	__GNUC__  __GNUC_MINOR__  __GNUC_PATCHLEVEL__
1762306a36Sopenharmony_ci	#else
1862306a36Sopenharmony_ci	unknown
1962306a36Sopenharmony_ci	#endif
2062306a36Sopenharmony_ci	EOF
2162306a36Sopenharmony_ci}
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci# Convert the version string x.y.z to a canonical 5 or 6-digit form.
2462306a36Sopenharmony_ciget_canonical_version()
2562306a36Sopenharmony_ci{
2662306a36Sopenharmony_ci	IFS=.
2762306a36Sopenharmony_ci	set -- $1
2862306a36Sopenharmony_ci	echo $((10000 * $1 + 100 * $2 + $3))
2962306a36Sopenharmony_ci}
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci# $@ instead of $1 because multiple words might be given, e.g. CC="ccache gcc".
3262306a36Sopenharmony_ciorig_args="$@"
3362306a36Sopenharmony_ciset -- $(get_c_compiler_info "$@")
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciname=$1
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cimin_tool_version=$(dirname $0)/min-tool-version.sh
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_cicase "$name" in
4062306a36Sopenharmony_ciGCC)
4162306a36Sopenharmony_ci	version=$2.$3.$4
4262306a36Sopenharmony_ci	min_version=$($min_tool_version gcc)
4362306a36Sopenharmony_ci	;;
4462306a36Sopenharmony_ciClang)
4562306a36Sopenharmony_ci	version=$2.$3.$4
4662306a36Sopenharmony_ci	min_version=$($min_tool_version llvm)
4762306a36Sopenharmony_ci	;;
4862306a36Sopenharmony_ci*)
4962306a36Sopenharmony_ci	echo "$orig_args: unknown C compiler" >&2
5062306a36Sopenharmony_ci	exit 1
5162306a36Sopenharmony_ci	;;
5262306a36Sopenharmony_ciesac
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_cicversion=$(get_canonical_version $version)
5562306a36Sopenharmony_cimin_cversion=$(get_canonical_version $min_version)
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ciif [ "$cversion" -lt "$min_cversion" ]; then
5862306a36Sopenharmony_ci	echo >&2 "***"
5962306a36Sopenharmony_ci	echo >&2 "*** C compiler is too old."
6062306a36Sopenharmony_ci	echo >&2 "***   Your $name version:    $version"
6162306a36Sopenharmony_ci	echo >&2 "***   Minimum $name version: $min_version"
6262306a36Sopenharmony_ci	echo >&2 "***"
6362306a36Sopenharmony_ci	exit 1
6462306a36Sopenharmony_cifi
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ciecho $name $cversion
67