From 2f3d87aec85f5759180380cbc156472378164d11 Mon Sep 17 00:00:00 2001
From: Francis Rowe <info@gluglug.org.uk>
Date: Thu, 03 Mar 2016 14:55:50 -0500
Subject: Revert "iunfinished patch: copy coreboot per revision, not board"

I'm an idiot. This patch wasn't supposed to be pushed yet because
not finished. Reverting it for the time being.

This reverts commit 89cc8c38c1cf3865c3684e5bd6658eedf0e61cfd.
---
(limited to 'resources/scripts/helpers/download')

diff --git a/resources/scripts/helpers/download/coreboot b/resources/scripts/helpers/download/coreboot
index 125d11a..16bd1a8 100755
--- a/resources/scripts/helpers/download/coreboot
+++ b/resources/scripts/helpers/download/coreboot
@@ -36,6 +36,87 @@ fi
 # coreboot revisios used for crossgcc
 crossgccrevision="4351ace145c4069f9c93ca7541d6dfaf8300b53b"
 
+# sanity check (check for invalid paths in the reused.list patch lists before proceeding)
+for payloads in resources/libreboot/config/*; do
+
+	if [ ! -d "${payloads}/" ]; then
+		continue
+	fi
+
+	payload="${payloads##*/}"
+
+	for boardconfig in resources/libreboot/config/${payload}/*; do
+
+		if [ ! -d "${boardconfig}/" ]; then
+			continue
+		fi
+
+		boardname="${boardconfig##*/}"
+		cbrevision=$(cat "${boardconfig}/cbrevision")
+		vbootrevision=$(cat "${boardconfig}/vbootrevision")
+
+		reused_coreboot_patches="resources/libreboot/patch/coreboot/${cbrevision}/${payload}/${boardname}/reused.list"
+		reused_vboot_patches="resources/libreboot/patch/vboot/${vbootrevision}/${payload}/${boardname}/reused.list"
+		for reused_patches in "${reused_coreboot_patches}" "${reused_vboot_patches}"; do
+			if [ -f "${reused_patches}" ]; then
+				for patch in $(cat "${reused_patches}"); do
+					if [ ! -f "./${patch}" ]; then
+						printf "%s listed in %s does not exist\n" "${patch}" "${reused_patches}"
+						exit 1
+					fi
+				done
+			fi
+		done
+
+	done
+done
+
+# in ascending filename order, apply patches from a directory
+apply_patches_from_directory() {
+	patch_directory="${1}" # directory containing the patch files
+
+	if [ -d "${patch_directory}" ]; then
+		for patch in ${patch_directory}/*.patch;  do
+
+			if [ "${patch##*/}" = "*.patch" ]; then # oh so ugly
+				continue # ugly ugly ugly ugly ugly
+			fi # most hideous thing you've ever seen
+
+			git am "${patch}" || return 1
+		done
+	fi
+}
+# files listed in the file (if found) are absolute paths, relative to the root of the libreboot src directory
+# the file lists patches patches that should be applied
+apply_patches_from_file() {
+	patch_list="${1}" # file listing the paths to all the patches
+	libreboot_src_root="${2}" # path to the root of the libreboot_src directory
+
+	if [ -f "${patch_list}" ]; then
+		for patchname in $(cat "${patch_list}"); do
+			git am "${libreboot_src_root}/${patchname}" || return 1
+		done
+	fi
+}
+make_coreboot_src_directory() {
+	payload="${1}"
+	boardname="${2}"
+	firmwarepath="${3}" # libreboot_src/coreboot/
+(
+	cd "${firmwarepath}/"
+	# copy coreboot directory there
+	rm -Rf "${payload:?}/${boardname:?}/"
+	if [ ! -d "${payload}/" ]; then
+		mkdir -p "${payload}/"
+	fi
+	cp -R "coreboot/" "${payload}/${boardname}/"
+)
+}
+reset_at_revision() {
+	revision="${1}"
+	git reset --hard ${revision}
+}
+
 printf "Downloading coreboot, patching coreboot and deblobbing coreboot\n"
 
 # This grabs current base used, and applies patches
@@ -87,22 +168,39 @@ for payloads in ../../resources/libreboot/config/*; do
 			continue
 		fi
 
+		boardname="${boardconfig##*/}"
 		cbrevision=$(cat "${boardconfig}/cbrevision")
 		vbootrevision=$(cat "${boardconfig}/vbootrevision")
 
-        # the same vboot revision is always used for coreboot revision,
-        # so we don't need to wworry about checking for that here
+		make_coreboot_src_directory ${payload} ${boardname} ..
 
-        if [ -d "../${cbrevision}/${cbrevision}" ]; then
-            continue
-            # the directory already exists, no need to recreate it
-        fi
+		# patch that version
+		(
 
-		make_coreboot_src_directory ${cbrevision} ${cbrevision} ..
-	done
-done
+			cd "../${payload}/${boardname}/"
+			reset_at_revision ${cbrevision}
+
+			# apply patches (coreboot, common to all systems using this revision)
+			apply_patches_from_directory "../../../resources/libreboot/patch/common/coreboot/${cbrevision}"
+			# apply patches re-used from other boards, before applying main patches (common patches for similar boards)
+			apply_patches_from_file "../../../resources/libreboot/patch/coreboot/${cbrevision}/${payload}/${boardname}/reused.list" ../../..
+			# apply patches (coreboot, machine-specific for this revision)
+			apply_patches_from_directory "../../../resources/libreboot/patch/coreboot/${cbrevision}/${payload}/${boardname}"
 
+			cd "3rdparty/vboot/"
+			# reset to known revision (vboot)
+			reset_at_revision ${vbootrevision}
 
+			# apply patches (vboot, common to all systems using this revision)
+			apply_patches_from_directory "../../../../../resources/libreboot/patch/common/vboot/${vbootrevision}"
+			# apply patches re-used from other boards, before applying main patches (common patches for similar boards)
+			apply_patches_from_file "../../../../../resources/libreboot/patch/vboot/${vbootrevision}/${payload}/${boardname}/reused.list" ../../../../..
+			# apply patches (vboot, machine-specific for this revision)
+			apply_patches_from_directory "../../../../../resources/libreboot/patch/vboot/${vbootrevision}/${payload}/${boardname}"
+
+		)
+	done
+done
 
 # prepare directory for crossgcc
 rm -Rf "../../crossgcc/"
@@ -117,8 +215,6 @@ make_coreboot_src_directory crossgcc ${crossgccrevision} ..
     cd ../
     mv "${crossgccrevision}/" "crossgcc/"
     mv "crossgcc/" ../../
-    cd ../
-    rm -Rf "crossgcc/"
 )
 
 # go back to _src/coreboot/ (containing all coreboot directories)
--
cgit v0.9.1