summaryrefslogtreecommitdiffstats
path: root/source-builder/sb/rtems-build-dep
diff options
context:
space:
mode:
Diffstat (limited to 'source-builder/sb/rtems-build-dep')
-rwxr-xr-xsource-builder/sb/rtems-build-dep169
1 files changed, 169 insertions, 0 deletions
diff --git a/source-builder/sb/rtems-build-dep b/source-builder/sb/rtems-build-dep
new file mode 100755
index 0000000..48a0823
--- /dev/null
+++ b/source-builder/sb/rtems-build-dep
@@ -0,0 +1,169 @@
+#! /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 [ $# -gt 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="${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" -a "${OSTYPE}" != "cygwin" ]; 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