###	SPAR <http://www.cpan.org/scripts/>
###	2	644	1236523730	1380398298	hint
This tests add-on utilities for analyzing your build.  The failure
likely does not imply a problem with makepp itself.
###	2	644	1216325548	1337890922	is_relevant.pl
(Cwd::cwd =~ tr!/!!) > 3 &&	# Deep enough with tdir for rewriting cwd 4 levels?
  have_cc
###	52	644	1170452082	1473534199	makepp_test_script.pl
{ open my $fh, '>', 'c/c.h' }
utime 0, 0, 'c/c.h';		# Make sure this exists (because makeppclean removes it) and is old.
if( (stat 'c/c.h')[9] ) {	# mtime unchanged on this fs (but utime may have lied in its return code)
  wait_timestamp 'c/c.h';	# Wait for a newer second than mtime to start.
  open my $fh, '+<', 'c/c.h.in';
  print $fh '#';		# Rewrite first char to force mtime change.
}

makepp '--dont-build=/', '--do-build=.'; # Can't have a RootMakeppfile because that sorts output
				# differently on a case insensitive fs or Ebcdic, so explicitly
				# protect against logging stuff outside of our build system.
c_grep '-v', '/changed without my knowledge/ .. /but you got lucky/', '-o+<.makepp/log';

my $_k = '-k!-c !PARSE !NOT_FOUND !VERSION'; # !-c is special for portable test
makepp \'log', '-ciKnuokey.txt', $_k; # $(CC) varies and thus the parsed cmd
				# and $(FC) may not be found on Windows.
makepp \'log', '-cipuolog.txt', "$_k !LEX_RULE !SCAN*";

makepp \'graph';

# The loaded modules trigger some magic, efficiently creating more variants than the options ask for.
sub makeppgraph($) {
  my( $file, @args ) = @{$_[0]};
  makepp \'graph', '-I.', '-Mall_types', "-o$file.udg", @args;
}
makeppgraph $_ for
  [full => '-l.makepp/log', '-bDir', '&cwd || &makepp'],
  [suf => '-l.makepp/', '-Dir', '(&cwd || undef $_) && &suf'],
  [dir => '-l.makepp', '-bDir', '&dir && (&cwd || &makepp)'],
  [dirplain => '-l.makepp', '-bDipr', '&dir && (&cwd || &makepp)'],
  [dirsep => '-l.makepp', '-bDisr', '&dir && (&cwd || &makepp)'],
  [dirsepplain => '-l.makepp', '-bDispr', '&dir && (&cwd || &makepp)'],
  (is_windows < 1 ?
   [both => '-Mboth_up_down', '-l.', '-bDi', 'c/c.h', 'makepp.mk'] :
   ()); # b/b.o gets added to up by both_up_down

if( is_windows ) {
  if( is_windows > 0 ) {
    makeppgraph $_ for		# both_up_down fork hack doesn't work, so do one by one.
      [both => '-l.', '-bDi', 'c/c.h', 'makepp.mk'],
      [down => '-l.', '-bDid', 'c/c.h', 'makepp.mk'],
      [up => '-l.', '-bDiu', 'c/c.h', 'makepp.mk', 'b/b.o', 'b/b.obj'];
    unlink 'answers/rewrite.txt', # Tests Unix dirs that don't exist.
      <answers/*.{dot,html,udg}>; # For lack of reliable redirection in fork, we don't produce these files.
  }
  $Mpp::mod_answer = sub {
    $_[1] =~ s/.*makepp_builtin_rules\.mk:(?:3[67]|42)\b.*//s || $_[1] =~ s/\.obj\b/.o/g
      if $_[0] =~ /^(?:both|full|key|log|suf|up)\.(?:dot|html|txt|udg)$/;
  };
}

1;
###	29	644	1170452082	1185994720	makefile
perl {
  $Mpp::CommandParser::ignore_exe = 1; # Don't have some path to compiler in log
}

include makepp.mk
include makepp1.mk

ifeq a 1
or ifeq a,2
or ifeq(a,a)
$(phony all): a
endif

# force a BECAUSE edge
c/c.h: c/c.h.in: build_check target_newer
	&cp -fl $(input) $(output)

_OBJ_SUFFIX := $(filter %cl %cl.exe %bcc32 %bcc32.exe, $(CC))
ifdef _OBJ_SUFFIX
  _OBJ_SUFFIX := .obj
else
  _OBJ_SUFFIX := .o
endif

a: $( a b/b c/c)$(_OBJ_SUFFIX)
	$(infer_linker $(inputs)) $(inputs) $(LDLIBS) $(LDFLAGS) $(LIBS) -o $(output)
    ifperl Mpp::is_windows
	&mv a.exe a
    endif
###	1	644	1170452082	1166207798	makepp.mk
include makepp1.mk
###	0	644	1170452082	1166207809	makepp1.mk
###	78	644	1170452082	1234386321	both_up_down.pm
use Mpp::File;
sub rewrite_test {
  my $pref = absolute_filename $CWD_INFO;
  package Mpp::Rewrite;
  my $result = "cwd:\n";
  for my $arg ( 0, 1, 2, 4 ) {
    for my $file ( '', qw(/ /a /a/b) ) {
      local $_ = $pref.$file;
      cwd $arg or die "failed cwd $arg: $_\n";
      $result .= " $_";

      $_ = $pref.$file;
      cwd $arg, ':' or die "failed cwd $arg, ':': $_\n";
      $result .= " $_";

      $_ = $pref.$file;
      cwd $arg, ':', '' or die "failed cwd $arg, ':', '': $_\n";
      $result .= " $_";
    }
    $result .= "\n";
    $pref =~ s!/[^/]+$!!;
  }

  $result .= "dir:\n";
  for( qw(/ /bin /usr/bin /usr/bin/id /a/b/c |a| |a|b |a|b/c |a|b/c/d) ) {
    local $_ = $_;
    &dir;
    $result .= "$_\n";
  }

  $result .= "usr:\n";
  for( qw(/lib /bin /usr/lib /usr/share /usr/local/include /usr/local/lib /usr/X11/bin /usr/X11R6/lib /nogo /tmp/nogo) ) {
    for my $file ( '', qw(a a/b a/b/c) ) {
      local $_ = $file ? "$_/$file" : $_;
      &usr;
      $result .= " $_";
    }
    $result .= "\n";
  }

  $result .= "suf:\n";
  for( qw(f.x a/f.x a/b/f.x a/b/c/f.x
	  /f.x /a/f.x /a/b/f.x /a/b/c/f.x
	  ~/f.x ~/a/f.x ~/a/b/f.x ~/a/b/c/f.x
	  ~a/f.x ~a/b/f.x ~a/b/c/f.x
	  |a|f.x |a|b/f.x |a|b/c/f.x) ) {
    $result .= $_;
    for my $arg (-3, -2, -1, undef, 0, 1, 2, 3) {
      local $_ = $_;
      suf $arg;
      $result .= (defined $arg ? " $arg:" : ' undef:') . $_;
    }
    $result .= "\n";
  }

  open my $fh, '>rewrite.txt';
  print $fh $result;
}

$Mpp::both_up_down = sub {
  &rewrite_test;
  my( $outfile, $up, $down ) = @_;
  if( Mpp::is_windows > 1 ) {
  } elsif( !fork ) {
    if( !fork ) {
      $$up = 1;
      push @ARGV, 'b/b.o', Mpp::is_windows ? 'b/b.obj' : ();
      $$outfile =~ s/\bboth\b/up/;
    } else {
      wait;
      $$down = 1;
      $$outfile =~ s/\bboth\b/down/;
    }
    open STDOUT, '>', $$outfile or die "can't write `$$outfile'--$!";
  } else {
    wait;
  }
}
###	23	644	1170452082	1208530258	all_types.pm
# Fan out into one process per output format.
$Mpp::all_types = sub {
  my( $outfile, $type ) = @_;
  if( Mpp::is_windows > 1 || !fork ) {
    $$type = 'txt';
    $outfile =~ s/udg$/txt/;
    open STDOUT, '>', $outfile or die "can't write `$outfile'--$!";
  } elsif( !fork ) {
    $$type = 'html';
    $outfile =~ s/udg$/html/;
    open STDOUT, '>', $outfile or die "can't write `$outfile'--$!";
  } elsif( !fork ) {
    $$type = 'dot';
    $outfile =~ s/udg$/dot/;
    open STDOUT, '>', $outfile or die "can't write `$outfile'--$!";
  } else {
    1 while -1 < wait;
  }
};

