Petitboot: Carry build-time fixes from upstream

Some upstream fixes are still not available as a release after 1.10.4,
add them as build-time patches.

In support of that, force gettext and autoreconf on petitboot.mk since
we're touching Makefile.am files (so that we can build fine)

Summary of changes for post 1.10.4 patches:

Jeremy Kerr (15):
      discover/grub2: 'search' set-variable defaults to root
      discover/grub2: Use getopt for `search` argument parsing
      discover/grub2: test for (ignored) --no-floppy argument
      discover/grub2: Add support for UUID and label for 'search' command
      discover/grub2: expose a struct for grub2 file references
      discover/grub2: Add parsing code for grub2 file specifiers
      discover/grub2: add support for grub2-style path specifiers in resources
      discover/grub2: Allow (device)/path references in general script usage
      discover/grub2: Add a reference from script to parser
      discover/grub2: expose internal parse function
      discover/grub2: make statements_execute non-static
      discover/grub2: implement 'source' command
      test/parser: Add test for recent RHCOS grub2 config
      test/parser: Add RHEL8 grub config test
      lib/pb-protocol: fix ordering of system info length calculation

Maxim Polyakov (3):
      discover/platform-powerpc: add missing mbox block selector
      discover/platform-powerpc: limit mailbox response size
      discover/platform-powerpc: return the actual mailbox size

