Hoernchen has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libgtpnl/+/37929?usp=email )


Change subject: fix clang build
......................................................................

fix clang build

Clang needs the configure patch that exists in most of our repos +
visibility, because clang says warning: attribute declaration must
precede definition [-Wignored-attributes] and the .so has no exports.

Change-Id: I345579a8ea989c5a21797a17f34629472fbd3525
---
M configure.ac
M src/genl.c
M src/gtp-genl.c
M src/gtp-rtnl.c
M src/gtp.c
5 files changed, 41 insertions(+), 35 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libgtpnl refs/changes/29/37929/1

diff --git a/configure.ac b/configure.ac
index 1628bc8..90e4dce 100644
--- a/configure.ac
+++ b/configure.ac
@@ -35,6 +35,12 @@
 AC_EXEEXT
 AC_DISABLE_STATIC
 LT_INIT
+
+dnl patching ${archive_cmds} to affect generation of file "libtool" to fix 
linking with clang
+AS_CASE(["$LD"],[*clang*],
+  [AS_CASE(["${host_os}"],
+     [*linux*],[archive_cmds='$CC -shared $pic_flag $libobjs $deplibs 
$compiler_flags $wl-soname $wl$soname -o $lib'])])
+
 CHECK_GCC_FVISIBILITY
 case "$host" in
 *-*-linux* | *-*-uclinux*) ;;
diff --git a/src/genl.c b/src/genl.c
index 5d8b9af..572bed9 100644
--- a/src/genl.c
+++ b/src/genl.c
@@ -32,6 +32,7 @@

 #include "internal.h"

+EXPORT_SYMBOL(genl_nlmsg_build_hdr);
 struct nlmsghdr *
 genl_nlmsg_build_hdr(char *buf, uint16_t type, uint16_t flags, uint32_t seq,
                     uint8_t cmd)
@@ -50,7 +51,6 @@

        return nlh;
 }
-EXPORT_SYMBOL(genl_nlmsg_build_hdr);

 static int genl_ctrl_validate_cb(const struct nlattr *attr, void *data)
 {
@@ -87,6 +87,7 @@
        return MNL_CB_OK;
 }

+EXPORT_SYMBOL(genl_socket_open);
 struct mnl_socket *genl_socket_open(void)
 {
        struct mnl_socket *nl;
@@ -104,14 +105,14 @@

        return nl;
 }
-EXPORT_SYMBOL(genl_socket_open);

+EXPORT_SYMBOL(genl_socket_close);
 void genl_socket_close(struct mnl_socket *nl)
 {
        mnl_socket_close(nl);
 }
-EXPORT_SYMBOL(genl_socket_close);

+EXPORT_SYMBOL(genl_socket_talk);
 int genl_socket_talk(struct mnl_socket *nl, struct nlmsghdr *nlh, uint32_t seq,
                     int (*cb)(const struct nlmsghdr *nlh, void *data),
                     void *data)
@@ -135,7 +136,6 @@

        return ret;
 }
-EXPORT_SYMBOL(genl_socket_talk);

 static struct nlmsghdr *
 genl_nlmsg_build_lookup(char *buf, const char *subsys_name)
@@ -158,6 +158,7 @@
        return nlh;
 }

+EXPORT_SYMBOL(genl_lookup_family);
 int genl_lookup_family(struct mnl_socket *nl, const char *family)
 {
        int32_t genl_id;
@@ -171,4 +172,3 @@
 
        return genl_id;
 }
-EXPORT_SYMBOL(genl_lookup_family);
diff --git a/src/gtp-genl.c b/src/gtp-genl.c
index 33a78d8..ef8dfc0 100644
--- a/src/gtp-genl.c
+++ b/src/gtp-genl.c
@@ -96,6 +96,7 @@
        }
 }