# Replace makepp dir with abbreviation <m> (instead of std |m|, due to Ebcdic sorting).
no warnings 'redefine';
sub Mpp::Rewrite::makepp() { defined and s!^$Mpp::datadir(?:/|$|(?=:))!<m>! }
###	6	644	1170452082	1166207697	a.c
#include "a.h"
#include "b/b.h"
#include "c/c.h"
#include "a1.h"

int main() { return 0; }
###	4	644	1170452082	1166207305	a.h
#ifndef A_H
#define A_H
#include "a1.h"
#endif
###	4	644	1170452082	1166207328	a1.h
#ifndef A1_H
#define A1_H
#include "a.h"
#endif
###	D	755	1170452082	1170451981	b/
###	5	644	1170452082	1166207697	b/b.c
#include "b.h"
#include "b1.h"
#include "../a.h"

int b() { return 0; }
###	4	644	1170452082	1166207305	b/b.h
#ifndef B_H
#define B_H
#include "b1.h"
#endif
###	4	644	1170452082	1166207328	b/b1.h
#ifndef B1_H
#define B1_H
#include "b.h"
#endif
###	D	755	1170452082	1170451981	c/
###	6	644	1170452082	1166207697	c/c.c
#include "c.h"
#include "c1.h"
#include "../a.h"
#include "../b/b.h"

int c() { return 0; }
###	3	644	1170452082	1166207305	c/c.h.in
#ifndef C_H
#define C_H
#endif
###	4	644	1170452082	1166207328	c/c1.h
#ifndef C1_H
#define C1_H
#include "c.h"
#endif
###	D	755	1170452156	1170451970	answers/
###	-34	644	1187271600	1197503241	answers/both.dot
// Generated by makeppgraph
digraph a {
rankdir=LR
outputorder=edgesfirst
node [shape=box style=filled fillcolor="#ffffffe0"]
edge [dir=back]
a [label="a" style="filled,bold" color=red]
b [label="a.o" fillcolor="#e8e8e8e0" style="filled,bold" color=red]
a -> b
c [label="c/c.o" fillcolor="#e8e8e8e0" style="filled,bold" color=red]
a -> c
d [label="a.c" fillcolor="#f8a808e0"]
e [label="c/c.h" fillcolor="#f8e800e0"]
d -> e [style=dotted]
b -> d
b -> e
f [label="all" shape=ellipse]
f -> a
g [label="c/c.c" fillcolor="#f8a808e0"]
g -> e [style=dotted]
h [label="c/c1.h" fillcolor="#f8e800e0"]
g -> h [style=dotted]
i [label="c/c.h.in"]
e -> i [style=bold color=red]
c -> g
c -> e
c -> h
h -> e [style=dotted]
j [label="makefile" fillcolor="#0090e0e0"]
k [label="makepp.mk" fillcolor="#0090e0e0"]
j -> k [style=dotted]
l [label="makepp1.mk" fillcolor="#0090e0e0"]
k -> l [style=dotted]
}
###	17	644	1187271577	1187268248	answers/both.txt
all {phony}
  a {because}
    a.o {because}
      a.c
        {include} c/c.h
          {because} c/c.h.in
      c/c.h {repeated}
    c/c.o {because}
      c/c.c
        {include} c/c.h {repeated}
        {include} c/c1.h
          {include} c/c.h {repeated}
      c/c.h {repeated}
      c/c1.h {repeated}
makefile
  {include} makepp.mk
    {include} makepp1.mk
###	-41	644	1187271600	1187268248	answers/both.udg
[
l("a",n("",[a("OBJECT","makepp.mk"),a("COLOR","#0090e0")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],l("b",n("",[a("OBJECT","makepp1.mk"),a("COLOR","#0090e0")],[
]))
),
]))
,l("c",n("",[a("OBJECT","makefile"),a("COLOR","#0090e0")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("a")),
]))
,l("d",n("",[a("OBJECT","c/c1.h"),a("COLOR","#f8e800")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],l("e",n("",[a("OBJECT","c/c.h"),a("COLOR","#f8e800")],[
e("",[a("EDGEPATTERN","thick"),a("EDGECOLOR","#ff0000"),a("_DIR","first")],l("f",n("",[a("OBJECT","c/c.h.in")],[
]))
),
]))
),
]))
,l("g",n("",[a("OBJECT","c/c.o"),a("COLOR","#e8e8e8"),a("BORDER","double")],[
e("",[a("_DIR","first")],r("d")),
e("",[a("_DIR","first")],r("e")),
e("",[a("_DIR","first")],l("h",n("",[a("OBJECT","c/c.c"),a("COLOR","#f8a808")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("d")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("e")),
]))
),
]))
,l("i",n("",[a("OBJECT","all"),a("_GO","ellipse")],[
e("",[a("_DIR","first")],l("j",n("",[a("OBJECT","a"),a("BORDER","double")],[
e("",[a("_DIR","first")],r("g")),
e("",[a("_DIR","first")],l("k",n("",[a("OBJECT","a.o"),a("COLOR","#e8e8e8"),a("BORDER","double")],[
e("",[a("_DIR","first")],r("e")),
e("",[a("_DIR","first")],l("l",n("",[a("OBJECT","a.c"),a("COLOR","#f8a808")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("e")),
]))
),
]))
),
]))
),
]))
,]
###	-25	644	1187268256	1197503252	answers/dir.dot
// Generated by makeppgraph
digraph a {
rankdir=LR
outputorder=edgesfirst
node [shape=box style=filled fillcolor="#ffffffe0"]
edge [dir=back]
a [label="." style="filled,bold" color=red shape=ellipse]
a -> a
a -> a [style=dotted]
b [label="<m>"]
a -> b [style=dotted]
c [label="b" style="filled,bold" color=red]
a -> c [dir=both]
a -> c [style=dotted dir=both]
d [label="c" style="filled,bold" color=red]
a -> d [dir=both]
a -> d [style=dotted dir=both]
b -> b [style=dotted]
c -> c
c -> c [style=dotted]
d -> c
d -> c [style=dotted]
d -> d [style=bold color=red]
d -> d [style=dotted]
}
###	15	644	1187269252	1187268248	answers/dir.txt
. {because,phony}
  . {repeated}
  {include} . {repeated}
  {include} <m>
    {include} <m> {repeated}
  {bidirectional} b {because}
    {include,bidirectional} . {repeated}
    b {repeated}
    {include} b {repeated}
  {bidirectional} c {because}
    {include,bidirectional} . {repeated}
    b {repeated}
    {include} b {repeated}
    {because} c {repeated}
    {include} c {repeated}
###	-24	644	1187268977	1187268248	answers/dir.udg
[
l("a",n("",[a("OBJECT","c"),a("BORDER","double")],[
e("",[a("EDGEPATTERN","thick"),a("EDGECOLOR","#ff0000"),a("_DIR","first")],r("a")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("a")),
e("",[a("_DIR","first")],l("b",n("",[a("OBJECT","b"),a("BORDER","double")],[
e("",[a("_DIR","first")],r("b")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("b")),
e("",[a("_DIR","both")],l("c",n("",[a("OBJECT","."),a("BORDER","double"),a("_GO","ellipse")],[
e("",[a("_DIR","both")],r("a")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","both")],r("a")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","both")],r("b")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],l("d",n("",[a("OBJECT","<m>")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("d")),
]))
),
e("",[a("_DIR","first")],r("c")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("c")),
]))
),
]))
),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("b")),
]))
,]
###	-19	644	1187268257	1197503254	answers/dirplain.dot
// Generated by makeppgraph
digraph a {
rankdir=LR
outputorder=edgesfirst
node [shape=box style=filled fillcolor="#ffffffe0"]
edge [dir=back]
a [label="."]
a -> a
b [label="<m>"]
a -> b
c [label="b"]
a -> c [dir=both]
d [label="c"]
a -> d [dir=both]
b -> b
c -> c
d -> c
d -> d
}
###	9	644	1187269258	1187268248	answers/dirplain.txt
.
  .
  <m>
    <m>
  b
    b
  c
    b
    c
