]> granicus.if.org Git - imagemagick/commitdiff
Report Ghostscript version when -verbose is used and when an exception is raised.
authordirk <dirk@git.imagemagick.org>
Mon, 5 Jan 2015 19:52:49 +0000 (19:52 +0000)
committerdirk <dirk@git.imagemagick.org>
Mon, 5 Jan 2015 19:52:49 +0000 (19:52 +0000)
MagickCore/delegate-private.h
MagickCore/nt-base.c
coders/pdf.c
coders/ps.c

index 3cadb1453e51faf037c5be43d0f9cd8dd9e4c2a7..e807b9c90ed1085522215445f013ef7c872d39ce 100644 (file)
 #if defined(MAGICKCORE_GS_DELEGATE)
 #include "ghostscript/iapi.h"
 #include "ghostscript/ierrors.h"
+#else
+typedef struct gsapi_revision_s
+{
+  const char *product;
+  const char *copyright;
+  long revision;
+  long revisiondate;
+} gsapi_revision_t;
 #endif
 
 #if defined(__cplusplus) || defined(c_plusplus)
@@ -62,6 +70,9 @@ typedef struct _GhostInfo
     (MagickDLLCall *set_stdio)(gs_main_instance *,int(MagickDLLCall *)(void *,
       char *,int),int(MagickDLLCall *)(void *,const char *,int),
       int(MagickDLLCall *)(void *,const char *,int));
+
+  int
+    (MagickDLLCall *revision)(gsapi_revision_t *, int);
 } GhostInfo;
 
 extern MagickPrivate MagickBooleanType
index d0e17609bab2d53d824d9efe83442ccb1f069724..74319ef09a71a621b434cf2d81f59d8b3caffe70 100644 (file)
@@ -1386,7 +1386,7 @@ MagickPrivate int NTGhostscriptLoadDLL(void)
       return(FALSE);
     }
   (void) ResetMagickMemory((void *) &ghost_info,0,sizeof(GhostInfo));
-  ghost_info.delete_instance=(void (MagickDLLCall *) (gs_main_instance *)) (
+  ghost_info.delete_instance=(void (MagickDLLCall *)(gs_main_instance *)) (
     lt_dlsym(ghost_handle,"gsapi_delete_instance"));
   ghost_info.exit=(int (MagickDLLCall *)(gs_main_instance*))
     lt_dlsym(ghost_handle,"gsapi_exit");
@@ -1400,11 +1400,13 @@ MagickPrivate int NTGhostscriptLoadDLL(void)
     MagickDLLCall *)(void *,char *,int),int(MagickDLLCall *)(void *,
     const char *,int),int(MagickDLLCall *)(void *,const char *,int)))
     (lt_dlsym(ghost_handle,"gsapi_set_stdio"));
+  ghost_info.revision=(int (MagickDLLCall *)(gsapi_revision_t *,int)) (
+    lt_dlsym(ghost_handle,"gsapi_revision"));
   UnlockSemaphoreInfo(ghost_semaphore);
   if ((ghost_info.delete_instance == NULL) || (ghost_info.exit == NULL) ||
       (ghost_info.init_with_args == NULL) || (ghost_info.new_instance == NULL)
-      || (ghost_info.run_string == NULL) || (ghost_info.set_stdio == NULL)
-      )
+      || (ghost_info.run_string == NULL) || (ghost_info.set_stdio == NULL) ||
+      (ghost_info.revision == NULL))
     return(FALSE);
   return(TRUE);
 }
