@@ -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
new file mode 100644
@@ -0,0 +1,26 @@
+
+# These tests are disabled on Windows, because headers there additional
+# global symbols which would cause them to fail unhelpfully.
+ifneq ($(HAVE_WINDOWS_H),yes)
+
+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)"
+fate-namespace-$(1): CMP = null
+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)
+
+endif
new file mode 100755
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+if $1 |
+ grep ' [TDBR] ' | # Filter to all global text/(ro)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 '^_[A-Z_]' | # Reserved symbols added by the implementation.
+ grep '^[A-Za-z0-9_]* ' # Only consider normal symbol names.
+then
+ # Any output is an error.
+ exit 1
+else
+ exit 0
+fi