aboutsummaryrefslogtreecommitdiff
path: root/libs/project
diff options
context:
space:
mode:
authorSwift Geek <swiftgeek@gmail.com>2019-10-20 01:51:20 +0000
committerGogs <gogitservice@gmail.com>2019-10-20 01:51:20 +0000
commit7b8af136f1f620cb91c170d897cde89b357b80a1 (patch)
treeaad54bc8c9742e68e9be29670b0a24729fac5ab3 /libs/project
parent3c4cf4dd0cb9e2abfa4c15cd6a65c00594abe138 (diff)
parent70fc19fb1c86c8a9d3fdad26db2c5009f8db3565 (diff)
downloadlibrebootfr-7b8af136f1f620cb91c170d897cde89b357b80a1.tar.gz
librebootfr-7b8af136f1f620cb91c170d897cde89b357b80a1.zip
Merge branch 'dependency-handling' of and_who/libreboot into master
Diffstat (limited to 'libs/project')
-rwxr-xr-xlibs/project141
1 files changed, 114 insertions, 27 deletions
diff --git a/libs/project b/libs/project
index b9d33114..0bcc4d9d 100755
--- a/libs/project
+++ b/libs/project
@@ -60,46 +60,114 @@ project_dependencies() {
local project=$1
shift
- local -a dependencies
- mapfile -t dependencies < <(project_file_contents_herit "$project" "$CONFIGS" "$DEPENDENCIES" "$@")
+ if [[ -n "${PROJECTS_FORCE[*]}" ]]; then
+ local expanded
+ local project_force
- if [[ -n ${dependencies[*]} ]]; then
- printf '%s\n' "${dependencies[@]}"
+ for project_force in "${PROJECTS_FORCE[@]}"; do
+ project_arguments_expand_recursive $project_force | while IFS='' read -r expanded; do
+ project_dependencies_sort $expanded
+ done
+ done
fi
+
+ project_dependencies_sort "$project" "$@" | head -n -1
}
-project_dependencies_check() {
+project_dependencies_collect() {
local project=$1
shift
- local -a dependencies
- mapfile -t dependencies < <(project_dependencies "$project" "$@")
+ local argument
+ local path
- local -i missing=0
+ for argument in "" "$@"; do
+ if [[ -z $argument ]]; then
+ path=$CONFIGS
+ else
+ path=$path/$argument
+ fi
+
+ project_file_contents "$project" "$path" "$DEPENDENCIES"
+ done
+
+ project_dependencies_collect_recursive "$project" "$@"
+}
+
+project_dependencies_collect_recursive() {
+ local project=$1
+ shift
+
+ local argument
+ local path
- for ((i = 0, nodeps = ${#dependencies[@]}; i < nodeps; ++i)); do
- local -a dependency=(${dependencies[i]})
+ for argument in "" "$@"; do
+ if [[ -z $argument ]]; then
+ path=$CONFIGS
+ else
+ path=$path/$argument
+ fi
+ done
- project_check "${dependency[0]}" || let ++missing
+ project_action_helper arguments "$project" "$@" | while IFS='' read -r argument; do
+ project_file_contents "$project" "$path/$argument" "$DEPENDENCIES"
+ project_dependencies_collect_recursive "$project" "$@" "$argument"
done
+}
- return $missing
+project_dependencies_encode_recursive() {
+ local project=$1
+ shift
+
+ local project_arguments=$(arguments_concat ' ' "$project" "$@")
+ local project_arguments_encoded=$(base64 -w0 <<< "$project_arguments")
+
+ local dependency
+
+ project_dependencies_collect "$project" "$@" | while IFS='' read -r dependency; do
+ local dependency_arguments=$(arguments_concat ' ' $dependency)
+ local dependency_arguments_encoded=$(base64 -w0 <<< "$dependency_arguments")
+
+ printf '%s\n' "$project_arguments_encoded $dependency_arguments_encoded"
+
+ project_dependencies_encode_recursive $dependency
+ done
}
-project_dependencies_sources_check() {
+project_dependencies_sort() {
local project=$1
shift
- local -a dependencies
- mapfile -t dependencies < <(project_dependencies "$project" "$@")
+ (
+ set -o pipefail
+ project_dependencies_encode_recursive "$project" "$@" | tsort | base64 -d -w0 | tac
+ )
+}
+
+project_dependencies_check() {
+ local project=$1
+ shift
+
+ local dependency
local -i missing=0
- for ((i = 0, nodeps = ${#dependencies[@]}; i < nodeps; ++i)); do
- local -a dependency=(${dependencies[i]})
+ project_dependencies "$project" "$@" | while read -r dependency; do
+ project_check $dependency || let ++missing
+ done
+
+ return $missing
+}
- project_sources_directory_filled_check "${dependency[0]}" ||
- let ++missing
+project_dependencies_sources_check() {
+ local project=$1
+ shift
+
+ local dependency
+ local -i missing=0
+
+ project_dependencies "$project" "$@" | while read -r dependency; do
+ project_sources_directory_filled_check $dependency || let ++missing
done
return $missing
@@ -110,12 +178,9 @@ project_dependencies_action_arguments() {
local project=$2
shift 2
- local -a dependencies
- mapfile -t dependencies < <(project_dependencies "$project" "$@")
-
- for ((i = 0, nodeps = ${#dependencies[@]}; i < nodeps; ++i)); do
- local -a dependency=(${dependencies[i]})
+ local -a dependency
+ project_dependencies "$project" "$@" | while read -ra dependency; do
if project_function_check "${dependency[0]}" "$action"; then
project_action_arguments "$action" "${dependency[@]}"
fi
@@ -217,10 +282,12 @@ project_action_arguments() {
local project="$1"
shift
- project_include "$project"
+ (
+ project_include "$project"
- project_action_arguments_verify_recursive "$action" "$project" "$@"
- project_action_arguments_recursive "$action" "$project" "$@"
+ project_action_arguments_verify_recursive "$action" "$project" "$@"
+ project_action_arguments_recursive "$action" "$project" "$@"
+ )
}
project_action_arguments_verify_recursive() {
@@ -705,6 +772,26 @@ project_arguments_targets() {
fi
}
+project_arguments_expand_recursive() {
+ local project=$1
+ shift
+
+ local -a arguments
+ readarray -t arguments < <(project_action_helper arguments "$project" "$@")
+
+ if [[ -z "${arguments[*]}" ]]; then
+ echo "$project" "$@"
+
+ return 0
+ fi
+
+ local argument
+
+ for argument in "${arguments[@]}"; do
+ project_arguments_expand_recursive "$project" "$@" "$argument"
+ done
+}
+
project_usage_actions() {
local project="$1"
shift