###	-18	644	1187268977	1187268248	answers/dirplain.udg
[
l("a",n("",[a("OBJECT","c")],[
e("",[a("_DIR","first")],r("a")),
e("",[a("_DIR","first")],l("b",n("",[a("OBJECT","b")],[
e("",[a("_DIR","first")],r("b")),
e("",[a("_DIR","both")],l("c",n("",[a("OBJECT",".")],[
e("",[a("_DIR","both")],r("a")),
e("",[a("_DIR","first")],l("d",n("",[a("OBJECT","<m>")],[
e("",[a("_DIR","first")],r("d")),
]))
),
e("",[a("_DIR","first")],r("c")),
]))
),
]))
),
]))
,]
###	-29	644	1187268256	1197503256	answers/dirsep.dot
// Generated by makeppgraph
digraph a {
rankdir=LR
outputorder=edgesfirst
node [shape=box style=filled fillcolor="#ffffffe0"]
edge [dir=back]
a [label="." style="filled,bold" color=red shape=ellipse]
a -> a
a -> a [style=dotted]
b [label="<m>"]
a -> b [style=dotted]
c [label="b" style="filled,bold" color=red]
a -> c
a -> c [style=dotted]
d [label="c" style="filled,bold" color=red]
a -> d
a -> d [style=dotted]
b -> b [style=dotted]
c -> a
c -> a [style=dotted]
c -> c
c -> c [style=dotted]
d -> a
d -> a [style=dotted]
d -> c
d -> c [style=dotted]
d -> d [style=bold color=red]
d -> d [style=dotted]
}
###	19	644	1187269343	1187268248	answers/dirsep.txt
. {because,phony}
  . {repeated}
  {include} . {repeated}
  {include} <m>
    {include} <m> {repeated}
  b {because}
    . {repeated}
    {include} . {repeated}
    b {repeated}
    {include} b {repeated}
  {include} b {because}
  c {because}
    . {repeated}
    {include} . {repeated}
    b {repeated}
    {include} b {repeated}
    {because} c {repeated}
    {include} c {repeated}
  {include} c {because}
###	-28	644	1187268977	1187268248	answers/dirsep.udg
[
l("a",n("",[a("OBJECT","c"),a("BORDER","double")],[
e("",[a("EDGEPATTERN","thick"),a("EDGECOLOR","#ff0000"),a("_DIR","first")],r("a")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("a")),
e("",[a("_DIR","first")],l("b",n("",[a("OBJECT","b"),a("BORDER","double")],[
e("",[a("_DIR","first")],r("b")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("b")),
e("",[a("_DIR","first")],l("c",n("",[a("OBJECT","."),a("BORDER","double"),a("_GO","ellipse")],[
e("",[a("_DIR","first")],r("a")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("a")),
e("",[a("_DIR","first")],r("b")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("b")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],l("d",n("",[a("OBJECT","<m>")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("d")),
]))
),
e("",[a("_DIR","first")],r("c")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("c")),
]))
),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("c")),
]))
),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("b")),
e("",[a("_DIR","first")],r("c")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("c")),
]))
,]
###	-21	644	1187268284	1197503257	answers/dirsepplain.dot
// Generated by makeppgraph
digraph a {
rankdir=LR
outputorder=edgesfirst
node [shape=box style=filled fillcolor="#ffffffe0"]
edge [dir=back]
a [label="."]
a -> a
b [label="<m>"]
a -> b
c [label="b"]
a -> c
d [label="c"]
a -> d
b -> b
c -> a
c -> c
d -> a
d -> c
d -> d
}
###	11	644	1187269295	1187268248	answers/dirsepplain.txt
.
  .
  <m>
    <m>
  b
    .
    b
  c
    .
    b
    c
###	-20	644	1187268977	1187268248	answers/dirsepplain.udg
[
l("a",n("",[a("OBJECT","c")],[
e("",[a("_DIR","first")],r("a")),
e("",[a("_DIR","first")],l("b",n("",[a("OBJECT","b")],[
e("",[a("_DIR","first")],r("b")),
e("",[a("_DIR","first")],l("c",n("",[a("OBJECT",".")],[
e("",[a("_DIR","first")],r("a")),
e("",[a("_DIR","first")],r("b")),
e("",[a("_DIR","first")],l("d",n("",[a("OBJECT","<m>")],[
e("",[a("_DIR","first")],r("d")),
]))
),
e("",[a("_DIR","first")],r("c")),
]))
),
]))
),
e("",[a("_DIR","first")],r("c")),
]))
,]
###	-13	644	1187271908	1197503258	answers/down.dot
// Generated by makeppgraph
digraph a {
rankdir=LR
outputorder=edgesfirst
node [shape=box style=filled fillcolor="#ffffffe0"]
edge [dir=back]
a [label="c/c.h" fillcolor="#f8e800e0"]
b [label="c/c.h.in"]
a -> b [style=bold color=red]
c [label="makepp.mk" fillcolor="#0090e0e0"]
d [label="makepp1.mk" fillcolor="#0090e0e0"]
c -> d [style=dotted]
}
###	4	644	1187271856	1187268248	answers/down.txt
c/c.h
  {because} c/c.h.in
makepp.mk
  {include} makepp1.mk
