[vlc-devel] [PATCH] Fix build using old GCC intrinsics
Francois Cartegnie
fcvlcdev at free.fr
Sun Jul 24 12:59:20 CEST 2016
As the 2.2 headers are still using vlc_atomics (picture)
we cannot have a way to avoid collisions with early
or late <atomic> inclusion when using GCC >= 4.7
Conditionals in vlc_atomic won't work.
Happens in ProjectM and Qt5.
---
modules/gui/qt4/actions_manager.cpp | 2 ++
modules/gui/qt4/adapters/seekpoints.cpp | 4 +--
modules/gui/qt4/adapters/seekpoints.hpp | 4 +--
modules/gui/qt4/components/controller.cpp | 2 ++
.../gui/qt4/components/playlist/playlist_model.hpp | 4 +--
modules/gui/qt4/components/playlist/views.cpp | 6 ++++
modules/gui/qt4/dialogs/messages.cpp | 2 ++
modules/gui/qt4/dialogs/vlm.cpp | 4 ---
modules/gui/qt4/dialogs/vlm.hpp | 4 ++-
modules/gui/qt4/input_manager.cpp | 2 ++
modules/gui/qt4/input_manager.hpp | 3 +-
modules/gui/qt4/menus.cpp | 2 ++
modules/gui/qt4/qt4.hpp | 32 ++++++++++++++++++----
modules/gui/qt4/util/pictureflow.cpp | 2 ++
modules/visualization/projectm.cpp | 4 +++
15 files changed, 56 insertions(+), 21 deletions(-)
diff --git a/modules/gui/qt4/actions_manager.cpp b/modules/gui/qt4/actions_manager.cpp
index eff40d9..b7ca967 100644
--- a/modules/gui/qt4/actions_manager.cpp
+++ b/modules/gui/qt4/actions_manager.cpp
@@ -25,6 +25,8 @@
# include "config.h"
#endif
+#include "qt4.hpp"
+
#include <vlc_vout.h>
#include <vlc_keys.h>
diff --git a/modules/gui/qt4/adapters/seekpoints.cpp b/modules/gui/qt4/adapters/seekpoints.cpp
index fbf2957..a3564bb 100644
--- a/modules/gui/qt4/adapters/seekpoints.cpp
+++ b/modules/gui/qt4/adapters/seekpoints.cpp
@@ -19,14 +19,12 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
+#include "seekpoints.hpp"
#include "recents.hpp"
#include "dialogs_provider.hpp"
#include "menus.hpp"
-#include "seekpoints.hpp"
-
-#include "qt4.hpp"
#include "input_manager.hpp"
SeekPoints::SeekPoints( QObject *parent, intf_thread_t *p_intf_ ) :
diff --git a/modules/gui/qt4/adapters/seekpoints.hpp b/modules/gui/qt4/adapters/seekpoints.hpp
index 0083989..bbb9214 100644
--- a/modules/gui/qt4/adapters/seekpoints.hpp
+++ b/modules/gui/qt4/adapters/seekpoints.hpp
@@ -22,9 +22,7 @@
#ifndef SEEKPOINTS_HPP
#define SEEKPOINTS_HPP
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
+#include "qt4.hpp"
#include <vlc_common.h>
#include <vlc_interface.h>
diff --git a/modules/gui/qt4/components/controller.cpp b/modules/gui/qt4/components/controller.cpp
index d93e0db..c43d929 100644
--- a/modules/gui/qt4/components/controller.cpp
+++ b/modules/gui/qt4/components/controller.cpp
@@ -26,6 +26,8 @@
# include "config.h"
#endif
+#include "qt4.hpp"
+
#include <vlc_vout.h> /* vout_thread_t for FSC */
/* Widgets */
diff --git a/modules/gui/qt4/components/playlist/playlist_model.hpp b/modules/gui/qt4/components/playlist/playlist_model.hpp
index f9d1d0c..1f71ac9 100644
--- a/modules/gui/qt4/components/playlist/playlist_model.hpp
+++ b/modules/gui/qt4/components/playlist/playlist_model.hpp
@@ -25,9 +25,7 @@
#ifndef _PLAYLIST_MODEL_H_
#define _PLAYLIST_MODEL_H_
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
+#include "qt4.hpp"
#include <vlc_input.h>
#include <vlc_playlist.h>
diff --git a/modules/gui/qt4/components/playlist/views.cpp b/modules/gui/qt4/components/playlist/views.cpp
index 59f6535..0066205 100644
--- a/modules/gui/qt4/components/playlist/views.cpp
+++ b/modules/gui/qt4/components/playlist/views.cpp
@@ -21,6 +21,12 @@
* 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "qt4.hpp"
+
#include "components/playlist/views.hpp"
#include "components/playlist/vlc_model.hpp" /* VLCModel */
#include "components/playlist/sorting.h" /* Columns List */
diff --git a/modules/gui/qt4/dialogs/messages.cpp b/modules/gui/qt4/dialogs/messages.cpp
index 30793a2..9c79c99 100644
--- a/modules/gui/qt4/dialogs/messages.cpp
+++ b/modules/gui/qt4/dialogs/messages.cpp
@@ -24,6 +24,8 @@
# include "config.h"
#endif
+#include "qt4.hpp"
+
#include "dialogs/messages.hpp"
#include <QPlainTextEdit>
diff --git a/modules/gui/qt4/dialogs/vlm.cpp b/modules/gui/qt4/dialogs/vlm.cpp
index 0da88cc..595f015 100644
--- a/modules/gui/qt4/dialogs/vlm.cpp
+++ b/modules/gui/qt4/dialogs/vlm.cpp
@@ -23,10 +23,6 @@
* Foundation, Inc., 51 Franklin street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
#include "dialogs/vlm.hpp"
#ifdef ENABLE_VLM
diff --git a/modules/gui/qt4/dialogs/vlm.hpp b/modules/gui/qt4/dialogs/vlm.hpp
index a3c6e5d..dcf7110 100644
--- a/modules/gui/qt4/dialogs/vlm.hpp
+++ b/modules/gui/qt4/dialogs/vlm.hpp
@@ -25,8 +25,10 @@
#ifndef QVLC_VLM_DIALOG_H_
#define QVLC_VLM_DIALOG_H_ 1
+#include "qt4.hpp"
+
#ifdef HAVE_CONFIG_H
-# include "config.h"
+#include "config.h"
#endif
#ifdef ENABLE_VLM
diff --git a/modules/gui/qt4/input_manager.cpp b/modules/gui/qt4/input_manager.cpp
index fd45f4a..c50cb6c 100644
--- a/modules/gui/qt4/input_manager.cpp
+++ b/modules/gui/qt4/input_manager.cpp
@@ -30,6 +30,8 @@
# include "config.h"
#endif
+#include "qt4.hpp"
+
#include "input_manager.hpp"
#include "recents.hpp"
diff --git a/modules/gui/qt4/input_manager.hpp b/modules/gui/qt4/input_manager.hpp
index 7d3b76a..4fbecbb 100644
--- a/modules/gui/qt4/input_manager.hpp
+++ b/modules/gui/qt4/input_manager.hpp
@@ -29,9 +29,10 @@
# include "config.h"
#endif
+#include "qt4.hpp"
+
#include <vlc_input.h>
-#include "qt4.hpp"
#include "util/singleton.hpp"
#include "adapters/variables.hpp"
diff --git a/modules/gui/qt4/menus.cpp b/modules/gui/qt4/menus.cpp
index 116e98c..46240b0 100644
--- a/modules/gui/qt4/menus.cpp
+++ b/modules/gui/qt4/menus.cpp
@@ -34,6 +34,8 @@
# include "config.h"
#endif
+#include "qt4.hpp"
+
#include <vlc_common.h>
#include <vlc_intf_strings.h>
#include <vlc_vout.h> /* vout_thread_t */
diff --git a/modules/gui/qt4/qt4.hpp b/modules/gui/qt4/qt4.hpp
index 44d7db6..5aec957 100644
--- a/modules/gui/qt4/qt4.hpp
+++ b/modules/gui/qt4/qt4.hpp
@@ -29,12 +29,7 @@
# include "config.h"
#endif
-#include <vlc_common.h> /* VLC_COMMON_MEMBERS for vlc_interface.h */
-#include <vlc_interface.h> /* intf_thread_t */
-#include <vlc_playlist.h> /* playlist_t */
-
-#define QT_NO_CAST_TO_ASCII
-#include <QString>
+#include <QtGlobal>
#if ( QT_VERSION < 0x040600 )
# error Update your Qt version to at least 4.6.0
@@ -43,6 +38,31 @@
#define HAS_QT47 ( QT_VERSION >= 0x040700 )
#define HAS_QT5 ( QT_VERSION >= 0x050000 )
+#if HAS_QT5
+ #include <QtCore/qcompilerdetection.h>
+ #if defined(Q_COMPILER_ATOMICS) && \
+ ( __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7 ) )
+ #define VLC_ATOMIC_H
+ #include <atomic>
+ using namespace std;
+ # define atomic_store(object,desired) \
+ do { \
+ *(object) = (desired); \
+ __sync_synchronize(); \
+ } while (0)
+
+ # define atomic_load(object) \
+ (__sync_synchronize(), *(object))
+ #endif
+#endif
+
+#include <vlc_common.h> /* VLC_COMMON_MEMBERS for vlc_interface.h */
+#include <vlc_interface.h> /* intf_thread_t */
+#include <vlc_playlist.h> /* playlist_t */
+
+#define QT_NO_CAST_TO_ASCII
+#include <QString>
+
enum {
DialogEventTypeOffset = 0,
IMEventTypeOffset = 100,
diff --git a/modules/gui/qt4/util/pictureflow.cpp b/modules/gui/qt4/util/pictureflow.cpp
index 9318953..a7e6a01 100644
--- a/modules/gui/qt4/util/pictureflow.cpp
+++ b/modules/gui/qt4/util/pictureflow.cpp
@@ -29,6 +29,8 @@
THE SOFTWARE.
*/
+#include "qt4.hpp"
+
#include "pictureflow.hpp"
#include <QApplication>
diff --git a/modules/visualization/projectm.cpp b/modules/visualization/projectm.cpp
index e80fbf4..96d532d 100644
--- a/modules/visualization/projectm.cpp
+++ b/modules/visualization/projectm.cpp
@@ -30,6 +30,10 @@
#endif
#include <assert.h>
+#if defined(__GNUC__) && \
+ ( __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7 ) )
+ #define VLC_ATOMIC_H /* Ensure C atomics wont collide with old intrinsics */
+#endif
#include <vlc_common.h>
#include <vlc_plugin.h>
--
2.7.4
More information about the vlc-devel
mailing list