From 425162db93c50033df08ada44f3a08142bf1ed12 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 17:37:26 +0100 Subject: [PATCH] boot-libre: add --gen-blob-script to generate a deblob script This should enable various distributions and build system to reuse the generated script to deblob u-boot releases themselves. Signed-off-by: Denis 'GNUtoo' Carikli --- resources/scripts/build/release/u-boot-libre | 39 +++++++- resources/scripts/download/u-boot | 93 ++++++++++++++++++-- tests/u-boot-libre.sha512 | 3 + 3 files changed, 127 insertions(+), 8 deletions(-) diff --git a/resources/scripts/build/release/u-boot-libre b/resources/scripts/build/release/u-boot-libre index 30c5a0ab..a871aab7 100755 --- a/resources/scripts/build/release/u-boot-libre +++ b/resources/scripts/build/release/u-boot-libre @@ -71,8 +71,11 @@ append_release_files() print_release_files() { - printf "Source code archives available at:\n" - for file in "${release_files}" ; do + version="$1" + printf "Source code archives for u-boot-libre-%s-%s available at:\n" \ + "${version}" "${revision}" + + for file in ${release_files} ; do printf "\t${file}\n" done } @@ -150,10 +153,40 @@ release_uboot_blobs_list() "${destination}.xz" } +release_uboot_deblob_script() +{ + version="$1" + + deblob_script="$(${topdir}/download u-boot --gen-deblob-script v${version})" + + release_version_dir="${uboot_release_topdir}/${version}-${revision}" + destination="${release_version_dir}/deblob-${version}-${revision}.sh" + + cd "${topdir}" + + rm -rf \ + "${destination}" \ + "${destination}.lz" \ + "${destination}.xz" + + install -m 755 -d "${release_version_dir}" + install -m 644 -T "${blobs_list}" "${destination}" + + lzip -9 --keep -vv "${destination}" + xz -9 --keep -vv "${destination}" + + append_release_files \ + "${destination}" \ + "${destination}.lz" \ + "${destination}.xz" +} + if [ $# -eq 0 ] ; then for version in ${supported_uboot_versions} ; do release_deblobbed_uboot "${version}" release_uboot_blobs_list "${version}" + release_uboot_deblob_script "${version}" + print_release_files "${version}" done exit 0 elif [ $# -eq 1 -a "$1" == "--help" ] ; then @@ -170,6 +203,8 @@ elif [ $# -eq 1 ] ; then if [ "${revision}" = "$1" ] ; then release_deblobbed_uboot "$1" release_uboot_blobs_list "$1" + release_uboot_deblob_script "$1" + print_release_files "$1" exit 0 fi done diff --git a/resources/scripts/download/u-boot b/resources/scripts/download/u-boot index b67d6bd0..8c94d338 100755 --- a/resources/scripts/download/u-boot +++ b/resources/scripts/download/u-boot @@ -105,27 +105,83 @@ strip_comments() sed '/^$/d' } +generate_deblob_script() +{ + blob_list_file="$1" + output="$2" + + # Add sheebang and copyright headers from this file + awk '{ + if ($0 !~ /^#/ && NF > 0) { + stop=1; + } + if (stop !=1) { + printf("%s\n", $0); + } + }' $0 >> ${output} + + # Add rm -rf before directories and rm -f before files + awk \ + '{ + }{ + if (NF == 0) { + printf("\n"); + } else { + if ($0 !~ /#/ && $NF ~ /\/$/) { + printf("rm -rf %s\n", $0); + } else if ($0 !~ /#/) { + printf("rm -f %s\n", $0); + } else { + # We have comments, try to see if they are + # still valid paths before the comments + comments_found=0 + last_field=0 + for(i=1; i<=NF; i++) { + if($i ~ /#/) { + comments_found=1; + } else if(comments_found != 1) { + last_field=i; + } + } + if (last_field == 0) { + printf("%s\n", $0); + } else if ($last_field ~ /\/$/) { + printf("rm -rf %s\n", $0); + } else { + printf("rm -f %s\n", $0); + } + } + } + }' "${blob_list_file}" >> "${output}" +} + usage() { progname="./download u-boot" printf "Usage:\n" - printf "\t%s # %s\n" \ + printf "\t%s # %s\n" \ "${progname}" \ "Download latest u-boot git revision and deblob it" - printf "\t%s [revision] # %s\n" \ + printf "\t%s [revision] # %s\n" \ "${progname}" \ "Download given u-boot git revision and deblob it" - printf "\t%s --blobs-list # %s\n" \ + printf "\t%s --blobs-list # %s\n" \ "${progname}" \ "Print the path of the blobs.list file for the latest supported u-boot revision" - printf "\t%s --blobs-list [revision] # %s\n" \ + printf "\t%s --blobs-list [revision] # %s\n" \ "${progname}" \ "Print the path of the blobs.list file for the given u-boot revision" - printf "\t%s --list-revisions # %s\n" \ + printf "\t%s --gen-deblob-script # %s\n" \ + "${progname}" \ + "Print the path of the generated deblob script for the latest supported u-boot revision" + printf "\t%s --gen-deblob-script [revision] # %s\n" \ + "${progname}" \ + "Print the path of the generated deblob script for the given u-boot revision" + printf "\t%s --list-revisions # %s\n" \ "${progname}" \ "List supported u-boot revisions" - printf "\t%s --help # %s\n" \ + printf "\t%s --help # %s\n" \ "${progname}" \ "Prints this help" } @@ -163,6 +219,15 @@ print_blobs_list_path() printf "resources/u-boot/default/blobs.list\n" } +print_deblob_script_path() +{ + version="$1" + path="$(mktemp)" + + generate_deblob_script "$(print_blobs_list_path ${version})" "${path}" + printf "%s\n" ${path} +} + if [ $# -eq 0 ] ; then latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)" download_uboot_revision "${latest_revision}" @@ -190,6 +255,22 @@ elif [ $# -eq 2 -a "$1" == "--blobs-list" ] ; then printf "Error: Revision '${1}' is not supported\n" + exit 1 +elif [ $# -eq 1 -a "$1" == "--gen-deblob-script" ] ; then + latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)" + print_deblob_script_path "${latest_revision}" + exit 0 +elif [ $# -eq 2 -a "$1" == "--gen-deblob-script" ] ; then + found=0 + for revision in ${supported_uboot_revisions} ; do + if [ "${revision}" = "$2" ] ; then + print_deblob_script_path "$2" + exit 0 + fi + done + + printf "Error: Revision '${1}' is not supported\n" + exit 1 elif [ $# -eq 1 ] ; then found=0 diff --git a/tests/u-boot-libre.sha512 b/tests/u-boot-libre.sha512 index 8977dac4..4439175b 100644 --- a/tests/u-boot-libre.sha512 +++ b/tests/u-boot-libre.sha512 @@ -4,3 +4,6 @@ d6bbd0c311fa7d73a018d2195618a9cff9984502624e83097e94c310557eb47da85f43a9e06bb3bc 007968618d182bb26eb13f25720a06f28a59b0a67e5b0e66ae2f7c1246c82139091606e61f780d60496866b31cb037a5a41f207d1b00e293280bcfc17cba8317 release/u-boot-libre/2021.07-r1/blobs-2021.07-r1.list cc338a69266cc94d3a283a2f0e14660a649573eaf70f11254db00c190a85da5892f9ca78d2d44633d46f90c857297b954ba41d3d9e076a94433326a161f73b61 release/u-boot-libre/2021.07-r1/blobs-2021.07-r1.list.lz 174726b4505a9af850fb15cbfba73c6ea2eeb669352f37e577f37c225c8407f8c0da63f43d0d2285fdd6123fab4ac59233c8bd01bc863ba0e338c8469df10c1c release/u-boot-libre/2021.07-r1/blobs-2021.07-r1.list.xz +007968618d182bb26eb13f25720a06f28a59b0a67e5b0e66ae2f7c1246c82139091606e61f780d60496866b31cb037a5a41f207d1b00e293280bcfc17cba8317 release/u-boot-libre/2021.07-r1/deblob-2021.07-r1.sh +cc338a69266cc94d3a283a2f0e14660a649573eaf70f11254db00c190a85da5892f9ca78d2d44633d46f90c857297b954ba41d3d9e076a94433326a161f73b61 release/u-boot-libre/2021.07-r1/deblob-2021.07-r1.sh.lz +174726b4505a9af850fb15cbfba73c6ea2eeb669352f37e577f37c225c8407f8c0da63f43d0d2285fdd6123fab4ac59233c8bd01bc863ba0e338c8469df10c1c release/u-boot-libre/2021.07-r1/deblob-2021.07-r1.sh.xz