aboutsummaryrefslogtreecommitdiff
path: root/libs/project
diff options
context:
space:
mode:
authorAndrew Robbins <contact@andrewrobbins.info>2019-07-16 22:21:22 -0500
committerAndrew Robbins <contact@andrewrobbins.info>2019-07-16 22:45:17 -0500
commit33ddc979ce4e2247744be0979890238b6b90864c (patch)
tree265a4d38dab34f20e9bbc1ad7bbd823e6d29dc72 /libs/project
parentbb17cb223bc1d7e5eb65af03de5edb1399de8e3e (diff)
downloadlibrebootfr-33ddc979ce4e2247744be0979890238b6b90864c.tar.gz
librebootfr-33ddc979ce4e2247744be0979890238b6b90864c.zip
libs/project: Complete project_sources_prepare()
The method in which project sources are prepared from either extracted non-git source archives or sources under $PROJECTS/$project/$SOURCES are comparable to preparing git sources. This makes knowledge of the source preparation process mostly transferable across the build system regardless whether git is involved or not.
Diffstat (limited to 'libs/project')
-rwxr-xr-xlibs/project71
1 files changed, 61 insertions, 10 deletions
diff --git a/libs/project b/libs/project
index 8f4ef233..908f8942 100755
--- a/libs/project
+++ b/libs/project
@@ -521,23 +521,75 @@ project_sources_archive_missing_check() {
project_sources_prepare() {
local project="$1"
- local sources_path="$2"
+ shift
+
+ project_sources_prepare_blobs "$project" "$@"
+ project_sources_prepare_patch "$project" "$@"
+}
+
+project_sources_prepare_blobs() {
+ local project=$1
+ shift
+
+ local sources_path=$(project_sources_path "$project" "$project" "$@")
+
+ (
+ cd "$sources_path" || exit 1
- # Not implemented yet / May end up not being needed
- #project_sources_prepare_blobs
- project_sources_prepare_patch "$project" "$sources_path" "$@"
+ project_blobs "$project" "$@" | while IFS='' read -r blob; do
+ rm -f -- "$blob"
+ done
+ )
}
project_sources_prepare_patch() {
local project="$1"
- local sources_path="$2"
+ shift
- local project_path="$(project_path "$project")"
- local patches_path="$project_path/$PATCHES"
+ local argument
+ local path
+
+ for argument in "$@"; do
+ if [[ -z $path ]]; then
+ path=$argument
+ else
+ path=$path/$argument
+ fi
+ done
+
+ if [[ -n $project ]]; then
+ project_sources_patch_recursive "$project" "$path"
+ fi
+}
+
+project_sources_prepare_check() {
+ local project=$1
+ shift
+
+ local sources_path=$(project_sources_path "$project" "$project" "$@")
+
+ directory_filled_check "$sources_path"
+}
+
+project_sources_patch_recursive() {
+ local project=$1
+ local path=$2
+
+ local project_path=$(project_path "$project")
+ local sources_path=$(project_sources_path "$project" "$project" "$@")
+ local patches_path=$project_path/$PATCHES/$path
+
+ if ! [[ -d $project_path/$PATCHES ]]; then
+ return 0
+ fi
for patch in "$patches_path"/[!.]*.@(patch|diff); do
- diff_patch "$sources_path" "$patch"
+ diff_patch "$sources_path" "$patch" || return 1
done
+
+ if [[ $path != . ]]; then
+ project_sources_patch_recursive "$project" "$(dirname "$path")"
+ fi
}
project_blobs() {
@@ -751,8 +803,7 @@ project_download_archive() {
mv "${archive_path%.tar*}" "$sources_path"
fi
- # Patch the source, if necessary
- project_sources_prepare "$project" "$sources_path"
+ project_sources_prepare "$project"
}
project_download_check_archive() {