summaryrefslogtreecommitdiff
path: root/textproc/groff
diff options
context:
space:
mode:
authorryoon <ryoon>2014-07-18 10:11:35 +0000
committerryoon <ryoon>2014-07-18 10:11:35 +0000
commite96d1d2d3772f3661180f45b493edac6abc121b9 (patch)
treefbd096bde8ad7b9403fa6cebb845611c9dba407c /textproc/groff
parentdbd1fb592fcc177052bd87bad179756fc20ca920 (diff)
downloadpkgsrc-e96d1d2d3772f3661180f45b493edac6abc121b9.tar.gz
Fix SCO OpenServer 5.0.7/3.2 build.
Diffstat (limited to 'textproc/groff')
-rw-r--r--textproc/groff/Makefile5
-rw-r--r--textproc/groff/distinfo3
-rw-r--r--textproc/groff/files/mkstemp.c146
-rw-r--r--textproc/groff/patches/patch-src_libs_libgroff_tmpfile.cpp19
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;