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_]/.)

- Mark
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to