summaryrefslogtreecommitdiff
path: root/support/scripts/br2-external
diff options
context:
space:
mode:
Diffstat (limited to 'support/scripts/br2-external')
-rwxr-xr-xsupport/scripts/br2-external88
1 files changed, 88 insertions, 0 deletions
diff --git a/support/scripts/br2-external b/support/scripts/br2-external
new file mode 100755
index 000000000..6c2b85b5c
--- /dev/null
+++ b/support/scripts/br2-external
@@ -0,0 +1,88 @@
+#!/bin/bash
+set -e
+
+# The location of the br2-external tree, once validated.
+declare BR2_EXT
+
+main() {
+ local OPT OPTARG
+ local br2_ext ofile
+
+ while getopts :ho: OPT; do
+ case "${OPT}" in
+ h) help; exit 0;;
+ o) ofile="${OPTARG}";;
+ :) error "option '%s' expects a mandatory argument\n" "${OPTARG}";;
+ \?) error "unknown option '%s'\n" "${OPTARG}";;
+ esac
+ done
+ # Forget options; keep only positional args
+ shift $((OPTIND-1))
+
+ if [ ${#} -ne 1 ]; then
+ error "need exactly one br2-external tree to be specified\n"
+ fi
+ br2_ext="${1}"
+
+ if [ -z "${ofile}" ]; then
+ error "no output file specified (-o)\n"
+ fi
+
+ do_validate "${br2_ext}"
+
+ do_kconfig >"${ofile}"
+}
+
+# Validates the br2-external tree passed as argument. Makes it cannonical
+# and store it in global variable BR2_EXT.
+do_validate() {
+ local br2_ext="${1}"
+
+ if [ ! -d "${br2_ext}" ]; then
+ error "'%s': no such file or directory\n" "${br2_ext}"
+ fi
+ if [ ! -r "${br2_ext}" -o ! -x "${br2_ext}" ]; then
+ error "'%s': permission denied\n" "${br2_ext}"
+ fi
+
+ BR2_EXT="$(cd "${br2_ext}"; pwd -P )"
+}
+
+# Generate the kconfig snippet for the br2-external tree.
+do_kconfig() {
+ printf '#\n# Automatically generated file; DO NOT EDIT.\n#\n'
+ printf '\n'
+ printf 'config BR2_EXTERNAL\n'
+ printf '\tstring\n'
+ printf '\tdefault "%s"\n' "${BR2_EXT}"
+ printf '\n'
+ printf 'menu "User-provided options"\n'
+ printf '\tdepends on BR2_EXTERNAL != "support/dummy-external"\n'
+ printf '\n'
+ printf 'source "%s/Config.in"\n' "${BR2_EXT}"
+ printf '\n'
+ printf "endmenu # User-provided options\n"
+}
+
+help() {
+ cat <<-_EOF_
+ Usage:
+ ${my_name} -o FILE PATH
+
+ ${my_name} generates the kconfig snippet to include the configuration
+ options specified in the br2-external tree passed as positional argument.
+
+ Options:
+ -o FILE
+ FILE in which to generate the kconfig snippet.
+
+ Returns:
+ 0 If no error
+ !0 If any error
+ _EOF_
+}
+
+error() { local fmt="${1}"; shift; printf "%s: ${fmt}" "${my_name}" "${@}" >&2; exit 1; }
+
+my_name="${0##*/}"
+main "${@}"