+EXPORT_SYMBOL(gtp_add_tunnel);
 int gtp_add_tunnel(int genl_id, struct mnl_socket *nl, struct gtp_tunnel *t)
 {
        struct nlmsghdr *nlh;
@@ -119,8 +120,8 @@

        return 0;
 }
-EXPORT_SYMBOL(gtp_add_tunnel);

+EXPORT_SYMBOL(gtp_del_tunnel);
 int gtp_del_tunnel(int genl_id, struct mnl_socket *nl, struct gtp_tunnel *t)
 {
        char buf[MNL_SOCKET_BUFFER_SIZE];
@@ -138,7 +139,6 @@

        return 0;
 }
-EXPORT_SYMBOL(gtp_del_tunnel);

 struct gtp_pdp {
        uint32_t        ifidx;
@@ -270,6 +270,7 @@
        return MNL_CB_OK;
 }

+EXPORT_SYMBOL(gtp_list_tunnel);
 int gtp_list_tunnel(int genl_id, struct mnl_socket *nl)
 {
        char buf[MNL_SOCKET_BUFFER_SIZE];
@@ -286,4 +287,3 @@

        return 0;
 }
-EXPORT_SYMBOL(gtp_list_tunnel);
diff --git a/src/gtp-rtnl.c b/src/gtp-rtnl.c
index 1dfd125..6baa5a6 100644
--- a/src/gtp-rtnl.c
+++ b/src/gtp-rtnl.c
@@ -138,18 +138,19 @@
        return gtp_dev_talk(nlh, seq);
 }

+EXPORT_SYMBOL(gtp_dev_create);
 int gtp_dev_create(int dest_ns, const char *gtp_ifname, int fd0, int fd1)
 {
        return _gtp_dev_create(dest_ns, gtp_ifname, fd0, fd1, GTP_ROLE_GGSN);
 }
-EXPORT_SYMBOL(gtp_dev_create);

+EXPORT_SYMBOL(gtp_dev_create_sgsn);
 int gtp_dev_create_sgsn(int dest_ns, const char *gtp_ifname, int fd0, int fd1)
 {
        return _gtp_dev_create(dest_ns, gtp_ifname, fd0, fd1, GTP_ROLE_SGSN);
 }
-EXPORT_SYMBOL(gtp_dev_create_sgsn);

+EXPORT_SYMBOL(gtp_dev_destroy);
 int gtp_dev_destroy(const char *gtp_ifname)
 {
        char buf[MNL_SOCKET_BUFFER_SIZE];
@@ -166,8 +167,8 @@

        return gtp_dev_talk(nlh, seq);
 }
-EXPORT_SYMBOL(gtp_dev_destroy);

+EXPORT_SYMBOL(gtp_dev_config);
 int gtp_dev_config(const char *ifname, struct in_addr *dst, uint32_t prefix)
 {
        struct mnl_socket *nl;
@@ -211,4 +212,3 @@

        return ret;
 }
-EXPORT_SYMBOL(gtp_dev_config);
diff --git a/src/gtp.c b/src/gtp.c
index af216f7..8f12b5d 100644
--- a/src/gtp.c
+++ b/src/gtp.c
@@ -27,6 +27,7 @@

 #include "internal.h"

+EXPORT_SYMBOL(gtp_tunnel_alloc);
 struct gtp_tunnel *gtp_tunnel_alloc(void)
 {
        struct gtp_tunnel *t;
@@ -38,152 +39,151 @@
        t->ifns = -1;
        return t;
 }
-EXPORT_SYMBOL(gtp_tunnel_alloc);

+EXPORT_SYMBOL(gtp_tunnel_free);
 void gtp_tunnel_free(struct gtp_tunnel *t)
 {
        free(t);
 }
-EXPORT_SYMBOL(gtp_tunnel_free);

+EXPORT_SYMBOL(gtp_tunnel_set_ifns);
 void gtp_tunnel_set_ifns(struct gtp_tunnel *t, int ifns)
 {
        t->ifns = ifns;
        t->flags |= GTP_TUN_IFNS;
 }
