summaryrefslogtreecommitdiff
path: root/subprojects
diff options
context:
space:
mode:
authorZebediah Figura <z.figura12@gmail.com>2021-03-24 14:20:18 -0500
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>2022-09-13 15:48:52 +0000
commitc4681ac428fa4b63a2c9ce18bb3da4cddc14e439 (patch)
tree1599b315cf89202ef8adca46976306b00ca7af0c /subprojects
parent9bb560e7ee9d39480302fe62efdcd77592191df6 (diff)
meson: Build with -Wl,-z,nodelete to prevent unloading of dynamic libraries and plugins
GLib made the unfortunate decision to prevent libgobject from ever being unloaded, which means that now any library which registers a static type can't ever be unloaded either (and any library that depends on those, ad nauseam). Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/778>
Diffstat (limited to 'subprojects')
-rw-r--r--subprojects/gst-devtools/meson.build6
-rw-r--r--subprojects/gst-editing-services/meson.build6
-rw-r--r--subprojects/gst-libav/meson.build6
-rw-r--r--subprojects/gst-omx/meson.build6
-rw-r--r--subprojects/gst-plugins-bad/meson.build9
-rw-r--r--subprojects/gst-plugins-base/meson.build6
-rw-r--r--subprojects/gst-plugins-good/meson.build19
-rw-r--r--subprojects/gst-plugins-ugly/meson.build9
-rw-r--r--subprojects/gst-rtsp-server/meson.build6
-rw-r--r--subprojects/gstreamer/meson.build6
10 files changed, 75 insertions, 4 deletions
diff --git a/subprojects/gst-devtools/meson.build b/subprojects/gst-devtools/meson.build
index 513daff440..fc7205e8d7 100644
--- a/subprojects/gst-devtools/meson.build
+++ b/subprojects/gst-devtools/meson.build
@@ -63,6 +63,12 @@ else
noseh_link_args = []
endif
+# glib doesn't support unloading, which means that unloading and reloading
+# any library that registers static types will fail
+if cc.has_link_argument('-Wl,-z,nodelete')
+ add_project_link_arguments('-Wl,-z,nodelete', language: 'c')
+endif
+
# Symbol visibility
if cc.has_argument('-fvisibility=hidden')
add_project_arguments('-fvisibility=hidden', language: 'c')
diff --git a/subprojects/gst-editing-services/meson.build b/subprojects/gst-editing-services/meson.build
index e45541c812..b035dacb90 100644
--- a/subprojects/gst-editing-services/meson.build
+++ b/subprojects/gst-editing-services/meson.build
@@ -67,6 +67,12 @@ if cc.has_link_argument('-Wl,-Bsymbolic-functions')
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
endif
+# glib doesn't support unloading, which means that unloading and reloading
+# any library that registers static types will fail
+if cc.has_link_argument('-Wl,-z,nodelete')
+ add_project_link_arguments('-Wl,-z,nodelete', language: 'c')
+endif
+
# Symbol visibility
if cc.get_id() == 'msvc'
export_define = '__declspec(dllexport) extern'
diff --git a/subprojects/gst-libav/meson.build b/subprojects/gst-libav/meson.build
index e2a3fa5d3c..1cdd33c5b3 100644
--- a/subprojects/gst-libav/meson.build
+++ b/subprojects/gst-libav/meson.build
@@ -140,6 +140,12 @@ if cc.get_id() == 'msvc'
add_project_arguments(msvc_args, language: ['c', 'cpp'])
endif
+# glib doesn't support unloading, which means that unloading and reloading
+# any library that registers static types will fail
+if cc.has_link_argument('-Wl,-z,nodelete')
+ add_project_link_arguments('-Wl,-z,nodelete', language: 'c')
+endif
+
# Symbol visibility
if cc.has_argument('-fvisibility=hidden')
add_project_arguments('-fvisibility=hidden', language: 'c')
diff --git a/subprojects/gst-omx/meson.build b/subprojects/gst-omx/meson.build
index 915538844a..d1b149d997 100644
--- a/subprojects/gst-omx/meson.build
+++ b/subprojects/gst-omx/meson.build
@@ -49,6 +49,12 @@ else
noseh_link_args = []
endif
+# glib doesn't support unloading, which means that unloading and reloading
+# any library that registers static types will fail
+if cc.has_link_argument('-Wl,-z,nodelete')
+ add_project_link_arguments('-Wl,-z,nodelete', language: 'c')
+endif
+
cdata = configuration_data()
check_headers = [
# ['HAVE_DLFCN_H', 'dlfcn.h'],
diff --git a/subprojects/gst-plugins-bad/meson.build b/subprojects/gst-plugins-bad/meson.build
index 38472220f3..90098a1276 100644
--- a/subprojects/gst-plugins-bad/meson.build
+++ b/subprojects/gst-plugins-bad/meson.build
@@ -102,6 +102,15 @@ if cc.has_link_argument('-Wl,-Bsymbolic-functions')
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
endif
+# glib doesn't support unloading, which means that unloading and reloading
+# any library that registers static types will fail
+if cc.has_link_argument('-Wl,-z,nodelete')
+ add_project_link_arguments('-Wl,-z,nodelete', language: 'c')
+endif
+if cxx.has_link_argument('-Wl,-z,nodelete')
+ add_project_link_arguments('-Wl,-z,nodelete', language: 'cpp')
+endif
+
# Symbol visibility
if cc.get_id() == 'msvc'
export_define = '__declspec(dllexport) extern'
diff --git a/subprojects/gst-plugins-base/meson.build b/subprojects/gst-plugins-base/meson.build
index 13b68fe807..451ee15769 100644
--- a/subprojects/gst-plugins-base/meson.build
+++ b/subprojects/gst-plugins-base/meson.build
@@ -95,6 +95,12 @@ if cc.has_link_argument('-Wl,-Bsymbolic-functions')
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
endif
+# glib doesn't support unloading, which means that unloading and reloading
+# any library that registers static types will fail
+if cc.has_link_argument('-Wl,-z,nodelete')
+ add_project_link_arguments('-Wl,-z,nodelete', language: 'c')
+endif
+
core_conf = configuration_data()
core_conf.set('ENABLE_NLS', 1)
diff --git a/subprojects/gst-plugins-good/meson.build b/subprojects/gst-plugins-good/meson.build
index 97ab9a3981..97a3863e74 100644
--- a/subprojects/gst-plugins-good/meson.build
+++ b/subprojects/gst-plugins-good/meson.build
@@ -18,6 +18,9 @@ gst_version_is_stable = gst_version_minor.is_even()
gst_version_is_dev = gst_version_minor.is_odd() and gst_version_micro < 90
have_cxx = add_languages('cpp', native: false, required: false)
+if have_cxx
+ cxx = meson.get_compiler('cpp')
+endif
glib_req = '>= 2.62.0'
orc_req = '>= 0.4.17'
@@ -84,6 +87,18 @@ endif
if cc.has_link_argument('-Wl,-Bsymbolic-functions')
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
endif
+if have_cxx and cxx.has_link_argument('-Wl,-Bsymbolic-functions')
+ add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'cpp')
+endif
+
+# glib doesn't support unloading, which means that unloading and reloading
+# any library that registers static types will fail
+if cc.has_link_argument('-Wl,-z,nodelete')
+ add_project_link_arguments('-Wl,-z,nodelete', language: 'c')
+endif
+if have_cxx and cxx.has_link_argument('-Wl,-z,nodelete')
+ add_project_link_arguments('-Wl,-z,nodelete', language: 'cpp')
+endif
# Symbol visibility
if cc.has_argument('-fvisibility=hidden')
@@ -234,10 +249,6 @@ warning_c_flags = [
'-Waggregate-return',
]
-if have_cxx
- cxx = meson.get_compiler('cpp')
-endif
-
foreach extra_arg : warning_flags
if cc.has_argument (extra_arg)
add_project_arguments([extra_arg], language: 'c')
diff --git a/subprojects/gst-plugins-ugly/meson.build b/subprojects/gst-plugins-ugly/meson.build
index 135dd49827..c9fe6ba8d1 100644
--- a/subprojects/gst-plugins-ugly/meson.build
+++ b/subprojects/gst-plugins-ugly/meson.build
@@ -89,6 +89,15 @@ if have_cxx and cxx.has_link_argument('-Wl,-Bsymbolic-functions')
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'cpp')
endif
+# glib doesn't support unloading, which means that unloading and reloading
+# any library that registers static types will fail
+if cc.has_link_argument('-Wl,-z,nodelete')
+ add_project_link_arguments('-Wl,-z,nodelete', language: 'c')
+endif
+if have_cxx and cxx.has_link_argument('-Wl,-z,nodelete')
+ add_project_link_arguments('-Wl,-z,nodelete', language: 'cpp')
+endif
+
cdata = configuration_data()
cdata.set('ENABLE_NLS', 1)
diff --git a/subprojects/gst-rtsp-server/meson.build b/subprojects/gst-rtsp-server/meson.build
index 0de2bad636..df41235755 100644
--- a/subprojects/gst-rtsp-server/meson.build
+++ b/subprojects/gst-rtsp-server/meson.build
@@ -42,6 +42,12 @@ if cc.has_link_argument('-Wl,-Bsymbolic-functions')
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
endif
+# glib doesn't support unloading, which means that unloading and reloading
+# any library that registers static types will fail
+if cc.has_link_argument('-Wl,-z,nodelete')
+ add_project_link_arguments('-Wl,-z,nodelete', language: 'c')
+endif
+
# Symbol visibility
if cc.get_id() == 'msvc'
export_define = '__declspec(dllexport) extern'
diff --git a/subprojects/gstreamer/meson.build b/subprojects/gstreamer/meson.build
index de453c8b5e..85e36ef9c8 100644
--- a/subprojects/gstreamer/meson.build
+++ b/subprojects/gstreamer/meson.build
@@ -74,6 +74,12 @@ elif cc.has_link_argument('-Wl,-Bsymbolic-functions')
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
endif
+# glib doesn't support unloading, which means that unloading and reloading
+# any library that registers static types will fail
+if cc.has_link_argument('-Wl,-z,nodelete')
+ add_project_link_arguments('-Wl,-z,nodelete', language: 'c')
+endif
+
# Symbol visibility
have_visibility_hidden = false
if cc.get_id() == 'msvc'