Conditionally warn if pre-processing tools are not found

There's no need to unconditionally print an error message if xmllint or
json-glib-format are not found when running glib-compile-resources is
called; we only need to warn if they are not available when we need
them. To avoid spamming the build logs, we can also warn once.

https://bugzilla.gnome.org/show_bug.cgi?id=794285
This commit is contained in:
Emmanuele Bassi 2018-03-14 10:36:01 +00:00
parent c5c3fa83c9
commit b4117b8d88

View File

@ -297,64 +297,116 @@ end_element (GMarkupParseContext *context,
}
g_strfreev (options);
if (xml_stripblanks && xmllint != NULL)
if (xml_stripblanks)
{
GSubprocess *proc;
int fd;
fd = g_file_open_tmp ("resource-XXXXXXXX", &tmp_file, error);
if (fd < 0)
goto cleanup;
close (fd);
proc = g_subprocess_new (G_SUBPROCESS_FLAGS_STDOUT_SILENCE, error,
xmllint, "--nonet", "--noblanks", "--output", tmp_file, real_file, NULL);
g_free (real_file);
real_file = NULL;
if (!proc)
goto cleanup;
if (!g_subprocess_wait_check (proc, NULL, error))
/* This is not fatal: pretty-printed XML is still valid XML */
if (xmllint == NULL)
{
g_object_unref (proc);
goto cleanup;
static gboolean xmllint_warned = FALSE;
if (!xmllint_warned)
{
/* Translators: the first %s is a gresource XML attribute,
* the second %s is an environment variable, and the third
* %s is a command line tool
*/
char *warn = g_strdup_printf (_("%s preprocessing requested, but %s is not set, and %s is not in PATH"),
"xml-stripblanks",
"XMLLINT",
"xmllint");
g_printerr ("%s\n", warn);
g_free (warn);
/* Only warn once */
xmllint_warned = TRUE;
}
}
else
{
GSubprocess *proc;
int fd;
g_object_unref (proc);
fd = g_file_open_tmp ("resource-XXXXXXXX", &tmp_file, error);
if (fd < 0)
goto cleanup;
real_file = g_strdup (tmp_file);
close (fd);
proc = g_subprocess_new (G_SUBPROCESS_FLAGS_STDOUT_SILENCE, error,
xmllint, "--nonet", "--noblanks", "--output", tmp_file, real_file, NULL);
g_free (real_file);
real_file = NULL;
if (!proc)
goto cleanup;
if (!g_subprocess_wait_check (proc, NULL, error))
{
g_object_unref (proc);
goto cleanup;
}
g_object_unref (proc);
real_file = g_strdup (tmp_file);
}
}
if (json_stripblanks && jsonformat != NULL)
if (json_stripblanks)
{
GSubprocess *proc;
int fd;
fd = g_file_open_tmp ("resource-XXXXXXXX", &tmp_file, error);
if (fd < 0)
goto cleanup;
close (fd);
proc = g_subprocess_new (G_SUBPROCESS_FLAGS_STDOUT_SILENCE, error,
jsonformat, "--output", tmp_file, real_file, NULL);
g_free (real_file);
real_file = NULL;
if (!proc)
goto cleanup;
if (!g_subprocess_wait_check (proc, NULL, error))
/* As above, this is not fatal: pretty-printed JSON is still
* valid JSON
*/
if (jsonformat == NULL)
{
g_object_unref (proc);
goto cleanup;
static gboolean jsonformat_warned = FALSE;
if (!jsonformat_warned)
{
/* Translators: the first %s is a gresource XML attribute,
* the second %s is an environment variable, and the third
* %s is a command line tool
*/
char *warn = g_strdup_printf (_("%s preprocessing requested, but %s is not set, and %s is not in PATH"),
"json-stripblanks",
"JSON_GLIB_FORMAT",
"json-glib-format");
g_printerr ("%s\n", warn);
g_free (warn);
/* Only warn once */
jsonformat_warned = TRUE;
}
}
else
{
GSubprocess *proc;
int fd;
g_object_unref (proc);
fd = g_file_open_tmp ("resource-XXXXXXXX", &tmp_file, error);
if (fd < 0)
goto cleanup;
real_file = g_strdup (tmp_file);
close (fd);
proc = g_subprocess_new (G_SUBPROCESS_FLAGS_STDOUT_SILENCE, error,
jsonformat, "--output", tmp_file, real_file, NULL);
g_free (real_file);
real_file = NULL;
if (!proc)
goto cleanup;
if (!g_subprocess_wait_check (proc, NULL, error))
{
g_object_unref (proc);
goto cleanup;
}
g_object_unref (proc);
real_file = g_strdup (tmp_file);
}
}
if (to_pixdata)
@ -362,11 +414,20 @@ end_element (GMarkupParseContext *context,
GSubprocess *proc;
int fd;
/* This is a fatal error: if to-pixdata is used it means that
* the code loading the GResource expects a specific data format
*/
if (gdk_pixbuf_pixdata == NULL)
{
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"to-pixbuf preprocessing requested but GDK_PIXBUF_PIXDATA "
"not set and gdk-pixbuf-pixdata not found in path");
/* Translators: the first %s is a gresource XML attribute,
* the second %s is an environment variable, and the third
* %s is a command line tool
*/
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
_("%s preprocessing requested, but %s is not set, and %s is not in PATH"),
"to-pixdata",
"GDK_PIXBUF_PIXDATA",
"gdk-pixbuf-pixdata");
goto cleanup;
}
@ -744,14 +805,10 @@ main (int argc, char **argv)
xmllint = g_strdup (g_getenv ("XMLLINT"));
if (xmllint == NULL)
xmllint = g_find_program_in_path ("xmllint");
if (xmllint == NULL)
g_printerr ("XMLLINT not set and xmllint not found in path; skipping xml preprocessing.\n");
jsonformat = g_strdup (g_getenv ("JSON_GLIB_FORMAT"));
if (jsonformat == NULL)
jsonformat = g_find_program_in_path ("json-glib-format");
if (jsonformat == NULL)
g_printerr ("JSON_GLIB_FORMAT not set and json-glib-format not found in path; skipping json pre-processing.\n");
gdk_pixbuf_pixdata = g_strdup (g_getenv ("GDK_PIXBUF_PIXDATA"));
if (gdk_pixbuf_pixdata == NULL)