Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Nov 2014 13:33:39 +0000 (UTC)
From:      Ryan Steinmetz <zi@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r372261 - in head/devel/ding-libs: . files
Message-ID:  <201411071333.sA7DXdtR038743@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: zi
Date: Fri Nov  7 13:33:38 2014
New Revision: 372261
URL: https://svnweb.freebsd.org/changeset/ports/372261
QAT: https://qat.redports.org/buildarchive/r372261/

Log:
  - Resolve build problems on systems without fmemopen()
  
  PR:		194116
  Submitted by:	aweits@rit.edu (maintainer)

Added:
  head/devel/ding-libs/files/
  head/devel/ding-libs/files/extra-patch-Makefile.am   (contents, props changed)
  head/devel/ding-libs/files/extra-patch-ini__ini_fileobj.c   (contents, props changed)
  head/devel/ding-libs/files/extra-patch-ini__libini_config.sym   (contents, props changed)
  head/devel/ding-libs/files/flags.c   (contents, props changed)
  head/devel/ding-libs/files/fmemopen.c   (contents, props changed)
  head/devel/ding-libs/files/patch-ini__ini_parse_ut.c   (contents, props changed)
Modified:
  head/devel/ding-libs/Makefile

Modified: head/devel/ding-libs/Makefile
==============================================================================
--- head/devel/ding-libs/Makefile	Fri Nov  7 13:03:09 2014	(r372260)
+++ head/devel/ding-libs/Makefile	Fri Nov  7 13:33:38 2014	(r372261)
@@ -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 
 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>

Added: head/devel/ding-libs/files/extra-patch-Makefile.am
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/ding-libs/files/extra-patch-Makefile.am	Fri Nov  7 13:33:38 2014	(r372261)
@@ -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 \

Added: head/devel/ding-libs/files/extra-patch-ini__ini_fileobj.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/ding-libs/files/extra-patch-ini__ini_fileobj.c	Fri Nov  7 13:33:38 2014	(r372261)
@@ -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

Added: head/devel/ding-libs/files/extra-patch-ini__libini_config.sym
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/ding-libs/files/extra-patch-ini__libini_config.sym	Fri Nov  7 13:33:38 2014	(r372261)
@@ -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;

Added: head/devel/ding-libs/files/flags.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/ding-libs/files/flags.c	Fri Nov  7 13:33:38 2014	(r372261)
@@ -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);
+}

Added: head/devel/ding-libs/files/fmemopen.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/ding-libs/files/fmemopen.c	Fri Nov  7 13:33:38 2014	(r372261)
@@ -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);
+}

Added: head/devel/ding-libs/files/patch-ini__ini_parse_ut.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/ding-libs/files/patch-ini__ini_parse_ut.c	Fri Nov  7 13:33:38 2014	(r372261)
@@ -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"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201411071333.sA7DXdtR038743>