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>