#!/usr/bin/perl -w

# checks all built plugins by running gst-inspect on each element
# and checking for warnings on stderr

### packages

use File::Basename;

print "                  _______\n";
print "         (__)    /       \\\n";
print "         (oo)   (  M O O  )\n";
print "  /-------\\/  --'\\_______/\n";
print " / |     ||\n";
print "*  ||----||\n";
print "   ^^    ^^\n";

my $num_warnings = 0;
my $path = `dirname $0`;
chomp $path;
$path = "../../tools";

$gst_inspect = "$path/gst-inspect-@GST_MAJORMINOR@";

sub check_all_elements
{
	#send stderr to /dev/null
	my $command = "$gst_inspect 2>/dev/null";
	my @lines = `$command`;

	if (!@lines) {
		print ("gst-inspect returned nothing\n");
		return -1;
	}
	while ($_ = shift(@lines)){
		my @matches = m/^\w+:\s+(\w+):/;
		if(@matches){
			check_element($matches[0]);
		}
	}
	if ($num_warnings > 0){
		print("there are $num_warnings warnings to be fixed\n");
		return -1;
	}
	return 0;
}

sub check_element($)
{
	my ($element) = @_;
	print "running inspect on $element\n";

	# capture stderr, send stdout to /dev/null
	my $command = "$gst_inspect $element 2>&1 1>/dev/null";
	
	my @lines = `$command`;

	while ($_ = shift(@lines)){
		# ignore INFO lines, they are ok
		if (! /INFO/){
			print $_;
			
			# do this to ignore empty lines
			if (length > 1){
				$num_warnings++;
			}
		}
	}
	system("$gst_inspect $element 2>/dev/null 1>/dev/null");
	if ($? != 0){
		my $exit_value  = $? >> 8;
		my $signal_num  = $? & 127;
		my $dumped_core = $? & 128;
		if ($exit_value){
			print("error value on exit: $exit_value\n");
		}
		if ($signal_num){
			print("signal caused exit: $signal_num\n");
		}
		if ($dumped_core){
			print("dumped core: $dumped_core\n");
		}
		$num_warnings++
	}
}

### main

exit check_all_elements ();