aboutsummaryrefslogtreecommitdiff
path: root/devel/ding-libs
diff options
context:
space:
mode:
authorRyan Steinmetz <zi@FreeBSD.org>2014-11-07 13:33:38 +0000
committerRyan Steinmetz <zi@FreeBSD.org>2014-11-07 13:33:38 +0000
commitf5fd2da69c27290667cdeb190255f12a9cf88442 (patch)
tree96c1bef58fb5595ef22c9291d0c0de97e8cb9bab /devel/ding-libs
parent7888e65fffb0dd2dbd83e0c0d475af3136e188d5 (diff)
downloadports-f5fd2da69c27290667cdeb190255f12a9cf88442.tar.gz
ports-f5fd2da69c27290667cdeb190255f12a9cf88442.zip
Notes
Diffstat (limited to 'devel/ding-libs')
-rw-r--r--devel/ding-libs/Makefile27
-rw-r--r--devel/ding-libs/files/extra-patch-Makefile.am20
-rw-r--r--devel/ding-libs/files/extra-patch-ini__ini_fileobj.c12
-rw-r--r--devel/ding-libs/files/extra-patch-ini__libini_config.sym11
-rw-r--r--devel/ding-libs/files/flags.c113
-rw-r--r--devel/ding-libs/files/fmemopen.c259
-rw-r--r--devel/ding-libs/files/patch-ini__ini_parse_ut.c10
7 files changed, 447 insertions, 5 deletions
diff --git a/devel/ding-libs/Makefile b/devel/ding-libs/Makefile
index cda2d1a9a2ee..83a1ba9197b1 100644
--- a/devel/ding-libs/Makefile
+++ b/devel/ding-libs/Makefile
@@ -3,6 +3,7 @@
PORTNAME= ding-libs
DISTVERSION= 0.4.0
+PORTREVISION= 1
CATEGORIES= devel
MASTER_SITES= https://fedorahosted.org/released/${PORTNAME}/
@@ -12,9 +13,14 @@ COMMENT= Collection of useful libraries for developers
LICENSE= GPLv3
GNU_CONFIGURE= yes
-CPPFLAGS+= -I${LOCALBASE}/include -L${LOCALBASE}/lib
-USES= gettext libtool pkgconfig
+CPPFLAGS+= -I${LOCALBASE}/include
+LIBS+= -L${LOCALBASE}/lib -liconv -lintl
+
+USE_AUTOTOOLS= libtoolize aclocal autoconf autoheader automake
+AUTOMAKE_ARGS= -a -c -f
+
+USES= iconv gettext libtool pkgconfig
USE_LDCONFIG= yes
INSTALL_TARGET= install-strip
@@ -30,11 +36,22 @@ CONFIGURE_ARGS= --docdir=${DOCSDIR}
CONFIGURE_ARGS= --docdir=/dev/null
.endif
+#fmemopen was commit r246120
+.if ${OSVERSION} < 901502
+EXTRA_PATCHES= ${FILESDIR}/extra-patch-Makefile.am \
+ ${FILESDIR}/extra-patch-ini__libini_config.sym \
+ ${FILESDIR}/extra-patch-ini__ini_fileobj.c
+.endif
+
post-patch:
- @${REINPLACE_CMD} -e 's|libdir)/pkgconfig|prefix)/libdata/pkgconfig|' ${WRKSRC}/Makefile.in
+ @${REINPLACE_CMD} -e 's|libdir)/pkgconfig|prefix)/libdata/pkgconfig|' ${WRKSRC}/Makefile.am
@${REINPLACE_CMD} -e 's|malloc.h|stdlib.h|g' ${WRKSRC}/collection/collection_tools.c \
${WRKSRC}/refarray/ref_array.c
- @${REINPLACE_CMD} -e 's|if git log -1 &>/dev/null; then|if true; then|g' \
- ${WRKSRC}/configure
+ @${REINPLACE_CMD} -e 's|git log -1 &>/dev/null|true|g' \
+ ${WRKSRC}/configure.ac
+.if ${OSVERSION} < 901502
+ @${CP} ${FILESDIR}/fmemopen.c ${WRKSRC}/ini/fmemopen.c
+ @${CP} ${FILESDIR}/flags.c ${WRKSRC}/ini/flags.c
+.endif
.include <bsd.port.mk>
diff --git a/devel/ding-libs/files/extra-patch-Makefile.am b/devel/ding-libs/files/extra-patch-Makefile.am
new file mode 100644
index 000000000000..49904793db62
--- /dev/null
+++ b/devel/ding-libs/files/extra-patch-Makefile.am
@@ -0,0 +1,20 @@
+--- Makefile.am.orig 2014-05-09 20:57:53 UTC
++++ Makefile.am
+@@ -42,7 +42,7 @@
+
+ DOXYGEN = @DOXYGEN@
+
+-pkgconfigdir = $(libdir)/pkgconfig
++pkgconfigdir = $(prefix)/libdata/pkgconfig
+
+ dist_pkgconfig_DATA =
+ dist_doc_DATA =
+@@ -233,6 +233,8 @@
+ dist_include_HEADERS += ini/ini_config.h ini/ini_configobj.h ini/ini_valueobj.h ini/ini_comment.h
+
+ libini_config_la_SOURCES = \
++ ini/flags.c \
++ ini/fmemopen.c \
+ ini/ini_config.c \
+ ini/ini_config.h \
+ ini/ini_get_value.c \
diff --git a/devel/ding-libs/files/extra-patch-ini__ini_fileobj.c b/devel/ding-libs/files/extra-patch-ini__ini_fileobj.c
new file mode 100644
index 000000000000..24d94ee603d7
--- /dev/null
+++ b/devel/ding-libs/files/extra-patch-ini__ini_fileobj.c
@@ -0,0 +1,12 @@
+--- ini/ini_fileobj.c.orig 2014-10-28 15:23:27 UTC
++++ ini/ini_fileobj.c
+@@ -32,6 +32,9 @@
+ #include "ini_config_priv.h"
+ #include "path_utils.h"
+
++extern int __sflags(const char *, int *);
++FILE *fmemopen(void * __restrict, size_t, const char * __restrict);
++
+ #define ICONV_BUFFER 5000
+
+ #define BOM4_SIZE 4
diff --git a/devel/ding-libs/files/extra-patch-ini__libini_config.sym b/devel/ding-libs/files/extra-patch-ini__libini_config.sym
new file mode 100644
index 000000000000..fcdf6342067a
--- /dev/null
+++ b/devel/ding-libs/files/extra-patch-ini__libini_config.sym
@@ -0,0 +1,11 @@
+--- ini/libini_config.sym.orig 2014-10-23 22:57:13 UTC
++++ ini/libini_config.sym
+@@ -1,6 +1,8 @@
+ INI_CONFIG_1.1.0 {
+ global:
+ /* ini_config.h */
++ __sflags;
++ fmemopen;
+ config_from_file;
+ config_from_fd;
+ config_from_file_with_metadata;
diff --git a/devel/ding-libs/files/flags.c b/devel/ding-libs/files/flags.c
new file mode 100644
index 000000000000..dc297803a6ce
--- /dev/null
+++ b/devel/ding-libs/files/flags.c
@@ -0,0 +1,113 @@
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * 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.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)flags.c 8.1 (Berkeley) 6/4/93";
+#endif /* LIBC_SCCS and not lint */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/types.h>
+#include <sys/file.h>
+#include <stdio.h>
+#include <errno.h>
+
+// #include "local.h"
+
+/*
+ * Return the (stdio) flags for a given mode. Store the flags
+ * to be passed to an _open() syscall through *optr.
+ * Return 0 on error.
+ */
+int
+__sflags(const char *mode, int *optr)
+{
+ int ret, m, o, known;
+
+ switch (*mode++) {
+
+ case 'r': /* open for reading */
+ ret = __SRD;
+ m = O_RDONLY;
+ o = 0;
+ break;
+
+ case 'w': /* open for writing */
+ ret = __SWR;
+ m = O_WRONLY;
+ o = O_CREAT | O_TRUNC;
+ break;
+
+ case 'a': /* open for appending */
+ ret = __SWR;
+ m = O_WRONLY;
+ o = O_CREAT | O_APPEND;
+ break;
+
+ default: /* illegal mode */
+ errno = EINVAL;
+ return (0);
+ }
+
+ do {
+ known = 1;
+ switch (*mode++) {
+ case 'b':
+ /* 'b' (binary) is ignored */
+ break;
+ case '+':
+ /* [rwa][b]\+ means read and write */
+ ret = __SRW;
+ m = O_RDWR;
+ break;
+ case 'x':
+ /* 'x' means exclusive (fail if the file exists) */
+ o |= O_EXCL;
+ break;
+ case 'e':
+ /* set close-on-exec */
+ o |= O_CLOEXEC;
+ break;
+ default:
+ known = 0;
+ break;
+ }
+ } while (known);
+
+ if ((o & O_EXCL) != 0 && m == O_RDONLY) {
+ errno = EINVAL;
+ return (0);
+ }
+
+ *optr = m | o;
+ return (ret);
+}
diff --git a/devel/ding-libs/files/fmemopen.c b/devel/ding-libs/files/fmemopen.c
new file mode 100644
index 000000000000..632db6d8d5ca
--- /dev/null
+++ b/devel/ding-libs/files/fmemopen.c
@@ -0,0 +1,259 @@
+/*-
+ * Copyright (C) 2013 Pietro Cerutti <gahr@FreeBSD.org>
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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 <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <fcntl.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+// #include "local.h"
+
+struct fmemopen_cookie
+{
+ char *buf; /* pointer to the memory region */
+ bool own; /* did we allocate the buffer ourselves? */
+ char bin; /* is this a binary buffer? */
+ size_t size; /* buffer length in bytes */
+ size_t len; /* data length in bytes */
+ size_t off; /* current offset into the buffer */
+};
+
+static int fmemopen_read(void *cookie, char *buf, int nbytes);
+static int fmemopen_write(void *cookie, const char *buf, int nbytes);
+static fpos_t fmemopen_seek(void *cookie, fpos_t offset, int whence);
+static int fmemopen_close(void *cookie);
+
+FILE *
+fmemopen(void * __restrict buf, size_t size, const char * __restrict mode)
+{
+ struct fmemopen_cookie *ck;
+ FILE *f;
+ int flags, rc;
+
+ /*
+ * POSIX says we shall return EINVAL if size is 0.
+ */
+ if (size == 0) {
+ errno = EINVAL;
+ return (NULL);
+ }
+
+ /*
+ * Retrieve the flags as used by open(2) from the mode argument, and
+ * validate them.
+ */
+ rc = __sflags(mode, &flags);
+ if (rc == 0) {
+ errno = EINVAL;
+ return (NULL);
+ }
+
+ /*
+ * There's no point in requiring an automatically allocated buffer
+ * in write-only mode.
+ */
+ if (!(flags & O_RDWR) && buf == NULL) {
+ errno = EINVAL;
+ return (NULL);
+ }
+
+ ck = malloc(sizeof(struct fmemopen_cookie));
+ if (ck == NULL) {
+ return (NULL);
+ }
+
+ ck->off = 0;
+ ck->size = size;
+
+ /* Check whether we have to allocate the buffer ourselves. */
+ ck->own = ((ck->buf = buf) == NULL);
+ if (ck->own) {
+ ck->buf = malloc(size);
+ if (ck->buf == NULL) {
+ free(ck);
+ return (NULL);
+ }
+ }
+
+ /*
+ * POSIX distinguishes between w+ and r+, in that w+ is supposed to
+ * truncate the buffer.
+ */
+ if (ck->own || mode[0] == 'w') {
+ ck->buf[0] = '\0';
+ }
+
+ /* Check for binary mode. */
+ ck->bin = strchr(mode, 'b') != NULL;
+
+ /*
+ * The size of the current buffer contents is set depending on the
+ * mode:
+ *
+ * for append (text-mode), the position of the first NULL byte, or the
+ * size of the buffer if none is found
+ *
+ * for append (binary-mode), the size of the buffer
+ *
+ * for read, the size of the buffer
+ *
+ * for write, 0
+ */
+ switch (mode[0]) {
+ case 'a':
+ ck->off = ck->len = strnlen(ck->buf, ck->size);
+ break;
+ case 'r':
+ ck->len = size;
+ break;
+ case 'w':
+ ck->len = 0;
+ break;
+ }
+
+ f = funopen(ck,
+ flags & O_WRONLY ? NULL : fmemopen_read,
+ flags & O_RDONLY ? NULL : fmemopen_write,
+ fmemopen_seek, fmemopen_close);
+
+ if (f == NULL) {
+ if (ck->own)
+ free(ck->buf);
+ free(ck);
+ return (NULL);
+ }
+
+ /*
+ * Turn off buffering, so a write past the end of the buffer
+ * correctly returns a short object count.
+ */
+ setvbuf(f, NULL, _IONBF, 0);
+
+ return (f);
+}
+
+static int
+fmemopen_read(void *cookie, char *buf, int nbytes)
+{
+ struct fmemopen_cookie *ck = cookie;
+
+ if (nbytes > ck->len - ck->off)
+ nbytes = ck->len - ck->off;
+
+ if (nbytes == 0)
+ return (0);
+
+ memcpy(buf, ck->buf + ck->off, nbytes);
+
+ ck->off += nbytes;
+
+ return (nbytes);
+}
+
+static int
+fmemopen_write(void *cookie, const char *buf, int nbytes)
+{
+ struct fmemopen_cookie *ck = cookie;
+
+ if (nbytes > ck->size - ck->off)
+ nbytes = ck->size - ck->off;
+
+ if (nbytes == 0)
+ return (0);
+
+ memcpy(ck->buf + ck->off, buf, nbytes);
+
+ ck->off += nbytes;
+
+ if (ck->off > ck->len)
+ ck->len = ck->off;
+
+ /*
+ * We append a NULL byte if all these conditions are met:
+ * - the buffer is not binary
+ * - the buffer is not full
+ * - the data just written doesn't already end with a NULL byte
+ */
+ if (!ck->bin && ck->off < ck->size && ck->buf[ck->off - 1] != '\0')
+ ck->buf[ck->off] = '\0';
+
+ return (nbytes);
+}
+
+static fpos_t
+fmemopen_seek(void *cookie, fpos_t offset, int whence)
+{
+ struct fmemopen_cookie *ck = cookie;
+
+
+ switch (whence) {
+ case SEEK_SET:
+ if (offset > ck->size) {
+ errno = EINVAL;
+ return (-1);
+ }
+ ck->off = offset;
+ break;
+
+ case SEEK_CUR:
+ if (ck->off + offset > ck->size) {
+ errno = EINVAL;
+ return (-1);
+ }
+ ck->off += offset;
+ break;
+
+ case SEEK_END:
+ if (offset > 0 || -offset > ck->len) {
+ errno = EINVAL;
+ return (-1);
+ }
+ ck->off = ck->len + offset;
+ break;
+
+ default:
+ errno = EINVAL;
+ return (-1);
+ }
+
+ return (ck->off);
+}
+
+static int
+fmemopen_close(void *cookie)
+{
+ struct fmemopen_cookie *ck = cookie;
+
+ if (ck->own)
+ free(ck->buf);
+
+ free(ck);
+
+ return (0);
+}
diff --git a/devel/ding-libs/files/patch-ini__ini_parse_ut.c b/devel/ding-libs/files/patch-ini__ini_parse_ut.c
new file mode 100644
index 000000000000..afb5bf72b35f
--- /dev/null
+++ b/devel/ding-libs/files/patch-ini__ini_parse_ut.c
@@ -0,0 +1,10 @@
+--- ini/ini_parse_ut.c.orig 2014-05-09 20:57:53 UTC
++++ ini/ini_parse_ut.c
+@@ -26,6 +26,7 @@
+ #include <stdlib.h>
+ #include <limits.h>
+ #include <sys/stat.h>
++#include <sys/wait.h>
+ #include "ini_defines.h"
+ #include "ini_configobj.h"
+ #include "ini_config_priv.h"