0f7c42
#!/bin/sh
0f7c42
0f7c42
# Process a gst-plugins-bad tarball to remove
0f7c42
# unwanted GStreamer plugins.
0f7c42
#
0f7c42
# See https://bugzilla.redhat.com/show_bug.cgi?id=532470
0f7c42
# for details
0f7c42
#
0f7c42
# Bastien Nocera <bnocera@redhat.com> - 2010
0f7c42
#
0f7c42
0f7c42
SOURCE="$1"
0f7c42
NEW_SOURCE=`echo $SOURCE | sed 's/bad-/bad-free-/'`
0f7c42
DIRECTORY=`echo $SOURCE | sed 's/\.tar\.xz//'`
0f7c42
0f7c42
ALLOWED="
0f7c42
aacparse
0f7c42
accurip
0f7c42
adpcmdec
0f7c42
adpcmenc
0f7c42
aiff
0f7c42
aiffparse
0f7c42
amrparse
0f7c42
asfmux
0f7c42
audiobuffersplit
0f7c42
audiofxbad
0f7c42
audiolatency
0f7c42
audiomixer
0f7c42
audiomixmatrix
0f7c42
audioparsers
0f7c42
audiovisualizers
0f7c42
autoconvert
0f7c42
bayer
0f7c42
camerabin
0f7c42
camerabin2
0f7c42
cdxaparse
0f7c42
coloreffects
0f7c42
colorspace
0f7c42
compositor
0f7c42
dataurisrc
0f7c42
dccp
0f7c42
debugutils
0f7c42
dtmf
0f7c42
faceoverlay
0f7c42
festival
0f7c42
fieldanalysis
0f7c42
freeverb
0f7c42
freeze
0f7c42
frei0r
0f7c42
gaudieffects
0f7c42
gdp
0f7c42
geometrictransform
0f7c42
h264parse
0f7c42
hdvparse
0f7c42
hls
0f7c42
id3tag
0f7c42
inter
0f7c42
interlace
0f7c42
invtelecine
0f7c42
ivfparse
0f7c42
ivtc
0f7c42
jpegformat
0f7c42
jp2kdecimator
0f7c42
legacyresample
0f7c42
librfb
0f7c42
liveadder
0f7c42
midi
0f7c42
mve
0f7c42
mpegdemux
0f7c42
mpeg4videoparse
0f7c42
mpegpsmux
0f7c42
mpegtsdemux
0f7c42
mpegtsmux
0f7c42
mpegvideoparse
0f7c42
mxf
0f7c42
netsim
0f7c42
nsf
0f7c42
nuvdemux
0f7c42
onvif
0f7c42
patchdetect
0f7c42
pcapparse
0f7c42
pnm
0f7c42
proxy
0f7c42
qtmux
0f7c42
rawparse
0f7c42
removesilence
0f7c42
rtp
0f7c42
rtpmux
0f7c42
rtpvp8
0f7c42
scaletempo
0f7c42
sdi
0f7c42
sdp
0f7c42
segmentclip
0f7c42
selector
0f7c42
smooth
0f7c42
speed
0f7c42
stereo
0f7c42
subenc
0f7c42
timecode
0f7c42
tta
0f7c42
valve
0f7c42
videofilters
0f7c42
videoframe_audiolevel
0f7c42
videomaxrate
0f7c42
videomeasure
0f7c42
videoparsers
0f7c42
videosignal
0f7c42
vmnc
0f7c42
yadif
0f7c42
y4m
0f7c42
"
0f7c42
0f7c42
NOT_ALLOWED="
0f7c42
dvbsuboverlay
0f7c42
dvdspu
0f7c42
real
0f7c42
siren
0f7c42
"
0f7c42
0f7c42
error()
0f7c42
{
0f7c42
	MESSAGE=$1
0f7c42
	echo $MESSAGE
0f7c42
	exit 1
0f7c42
}
0f7c42
0f7c42
check_allowed()
0f7c42
{
0f7c42
	MODULE=$1
0f7c42
	for i in $ALLOWED ; do
0f7c42
		if test x$MODULE = x$i ; then
0f7c42
			return 0;
0f7c42
		fi
0f7c42
	done
0f7c42
	# Ignore errors coming from ext/ directory
0f7c42
	# they require external libraries so are ineffective anyway
0f7c42
	return 1;
0f7c42
}
0f7c42
0f7c42
check_not_allowed()
0f7c42
{
0f7c42
	MODULE=$1
0f7c42
	for i in $NOT_ALLOWED ; do
0f7c42
		if test x$MODULE = x$i ; then
0f7c42
			return 0;
0f7c42
		fi
0f7c42
	done
0f7c42
	return 1;
0f7c42
}
0f7c42
0f7c42
rm -rf $DIRECTORY
0f7c42
tar xJf $SOURCE || error "Cannot unpack $SOURCE"
0f7c42
pushd $DIRECTORY > /dev/null || error "Cannot open directory \"$DIRECTORY\""
0f7c42
0f7c42
unknown=""
0f7c42
for subdir in gst ext sys; do
0f7c42
	for dir in $subdir/* ; do
0f7c42
		# Don't touch non-directories
0f7c42
		if ! [ -d $dir ] ; then
0f7c42
			continue;
0f7c42
		fi
0f7c42
		MODULE=`basename $dir`
0f7c42
		if ( check_not_allowed $MODULE ) ; then
0f7c42
			echo "**** Removing $MODULE ****"
0f7c42
			echo "Removing directory $dir"
0f7c42
			rm -r $dir || error "Cannot remove $dir"
0f7c42
			if grep -q "AG_GST_CHECK_PLUGIN($MODULE)" configure.ac ; then
0f7c42
				echo "Removing element check for $MODULE"
0f7c42
				grep -v "AG_GST_CHECK_PLUGIN($MODULE)" configure.ac > configure.ac.new && mv configure.ac.new configure.ac
0f7c42
			fi
0f7c42
			echo "Removing Makefile generation for $MODULE"
0f7c42
			grep -v "$dir/Makefile" configure.ac > configure.ac.new && mv configure.ac.new configure.ac
0f7c42
			# Urgh
0f7c42
			if test $MODULE = real ; then
0f7c42
				grep -v "AG_GST_DISABLE_PLUGIN(real)" configure.ac > configure.ac.new && mv configure.ac.new configure.ac
0f7c42
			fi
0f7c42
			echo "Removing documentation for $MODULE"
0f7c42
			if grep -q "$MODULE" docs/plugins/Makefile.am ; then
0f7c42
				grep -v $dir docs/plugins/Makefile.am > docs/plugins/Makefile.am.new && mv docs/plugins/Makefile.am.new docs/plugins/Makefile.am
0f7c42
			fi
0f7c42
			echo
0f7c42
		elif test $subdir = ext  || test $subdir = sys; then
0f7c42
			# Ignore library or system non-blacklisted plugins
0f7c42
			continue;
0f7c42
		elif ! ( check_allowed $MODULE ) ; then
0f7c42
			echo "Unknown module in $dir"
0f7c42
			unknown="$unknown $dir"
0f7c42
		fi
0f7c42
	done
0f7c42
done
0f7c42
0f7c42
echo
0f7c42
0f7c42
if test "x$unknown" != "x"; then
0f7c42
  echo -n "Aborting due to unkown modules: "
0f7c42
  echo "$unknown" | sed "s/ /\n  /g"
0f7c42
  exit 1
0f7c42
fi
0f7c42
0f7c42
#autoreconf
0f7c42
NOCONFIGURE=1 \
0f7c42
./autogen.sh
0f7c42
0f7c42
popd > /dev/null
0f7c42
0f7c42
tar cJf $NEW_SOURCE $DIRECTORY
0f7c42
echo "$NEW_SOURCE is ready to use"
0f7c42