Signed-off-by: Klaus Heinrich Kiwi <klaus@linux.vnet.ibm.com>
diff --git a/openpower/package/petitboot/0011-discover-grub2-Allow-device-path-references-in-gener.patch b/openpower/package/petitboot/0011-discover-grub2-Allow-device-path-references-in-gener.patch
new file mode 100644
index 0000000..e052bdc
--- /dev/null
+++ b/openpower/package/petitboot/0011-discover-grub2-Allow-device-path-references-in-gener.patch
@@ -0,0 +1,214 @@
+From ecc3b2ee3645e2a79236856783d3f803121874b8 Mon Sep 17 00:00:00 2001
+From: Jeremy Kerr <jk@ozlabs.org>
+Date: Mon, 11 Nov 2019 19:30:41 +0800
+Subject: [PATCH 11/18] discover/grub2: Allow (device)/path references in
+ general script usage
+
+Currently, we have support for grub2 (device)/path syntax for boot
+resources. This change allows this syntax for general paths in grub2
+scripts (for example, -f tests).
+
+This involves exposing grub2_lookup_device, to allow the script
+execution code to resolve pathnames.
+
+Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
+(cherry picked from commit b22445748f44ed6965f31f45b39abb690d24ec47)
+Signed-off-by: Klaus Heinrich Kiwi <klaus@linux.vnet.ibm.com>
+---
+ discover/grub2/builtins.c                  | 50 ++++++++++++++++---
+ discover/grub2/grub2.c                     |  4 +-
+ discover/grub2/grub2.h                     |  2 +
+ test/parser/Makefile.am                    |  1 +
+ test/parser/test-grub2-devpath-scripting.c | 56 ++++++++++++++++++++++
+ 5 files changed, 104 insertions(+), 9 deletions(-)
+ create mode 100644 test/parser/test-grub2-devpath-scripting.c
+
+diff --git a/discover/grub2/builtins.c b/discover/grub2/builtins.c
+index 765c4d7..c726216 100644
+--- a/discover/grub2/builtins.c
++++ b/discover/grub2/builtins.c
+@@ -197,6 +197,32 @@ static int builtin_search(struct grub2_script *script,
+ 	return 0;
+ }
+ 
++static int parse_to_device_path(struct grub2_script *script,
++		const char *desc, struct discover_device **devp,
++		char **pathp)
++{
++	struct discover_device *dev;
++	struct grub2_file *file;
++
++	file = grub2_parse_file(script, desc);
++	if (!file)
++		return -1;
++
++	dev = script->ctx->device;
++	if (file->dev)
++		dev = grub2_lookup_device(script->ctx->handler, file->dev);
++
++	if (!dev)
++		return -1;
++
++	*devp = dev;
++	*pathp = talloc_strdup(script, file->path);
++
++	talloc_free(file);
++
++	return 0;
++}
++
+ /* Note that GRUB does not follow symlinks in evaluating all file
+  * tests but -s, unlike below. However, it seems like a bad idea to
+  * emulate GRUB's behavior (e.g., it would take extra work), so we
+@@ -204,12 +230,17 @@ static int builtin_search(struct grub2_script *script,
+ static bool builtin_test_op_file(struct grub2_script *script, char op,
+ 		const char *file)
+ {
++	struct discover_device *dev;
++	struct stat statbuf;
+ 	bool result;
++	char *path;
+ 	int rc;
+-	struct stat statbuf;
+ 
+-	rc = parser_stat_path(script->ctx, script->ctx->device,
+-			file, &statbuf);
++	rc = parse_to_device_path(script, file, &dev, &path);
++	if (rc)
++		return false;
++
++	rc = parser_stat_path(script->ctx, dev, path, &statbuf);
+ 	if (rc)
+ 		return false;
+ 
+@@ -237,16 +268,21 @@ static bool builtin_test_op_file(struct grub2_script *script, char op,
+ static bool builtin_test_op_dir(struct grub2_script *script, char op,
+ 		const char *dir)
+ {
+-	int rc;
++	struct discover_device *dev;
+ 	struct stat statbuf;
++	char *path;
++	int rc;
+ 
+ 	if (op != 'd')
+ 		return false;
+ 
+-	rc = parser_stat_path(script->ctx, script->ctx->device, dir, &statbuf);
+-	if (rc) {
++	rc = parse_to_device_path(script, dir, &dev, &path);
++	if (rc)
++		return false;
++
++	rc = parser_stat_path(script->ctx, dev, path, &statbuf);
++	if (rc)
+ 		return false;
+-	}
+ 
+ 	return S_ISDIR(statbuf.st_mode);
+ }
+diff --git a/discover/grub2/grub2.c b/discover/grub2/grub2.c
+index a08a320..a8d115f 100644
+--- a/discover/grub2/grub2.c
++++ b/discover/grub2/grub2.c
+@@ -33,8 +33,8 @@ static const char *const grub2_conf_files[] = {
+ 	NULL
+ };
+ 
+-static struct discover_device *grub2_lookup_device(
+-		struct device_handler *handler, const char *desc)
++struct discover_device *grub2_lookup_device(struct device_handler *handler,
++		const char *desc)
+ {
+ 	struct discover_device *dev;
+ 
+diff --git a/discover/grub2/grub2.h b/discover/grub2/grub2.h
+index ef32d4b..eabd6d6 100644
+--- a/discover/grub2/grub2.h
++++ b/discover/grub2/grub2.h
+@@ -200,6 +200,8 @@ bool resolve_grub2_resource(struct device_handler *handler,
+ /* grub-style device+path parsing */
+ struct grub2_file *grub2_parse_file(struct grub2_script *script,
+ 		const char *str);
++struct discover_device *grub2_lookup_device(struct device_handler *handler,
++		const char *desc);
+ 
+ /* external parser api */
+ struct grub2_parser *grub2_parser_create(struct discover_context *ctx);
+diff --git a/test/parser/Makefile.am b/test/parser/Makefile.am
+index 0378317..c8e059b 100644
+--- a/test/parser/Makefile.am
++++ b/test/parser/Makefile.am
+@@ -33,6 +33,7 @@ parser_TESTS = \
+ 	test/parser/test-grub2-search-uuid \
+ 	test/parser/test-grub2-search-label \
+ 	test/parser/test-grub2-devpath \
++	test/parser/test-grub2-devpath-scripting \
+ 	test/parser/test-grub2-load-env \
+ 	test/parser/test-grub2-save-env \
+ 	test/parser/test-grub2-save-env-dash-f \
+diff --git a/test/parser/test-grub2-devpath-scripting.c b/test/parser/test-grub2-devpath-scripting.c
+new file mode 100644
+index 0000000..9046ab6
+--- /dev/null
++++ b/test/parser/test-grub2-devpath-scripting.c
+@@ -0,0 +1,56 @@
++/* check grub2 device+path string parsing, as used in scripts */
++
++#include "parser-test.h"
++
++#if 0 /* PARSER_EMBEDDED_CONFIG */
++
++v=
++
++# local device, file present
++if [ -f "/1-present" ]; then v=${v}a; fi
++
++# local device, file absent
++if [ -f "/1-absent" ]; then v=${v}b; fi;
++
++# local device by UUID, file present
++if [ -f "(00000000-0000-0000-0000-000000000001)/1-present" ]; then v=${v}c; fi;
++
++# remote device by UUID, file present
++if [ -f "(00000000-0000-0000-0000-000000000002)/2-present" ]; then v=${v}d; fi;
++
++# non-existent device
++if [ -f "(00000000-0000-0000-0000-000000000003)/present" ]; then v=${v}e; fi;
++
++menuentry $v {
++	linux /vmlinux
++}
++
++#endif
++
++void run_test(struct parser_test *test)
++{
++	struct discover_device *dev1, *dev2;
++	struct discover_boot_option *opt;
++	struct discover_context *ctx;
++
++	ctx = test->ctx;
++
++	/* set local uuid */
++	dev1 = test->ctx->device;
++	dev1->uuid = "00000000-0000-0000-0000-000000000001";
++
++	dev2 = test_create_device(test, "extdev");
++	dev2->uuid = "00000000-0000-0000-0000-000000000002";
++	device_handler_add_device(ctx->handler, dev2);
++
++	test_add_file_data(test, dev1, "/1-present", "x", 1);
++	test_add_file_data(test, dev2, "/2-present", "x", 1);
++
++	test_read_conf_embedded(test, "/grub/grub.cfg");
++
++	test_run_parser(test, "grub2");
++
++	check_boot_option_count(ctx, 1);
++	opt = get_boot_option(ctx, 0);
++	check_name(opt, "acd");
++}
+-- 
+2.17.1
+