aboutsummaryrefslogtreecommitdiff
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
parent3c4cf4dd0cb9e2abfa4c15cd6a65c00594abe138 (diff)
parent70fc19fb1c86c8a9d3fdad26db2c5009f8db3565 (diff)
downloadlibrebootfr-7b8af136f1f620cb91c170d897cde89b357b80a1.tar.gz
librebootfr-7b8af136f1f620cb91c170d897cde89b357b80a1.zip
Merge branch 'dependency-handling' of and_who/libreboot into master
-rwxr-xr-xlibs/project141
-rw-r--r--projects/coreboot/configs/qemu_i440fx_piix4/16MiB/corebootfb/grub/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_i440fx_piix4/16MiB/corebootfb/seabios/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_i440fx_piix4/16MiB/textmode/grub/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_i440fx_piix4/16MiB/textmode/seabios/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_i440fx_piix4/8MiB/corebootfb/grub/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_i440fx_piix4/8MiB/corebootfb/seabios/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_i440fx_piix4/8MiB/textmode/grub/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_i440fx_piix4/8MiB/textmode/seabios/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_q35_ich9/16MiB/corebootfb/grub/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_q35_ich9/16MiB/corebootfb/seabios/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_q35_ich9/16MiB/textmode/grub/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_q35_ich9/16MiB/textmode/seabios/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_q35_ich9/8MiB/corebootfb/grub/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_q35_ich9/8MiB/corebootfb/seabios/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_q35_ich9/8MiB/textmode/grub/dependencies1
-rw-r--r--projects/coreboot/configs/qemu_q35_ich9/8MiB/textmode/seabios/dependencies1
-rwxr-xr-xprojects/coreboot/coreboot4
-rwxr-xr-xprojects/cros-ec/cros-ec4
-rwxr-xr-xprojects/dejavu-fonts/dejavu-fonts4
-rwxr-xr-xprojects/depthcharge/depthcharge4
-rwxr-xr-xprojects/grub/grub4
-rwxr-xr-xprojects/libreboot-dependencies/libreboot-dependencies52
-rwxr-xr-xprojects/mosys/mosys4
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