From 3a82f8bb482eb428e10f7fbaa2aea3ff8be86567 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Wed, 4 Dec 2013 13:35:39 +0000 Subject: [PATCH] Fix grub-shell to avoid breaking "make distcheck" Copying the themes directory in grub-shell isn't parallel-test-friendly and breaks on the second test when the source directory is read-only (as in "make distcheck"). Instead, add a hidden --themes-directory option to grub-mkrescue et al, and use it in grub-shell. --- ChangeLog | 8 ++++++++ include/grub/util/install.h | 4 ++++ tests/util/grub-shell.in | 5 +++-- util/grub-install-common.c | 20 ++++++++++++++++++-- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2ba98abdd..b7e716f46 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2013-12-04 Colin Watson + + Copying the themes directory in grub-shell isn't + parallel-test-friendly and breaks on the second test when the source + directory is read-only (as in "make distcheck"). Instead, add a + hidden --themes-directory option to grub-mkrescue et al, and use it + in grub-shell. + 2013-12-04 Vladimir Serbinenko * conf/Makefile.common (CFLAGS_GNULIB): Remove -Wno-old-style-definition diff --git a/include/grub/util/install.h b/include/grub/util/install.h index 9bf3e5f13..4ba00f55b 100644 --- a/include/grub/util/install.h +++ b/include/grub/util/install.h @@ -50,6 +50,9 @@ { "locale-directory", GRUB_INSTALL_OPTIONS_LOCALE_DIRECTORY, \ N_("DIR"), 0, \ N_("use translations under DIR [default=%s]"), 1 }, \ + { "themes-directory", GRUB_INSTALL_OPTIONS_THEMES_DIRECTORY, \ + N_("DIR"), OPTION_HIDDEN, \ + N_("use themes under DIR [default=%s]"), 1 }, \ { "grub-mkimage", GRUB_INSTALL_OPTIONS_GRUB_MKIMAGE, \ "FILE", OPTION_HIDDEN, 0, 1 }, \ /* TRANSLATORS: "embed" is a verb (command description). "*/ \ @@ -107,6 +110,7 @@ enum grub_install_options { GRUB_INSTALL_OPTIONS_INSTALL_COMPRESS, GRUB_INSTALL_OPTIONS_DIRECTORY2, GRUB_INSTALL_OPTIONS_LOCALE_DIRECTORY, + GRUB_INSTALL_OPTIONS_THEMES_DIRECTORY, GRUB_INSTALL_OPTIONS_GRUB_MKIMAGE }; diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in index 5f20b64e0..d9a5253e2 100644 --- a/tests/util/grub-shell.in +++ b/tests/util/grub-shell.in @@ -347,9 +347,10 @@ if test -z "$debug"; then fi if [ x$boot != xnet ] && [ x$boot != xemu ]; then - cp -R "@srcdir@/themes" "@builddir@" pkgdatadir="@builddir@" "@builddir@/grub-mkrescue" "--output=${isofile}" "--override-directory=${builddir}/grub-core" \ - --rom-directory="${rom_directory}" $mkimage_extra_arg ${mkrescue_args} \ + --rom-directory="${rom_directory}" \ + --themes-directory="@srcdir@/themes" \ + $mkimage_extra_arg ${mkrescue_args} \ "/boot/grub/grub.cfg=${cfgfile}" "/boot/grub/testcase.cfg=${source}" \ ${files} >/dev/null 2>&1 fi diff --git a/util/grub-install-common.c b/util/grub-install-common.c index 03c6f13ec..9d9bae709 100644 --- a/util/grub-install-common.c +++ b/util/grub-install-common.c @@ -60,6 +60,8 @@ grub_install_help_filter (int key, const char *text, return xasprintf(text, grub_util_get_pkglibdir ()); case GRUB_INSTALL_OPTIONS_LOCALE_DIRECTORY: return xasprintf(text, grub_util_get_localedir ()); + case GRUB_INSTALL_OPTIONS_THEMES_DIRECTORY: + return grub_util_path_concat (2, grub_util_get_pkgdatadir (), "themes"); default: return (char *) text; } @@ -220,6 +222,7 @@ struct install_list install_fonts = { 1, 0, 0, 0 }; struct install_list install_themes = { 1, 0, 0, 0 }; char *grub_install_source_directory = NULL; char *grub_install_locale_directory = NULL; +char *grub_install_themes_directory = NULL; void grub_install_push_module (const char *val) @@ -320,6 +323,10 @@ grub_install_parse (int key, char *arg) free (grub_install_locale_directory); grub_install_locale_directory = xstrdup (arg); return 1; + case GRUB_INSTALL_OPTIONS_THEMES_DIRECTORY: + free (grub_install_themes_directory); + grub_install_themes_directory = xstrdup (arg); + return 1; case GRUB_INSTALL_OPTIONS_INSTALL_MODULES: handle_install_list (&install_modules, arg, 0); return 1; @@ -667,6 +674,7 @@ grub_install_copy_files (const char *src, { char *dst_platform, *dst_locale, *dst_fonts; const char *pkgdatadir = grub_util_get_pkgdatadir (); + char *themes_dir; { char *platform; @@ -781,14 +789,20 @@ grub_install_copy_files (const char *src, install_themes.entries[1] = NULL; } + if (grub_install_themes_directory) + themes_dir = xstrdup (grub_install_themes_directory); + else + themes_dir = grub_util_path_concat (2, grub_util_get_pkgdatadir (), + "themes"); + for (i = 0; i < install_themes.n_entries; i++) { - char *srcf = grub_util_path_concat (4, pkgdatadir, "themes", + char *srcf = grub_util_path_concat (3, themes_dir, install_themes.entries[i], "theme.txt"); if (grub_util_is_regular (srcf)) { - char *srcd = grub_util_path_concat (3, pkgdatadir, "themes", + char *srcd = grub_util_path_concat (2, themes_dir, install_themes.entries[i]); char *dstd = grub_util_path_concat (3, dst, "themes", install_themes.entries[i]); @@ -800,6 +814,8 @@ grub_install_copy_files (const char *src, free (srcf); } + free (themes_dir); + if (install_fonts.is_default) { install_fonts.is_default = 0;