summaryrefslogtreecommitdiffstats
path: root/bin/ptxdist
diff options
context:
space:
mode:
authorMichael Olbrich <m.olbrich@pengutronix.de>2018-07-20 11:43:42 +0200
committerMichael Olbrich <m.olbrich@pengutronix.de>2018-09-20 11:03:54 +0200
commit492362be0308f962f2b005f38cf6205488e70463 (patch)
treeffb199ec4fd598e21517b0cda5f8737bcb7154bd /bin/ptxdist
parentdcfcbd2e9e845a27d5d5e1dc673973e1c7f5f657 (diff)
downloadptxdist-492362be0308f962f2b005f38cf6205488e70463.tar.gz
ptxdist-492362be0308f962f2b005f38cf6205488e70463.tar.xz
ptxdist: find config files in multiple layers
This is the first step to support layers in PTXdist. A layer is just a subdirectory (or symlink) named 'base' in the BSP workspace. Each layer looks just like another BSP. The first layer is implicitly or explicitly PTXdist itself. Automatic config file detection works as before in the last layer. If no config file is found, then the previous tlayer is checked the same way, and so on. Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
Diffstat (limited to 'bin/ptxdist')
-rwxr-xr-xbin/ptxdist113
1 files changed, 88 insertions, 25 deletions
diff --git a/bin/ptxdist b/bin/ptxdist
index af98896d6..4153a8964 100755
--- a/bin/ptxdist
+++ b/bin/ptxdist
@@ -12,9 +12,7 @@ PTXDIST_LOG_PROMPT="ptxdist: "
# defaults
#
PTXDIST_PTXCONFIG_DEFAULT='${PTXDIST_WORKSPACE}/selected_ptxconfig'
-PTXDIST_PTXCONFIG_FALLBACK='${PTXDIST_WORKSPACE}/configs/ptxconfig'
PTXDIST_PLATFORMCONFIG_DEFAULT='${PTXDIST_WORKSPACE}/selected_platformconfig'
-PTXDIST_PLATFORMCONFIG_FALLBACK='${PTXDIST_WORKSPACE}/configs/*/platformconfig'
PTXDIST_COLLECTIONCONFIG_DEFAULT='${PTXDIST_WORKSPACE}/selected_collectionconfig'
PTXDIST_TOOLCHAIN_DEFAULT='${PTXDIST_WORKSPACE}/selected_toolchain'
PTXDIST_PTXRC_DEFAULT=${PTXDIST_PTXRC:-'${HOME}/.ptxdist/ptxdistrc-${PTXDIST_VERSION_PTXRC}'}
@@ -1206,10 +1204,10 @@ parse_first()
#
# sane defaults
#
- PTXDIST_TOOLCHAIN="${PTXDIST_TOOLCHAIN_DEFAULT}"
- PTXDIST_PLATFORMCONFIG="${PTXDIST_PLATFORMCONFIG_DEFAULT}"
- PTXDIST_COLLECTIONCONFIG="${PTXDIST_COLLECTIONCONFIG_DEFAULT}"
- PTXDIST_PTXCONFIG="${PTXDIST_PTXCONFIG_DEFAULT}"
+ PTXDIST_TOOLCHAIN=
+ PTXDIST_PLATFORMCONFIG=
+ PTXDIST_COLLECTIONCONFIG=
+ PTXDIST_PTXCONFIG=
PTXDIST_VERBOSE=0
#
@@ -1331,21 +1329,79 @@ parse_first()
;;
esac || return
done
+}
+
+setup_layers()
+{
+ export -a PTXDIST_LAYERS
+ local layer="${PTXDIST_WORKSPACE}"
- if [ "${PTX_ptxconfig_SET}" = "false" -a \
- \! -e "${PTXDIST_PTXCONFIG}" -a -e "${PTXDIST_PTXCONFIG_FALLBACK}" ]; then
- PTXDIST_PTXCONFIG="${PTXDIST_PTXCONFIG_FALLBACK}"
+ while [ -e "${layer}" -o -h "${layer}" ]; do
+ if [ ! -d "${layer}" ]; then
+ echo
+ echo "${PTXDIST_LOG_PROMPT}error: Layer '${layer}' does not exist!"
+ echo
+ exit 1
+ fi
+ if [ -z "${PTXDIST_AUTOVERSION}" -a -e "${layer}/bin/ptxdist" -a \
+ "${layer}" != "${PTXDIST_TOPDIR}" ]; then
+ echo
+ echo "${PTXDIST_LOG_PROMPT}error: PTXdist layer '${layer}' does not match the current PTXDIST_TOPDIR='${PTXDIST_TOPDIR}'"
+ echo
+ exit 1
+ fi
+ PTXDIST_LAYERS[${#PTXDIST_LAYERS[@]}]="${layer}"
+ layer="${layer}/base"
+ done
+ if [ "${PTXDIST_LAYERS[(${#PTXDIST_LAYERS[@]}-1)]}" != "${PTXDIST_TOPDIR}" ]; then
+ PTXDIST_LAYERS[${#PTXDIST_LAYERS[@]}]="${PTXDIST_TOPDIR}"
fi
- if [ "${PTX_platformconfig_SET}" = "false" -a \
- \! -e "${PTXDIST_PLATFORMCONFIG}" -a -e "${PTXDIST_PLATFORMCONFIG_FALLBACK}" ]; then
- PTXDIST_PLATFORMCONFIG="${PTXDIST_PLATFORMCONFIG_FALLBACK}"
+ if [ "${PTX_ptxconfig_SET}" = "false" ]; then
+ local -a cfgs=( "selected_ptxconfig" "configs/ptxconfig" )
+ for layer in "${PTXDIST_LAYERS[@]}"; do
+ local -a ptxd_reply
+ ptxd_get_path "${cfgs[@]/#/${layer}/}" || continue
+ PTXDIST_PTXCONFIG="${ptxd_reply[0]}"
+ break
+ done
fi
- if [ "${PTX_toolchain_SET}" = "false" -a \! -e "${PTXDIST_TOOLCHAIN_DEFAULT}" ]; then
- local -a toolchain
- if do_select_toolchain_guess 2>/dev/null; then
- PTXDIST_TOOLCHAIN="${toolchain}"
+ if [ "${PTX_platformconfig_SET}" = "false" ]; then
+ local -a cfgs=( "selected_platformconfig" "configs/*/platformconfig" )
+ for layer in "${PTXDIST_LAYERS[@]}"; do
+ local tmp=( ${cfgs[@]/#/${layer}/} )
+ if [ "${#tmp[@]}" -gt 2 ]; then
+ tmp=( "${tmp[0]}" )
+ fi
+ local -a ptxd_reply
+ ptxd_get_path "${tmp[@]}" || continue
+ PTXDIST_PLATFORMCONFIG="${ptxd_reply[0]}"
+ break
+ done
+ fi
+
+ if [ "${PTX_collectionconfig_SET}" = "false" ]; then
+ for layer in "${PTXDIST_LAYERS[@]}"; do
+ local -a ptxd_reply
+ ptxd_get_path "${layer}/selected_collectionconfig" || continue
+ PTXDIST_COLLECTIONCONFIG="${ptxd_reply[0]}"
+ break
+ done
+ fi
+
+ if [ "${PTX_toolchain_SET}" = "false" ]; then
+ for layer in "${PTXDIST_LAYERS[@]}"; do
+ local -a ptxd_reply
+ ptxd_get_path "${layer}/selected_toolchain" || continue
+ PTXDIST_TOOLCHAIN="${ptxd_reply[0]}"
+ break
+ done
+ if [ -z "${PTXDIST_TOOLCHAIN}" ]; then
+ local -a toolchain
+ if do_select_toolchain_guess 2>/dev/null; then
+ PTXDIST_TOOLCHAIN="${toolchain}"
+ fi
fi
fi
}
@@ -2092,17 +2148,9 @@ setup_topdir() {
PTXDIST_WORKSPACE="$(pwd)"
eval PTXDIST_PTXCONFIG_DEFAULT="${PTXDIST_PTXCONFIG_DEFAULT}"
- eval PTXDIST_PTXCONFIG_FALLBACK="${PTXDIST_PTXCONFIG_FALLBACK}"
eval PTXDIST_PLATFORMCONFIG_DEFAULT="${PTXDIST_PLATFORMCONFIG_DEFAULT}"
- eval PTXDIST_PLATFORMCONFIG_FALLBACK="${PTXDIST_PLATFORMCONFIG_FALLBACK}"
eval PTXDIST_COLLECTIONCONFIG_DEFAULT="${PTXDIST_COLLECTIONCONFIG_DEFAULT}"
eval PTXDIST_TOOLCHAIN_DEFAULT="${PTXDIST_TOOLCHAIN_DEFAULT}"
-
- # platformconfig is a bit more sophisticated
- PTXDIST_PLATFORMCONFIG_FALLBACK=($(echo ${PTXDIST_PLATFORMCONFIG_FALLBACK} 2>/dev/null))
- if [ ${#PTXDIST_PLATFORMCONFIG_FALLBACK[@]} -ne 1 ]; then
- unset PTXDIST_PLATFORMCONFIG_FALLBACK
- fi
}
@@ -2424,6 +2472,7 @@ setup_platform_continue_with_broken_config()
# out: PTXDIST_PLATFORMDIR
# PTXDIST_PLATFORMSUFFIX
# PTXDIST_PLATFORMCONFIGDIR
+# PTXDIST_PLATFORMCONFIG_SUBDIR
# "*DIR" correct directory definitions
#
setup_platform() {
@@ -2456,11 +2505,22 @@ setup_platform() {
cfg_file="$(readlink -f "${cfg_file}")" || return
cfg_dir="$(dirname "${cfg_file}")"
- cfg_dir="${cfg_dir/#$(readlink -f "${PTXDIST_WORKSPACE}")/${PTXDIST_WORKSPACE}}"
+ for layer in "${PTXDIST_LAYERS[@]}"; do
+ cfg_dir="${cfg_dir/#$(readlink -f ${layer})\//${layer}/}"
+ done
break
done
PTXDIST_PLATFORMCONFIGDIR="${cfg_dir:-${PTXDIST_WORKSPACE}}"
+ PTXDIST_PLATFORMCONFIG_SUBDIR=
+ if [ "${PTXDIST_WORKSPACE}" != "${PTXDIST_PLATFORMCONFIGDIR}" ]; then
+ local tmp=${PTXDIST_PLATFORMCONFIGDIR#${PTXDIST_WORKSPACE}/}
+ while [ "${tmp}" != "${tmp#base/}" ]; do
+ tmp=${tmp#base/}
+ done
+ PTXDIST_PLATFORMCONFIG_SUBDIR="${tmp}"
+ fi
+
PTXDIST_BOARDSETUP="${HOME}/.ptxdist/boardsetup.${project}${project_version}.${platform}"
}
@@ -2613,6 +2673,7 @@ setup_export() {
PTXDIST_PLATFORMDIR \
PTXDIST_PLATFORMSUFFIX \
PTXDIST_PLATFORMCONFIGDIR \
+ PTXDIST_PLATFORMCONFIG_SUBDIR \
\
PTXDIST_PARALLELMFLAGS \
PTXDIST_PARALLELMFLAGS_INTERN \
@@ -2647,6 +2708,8 @@ main() {
# --- errexit feature may be active ---
parse_first &&
+
+ setup_layers &&
# --- vars to config files are setup ---
setup_parallel &&