From 4285293a316aeb17fc53a9954efe800a142ef141 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Mon, 14 Sep 2015 17:23:32 +0800 Subject: lldap: fix the building failure when gcc5 is used or DEBUG_BUILD is 1 1. fix the building failure when host is gcc5 2. fix the building failure when DEBUG_BUILD is 1 by removal of -Werror Remove -Werror, since it is suitable to develop only; otherwise when gcc adds -O0 option to compile codes, the error will be generated since the warning: //# warning _FORTIFY_SOURCE requires compiling with optimization (-O) Signed-off-by: Roy Li Signed-off-by: Martin Jansa Signed-off-by: Joe MacDonald --- ...-functions-work-with-both-gnu11-and-gnu89.patch | 99 ++++++++++++++++++++++ .../recipes-daemons/lldpad/lldpad_0.9.46.bb | 8 +- 2 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 meta-networking/recipes-daemons/lldpad/lldpad/0001-get-inline-functions-work-with-both-gnu11-and-gnu89.patch (limited to 'meta-networking') diff --git a/meta-networking/recipes-daemons/lldpad/lldpad/0001-get-inline-functions-work-with-both-gnu11-and-gnu89.patch b/meta-networking/recipes-daemons/lldpad/lldpad/0001-get-inline-functions-work-with-both-gnu11-and-gnu89.patch new file mode 100644 index 0000000000..9ff7c0f8fb --- /dev/null +++ b/meta-networking/recipes-daemons/lldpad/lldpad/0001-get-inline-functions-work-with-both-gnu11-and-gnu89.patch @@ -0,0 +1,99 @@ +From 67399dcc2575c0e9c64fc77354f9653127cddf64 Mon Sep 17 00:00:00 2001 +From: Roy Li +Date: Mon, 14 Sep 2015 17:07:26 +0800 +Subject: [PATCH] get inline functions work with both gnu11 and gnu89 + +Upstream-status: Pending + +After gcc upgraded to gcc5, and if the codes are compiled without optimization(-O0), +and the below error will happen: + +./include/lldp_8021qaz.h:237:12: error: inline function 'ieee8021qaz_clif_cmd' declared but never defined [-Werror] + inline int ieee8021qaz_clif_cmd(void *data, struct sockaddr_un *from, + ^ +./include/lldp_8021qaz.h:222:13: error: inline function 'set_prio_map' declared but never defined [-Werror] + inline void set_prio_map(u32 *prio_map, u8 prio, int tc); + ^ +./include/lldp_8021qaz.h:221:12: error: inline function 'get_prio_map' declared but never defined [-Werror] + inline int get_prio_map(u32 prio_map, int tc); + +gcc5 defaults to -std=gnu11 instead of -std=gnu89, and it requires that exactly one C +source file has the callable copy of the inline function. Consider the following +program: + + inline int + foo (void) + { + return 42; + } + + int + main (void) + { + return foo (); + } + +The program above will not link with the C99 inline semantics, because no out-of-line +function foo is generated. To fix this, either mark the function foo as static, or +add the following declaration: + static inline int foo (void); + +more information refer to: https://gcc.gnu.org/gcc-5/porting_to.html; + +but the use of "extern inline" will lead to the compilation issue if gcc is not +gcc5, so replace inline with "static inline" + +Signed-off-by: Roy Li +--- + include/lldp_8021qaz.h | 5 ----- + lldp_8021qaz.c | 4 ++-- + 2 files changed, 2 insertions(+), 7 deletions(-) + +diff --git a/include/lldp_8021qaz.h b/include/lldp_8021qaz.h +index 55353b8..d321625 100644 +--- a/include/lldp_8021qaz.h ++++ b/include/lldp_8021qaz.h +@@ -218,8 +218,6 @@ int ieee8021qaz_mod_app(struct app_tlv_head *head, int peer, + u8 prio, u8 sel, u16 proto, u32 ops); + int ieee8021qaz_app_sethw(char *ifname, struct app_tlv_head *head); + +-inline int get_prio_map(u32 prio_map, int tc); +-inline void set_prio_map(u32 *prio_map, u8 prio, int tc); + + struct ieee8021qaz_tlvs *ieee8021qaz_data(const char *); + +@@ -234,9 +232,6 @@ int ieee8021qaz_rchange(struct port *port, struct lldp_agent *, + void ieee8021qaz_ifup(char *ifname, struct lldp_agent *); + void ieee8021qaz_ifdown(char *ifname, struct lldp_agent *); + u8 ieee8021qaz_mibDeleteObject(struct port *port, struct lldp_agent *); +-inline int ieee8021qaz_clif_cmd(void *data, struct sockaddr_un *from, +- socklen_t fromlen, char *ibuf, int ilen, +- char *rbuf); + int ieee8021qaz_check_operstate(void); + int get_dcbx_hw(const char *ifname, __u8 *dcbx); + +diff --git a/lldp_8021qaz.c b/lldp_8021qaz.c +index 094676d..f154317 100644 +--- a/lldp_8021qaz.c ++++ b/lldp_8021qaz.c +@@ -396,7 +396,7 @@ static int read_cfg_file(char *ifname, struct lldp_agent *agent, + return 0; + } + +-inline int get_prio_map(u32 prio_map, int prio) ++static inline int get_prio_map(u32 prio_map, int prio) + { + if (prio > 7) + return 0; +@@ -404,7 +404,7 @@ inline int get_prio_map(u32 prio_map, int prio) + return (prio_map >> (4 * (7-prio))) & 0xF; + } + +-inline void set_prio_map(u32 *prio_map, u8 prio, int tc) ++static inline void set_prio_map(u32 *prio_map, u8 prio, int tc) + { + u32 mask = ~(0xffffffff & (0xF << (4 * (7-prio)))); + *prio_map &= mask; +-- +1.9.1 + diff --git a/meta-networking/recipes-daemons/lldpad/lldpad_0.9.46.bb b/meta-networking/recipes-daemons/lldpad/lldpad_0.9.46.bb index 8c44a3e5c4..0c8c5d852e 100644 --- a/meta-networking/recipes-daemons/lldpad/lldpad_0.9.46.bb +++ b/meta-networking/recipes-daemons/lldpad/lldpad_0.9.46.bb @@ -8,12 +8,18 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=8c2bc283e65df398ced5f5b747e78162" DEPENDS = "libconfig libnl" SRCREV = "48a5f38778b18d6659a672ccb4640f25c6720827" -SRC_URI = "git://github.com/jrfastab/lldpad.git;protocol=http" +SRC_URI = "git://github.com/jrfastab/lldpad.git;protocol=http \ + file://0001-get-inline-functions-work-with-both-gnu11-and-gnu89.patch \ +" S = "${WORKDIR}/git" inherit autotools-brokensep pkgconfig systemd +do_configure_prepend() { + sed -i "s:-Werror::g" ${S}/Makefile.am +} + do_install_append () { install -m 0755 -d ${D}${systemd_unitdir} mv ${D}${prefix}${systemd_unitdir}/* ${D}${systemd_unitdir}/ -- cgit 1.2.3-korg