###	-12	644	1187271908	1187268248	answers/down.udg
[
l("a",n("",[a("OBJECT","makepp.mk"),a("COLOR","#0090e0")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],l("b",n("",[a("OBJECT","makepp1.mk"),a("COLOR","#0090e0")],[
]))
),
]))
,l("c",n("",[a("OBJECT","c/c.h"),a("COLOR","#f8e800")],[
e("",[a("EDGEPATTERN","thick"),a("EDGECOLOR","#ff0000"),a("_DIR","first")],l("d",n("",[a("OBJECT","c/c.h.in")],[
]))
),
]))
,]
###	-69	644	1187273298	1197503259	answers/full.dot
// Generated by makeppgraph
digraph a {
rankdir=LR
outputorder=edgesfirst
node [shape=box style=filled fillcolor="#ffffffe0"]
edge [dir=back]
a [label="<m>makepp_default_makefile.mk" fillcolor="#0090e0e0"]
b [label="<m>makepp_builtin_rules.mk" fillcolor="#0090e0e0"]
a -> b [style=dotted]
c [label="a" style="filled,bold" color=red]
d [label="a.o" fillcolor="#e8e8e8e0" style="filled,bold" color=red]
c -> d
e [label="b/b.o" fillcolor="#e8e8e8e0" style="filled,bold" color=red]
c -> e
f [label="c/c.o" fillcolor="#e8e8e8e0" style="filled,bold" color=red]
c -> f
g [label="a.c" fillcolor="#f8a808e0"]
h [label="a.h" fillcolor="#f8e800e0"]
g -> h [style=dotted]
i [label="a1.h" fillcolor="#f8e800e0"]
g -> i [style=dotted]
j [label="b/b.h" fillcolor="#f8e800e0"]
g -> j [style=dotted]
k [label="c/c.h" fillcolor="#f8e800e0"]
g -> k [style=dotted]
h -> i [style=dotted dir=both]
d -> g
d -> h
d -> i
d -> j
l [label="b/b1.h" fillcolor="#f8e800e0"]
d -> l
d -> k
m [label="all" shape=ellipse]
m -> c
n [label="b/b.c" fillcolor="#f8a808e0"]
n -> h [style=dotted]
n -> j [style=dotted]
n -> l [style=dotted]
j -> l [style=dotted dir=both]
e -> h
e -> i
e -> n
e -> j
e -> l
o [label="c/c.c" fillcolor="#f8a808e0"]
o -> h [style=dotted]
o -> j [style=dotted]
o -> k [style=dotted]
p [label="c/c1.h" fillcolor="#f8e800e0"]
o -> p [style=dotted]
q [label="c/c.h.in"]
k -> q [style=bold color=red]
f -> h
f -> i
f -> j
f -> l
f -> o
f -> k
f -> p
p -> k [style=dotted]
r [label="makefile" fillcolor="#0090e0e0"]
r -> b [style=dotted]
s [label="makepp.mk" fillcolor="#0090e0e0"]
r -> s [style=dotted]
t [label="makepp1.mk" fillcolor="#0090e0e0"]
r -> t [style=dotted]
s -> t [style=dotted]
}
###	162	644	1197628172	1324772167	answers/full.html
<html>
<meta name='generator' content='makeppgraph' />
<style>
a { border: 1px dotted #bbb; padding-left: 1ex; padding-right: 1ex; }
b { font-weight: normal; border: 1px solid; padding-left: 1ex; padding-right: 1ex; }
ul ul { border-left: 1px dotted #bbb; }
ul { margin: 0; padding-left: 1em; }
li { list-style: square; padding: 0; padding-top: 3px; }
li.fold { list-style: disc; }
li.fold > b { cursor: n-resize; }
li.unfold { list-style: circle; }
li.unfold > b { cursor: s-resize; }
.flash { background-color: yellow; }
/* Actually show and hide sublists */
li.fold ul { display: block; }
li.unfold ul { display: none; }
</style>
<script>
// Inspired by Stuart Langridge, www.kryogenix.org/code/browser/aqlists/
function foldify( ul ) {
  if( !ul.childNodes || ul.childNodes.length == 0 ) return;
  // Iterate LIs
  for( var itemi = 0; itemi < ul.childNodes.length; itemi++ ) {
    var item = ul.childNodes[itemi];
    if( item.nodeName == "LI" ) {
      // Iterate things in this LI
      var b;
      for( var sitemi = 0; sitemi < item.childNodes.length; sitemi++ ) {
        var sitem = item.childNodes[sitemi];
        switch( sitem.nodeName ) {
          case "B": b = sitem; break;
          case "UL": foldify(sitem);
            item.className = 'fold';
            b.title = 'click to (un)fold, double click to unfold all';
            b.onclick = function() {
              this.parentNode.className = (this.parentNode.className=='fold') ? 'unfold' : 'fold';
              return false;
            };
            b.ondblclick = function() {
              foldify( this.parentNode.parentNode.getElementsByTagName( "ul" )[0] );
              return false;
            };
        }
      }
    }
  }
}
var last;
function flash( id ) {
  if( id )
    (last = document.getElementById( id )).className = 'flash'
  else
    last.className = '';
}
</script>
<body onload='foldify( document.getElementsByTagName( "ul" )[1] )'>
<table align='right' style='border: 1px solid; background-color: #dfd; padding: 3px; padding-top: 0'><tr><td>
<ul>
  <li id='_a' class='fold'>subtree</li>
  <li class='unfold'>folded subtree</li>
  <li>leaf</li>
  <li style='list-style: none'><b>file</b></li>
  <li style='list-style: none'><b style='border: 1px dashed'>phony</b></li>
  <li style='list-style: none'><a href='#_a' onmouseover="flash( '_a' );" onmouseout="flash();">repeated</a></li>
</ul>
&#x2190; dependency<br />
&#x2191; include
</td></tr></table>
<ul>
  <li id='a'><b style="background-color: #0090e0">&lt;m&gt;makepp_default_makefile.mk</b>
    <ul>
      <li id='b'>&#x2191; <b style="background-color: #0090e0">&lt;m&gt;makepp_builtin_rules.mk</b></li>
    </ul>
  </li>
  <li id='c'><b style="border: 1px dashed">all</b>
    <ul>
      <li id='d'>&#x2190;<b style="border-color: red">a</b>
        <ul>
          <li id='e'>&#x2190;<b style="background-color: #e8e8e8; border-color: red">a.o</b>
            <ul>
              <li id='f'>&#x2190;<b style="background-color: #f8a808">a.c</b>
                <ul>
                  <li id='g'>&#x2191; <b style="background-color: #f8e800">a.h</b>
                    <ul>
                      <li id='h'>&#x2195; <b style="background-color: #f8e800">a1.h</b></li>
                    </ul>
                  </li>
                  <li>&#x2191; <a href='#h' onmouseover="flash( 'h' );" onmouseout="flash();">a1.h</a></li>
                  <li id='i'>&#x2191; <b style="background-color: #f8e800">b/b.h</b>
                    <ul>
                      <li id='j'>&#x2195; <b style="background-color: #f8e800">b/b1.h</b></li>
                    </ul>
                  </li>
                  <li id='k'>&#x2191; <b style="background-color: #f8e800">c/c.h</b>
                    <ul>
                      <li id='l'><span style="color: red">&#x2190;</span><b>c/c.h.in</b></li>
                    </ul>
                  </li>
                </ul>
              </li>
              <li>&#x2190;<a href='#g' onmouseover="flash( 'g' );" onmouseout="flash();">a.h</a></li>
              <li>&#x2190;<a href='#h' onmouseover="flash( 'h' );" onmouseout="flash();">a1.h</a></li>
              <li>&#x2190;<a href='#i' onmouseover="flash( 'i' );" onmouseout="flash();">b/b.h</a></li>
              <li>&#x2190;<a href='#j' onmouseover="flash( 'j' );" onmouseout="flash();">b/b1.h</a></li>
              <li>&#x2190;<a href='#k' onmouseover="flash( 'k' );" onmouseout="flash();">c/c.h</a></li>
            </ul>
          </li>
          <li id='m'>&#x2190;<b style="background-color: #e8e8e8; border-color: red">b/b.o</b>
            <ul>
              <li>&#x2190;<a href='#g' onmouseover="flash( 'g' );" onmouseout="flash();">a.h</a></li>
              <li>&#x2190;<a href='#h' onmouseover="flash( 'h' );" onmouseout="flash();">a1.h</a></li>
              <li id='n'>&#x2190;<b style="background-color: #f8a808">b/b.c</b>
                <ul>
                  <li>&#x2191; <a href='#g' onmouseover="flash( 'g' );" onmouseout="flash();">a.h</a></li>
                  <li>&#x2191; <a href='#i' onmouseover="flash( 'i' );" onmouseout="flash();">b/b.h</a></li>
                  <li>&#x2191; <a href='#j' onmouseover="flash( 'j' );" onmouseout="flash();">b/b1.h</a></li>
                </ul>
              </li>
              <li>&#x2190;<a href='#i' onmouseover="flash( 'i' );" onmouseout="flash();">b/b.h</a></li>
              <li>&#x2190;<a href='#j' onmouseover="flash( 'j' );" onmouseout="flash();">b/b1.h</a></li>
            </ul>
          </li>
          <li id='o'>&#x2190;<b style="background-color: #e8e8e8; border-color: red">c/c.o</b>
            <ul>
              <li>&#x2190;<a href='#g' onmouseover="flash( 'g' );" onmouseout="flash();">a.h</a></li>
              <li>&#x2190;<a href='#h' onmouseover="flash( 'h' );" onmouseout="flash();">a1.h</a></li>
              <li>&#x2190;<a href='#i' onmouseover="flash( 'i' );" onmouseout="flash();">b/b.h</a></li>
              <li>&#x2190;<a href='#j' onmouseover="flash( 'j' );" onmouseout="flash();">b/b1.h</a></li>
              <li id='p'>&#x2190;<b style="background-color: #f8a808">c/c.c</b>
                <ul>
                  <li>&#x2191; <a href='#g' onmouseover="flash( 'g' );" onmouseout="flash();">a.h</a></li>
                  <li>&#x2191; <a href='#i' onmouseover="flash( 'i' );" onmouseout="flash();">b/b.h</a></li>
                  <li>&#x2191; <a href='#k' onmouseover="flash( 'k' );" onmouseout="flash();">c/c.h</a></li>
                  <li id='q'>&#x2191; <b style="background-color: #f8e800">c/c1.h</b>
                    <ul>
                      <li>&#x2191; <a href='#k' onmouseover="flash( 'k' );" onmouseout="flash();">c/c.h</a></li>
                    </ul>
                  </li>
                </ul>
              </li>
              <li>&#x2190;<a href='#k' onmouseover="flash( 'k' );" onmouseout="flash();">c/c.h</a></li>
              <li>&#x2190;<a href='#q' onmouseover="flash( 'q' );" onmouseout="flash();">c/c1.h</a></li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li id='r'><b style="background-color: #0090e0">makefile</b>
    <ul>
      <li>&#x2191; <a href='#b' onmouseover="flash( 'b' );" onmouseout="flash();">&lt;m&gt;makepp_builtin_rules.mk</a></li>
      <li id='s'>&#x2191; <b style="background-color: #0090e0">makepp.mk</b>
        <ul>
          <li id='t'>&#x2191; <b style="background-color: #0090e0">makepp1.mk</b></li>
        </ul>
      </li>
      <li>&#x2191; <a href='#t' onmouseover="flash( 't' );" onmouseout="flash();">makepp1.mk</a></li>
    </ul>
  </li>
</ul>
</body>
</html>
###	45	644	1187273271	1187268248	answers/full.txt
<m>makepp_default_makefile.mk
  {include} <m>makepp_builtin_rules.mk
all {phony}
  a {because}
    a.o {because}
      a.c
        {include} a.h
          {include,bidirectional} a1.h
        {include} a1.h {repeated}
        {include} b/b.h
          {include,bidirectional} b/b1.h
        {include} c/c.h
          {because} c/c.h.in
      a.h {repeated}
      a1.h {repeated}
      b/b.h {repeated}
      b/b1.h {repeated}
      c/c.h {repeated}
    b/b.o {because}
      a.h {repeated}
      a1.h {repeated}
      b/b.c
        {include} a.h {repeated}
        {include} b/b.h {repeated}
        {include} b/b1.h {repeated}
      b/b.h {repeated}
      b/b1.h {repeated}
    c/c.o {because}
      a.h {repeated}
      a1.h {repeated}
      b/b.h {repeated}
      b/b1.h {repeated}
      c/c.c
        {include} a.h {repeated}
        {include} b/b.h {repeated}
        {include} c/c.h {repeated}
        {include} c/c1.h
          {include} c/c.h {repeated}
      c/c.h {repeated}
      c/c1.h {repeated}
makefile
  {include} <m>makepp_builtin_rules.mk {repeated}
  {include} makepp.mk
    {include} makepp1.mk
  {include} makepp1.mk {repeated}
###	-84	644	1187273298	1187268248	answers/full.udg
[
l("a",n("",[a("OBJECT","makepp.mk"),a("COLOR","#0090e0")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],l("b",n("",[a("OBJECT","makepp1.mk"),a("COLOR","#0090e0")],[
]))
),
]))
,l("c",n("",[a("OBJECT","makefile"),a("COLOR","#0090e0")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("b")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("a")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],l("d",n("",[a("OBJECT","<m>makepp_builtin_rules.mk"),a("COLOR","#0090e0")],[
]))
),
]))
,l("e",n("",[a("OBJECT","c/c1.h"),a("COLOR","#f8e800")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],l("f",n("",[a("OBJECT","c/c.h"),a("COLOR","#f8e800")],[
e("",[a("EDGEPATTERN","thick"),a("EDGECOLOR","#ff0000"),a("_DIR","first")],l("g",n("",[a("OBJECT","c/c.h.in")],[
]))
),
]))
),
]))
,l("h",n("",[a("OBJECT","c/c.o"),a("COLOR","#e8e8e8"),a("BORDER","double")],[
e("",[a("_DIR","first")],r("e")),
e("",[a("_DIR","first")],r("f")),
e("",[a("_DIR","first")],l("i",n("",[a("OBJECT","c/c.c"),a("COLOR","#f8a808")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("e")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("f")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],l("j",n("",[a("OBJECT","b/b.h"),a("COLOR","#f8e800")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","both")],l("k",n("",[a("OBJECT","b/b1.h"),a("COLOR","#f8e800")],[
]))
),
]))
),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],l("l",n("",[a("OBJECT","a.h"),a("COLOR","#f8e800")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","both")],l("m",n("",[a("OBJECT","a1.h"),a("COLOR","#f8e800")],[
]))
),
]))
),
]))
),
e("",[a("_DIR","first")],r("k")),
e("",[a("_DIR","first")],r("j")),
e("",[a("_DIR","first")],r("m")),
e("",[a("_DIR","first")],r("l")),
]))
,l("n",n("",[a("OBJECT","b/b.o"),a("COLOR","#e8e8e8"),a("BORDER","double")],[
e("",[a("_DIR","first")],r("k")),
e("",[a("_DIR","first")],r("j")),
e("",[a("_DIR","first")],l("o",n("",[a("OBJECT","b/b.c"),a("COLOR","#f8a808")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("k")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("j")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("l")),
]))
),
e("",[a("_DIR","first")],r("m")),
e("",[a("_DIR","first")],r("l")),
]))
,l("p",n("",[a("OBJECT","all"),a("_GO","ellipse")],[
e("",[a("_DIR","first")],l("q",n("",[a("OBJECT","a"),a("BORDER","double")],[
e("",[a("_DIR","first")],r("h")),
e("",[a("_DIR","first")],r("n")),
e("",[a("_DIR","first")],l("r",n("",[a("OBJECT","a.o"),a("COLOR","#e8e8e8"),a("BORDER","double")],[
e("",[a("_DIR","first")],r("f")),
e("",[a("_DIR","first")],r("k")),
e("",[a("_DIR","first")],r("j")),
e("",[a("_DIR","first")],r("m")),
e("",[a("_DIR","first")],r("l")),
e("",[a("_DIR","first")],l("s",n("",[a("OBJECT","a.c"),a("COLOR","#f8a808")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("f")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("j")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("m")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("l")),
]))
),
]))
),
]))
),
]))
,l("t",n("",[a("OBJECT","<m>makepp_default_makefile.mk"),a("COLOR","#0090e0")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("d")),
]))
,]
###	124	644	1187268248	1376891138	answers/key.txt
.../makepp --dont-build=/ --do-build=.
DEBUG Environment var $MAKEPP_DEBUG is `0' (1 means extra verbose)
LOAD Loading makefile `makefile' with default directory `.'
TRY Trying to build `makefile'
USE  Using rule `default rule'
DEPEND  Targets `makefile' depend on 
UP_TO_DATE `makefile' is up to date
PREBUILD Pre-building `makepp.mk' from `makefile:5'
TRY Trying to build `makepp.mk'
USE  Using rule `default rule'
DEPEND  Targets `makepp.mk' depend on 
UP_TO_DATE `makepp.mk' is up to date
LOAD_INCL Including `makepp.mk' from `makefile:5'
PREBUILD Pre-building `makepp1.mk' from `makepp.mk:1'
TRY Trying to build `makepp1.mk'
USE  Using rule `default rule'
DEPEND  Targets `makepp1.mk' depend on 
UP_TO_DATE `makepp1.mk' is up to date
LOAD_INCL Including `makepp1.mk' from `makepp.mk:1'
PREBUILD Pre-building `makepp1.mk' from `makefile:6'
LOAD_INCL Including `makepp1.mk' from `makefile:6'
IFEQ if(n)eq comparing `a' with `1' at `makefile:8'
IFEQ if(n)eq comparing `a' with `2' at `makefile:9'
IFEQ if(n)eq comparing `a' with `a' at `makefile:10'
LOAD_INCL Including `.../makepp_builtin_rules.mk' from `makefile'
LOAD_END Finished loading `makefile'
TRY Trying to build `all'
USE  Using rule `default rule'
DEPEND  Targets `all' depend on `a'
TRY Trying to build `a'
USE  Using rule `makefile:25'
PREBUILD Pre-building `a.o' from `makefile:25'
TRY Trying to build `a.o'
USE  Using rule `.../makepp_builtin_rules.mk:97(.)'
SCAN_INFO  Trying to retrieve scan info for `a.o'
LEX_RULE Lexically analyzing rule for `a.o' because `info not cached'
TRY Trying to build `a.c'
USE  Using rule `default rule'
DEPEND  Targets `a.c' depend on 
UP_TO_DATE `a.c' is up to date
INCL `a.c' includes `a.h'
TRY Trying to build `a.h'
USE  Using rule `default rule'
DEPEND  Targets `a.h' depend on 
UP_TO_DATE `a.h' is up to date
INCL `a.c' includes `b/b.h'
TRY Trying to build `b/b.h'
LOAD_DEFAULT Loading default makefile for directory `b'
LOAD_INCL Including `.../makepp_builtin_rules.mk' from `.../makepp_default_makefile.mk'
LOAD_END Finished loading `.../makepp_default_makefile.mk'
USE  Using rule `default rule'
DEPEND  Targets `b/b.h' depend on 
UP_TO_DATE `b/b.h' is up to date
INCL `a.c' includes `c/c.h'
TRY Trying to build `c/c.h'
LOAD_DEFAULT Loading default makefile for directory `c'
LOAD_INCL Including `.../makepp_builtin_rules.mk' from `.../makepp_default_makefile.mk'
LOAD_END Finished loading `.../makepp_default_makefile.mk'
USE  Using rule `makefile:15'
SCAN_INFO  Trying to retrieve scan info for `c/c.h'
LEX_RULE Lexically analyzing rule for `c/c.h' because `info not cached'
DEPEND  Targets `c/c.h' depend on `c/c.h.in'
TRY Trying to build `c/c.h.in'
USE  Using rule `default rule'
DEPEND  Targets `c/c.h.in' depend on 
UP_TO_DATE `c/c.h.in' is up to date
BUILD_OLD Rebuild `c/c.h' because it's older than `c/c.h.in'
SUCCESS `makefile:15' successfully executed for `c/c.h'
INCL `a.c' includes `a1.h'
TRY Trying to build `a1.h'
USE  Using rule `default rule'
DEPEND  Targets `a1.h' depend on 
UP_TO_DATE `a1.h' is up to date
INCL `a.h' includes `a1.h'
INCL `b/b.h' includes `b/b1.h'
TRY Trying to build `b/b1.h'
USE  Using rule `default rule'
DEPEND  Targets `b/b1.h' depend on 
UP_TO_DATE `b/b1.h' is up to date
INCL `a1.h' includes `a.h'
INCL `b/b1.h' includes `b/b.h'
DEPEND  Targets `a.o' depend on `a.c', `a.h', `a1.h', `b/b.h', `b/b1.h', `c/c.h'
BUILD_NONE Build `a.o' because it doesn't exist
SUCCESS `.../makepp_builtin_rules.mk:97(.)' successfully executed for `a.o'
PREBUILD Pre-building `b/b.o' from `makefile:25'
TRY Trying to build `b/b.o'
USE  Using rule `.../makepp_builtin_rules.mk:97(b)'
SCAN_INFO  Trying to retrieve scan info for `b/b.o'
LEX_RULE Lexically analyzing rule for `b/b.o' because `info not cached'
TRY Trying to build `b/b.c'
USE  Using rule `default rule'
DEPEND  Targets `b/b.c' depend on 
UP_TO_DATE `b/b.c' is up to date
INCL `b/b.c' includes `b/b.h', `b/b1.h', `a.h'
DEPEND  Targets `b/b.o' depend on `a.h', `a1.h', `b/b.c', `b/b.h', `b/b1.h'
BUILD_NONE Build `b/b.o' because it doesn't exist
SUCCESS `.../makepp_builtin_rules.mk:97(b)' successfully executed for `b/b.o'
PREBUILD Pre-building `c/c.o' from `makefile:25'
TRY Trying to build `c/c.o'
USE  Using rule `.../makepp_builtin_rules.mk:97(c)'
SCAN_INFO  Trying to retrieve scan info for `c/c.o'
LEX_RULE Lexically analyzing rule for `c/c.o' because `info not cached'
TRY Trying to build `c/c.c'
USE  Using rule `default rule'
DEPEND  Targets `c/c.c' depend on 
UP_TO_DATE `c/c.c' is up to date
INCL `c/c.c' includes `c/c.h', `c/c1.h'
TRY Trying to build `c/c1.h'
USE  Using rule `default rule'
DEPEND  Targets `c/c1.h' depend on 
UP_TO_DATE `c/c1.h' is up to date
INCL `c/c.c' includes `a.h', `b/b.h'
INCL `c/c1.h' includes `c/c.h'
DEPEND  Targets `c/c.o' depend on `a.h', `a1.h', `b/b.h', `b/b1.h', `c/c.c', `c/c.h', `c/c1.h'
BUILD_NONE Build `c/c.o' because it doesn't exist
SUCCESS `.../makepp_builtin_rules.mk:97(c)' successfully executed for `c/c.o'
SCAN_INFO  Trying to retrieve scan info for `a'
LEX_RULE Lexically analyzing rule for `a' because `info not cached'
DEPEND  Targets `a' depend on `a.o', `b/b.o', `c/c.o'
BUILD_NONE Build `a' because it doesn't exist
SUCCESS `makefile:25' successfully executed for `a'
BUILD_PHONY Rebuild `all' because it is a phony target
SUCCESS `default rule' successfully executed for `all'
N_FILES 5 files updated, 1 phony targets built and 0 targets failed
###	114	644	1187272402	1376676937	answers/log.txt
.../makepp --dont-build=/ --do-build=.
makepplog: Environment var $MAKEPP_DEBUG is `0' (1 means extra verbose)
makepplog: Loading makefile `makefile' with default directory `.'
makepplog: Trying to build `makefile'
makepplog:  Using rule `default rule'
makepplog:  Targets `makefile' depend on 
makepplog: `makefile' is up to date
makepplog: Pre-building `makepp.mk' from `makefile:5'
makepplog: Trying to build `makepp.mk'
makepplog:  Using rule `default rule'
makepplog:  Targets `makepp.mk' depend on 
makepplog: `makepp.mk' is up to date
makepplog: Including `makepp.mk' from `makefile:5'
makepplog: Pre-building `makepp1.mk' from `makepp.mk:1'
makepplog: Trying to build `makepp1.mk'
makepplog:  Using rule `default rule'
makepplog:  Targets `makepp1.mk' depend on 
makepplog: `makepp1.mk' is up to date
makepplog: Including `makepp1.mk' from `makepp.mk:1'
makepplog: Pre-building `makepp1.mk' from `makefile:6'
makepplog: Including `makepp1.mk' from `makefile:6'
makepplog: if(n)eq comparing `a' with `1' at `makefile:8'
makepplog: if(n)eq comparing `a' with `2' at `makefile:9'
makepplog: if(n)eq comparing `a' with `a' at `makefile:10'
makepplog: Including `.../makepp_builtin_rules.mk' from `makefile'
makepplog: Finished loading `makefile'
makepplog: Trying to build `all'
makepplog:  Using rule `default rule'
makepplog:  Targets `all' depend on `a'
makepplog:   Trying to build `a'
makepplog:    Using rule `makefile:25'
makepplog:   Pre-building `a.o' from `makefile:25'
makepplog:   Trying to build `a.o'
makepplog:    Using rule `.../makepp_builtin_rules.mk:97(.)'
makepplog:   Trying to build `a.c'
makepplog:    Using rule `default rule'
makepplog:    Targets `a.c' depend on 
makepplog:   `a.c' is up to date
makepplog:   `a.c' includes `a.h'
makepplog:   Trying to build `a.h'
makepplog:    Using rule `default rule'
makepplog:    Targets `a.h' depend on 
makepplog:   `a.h' is up to date
makepplog:   `a.c' includes `b/b.h'
makepplog:   Trying to build `b/b.h'
makepplog:   Loading default makefile for directory `b'
makepplog:   Including `.../makepp_builtin_rules.mk' from `.../makepp_default_makefile.mk'
makepplog:   Finished loading `.../makepp_default_makefile.mk'
makepplog:    Using rule `default rule'
makepplog:    Targets `b/b.h' depend on 
makepplog:   `b/b.h' is up to date
makepplog:   `a.c' includes `c/c.h'
makepplog:   Trying to build `c/c.h'
makepplog:   Loading default makefile for directory `c'
makepplog:   Including `.../makepp_builtin_rules.mk' from `.../makepp_default_makefile.mk'
makepplog:   Finished loading `.../makepp_default_makefile.mk'
makepplog:    Using rule `makefile:15'
makepplog:    Targets `c/c.h' depend on `c/c.h.in'
makepplog:     Trying to build `c/c.h.in'
makepplog:      Using rule `default rule'
makepplog:      Targets `c/c.h.in' depend on 
makepplog:     `c/c.h.in' is up to date
makepplog:   Rebuild `c/c.h' because it's older than `c/c.h.in'
makepplog:   `makefile:15' successfully executed for `c/c.h'
makepplog:   `a.c' includes `a1.h'
makepplog:   Trying to build `a1.h'
makepplog:    Using rule `default rule'
makepplog:    Targets `a1.h' depend on 
makepplog:   `a1.h' is up to date
makepplog:   `a.h' includes `a1.h'
makepplog:   `b/b.h' includes `b/b1.h'
makepplog:   Trying to build `b/b1.h'
makepplog:    Using rule `default rule'
makepplog:    Targets `b/b1.h' depend on 
makepplog:   `b/b1.h' is up to date
makepplog:   `a1.h' includes `a.h'
makepplog:   `b/b1.h' includes `b/b.h'
makepplog:    Targets `a.o' depend on `a.c', `a.h', `a1.h', `b/b.h', `b/b1.h', `c/c.h'
makepplog:   Build `a.o' because it doesn't exist
makepplog:   `.../makepp_builtin_rules.mk:97(.)' successfully executed for `a.o'
makepplog:   Pre-building `b/b.o' from `makefile:25'
makepplog:   Trying to build `b/b.o'
makepplog:    Using rule `.../makepp_builtin_rules.mk:97(b)'
makepplog:   Trying to build `b/b.c'
makepplog:    Using rule `default rule'
makepplog:    Targets `b/b.c' depend on 
makepplog:   `b/b.c' is up to date
makepplog:   `b/b.c' includes `b/b.h', `b/b1.h', `a.h'
makepplog:    Targets `b/b.o' depend on `a.h', `a1.h', `b/b.c', `b/b.h', `b/b1.h'
makepplog:   Build `b/b.o' because it doesn't exist
makepplog:   `.../makepp_builtin_rules.mk:97(b)' successfully executed for `b/b.o'
makepplog:   Pre-building `c/c.o' from `makefile:25'
makepplog:   Trying to build `c/c.o'
makepplog:    Using rule `.../makepp_builtin_rules.mk:97(c)'
makepplog:   Trying to build `c/c.c'
makepplog:    Using rule `default rule'
makepplog:    Targets `c/c.c' depend on 
makepplog:   `c/c.c' is up to date
makepplog:   `c/c.c' includes `c/c.h', `c/c1.h'
makepplog:   Trying to build `c/c1.h'
makepplog:    Using rule `default rule'
makepplog:    Targets `c/c1.h' depend on 
makepplog:   `c/c1.h' is up to date
makepplog:   `c/c.c' includes `a.h', `b/b.h'
makepplog:   `c/c1.h' includes `c/c.h'
makepplog:    Targets `c/c.o' depend on `a.h', `a1.h', `b/b.h', `b/b1.h', `c/c.c', `c/c.h', `c/c1.h'
makepplog:   Build `c/c.o' because it doesn't exist
makepplog:   `.../makepp_builtin_rules.mk:97(c)' successfully executed for `c/c.o'
makepplog:    Targets `a' depend on `a.o', `b/b.o', `c/c.o'
makepplog:   Build `a' because it doesn't exist
makepplog:   `makefile:25' successfully executed for `a'
makepplog: Rebuild `all' because it is a phony target
makepplog: `default rule' successfully executed for `all'
makepplog: 5 files updated, 1 phony targets built and 0 targets failed
###	-55	644	1187268248	1187268248	answers/log.udg
[
l("a",n("",[a("OBJECT","c/c.o"),a("COLOR","#e8e8e8")],[
e("",[a("_DIR","first")],l("b",n("",[a("OBJECT","c/c1.h"),a("COLOR","#f8e800")],[
]))
),
e("",[a("_DIR","first")],l("c",n("",[a("OBJECT","c/c.h"),a("COLOR","#f8e800")],[
e("",[a("_DIR","first")],l("d",n("",[a("OBJECT","c/c.h.in")],[
]))
),
]))
),
e("",[a("_DIR","first")],l("e",n("",[a("OBJECT","c/c.c"),a("COLOR","#f8a808")],[
]))
),
e("",[a("_DIR","first")],l("f",n("",[a("OBJECT","b/b1.h"),a("COLOR","#f8e800")],[
]))
),
e("",[a("_DIR","first")],l("g",n("",[a("OBJECT","b/b.h"),a("COLOR","#f8e800")],[
]))
),
e("",[a("_DIR","first")],l("h",n("",[a("OBJECT","a1.h"),a("COLOR","#f8e800")],[
]))
),
e("",[a("_DIR","first")],l("i",n("",[a("OBJECT","a.h"),a("COLOR","#f8e800")],[
]))
),
]))
,l("j",n("",[a("OBJECT","b/b.o"),a("COLOR","#e8e8e8")],[
e("",[a("_DIR","first")],r("f")),
e("",[a("_DIR","first")],r("g")),
e("",[a("_DIR","first")],l("k",n("",[a("OBJECT","b/b.c"),a("COLOR","#f8a808")],[
]))
),
e("",[a("_DIR","first")],r("h")),
e("",[a("_DIR","first")],r("i")),
]))
,l("l",n("",[a("OBJECT","all"),a("_GO","ellipse")],[
e("",[a("_DIR","first")],l("m",n("",[a("OBJECT","a")],[
e("",[a("_DIR","first")],r("a")),
e("",[a("_DIR","first")],r("j")),
e("",[a("_DIR","first")],l("n",n("",[a("OBJECT","a.o"),a("COLOR","#e8e8e8")],[
e("",[a("_DIR","first")],r("c")),
e("",[a("_DIR","first")],r("f")),
e("",[a("_DIR","first")],r("g")),
e("",[a("_DIR","first")],r("h")),
e("",[a("_DIR","first")],r("i")),
e("",[a("_DIR","first")],l("o",n("",[a("OBJECT","a.c"),a("COLOR","#f8a808")],[
]))
),
]))
),
]))
),
]))
,]
###	1	644	1187322170	1190053856	answers/n_files
5 1 0
###	45	644	1187268248	1187268248	answers/rewrite.txt
cwd:
 . . . . . . a a a a/b a/b a/b
 .. : : .. : : ../a :/a :a ../a/b :/a/b :a/b
 ../.. :/: :: ../.. :/: :: ../../a :/:/a ::a ../../a/b :/:/a/b ::a/b
 ../../.. :/:/: ::: ../../.. :/:/: ::: ../../../a :/:/:/a :::a ../../../a/b :/:/:/a/b :::a/b
