summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Cernekee <cernekee@chromium.org>2017-01-18 00:01:48 -0600
committerMike Frysinger <vapier@gentoo.org>2017-01-18 00:13:03 -0600
commit30e1bfc4e3a887c19cd0abe4e07fe271721ff8a2 (patch)
treea7fd79d87934a838b3f0537d967b75c241bd7e32
parentnet-libs/libnetfilter_cttimeout: add upstream fix for building under clang (diff)
downloadgentoo-30e1bfc4e3a887c19cd0abe4e07fe271721ff8a2.tar.gz
gentoo-30e1bfc4e3a887c19cd0abe4e07fe271721ff8a2.tar.bz2
gentoo-30e1bfc4e3a887c19cd0abe4e07fe271721ff8a2.zip
net-libs/libnetfilter_cthelper: add upstream fix for building under clang
Also switch to using subslots w/libmnl.
-rw-r--r--net-libs/libnetfilter_cthelper/files/libnetfilter_cthelper-1.0.0-clang-export.patch387
-rw-r--r--net-libs/libnetfilter_cthelper/libnetfilter_cthelper-1.0.0-r1.ebuild30
2 files changed, 417 insertions, 0 deletions
diff --git a/net-libs/libnetfilter_cthelper/files/libnetfilter_cthelper-1.0.0-clang-export.patch b/net-libs/libnetfilter_cthelper/files/libnetfilter_cthelper-1.0.0-clang-export.patch
new file mode 100644
index 000000000000..4958bcd6ac39
--- /dev/null
+++ b/net-libs/libnetfilter_cthelper/files/libnetfilter_cthelper-1.0.0-clang-export.patch
@@ -0,0 +1,387 @@
+fix from upstream
+
+From f58c5b09fb59baf07c942d373fc4d522b27e73c6 Mon Sep 17 00:00:00 2001
+From: Kevin Cernekee <cernekee@chromium.org>
+Date: Wed, 4 Jan 2017 14:30:26 -0800
+Subject: [PATCH] Use __EXPORTED rather than EXPORT_SYMBOL
+
+clang is sensitive to the ordering of
+__attribute__((visibility("default"))) relative to the function
+body. gcc is not. So if we try to re-declare an existing function
+with default visibility, clang prints a warning and generates
+a broken .so file in which nfct_helper_* are not exported to library
+callers.
+
+Move the attribute up into the function definition to make clang happy.
+
+Signed-off-by: Kevin Cernekee <cernekee@chromium.org>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+ doxygen.cfg.in | 2 +-
+ src/internal.h | 5 ++-
+ src/libnetfilter_cthelper.c | 83 ++++++++++++++++++---------------------------
+ 3 files changed, 36 insertions(+), 54 deletions(-)
+
+diff --git a/doxygen.cfg.in b/doxygen.cfg.in
+index cac9b0510b4d..190b7cd6e716 100644
+--- a/doxygen.cfg.in
++++ b/doxygen.cfg.in
+@@ -72,7 +72,7 @@ RECURSIVE = YES
+ EXCLUDE =
+ EXCLUDE_SYMLINKS = NO
+ EXCLUDE_PATTERNS = */.git/* .*.d
+-EXCLUDE_SYMBOLS = EXPORT_SYMBOL
++EXCLUDE_SYMBOLS =
+ EXAMPLE_PATH =
+ EXAMPLE_PATTERNS =
+ EXAMPLE_RECURSIVE = NO
+diff --git a/src/internal.h b/src/internal.h
+index 3a88d1a1f7d8..5d781718ddad 100644
+--- a/src/internal.h
++++ b/src/internal.h
+@@ -3,10 +3,9 @@
+
+ #include "config.h"
+ #ifdef HAVE_VISIBILITY_HIDDEN
+-# define __visible __attribute__((visibility("default")))
+-# define EXPORT_SYMBOL(x) typeof(x) (x) __visible
++# define __EXPORTED __attribute__((visibility("default")))
+ #else
+-# define EXPORT_SYMBOL
++# define __EXPORTED
+ #endif
+
+ #endif
+diff --git a/src/libnetfilter_cthelper.c b/src/libnetfilter_cthelper.c
+index f8f58e6c9c5e..af543a17fafa 100644
+--- a/src/libnetfilter_cthelper.c
++++ b/src/libnetfilter_cthelper.c
+@@ -99,17 +99,16 @@ struct nfct_helper {
+ * In case of success, this function returns a valid pointer, otherwise NULL
+ * s returned and errno is appropriately set.
+ */
+-struct nfct_helper *nfct_helper_alloc(void)
++struct nfct_helper __EXPORTED *nfct_helper_alloc(void)
+ {
+ return calloc(1, sizeof(struct nfct_helper));
+ }
+-EXPORT_SYMBOL(nfct_helper_alloc);
+
+ /**
+ * nfct_helper_free - release one helper object
+ * \param nfct_helper pointer to the helper object
+ */
+-void nfct_helper_free(struct nfct_helper *h)
++void __EXPORTED nfct_helper_free(struct nfct_helper *h)
+ {
+ int i;
+
+@@ -119,7 +118,6 @@ void nfct_helper_free(struct nfct_helper *h)
+ }
+ free(h);
+ }
+-EXPORT_SYMBOL(nfct_helper_free);
+
+ /**
+ * nfct_helper_policy_alloc - allocate a new helper policy object
+@@ -127,21 +125,19 @@ EXPORT_SYMBOL(nfct_helper_free);
+ * In case of success, this function returns a valid pointer, otherwise NULL
+ * s returned and errno is appropriately set.
+ */
+-struct nfct_helper_policy *nfct_helper_policy_alloc(void)
++struct nfct_helper_policy __EXPORTED *nfct_helper_policy_alloc(void)
+ {
+ return calloc(1, sizeof(struct nfct_helper_policy));
+ }
+-EXPORT_SYMBOL(nfct_helper_policy_alloc);
+
+ /**
+ * nfct_helper_free - release one helper policy object
+ * \param nfct_helper pointer to the helper object
+ */
+-void nfct_helper_policy_free(struct nfct_helper_policy *p)
++void __EXPORTED nfct_helper_policy_free(struct nfct_helper_policy *p)
+ {
+ free(p);
+ }
+-EXPORT_SYMBOL(nfct_helper_policy_free);
+
+ /**
+ * nfct_helper_policy_attr_set - set one attribute of the helper object
+@@ -149,7 +145,7 @@ EXPORT_SYMBOL(nfct_helper_policy_free);
+ * \param type attribute type you want to set
+ * \param data pointer to data that will be used to set this attribute
+ */
+-void
++void __EXPORTED
+ nfct_helper_policy_attr_set(struct nfct_helper_policy *p,
+ enum nfct_helper_policy_attr_type type,
+ const void *data)
+@@ -170,7 +166,6 @@ nfct_helper_policy_attr_set(struct nfct_helper_policy *p,
+ break;
+ }
+ }
+-EXPORT_SYMBOL(nfct_helper_policy_attr_set);
+
+ /**
+ * nfct_helper_attr_set_str - set one attribute the helper object
+@@ -178,23 +173,21 @@ EXPORT_SYMBOL(nfct_helper_policy_attr_set);
+ * \param type attribute type you want to set
+ * \param name string that will be used to set this attribute
+ */
+-void
++void __EXPORTED
+ nfct_helper_policy_attr_set_str(struct nfct_helper_policy *p,
+ enum nfct_helper_policy_attr_type type,
+ const char *name)
+ {
+ nfct_helper_policy_attr_set(p, type, name);
+ }
+-EXPORT_SYMBOL(nfct_helper_policy_attr_set_str);
+
+-void
++void __EXPORTED
+ nfct_helper_policy_attr_set_u32(struct nfct_helper_policy *p,
+ enum nfct_helper_policy_attr_type type,
+ uint32_t value)
+ {
+ nfct_helper_policy_attr_set(p, type, &value);
+ }
+-EXPORT_SYMBOL(nfct_helper_policy_attr_set_u32);
+
+ /**
+ * nfct_helper_attr_set - set one attribute of the helper object
+@@ -202,7 +195,7 @@ EXPORT_SYMBOL(nfct_helper_policy_attr_set_u32);
+ * \param type attribute type you want to set
+ * \param data pointer to data that will be used to set this attribute
+ */
+-void
++void __EXPORTED
+ nfct_helper_attr_set(struct nfct_helper *h,
+ enum nfct_helper_attr_type type, const void *data)
+ {
+@@ -250,7 +243,6 @@ nfct_helper_attr_set(struct nfct_helper *h,
+ break;
+ }
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_set);
+
+ /**
+ * nfct_helper_attr_set_str - set one attribute the helper object
+@@ -258,44 +250,40 @@ EXPORT_SYMBOL(nfct_helper_attr_set);
+ * \param type attribute type you want to set
+ * \param name string that will be used to set this attribute
+ */
+-void
++void __EXPORTED
+ nfct_helper_attr_set_str(struct nfct_helper *nfct_helper, enum nfct_helper_attr_type type,
+ const char *name)
+ {
+ nfct_helper_attr_set(nfct_helper, type, name);
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_set_str);
+
+-void
++void __EXPORTED
+ nfct_helper_attr_set_u8(struct nfct_helper *nfct_helper,
+ enum nfct_helper_attr_type type, uint8_t value)
+ {
+ nfct_helper_attr_set(nfct_helper, type, &value);
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_set_u8);
+
+-void
++void __EXPORTED
+ nfct_helper_attr_set_u16(struct nfct_helper *nfct_helper,
+ enum nfct_helper_attr_type type, uint16_t value)
+ {
+ nfct_helper_attr_set(nfct_helper, type, &value);
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_set_u16);
+
+-void
++void __EXPORTED
+ nfct_helper_attr_set_u32(struct nfct_helper *nfct_helper,
+ enum nfct_helper_attr_type type, uint32_t value)
+ {
+ nfct_helper_attr_set(nfct_helper, type, &value);
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_set_u32);
+
+ /**
+ * nfct_helper_attr_unset - unset one attribute the helper object
+ * \param nfct_helper pointer to the helper object
+ * \param type attribute type you want to set
+ */
+-void
++void __EXPORTED
+ nfct_helper_attr_unset(struct nfct_helper *nfct_helper, enum nfct_helper_attr_type type)
+ {
+ switch(type) {
+@@ -307,7 +295,6 @@ nfct_helper_attr_unset(struct nfct_helper *nfct_helper, enum nfct_helper_attr_ty
+ break;
+ }
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_unset);
+
+ /**
+ * nfct_helper_attr_get - get one attribute the helper object
+@@ -317,8 +304,9 @@ EXPORT_SYMBOL(nfct_helper_attr_unset);
+ * This function returns a valid pointer to the attribute data. If a
+ * unsupported attribute is used, this returns NULL.
+ */
+-const void *nfct_helper_attr_get(struct nfct_helper *helper,
+- enum nfct_helper_attr_type type)
++const void __EXPORTED *
++nfct_helper_attr_get(struct nfct_helper *helper,
++ enum nfct_helper_attr_type type)
+ {
+ const void *ret = NULL;
+
+@@ -358,7 +346,6 @@ const void *nfct_helper_attr_get(struct nfct_helper *helper,
+ }
+ return ret;
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_get);
+
+ /**
+ * nfct_helper_attr_get_str - get one attribute the helper object
+@@ -368,13 +355,12 @@ EXPORT_SYMBOL(nfct_helper_attr_get);
+ * This function returns a valid pointer to the beginning of the string.
+ * If the attribute is unsupported, this returns NULL.
+ */
+-const char *
++const char __EXPORTED *
+ nfct_helper_attr_get_str(struct nfct_helper *nfct_helper,
+ enum nfct_helper_attr_type type)
+ {
+ return (const char *)nfct_helper_attr_get(nfct_helper, type);
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_get_str);
+
+ /**
+ * nfct_helper_attr_get_u8 - get one attribute the helper object
+@@ -384,12 +370,12 @@ EXPORT_SYMBOL(nfct_helper_attr_get_str);
+ * This function returns a unsigned 8-bits integer. If the attribute is
+ * unsupported, this returns NULL.
+ */
+-uint8_t nfct_helper_attr_get_u8(struct nfct_helper *nfct_helper,
+- enum nfct_helper_attr_type type)
++uint8_t __EXPORTED
++nfct_helper_attr_get_u8(struct nfct_helper *nfct_helper,
++ enum nfct_helper_attr_type type)
+ {
+ return *((uint8_t *)nfct_helper_attr_get(nfct_helper, type));
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_get_u8);
+
+ /**
+ * nfct_helper_attr_get_u16 - get one attribute the helper object
+@@ -399,12 +385,12 @@ EXPORT_SYMBOL(nfct_helper_attr_get_u8);
+ * This function returns a unsigned 16-bits integer. If the attribute is
+ * unsupported, this returns NULL.
+ */
+-uint16_t nfct_helper_attr_get_u16(struct nfct_helper *nfct_helper,
+- enum nfct_helper_attr_type type)
++uint16_t __EXPORTED
++nfct_helper_attr_get_u16(struct nfct_helper *nfct_helper,
++ enum nfct_helper_attr_type type)
+ {
+ return *((uint16_t *)nfct_helper_attr_get(nfct_helper, type));
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_get_u16);
+
+ /**
+ * nfct_helper_attr_get_u32 - get one attribute the helper object
+@@ -414,12 +400,12 @@ EXPORT_SYMBOL(nfct_helper_attr_get_u16);
+ * This function returns a unsigned 32-bits integer. If the attribute is
+ * unsupported, this returns NULL.
+ */
+-uint32_t nfct_helper_attr_get_u32(struct nfct_helper *nfct_helper,
+- enum nfct_helper_attr_type type)
++uint32_t __EXPORTED
++nfct_helper_attr_get_u32(struct nfct_helper *nfct_helper,
++ enum nfct_helper_attr_type type)
+ {
+ return *((uint32_t *)nfct_helper_attr_get(nfct_helper, type));
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_get_u32);
+
+ /**
+ * nfct_helper_snprintf - print helper object into one buffer
+@@ -431,9 +417,10 @@ EXPORT_SYMBOL(nfct_helper_attr_get_u32);
+ * This function returns -1 in case that some mandatory attributes are
+ * missing. On sucess, it returns 0.
+ */
+-int nfct_helper_snprintf(char *buf, size_t size,
+- struct nfct_helper *helper,
+- unsigned int type, unsigned int flags)
++int __EXPORTED
++nfct_helper_snprintf(char *buf, size_t size,
++ struct nfct_helper *helper,
++ unsigned int type, unsigned int flags)
+ {
+ int ret;
+
+@@ -454,7 +441,6 @@ int nfct_helper_snprintf(char *buf, size_t size,
+
+ return ret;
+ }
+-EXPORT_SYMBOL(nfct_helper_snprintf);
+
+ /**
+ * @}
+@@ -490,7 +476,7 @@ EXPORT_SYMBOL(nfct_helper_snprintf);
+ * - Command NFNL_MSG_ACCT_DEL, to delete one specific nfct_helper object (if
+ * unused, otherwise you hit EBUSY).
+ */
+-struct nlmsghdr *
++struct nlmsghdr __EXPORTED *
+ nfct_helper_nlmsg_build_hdr(char *buf, uint8_t cmd,
+ uint16_t flags, uint32_t seq)
+ {
+@@ -509,7 +495,6 @@ nfct_helper_nlmsg_build_hdr(char *buf, uint8_t cmd,
+
+ return nlh;
+ }
+-EXPORT_SYMBOL(nfct_helper_nlmsg_build_hdr);
+
+ static void
+ nfct_helper_nlmsg_build_policy(struct nlmsghdr *nlh,
+@@ -530,7 +515,7 @@ nfct_helper_nlmsg_build_policy(struct nlmsghdr *nlh,
+ * \param nlh: netlink message that you want to use to add the payload.
+ * \param nfct_helper: pointer to a helper object
+ */
+-void
++void __EXPORTED
+ nfct_helper_nlmsg_build_payload(struct nlmsghdr *nlh, struct nfct_helper *h)
+ {
+ struct nlattr *nest;
+@@ -593,7 +578,6 @@ nfct_helper_nlmsg_build_payload(struct nlmsghdr *nlh, struct nfct_helper *h)
+ if (h->bitset & (1 << NFCTH_ATTR_STATUS))
+ mnl_attr_put_u32(nlh, NFCTH_STATUS, ntohl(h->status));
+ }
+-EXPORT_SYMBOL(nfct_helper_nlmsg_build_payload);
+
+ static int
+ nfct_helper_nlmsg_parse_tuple_cb(const struct nlattr *attr, void *data)
+@@ -795,7 +779,7 @@ nfct_helper_nlmsg_parse_attr_cb(const struct nlattr *attr, void *data)
+ * This function returns -1 in case that some mandatory attributes are
+ * missing. On sucess, it returns 0.
+ */
+-int
++int __EXPORTED
+ nfct_helper_nlmsg_parse_payload(const struct nlmsghdr *nlh,
+ struct nfct_helper *h)
+ {
+@@ -832,7 +816,6 @@ nfct_helper_nlmsg_parse_payload(const struct nlmsghdr *nlh,
+ }
+ return 0;
+ }
+-EXPORT_SYMBOL(nfct_helper_nlmsg_parse_payload);
+
+ /**
+ * @}
+--
+2.11.0
+
diff --git a/net-libs/libnetfilter_cthelper/libnetfilter_cthelper-1.0.0-r1.ebuild b/net-libs/libnetfilter_cthelper/libnetfilter_cthelper-1.0.0-r1.ebuild
new file mode 100644
index 000000000000..7705783c1687
--- /dev/null
+++ b/net-libs/libnetfilter_cthelper/libnetfilter_cthelper-1.0.0-r1.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="5"
+
+inherit linux-info autotools-utils
+
+DESCRIPTION="userspace library that provides the programming interface to the user-space helper infrastructure"
+HOMEPAGE="http://www.netfilter.org/projects/libnetfilter_cthelper"
+SRC_URI="http://www.netfilter.org/projects/${PN}/files/${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~x86"
+IUSE="static-libs"
+
+RDEPEND="net-libs/libmnl:="
+DEPEND="${RDEPEND}
+ virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-clang-export.patch
+)
+
+CONFIG_CHECK="~NF_CT_NETLINK_HELPER"
+
+pkg_setup() {
+ linux-info_pkg_setup
+ kernel_is lt 3 6 0 && ewarn "requires at least 3.6.0 kernel version"
+}