use ExtUtils::MakeMaker; my $have_yapp = eval { require Parse::Yapp ; 1 }; my $have_gvpy = eval { require GraphViz::Parse::Yapp; 1 }; warn <<'NO_HAVE_END' unless $have_yapp && $have_gvpy; Only if you plan on altering XML::Filter::Dispatcher::Parser ============================================================ NO_HAVE_END warn <<'NO_HAVE_END' unless $have_yapp ; You'll need to install Parse::Yapp to rebuild XML::Filter::Dispatcher::Parser from xfdxpath.yp To do this, install Parse::Yapp and redo "perl Makefile.PL". This will add a rule to the Makefile to rebuild Grammar.pm from xfdxpath.yp. NO_HAVE_END warn <<'NO_HAVE_END' unless $have_gvpy ; Optionally, you may want to graph the grammar. Install GraphViz::Parse::Yapp and redo "perl Makefile.PL". Then do a "make xfdxpath.png" to build a (large!) xfdxpath.png file, or "make xfdxpath.dot" to make a file you can play with using dotty. NO_HAVE_END my %soft_prereqs; $soft_prereqs{Devel::TraceSAX} = 0.021 if eval "use Devel::TraceSAX; 1"; WriteMakefile( NAME => 'XML::Filter::Dispatcher', VERSION_FROM => 'lib/XML/Filter/Dispatcher.pm', EXE_FILES => [qw( bin/xfd_dump )], PREREQ_PM => { XML::SAX::Base => 0, XML::NamespaceSupport => 0, XML::SAX::EventMethodMaker => 0, XML::SAX::ParserFactory => 0, %soft_prereqs, }, ); sub MY::libscan { package MY; my $self = shift; my ( $path ) = @_; return '' if /\.sw[a-z]$/; return '' unless length $self->SUPER::libscan( $path ); return $path; } # Note the literal tabes herein sub MY::postamble { return $have_yapp ? <<'POSTAMBLE_END' : '' } lib/XML/Filter/Dispatcher/Parser.pm : xfdxpath.yp yapp -m XML::Filter::Dispatcher::Parser \ -o lib/XML/Filter/Dispatcher/Parser.pm \ -s \ xfdxpath.yp xfdxpath.output: xfdxpath.yp yapp -v xfdxpath.yp xfdxpath.png: xfdxpath.output $(PERL) -MGraphViz::Parse::Yapp \ -e 'binmode STDOUT; print GraphViz::Parse::Yapp->new( "xfdxpath.output" )->as_png' \ > xfdxpath.png xfdxpath.dot: xfdxpath.output $(PERL) -MGraphViz::Parse::Yapp \ -e 'binmode STDOUT; print GraphViz::Parse::Yapp->new( "xfdxpath.output" )->as_dot' \ > xfdxpath.dot POSTAMBLE_END