dir:
/
/bin
/usr/bin
/usr/bin
/a/b
|a|
|a|
|a|b
|a|b/c
usr:
 |l| |l|a |l|a/b |l|a/b/c
 |b| |b|a |b|a/b |b|a/b/c
 |ul| |ul|a |ul|a/b |ul|a/b/c
 |us| |us|a |us|a/b |us|a/b/c
 |uli| |uli|a |uli|a/b |uli|a/b/c
 |ull| |ull|a |ull|a/b |ull|a/b/c
 |uXb| |uXb|a |uXb|a/b |uXb|a/b/c
 |uXl| |uXl|a |uXl|a/b |uXl|a/b/c
 /nogo /nogo/a /nogo/a/b /nogo/a/b/c
 /tmp/nogo /tmp/nogo/a /tmp/nogo/a/b /tmp/nogo/a/b/c
suf:
f.x -3:*.x -2:*.x -1:*.x undef:*.x 0:*.x 1:*.x 2:*.x 3:*.x
a/f.x -3:*.x -2:*.x -1:*.x undef:*.x 0:*.x 1:a/*.x 2:a/*.x 3:a/*.x
a/b/f.x -3:*.x -2:*.x -1:a/*.x undef:*.x 0:*.x 1:a/*.x 2:a/b/*.x 3:a/b/*.x
a/b/c/f.x -3:*.x -2:a/*.x -1:a/b/*.x undef:*.x 0:*.x 1:a/*.x 2:a/b/*.x 3:a/b/c/*.x
/f.x -3:*.x -2:*.x -1:*.x undef:*.x 0:/*.x 1:/*.x 2:/*.x 3:/*.x
/a/f.x -3:*.x -2:*.x -1:*.x undef:*.x 0:/*.x 1:/a/*.x 2:/a/*.x 3:/a/*.x
/a/b/f.x -3:*.x -2:*.x -1:/a/*.x undef:*.x 0:/*.x 1:/a/*.x 2:/a/b/*.x 3:/a/b/*.x
/a/b/c/f.x -3:*.x -2:/a/*.x -1:/a/b/*.x undef:*.x 0:/*.x 1:/a/*.x 2:/a/b/*.x 3:/a/b/c/*.x
~/f.x -3:*.x -2:*.x -1:*.x undef:*.x 0:~*.x 1:~/*.x 2:~/*.x 3:~/*.x
~/a/f.x -3:*.x -2:*.x -1:~/*.x undef:*.x 0:~*.x 1:~/*.x 2:~/a/*.x 3:~/a/*.x
~/a/b/f.x -3:*.x -2:~/*.x -1:~/a/*.x undef:*.x 0:~*.x 1:~/*.x 2:~/a/*.x 3:~/a/b/*.x
~/a/b/c/f.x -3:~/*.x -2:~/a/*.x -1:~/a/b/*.x undef:*.x 0:~*.x 1:~/*.x 2:~/a/*.x 3:~/a/b/*.x
~a/f.x -3:*.x -2:*.x -1:*.x undef:*.x 0:~*.x 1:~a/*.x 2:~a/*.x 3:~a/*.x
~a/b/f.x -3:*.x -2:*.x -1:~a/*.x undef:*.x 0:~*.x 1:~a/*.x 2:~a/b/*.x 3:~a/b/*.x
~a/b/c/f.x -3:*.x -2:~a/*.x -1:~a/b/*.x undef:*.x 0:~*.x 1:~a/*.x 2:~a/b/*.x 3:~a/b/c/*.x
|a|f.x -3:*.x -2:*.x -1:*.x undef:*.x 0:|*.x 1:|a|*.x 2:|a|*.x 3:|a|*.x
|a|b/f.x -3:*.x -2:*.x -1:|a|*.x undef:*.x 0:|*.x 1:|a|*.x 2:|a|b/*.x 3:|a|b/*.x
|a|b/c/f.x -3:*.x -2:|a|*.x -1:|a|b/*.x undef:*.x 0:|*.x 1:|a|*.x 2:|a|b/*.x 3:|a|b/c/*.x
###	-24	644	1187272450	1197503260	answers/suf.dot
// Generated by makeppgraph
digraph a {
rankdir=LR
outputorder=edgesfirst
node [shape=box style=filled fillcolor="#ffffffe0"]
edge [dir=back]
a [label="*.c" fillcolor="#f8a808e0"]
b [label="*.h" fillcolor="#f8e800e0"]
a -> b [style=dotted]
b -> b [style=dotted]
c [label="*.in"]
b -> c
d [label="*.mk" fillcolor="#0090e0e0"]
d -> d [style=dotted]
e [label="*.o" fillcolor="#e8e8e8e0"]
e -> a
e -> b
f [label="a"]
f -> e
g [label="all" shape=ellipse]
g -> f
h [label="makefile" fillcolor="#0090e0e0"]
h -> d [style=dotted]
}
###	11	644	1187272430	1187268248	answers/suf.txt
all {phony}
  a
    *.o
      *.c
        {include} *.h
          {include} *.h {repeated}
          *.in
      *.h {repeated}
makefile
  {include} *.mk
    {include} *.mk {repeated}
###	-27	644	1187272450	1187268248	answers/suf.udg
[
l("a",n("",[a("OBJECT","makefile"),a("COLOR","#0090e0")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],l("b",n("",[a("OBJECT","*.mk"),a("COLOR","#0090e0")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("b")),
]))
),
]))
,l("c",n("",[a("OBJECT","all"),a("_GO","ellipse")],[
e("",[a("_DIR","first")],l("d",n("",[a("OBJECT","a")],[
e("",[a("_DIR","first")],l("e",n("",[a("OBJECT","*.o"),a("COLOR","#e8e8e8")],[
e("",[a("_DIR","first")],l("f",n("",[a("OBJECT","*.h"),a("COLOR","#f8e800")],[
e("",[a("_DIR","first")],l("g",n("",[a("OBJECT","*.in")],[
]))
),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("f")),
]))
),
e("",[a("_DIR","first")],l("h",n("",[a("OBJECT","*.c"),a("COLOR","#f8a808")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("f")),
]))
),
]))
),
]))
),
]))
,]
###	-32	644	1187272774	1197503261	answers/up.dot
// Generated by makeppgraph
digraph a {
rankdir=LR
outputorder=edgesfirst
node [shape=box style=filled fillcolor="#ffffffe0"]
edge [dir=back]
a [label="a" style="filled,bold" color=red]
b [label="a.o" fillcolor="#e8e8e8e0" style="filled,bold" color=red]
a -> b
c [label="b/b.o" fillcolor="#e8e8e8e0" style="filled,bold" color=red]
a -> c
d [label="c/c.o" fillcolor="#e8e8e8e0" style="filled,bold" color=red]
a -> d
e [label="a.c" fillcolor="#f8a808e0"]
f [label="c/c.h" fillcolor="#f8e800e0" style="filled,bold" color=red]
e -> f [style=dotted]
b -> e
b -> f
g [label="all" shape=ellipse]
g -> a
h [label="c/c.c" fillcolor="#f8a808e0"]
h -> f [style=dotted]
i [label="c/c1.h" fillcolor="#f8e800e0"]
h -> i [style=dotted]
d -> h
d -> f
d -> i
i -> f [style=dotted]
j [label="makefile" fillcolor="#0090e0e0"]
k [label="makepp.mk" fillcolor="#0090e0e0"]
j -> k [style=dotted]
}
###	16	644	1187272758	1187268248	answers/up.txt
all {phony}
  a {because}
    a.o {because}
      a.c
        {include} c/c.h {because}
      c/c.h {repeated}
    b/b.o {because}
    c/c.o {because}
      c/c.c
        {include} c/c.h {repeated}
        {include} c/c1.h
          {include} c/c.h {repeated}
      c/c.h {repeated}
      c/c1.h {repeated}
makefile
  {include} makepp.mk
###	-38	644	1187272775	1187268248	answers/up.udg
[
l("a",n("",[a("OBJECT","makepp.mk"),a("COLOR","#0090e0")],[
]))
,l("b",n("",[a("OBJECT","makefile"),a("COLOR","#0090e0")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("a")),
]))
,l("c",n("",[a("OBJECT","c/c1.h"),a("COLOR","#f8e800")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],l("d",n("",[a("OBJECT","c/c.h"),a("COLOR","#f8e800"),a("BORDER","double")],[
]))
),
]))
,l("e",n("",[a("OBJECT","c/c.o"),a("COLOR","#e8e8e8"),a("BORDER","double")],[
e("",[a("_DIR","first")],r("c")),
e("",[a("_DIR","first")],r("d")),
e("",[a("_DIR","first")],l("f",n("",[a("OBJECT","c/c.c"),a("COLOR","#f8a808")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("c")),
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("d")),
]))
),
]))
,l("g",n("",[a("OBJECT","b/b.o"),a("COLOR","#e8e8e8"),a("BORDER","double")],[
]))
,l("h",n("",[a("OBJECT","all"),a("_GO","ellipse")],[
e("",[a("_DIR","first")],l("i",n("",[a("OBJECT","a"),a("BORDER","double")],[
e("",[a("_DIR","first")],r("e")),
e("",[a("_DIR","first")],r("g")),
e("",[a("_DIR","first")],l("j",n("",[a("OBJECT","a.o"),a("COLOR","#e8e8e8"),a("BORDER","double")],[
e("",[a("_DIR","first")],r("d")),
e("",[a("_DIR","first")],l("k",n("",[a("OBJECT","a.c"),a("COLOR","#f8a808")],[
e("",[a("EDGEPATTERN","dotted"),a("_DIR","first")],r("d")),
]))
),
]))
),
]))
),
]))
,]