-EXPORT_SYMBOL(gtp_tunnel_set_ifns);

+EXPORT_SYMBOL(gtp_tunnel_set_ifidx);
 void gtp_tunnel_set_ifidx(struct gtp_tunnel *t, uint32_t ifidx)
 {
        t->ifidx = ifidx;
        t->flags |= GTP_TUN_IFIDX;
 }
-EXPORT_SYMBOL(gtp_tunnel_set_ifidx);

+EXPORT_SYMBOL(gtp_tunnel_set_family);
 void gtp_tunnel_set_family(struct gtp_tunnel *t, uint16_t family)
 {
        t->ms_addr.family = family;
        t->flags |= GTP_TUN_FAMILY;
 }
-EXPORT_SYMBOL(gtp_tunnel_set_family);

+EXPORT_SYMBOL(gtp_tunnel_set_ms_ip4);
 void gtp_tunnel_set_ms_ip4(struct gtp_tunnel *t, struct in_addr *ms_addr)
 {
        t->ms_addr.family = AF_INET;
        t->ms_addr.ip4 = *ms_addr;
        t->flags |= GTP_TUN_FAMILY | GTP_TUN_MS_ADDR;
 }
-EXPORT_SYMBOL(gtp_tunnel_set_ms_ip4);

+EXPORT_SYMBOL(gtp_tunnel_set_sgsn_ip4);
 void gtp_tunnel_set_sgsn_ip4(struct gtp_tunnel *t, struct in_addr *sgsn_addr)
 {
        t->sgsn_addr.family = AF_INET;
        t->sgsn_addr.ip4 = *sgsn_addr;
        t->flags |= GTP_TUN_SGSN_ADDR;
 }
-EXPORT_SYMBOL(gtp_tunnel_set_sgsn_ip4);

+EXPORT_SYMBOL(gtp_tunnel_set_ms_ip6);
 void gtp_tunnel_set_ms_ip6(struct gtp_tunnel *t, const struct in6_addr 
*ms_addr)
 {
        t->ms_addr.family = AF_INET6;
        t->ms_addr.ip6 = *ms_addr;
        t->flags |= GTP_TUN_FAMILY | GTP_TUN_MS_ADDR;
 }
-EXPORT_SYMBOL(gtp_tunnel_set_ms_ip6);

+EXPORT_SYMBOL(gtp_tunnel_set_sgsn_ip6);
 void gtp_tunnel_set_sgsn_ip6(struct gtp_tunnel *t, const struct in6_addr 
*sgsn_addr)
 {
        t->sgsn_addr.family = AF_INET6;
        t->sgsn_addr.ip6 = *sgsn_addr;
        t->flags |= GTP_TUN_SGSN_ADDR;
 }
-EXPORT_SYMBOL(gtp_tunnel_set_sgsn_ip6);

+EXPORT_SYMBOL(gtp_tunnel_set_version);
 void gtp_tunnel_set_version(struct gtp_tunnel *t, uint32_t version)
 {
        t->gtp_version = version;
        t->flags |= GTP_TUN_VERSION;
 }
-EXPORT_SYMBOL(gtp_tunnel_set_version);

+EXPORT_SYMBOL(gtp_tunnel_set_tid);
 void gtp_tunnel_set_tid(struct gtp_tunnel *t, uint64_t tid)
 {
        t->u.v0.tid = tid;
        t->flags |= GTP_TUN_V0_TID;
 }
-EXPORT_SYMBOL(gtp_tunnel_set_tid);

+EXPORT_SYMBOL(gtp_tunnel_set_flowid);
 void gtp_tunnel_set_flowid(struct gtp_tunnel *t, uint16_t flowid)
 {
        t->u.v0.flowid = flowid;
        t->flags |= GTP_TUN_V0_FLOWID;
 }
