#!/bin/sh

# Process a gst-plugins-bad tarball to remove
# unwanted GStreamer plugins.
#
# See https://bugzilla.redhat.com/show_bug.cgi?id=532470
# for details
# See https://bugzilla.novell.com/show_bug.cgi?id=637056
# for openSUSE discussion
#
# Bastien Nocera <bnocera@redhat.com> - 2010
#

SOURCE="$1"
NEW_SOURCE=`echo $SOURCE | sed 's/\.tar/-patched.tar/'`
DIRECTORY=`echo $SOURCE | sed 's/\.tar\.xz//'`

ALLOWED="
aacparse
accurip
adpcmdec
adpcmenc
aiff
aiffparse
amrparse
asfmux
audiofxbad
audioparsers
audiovisualizers
autoconvert
bayer
camerabin
camerabin2
coloreffects
colorspace
cdxaparse
dataurisrc
dccp
debugutils
dtmf
dvbsuboverlay
faceoverlay
festival
fieldanalysis
freeverb
freeze
frei0r
gdp
gaudieffects
geometrictransform
h264parse
hdvparse
hls
id3tag
inter
interlace
invtelecine
ivfparse
ivtc
jp2kdecimator
jpegformat
legacyresample
librfb
liveadder
midi
mve
mpeg4videoparse
mpegdemux
mpegpsmux
mpegtsdemux
mpegtsmux
mpegvideoparse
mxf
nsf
nuvdemux
patchdetect
pcapparse
pnm
qtmux
rawparse
real
removesilence
rtpmux
rtpvp8
scaletempo
sdi
sdp
segmentclip
selector
smooth
speed
stereo
subenc
tta
valve
videofilters
videomaxrate
videomeasure
videoparsers
videosignal
vmnc
y4m
yadif
"

NOT_ALLOWED="
dvdspu
siren
"

error()
{
	MESSAGE=$1
	echo $MESSAGE
	exit 1
}

check_allowed()
{
	MODULE=$1
	for i in $ALLOWED ; do
		if test x$MODULE = x$i ; then
			return 0;
		fi
	done
	# Ignore errors coming from ext/ directory
	# they require external libraries so are ineffective anyway
	return 1;
}

check_not_allowed()
{
	MODULE=$1
	for i in $NOT_ALLOWED ; do
		if test x$MODULE = x$i ; then
			return 0;
		fi
	done
	return 1;
}

rm -rf $DIRECTORY
tar xf $SOURCE || error "Cannot unpack $SOURCE"
pushd $DIRECTORY > /dev/null || error "Cannot open directory \"$DIRECTORY\""

for subdir in gst ext sys; do
	for dir in $subdir/* ; do
		# Don't touch non-directories
		if ! [ -d $dir ] ; then
			continue;
		fi
		MODULE=`basename $dir`
		if ( check_not_allowed $MODULE ) ; then
			echo "**** Removing $MODULE ****"
			echo "Removing directory $dir"
			rm -r $dir || error "Cannot remove $dir"
			if grep -q "AG_GST_CHECK_PLUGIN($MODULE)" configure.ac ; then
				echo "Removing element check for $MODULE"
				grep -v "AG_GST_CHECK_PLUGIN($MODULE)" configure.ac > configure.ac.new && mv configure.ac.new configure.ac
			fi
			echo "Removing Makefile generation for $MODULE"
			grep -v "$dir/Makefile" configure.ac > configure.ac.new && mv configure.ac.new configure.ac
			# Urgh
			if test $MODULE = mpegtsmux ; then
				grep -v "gst/mpegtsmux/tsmux/Makefile" configure.ac > configure.ac.new && mv configure.ac.new configure.ac
			fi
			if test $MODULE = real ; then
				grep -v "AG_GST_DISABLE_PLUGIN(real)" configure.ac > configure.ac.new && mv configure.ac.new configure.ac
			fi
			echo "Removing documentation for $MODULE"
			if grep -q "$MODULE" docs/plugins/Makefile.am ; then
				grep -v $dir docs/plugins/Makefile.am > docs/plugins/Makefile.am.new && mv docs/plugins/Makefile.am.new docs/plugins/Makefile.am
			fi
			echo
		elif test $subdir = ext  || test $subdir = sys; then
			# Ignore library or system non-blacklisted plugins
			continue;
		elif ! ( check_allowed $MODULE ) ; then
			echo "Unknown module in $dir"
			exit 1
		fi
	done
done

autoreconf

popd > /dev/null

tar cJf $NEW_SOURCE $DIRECTORY
rm -rf $DIRECTORY
echo "$NEW_SOURCE is ready to use"

