[sems] Fix building w/o built-in atomic gcc functions
Peter Lemenkov
peter at fedoraproject.org
Wed Sep 29 09:45:26 UTC 2010
commit a72b3dc2dc5ffd0379c3ed1d5f3f8f58ae5372ec
Author: Peter Lemenkov <lemenkov at gmail.com>
Date: Wed Sep 29 13:45:20 2010 +0400
Fix building w/o built-in atomic gcc functions
Signed-off-by: Peter Lemenkov <lemenkov at gmail.com>
...001-Force-to-use-system-wide-GSM-includes.patch | 2 +-
...llow-rewrite-of-custom-makefiles-by-CMake.patch | 2 +-
...Set-CFG_PREFIX-to-empty-string-by-default.patch | 2 +-
...ql-in-conference-and-early_announce-modul.patch | 2 +-
...aid_sip-plugin-to-default-exclude-list-du.patch | 2 +-
sems-0006-More-cmake-templates.patch | 2 +-
sems-0007-Enable-py_sems-building-with-CMake.patch | 2 +-
sems-0008-Enable-sst_b2b-building-with-sems.patch | 2 +-
...chitectures-w-o-atomic-built-in-functions.patch | 179 ++++++++++++++++++++
sems.spec | 10 +-
10 files changed, 196 insertions(+), 9 deletions(-)
---
diff --git a/sems-0001-Force-to-use-system-wide-GSM-includes.patch b/sems-0001-Force-to-use-system-wide-GSM-includes.patch
index df3fae0..121c702 100644
--- a/sems-0001-Force-to-use-system-wide-GSM-includes.patch
+++ b/sems-0001-Force-to-use-system-wide-GSM-includes.patch
@@ -1,7 +1,7 @@
From f40d07c03612e51bbd0d3330535d8ebc365b506c Mon Sep 17 00:00:00 2001
From: Peter Lemenkov <lemenkov at gmail.com>
Date: Wed, 31 Mar 2010 11:52:52 +0400
-Subject: [PATCH 1/8] Force to use system-wide GSM includes
+Subject: [PATCH 1/9] Force to use system-wide GSM includes
Signed-off-by: Peter Lemenkov <lemenkov at gmail.com>
---
diff --git a/sems-0002-Allow-rewrite-of-custom-makefiles-by-CMake.patch b/sems-0002-Allow-rewrite-of-custom-makefiles-by-CMake.patch
index 7da8a9e..11074ac 100644
--- a/sems-0002-Allow-rewrite-of-custom-makefiles-by-CMake.patch
+++ b/sems-0002-Allow-rewrite-of-custom-makefiles-by-CMake.patch
@@ -1,7 +1,7 @@
From c53a56b9667ea821281e14ed763d4db49e256c71 Mon Sep 17 00:00:00 2001
From: Peter Lemenkov <lemenkov at gmail.com>
Date: Wed, 31 Mar 2010 11:53:48 +0400
-Subject: [PATCH 2/8] Allow rewrite of custom makefiles by CMake
+Subject: [PATCH 2/9] Allow rewrite of custom makefiles by CMake
Signed-off-by: Peter Lemenkov <lemenkov at gmail.com>
---
diff --git a/sems-0003-Set-CFG_PREFIX-to-empty-string-by-default.patch b/sems-0003-Set-CFG_PREFIX-to-empty-string-by-default.patch
index 6da11a1..2246d42 100644
--- a/sems-0003-Set-CFG_PREFIX-to-empty-string-by-default.patch
+++ b/sems-0003-Set-CFG_PREFIX-to-empty-string-by-default.patch
@@ -1,7 +1,7 @@
From f240f4b7cf5701ce93b812e4be77428d9514fb28 Mon Sep 17 00:00:00 2001
From: Peter Lemenkov <lemenkov at gmail.com>
Date: Wed, 31 Mar 2010 18:56:39 +0400
-Subject: [PATCH 3/8] Set CFG_PREFIX to empty string by default
+Subject: [PATCH 3/9] Set CFG_PREFIX to empty string by default
Signed-off-by: Peter Lemenkov <lemenkov at gmail.com>
---
diff --git a/sems-0004-Disable-mysql-in-conference-and-early_announce-modul.patch b/sems-0004-Disable-mysql-in-conference-and-early_announce-modul.patch
index 01027c0..9b02fac 100644
--- a/sems-0004-Disable-mysql-in-conference-and-early_announce-modul.patch
+++ b/sems-0004-Disable-mysql-in-conference-and-early_announce-modul.patch
@@ -1,7 +1,7 @@
From 460b5e654e5789b75a3514d1de9b658f0245a62e Mon Sep 17 00:00:00 2001
From: Peter Lemenkov <lemenkov at gmail.com>
Date: Fri, 25 Jun 2010 12:16:45 +0400
-Subject: [PATCH 4/8] Disable mysql++ in conference and early_announce modules
+Subject: [PATCH 4/9] Disable mysql++ in conference and early_announce modules
Unfortunately, this breaks existing configurations, which is a
no-go situation for EPEL repository. We'll enable it later.
diff --git a/sems-0005-Add-sw_prepaid_sip-plugin-to-default-exclude-list-du.patch b/sems-0005-Add-sw_prepaid_sip-plugin-to-default-exclude-list-du.patch
index 5bb333d..ca22757 100644
--- a/sems-0005-Add-sw_prepaid_sip-plugin-to-default-exclude-list-du.patch
+++ b/sems-0005-Add-sw_prepaid_sip-plugin-to-default-exclude-list-du.patch
@@ -1,7 +1,7 @@
From 18a743c479753fca2dd561cebea0317ce3de6871 Mon Sep 17 00:00:00 2001
From: Peter Lemenkov <lemenkov at gmail.com>
Date: Mon, 27 Sep 2010 14:13:00 +0400
-Subject: [PATCH 5/8] Add sw_prepaid_sip plugin to default exclude list (due to missing cc_acc)
+Subject: [PATCH 5/9] Add sw_prepaid_sip plugin to default exclude list (due to missing cc_acc)
Signed-off-by: Peter Lemenkov <lemenkov at gmail.com>
---
diff --git a/sems-0006-More-cmake-templates.patch b/sems-0006-More-cmake-templates.patch
index 4046250..36250ed 100644
--- a/sems-0006-More-cmake-templates.patch
+++ b/sems-0006-More-cmake-templates.patch
@@ -1,7 +1,7 @@
From 67543e5578c9ef136444afa32acf625a744ad1fb Mon Sep 17 00:00:00 2001
From: Peter Lemenkov <lemenkov at gmail.com>
Date: Mon, 27 Sep 2010 15:38:10 +0400
-Subject: [PATCH 6/8] More cmake templates
+Subject: [PATCH 6/9] More cmake templates
Signed-off-by: Peter Lemenkov <lemenkov at gmail.com>
---
diff --git a/sems-0007-Enable-py_sems-building-with-CMake.patch b/sems-0007-Enable-py_sems-building-with-CMake.patch
index ffb901a..1f5323f 100644
--- a/sems-0007-Enable-py_sems-building-with-CMake.patch
+++ b/sems-0007-Enable-py_sems-building-with-CMake.patch
@@ -1,7 +1,7 @@
From d85e44d59f5d4cfc250d4298f33eefc5338cedf9 Mon Sep 17 00:00:00 2001
From: Peter Lemenkov <lemenkov at gmail.com>
Date: Mon, 27 Sep 2010 16:41:18 +0400
-Subject: [PATCH 7/8] Enable py_sems building with CMake
+Subject: [PATCH 7/9] Enable py_sems building with CMake
Signed-off-by: Peter Lemenkov <lemenkov at gmail.com>
---
diff --git a/sems-0008-Enable-sst_b2b-building-with-sems.patch b/sems-0008-Enable-sst_b2b-building-with-sems.patch
index c6d42c8..e8e4c8b 100644
--- a/sems-0008-Enable-sst_b2b-building-with-sems.patch
+++ b/sems-0008-Enable-sst_b2b-building-with-sems.patch
@@ -1,7 +1,7 @@
From cd759bad822ee3d3680875714a118883bd033364 Mon Sep 17 00:00:00 2001
From: Peter Lemenkov <lemenkov at gmail.com>
Date: Mon, 27 Sep 2010 16:41:59 +0400
-Subject: [PATCH 8/8] Enable sst_b2b building with sems
+Subject: [PATCH 8/9] Enable sst_b2b building with sems
Signed-off-by: Peter Lemenkov <lemenkov at gmail.com>
---
diff --git a/sems-0009-Fix-for-architectures-w-o-atomic-built-in-functions.patch b/sems-0009-Fix-for-architectures-w-o-atomic-built-in-functions.patch
new file mode 100644
index 0000000..14620bc
--- /dev/null
+++ b/sems-0009-Fix-for-architectures-w-o-atomic-built-in-functions.patch
@@ -0,0 +1,179 @@
+From bbc545dc10a89bf828fe3a18d786261785c47c46 Mon Sep 17 00:00:00 2001
+From: Peter Lemenkov <lemenkov at gmail.com>
+Date: Wed, 29 Sep 2010 11:42:29 +0400
+Subject: [PATCH 9/9] Fix for architectures w/o atomic built-in functions
+
+---
+ core/atomic_types.h | 113 ++++++++++++++++++++++++++++++++++++++++++++------
+ 1 files changed, 99 insertions(+), 14 deletions(-)
+
+diff --git a/core/atomic_types.h b/core/atomic_types.h
+index 4075eb4..474f169 100644
+--- a/core/atomic_types.h
++++ b/core/atomic_types.h
+@@ -1,31 +1,49 @@
+ #ifndef _atomic_types_h_
+ #define _atomic_types_h_
+
+-#if defined(__GNUC__)
+-# if defined(__GNUC_PATCHLEVEL__)
+-# define __GNUC_VERSION__ (__GNUC__ * 10000 \
+- + __GNUC_MINOR__ * 100 \
+- + __GNUC_PATCHLEVEL__)
+-# else
+-# define __GNUC_VERSION__ (__GNUC__ * 10000 \
+- + __GNUC_MINOR__ * 100)
+-# endif
++#if (__GNUC__ > 4) || \
++ (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) && \
++ ( \
++ (defined(__APPLE__) && \
++ ( \
++ defined(__ppc__) || \
++ defined(__i386__) || \
++ defined(__x86_64__) \
++ ) \
++ ) || \
++ (defined(__linux__) && \
++ ( \
++ (defined(__i386__) && (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8))) || \
++ defined(__ia64__) || \
++ defined(__x86_64__) || \
++ (defined(__powerpc__) && !defined(__powerpc64__)) || \
++ defined(__alpha) \
++ ) \
++ ) \
++ )
++#define HAVE_ATOMIC_CAS 1
+ #else
+-#error Unsupported compiler
+-#endif
+-
+-#if __GNUC_VERSION__ < 40101
+-#error GCC version >= 4.1.1 is required for proper atomic operations
++#warning Compare and Swap is not supported on this architecture
++#define HAVE_ATOMIC_CAS 0
+ #endif
+
+ #include <assert.h>
+ #include "log.h"
+
++#if !HAVE_ATOMIC_CAS
++#include "AmThread.h"
++#endif
++
++
+ // 32 bit unsigned integer
+ class atomic_int
++#if !HAVE_ATOMIC_CAS
++ : protected AmMutex
++#endif
+ {
+ volatile unsigned int i;
+
++
+ public:
+ atomic_int() : i(0) {}
+
+@@ -37,6 +55,7 @@ public:
+ return i;
+ }
+
++#if HAVE_ATOMIC_CAS
+ // ++i;
+ unsigned int inc() {
+ return __sync_add_and_fetch(&i,1);
+@@ -46,6 +65,25 @@ public:
+ unsigned int dec() {
+ return __sync_sub_and_fetch(&i,1);
+ }
++#else // if HAVE_ATOMIC_CAS
++ // ++i;
++ unsigned int inc() {
++ unsigned int res;
++ lock();
++ res = ++i;
++ unlock();
++ return res;
++ }
++
++ // --i;
++ unsigned int dec() {
++ unsigned int res;
++ lock();
++ res = --i;
++ unlock();
++ return res;
++ }
++#endif
+
+ // return --ll != 0;
+ bool dec_and_test() {
+@@ -55,10 +93,14 @@ public:
+
+ // 64 bit unsigned integer
+ class atomic_int64
++#if !HAVE_ATOMIC_CAS
++ : protected AmMutex
++#endif
+ {
+ volatile unsigned long long ll;
+
+ public:
++#if HAVE_ATOMIC_CAS
+ void set(unsigned long long val) {
+ #if !defined(__LP64__) || !__LP64__
+ unsigned long long tmp_ll;
+@@ -95,6 +137,49 @@ public:
+ return __sync_sub_and_fetch(&ll,1);
+ }
+
++#else // if HAVE_ATOMIC_CAS
++
++ void set(unsigned long long val) {
++#if !defined(__LP64__) || !__LP64__
++ this->lock();
++ ll = val;
++ unlock();
++#else
++ ll = val;
++#endif
++ }
++
++ unsigned long long get() {
++#if !defined(__LP64__) || !__LP64__
++ unsigned long long tmp_ll;
++ lock();
++ tmp_ll = ll;
++ unlock();
++ return tmp_ll;
++#else
++ return ll;
++#endif
++ }
++
++ // returns ++ll;
++ unsigned long long inc() {
++ unsigned long long res;
++ lock();
++ res = ++ll;
++ unlock();
++ return res;
++ }
++
++ // returns --ll;
++ unsigned long long dec() {
++ unsigned long long res;
++ lock();
++ res = --ll;
++ unlock();
++ return res;
++ }
++#endif
++
+ // return --ll == 0;
+ bool dec_and_test() {
+ return dec() == 0;
+--
+1.7.2.3
+
diff --git a/sems.spec b/sems.spec
index 1421981..2a9b48e 100644
--- a/sems.spec
+++ b/sems.spec
@@ -1,7 +1,7 @@
Summary: SIP Express Media Server, an extensible SIP media server
Name: sems
Version: 1.3.0
-Release: 1%{?dist}
+Release: 2%{?dist}
URL: http://www.iptel.org/sems
## wget http://ftp.iptel.org/pub/sems/sems-1.3.0.tar.gz
## tar zx --exclude iLBC_rfc3951 -f sems-1.3.0..tar.gz
@@ -26,6 +26,8 @@ Patch6: sems-0006-More-cmake-templates.patch
Patch7: sems-0007-Enable-py_sems-building-with-CMake.patch
# Will be proposed for inclusion in upstream
Patch8: sems-0008-Enable-sst_b2b-building-with-sems.patch
+# Will be proposed for inclusion into upstream
+Patch9: sems-0009-Fix-for-architectures-w-o-atomic-built-in-functions.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: python >= 2.3
@@ -199,6 +201,9 @@ rm -rf core/plug-in/gsm/gsm-1.0-pl10/
%patch6 -p1 -b .more_cmake
%patch7 -p1 -b .enable_py_sems
%patch8 -p1 -b .enable_sst_b2b
+%if 0%{?el5}
+%patch9 -p1 -b .no_atomic
+%endif
iconv -f iso8859-1 -t UTF-8 doc/Readme.diameter_client.txt > doc/Readme.diameter_client.utf8 && mv doc/Readme.diameter_client.{utf8,txt}
@@ -601,6 +606,9 @@ fi
%{_libdir}/%{name}/plug-in/xmlrpc2di.so
%changelog
+* Wed Sep 29 2010 Peter Lemenkov <lemenkov at gmail.com> 1.3.0-2
+- Workaround for missing atomic built-ins in EPEL5 old gcc
+
* Mon Sep 27 2010 Peter Lemenkov <lemenkov at gmail.com> 1.3.0-1
- Ver. 1.3.0
- Dropped half of all patches
More information about the scm-commits
mailing list