OpenPKG CVS Repository
  http://cvs.openpkg.org/
  ____________________________________________________________________________

  Server: cvs.openpkg.org                  Name:   Ralf S. Engelschall
  Root:   /e/openpkg/cvs                   Email:  [EMAIL PROTECTED]
  Module: openpkg-re, openpkg-web, openpkg-src Date:   17-Oct-2002 11:06:43
  Branch: HEAD                             Handle: 2002101710064102

  Added files:
    openpkg-src/gv          gv.patch gv.sh
  Modified files:
    openpkg-re/vcheck       vc.gv
    openpkg-src/gv          gv.spec
    openpkg-web             news.txt

  Log:
    unbreak gv by re-packaging it

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      openpkg-re/vcheck/vc.gv
    1.1         +1235 -0    openpkg-src/gv/gv.patch
    1.1         +4  -0      openpkg-src/gv/gv.sh
    1.2         +40 -12     openpkg-src/gv/gv.spec
    1.1813      +1  -0      openpkg-web/news.txt
  ____________________________________________________________________________

  Index: openpkg-re/vcheck/vc.gv
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 vc.gv
  --- openpkg-re/vcheck/vc.gv   26 Sep 2002 17:40:17 -0000      1.1
  +++ openpkg-re/vcheck/vc.gv   17 Oct 2002 09:06:41 -0000      1.2
  @@ -1,9 +1,9 @@
   config = {
   }
   
  -prog gc = {
  +prog gv = {
     version = 3.5.8
  -  url     = ftp://ftpthep.physik.uni-mainz.de/pub/gv/unix/gv-%{version}.tar.gz
  +  url     = ftp://ftpthep.physik.uni-mainz.de/pub/gv/unix/
     regex   = gv-(\d+\.\d+\.\d+)\.tar\.gz
   }
   
  Index: openpkg-src/gv/gv.patch
  ============================================================
  $ cvs update -p -r1.1 gv.patch
  --- gv-3.5.8.orig/source/ps.c
  +++ gv-3.5.8/source/ps.c
  @@ -93,6 +93,8 @@
   #define memset(a,b,c) bzero(a,c)
   #endif
   
  +extern int sec_scanf(const char *, const char *, ...);
  +
   /* length calculates string length at compile time */
   /* can only be used with character constants */
   #define length(a)       (sizeof((a))-1)
  @@ -417,10 +419,15 @@
         struct document *retval = NULL;
         FILE *tmpfile = (FILE*)NULL;
         char *filename_unc;
  +      char *quoted_filename, *quoted_filename_unc;
         char cmd[512];
         char s[512];
         filename_unc=file_getTmpFilename(NULL,filename_raw);
  -      sprintf(cmd,cmd_uncompress,filename,filename_unc);
  +      quoted_filename = quote_filename(filename);
  +      quoted_filename_unc = quote_filename(filename_unc);
  +      sprintf(cmd,cmd_uncompress,quoted_filename,quoted_filename_unc);
  +      GV_XtFree(quoted_filename);
  +      GV_XtFree(quoted_filename_unc);
         INFMESSAGE(is compressed)
         INFSMESSAGE(uncompress command,cmd)
         if (ps_system(cmd) || file_fileIsNotUseful(filename_unc)) {
  @@ -478,7 +485,7 @@
         doc = (struct document *) PS_malloc(sizeof(struct document));
         CHECK_MALLOCED(doc);
         memset(doc, 0, sizeof(struct document));
  -      sscanf(line, "%*s %s", text);
  +      sec_sscanf(line, "%*s %s", text, sizeof(text));
         /*###jp###*/
         /*doc->epsf = iscomment(text, "EPSF-");*/
         doc->epsf = iscomment(text, "EPSF");
  @@ -488,10 +495,35 @@
         struct document *retval = NULL;
         FILE *tmpfile = (FILE*)NULL;
         char *filename_dsc;
  +      char *quoted_filename, *quoted_filename_dsc;
  +      char *pdfpos;
  +      char *dscpos;
         char cmd[512];
         char s[512];
  -      filename_dsc=file_getTmpFilename(NULL,filename_raw);
  -      sprintf(cmd,cmd_scan_pdf,filename,filename_dsc);
  +      filename_dsc=file_getTmpFilename(NULL,filename_raw);      
  +      quoted_filename = quote_filename(filename);
  +      quoted_filename_dsc = quote_filename(filename_dsc);
  +      if ((pdfpos = strstr(cmd_scan_pdf,"%pdf")) &&
  +       (dscpos = strstr(cmd_scan_pdf,"%dsc"))) {
  +     cmd[0] = '\0';
  +     if (pdfpos < dscpos) {
  +       strncat(cmd,cmd_scan_pdf,(pdfpos-cmd_scan_pdf));
  +       strcat(cmd,quoted_filename);
  +       strncat(cmd,pdfpos+4,(dscpos-pdfpos-4));
  +       strcat(cmd,quoted_filename_dsc);
  +       strcat(cmd,dscpos+4);
  +     } else {
  +       strncat(cmd,cmd_scan_pdf,(dscpos-cmd_scan_pdf));
  +       strcat(cmd,quoted_filename_dsc);
  +       strncat(cmd,dscpos+4,(pdfpos-dscpos-4));
  +       strcat(cmd,quoted_filename);
  +       strcat(cmd,pdfpos+4);
  +     }
  +      } else {
  +     sprintf(cmd,cmd_scan_pdf,quoted_filename,quoted_filename_dsc);
  +      }
  +      GV_XtFree(quoted_filename);
  +      GV_XtFree(quoted_filename_dsc);
         INFMESSAGE(is PDF)
         INFSMESSAGE(scan command,cmd)
   #ifdef VMS
  @@ -546,7 +578,7 @@
        } else if (doc->date == NULL && iscomment(line+2, "CreationDate:")) {
            doc->date = gettextline(line+length("%%CreationDate:"));
        } else if (bb_set == NONE && iscomment(line+2, "BoundingBox:")) {
  -         sscanf(line+length("%%BoundingBox:"), "%s", text);
  +         sec_sscanf(line+length("%%BoundingBox:"), "%s", text, sizeof(text));
            if (strcmp(text, "(atend)") == 0) {
                bb_set = ATEND;
            } else {
  @@ -578,7 +610,7 @@
            }
        } else if (orientation_set == NONE &&
                   iscomment(line+2, "Orientation:")) {
  -         sscanf(line+length("%%Orientation:"), "%s", text);
  +         sec_sscanf(line+length("%%Orientation:"), "%s", text, sizeof(text));
            if (strcmp(text, "(atend)") == 0) {
                orientation_set = ATEND;
            } else if (strcmp(text, "Portrait") == 0) {
  @@ -589,7 +621,7 @@
                orientation_set = 1;
            }
        } else if (page_order_set == NONE && iscomment(line+2, "PageOrder:")) {
  -         sscanf(line+length("%%PageOrder:"), "%s", text);
  +         sec_sscanf(line+length("%%PageOrder:"), "%s", text, sizeof(text));
            if (strcmp(text, "(atend)") == 0) {
                page_order_set = ATEND;
            } else if (strcmp(text, "Ascend") == 0) {
  @@ -603,7 +635,7 @@
                page_order_set = 1;
            }
        } else if (pages_set == NONE && iscomment(line+2, "Pages:")) {
  -         sscanf(line+length("%%Pages:"), "%s", text);
  +         sec_sscanf(line+length("%%Pages:"), "%s", text, sizeof(text));
            if (strcmp(text, "(atend)") == 0) {
                pages_set = ATEND;
            } else {
  @@ -823,7 +855,7 @@
                /* Do nothing */
            } else if (doc->default_page_orientation == NONE &&
                iscomment(line+2, "PageOrientation:")) {
  -             sscanf(line+length("%%PageOrientation:"), "%s", text);
  +             sec_sscanf(line+length("%%PageOrientation:"), "%s", text, 
sizeof(text));
                if (strcmp(text, "Portrait") == 0) {
                    doc->default_page_orientation = PORTRAIT;
                } else if (strcmp(text, "Landscape") == 0) {
  @@ -945,7 +977,7 @@
                /* Do nothing */
            } else if (doc->default_page_orientation == NONE &&
                iscomment(line+2, "PageOrientation:")) {
  -             sscanf(line+length("%%PageOrientation:"), "%s", text);
  +             sec_sscanf(line+length("%%PageOrientation:"), "%s", text, 
sizeof(text));
                if (strcmp(text, "Portrait") == 0) {
                    doc->default_page_orientation = PORTRAIT;
                } else if (strcmp(text, "Landscape") == 0) {
  @@ -1082,7 +1114,7 @@
                /* Do nothing */
            } else if (doc->pages[doc->numpages].orientation == NONE &&
                iscomment(line+2, "PageOrientation:")) {
  -             sscanf(line+length("%%PageOrientation:"), "%s", text);
  +             sec_sscanf(line+length("%%PageOrientation:"), "%s", text, 
sizeof(text));
                if (strcmp(text, "Portrait") == 0) {
                    doc->pages[doc->numpages].orientation = PORTRAIT;
                } else if (strcmp(text, "Landscape") == 0) {
  @@ -1114,7 +1146,7 @@
                PS_free(cp);
            } else if ((page_bb_set == NONE || page_bb_set == ATEND) &&
                       iscomment(line+2, "PageBoundingBox:")) {
  -             sscanf(line+length("%%PageBoundingBox:"), "%s", text);
  +             sec_sscanf(line+length("%%PageBoundingBox:"), "%s", text, 
sizeof(text));
                if (strcmp(text, "(atend)") == 0) {
                    page_bb_set = ATEND;
                } else {
  @@ -1228,14 +1260,14 @@
            }
        } else if (orientation_set == ATEND &&
                   iscomment(line+2, "Orientation:")) {
  -         sscanf(line+length("%%Orientation:"), "%s", text);
  +         sec_sscanf(line+length("%%Orientation:"), "%s", text, sizeof(text));
            if (strcmp(text, "Portrait") == 0) {
                doc->orientation = PORTRAIT;
            } else if (strcmp(text, "Landscape") == 0) {
                doc->orientation = LANDSCAPE;
            }
        } else if (page_order_set == ATEND && iscomment(line+2, "PageOrder:")) {
  -         sscanf(line+length("%%PageOrder:"), "%s", text);
  +         sec_sscanf(line+length("%%PageOrder:"), "%s", text, sizeof(text));
            if (strcmp(text, "Ascend") == 0) {
                doc->pageorder = ASCEND;
            } else if (strcmp(text, "Descend") == 0) {
  @@ -1738,6 +1770,8 @@
              (DSCcomment(line) && iscomment(line+2,(comment)))
   #define IS_BEGIN(comment)                            \
              (iscomment(line+7,(comment)))
  +#define IS_END(comment)                              \
  +           (iscomment(line+5,(comment)))
   #define SKIP_WHILE(cond)                             \
           while (readline(fd, &line, NULL, &nbytes) && (cond)) *line_lenP += nbytes;\
              skipped=1;
  @@ -1773,7 +1807,12 @@
      else
   #endif
      if  (!IS_COMMENT("Begin"))     {} /* Do nothing */
  -   else if IS_BEGIN("Document:")  SKIP_UNTIL_1("EndDocument")
  +   else if IS_BEGIN("Document:")  {  /* Skip the EPS without handling its content */
  +            while (line && !IS_END("Document")) {
  +               line = ps_io_fgetchars(fd,-1);
  +               if (line) *line_lenP += FD_LINE_LEN;
  +            }
  +   }
      else if IS_BEGIN("Feature:")   SKIP_UNTIL_1("EndFeature")
   #ifdef USE_ACROREAD_WORKAROUND
      else if IS_BEGIN("File")       SKIP_UNTIL_2("EndFile","EOF")
  @@ -1789,7 +1828,7 @@
         INFMESSAGE(encountered "BeginData:")
         if (FD_LINE_LEN > 100) FD_BUF[100] = '\0';
         text[0] = '\0';
  -      if (sscanf(line+length("%%BeginData:"), "%d %*s %s", &num, text) >= 1) {
  +      if (sec_sscanf(line+length("%%BeginData:"), "%d %*s %s", &num, text, 
sizeof(text)) >= 1) {
            if (strcmp(text, "Lines") == 0) {
               INFIMESSAGE(number of lines to skip:,num)
               while (num) {
  @@ -1888,7 +1927,7 @@
            INFMESSAGE(encountered "BeginData:")
            if (FD_LINE_LEN > 100) FD_BUF[100] = '\0';
            text[0] = '\0';
  -         if (sscanf(line+length("%%BeginData:"), "%d %*s %s", &num, text) >= 1) {
  +         if (sec_sscanf(line+length("%%BeginData:"), "%d %*s %s", &num, text, 
sizeof(text)) >= 1) {
               if (strcmp(text, "Lines") == 0) {
                  INFIMESSAGE(number of lines:,num)
                  while (num) {
  @@ -1985,7 +2024,7 @@
             PS_free(comment);
             continue;
          }
  -       sscanf(comment+length("%%Pages:"), "%s", text);
  +       sec_sscanf(comment+length("%%Pages:"), "%s", text, sizeof(text));
          if (strcmp(text, "(atend)") == 0) {
             fputs(comment, dest_file);
             pages_atend = True;
  --- gv-3.5.8.orig/source/misc.c
  +++ gv-3.5.8/source/misc.c
  @@ -301,9 +301,10 @@
   /*############################################################*/
   
   void
  -misc_setPageMarker(entry,kind)
  +misc_setPageMarker(entry,kind,event)
     int entry;
     int kind; /* 0 = selected, 1 = highlighted , 2 = bring selected in sight*/
  +  XEvent *event;
   {
     int x,y,yl,yu,ny=99999;
     Boolean b = False;
  @@ -330,9 +331,12 @@
        ny = (int)newtocClip->core.height - ((int)newtoc->core.y + yl + 14);
           if (y>ny) b = True;
         }
  -      if (b) {
  +      if (event && b) {
        INFIMESSAGE(jumping to,ny)
        ClipWidgetSetCoordinates(newtocClip,x,ny);
  +     entry = VlistEntryOfPosition(newtoc,(int)event->xbutton.y+(y-ny));
  +     if (entry != VlistHighlighted(newtoc))
  +             VlistChangeHighlighted(newtoc,entry,XawVlistSet);
         }
       }
     }
  @@ -689,7 +693,7 @@
          }
          if (toc_text) {
         INFMESSAGE(marking current_page as current)
  -         misc_setPageMarker(current_page,0);
  +         misc_setPageMarker(current_page,0,NULL);
          }
       }
   
  @@ -1131,7 +1135,10 @@
        }
        s[i] = '\0';
                                                        n=0;
  -     XtSetArg(args[n], XtNvlist, s);                 n++;
  +     if (    (!gv_filename_old)                      ||
  +             (strcmp(gv_filename_old, gv_filename))  ||
  +             (doc->numpages != olddoc->numpages)     )
  +               XtSetArg(args[n], XtNvlist, s);       n++;
        XtSetArg(args[n], XtNlabel, toc_text);          n++;
         } else {
        s = NULL;
  @@ -1154,7 +1161,7 @@
       misc_setSensitive(w_printAllPages     , show_printAllPages     , (gv_psfile   
!= NULL));
       misc_setSensitive(w_checkFile         , show_checkFile         , (gv_filename 
!= NULL));
       misc_setSensitive(w_updateFile        , show_updateFile        , (gv_filename 
!= NULL));
  -    misc_setSensitive(w_showThisPage      , show_showThisPage      , (gv_filename 
!= NULL));
  +    misc_setSensitive(w_showThisPage      , show_showThisPage      , (gv_psfile   
!= NULL));
       misc_setSensitive(w_prevPage          , show_prevPage          , (toc_text    
!= NULL));
       misc_setSensitive(w_nextPage          , show_nextPage          , (gv_filename 
!= NULL));
       misc_setSensitive(w_toggleCurrentPage , show_toggleCurrentPage , (toc_text    
!= NULL));
  @@ -1168,7 +1175,7 @@
       XtSetSensitive(saveAllEntry,     (gv_psfile   != NULL));
       XtSetSensitive(saveMarkedEntry,  (toc_text    != NULL));
       XtSetSensitive(nextEntry,        (gv_filename != NULL));
  -    XtSetSensitive(redisplayEntry,   (gv_filename != NULL));
  +    XtSetSensitive(redisplayEntry,   (gv_psfile   != NULL));
       XtSetSensitive(prevEntry,        (toc_text    != NULL));
       XtSetSensitive(currentEntry,     (toc_text    != NULL));
       XtSetSensitive(oddEntry,         (toc_text    != NULL));
  @@ -1718,3 +1725,51 @@
       ENDMESSAGE(catch_Xerror)
       return 0;
   }
  +
  +/*############################################################*/
  +/* quote_filename */
  +/* Quotes special characters in filenames */
  +/* (taken from bash sources) */
  +/*############################################################*/
  +
  +char *
  +quote_filename (string) 
  +     char *string;
  +{
  +    int c;
  +    char *result, *r, *s;
  +
  +    BEGINMESSAGE(quote_filename)
  +
  +    result = (char*) GV_XtMalloc((2 * strlen (string) + 1) * sizeof(char));
  +
  +    for (r = result, s = string; s && (c = *s); s++)
  +    {
  +      switch (c)
  +     {
  +     case ' ': case '\t': case '\n':         /* IFS white space */
  +     case '\'': case '"': case '\\':         /* quoting chars */
  +     case '|': case '&': case ';':           /* shell metacharacters */
  +     case '(': case ')': case '<': case '>':
  +     case '!': case '{': case '}':           /* reserved words */
  +     case '*': case '[': case '?': case ']': /* globbing chars */
  +     case '^':
  +     case '$': case '`':                     /* expansion chars */
  +       *r++ = '\\';
  +       *r++ = c;
  +       break;
  +     case '#':                               /* comment char */
  +       if (s == string)
  +         *r++ = '\\';
  +       /* FALLTHROUGH */
  +     default:
  +       *r++ = c;
  +       break;
  +     }
  +    }
  +    *r = '\0';
  +
  +    ENDMESSAGE(quote_filename)
  +
  +    return (result);
  +}
  --- gv-3.5.8.orig/source/actions.c
  +++ gv-3.5.8/source/actions.c
  @@ -94,7 +94,7 @@
     }
     if (new_width && new_height) {
       if (width != new_width || height != new_height) {
  -       misc_setPageMarker(0,2); /* bring selected in sight */
  +       misc_setPageMarker(0,2,event); /* bring selected in sight */
          width = new_width;
          height=new_height;
       }
  @@ -253,7 +253,7 @@
        }
         }
         h = doc_putPageInRange(doc,h);
  -      misc_setPageMarker(h,1);
  +      misc_setPageMarker(h,1,event);
       }
   
       nx = x = (int)aaa->core.x;
  @@ -428,7 +428,7 @@
       if (!scrolling && toc_text) {
         entry = VlistEntryOfPosition(newtoc,(int)event->xbutton.y);
         if (entry >=0 && entry < doc->numpages) {
  -     misc_setPageMarker(entry,0);
  +     misc_setPageMarker(entry,0,event);
           show_page(entry,NULL);
         }
       }
  --- gv-3.5.8.orig/source/callbacks.c
  +++ gv-3.5.8/source/callbacks.c
  @@ -870,7 +870,7 @@
     char *s;
   
     BEGINMESSAGE(cb_page)
  -  if (gv_psfile && client_data) {
  +  if (gv_filename && client_data) {
       s = (char*)client_data;
       if (*s=='-' || *s=='+') {  
         k = 1;
  @@ -894,7 +894,7 @@
        np = np + ((k==1) ? cp : 0);
        np=doc_putPageInRange(doc,np);
        IIMESSAGE(np,current_page)
  -     misc_setPageMarker(np,0);
  +     misc_setPageMarker(np,0,NULL);
        if (np != current_page) show_page(np,NULL);
         } else {
        if (k==1 && np > 0) show_page(np,NULL);
  --- gv-3.5.8.orig/source/config.h
  +++ gv-3.5.8/source/config.h
  @@ -40,7 +40,7 @@
   ----------------------------------------------------------
   */
   
  -/* #define GV_RESTART_IF_BUSY */
  +/*#define GV_RESTART_IF_BUSY*/
   
   /*
   ##########################################################
  --- gv-3.5.8.orig/source/main.c
  +++ gv-3.5.8/source/main.c
  @@ -985,9 +985,9 @@
     main_setInternResource(db,&gv_gs_x11_device,"gsX11Device");
     main_setInternResource(db,&gv_gs_x11_alpha_device,"gsX11AlphaDevice");
     main_setInternResource(db,&gv_gs_arguments,"gsArguments");
  -  s = resource_getResource(db,gv_class,gv_class,"gsSafer",NULL);
  +  s = resource_getResource(db,gv_class,gv_name,"gsSafer",NULL);
     if (!strcasecmp(s,"true"))  gv_gs_safer = 1; else gv_gs_safer = 0;
  -  s = resource_getResource(db,gv_class,gv_class,"gsQuiet",NULL);
  +  s = resource_getResource(db,gv_class,gv_name,"gsQuiet",NULL);
     if (!strcasecmp(s,"true"))  gv_gs_quiet = 1; else gv_gs_quiet = 0;
     ENDMESSAGE(main_setGhostscriptResources)
   }
  --- gv-3.5.8.orig/source/misc.h
  +++ gv-3.5.8/source/misc.h
  @@ -57,7 +57,8 @@
   extern void                  misc_setPageMarker (
   #if NeedFunctionPrototypes
       int, /* entry */
  -    int       /* kind */
  +    int, /* kind */
  +    XEvent*
   #endif
   );
   
  @@ -115,6 +116,12 @@
   #endif
   );
    
  +extern char *                   quote_filename (
  +#if NeedFunctionPrototypes
  +    char*
  +#endif
  +);
  +
   #endif       /* _GV_MISC_H_ */
   
   
  --- gv-3.5.8.orig/source/gv_misc_res.dat
  +++ gv-3.5.8/source/gv_misc_res.dat
  @@ -525,9 +525,9 @@
    <LeaveWindow>:              GV_Toc(unhighlight)     \n\
    <Btn1Down>:         GV_Toc(scrollon)        \n\
    <Btn1Motion>:               GV_Toc(scroll)          \n\
  - <Btn1Up>:           GV_Toc(select)          \
  + <Btn1Up>:           GV_Toc(highlight)       \
                        GV_Toc(scrolloff)       \
  -                     GV_Toc(highlight)       \n\
  +                     GV_Toc(select)          \n\
    <Btn2Down>:         GV_Toc(toggleon)        \n\
    <Btn2Motion>:               GV_Toc(toggleextend)    \
                        GV_Toc(highlight)       \n\
  --- gv-3.5.8.orig/source/Vlist.c
  +++ gv-3.5.8/source/Vlist.c
  @@ -623,6 +623,8 @@
       if (y < 0) entry = -1;
       else       entry = (vw->vlist.entries*y)/(int)vw->label.label_height;
     }
  +  if (entry >= vw->vlist.entries)
  +       entry = vw->vlist.entries-1;
     IMESSAGE(entry)
     ENDMESSAGE(VlistEntryOfPosition)
     return(entry);
  --- gv-3.5.8.orig/source/file.c
  +++ gv-3.5.8/source/file.c
  @@ -145,6 +145,25 @@
   }
   
   /*############################################################*/
  +/* file_assureDirectory */
  +/*############################################################*/
  +
  +void
  +file_assureDirectory(to,from)
  +   char *to;
  +   char *from;
  +{
  +   int len;
  +   BEGINMESSAGE(file_assureDirectory)
  +   strcpy(to,from);
  +#  ifndef VMS
  +      len = strlen(to);
  +      if (to[len-1] != '/') { to[len] = '/'; to[len+1] = '\0'; }
  +#  endif
  +   ENDMESSAGE(file_assureDirectory)
  +}
  +
  +/*############################################################*/
   /* file_getTmpFilename */
   /* provide some temporary file name */
   /*############################################################*/
  @@ -164,11 +183,13 @@
   
      BEGINMESSAGE(file_getTmpFilename)
   
  -   if (!baseDirectory) baseDirectory = app_res.scratch_dir;
  -   strcpy(tmpDirBuf,baseDirectory);
  -   pos = file_locateFilename(tmpDirBuf);
  -   if (pos) { ++pos; *pos='\0'; }
  -   else strcpy(tmpDirBuf,app_res.scratch_dir);
  +   pos = NULL;
  +   if (baseDirectory) {
  +     strcpy(tmpDirBuf,baseDirectory); 
  +     pos = file_locateFilename(tmpDirBuf);
  +   }
  +   if (pos) *pos='\0';
  +   else file_assureDirectory(tmpDirBuf,app_res.scratch_dir);
   
      if (!baseFilename) baseFilename= ".";
      strcpy(tmpNameBuf,baseFilename);
  --- gv-3.5.8.orig/source/save.c
  +++ gv-3.5.8/source/save.c
  @@ -112,17 +112,19 @@
      String print_filename;
   {
      String error=NULL;
  +   char *print_quoted_filename;
      char *c,*p;
      Cardinal m,n;
      String printfail=GV_ERROR_PRINT_FAIL;
   
      BEGINMESSAGE(print_file)
   
  +   print_quoted_filename = quote_filename(print_filename);
      p = GV_XtNewString(print_command);
      n=0;
      c=p;
      while ((c=strstr(c,"%s"))) { c+=2; n++; }
  -   m = (strlen(p)+(n>0?n:1)*strlen(print_filename)+5)*sizeof(char);
  +   m = (strlen(p)+(n>0?n:1)*strlen(print_quoted_filename)+5)*sizeof(char);
      c = (char*) GV_XtMalloc(m);
      if (n>0) {
        char *e,*s;
  @@ -133,13 +135,13 @@
          if (s) *s='\0';
          strcat(c,e);
          if (s) {
  -      strcat(c,print_filename);
  +      strcat(c,print_quoted_filename);
            e=s+2;
          } 
          else s=NULL;
        }
      } else {
  -     sprintf(c, "%s %s",p,print_filename);
  +     sprintf(c, "%s %s",p,print_quoted_filename);
      }
      INFSMESSAGE(printing:,c)
      if (SYSTEM_FAILED_ON(c)) {
  @@ -149,6 +151,7 @@
      }
      GV_XtFree(c);
      GV_XtFree(p);
  +   GV_XtFree(print_quoted_filename);
      ENDMESSAGE(print_file)
      return(error);
   }
  @@ -198,6 +201,9 @@
      char proc_name[256];
      char *error=NULL;
      char *pos;
  +   char *pdfpos;
  +   char *pspos;
  +   char *quoted_src_fn, *quoted_conv_fn;
   
      BEGINMESSAGE(save_forkPDFToPSConversion)
   
  @@ -205,7 +211,30 @@
      strcpy(proc_name,pos);
      strcat(proc_name," conversion");
   
  -   sprintf(command,gv_gs_cmd_conv_pdf,sd->conv_fn,sd->src_fn);
  +   quoted_src_fn = quote_filename(sd->src_fn);
  +   quoted_conv_fn = quote_filename(sd->conv_fn);
  +   if ((pdfpos = strstr(gv_gs_cmd_conv_pdf,"%pdf")) &&
  +       (pspos = strstr(gv_gs_cmd_conv_pdf,"%ps"))) {
  +     command[0] = '\0';
  +     if (pdfpos < pspos) {
  +       strncat(command,gv_gs_cmd_conv_pdf,(pdfpos-gv_gs_cmd_conv_pdf));
  +       strcat(command,quoted_src_fn);
  +       strncat(command,pdfpos+4,(pspos-pdfpos-4));
  +       strcat(command,quoted_conv_fn);
  +       strcat(command,pspos+3);
  +     } else {
  +       strncat(command,gv_gs_cmd_conv_pdf,(pspos-gv_gs_cmd_conv_pdf));
  +       strcat(command,quoted_conv_fn);
  +       strncat(command,pspos+3,(pdfpos-pspos-3));
  +       strcat(command,quoted_src_fn);
  +       strcat(command,pdfpos+4);
  +     }
  +   } else {
  +     sprintf(command,gv_gs_cmd_conv_pdf,quoted_conv_fn,quoted_src_fn);
  +   }
  +   GV_XtFree(quoted_src_fn);
  +   GV_XtFree(quoted_conv_fn);
  +
      INFSMESSAGE(starting conversion:,command)
      process_fork(proc_name,command,save_forkPDFToPSConversionDone,(XtPointer)sd);
      ENDMESSAGE(save_forkPDFToPSConversion)
  --- gv-3.5.8.orig/source/main_resources.h
  +++ gv-3.5.8/source/main_resources.h
  @@ -285,10 +285,10 @@
    { "-spartan"                , ".style"                      , XrmoptionNoArg       
 , "gv_spartan.dat"},
    { "-pixmap"         , ".useBackingPixmap"           , XrmoptionNoArg        , 
"True"        },
    { "-nopixmap"               , ".useBackingPixmap"           , XrmoptionNoArg       
 , "False"       },
  - { "-quiet"          , ".quiet"                      , XrmoptionNoArg        , 
"True"        },
  - { "-noquiet"                , ".quiet"                      , XrmoptionNoArg       
 , "False"       },
  - { "-safer"          , ".safer"                      , XrmoptionNoArg        , 
"True"        },
  - { "-nosafer"                , ".safer"                      , XrmoptionNoArg       
 , "False"       },
  + { "-quiet"          , ".gsQuiet"                    , XrmoptionNoArg        , 
"True"        },
  + { "-noquiet"                , ".gsQuiet"                    , XrmoptionNoArg       
 , "False"       },
  + { "-safer"          , ".gsSafer"                    , XrmoptionNoArg        , 
"True"        },
  + { "-nosafer"                , ".gsSafer"                    , XrmoptionNoArg       
 , "False"       },
    { "-arguments"              , ".arguments"                  , XrmoptionSepArg      
 , NULL          },
    { "-h"                      , ".help"                       , XrmoptionNoArg       
 , "?"           },
    { "-?"                      , ".help"                       , XrmoptionNoArg       
 , "?"           },
  --- gv-3.5.8.orig/source/process.c
  +++ gv-3.5.8/source/process.c
  @@ -272,8 +272,7 @@
      pid = fork();
   
      if (pid == 0) { /* child */
  -      int  argc=0;
  -      char *argv[20];
  +      char *argv[3];
         char *c;
   
         INFMESSAGE(child process)
  @@ -286,15 +285,10 @@
          */
         system(c);
   #else
  -      while (isspace(*c)) c++;
  -      while (*c) {
  -         argv[argc++] = c;
  -         while (*c && !isspace(*c)) c++;
  -         if (*c) *c++ = '\0';
  -         while (isspace(*c)) c++;
  -         SMESSAGE(argv[argc-1])
  -      }
  -      argv[argc] = NULL;
  +      argv[0] = "sh";
  +      argv[1] = "-c";
  +      argv[2] = c;
  +      argv[3] = NULL;
   
         INFMESSAGE(spawning conversion process)
   /*
  --- gv-3.5.8.orig/source/miscmenu.c
  +++ gv-3.5.8/source/miscmenu.c
  @@ -60,7 +60,7 @@
   
   static MiscMenuEntryStruct miscmenu_entries[] = {
     { "update",cb_checkFile,(XtPointer)CHECK_FILE_DATE,2 },
  -  { "redisplay",cb_redisplay,NULL,2 },
  +  { "redisplay",cb_redisplay,NULL,3 },
     { "toggle_current" , cb_setPageMark, (XtPointer)(SPM_CURRENT|SPM_TOGGLE),1 },
     { "toggle_even"    , cb_setPageMark, (XtPointer)(SPM_EVEN|SPM_TOGGLE),1 },
     { "toggle_odd"     , cb_setPageMark, (XtPointer)(SPM_ODD|SPM_TOGGLE),1 },
  --- gv-3.5.8.orig/source/gv_user_res.dat
  +++ gv-3.5.8/source/gv_user_res.dat
  @@ -8,7 +8,7 @@
   GV.fallbackOrientation:      portrait
   GV.swapLandscape:    False
   GV.autoCenter:               True
  -GV.antialias:                False
  +GV.antialias:                True
   GV.respectDSC:               True
   GV.ignoreEOF:                True
   GV.confirmPrint:     True
  --- gv-3.5.8.orig/source/options_fs.c
  +++ gv-3.5.8/source/options_fs.c
  @@ -105,7 +105,6 @@
      Widget    w;
      XtPointer client_data, call_data;
   {
  -   BEGINMESSAGE(options_fs_cb_apply)
      Arg args[5];
      Cardinal n;
      static Boolean s_scratch_dir = False;
  --- gv-3.5.8.orig/source/secscanf.c
  +++ gv-3.5.8/source/secscanf.c
  @@ -0,0 +1,540 @@
  +/*
  + * Secure sscanf - sscanf with an additional size argument for string
  + * arguments. All format specifiers should work as in the standard
  + * scanf - except for those writing to a string buffer provided by the
  + * caller. These specifiers take an additional argument of type size_t
  + * that specifies the size of the buffer.
  + *
  + * Copyright (C) 2002, Olaf Kirch <[EMAIL PROTECTED]>
  + */
  +
  +#define _GNU_SOURCE
  +
  +#include <sys/param.h>
  +#include <stdio.h>
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#include <ctype.h>
  +
  +enum {
  +     CONV_ANY,
  +     CONV_STR,
  +     CONV_NUM,
  +     CONV_INTEGER,
  +     CONV_FLOAT,
  +     CONV_POINTER,
  +};
  +
  +enum {
  +     SIZE_ANY,
  +     SIZE_SHORT,
  +     SIZE_LONG,
  +     SIZE_QUAD,
  +};
  +
  +union scan_value {
  +     const char *            v_string;
  +     long long               v_signed;
  +     unsigned long long      v_integer;
  +     long double             v_double;
  +     void *                  v_pointer;
  +};
  +
  +
  +static int   process_number(union scan_value *vp, const char **sp, char fmt);
  +static int   process_char_class(const char **, const char **, int);
  +
  +static inline int
  +set_conv_type(int *type, int new_type)
  +{
  +     switch (*type) {
  +     case CONV_ANY:
  +             break;
  +     case CONV_NUM:
  +             if (new_type == CONV_INTEGER
  +              || new_type == CONV_FLOAT
  +              || new_type == CONV_POINTER)
  +                     break;
  +             /* fallthru */
  +     default:
  +             if (*type != new_type)
  +                     return 0;
  +             break;
  +     }
  +
  +     *type = new_type;
  +     return 1;
  +}
  +
  +int
  +sec_sscanf(const char *s, const char *fmt, ...)
  +{
  +     const char      *begin = s;
  +     int             num_fields = 0, fmt_empty = 1;
  +     va_list         ap;
  +
  +     va_start(ap, fmt);
  +     while (*fmt) {
  +             union scan_value value;
  +             const char      *pre_space_skip,
  +                             *value_begin;
  +             int             assign = 1, allocate = 0,
  +                             conv_type = CONV_ANY,
  +                             conv_size = SIZE_ANY,
  +                             field_width = -1,
  +                             nul_terminated = 1;
  +             char            c;
  +
  +             c = *fmt++;
  +             if (isspace(c)) {
  +                     while (isspace(*s))
  +                             s++;
  +                     continue;
  +             }
  +
  +             fmt_empty = 0;
  +             if (c != '%') {
  +                     if (c != *s)
  +                             goto stop;
  +                     s++;
  +                     continue;
  +             }
  +
  +             /* Each % directive implicitly skips white space
  +              * except for the %c case */
  +             pre_space_skip = s;
  +             while (isspace(*s))
  +                     s++;
  +
  +             while (1) {
  +                     int     type = CONV_ANY, size = SIZE_ANY;
  +
  +                     switch (*fmt) {
  +                     case '*':
  +                             assign = 0;
  +                             break;
  +                     case 'a':
  +                             type = CONV_STR;
  +                             allocate = 1;
  +                             break;
  +                     case 'h':
  +                             type = CONV_INTEGER;
  +                             size = SIZE_SHORT;
  +                             break;
  +                     case 'l':
  +                             type = CONV_NUM;
  +                             size = SIZE_LONG;
  +                             break;
  +                     case 'L':
  +                     case 'q':
  +                             type = CONV_NUM;
  +                             size = SIZE_QUAD;
  +                             break;
  +                     case '0': case '1': case '2': case '3': case '4':
  +                     case '5': case '6': case '7': case '8': case '9':
  +                             field_width = strtol(fmt, (char **) &fmt, 10);
  +                             fmt--;
  +                             break;
  +                     default:
  +                             goto flags_done;
  +                     }
  +
  +                     if (!set_conv_type(&conv_type, type))
  +                             goto stop;
  +
  +                     if (size != SIZE_ANY) {
  +                             if (size == SIZE_LONG && conv_size == SIZE_LONG)
  +                                     conv_size = SIZE_QUAD;
  +                             else
  +                                     conv_size = size;
  +                     }
  +
  +                     fmt++;
  +             }
  +
  +     flags_done:
  +             value_begin = s;
  +
  +             switch (*fmt++) {
  +             case '%':
  +                     if (*s == '\0')
  +                             goto eof;
  +                     if (*s != '%')
  +                             goto stop;
  +                     continue;
  +             case '[':
  +                     value.v_string = s;
  +                     if (!set_conv_type(&conv_type, CONV_STR)
  +                      || !process_char_class(&fmt, &s, field_width))
  +                             goto stop;
  +                     break;
  +             case 's':
  +                     value.v_string = s;
  +                     if (!set_conv_type(&conv_type, CONV_STR))
  +                             goto stop;
  +                     while (*s && !isspace(*s) && field_width-- != 0)
  +                             s++;
  +                     break;
  +             case 'c':
  +                     if (!set_conv_type(&conv_type, CONV_STR))
  +                             goto stop;
  +                     value.v_string = s = value_begin = pre_space_skip;
  +
  +                     if (field_width < 0)
  +                             s++;
  +                     else while (*s && field_width--)
  +                             s++;
  +                     nul_terminated = 0;
  +                     break;
  +             case 'd':
  +             case 'i':
  +             case 'o':
  +             case 'u':
  +             case 'x':
  +             case 'X':
  +                     if (!set_conv_type(&conv_type, CONV_INTEGER)
  +                      || !process_number(&value, &s, fmt[-1]))
  +                             goto stop;
  +                     break;
  +             case 'p':
  +                     if (!set_conv_type(&conv_type, CONV_POINTER)
  +                      || !process_number(&value, &s, fmt[-1]))
  +                             goto stop;
  +                     break;
  +             case 'f':
  +             case 'g':
  +             case 'e':
  +             case 'E':
  +                     if (!set_conv_type(&conv_type, CONV_FLOAT)
  +                      || !process_number(&value, &s, fmt[-1]))
  +                             goto stop;
  +                     break;
  +             case 'n':
  +                     if (!set_conv_type(&conv_type, CONV_INTEGER))
  +                             goto stop;
  +                     value.v_signed = (s - begin);
  +                     break;
  +             default:
  +                     goto stop;
  +             }
  +
  +             /* We've consumed what we need to consume. Now copy */
  +             if (!assign)
  +                     continue;
  +
  +             /* Make sure we've consumed at least *something* */
  +             if (s == value_begin)
  +                     goto eof;
  +
  +             /* Deal with a conversion flag */
  +             if (conv_type == CONV_STR && allocate) {
  +                     value.v_pointer = strdup(value.v_string); ((char 
*)value.v_pointer)[s - value.v_string] = '\0';
  +                     conv_type = CONV_POINTER;
  +                     allocate = 0;
  +             }
  +
  +             switch (conv_type) {
  +             case CONV_STR:
  +                     {
  +                             const char *string = value.v_string;
  +                             char    *buf;
  +                             size_t  size;
  +
  +                             if (string == NULL)
  +                                     goto stop;
  +                             buf = va_arg(ap, char *);
  +                             size = va_arg(ap, size_t) - nul_terminated;
  +                             if (size > s - string)
  +                                     size = s - string;
  +                             strncpy(buf, string, size);
  +                             if (nul_terminated)
  +                                     buf[size] = '\0';
  +                     }
  +                     break;
  +
  +             case CONV_POINTER:
  +                     {
  +                             void    **ptr;
  +
  +                             ptr = va_arg(ap, void **);
  +                             *ptr = value.v_pointer;
  +                     }
  +                     break;
  +             case CONV_INTEGER:
  +                     {
  +                             void    *ptr;
  +
  +                             ptr = va_arg(ap, void *);
  +                             switch (conv_size) {
  +                             case SIZE_SHORT:
  +                                     *(short *) ptr = value.v_integer;
  +                                     break;
  +                             case SIZE_ANY:
  +                                     *(int *) ptr = value.v_integer;
  +                                     break;
  +                             case SIZE_LONG:
  +                                     *(long *) ptr = value.v_integer;
  +                                     break;
  +                             case SIZE_QUAD:
  +                                     *(long long *) ptr = value.v_integer;
  +                                     break;
  +                             default:
  +                                     goto stop;
  +                             }
  +                     }
  +                     break;
  +             case CONV_FLOAT:
  +                     {
  +                             void    *ptr;
  +
  +                             ptr = va_arg(ap, void *);
  +                             switch (conv_size) {
  +                             case SIZE_ANY:
  +                                     *(float *) ptr = value.v_double;
  +                                     break;
  +                             case SIZE_LONG:
  +                                     *(double *) ptr = value.v_double;
  +                                     break;
  +                             case SIZE_QUAD:
  +                                     *(long double *) ptr = value.v_double;
  +                                     break;
  +                             default:
  +                                     goto stop;
  +                             }
  +                     }
  +                     break;
  +             default:
  +                     goto stop;
  +             }
  +
  +             num_fields++;
  +     }
  +
  +stop:        return num_fields;
  +
  +eof: if (num_fields)
  +             return num_fields;
  +     return EOF;
  +}
  +
  +static int
  +process_number(union scan_value *vp, const char **sp, char fmt)
  +{
  +     const char      *s = *sp;
  +
  +     switch (fmt) {
  +     case 'd':
  +             vp->v_signed = strtoll(s, (char **) sp, 10);
  +             break;
  +     case 'i':
  +             vp->v_signed = strtoll(s, (char **) sp, 0);
  +             break;
  +     case 'o':
  +             vp->v_integer = strtoull(s, (char **) sp, 8);
  +             break;
  +     case 'u':
  +             vp->v_integer = strtoull(s, (char **) sp, 10);
  +             break;
  +     case 'x':
  +     case 'X':
  +             vp->v_integer = strtoull(s, (char **) sp, 16);
  +             break;
  +     case 'p':
  +             vp->v_pointer = (void *) strtoull(s, (char **) sp, 0);
  +             break;
  +     case 'f':
  +     case 'g':
  +     case 'e':
  +     case 'E':
  +             vp->v_double = strtod(s, (char **) sp);
  +             break;
  +     default:
  +             return 0;
  +     }
  +
  +     return 1;
  +}
  +
  +static int
  +process_char_class(const char **fmt, const char **sp, int width)
  +{
  +     unsigned char   *s, c, prev_char = 0;
  +     unsigned char   table[255];
  +     int             val = 1;
  +
  +     s = (unsigned char *) *fmt;
  +     if (*s == '^') {
  +             memset(table, 1, sizeof(table));
  +             val = 0;
  +             s++;
  +     } else {
  +             memset(table, 0, sizeof(table));
  +             val = 1;
  +     }
  +     /* First character in set is closing bracket means add it to the
  +      * set of characters */
  +     if ((c = *s) == ']') {
  +             table[c] = val;
  +             prev_char = c;
  +             s++;
  +     }
  +
  +     /* Any other closing bracket finishes off the set */
  +     while ((c = *s++) != ']') {
  +             if (prev_char) {
  +                     if (c == '-' && *s != '\0' && *s != ']') {
  +                             c = *s++;
  +                     } else {
  +                             //table[prev_char] = val;
  +                             prev_char = '\0';
  +                     }
  +             }
  +
  +             if (c == '\0')
  +                     return 0;
  +
  +             if (prev_char) {
  +                     while (prev_char < c)
  +                             table[prev_char++] = val;
  +             }
  +             table[c] = val;
  +             prev_char = c;
  +     }
  +     *fmt = (char *) s;
  +
  +#if 0
  +     {
  +             int     n;
  +
  +             printf("char class=");
  +             for (n = 0; n < 255; n++)
  +                     if (table[n])
  +                             printf(isprint(n)? "%c" : "\\%03o", n);
  +             printf("\n");
  +     }
  +#endif
  +
  +     s = (unsigned char *) *sp;
  +     while ((c = *s) != '\0' && table[c] && width--)
  +             s++;
  +
  +     *sp = (char *) s;
  +     return 1;
  +}
  +
  +#ifdef TEST
  +static int   verify(const char *fmt, const char *s);
  +static int   verify_s(const char *fmt, const char *s);
  +
  +
  +
  +int
  +main(int argc, char **argv)
  +{
  +     verify("%d %d", "12 13");
  +     verify("%d-%d", "12 13");
  +     verify("%d-%d", "12-13");
  +     verify("%u %u", "12 13");
  +     verify("%o %o", "12 13");
  +     verify("%x %x", "12 13");
  +     verify("%X %X", "12 13");
  +     verify("%hd %hd", "12 13");
  +     verify("%ld %ld", "12 13");
  +     verify("%lld %lld", "12 13");
  +     verify("%Ld %Ld", "12 13");
  +     verify("%qd %qd", "12 13");
  +     verify("%f %f", "12 13");
  +     verify("%lf %lf", "12 13");
  +     verify("%Lf %Lf", "12 13");
  +     verify("%qf %qf", "12 13");
  +     verify("%*d-%d", "12-13");
  +     verify("%*s %d", "12 13");
  +     verify("%p", "0xdeadbeef");
  +     verify("%*[a-e] %x", "deadbeef feeb");
  +     verify("%*[a-f] %x", "deadbeef feeb");
  +     verify("%*[^g-z] %x", "deadbeef feeb");
  +     verify("%*[^ g-z] %x", "deadbeef feeb");
  +     verify("%*[^ g-z-] %x", "dead-beef feeb");
  +     verify("%*5s %d", "toast123 456");
  +     verify("", "lalla");
  +     verify("%u", "");
  +
  +     verify_s("%s", "aa bb");
  +     verify_s("%s %s", "aa bb");
  +     verify_s("%[a-z] %s", "aa bb");
  +     verify_s("%c %s", "aa bb");
  +     verify_s("%2c %s", " aa bb");
  +     verify_s("%20c %s", " aa bb");
  +
  +     return 0;
  +}
  +
  +static int
  +verify(const char *fmt, const char *s)
  +{
  +     union scan_value vals[5], vals_ref[5], *v;
  +     int     n, m;
  +
  +     memset(vals, 0xe5, sizeof(vals));
  +     memset(vals_ref, 0xe5, sizeof(vals_ref));
  +
  +     v = vals;
  +     n = sec_sscanf(s, fmt, v + 0, v + 1, v + 2, v + 3, v + 4);
  +
  +     v = vals_ref;
  +     m = sscanf(s, fmt, v + 0, v + 1, v + 2, v + 3, v + 4);
  +
  +     if (m != n) {
  +             printf("FAILED: fmt=\"%s\"\n"
  +                    "        str=\"%s\"\n"
  +                    "        sec_scanf returns %d, sscanf returns %d\n",
  +                    fmt, s, n, m);
  +             return 0;
  +     }
  +
  +     if (memcmp(vals, vals_ref, sizeof(vals))) {
  +             printf("FAILED: fmt=\"%s\"\n"
  +                    "        str=\"%s\"\n"
  +                    "        data differs!\n",
  +                    fmt, s);
  +             printf("0x%Lx != 0x%Lx\n", vals[0].v_integer, vals_ref[0].v_integer);
  +             return 0;
  +     }
  +
  +     return 1;
  +}
  +
  +static int
  +verify_s(const char *fmt, const char *s)
  +{
  +     char    buf[3][256], buf_ref[3][256];
  +     int     n, m;
  +
  +     memset(buf, 0xe5, sizeof(buf));
  +     memset(buf_ref, 0xe5, sizeof(buf_ref));
  +
  +     n = sec_sscanf(s, fmt, buf, sizeof(buf[0]), buf + 1, sizeof(buf[1]), buf + 2, 
sizeof(buf[2]));
  +
  +     m = sscanf(s, fmt, buf_ref, buf_ref + 1, buf_ref + 2);
  +
  +     if (m != n) {
  +             printf("FAILED: fmt=\"%s\"\n"
  +                    "        str=\"%s\"\n"
  +                    "        sec_scanf returns %d, sscanf returns %d\n",
  +                    fmt, s, n, m);
  +             return 0;
  +     }
  +
  +     if (memcmp(buf, buf_ref, sizeof(buf))) {
  +             printf("FAILED: fmt=\"%s\"\n"
  +                    "        str=\"%s\"\n"
  +                    "        data differs!\n",
  +                    fmt, s);
  +             printf("%s != %s\n", buf[0], buf_ref[0]);
  +             return 0;
  +     }
  +
  +     return 1;
  +}
  +#endif
  --- gv-3.5.8.orig/source/Imakefile
  +++ gv-3.5.8/source/Imakefile
  @@ -63,6 +63,7 @@
    resource.c\
    save.c\
    scale.c\
  + secscanf.c\
    signal.c\
    version.c\
    widgets_misc.c\
  @@ -106,6 +107,7 @@
    resource.o\
    save.o\
    scale.o\
  + secscanf.o\
    signal.o\
    version.o\
    widgets_misc.o\
  Index: openpkg-src/gv/gv.sh
  ============================================================
  $ cvs update -p -r1.1 gv.sh
  #!/bin/sh
  XAPPLRESDIR=@l_prefix@/share/gv
  export XAPPLRESDIR
  exec @l_prefix@/libexec/gv/gv ${1+"$@"}
  Index: openpkg-src/gv/gv.spec
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 gv.spec
  --- openpkg-src/gv/gv.spec    26 Sep 2002 17:36:48 -0000      1.1
  +++ openpkg-src/gv/gv.spec    17 Oct 2002 09:06:43 -0000      1.2
  @@ -33,16 +33,18 @@
   Group:        XWindow
   License:      GPL
   Version:      3.5.8
  -Release:      20020926
  +Release:      20021017
   
   #   list of sources
   Source0:      ftp://ftpthep.physik.uni-mainz.de/pub/gv/unix/gv-%{version}.tar.gz
  +Source1:      gv.sh
  +Patch0:       gv.patch
   
   #   build information
   Prefix:       %{l_prefix}
   BuildRoot:    %{l_buildroot}
  -BuildPreReq:  OpenPKG, openpkg >= 20020206, X11, ghostscript
  -PreReq:       OpenPKG, openpkg >= 20020206, X11, ghostscript
  +BuildPreReq:  OpenPKG, openpkg >= 20020206, X11, xaw3d, ghostscript
  +PreReq:       OpenPKG, openpkg >= 20020206, X11, xaw3d, ghostscript
   AutoReq:      no
   AutoReqProv:  no
   
  @@ -54,15 +56,29 @@
       version 1.5.
   
   %prep
  -    %setup0 -q
  +    %setup -q
  +    %patch -p1
   
   %build
  -    #   build gv
  -    PATH=$PATH:`%{l_prefix}/etc/rc --query x11_bindir`
  -    xmkmf
  -    %{l_make} Makefiles
  +    #   workaround problems with macros on #include commands
  +    %{l_shtool} subst \
  +        -e 's;\(include[     ]*\)INC_X11(\([^)]*\));\1<X11/\2>;g' \
  +        -e 's;\(include[     ]*\)INC_XMU(\([^)]*\));\1<X11/Xmu/\2>;g' \
  +        -e 's;\(include[     ]*\)INC_XAW(\([^)]*\));\1<X11/Xaw3d/\2>;g' \
  +        `find . -name "*.[ch]" -print`
  +
  +    #   workaround trouble with manpage building
       cp doc/gv.man source/gv.man
  -    %{l_make}
  +
  +    #   make sure OpenPKG Xaw3d is found
  +    %{l_shtool} subst \
  +        -e 's;^\(DEFINES[    ]*=\)\(.*\);\1 -I%{l_prefix}/include \2;' \
  +        source/Imakefile
  +
  +    #   generate Makefiles and build gv
  +    PATH=$PATH:`%{l_prefix}/etc/rc --query x11_bindir`
  +    xmkmf -a
  +    %{l_make} %{l_mflags}
   
   %install
       rm -rf $RPM_BUILD_ROOT
  @@ -70,15 +86,27 @@
       #   create hierarchy
       %{l_shtool} mkdir -f -p -m 755 \
           $RPM_BUILD_ROOT%{l_prefix}/bin \
  -        $RPM_BUILD_ROOT%{l_prefix}/man/man1
  +        $RPM_BUILD_ROOT%{l_prefix}/man/man1 \
  +        $RPM_BUILD_ROOT%{l_prefix}/libexec/gv \
  +        $RPM_BUILD_ROOT%{l_prefix}/share/gv
   
       #   install gv
       %{l_shtool} install -c -s -m 755 \
  -        source/gv $RPM_BUILD_ROOT%{l_prefix}/bin/
  +        source/gv $RPM_BUILD_ROOT%{l_prefix}/libexec/gv/
   
       #   install manpages
  -    %{l_shtool} install -c -m 444 \
  +    %{l_shtool} install -c -m 644 \
           doc/gv.man $RPM_BUILD_ROOT%{l_prefix}/man/man1/gv.1
  +
  +    #   install application resource
  +    %{l_shtool} install -c -m 644 \
  +        -e 's;\(:[   ]*\)\(gs\);\1%{l_prefix}/bin/\2;' \
  +        source/GV.ad $RPM_BUILD_ROOT%{l_prefix}/share/gv/GV.ad
  +
  +    #   install executable wrapper
  +    %{l_shtool} install -c -m 755 \
  +        -e 's;@l_prefix@;%{l_prefix};g' \
  +        %{SOURCE gv.sh} $RPM_BUILD_ROOT%{l_prefix}/bin/gv
   
       %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT %{l_files_std}
   
  Index: openpkg-web/news.txt
  ============================================================
  $ cvs diff -u -r1.1812 -r1.1813 news.txt
  --- openpkg-web/news.txt      17 Oct 2002 09:05:38 -0000      1.1812
  +++ openpkg-web/news.txt      17 Oct 2002 09:06:42 -0000      1.1813
  @@ -1,3 +1,4 @@
  +17-Oct-2002: Upgraded package: P<gv-3.5.8-20021017>
   17-Oct-2002: New package: P<xaw3d-1.5-20021017>
   17-Oct-2002: Upgraded package: P<geoip-1.0.9-20021017>
   17-Oct-2002: Upgraded package: P<samba-2.2.6-20021017>
______________________________________________________________________
The OpenPKG Project                                    www.openpkg.org
CVS Repository Commit List                     [EMAIL PROTECTED]

Reply via email to