index 1645a39540ef5601304b4a67f3460ff92f02a7e4..65329b3c99a6eeb71064b9d8441b1db32a6fef0c 100644 (file)
@@ -197,6 +197,9 @@ static MagickBooleanType InvokePDFDelegate(const MagickBooleanType verbose,
   gs_main_instance
     *interpreter;
 
+  gsapi_revision_t
+    revision;
+
   int
     argc,
     code;
@@ -224,12 +227,16 @@ static MagickBooleanType InvokePDFDelegate(const MagickBooleanType verbose,
   ghost_info_struct.set_stdio=(int (*)(gs_main_instance *,int(*)(void *,char *,
     int),int(*)(void *,const char *,int),int(*)(void *, const char *, int)))
     gsapi_set_stdio;
+  ghost_info_struct.revision=(int (*)(gsapi_revision_t *,int)) gsapi_revision;
 #endif
   if (ghost_info == (GhostInfo *) NULL)
     ExecuteGhostscriptCommand(command,status);
+  if ((ghost_info->revision)(&revision,sizeof(revision)) != 0)
+    revision.revision=0;
   if (verbose != MagickFalse)
     {
-      (void) fputs("[ghostscript library]",stdout);
+      (void) fprintf(stdout,"[ghostscript library %.2f]",
+        (double)revision.revision / 100);
       SetArgsStart(command,args_start);
       (void) fputs(args_start,stdout);
     }
@@ -257,12 +264,14 @@ static MagickBooleanType InvokePDFDelegate(const MagickBooleanType verbose,
       SetArgsStart(command,args_start);
       if (status == -101) /* quit */
         (void) FormatLocaleString(message,MaxTextExtent,
-          "[ghostscript library]%s: %s",args_start,errors);
+          "[ghostscript library %.2f]%s: %s",(double)revision.revision / 100,
+          args_start,errors);
       else
         {
           (void) ThrowMagickException(exception,GetMagickModule(),
-            DelegateError,"PDFDelegateFailed","`[ghostscript library]%s': %s",
-            args_start,errors);
+            DelegateError,"PDFDelegateFailed",
+            "`[ghostscript library %.2f]%s': %s",
+            (double)revision.revision / 100,args_start,errors);
           if (errors != (char *) NULL)
             errors=DestroyString(errors);
           (void) LogMagickEvent(CoderEvent,GetMagickModule(),
index f9ebfee74f95a389d246e511e7a9420185224e76..3faccb52b2800b31a01a1426b7d884cc83fe30d8 100644 (file)
@@ -187,6 +187,9 @@ static MagickBooleanType InvokePostscriptDelegate(
   gs_main_instance
     *interpreter;
 
+  gsapi_revision_t
+    revision;
+
   int
     argc,
     code;
@@ -214,12 +217,16 @@ static MagickBooleanType InvokePostscriptDelegate(
   ghost_info_struct.set_stdio=(int (*)(gs_main_instance *,int(*)(void *,char *,
     int),int(*)(void *,const char *,int),int(*)(void *, const char *, int)))
     gsapi_set_stdio;
+  ghost_info_struct.revision=(int (*)(gsapi_revision_t *,int)) gsapi_revision;
 #endif
   if (ghost_info == (GhostInfo *) NULL)
     ExecuteGhostscriptCommand(command,status);
+  if ((ghost_info->revision)(&revision,sizeof(revision)) != 0)
+    revision.revision=0;
   if (verbose != MagickFalse)
     {
-      (void) fputs("[ghostscript library]",stdout);
+      (void) fprintf(stdout,"[ghostscript library %.2f]",
+        (double)revision.revision / 100);
       SetArgsStart(command,args_start);
       (void) fputs(args_start,stdout);
     }
@@ -247,12 +254,14 @@ static MagickBooleanType InvokePostscriptDelegate(
       SetArgsStart(command,args_start);
       if (status == -101) /* quit */
         (void) FormatLocaleString(message,MaxTextExtent,
-          "[ghostscript library]%s: %s",args_start,errors);
+          "[ghostscript library %.2f]%s: %s",(double)revision.revision / 100,
+          args_start,errors);
       else
         {
           (void) ThrowMagickException(exception,GetMagickModule(),
             DelegateError,"PostscriptDelegateFailed",
-            "`[ghostscript library]%s': %s",args_start,errors);
+            "`[ghostscript library %.2f]%s': %s",
+            (double)revision.revision / 100,args_start,errors);
           if (errors != (char *) NULL)
             errors=DestroyString(errors);
           (void) LogMagickEvent(CoderEvent,GetMagickModule(),