Chris Johns e2209fa153 sb: Fix rtems-build-dep to handle various issues
- Remove CR characters on Windows.
- Force the compiler to output English so the pattern
  matching works.

Updates #3537.
2018-10-24 21:43:18 +11:00

170 lines
3.8 KiB
Bash
Executable File

#! /bin/sh
#
# RTEMS Tools Project (http://www.rtems.org/)
# Copyright 2018 Chris Johns (chrisj@rtems.org)
# All rights reserved.
#
# This file is part of the RTEMS Tools package in 'rtems-tools'.
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
# Host Build Dependence
#
# This script finds a file that is part of the compiler's default
# build environment. The file can be header or a library.
#
# Header files:
# - Get the list of include directories from the compiler.
# - Search the include paths for the header file.
#
# Library:
# - Ask the compiler to print the library paths, add on any user
# paths and search with a wilecard.
#
set -e
op=
name=
includes=
libraries=
compile=
verbose=no
debug=no
if [ $# -eq 0 ]; then
echo 'Usage: rtems-build-dep [-c compiler] [-H header] [-I header-paths]
[-l library] [-L library-paths] [-v] [-d]'
exit 2
fi
while [ $# > 0 ]
do
case "$1"
in
-c)
if [ $# -eq 1 ]; then
echo 'error: no compiler (-c) provided'
exit 2
fi
compiler="$2"; shift;
shift;;
-H)
if [ $# -eq 1 ]; then
echo 'error: no header (-H) provided'
exit 2
fi
op="header"
name="$2"; shift;
shift;;
-I)
if [ $# -eq 1 ]; then
echo 'error: no header path (-I) provided'
exit 2
fi
includes="$2"; shift;
shift;;
-l)
if [ $# -eq 1 ]; then
echo 'error: no library (-l) provided'
exit 2
fi
op="library"
name="$2"; shift;
shift;;
-L)
if [ $# -eq 1 ]; then
echo 'error: no library path (-L) provided'
exit 2
fi
libraries="$2"; shift;
shift;;
-v)
verbose=yes
shift;;
-d)
debug=yes
shift;;
*)
break;
esac
done
if [ ${debug} = yes ]; then
set -x
fi
if [ -z "${op}" ]; then
echo "error: no header or library file to find found."
exit 2
fi
if [ -z "${compiler}" ]; then
echo "error: no compiler provided."
exit 2
fi
if [ -z "${name}" ]; then
echo "error: no name found."
exit 2
fi
#
# Header file.
#
if [ ${op} = "header" ]; then
inc_paths=$(echo | LC_ALL=C ${compiler} ${includes} -xc -E -v - 2>&1 | tr -d '\r' | \
awk 'BEGIN {flag=0;} /starts here/{flag=1;next}/End/{flag=0}flag')
for p in ${inc_paths}
do
if [ ${verbose} = yes ]; then
echo "Include: ${p}"
fi
if [ -f "${p}/${name}" ]; then
echo "found"
exit 0
fi
done
echo "not-found"
exit 0
fi
#
# Library file
#
if [ ${op} = "library" ]; then
if [ "${OS}" = "Windows_NT" ]; then
sep=';'
else
sep=':'
fi
lib_paths_1=$(LC_ALL=C ${compiler} -print-search-dirs 2>&1 | tr -d '\r' | \
grep libraries | \
sed -e 's/libraries:.*=//' | \
awk 'BEGIN {FS="'${sep}'"} {for (i=0;++i<=NF;) print $i;}')
lib_paths_2=$(echo ${libraries} | \
awk 'BEGIN {FS="-L"} {for (i=0;++i<=NF;) if (length($i) > 0) print $i;}')
for p in ${lib_paths_1} ${lib_paths_2}
do
if [ ${verbose} = yes ]; then
echo "Library: ${p}/${name}"
fi
if ls ${p}/${name} 1> /dev/null 2>&1; then
echo "found"
exit 0
fi
done
echo "not-found"
exit 0
fi
exit 1