From a87a88ca73a45a5b7b838c89cf39212e014d920a Mon Sep 17 00:00:00 2001 From: wang_yue111 <648774160@qq.com> Date: Sat, 7 Aug 2021 15:13:43 +0800 Subject: [PATCH] fix build error with gcc 10 --- ...tiple-definition-of-attributes-error.patch | 34 ++++++++++ ...ultiple-definition-of-rsc_list-error.patch | 65 +++++++++++++++++++ pacemaker.spec | 9 ++- 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 fix-multiple-definition-of-attributes-error.patch create mode 100644 fix-multiple-definition-of-rsc_list-error.patch diff --git a/fix-multiple-definition-of-attributes-error.patch b/fix-multiple-definition-of-attributes-error.patch new file mode 100644 index 0000000..7f47dbe --- /dev/null +++ b/fix-multiple-definition-of-attributes-error.patch @@ -0,0 +1,34 @@ +From 77a79358cc72174cbba0dd44e313f6d06d96dbf4 Mon Sep 17 00:00:00 2001 +From: Ken Gaillot +Date: Thu, 2 Jan 2020 09:51:52 -0600 +Subject: [PATCH] Refactor: attrd: properly declare global variables as extern in header + +Restores buildability with GCC 10 +--- + daemons/attrd/pacemaker-attrd.h | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/daemons/attrd/pacemaker-attrd.h b/daemons/attrd/pacemaker-attrd.h +index cc8e29ee1e..7b5ba03388 100644 +--- a/daemons/attrd/pacemaker-attrd.h ++++ b/daemons/attrd/pacemaker-attrd.h +@@ -1,5 +1,7 @@ + /* +- * Copyright 2013-2018 Andrew Beekhof ++ * Copyright 2013-2020 the Pacemaker project contributors ++ * ++ * The version control history for this file may have further details. + * + * This source code is licensed under the GNU General Public License version 2 + * or later (GPLv2+) WITHOUT ANY WARRANTY. +@@ -106,8 +108,8 @@ typedef struct attribute_value_s { + gboolean seen; + } attribute_value_t; + +-crm_cluster_t *attrd_cluster; +-GHashTable *attributes; ++extern crm_cluster_t *attrd_cluster; ++extern GHashTable *attributes; + + #define attrd_send_ack(client, id, flags) \ + crm_ipcs_send_ack((client), (id), (flags), "ack", __FUNCTION__, __LINE__) diff --git a/fix-multiple-definition-of-rsc_list-error.patch b/fix-multiple-definition-of-rsc_list-error.patch new file mode 100644 index 0000000..02590a7 --- /dev/null +++ b/fix-multiple-definition-of-rsc_list-error.patch @@ -0,0 +1,65 @@ +From 2f2bd2f0236a311feb162d5e2a320b9b8d8ceb5b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= +Date: Tue, 21 Jan 2020 18:24:44 +0100 +Subject: [PATCH] Build: get ready for implicit -fno-common with upcoming GCC + 10 + +Currently, -fno-common yields (and only yields, slightly restructured): + +> /usr/bin/ld: +> pacemaker_execd-execd_commands.o: +> pcmk/daemons/execd/pacemaker-execd.h:23: +> multiple definition of `rsc_list'; +> + pacemaker_execd-pacemaker-execd.o: +> pcmk/daemons/execd/pacemaker-execd.h:23: +> first defined here +> +> pacemaker_execd-execd_alerts.o: +> pcmk/daemons/execd/pacemaker-execd.h:23: +> multiple definition of `rsc_list'; +> + pacemaker_execd-pacemaker-execd.o: +> pcmk/daemons/execd/pacemaker-execd.h:23: +> first defined here +> +> collect2: error: ld returned 1 exit status + +The problem is that a global (with external linkage) variable without +explicit "extern" stands for "tentative definition" (as opposed to mere +reference to existing object with external linkage otherwise), +and these won't get automagically merged in -fno-common case (which +is going to be a default in upcoming GCC 10). + +Solution is to explicitly add "extern" storage-class specifiers +at what's indeed meant as non-tentative reference in the header +files that are going to be included from various translation +units that will end up in the same link. + +No more attempts at finding these was performed, just the only instance +that got hit in practice (see above) receives this treatment, since +manual work simply doesn't scale. Either a static analysis can be +employed to mark other potential show-stoppers, or we'll just deal +with the issues on case-by-case basis (with the gargantuan assistence +of CI systems). + +References: +https://gcc.gnu.org/gcc-10/porting_to.html#common +--- + daemons/execd/pacemaker-execd.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/daemons/execd/pacemaker-execd.h b/daemons/execd/pacemaker-execd.h +index 4a52d91..dab3ccd 100644 +--- a/daemons/execd/pacemaker-execd.h ++++ b/daemons/execd/pacemaker-execd.h +@@ -20,7 +20,7 @@ + # include + # endif + +-GHashTable *rsc_list; ++extern GHashTable *rsc_list; + + typedef struct lrmd_rsc_s { + char *rsc_id; +-- +2.23.0 + diff --git a/pacemaker.spec b/pacemaker.spec index 0f22b99..4d85a7d 100644 --- a/pacemaker.spec +++ b/pacemaker.spec @@ -14,7 +14,7 @@ ## can be incremented to build packages reliably considered "newer" ## than previously built packages with the same pcmkversion) %global pcmkversion 2.0.3 -%global specversion 2 +%global specversion 3 ## Upstream commit (or git tag, such as "Pacemaker-" plus the ## {pcmkversion} macro for an official release) to use for this package @@ -131,6 +131,8 @@ Source1: https://github.com/%{github_owner}/%{nagios_name}/archive/%{nagio # --- Patch0: Build-fix-unability-to-build-with-Inkscape-1.0-beta-.patch Patch1: Resolve-the-failure-of-time-matching-in-test-cases.patch +Patch2: fix-multiple-definition-of-attributes-error.patch +Patch3: fix-multiple-definition-of-rsc_list-error.patch Requires: resource-agents Requires: %{name}-libs%{?_isa} = %{version}-%{release} @@ -339,6 +341,8 @@ monitor resources. %__scm_setup_git %patch0 -p1 %patch1 -p1 +%patch2 -p1 +%patch3 -p1 %build @@ -701,6 +705,9 @@ exit 0 %license %{nagios_name}-%{nagios_hash}/COPYING %changelog +* Sat Aug 07 2021 wangyue - 2.0.3-3 +- fix build error with gcc 10 + * Tue Mar 23 2021 jiangxinyu - 2.0.3-2 - Add 'Resolve-the-failure-of-time-matching-in-test-cases.patch' file 2.0.3-2 -- Gitee