diff options
author | Michael Olbrich <m.olbrich@pengutronix.de> | 2018-07-20 11:43:42 +0200 |
---|---|---|
committer | Michael Olbrich <m.olbrich@pengutronix.de> | 2018-09-20 11:03:54 +0200 |
commit | 492362be0308f962f2b005f38cf6205488e70463 (patch) | |
tree | ffb199ec4fd598e21517b0cda5f8737bcb7154bd /bin | |
parent | dcfcbd2e9e845a27d5d5e1dc673973e1c7f5f657 (diff) | |
download | ptxdist-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')
-rwxr-xr-x | bin/ptxdist | 113 |
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 && |