-EXPORT_SYMBOL(gtp_tunnel_set_flowid);

+EXPORT_SYMBOL(gtp_tunnel_set_i_tei);
 void gtp_tunnel_set_i_tei(struct gtp_tunnel *t, uint32_t i_tei)
 {
        t->u.v1.i_tei = i_tei;
        t->flags |= GTP_TUN_V1_I_TEI;
 }
-EXPORT_SYMBOL(gtp_tunnel_set_i_tei);

+EXPORT_SYMBOL(gtp_tunnel_set_o_tei);
 void gtp_tunnel_set_o_tei(struct gtp_tunnel *t, uint32_t o_tei)
 {
        t->u.v1.o_tei = o_tei;
        t->flags |= GTP_TUN_V1_O_TEI;
 }
-EXPORT_SYMBOL(gtp_tunnel_set_o_tei);

+EXPORT_SYMBOL(gtp_tunnel_get_ifns);
 const int gtp_tunnel_get_ifns(struct gtp_tunnel *t)
 {
        return t->ifns;
 }
-EXPORT_SYMBOL(gtp_tunnel_get_ifns);

+EXPORT_SYMBOL(gtp_tunnel_get_ifidx);
 const uint32_t gtp_tunnel_get_ifidx(struct gtp_tunnel *t)
 {
        return t->ifidx;
 }
-EXPORT_SYMBOL(gtp_tunnel_get_ifidx);

+EXPORT_SYMBOL(gtp_tunnel_get_ms_ip4);
 const struct in_addr *gtp_tunnel_get_ms_ip4(struct gtp_tunnel *t)
 {
        return &t->ms_addr.ip4;
 }
-EXPORT_SYMBOL(gtp_tunnel_get_ms_ip4);

+EXPORT_SYMBOL(gtp_tunnel_get_sgsn_ip4);
 const struct in_addr *gtp_tunnel_get_sgsn_ip4(struct gtp_tunnel *t)
 {
        return &t->sgsn_addr.ip4;
 }
-EXPORT_SYMBOL(gtp_tunnel_get_sgsn_ip4);

+EXPORT_SYMBOL(gtp_tunnel_get_version);
 int gtp_tunnel_get_version(struct gtp_tunnel *t)
 {
        return t->gtp_version;
 }
-EXPORT_SYMBOL(gtp_tunnel_get_version);

+EXPORT_SYMBOL(gtp_tunnel_get_tid);
 uint64_t gtp_tunnel_get_tid(struct gtp_tunnel *t)
 {
        return t->u.v0.tid;
 }
-EXPORT_SYMBOL(gtp_tunnel_get_tid);

+EXPORT_SYMBOL(gtp_tunnel_get_flowid);
 uint16_t gtp_tunnel_get_flowid(struct gtp_tunnel *t)
 {
        return t->u.v0.flowid;
 }
-EXPORT_SYMBOL(gtp_tunnel_get_flowid);

+EXPORT_SYMBOL(gtp_tunnel_get_i_tei);
 uint32_t gtp_tunnel_get_i_tei(struct gtp_tunnel *t)
 {
        return t->u.v1.i_tei;
 }
-EXPORT_SYMBOL(gtp_tunnel_get_i_tei);

+EXPORT_SYMBOL(gtp_tunnel_get_o_tei);
 uint32_t gtp_tunnel_get_o_tei(struct gtp_tunnel *t)
 {
        return t->u.v1.o_tei;
 }
-EXPORT_SYMBOL(gtp_tunnel_get_o_tei);

--
To view, visit https://gerrit.osmocom.org/c/libgtpnl/+/37929?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: libgtpnl
Gerrit-Branch: master
Gerrit-Change-Id: I345579a8ea989c5a21797a17f34629472fbd3525
Gerrit-Change-Number: 37929
Gerrit-PatchSet: 1
Gerrit-Owner: Hoernchen <[email protected]>

Reply via email to