The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use warnings;

use File::Basename;

use Path::Iterator::Rule;

# -------------
# Phase 1: Get the files already seen.

my($rule) = Path::Iterator::Rule -> new;

my(%seen);

# Skip special cases:

$seen{META}        = 1; # Not a *.gv file.
$seen{b15}         = 1; # Illegal utf8.
$seen{b34}         = 1;
$seen{b56}         = 1;
$seen{b60}         = 1;
$seen{Latin1}      = 1;
$seen{inv_inv}     = 1; # Uses external file (image, *.ps).
$seen{inv_nul}     = 1;
$seen{inv_val}     = 1;
$seen{nul_inv}     = 1;
$seen{nul_nul}     = 1;
$seen{nul_val}     = 1;
$seen{val_inv}     = 1;
$seen{val_nul}     = 1;
$seen{val_val}     = 1;
$seen{pslib}       = 1;
$seen{user_shapes} = 1;
$seen{tee}         = 1; # Causes a segfault.

for my $file ($rule -> name(qr/\.gv$/) -> all('./xt/author/data') )
{
	$seen{basename($file, '.gv')} = 1;
}

# Phase 2: Get the files not already seen.

$rule     = Path::Iterator::Rule -> new;
my($next) = $rule -> name(qr/\.gv$/) -> size('< 10k') -> iter("$ENV{HOME}/Downloads/Graphviz/graphviz-2.38.0");

my($basename);

while (defined(my $file = $next -> () ) )
{
	$basename = basename($file, '.gv');

	next if ($seen{$basename} || ($file =~ m|tclpkg/gv/META.gv|) );

	print "$file\n";
}