diff options
author | Swift Geek <swiftgeek@gmail.com> | 2019-10-20 01:51:20 +0000 |
---|---|---|
committer | Gogs <gogitservice@gmail.com> | 2019-10-20 01:51:20 +0000 |
commit | 7b8af136f1f620cb91c170d897cde89b357b80a1 (patch) | |
tree | aad54bc8c9742e68e9be29670b0a24729fac5ab3 | |
parent | 3c4cf4dd0cb9e2abfa4c15cd6a65c00594abe138 (diff) | |
parent | 70fc19fb1c86c8a9d3fdad26db2c5009f8db3565 (diff) | |
download | librebootfr-7b8af136f1f620cb91c170d897cde89b357b80a1.tar.gz librebootfr-7b8af136f1f620cb91c170d897cde89b357b80a1.zip |
Merge branch 'dependency-handling' of and_who/libreboot into master
24 files changed, 182 insertions, 51 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 diff --git a/projects/coreboot/configs/qemu_i440fx_piix4/16MiB/corebootfb/grub/dependencies b/projects/coreboot/configs/qemu_i440fx_piix4/16MiB/corebootfb/grub/dependencies new file mode 100644 index 00000000..6640cb8d --- /dev/null +++ b/projects/coreboot/configs/qemu_i440fx_piix4/16MiB/corebootfb/grub/dependencies @@ -0,0 +1 @@ +grub coreboot diff --git a/projects/coreboot/configs/qemu_i440fx_piix4/16MiB/corebootfb/seabios/dependencies b/projects/coreboot/configs/qemu_i440fx_piix4/16MiB/corebootfb/seabios/dependencies new file mode 100644 index 00000000..41f077c0 --- /dev/null +++ b/projects/coreboot/configs/qemu_i440fx_piix4/16MiB/corebootfb/seabios/dependencies @@ -0,0 +1 @@ +seabios diff --git a/projects/coreboot/configs/qemu_i440fx_piix4/16MiB/textmode/grub/dependencies b/projects/coreboot/configs/qemu_i440fx_piix4/16MiB/textmode/grub/dependencies new file mode 100644 index 00000000..6640cb8d --- /dev/null +++ b/projects/coreboot/configs/qemu_i440fx_piix4/16MiB/textmode/grub/dependencies @@ -0,0 +1 @@ +grub coreboot diff --git a/projects/coreboot/configs/qemu_i440fx_piix4/16MiB/textmode/seabios/dependencies b/projects/coreboot/configs/qemu_i440fx_piix4/16MiB/textmode/seabios/dependencies new file mode 100644 index 00000000..41f077c0 --- /dev/null +++ b/projects/coreboot/configs/qemu_i440fx_piix4/16MiB/textmode/seabios/dependencies @@ -0,0 +1 @@ +seabios diff --git a/projects/coreboot/configs/qemu_i440fx_piix4/8MiB/corebootfb/grub/dependencies b/projects/coreboot/configs/qemu_i440fx_piix4/8MiB/corebootfb/grub/dependencies new file mode 100644 index 00000000..6640cb8d --- /dev/null +++ b/projects/coreboot/configs/qemu_i440fx_piix4/8MiB/corebootfb/grub/dependencies @@ -0,0 +1 @@ +grub coreboot diff --git a/projects/coreboot/configs/qemu_i440fx_piix4/8MiB/corebootfb/seabios/dependencies b/projects/coreboot/configs/qemu_i440fx_piix4/8MiB/corebootfb/seabios/dependencies new file mode 100644 index 00000000..41f077c0 --- /dev/null +++ b/projects/coreboot/configs/qemu_i440fx_piix4/8MiB/corebootfb/seabios/dependencies @@ -0,0 +1 @@ +seabios diff --git a/projects/coreboot/configs/qemu_i440fx_piix4/8MiB/textmode/grub/dependencies b/projects/coreboot/configs/qemu_i440fx_piix4/8MiB/textmode/grub/dependencies new file mode 100644 index 00000000..6640cb8d --- /dev/null +++ b/projects/coreboot/configs/qemu_i440fx_piix4/8MiB/textmode/grub/dependencies @@ -0,0 +1 @@ +grub coreboot diff --git a/projects/coreboot/configs/qemu_i440fx_piix4/8MiB/textmode/seabios/dependencies b/projects/coreboot/configs/qemu_i440fx_piix4/8MiB/textmode/seabios/dependencies new file mode 100644 index 00000000..41f077c0 --- /dev/null +++ b/projects/coreboot/configs/qemu_i440fx_piix4/8MiB/textmode/seabios/dependencies @@ -0,0 +1 @@ +seabios diff --git a/projects/coreboot/configs/qemu_q35_ich9/16MiB/corebootfb/grub/dependencies b/projects/coreboot/configs/qemu_q35_ich9/16MiB/corebootfb/grub/dependencies new file mode 100644 index 00000000..6640cb8d --- /dev/null +++ b/projects/coreboot/configs/qemu_q35_ich9/16MiB/corebootfb/grub/dependencies @@ -0,0 +1 @@ +grub coreboot diff --git a/projects/coreboot/configs/qemu_q35_ich9/16MiB/corebootfb/seabios/dependencies b/projects/coreboot/configs/qemu_q35_ich9/16MiB/corebootfb/seabios/dependencies new file mode 100644 index 00000000..41f077c0 --- /dev/null +++ b/projects/coreboot/configs/qemu_q35_ich9/16MiB/corebootfb/seabios/dependencies @@ -0,0 +1 @@ +seabios diff --git a/projects/coreboot/configs/qemu_q35_ich9/16MiB/textmode/grub/dependencies b/projects/coreboot/configs/qemu_q35_ich9/16MiB/textmode/grub/dependencies new file mode 100644 index 00000000..6640cb8d --- /dev/null +++ b/projects/coreboot/configs/qemu_q35_ich9/16MiB/textmode/grub/dependencies @@ -0,0 +1 @@ +grub coreboot diff --git a/projects/coreboot/configs/qemu_q35_ich9/16MiB/textmode/seabios/dependencies b/projects/coreboot/configs/qemu_q35_ich9/16MiB/textmode/seabios/dependencies new file mode 100644 index 00000000..41f077c0 --- /dev/null +++ b/projects/coreboot/configs/qemu_q35_ich9/16MiB/textmode/seabios/dependencies @@ -0,0 +1 @@ +seabios diff --git a/projects/coreboot/configs/qemu_q35_ich9/8MiB/corebootfb/grub/dependencies b/projects/coreboot/configs/qemu_q35_ich9/8MiB/corebootfb/grub/dependencies new file mode 100644 index 00000000..6640cb8d --- /dev/null +++ b/projects/coreboot/configs/qemu_q35_ich9/8MiB/corebootfb/grub/dependencies @@ -0,0 +1 @@ +grub coreboot diff --git a/projects/coreboot/configs/qemu_q35_ich9/8MiB/corebootfb/seabios/dependencies b/projects/coreboot/configs/qemu_q35_ich9/8MiB/corebootfb/seabios/dependencies new file mode 100644 index 00000000..41f077c0 --- /dev/null +++ b/projects/coreboot/configs/qemu_q35_ich9/8MiB/corebootfb/seabios/dependencies @@ -0,0 +1 @@ +seabios diff --git a/projects/coreboot/configs/qemu_q35_ich9/8MiB/textmode/grub/dependencies b/projects/coreboot/configs/qemu_q35_ich9/8MiB/textmode/grub/dependencies new file mode 100644 index 00000000..6640cb8d --- /dev/null +++ b/projects/coreboot/configs/qemu_q35_ich9/8MiB/textmode/grub/dependencies @@ -0,0 +1 @@ +grub coreboot diff --git a/projects/coreboot/configs/qemu_q35_ich9/8MiB/textmode/seabios/dependencies b/projects/coreboot/configs/qemu_q35_ich9/8MiB/textmode/seabios/dependencies new file mode 100644 index 00000000..41f077c0 --- /dev/null +++ b/projects/coreboot/configs/qemu_q35_ich9/8MiB/textmode/seabios/dependencies @@ -0,0 +1 @@ +seabios diff --git a/projects/coreboot/coreboot b/projects/coreboot/coreboot index 046a4de1..e224cccc 100755 --- a/projects/coreboot/coreboot +++ b/projects/coreboot/coreboot @@ -28,10 +28,6 @@ dependencies() { project_dependencies "$project" "$@" } -dependencies_check() { - project_dependencies_check "$project" "$@" -} - download() { local repository=$project diff --git a/projects/cros-ec/cros-ec b/projects/cros-ec/cros-ec index 1df44feb..55dc676e 100755 --- a/projects/cros-ec/cros-ec +++ b/projects/cros-ec/cros-ec @@ -23,10 +23,6 @@ dependencies() { project_dependencies "$project" "$@" } -dependencies_check() { - project_dependencies_check "$project" "$@" -} - usage() { project_usage_actions "$project" project_usage_arguments "$project" "$@" diff --git a/projects/dejavu-fonts/dejavu-fonts b/projects/dejavu-fonts/dejavu-fonts index c3d76cf9..1e91362f 100755 --- a/projects/dejavu-fonts/dejavu-fonts +++ b/projects/dejavu-fonts/dejavu-fonts @@ -23,10 +23,6 @@ dependencies() { project_dependencies "$project" "$@" } -dependencies_check() { - project_dependencies_check "$project" "$@" -} - usage() { project_usage_actions "$project" project_usage_arguments "$project" "$@" diff --git a/projects/depthcharge/depthcharge b/projects/depthcharge/depthcharge index 6a58d305..17057e69 100755 --- a/projects/depthcharge/depthcharge +++ b/projects/depthcharge/depthcharge @@ -23,10 +23,6 @@ dependencies() { project_dependencies "$project" "$@" } -dependencies_check() { - project_dependencies_check "$project" "$@" -} - usage() { project_usage_actions "$project" project_usage_arguments "$project" "$@" diff --git a/projects/grub/grub b/projects/grub/grub index 3daca888..75d29380 100755 --- a/projects/grub/grub +++ b/projects/grub/grub @@ -23,10 +23,6 @@ dependencies() { project_dependencies "$project" "$@" } -dependencies_check() { - project_dependencies_check "$project" "$@" -} - usage() { project_usage_actions "$project" project_usage_arguments "$project" "$@" diff --git a/projects/libreboot-dependencies/libreboot-dependencies b/projects/libreboot-dependencies/libreboot-dependencies new file mode 100755 index 00000000..ae50406c --- /dev/null +++ b/projects/libreboot-dependencies/libreboot-dependencies @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +# Copyright (C) 2019 Andrew Robbins <contact@andrewrobbins.info> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +usage() { + project_usage_actions "$project" +} + +collect() { + project_dependencies "$@" +} + +download() { + project_dependencies_action_arguments "$action" "$@" +} + +extract() { + project_dependencies_action_arguments "$action" "$@" +} + +update() { + project_dependencies_action_arguments "$action" "$@" +} + +build() { + project_dependencies_action_arguments "$action" "$@" +} + +install() { + project_dependencies_action_arguments "$action" "$@" +} + +release() { + project_dependencies_action_arguments "$action" "$@" +} + +clean() { + project_dependencies_action_arguments "$action" "$@" +} diff --git a/projects/mosys/mosys b/projects/mosys/mosys index fecf9267..4407d784 100755 --- a/projects/mosys/mosys +++ b/projects/mosys/mosys @@ -23,10 +23,6 @@ dependencies() { project_dependencies "$project" "$@" } -dependencies_check() { - project_dependencies_check "$project" "$@" -} - download() { local repository=$project |