### 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>
← dependency<br />
↑ include
</td></tr></table>
<ul>
<li id='a'><b style="background-color: #0090e0"><m>makepp_default_makefile.mk</b>
<ul>
<li id='b'>↑ <b style="background-color: #0090e0"><m>makepp_builtin_rules.mk</b></li>
</ul>
</li>
<li id='c'><b style="border: 1px dashed">all</b>
<ul>
<li id='d'>←<b style="border-color: red">a</b>
<ul>
<li id='e'>←<b style="background-color: #e8e8e8; border-color: red">a.o</b>
<ul>
<li id='f'>←<b style="background-color: #f8a808">a.c</b>
<ul>
<li id='g'>↑ <b style="background-color: #f8e800">a.h</b>
<ul>
<li id='h'>↕ <b style="background-color: #f8e800">a1.h</b></li>
</ul>
</li>
<li>↑ <a href='#h' onmouseover="flash( 'h' );" onmouseout="flash();">a1.h</a></li>
<li id='i'>↑ <b style="background-color: #f8e800">b/b.h</b>
<ul>
<li id='j'>↕ <b style="background-color: #f8e800">b/b1.h</b></li>
</ul>
</li>
<li id='k'>↑ <b style="background-color: #f8e800">c/c.h</b>
<ul>
<li id='l'><span style="color: red">←</span><b>c/c.h.in</b></li>
</ul>
</li>
</ul>
</li>
<li>←<a href='#g' onmouseover="flash( 'g' );" onmouseout="flash();">a.h</a></li>
<li>←<a href='#h' onmouseover="flash( 'h' );" onmouseout="flash();">a1.h</a></li>
<li>←<a href='#i' onmouseover="flash( 'i' );" onmouseout="flash();">b/b.h</a></li>
<li>←<a href='#j' onmouseover="flash( 'j' );" onmouseout="flash();">b/b1.h</a></li>
<li>←<a href='#k' onmouseover="flash( 'k' );" onmouseout="flash();">c/c.h</a></li>
</ul>
</li>
<li id='m'>←<b style="background-color: #e8e8e8; border-color: red">b/b.o</b>
<ul>
<li>←<a href='#g' onmouseover="flash( 'g' );" onmouseout="flash();">a.h</a></li>
<li>←<a href='#h' onmouseover="flash( 'h' );" onmouseout="flash();">a1.h</a></li>
<li id='n'>←<b style="background-color: #f8a808">b/b.c</b>
<ul>
<li>↑ <a href='#g' onmouseover="flash( 'g' );" onmouseout="flash();">a.h</a></li>
<li>↑ <a href='#i' onmouseover="flash( 'i' );" onmouseout="flash();">b/b.h</a></li>
<li>↑ <a href='#j' onmouseover="flash( 'j' );" onmouseout="flash();">b/b1.h</a></li>
</ul>
</li>
<li>←<a href='#i' onmouseover="flash( 'i' );" onmouseout="flash();">b/b.h</a></li>
<li>←<a href='#j' onmouseover="flash( 'j' );" onmouseout="flash();">b/b1.h</a></li>
</ul>
</li>
<li id='o'>←<b style="background-color: #e8e8e8; border-color: red">c/c.o</b>
<ul>
<li>←<a href='#g' onmouseover="flash( 'g' );" onmouseout="flash();">a.h</a></li>
<li>←<a href='#h' onmouseover="flash( 'h' );" onmouseout="flash();">a1.h</a></li>
<li>←<a href='#i' onmouseover="flash( 'i' );" onmouseout="flash();">b/b.h</a></li>
<li>←<a href='#j' onmouseover="flash( 'j' );" onmouseout="flash();">b/b1.h</a></li>
<li id='p'>←<b style="background-color: #f8a808">c/c.c</b>
<ul>
<li>↑ <a href='#g' onmouseover="flash( 'g' );" onmouseout="flash();">a.h</a></li>
<li>↑ <a href='#i' onmouseover="flash( 'i' );" onmouseout="flash();">b/b.h</a></li>
<li>↑ <a href='#k' onmouseover="flash( 'k' );" onmouseout="flash();">c/c.h</a></li>
<li id='q'>↑ <b style="background-color: #f8e800">c/c1.h</b>
<ul>
<li>↑ <a href='#k' onmouseover="flash( 'k' );" onmouseout="flash();">c/c.h</a></li>
</ul>
</li>
</ul>
</li>
<li>←<a href='#k' onmouseover="flash( 'k' );" onmouseout="flash();">c/c.h</a></li>
<li>←<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>↑ <a href='#b' onmouseover="flash( 'b' );" onmouseout="flash();"><m>makepp_builtin_rules.mk</a></li>
<li id='s'>↑ <b style="background-color: #0090e0">makepp.mk</b>
<ul>
<li id='t'>↑ <b style="background-color: #0090e0">makepp1.mk</b></li>
</ul>
</li>
<li>↑ <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")),
]))
),
]))
),
]))
),
]))
,]