#!/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 # # Bastien Nocera - 2010 # SOURCE="$1" NEW_SOURCE=`echo $SOURCE | sed 's/bad-/bad-free-/'` DIRECTORY=`echo $SOURCE | sed 's/\.tar\.xz//'` ALLOWED=" aacparse accurip adpcmdec adpcmenc aiff aiffparse amrparse asfmux audiofxbad audioparsers audiovisualizers autoconvert bayer camerabin camerabin2 cdxaparse coloreffects colorspace dataurisrc dccp debugutils dtmf faceoverlay festival fieldanalysis freeverb freeze frei0r gaudieffects gdp geometrictransform h264parse hdvparse hls id3tag inter interlace invtelecine ivfparse ivtc jpegformat jp2kdecimator legacyresample librfb liveadder midi mve mpegdemux mpeg4videoparse mpegpsmux mpegtsdemux mpegtsmux mpegvideoparse mxf nsf nuvdemux patchdetect pcapparse pnm qtmux rawparse removesilence rtpmux rtpvp8 scaletempo sdi sdp segmentclip selector smooth speed stereo subenc tta valve videofilters videomaxrate videomeasure videoparsers videosignal vmnc yadif y4m " NOT_ALLOWED=" dvbsuboverlay dvdspu real 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 xJf $SOURCE || error "Cannot unpack $SOURCE" pushd $DIRECTORY > /dev/null || error "Cannot open directory \"$DIRECTORY\"" unknown="" 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 = 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" unknown="$unknown $dir" fi done done echo if test "x$unknown" != "x"; then echo -n "Aborting due to unkown modules: " echo "$unknown" | sed "s/ /\n /g" exit 1 fi autoreconf popd > /dev/null tar cJf $NEW_SOURCE $DIRECTORY echo "$NEW_SOURCE is ready to use"