From 3979c5c5ca307cad84b417b0d350aa205fdc422f Mon Sep 17 00:00:00 2001 From: "Nickolay V. Shmyrev" Date: Sun, 12 Feb 2006 23:02:46 +0000 Subject: [PATCH] Runtime check for gs interpreter. Fix for the bug #320868. Thanks to * configure.ac: * ps/gsdefaults.c: (gtk_gs_defaults_get_paper_sizes): * ps/gsdefaults.h: * ps/ps-document.c: (start_interpreter), (ps_document_load): Runtime check for gs interpreter. Fix for the bug #320868. Thanks to Antoine Dopffer antoine.dopffer@free.fr --- ChangeLog | 10 ++++++++++ configure.ac | 13 ------------- ps/gsdefaults.c | 8 +------- ps/gsdefaults.h | 1 - ps/ps-document.c | 46 ++++++++++++++++++++++++++++++---------------- 5 files changed, 41 insertions(+), 37 deletions(-) diff --git a/ChangeLog b/ChangeLog index fd14ad8a..1167b7d3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2006-02-13 Nickolay V. Shmyrev + + * configure.ac: + * ps/gsdefaults.c: (gtk_gs_defaults_get_paper_sizes): + * ps/gsdefaults.h: + * ps/ps-document.c: (start_interpreter), (ps_document_load): + + Runtime check for gs interpreter. Fix for the bug #320868. + Thanks to Antoine Dopffer antoine.dopffer@free.fr + 2006-02-12 Carlos Garcia Campos * shell/ev-application.c: diff --git a/configure.ac b/configure.ac index 3035de75..aafd6f3c 100644 --- a/configure.ac +++ b/configure.ac @@ -171,19 +171,6 @@ fi AM_CONDITIONAL(ENABLE_PS, test x$enable_ps = xyes) if test x$enable_ps = xyes; then -AC_ARG_WITH(gs, - [AC_HELP_STRING([--with-gs=dir], [Directory Where GhostScript package is installed.])]) - -if test "x$with_gs" = "x"; then - AC_PATH_PROG(GS_PROG, gs) - if test -z "$GS_PROG"; then - AC_MSG_ERROR(Unable to find GhostScript in the PATH. Provide the full path for GhostScript(--with-gs=PATH). You need to have Ghostscript installed in order to run evince) - fi -else - GS_PROG=$with_gs -fi - -AC_DEFINE_UNQUOTED(GS_PATH, "$GS_PROG", [Path to the 'gs' executable.]) dnl check for GS version AC_MSG_CHECKING(for Ghostscript version...) diff --git a/ps/gsdefaults.c b/ps/gsdefaults.c index a0c61d5a..2263fcac 100644 --- a/ps/gsdefaults.c +++ b/ps/gsdefaults.c @@ -51,13 +51,7 @@ GtkGSPaperSize gtk_gs_paper_sizes[] = { GtkGSPaperSize * gtk_gs_defaults_get_paper_sizes() { - return gtk_gs_paper_sizes; -} - -const gchar * -gtk_gs_defaults_get_interpreter_cmd() -{ - return GS_PATH; + return gtk_gs_paper_sizes; } const gchar * diff --git a/ps/gsdefaults.h b/ps/gsdefaults.h index 08431ff7..2f50f6f6 100644 --- a/ps/gsdefaults.h +++ b/ps/gsdefaults.h @@ -31,7 +31,6 @@ G_BEGIN_DECLS /* defaults accessors */ GtkGSPaperSize *gtk_gs_defaults_get_paper_sizes(void); -const gchar *gtk_gs_defaults_get_interpreter_cmd(void); const gchar *gtk_gs_defaults_get_ungzip_cmd(void); const gchar *gtk_gs_defaults_get_unbzip2_cmd(void); diff --git a/ps/ps-document.c b/ps/ps-document.c index 3ce591f9..75009dc9 100644 --- a/ps/ps-document.c +++ b/ps/ps-document.c @@ -616,7 +616,7 @@ start_interpreter (PSDocument *gs) #define NUM_GS_ARGS (NUM_ARGS - 20) #define NUM_ALPHA_ARGS 10 - char *argv[NUM_ARGS], *dir, *gv_env; + char *argv[NUM_ARGS], *dir, *gv_env, *gs_path; char **gs_args, **alpha_args = NULL; int argc = 0, i; @@ -628,7 +628,9 @@ start_interpreter (PSDocument *gs) stop_interpreter(gs); /* set up the args... */ - gs_args = g_strsplit (gtk_gs_defaults_get_interpreter_cmd (), " ", NUM_GS_ARGS); + gs_path = g_find_program_in_path ("gs"); + gs_args = g_strsplit (gs_path, " ", NUM_GS_ARGS); + g_free (gs_path); for(i = 0; i < NUM_GS_ARGS && gs_args[i]; i++, argc++) { argv[argc] = gs_args[i]; } @@ -1056,27 +1058,39 @@ ps_document_load (EvDocument *document, const char *uri, GError **error) { - gboolean result; char *filename; + char *gs_path; + gboolean result; filename = g_filename_from_uri (uri, NULL, error); if (!filename) return FALSE; - result = document_load (PS_DOCUMENT (document), filename); - if (!result) { - gchar *filename_dsp; - - filename_dsp = g_filename_display_name (filename); - - g_set_error (error, G_FILE_ERROR, - G_FILE_ERROR_FAILED, - _("Failed to load document '%s'"), - filename_dsp); - - g_free (filename_dsp); + gs_path = g_find_program_in_path ("gs"); + if (!gs_path) { + gchar *filename_dsp; + filename_dsp = g_filename_display_name (filename); + g_set_error(error, + G_FILE_ERROR, + G_FILE_ERROR_NOENT, + _("Failed to load document '%s'. Ghostscript interpreter was not found in path"), + filename); + g_free (filename_dsp); + result = FALSE; + } else { + result = document_load (PS_DOCUMENT (document), filename); + if (!result) { + gchar *filename_dsp; + filename_dsp = g_filename_display_name (filename); + + g_set_error (error, G_FILE_ERROR, + G_FILE_ERROR_FAILED, + _("Failed to load document '%s'"), + filename_dsp); + g_free (filename_dsp); + } + g_free (gs_path); } - g_free (filename); return result; -- 2.43.5