mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 11:41:09 +00:00
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>
This commit is contained in:
parent
9bb560e7ee
commit
c4681ac428
10 changed files with 75 additions and 4 deletions
|
@ -63,6 +63,12 @@ else
|
||||||
noseh_link_args = []
|
noseh_link_args = []
|
||||||
endif
|
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
|
# Symbol visibility
|
||||||
if cc.has_argument('-fvisibility=hidden')
|
if cc.has_argument('-fvisibility=hidden')
|
||||||
add_project_arguments('-fvisibility=hidden', language: 'c')
|
add_project_arguments('-fvisibility=hidden', language: 'c')
|
||||||
|
|
|
@ -67,6 +67,12 @@ if cc.has_link_argument('-Wl,-Bsymbolic-functions')
|
||||||
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
|
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
|
||||||
endif
|
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
|
# Symbol visibility
|
||||||
if cc.get_id() == 'msvc'
|
if cc.get_id() == 'msvc'
|
||||||
export_define = '__declspec(dllexport) extern'
|
export_define = '__declspec(dllexport) extern'
|
||||||
|
|
|
@ -140,6 +140,12 @@ if cc.get_id() == 'msvc'
|
||||||
add_project_arguments(msvc_args, language: ['c', 'cpp'])
|
add_project_arguments(msvc_args, language: ['c', 'cpp'])
|
||||||
endif
|
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
|
# Symbol visibility
|
||||||
if cc.has_argument('-fvisibility=hidden')
|
if cc.has_argument('-fvisibility=hidden')
|
||||||
add_project_arguments('-fvisibility=hidden', language: 'c')
|
add_project_arguments('-fvisibility=hidden', language: 'c')
|
||||||
|
|
|
@ -49,6 +49,12 @@ else
|
||||||
noseh_link_args = []
|
noseh_link_args = []
|
||||||
endif
|
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()
|
cdata = configuration_data()
|
||||||
check_headers = [
|
check_headers = [
|
||||||
# ['HAVE_DLFCN_H', 'dlfcn.h'],
|
# ['HAVE_DLFCN_H', 'dlfcn.h'],
|
||||||
|
|
|
@ -102,6 +102,15 @@ if cc.has_link_argument('-Wl,-Bsymbolic-functions')
|
||||||
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
|
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
|
||||||
endif
|
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
|
# Symbol visibility
|
||||||
if cc.get_id() == 'msvc'
|
if cc.get_id() == 'msvc'
|
||||||
export_define = '__declspec(dllexport) extern'
|
export_define = '__declspec(dllexport) extern'
|
||||||
|
|
|
@ -95,6 +95,12 @@ if cc.has_link_argument('-Wl,-Bsymbolic-functions')
|
||||||
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
|
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
|
||||||
endif
|
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 = configuration_data()
|
||||||
core_conf.set('ENABLE_NLS', 1)
|
core_conf.set('ENABLE_NLS', 1)
|
||||||
|
|
||||||
|
|
|
@ -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
|
gst_version_is_dev = gst_version_minor.is_odd() and gst_version_micro < 90
|
||||||
|
|
||||||
have_cxx = add_languages('cpp', native: false, required: false)
|
have_cxx = add_languages('cpp', native: false, required: false)
|
||||||
|
if have_cxx
|
||||||
|
cxx = meson.get_compiler('cpp')
|
||||||
|
endif
|
||||||
|
|
||||||
glib_req = '>= 2.62.0'
|
glib_req = '>= 2.62.0'
|
||||||
orc_req = '>= 0.4.17'
|
orc_req = '>= 0.4.17'
|
||||||
|
@ -84,6 +87,18 @@ endif
|
||||||
if cc.has_link_argument('-Wl,-Bsymbolic-functions')
|
if cc.has_link_argument('-Wl,-Bsymbolic-functions')
|
||||||
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
|
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
|
||||||
endif
|
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
|
# Symbol visibility
|
||||||
if cc.has_argument('-fvisibility=hidden')
|
if cc.has_argument('-fvisibility=hidden')
|
||||||
|
@ -234,10 +249,6 @@ warning_c_flags = [
|
||||||
'-Waggregate-return',
|
'-Waggregate-return',
|
||||||
]
|
]
|
||||||
|
|
||||||
if have_cxx
|
|
||||||
cxx = meson.get_compiler('cpp')
|
|
||||||
endif
|
|
||||||
|
|
||||||
foreach extra_arg : warning_flags
|
foreach extra_arg : warning_flags
|
||||||
if cc.has_argument (extra_arg)
|
if cc.has_argument (extra_arg)
|
||||||
add_project_arguments([extra_arg], language: 'c')
|
add_project_arguments([extra_arg], language: 'c')
|
||||||
|
|
|
@ -89,6 +89,15 @@ if have_cxx and cxx.has_link_argument('-Wl,-Bsymbolic-functions')
|
||||||
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'cpp')
|
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'cpp')
|
||||||
endif
|
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 = configuration_data()
|
||||||
cdata.set('ENABLE_NLS', 1)
|
cdata.set('ENABLE_NLS', 1)
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,12 @@ if cc.has_link_argument('-Wl,-Bsymbolic-functions')
|
||||||
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
|
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
|
||||||
endif
|
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
|
# Symbol visibility
|
||||||
if cc.get_id() == 'msvc'
|
if cc.get_id() == 'msvc'
|
||||||
export_define = '__declspec(dllexport) extern'
|
export_define = '__declspec(dllexport) extern'
|
||||||
|
|
|
@ -74,6 +74,12 @@ elif cc.has_link_argument('-Wl,-Bsymbolic-functions')
|
||||||
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
|
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
|
||||||
endif
|
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
|
# Symbol visibility
|
||||||
have_visibility_hidden = false
|
have_visibility_hidden = false
|
||||||
if cc.get_id() == 'msvc'
|
if cc.get_id() == 'msvc'
|
||||||
|
|
Loading…
Reference in a new issue