[FFmpeg-devel] [PATCH v3 2/2] fate: Add test for namespace prefixes in libraries
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Wed Feb 3 00:18:23 EET 2021
Mark Thompson:
> On 30/01/2021 04:47, Andreas Rheinhardt wrote:
>> Mark Thompson:
>>> Ensures that external symbols in the built static libraries either have
>>> correct namespace prefixes or are on a known list of exceptions.
>>> ---
>>> tests/Makefile | 1 +
>>> tests/fate/namespace.mak | 19 ++++++++++
>>> tests/fate/namespace.sh | 15 ++++++++
>>> tests/ref/fate/namespace-avcodec | 0
>>> tests/ref/fate/namespace-avdevice | 0
>>> tests/ref/fate/namespace-avfilter | 0
>>> tests/ref/fate/namespace-avformat | 0
>>> tests/ref/fate/namespace-avutil | 0
>>> tests/ref/fate/namespace-postproc | 0
>>> tests/ref/fate/namespace-swresample | 0
>>> tests/ref/fate/namespace-swscale | 58 +++++++++++++++++++++++++++++
>>> 11 files changed, 93 insertions(+)
>>> create mode 100644 tests/fate/namespace.mak
>>> create mode 100755 tests/fate/namespace.sh
>>> create mode 100644 tests/ref/fate/namespace-avcodec
>>> create mode 100644 tests/ref/fate/namespace-avdevice
>>> create mode 100644 tests/ref/fate/namespace-avfilter
>>> create mode 100644 tests/ref/fate/namespace-avformat
>>> create mode 100644 tests/ref/fate/namespace-avutil
>>> create mode 100644 tests/ref/fate/namespace-postproc
>>> create mode 100644 tests/ref/fate/namespace-swresample
>>> create mode 100644 tests/ref/fate/namespace-swscale
>>>
>>> diff --git a/tests/Makefile b/tests/Makefile
>>> index 7844901e53..94057eb81d 100644
>>> --- a/tests/Makefile
>>> +++ b/tests/Makefile
>>> @@ -173,6 +173,7 @@ include $(SRC_PATH)/tests/fate/mpeg4.mak
>>> include $(SRC_PATH)/tests/fate/mpegps.mak
>>> include $(SRC_PATH)/tests/fate/mpegts.mak
>>> include $(SRC_PATH)/tests/fate/mxf.mak
>>> +include $(SRC_PATH)/tests/fate/namespace.mak
>>> include $(SRC_PATH)/tests/fate/opus.mak
>>> include $(SRC_PATH)/tests/fate/pcm.mak
>>> include $(SRC_PATH)/tests/fate/pixfmt.mak
>>> diff --git a/tests/fate/namespace.mak b/tests/fate/namespace.mak
>>> new file mode 100644
>>> index 0000000000..0021e7152d
>>> --- /dev/null
>>> +++ b/tests/fate/namespace.mak
>>> @@ -0,0 +1,19 @@
>>> +
>>> +define FATE_NAMESPACE
>>> +# (library_name, config_option)
>>> +FATE_NAMESPACE-$(call ALLYES, STATIC $(2)) += fate-namespace-$(1)
>>> +fate-namespace-$(1): lib$(1)/$(LIBPREF)$(1)$(LIBSUF)
>>> +fate-namespace-$(1): CMD = runlocal fate/namespace.sh "$(NM_CMD) -P
>>> lib$(1)/$(LIBPREF)$(1)$(LIBSUF)"
>>> +endef
>>> +
>>> +$(eval $(call FATE_NAMESPACE,avutil, AVUTIL))
>>> +$(eval $(call FATE_NAMESPACE,avcodec, AVCODEC))
>>> +$(eval $(call FATE_NAMESPACE,avformat, AVFORMAT))
>>> +$(eval $(call FATE_NAMESPACE,avfilter, AVFILTER))
>>> +$(eval $(call FATE_NAMESPACE,avdevice, AVDEVICE))
>>> +$(eval $(call FATE_NAMESPACE,swscale, SWSCALE))
>>> +$(eval $(call FATE_NAMESPACE,swresample, SWRESAMPLE))
>>> +$(eval $(call FATE_NAMESPACE,postproc, POSTPROC))
>>> +
>>> +FATE += $(FATE_NAMESPACE-yes)
>>> +fate-namespace: $(FATE_NAMESPACE-yes)
>>> diff --git a/tests/fate/namespace.sh b/tests/fate/namespace.sh
>>> new file mode 100755
>>> index 0000000000..16d306eafc
>>> --- /dev/null
>>> +++ b/tests/fate/namespace.sh
>>> @@ -0,0 +1,15 @@
>>> +#!/bin/sh
>>> +
>>> +$1 |
>>> + grep ' [TDBR] ' | # Filter to all global text/data/bss symbols.
>>> + grep -v '^ff_' | # Internal-only globals.
>>> + grep -v '^av' | # libav* external API.
>>> + grep -v '^sws' | # libswscale external API.
>>> + grep -v '^swr' | # libswresample external API.
>>> + grep -v '^\(postproc\|pp\)_' | # libpostproc external API.
>>> + grep -v '^\(ffio\|ffurl\)_' | # libavformat internal ffio/ffurl
>>> APIs.
>>> + grep -v '^rgb2rgb_init_' | # libswscale arch-specific init
>>> function.
>>> + sed 's/ .*//' | # Remove everything except the symbol name.
>>> + sort # Sort to allow deterministic comparison.
>>> +
>>> +exit 0
>>> diff --git a/tests/ref/fate/namespace-avcodec
>>> b/tests/ref/fate/namespace-avcodec
>>> new file mode 100644
>>> index 0000000000..e69de29bb2
>>> diff --git a/tests/ref/fate/namespace-avdevice
>>> b/tests/ref/fate/namespace-avdevice
>>> new file mode 100644
>>> index 0000000000..e69de29bb2
>>> diff --git a/tests/ref/fate/namespace-avfilter
>>> b/tests/ref/fate/namespace-avfilter
>>> new file mode 100644
>>> index 0000000000..e69de29bb2
>>> diff --git a/tests/ref/fate/namespace-avformat
>>> b/tests/ref/fate/namespace-avformat
>>> new file mode 100644
>>> index 0000000000..e69de29bb2
>>> diff --git a/tests/ref/fate/namespace-avutil
>>> b/tests/ref/fate/namespace-avutil
>>> new file mode 100644
>>> index 0000000000..e69de29bb2
>>> diff --git a/tests/ref/fate/namespace-postproc
>>> b/tests/ref/fate/namespace-postproc
>>> new file mode 100644
>>> index 0000000000..e69de29bb2
>>> diff --git a/tests/ref/fate/namespace-swresample
>>> b/tests/ref/fate/namespace-swresample
>>> new file mode 100644
>>> index 0000000000..e69de29bb2
>>> diff --git a/tests/ref/fate/namespace-swscale
>>> b/tests/ref/fate/namespace-swscale
>>> new file mode 100644
>>> index 0000000000..a7aa4504ae
>>> --- /dev/null
>>> +++ b/tests/ref/fate/namespace-swscale
>>> @@ -0,0 +1,58 @@
>>> +deinterleaveBytes
>>> +interleaveBytes
>>> +planar2x
>>> +rgb12to15
>>> +rgb12tobgr12
>>> +rgb15to16
>>> +rgb15to24
>>> +rgb15to32
>>> +rgb15tobgr15
>>> +rgb15tobgr16
>>> +rgb15tobgr24
>>> +rgb15tobgr32
>>> +rgb16to15
>>> +rgb16to24
>>> +rgb16to32
>>> +rgb16tobgr15
>>> +rgb16tobgr16
>>> +rgb16tobgr24
>>> +rgb16tobgr32
>>> +rgb24to15
>>> +rgb24to16
>>> +rgb24to32
>>> +rgb24tobgr15
>>> +rgb24tobgr16
>>> +rgb24tobgr24
>>> +rgb24tobgr32
>>> +rgb32to15
>>> +rgb32to16
>>> +rgb32to24
>>> +rgb32tobgr15
>>> +rgb32tobgr16
>>> +rgb32tobgr24
>>> +rgb48to64_bswap
>>> +rgb48to64_nobswap
>>> +rgb48tobgr48_bswap
>>> +rgb48tobgr48_nobswap
>>> +rgb48tobgr64_bswap
>>> +rgb48tobgr64_nobswap
>>> +rgb64to48_bswap
>>> +rgb64to48_nobswap
>>> +rgb64tobgr48_bswap
>>> +rgb64tobgr48_nobswap
>>> +shuffle_bytes_0321
>>> +shuffle_bytes_1230
>>> +shuffle_bytes_2103
>>> +shuffle_bytes_3012
>>> +shuffle_bytes_3210
>>> +uyvytoyuv420
>>> +uyvytoyuv422
>>> +vu9_to_vu12
>>> +yuv422ptouyvy
>>> +yuv422ptoyuy2
>>> +yuy2toyv12
>>> +yuyvtoyuv420
>>> +yuyvtoyuv422
>>> +yv12touyvy
>>> +yv12toyuy2
>>> +yvu9_to_yuy2
>>>
>> I sent a patch
>> (https://ffmpeg.org/pipermail/ffmpeg-devel/2021-January/275382.html)
>> that fixes all of the exceptions above; yet when testing it, a new
>> problem emerged: __x86.get_pc_thunk.* (functions that are used on 32-bit
>> x86 for position-independent code). Of course one can filter them away;
>> but this together with James' report about mingw makes me wary whether
>> such a test is even possible. It might just lead to an ever-growing list
>> of additional filters.
>
> Given that an implementation can only introduce new external symbols in
> its own reserved namespace, maybe this is ok? (The additional things to
> remove would be /^_[A-Z_]/ and /[^A-Za-z0-9_]/.)
>
How would this work with IID_ID3D10BlendState1 (the example mentioned by
James)?
- Andreas
More information about the ffmpeg-devel
mailing list