Fix grub-shell to avoid breaking "make distcheck"
authorColin Watson <cjwatson@ubuntu.com>
Wed, 4 Dec 2013 13:35:39 +0000 (13:35 +0000)
committerColin Watson <cjwatson@ubuntu.com>
Wed, 4 Dec 2013 13:36:34 +0000 (13:36 +0000)
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
include/grub/util/install.h
tests/util/grub-shell.in
util/grub-install-common.c

index 2ba98ab..b7e716f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2013-12-04  Colin Watson  <cjwatson@ubuntu.com>
+
+       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  <phcoder@gmail.com>
 
        * conf/Makefile.common (CFLAGS_GNULIB): Remove -Wno-old-style-definition
index 9bf3e5f..4ba00f5 100644 (file)
@@ -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
 };
 
index 5f20b64..d9a5253 100644 (file)
@@ -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
index 03c6f13..9d9bae7 100644 (file)
@@ -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;