diff options
author | ryoon <ryoon@pkgsrc.org> | 2014-07-18 10:11:35 +0000 |
---|---|---|
committer | ryoon <ryoon@pkgsrc.org> | 2014-07-18 10:11:35 +0000 |
commit | 0f3fafad366843f6e0c8cbbf5dacf91e5558fbc8 (patch) | |
tree | fbd096bde8ad7b9403fa6cebb845611c9dba407c /textproc/groff | |
parent | d36b5cc5f0da04575e6b4fd64bced70b013f5879 (diff) | |
download | pkgsrc-0f3fafad366843f6e0c8cbbf5dacf91e5558fbc8.tar.gz |
Fix SCO OpenServer 5.0.7/3.2 build.
Diffstat (limited to 'textproc/groff')
-rw-r--r-- | textproc/groff/Makefile | 5 | ||||
-rw-r--r-- | textproc/groff/distinfo | 3 | ||||
-rw-r--r-- | textproc/groff/files/mkstemp.c | 146 | ||||
-rw-r--r-- | textproc/groff/patches/patch-src_libs_libgroff_tmpfile.cpp | 19 |
4 files changed, 171 insertions, 2 deletions
diff --git a/textproc/groff/Makefile b/textproc/groff/Makefile index c4927b24254..6d0e7628990 100644 --- a/textproc/groff/Makefile +++ b/textproc/groff/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.74 2014/05/29 23:37:34 wiz Exp $ +# $NetBSD: Makefile,v 1.75 2014/07/18 10:11:35 ryoon Exp $ # DISTNAME= groff-1.20.1 @@ -57,6 +57,9 @@ CONFIGURE_ENV+= PAGE=${PAPERSIZE:Q} CFLAGS.SunOS+= -std=c99 -D_XOPEN_SOURCE=600 .endif +post-extract: + ${CP} -p ${FILESDIR}/*.c ${WRKSRC} + # Usually the mdoc.local "volume-operating-system" definition is for # the operating system name often displayed on top of man pages. And # "operating-system" is for the default .Os value (operating system diff --git a/textproc/groff/distinfo b/textproc/groff/distinfo index b538e65ee34..48ab1c6b811 100644 --- a/textproc/groff/distinfo +++ b/textproc/groff/distinfo @@ -1,4 +1,4 @@ -$NetBSD: distinfo,v 1.18 2013/09/19 10:11:47 fhajny Exp $ +$NetBSD: distinfo,v 1.19 2014/07/18 10:11:35 ryoon Exp $ SHA1 (groff-1.20.1.tar.gz) = 3066587d73df73c2bda235034f4515cf52d22549 RMD160 (groff-1.20.1.tar.gz) = ec311727206d183fb04f1b4bd01c1284142fdb52 @@ -21,4 +21,5 @@ SHA1 (patch-contrib_pic2graph_pic2graph.sh) = 447e25325f3c26be1e5fa8b6cd0bc05d9f SHA1 (patch-doc_fixinfo.sh) = 7ad376be722b712b129f736804b9c8c30789da2d SHA1 (patch-doc_groff.info-2) = a5e366af0bc9ee018664d2ba9192b136980af6ce SHA1 (patch-gendef.sh) = c5cbd81faa496764816d538913cb560376ead218 +SHA1 (patch-src_libs_libgroff_tmpfile.cpp) = 6fe0b56ad05a39beac37823b7a7fb5951e36ceb8 SHA1 (patch-src_roff_groff_pipeline.c) = 1ce068b8548240a8a6bbd0095fb15b5792b9d0f1 diff --git a/textproc/groff/files/mkstemp.c b/textproc/groff/files/mkstemp.c new file mode 100644 index 00000000000..d17bae6f8e5 --- /dev/null +++ b/textproc/groff/files/mkstemp.c @@ -0,0 +1,146 @@ +/* $NetBSD: mkstemp.c,v 1.1 2014/07/18 10:11:35 ryoon Exp $ */ + +/* + * Copyright (c) 1987, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> + +int +gettemp(char *path, int *doopen, int domkdir) +{ + char *start, *trv; + struct stat sbuf; + unsigned int pid; + + /* To guarantee multiple calls generate unique names even if + the file is not created. 676 different possibilities with 7 + or more X's, 26 with 6 or less. */ + static char xtra[3] = "aa"; + int xcnt = 0; + + /* doopen may be NULL */ + + pid = getpid(); + + /* Move to end of path and count trailing X's. */ + for (trv = path; *trv; ++trv) + if (*trv == 'X') + xcnt++; + else + xcnt = 0; + + /* Use at least one from xtra. Use 2 if more than 6 X's. */ + if (*(trv - 1) == 'X') + *--trv = xtra[0]; + if (xcnt > 6 && *(trv - 1) == 'X') + *--trv = xtra[1]; + + /* Set remaining X's to pid digits with 0's to the left. */ + while (*--trv == 'X') { + *trv = (pid % 10) + '0'; + pid /= 10; + } + + /* update xtra for next call. */ + if (xtra[0] != 'z') + xtra[0]++; + else { + xtra[0] = 'a'; + if (xtra[1] != 'z') + xtra[1]++; + else + xtra[1] = 'a'; + } + + /* + * check the target directory; if you have six X's and it + * doesn't exist this runs for a *very* long time. + */ + for (start = trv + 1;; --trv) { + if (trv <= path) + break; + if (*trv == '/') { + *trv = '\0'; + if (stat(path, &sbuf)) + return (0); + if (!S_ISDIR(sbuf.st_mode)) { + errno = ENOTDIR; + return (0); + } + *trv = '/'; + break; + } + } + + for (;;) { + if (doopen) { + if ((*doopen = + open(path, O_CREAT | O_EXCL | O_RDWR, 0600)) >= 0) + return (1); + if (errno != EEXIST) + return (0); + } else if (domkdir) { + if (mkdir(path, 0700) >= 0) + return (1); + if (errno != EEXIST) + return (0); + } else if (lstat(path, &sbuf)) + return (errno == ENOENT ? 1 : 0); + + /* tricky little algorithm for backward compatibility */ + for (trv = start;;) { + if (!*trv) + return (0); + if (*trv == 'z') + *trv++ = 'a'; + else { + if (isdigit((unsigned char)*trv)) + *trv = 'a'; + else + ++*trv; + break; + } + } + } + /*NOTREACHED*/ +} + +int +pkgsrc_mkstemp(char *path) +{ + int fd; + + return (gettemp(path, &fd, 0) ? fd : -1); +} diff --git a/textproc/groff/patches/patch-src_libs_libgroff_tmpfile.cpp b/textproc/groff/patches/patch-src_libs_libgroff_tmpfile.cpp new file mode 100644 index 00000000000..af759672938 --- /dev/null +++ b/textproc/groff/patches/patch-src_libs_libgroff_tmpfile.cpp @@ -0,0 +1,19 @@ +$NetBSD: patch-src_libs_libgroff_tmpfile.cpp,v 1.1 2014/07/18 10:11:35 ryoon Exp $ + +--- src/libs/libgroff/tmpfile.cpp.orig 2009-01-09 14:25:52.000000000 +0000 ++++ src/libs/libgroff/tmpfile.cpp +@@ -50,6 +50,14 @@ along with this program. If not, see <ht + #define TMPFILE_PREFIX_SHORT "" + #define TMPFILE_PREFIX_LONG "groff" + ++/* SCO OpenServer 5.0.7/3.2's mkstemp cannot handle more than 26(a to z) files ++ for one PID. */ ++#if defined(_SCO_DS) ++#define mkstemp pkgsrc_mkstemp ++ ++#include "../../../mkstemp.c" ++#endif ++ + char *tmpfile_prefix; + size_t tmpfile_prefix_len; + int use_short_postfix = 0; |