meson: Build with -Wl,-z,nodelete to prevent unloading of dynamic libraries and plugins
authorZebediah Figura <z.figura12@gmail.com>
Wed, 24 Mar 2021 19:20:18 +0000 (14:20 -0500)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Tue, 13 Sep 2022 15:48:52 +0000 (15:48 +0000)
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>

subprojects/gst-devtools/meson.build
subprojects/gst-editing-services/meson.build
subprojects/gst-libav/meson.build
subprojects/gst-omx/meson.build
subprojects/gst-plugins-bad/meson.build
subprojects/gst-plugins-base/meson.build
subprojects/gst-plugins-good/meson.build
subprojects/gst-plugins-ugly/meson.build
subprojects/gst-rtsp-server/meson.build
subprojects/gstreamer/meson.build

index 513daff..fc7205e 100644 (file)
@@ -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')
index e45541c..b035dac 100644 (file)
@@ -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'
index e2a3fa5..1cdd33c 100644 (file)
@@ -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')
index 9155388..d1b149d 100644 (file)
@@ -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'],
index 3847222..90098a1 100644 (file)
@@ -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'
index 13b68fe..451ee15 100644 (file)
@@ -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)
 
index 97ab9a3..97a3863 100644 (file)
@@ -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')
index 135dd49..c9fe6ba 100644 (file)
@@ -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)
 
index 0de2bad..df41235 100644 (file)
@@ -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'
index de453c8..85e36ef 100644 (file)
@@ -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'