b5f8cb9e90
Some shells use !(pattern|...|pattern) to match file names not containing the specified patterns. This may result in output like $ ./scripts/clang-version.sh gcc ./scripts/clang-version.sh[18]: COPYING: not found printf: %d __clang_major__: conversion error printf: %d __clang_minor__: conversion error printf: %d __clang_patchlevel__: conversion error 00000 $ and set CONFIG_CLANG_VERSION to the invalid value '00000'. POSIX says[0] If the pipeline begins with the reserved word ! and command1 is a subshell command, the application shall ensure that the ( operator at the beginning of command1 is separated from the ! by one or more <blank> characters. The behavior of the reserved word ! immediately followed by the ( operator is unspecified. So, just add a <blank> to prevent this. [0] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_02 Signed-off-by: Michael Forney <mforney@mforney.org> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
23 lines
636 B
Bash
Executable file
23 lines
636 B
Bash
Executable file
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# clang-version [-p] clang-command
|
|
#
|
|
# Prints the compiler version of `clang-command' in a canonical 4-digit form
|
|
# such as `0500' for clang-5.0 etc.
|
|
#
|
|
# With the -p option, prints the patchlevel as well, for example `050001' for
|
|
# clang-5.0.1 etc.
|
|
#
|
|
|
|
compiler="$*"
|
|
|
|
if ! ( $compiler --version | grep -q clang) ; then
|
|
echo 0
|
|
exit 1
|
|
fi
|
|
|
|
MAJOR=$(echo __clang_major__ | $compiler -E -x c - | tail -n 1)
|
|
MINOR=$(echo __clang_minor__ | $compiler -E -x c - | tail -n 1)
|
|
PATCHLEVEL=$(echo __clang_patchlevel__ | $compiler -E -x c - | tail -n 1)
|
|
printf "%d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL
|