aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--WORKSPACE9
-rw-r--r--scripts/docs/BUILD2
-rw-r--r--scripts/docs/generate_dot_graphs.py6
-rw-r--r--site/versions/master/docs/build-ref.html239
-rw-r--r--site/versions/master/docs/query.html572
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/CompressedTarFunction.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java10
-rw-r--r--tools/build_defs/repo/make.bzl66
8 files changed, 220 insertions, 690 deletions
diff --git a/WORKSPACE b/WORKSPACE
index 666b8dfe9e..9d2c79654a 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -64,3 +64,12 @@ new_local_repository(
path = "./third_party/protobuf/3.0.0/",
build_file = "./third_party/protobuf/3.0.0/com_google_protobuf_java.BUILD",
)
+
+load('//tools/build_defs/repo:make.bzl', 'make')
+make(
+ name = "dot",
+ urls = ["http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.38.0.tar.gz"],
+ strip_prefix = 'graphviz-2.38.0',
+ sha256 = '81aa238d9d4a010afa73a9d2a704fc3221c731e1e06577c2ab3496bdef67859e',
+ exports = ["cmd/dot/dot"],
+)
diff --git a/scripts/docs/BUILD b/scripts/docs/BUILD
index 53452e22e0..5e0a704755 100644
--- a/scripts/docs/BUILD
+++ b/scripts/docs/BUILD
@@ -12,6 +12,8 @@ py_library(
py_binary(
name = "generate_dot_graphs",
srcs = ["generate_dot_graphs.py"],
+ data = ["@dot//:cmd/dot/dot"],
+ tags = ["manual"],
visibility = ["//site:__pkg__"],
deps = [":dot-converter"],
)
diff --git a/scripts/docs/generate_dot_graphs.py b/scripts/docs/generate_dot_graphs.py
index 306d5e12b0..f8d26e0449 100644
--- a/scripts/docs/generate_dot_graphs.py
+++ b/scripts/docs/generate_dot_graphs.py
@@ -18,6 +18,8 @@ import os
from scripts.docs.dot_converter import DotConverter
-if __name__ == "__main__":
- converter = DotConverter(["dot", "-Tsvg"], os.environ.copy())
+if __name__ == '__main__':
+ converter = DotConverter(
+ ['%s/external/dot/cmd/dot/dot' % os.environ['PWD'], '-Tsvg'],
+ os.environ.copy())
converter.convert()
diff --git a/site/versions/master/docs/build-ref.html b/site/versions/master/docs/build-ref.html
index b90ac48439..96521c09e5 100644
--- a/site/versions/master/docs/build-ref.html
+++ b/site/versions/master/docs/build-ref.html
@@ -99,115 +99,19 @@ src/my/app/tests/test.cc
</p>
<div style='margin:auto; text-align: center'>
-<svg width="582pt" height="188pt"
- viewBox="0.00 0.00 581.89 188.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 184)">
-<title>G1</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-184 577.888,-184 577.888,4 -4,4"/>
-<!-- Target -->
-<g id="node1" class="node">
-<title>Target</title>
-<ellipse fill="none" stroke="black" cx="376.795" cy="-162" rx="40.0939" ry="18"/>
-<text text-anchor="middle" x="376.795" y="-158.3" font-family="arial" font-size="14.00">Target</text>
-</g>
-<!-- Rule -->
-<g id="node2" class="node">
-<title>Rule</title>
-<ellipse fill="none" stroke="black" cx="241.795" cy="-90" rx="30.5947" ry="18"/>
-<text text-anchor="middle" x="241.795" y="-86.3" font-family="arial" font-size="14.00">Rule</text>
-</g>
-<!-- Target&#45;&gt;Rule -->
-<g id="edge1" class="edge">
-<title>Target&#45;&gt;Rule</title>
-<path fill="none" stroke="black" d="M351.402,-147.834C329.151,-136.296 296.735,-119.487 272.926,-107.142"/>
-<polygon fill="black" stroke="black" points="274.432,-103.98 263.943,-102.484 271.21,-110.195 274.432,-103.98"/>
-</g>
-<!-- File -->
-<g id="node6" class="node">
-<title>File</title>
-<ellipse fill="none" stroke="black" cx="376.795" cy="-90" rx="30.5947" ry="18"/>
-<text text-anchor="middle" x="376.795" y="-86.3" font-family="arial" font-size="14.00">File</text>
-</g>
-<!-- Target&#45;&gt;File -->
-<g id="edge5" class="edge">
-<title>Target&#45;&gt;File</title>
-<path fill="none" stroke="black" d="M376.795,-143.697C376.795,-135.983 376.795,-126.712 376.795,-118.112"/>
-<polygon fill="black" stroke="black" points="380.295,-118.104 376.795,-108.104 373.295,-118.104 380.295,-118.104"/>
-</g>
-<!-- Package group -->
-<g id="node9" class="node">
-<title>Package group</title>
-<ellipse fill="none" stroke="black" cx="499.795" cy="-90" rx="74.187" ry="18"/>
-<text text-anchor="middle" x="499.795" y="-86.3" font-family="arial" font-size="14.00">Package group</text>
-</g>
-<!-- Target&#45;&gt;Package group -->
-<g id="edge8" class="edge">
-<title>Target&#45;&gt;Package group</title>
-<path fill="none" stroke="black" d="M400.802,-147.337C418.506,-137.262 442.911,-123.373 463.059,-111.906"/>
-<polygon fill="black" stroke="black" points="465.018,-114.819 471.978,-106.831 461.555,-108.735 465.018,-114.819"/>
-</g>
-<!-- cc_library -->
-<g id="node3" class="node">
-<title>cc_library</title>
-<ellipse fill="none" stroke="black" cx="59.7947" cy="-18" rx="59.5901" ry="18"/>
-<text text-anchor="middle" x="59.7947" y="-14.3" font-family="arial" font-size="14.00">cc_library</text>
-</g>
-<!-- Rule&#45;&gt;cc_library -->
-<g id="edge2" class="edge">
-<title>Rule&#45;&gt;cc_library</title>
-<path fill="none" stroke="black" d="M216.87,-79.4136C188.038,-68.3243 140.006,-49.8505 104.633,-36.2453"/>
-<polygon fill="black" stroke="black" points="105.607,-32.8704 95.0176,-32.5473 103.095,-39.4038 105.607,-32.8704"/>
-</g>
-<!-- java_test -->
-<g id="node4" class="node">
-<title>java_test</title>
-<ellipse fill="none" stroke="black" cx="191.795" cy="-18" rx="54.6905" ry="18"/>
-<text text-anchor="middle" x="191.795" y="-14.3" font-family="arial" font-size="14.00">java_test</text>
-</g>
-<!-- Rule&#45;&gt;java_test -->
-<g id="edge3" class="edge">
-<title>Rule&#45;&gt;java_test</title>
-<path fill="none" stroke="black" d="M230.449,-73.1159C224.298,-64.5051 216.557,-53.6674 209.621,-43.9567"/>
-<polygon fill="black" stroke="black" points="212.453,-41.9004 203.793,-35.7973 206.757,-45.9691 212.453,-41.9004"/>
-</g>
-<!-- ... -->
-<g id="node5" class="node">
-<title>...</title>
-<ellipse fill="none" stroke="black" cx="291.795" cy="-18" rx="27" ry="18"/>
-<text text-anchor="middle" x="291.795" y="-14.3" font-family="arial" font-size="14.00">...</text>
-</g>
-<!-- Rule&#45;&gt;... -->
-<g id="edge4" class="edge">
-<title>Rule&#45;&gt;...</title>
-<path fill="none" stroke="black" d="M253.14,-73.1159C259.469,-64.2555 267.482,-53.0373 274.57,-43.1152"/>
-<polygon fill="black" stroke="black" points="277.529,-44.9929 280.494,-34.8212 271.833,-40.9242 277.529,-44.9929"/>
-</g>
-<!-- Source -->
-<g id="node7" class="node">
-<title>Source</title>
-<ellipse fill="none" stroke="black" cx="376.795" cy="-18" rx="40.0939" ry="18"/>
-<text text-anchor="middle" x="376.795" y="-14.3" font-family="arial" font-size="14.00">Source</text>
-</g>
-<!-- File&#45;&gt;Source -->
-<g id="edge6" class="edge">
-<title>File&#45;&gt;Source</title>
-<path fill="none" stroke="black" d="M376.795,-71.6966C376.795,-63.9827 376.795,-54.7125 376.795,-46.1124"/>
-<polygon fill="black" stroke="black" points="380.295,-46.1043 376.795,-36.1043 373.295,-46.1044 380.295,-46.1043"/>
-</g>
-<!-- Generated -->
-<g id="node8" class="node">
-<title>Generated</title>
-<ellipse fill="none" stroke="black" cx="489.795" cy="-18" rx="54.6905" ry="18"/>
-<text text-anchor="middle" x="489.795" y="-14.3" font-family="arial" font-size="14.00">Generated</text>
-</g>
-<!-- File&#45;&gt;Generated -->
-<g id="edge7" class="edge">
-<title>File&#45;&gt;Generated</title>
-<path fill="none" stroke="black" d="M396.997,-76.4854C413.512,-66.2547 437.203,-51.579 456.513,-39.6169"/>
-<polygon fill="black" stroke="black" points="458.378,-42.579 465.036,-34.3375 454.691,-36.6283 458.378,-42.579"/>
-</g>
-</g>
-</svg>
+<div class='graphviz dot'><!--
+digraph G1 {
+ node [shape=ellipse];
+ Target -> Rule;
+ Rule -> cc_library
+ Rule -> java_test
+ Rule -> "..."
+ Target -> File;
+ File -> Source;
+ File -> Generated;
+ Target -> "Package group"
+}
+--></div>
<p><i>Hierarchy of targets.</i></p>
</div>
@@ -524,103 +428,26 @@ testdata/input.txt
</p>
<div style="margin:auto; text-align:center">
-<svg width="157pt" height="246pt"
- viewBox="0.00 0.00 156.50 246.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 242)">
-<title>G1</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-242 152.5,-242 152.5,4 -4,4"/>
-<!-- r1 -->
-<g id="node1" class="node">
-<title>r1</title>
-<polygon fill="none" stroke="black" points="88.5,-173 34.5,-173 34.5,-137 88.5,-137 88.5,-173"/>
-<text text-anchor="middle" x="61.5" y="-152.5" font-family="arial" font-size="10.00" fill="#006000">rule</text>
-</g>
-<!-- s1 -->
-<g id="node3" class="node">
-<title>s1</title>
-<ellipse fill="none" stroke="black" cx="14.5" cy="-223.5" rx="14.5" ry="14.5"/>
-<text text-anchor="middle" x="14.5" y="-221" font-family="arial" font-size="10.00" fill="#006000">in</text>
-</g>
-<!-- r1&#45;&gt;s1 -->
-<g id="edge1" class="edge">
-<title>r1&#45;&gt;s1</title>
-<path fill="none" stroke="black" d="M49.3963,-173.125C42.9655,-182.224 35.0324,-193.449 28.3559,-202.895"/>
-<polygon fill="black" stroke="black" points="25.3432,-201.094 22.4297,-211.28 31.0596,-205.134 25.3432,-201.094"/>
-</g>
-<!-- s2 -->
-<g id="node4" class="node">
-<title>s2</title>
-<ellipse fill="none" stroke="black" cx="61.5" cy="-223.5" rx="14.5" ry="14.5"/>
-<text text-anchor="middle" x="61.5" y="-221" font-family="arial" font-size="10.00" fill="#006000">in</text>
-</g>
-<!-- r1&#45;&gt;s2 -->
-<g id="edge2" class="edge">
-<title>r1&#45;&gt;s2</title>
-<path fill="none" stroke="black" d="M61.5,-173.125C61.5,-180.918 61.5,-190.27 61.5,-198.729"/>
-<polygon fill="black" stroke="black" points="58.0001,-198.782 61.5,-208.782 65.0001,-198.782 58.0001,-198.782"/>
-</g>
-<!-- s3 -->
-<g id="node5" class="node">
-<title>s3</title>
-<ellipse fill="none" stroke="black" cx="108.5" cy="-223.5" rx="14.5" ry="14.5"/>
-<text text-anchor="middle" x="108.5" y="-221" font-family="arial" font-size="10.00" fill="#006000">in</text>
-</g>
-<!-- r1&#45;&gt;s3 -->
-<g id="edge3" class="edge">
-<title>r1&#45;&gt;s3</title>
-<path fill="none" stroke="black" d="M73.6037,-173.125C80.0345,-182.224 87.9676,-193.449 94.6441,-202.895"/>
-<polygon fill="black" stroke="black" points="91.9404,-205.134 100.57,-211.28 97.6568,-201.094 91.9404,-205.134"/>
-</g>
-<!-- r2 -->
-<g id="node2" class="node">
-<title>r2</title>
-<polygon fill="none" stroke="black" points="148.5,-101 94.5,-101 94.5,-65 148.5,-65 148.5,-101"/>
-<text text-anchor="middle" x="121.5" y="-80.5" font-family="arial" font-size="10.00" fill="#006000">rule</text>
-</g>
-<!-- r2&#45;&gt;r1 -->
-<g id="edge5" class="edge">
-<title>r2&#45;&gt;r1</title>
-<path fill="none" stroke="black" d="M106.669,-101.303C99.4753,-109.695 90.7033,-119.93 82.8097,-129.139"/>
-<polygon fill="black" stroke="black" points="80.0114,-127.025 76.1609,-136.896 85.3262,-131.581 80.0114,-127.025"/>
-</g>
-<!-- s4 -->
-<g id="node6" class="node">
-<title>s4</title>
-<ellipse fill="none" stroke="black" cx="121.5" cy="-155" rx="14.5" ry="14.5"/>
-<text text-anchor="middle" x="121.5" y="-152.5" font-family="arial" font-size="10.00" fill="#006000">in</text>
-</g>
-<!-- r2&#45;&gt;s4 -->
-<g id="edge4" class="edge">
-<title>r2&#45;&gt;s4</title>
-<path fill="none" stroke="black" d="M121.5,-101.303C121.5,-110.01 121.5,-120.7 121.5,-130.171"/>
-<polygon fill="black" stroke="black" points="118,-130.175 121.5,-140.175 125,-130.176 118,-130.175"/>
-</g>
-<!-- o1 -->
-<g id="node7" class="node">
-<title>o1</title>
-<ellipse fill="none" stroke="black" cx="61.5" cy="-83" rx="14.5" ry="14.5"/>
-<text text-anchor="middle" x="61.5" y="-80.5" font-family="arial" font-size="10.00" fill="#006000">out</text>
-</g>
-<!-- o1&#45;&gt;r1 -->
-<g id="edge6" class="edge">
-<title>o1&#45;&gt;r1</title>
-<path fill="none" stroke="black" d="M61.5,-97.8297C61.5,-106.081 61.5,-116.847 61.5,-126.744"/>
-<polygon fill="black" stroke="black" points="58.0001,-126.981 61.5,-136.981 65.0001,-126.981 58.0001,-126.981"/>
-</g>
-<!-- o2 -->
-<g id="node8" class="node">
-<title>o2</title>
-<ellipse fill="none" stroke="black" cx="121.5" cy="-14.5" rx="14.5" ry="14.5"/>
-<text text-anchor="middle" x="121.5" y="-12" font-family="arial" font-size="10.00" fill="#006000">out</text>
-</g>
-<!-- o2&#45;&gt;r2 -->
-<g id="edge7" class="edge">
-<title>o2&#45;&gt;r2</title>
-<path fill="none" stroke="black" d="M121.5,-29.2788C121.5,-36.6355 121.5,-45.9556 121.5,-54.7067"/>
-<polygon fill="black" stroke="black" points="118,-54.9286 121.5,-64.9286 125,-54.9286 118,-54.9286"/>
-</g>
-</g>
-</svg>
+<div class='graphviz dot'><!--
+digraph G1 {
+ graph [rankdir=BT];
+ node [fontname="Courier-Bold",fontsize=10,fontcolor="#006000"];
+
+ node [shape=box,label="rule"]; r1; r2;
+
+ node [shape=circle,width=.4,fixedsize=1];
+ node [label="in"]; s1; s2; s3; s4;
+ node [label="out"]; o1; o2;
+
+ r1 -> s1;
+ r1 -> s2;
+ r1 -> s3;
+ r2 -> s4;
+ r2 -> r1;
+ o1 -> r1;
+ o2 -> r2;
+}
+--></div>
<p><i>Source files, rules, and generated files.</i></p>
</div>
diff --git a/site/versions/master/docs/query.html b/site/versions/master/docs/query.html
index a5068c8eef..c3802b4133 100644
--- a/site/versions/master/docs/query.html
+++ b/site/versions/master/docs/query.html
@@ -599,423 +599,96 @@ x intersect (y union z)</pre>
<table style='margin: auto'><tr>
<td style='text-align: center'>
-<svg width="153pt" height="288pt"
- viewBox="0.00 0.00 153.40 288.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(0.839179 0.839179) rotate(0) translate(4 339.193)">
-<title>somepath1</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-339.193 178.798,-339.193 178.798,4 -4,4"/>
-<!-- n1 -->
-<g id="node1" class="node">
-<title>n1</title>
-<ellipse fill="none" stroke="black" cx="40" cy="-314.394" rx="18" ry="18"/>
-</g>
-<!-- n2 -->
-<g id="node2" class="node">
-<title>n2</title>
-<ellipse fill="pink" stroke="black" cx="41" cy="-236.798" rx="18" ry="18"/>
-</g>
-<!-- n1&#45;&gt;n2 -->
-<g id="edge1" class="edge">
-<title>n1&#45;&gt;n2</title>
-<path fill="none" stroke="black" d="M40.2269,-296.24C40.3484,-287.058 40.5009,-275.531 40.6382,-265.147"/>
-<polygon fill="black" stroke="black" points="44.1413,-264.93 40.774,-254.884 37.1419,-264.837 44.1413,-264.93"/>
-</g>
-<!-- n3 -->
-<g id="node3" class="node">
-<title>n3</title>
-<ellipse fill="pink" stroke="black" cx="18" cy="-162" rx="18" ry="18"/>
-</g>
-<!-- n2&#45;&gt;n3 -->
-<g id="edge2" class="edge">
-<title>n2&#45;&gt;n3</title>
-<path fill="none" stroke="black" d="M35.7809,-219.279C32.9579,-210.344 29.4064,-199.103 26.2211,-189.021"/>
-<polygon fill="black" stroke="black" points="29.5485,-187.935 23.1984,-179.454 22.8737,-190.044 29.5485,-187.935"/>
-</g>
-<!-- n10 -->
-<g id="node10" class="node">
-<title>n10</title>
-<ellipse fill="pink" stroke="black" cx="37" cy="-90" rx="18" ry="18"/>
-</g>
-<!-- n2&#45;&gt;n10 -->
-<g id="edge9" class="edge">
-<title>n2&#45;&gt;n10</title>
-<path fill="none" stroke="black" d="M42.9371,-218.86C44.7656,-200.425 46.9578,-170.088 45,-144 44.3634,-135.518 43.1616,-126.336 41.8792,-118.036"/>
-<polygon fill="black" stroke="black" points="45.3237,-117.412 40.2483,-108.112 38.4164,-118.547 45.3237,-117.412"/>
-</g>
-<!-- n3&#45;&gt;n10 -->
-<g id="edge10" class="edge">
-<title>n3&#45;&gt;n10</title>
-<path fill="none" stroke="black" d="M22.5027,-144.411C24.7033,-136.304 27.404,-126.354 29.8755,-117.248"/>
-<polygon fill="black" stroke="black" points="33.2878,-118.038 32.5296,-107.47 26.5322,-116.204 33.2878,-118.038"/>
-</g>
-<!-- n4 -->
-<g id="node4" class="node">
-<title>n4</title>
-<ellipse fill="pink" stroke="black" cx="87" cy="-18" rx="18" ry="18"/>
-<text text-anchor="middle" x="87" y="-14.3" font-family="arial" font-size="14.00">E</text>
-</g>
-<!-- n5 -->
-<g id="node5" class="node">
-<title>n5</title>
-<ellipse fill="none" stroke="black" cx="97" cy="-236.798" rx="18" ry="18"/>
-</g>
-<!-- n6 -->
-<g id="node6" class="node">
-<title>n6</title>
-<ellipse fill="none" stroke="black" cx="121" cy="-162" rx="18" ry="18"/>
-</g>
-<!-- n5&#45;&gt;n6 -->
-<g id="edge5" class="edge">
-<title>n5&#45;&gt;n6</title>
-<path fill="none" stroke="black" d="M102.446,-219.279C105.413,-210.281 109.15,-198.944 112.492,-188.808"/>
-<polygon fill="black" stroke="black" points="115.851,-189.796 115.658,-179.203 109.203,-187.604 115.851,-189.796"/>
-</g>
-<!-- n6&#45;&gt;n4 -->
-<g id="edge6" class="edge">
-<title>n6&#45;&gt;n4</title>
-<path fill="none" stroke="black" d="M115.99,-144.365C112.931,-133.96 109.038,-120.252 106,-108 100.867,-87.3 95.8646,-63.6851 92.2822,-45.9844"/>
-<polygon fill="black" stroke="black" points="95.6398,-44.9258 90.2466,-35.8064 88.7758,-46.2987 95.6398,-44.9258"/>
-</g>
-<!-- n9 -->
-<g id="node9" class="node">
-<title>n9</title>
-<ellipse fill="none" stroke="black" cx="133" cy="-90" rx="18" ry="18"/>
-</g>
-<!-- n6&#45;&gt;n9 -->
-<g id="edge8" class="edge">
-<title>n6&#45;&gt;n9</title>
-<path fill="none" stroke="black" d="M123.905,-144.055C125.261,-136.145 126.907,-126.54 128.425,-117.688"/>
-<polygon fill="black" stroke="black" points="131.882,-118.237 130.122,-107.789 124.982,-117.054 131.882,-118.237"/>
-</g>
-<!-- n7 -->
-<g id="node7" class="node">
-<title>n7</title>
-<ellipse fill="pink" stroke="black" cx="97" cy="-314.394" rx="20.5982" ry="20.5982"/>
-<text text-anchor="middle" x="97" y="-310.694" font-family="arial" font-size="14.00">S1</text>
-</g>
-<!-- n7&#45;&gt;n2 -->
-<g id="edge4" class="edge">
-<title>n7&#45;&gt;n2</title>
-<path fill="none" stroke="black" d="M84.8488,-296.991C76.7726,-286.089 66.0734,-271.646 57.2656,-259.756"/>
-<polygon fill="black" stroke="black" points="60.0158,-257.588 51.2509,-251.636 54.391,-261.755 60.0158,-257.588"/>
-</g>
-<!-- n7&#45;&gt;n5 -->
-<g id="edge3" class="edge">
-<title>n7&#45;&gt;n5</title>
-<path fill="none" stroke="black" d="M97,-293.532C97,-284.887 97,-274.612 97,-265.254"/>
-<polygon fill="black" stroke="black" points="100.5,-265.213 97,-255.213 93.5001,-265.213 100.5,-265.213"/>
-</g>
-<!-- n8 -->
-<g id="node8" class="node">
-<title>n8</title>
-<ellipse fill="none" stroke="black" cx="154" cy="-236.798" rx="20.5982" ry="20.5982"/>
-<text text-anchor="middle" x="154" y="-233.098" font-family="arial" font-size="14.00">S2</text>
-</g>
-<!-- n8&#45;&gt;n6 -->
-<g id="edge7" class="edge">
-<title>n8&#45;&gt;n6</title>
-<path fill="none" stroke="black" d="M145.673,-217.428C141.606,-208.456 136.653,-197.53 132.254,-187.827"/>
-<polygon fill="black" stroke="black" points="135.411,-186.313 128.095,-178.651 129.036,-189.204 135.411,-186.313"/>
-</g>
-<!-- n10&#45;&gt;n4 -->
-<g id="edge11" class="edge">
-<title>n10&#45;&gt;n4</title>
-<path fill="none" stroke="black" d="M47.1182,-74.8345C53.9632,-65.2515 63.1483,-52.3924 70.9784,-41.4303"/>
-<polygon fill="black" stroke="black" points="73.9325,-43.3162 76.8968,-33.1445 68.2363,-39.2475 73.9325,-43.3162"/>
-</g>
-<!-- n11 -->
-<g id="node11" class="node">
-<title>n11</title>
-<ellipse fill="none" stroke="black" cx="33" cy="-18" rx="18" ry="18"/>
-</g>
-<!-- n10&#45;&gt;n11 -->
-<g id="edge12" class="edge">
-<title>n10&#45;&gt;n11</title>
-<path fill="none" stroke="black" d="M36.0112,-71.6966C35.5704,-63.9827 35.0407,-54.7125 34.5493,-46.1124"/>
-<polygon fill="black" stroke="black" points="38.0423,-45.8883 33.9774,-36.1043 31.0537,-46.2878 38.0423,-45.8883"/>
-</g>
-</g>
-</svg>
+<div class='graphviz dot'><!--
+digraph somepath1 {
+ graph [size="4,4"]
+ node [label="",shape=circle];
+ n1;
+ n2 [fillcolor="pink",style=filled];
+ n3 [fillcolor="pink",style=filled];
+ n4 [fillcolor="pink",style=filled,label="E"];
+ n5; n6;
+ n7 [fillcolor="pink",style=filled,label="S1"];
+ n8 [label="S2"];
+ n9;
+ n10 [fillcolor="pink",style=filled];
+
+ n1 -> n2;
+ n2 -> n3;
+ n7 -> n5;
+ n7 -> n2;
+ n5 -> n6;
+ n6 -> n4;
+ n8 -> n6;
+ n6 -> n9;
+ n2 -> n10;
+ n3 -> n10;
+ n10 -> n4;
+ n10 -> n11;
+}
+--></div>
<p><code>somepath(S1 + S2, E)</code>,<br/>one possible result.</p>
</td>
<td style='padding: 40px; text-align: center'>
-<svg width="153pt" height="288pt"
- viewBox="0.00 0.00 153.40 288.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(0.839179 0.839179) rotate(0) translate(4 339.193)">
-<title>somepath2</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-339.193 178.798,-339.193 178.798,4 -4,4"/>
-<!-- n1 -->
-<g id="node1" class="node">
-<title>n1</title>
-<ellipse fill="none" stroke="black" cx="40" cy="-314.394" rx="18" ry="18"/>
-</g>
-<!-- n2 -->
-<g id="node2" class="node">
-<title>n2</title>
-<ellipse fill="none" stroke="black" cx="41" cy="-236.798" rx="18" ry="18"/>
-</g>
-<!-- n1&#45;&gt;n2 -->
-<g id="edge1" class="edge">
-<title>n1&#45;&gt;n2</title>
-<path fill="none" stroke="black" d="M40.2269,-296.24C40.3484,-287.058 40.5009,-275.531 40.6382,-265.147"/>
-<polygon fill="black" stroke="black" points="44.1413,-264.93 40.774,-254.884 37.1419,-264.837 44.1413,-264.93"/>
-</g>
-<!-- n3 -->
-<g id="node3" class="node">
-<title>n3</title>
-<ellipse fill="none" stroke="black" cx="18" cy="-162" rx="18" ry="18"/>
-</g>
-<!-- n2&#45;&gt;n3 -->
-<g id="edge2" class="edge">
-<title>n2&#45;&gt;n3</title>
-<path fill="none" stroke="black" d="M35.7809,-219.279C32.9579,-210.344 29.4064,-199.103 26.2211,-189.021"/>
-<polygon fill="black" stroke="black" points="29.5485,-187.935 23.1984,-179.454 22.8737,-190.044 29.5485,-187.935"/>
-</g>
-<!-- n10 -->
-<g id="node10" class="node">
-<title>n10</title>
-<ellipse fill="none" stroke="black" cx="37" cy="-90" rx="18" ry="18"/>
-</g>
-<!-- n2&#45;&gt;n10 -->
-<g id="edge9" class="edge">
-<title>n2&#45;&gt;n10</title>
-<path fill="none" stroke="black" d="M42.9371,-218.86C44.7656,-200.425 46.9578,-170.088 45,-144 44.3634,-135.518 43.1616,-126.336 41.8792,-118.036"/>
-<polygon fill="black" stroke="black" points="45.3237,-117.412 40.2483,-108.112 38.4164,-118.547 45.3237,-117.412"/>
-</g>
-<!-- n3&#45;&gt;n10 -->
-<g id="edge10" class="edge">
-<title>n3&#45;&gt;n10</title>
-<path fill="none" stroke="black" d="M22.5027,-144.411C24.7033,-136.304 27.404,-126.354 29.8755,-117.248"/>
-<polygon fill="black" stroke="black" points="33.2878,-118.038 32.5296,-107.47 26.5322,-116.204 33.2878,-118.038"/>
-</g>
-<!-- n4 -->
-<g id="node4" class="node">
-<title>n4</title>
-<ellipse fill="pink" stroke="black" cx="87" cy="-18" rx="18" ry="18"/>
-<text text-anchor="middle" x="87" y="-14.3" font-family="arial" font-size="14.00">E</text>
-</g>
-<!-- n5 -->
-<g id="node5" class="node">
-<title>n5</title>
-<ellipse fill="none" stroke="black" cx="97" cy="-236.798" rx="18" ry="18"/>
-</g>
-<!-- n6 -->
-<g id="node6" class="node">
-<title>n6</title>
-<ellipse fill="pink" stroke="black" cx="121" cy="-162" rx="18" ry="18"/>
-</g>
-<!-- n5&#45;&gt;n6 -->
-<g id="edge5" class="edge">
-<title>n5&#45;&gt;n6</title>
-<path fill="none" stroke="black" d="M102.446,-219.279C105.413,-210.281 109.15,-198.944 112.492,-188.808"/>
-<polygon fill="black" stroke="black" points="115.851,-189.796 115.658,-179.203 109.203,-187.604 115.851,-189.796"/>
-</g>
-<!-- n6&#45;&gt;n4 -->
-<g id="edge6" class="edge">
-<title>n6&#45;&gt;n4</title>
-<path fill="none" stroke="black" d="M115.99,-144.365C112.931,-133.96 109.038,-120.252 106,-108 100.867,-87.3 95.8646,-63.6851 92.2822,-45.9844"/>
-<polygon fill="black" stroke="black" points="95.6398,-44.9258 90.2466,-35.8064 88.7758,-46.2987 95.6398,-44.9258"/>
-</g>
-<!-- n9 -->
-<g id="node9" class="node">
-<title>n9</title>
-<ellipse fill="none" stroke="black" cx="133" cy="-90" rx="18" ry="18"/>
-</g>
-<!-- n6&#45;&gt;n9 -->
-<g id="edge8" class="edge">
-<title>n6&#45;&gt;n9</title>
-<path fill="none" stroke="black" d="M123.905,-144.055C125.261,-136.145 126.907,-126.54 128.425,-117.688"/>
-<polygon fill="black" stroke="black" points="131.882,-118.237 130.122,-107.789 124.982,-117.054 131.882,-118.237"/>
-</g>
-<!-- n7 -->
-<g id="node7" class="node">
-<title>n7</title>
-<ellipse fill="none" stroke="black" cx="97" cy="-314.394" rx="20.5982" ry="20.5982"/>
-<text text-anchor="middle" x="97" y="-310.694" font-family="arial" font-size="14.00">S1</text>
-</g>
-<!-- n7&#45;&gt;n2 -->
-<g id="edge4" class="edge">
-<title>n7&#45;&gt;n2</title>
-<path fill="none" stroke="black" d="M84.8488,-296.991C76.7726,-286.089 66.0734,-271.646 57.2656,-259.756"/>
-<polygon fill="black" stroke="black" points="60.0158,-257.588 51.2509,-251.636 54.391,-261.755 60.0158,-257.588"/>
-</g>
-<!-- n7&#45;&gt;n5 -->
-<g id="edge3" class="edge">
-<title>n7&#45;&gt;n5</title>
-<path fill="none" stroke="black" d="M97,-293.532C97,-284.887 97,-274.612 97,-265.254"/>
-<polygon fill="black" stroke="black" points="100.5,-265.213 97,-255.213 93.5001,-265.213 100.5,-265.213"/>
-</g>
-<!-- n8 -->
-<g id="node8" class="node">
-<title>n8</title>
-<ellipse fill="pink" stroke="black" cx="154" cy="-236.798" rx="20.5982" ry="20.5982"/>
-<text text-anchor="middle" x="154" y="-233.098" font-family="arial" font-size="14.00">S2</text>
-</g>
-<!-- n8&#45;&gt;n6 -->
-<g id="edge7" class="edge">
-<title>n8&#45;&gt;n6</title>
-<path fill="none" stroke="black" d="M145.673,-217.428C141.606,-208.456 136.653,-197.53 132.254,-187.827"/>
-<polygon fill="black" stroke="black" points="135.411,-186.313 128.095,-178.651 129.036,-189.204 135.411,-186.313"/>
-</g>
-<!-- n10&#45;&gt;n4 -->
-<g id="edge11" class="edge">
-<title>n10&#45;&gt;n4</title>
-<path fill="none" stroke="black" d="M47.1182,-74.8345C53.9632,-65.2515 63.1483,-52.3924 70.9784,-41.4303"/>
-<polygon fill="black" stroke="black" points="73.9325,-43.3162 76.8968,-33.1445 68.2363,-39.2475 73.9325,-43.3162"/>
-</g>
-<!-- n11 -->
-<g id="node11" class="node">
-<title>n11</title>
-<ellipse fill="none" stroke="black" cx="33" cy="-18" rx="18" ry="18"/>
-</g>
-<!-- n10&#45;&gt;n11 -->
-<g id="edge12" class="edge">
-<title>n10&#45;&gt;n11</title>
-<path fill="none" stroke="black" d="M36.0112,-71.6966C35.5704,-63.9827 35.0407,-54.7125 34.5493,-46.1124"/>
-<polygon fill="black" stroke="black" points="38.0423,-45.8883 33.9774,-36.1043 31.0537,-46.2878 38.0423,-45.8883"/>
-</g>
-</g>
-</svg>
+<div class='graphviz dot'><!--
+digraph somepath2 {
+ graph [size="4,4"]
+ node [label="",shape=circle];
+
+ n1; n2; n3;
+ n4 [fillcolor="pink",style=filled,label="E"];
+ n5;
+ n6 [fillcolor="pink",style=filled];
+ n7 [label="S1"];
+ n8 [fillcolor="pink",style=filled,label="S2"];
+ n9; n10;
+
+ n1 -> n2;
+ n2 -> n3;
+ n7 -> n5;
+ n7 -> n2;
+ n5 -> n6;
+ n6 -> n4;
+ n8 -> n6;
+ n6 -> n9;
+ n2 -> n10;
+ n3 -> n10;
+ n10 -> n4;
+ n10 -> n11;
+}
+--></div>
<p><code>somepath(S1 + S2, E)</code>,<br/>another possible result.</p>
</td>
<td style='text-align: center'>
-<svg width="153pt" height="288pt"
- viewBox="0.00 0.00 153.40 288.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(0.839179 0.839179) rotate(0) translate(4 339.193)">
-<title>allpaths</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-339.193 178.798,-339.193 178.798,4 -4,4"/>
-<!-- n1 -->
-<g id="node1" class="node">
-<title>n1</title>
-<ellipse fill="none" stroke="black" cx="40" cy="-314.394" rx="18" ry="18"/>
-</g>
-<!-- n2 -->
-<g id="node2" class="node">
-<title>n2</title>
-<ellipse fill="pink" stroke="black" cx="41" cy="-236.798" rx="18" ry="18"/>
-</g>
-<!-- n1&#45;&gt;n2 -->
-<g id="edge1" class="edge">
-<title>n1&#45;&gt;n2</title>
-<path fill="none" stroke="black" d="M40.2269,-296.24C40.3484,-287.058 40.5009,-275.531 40.6382,-265.147"/>
-<polygon fill="black" stroke="black" points="44.1413,-264.93 40.774,-254.884 37.1419,-264.837 44.1413,-264.93"/>
-</g>
-<!-- n3 -->
-<g id="node3" class="node">
-<title>n3</title>
-<ellipse fill="pink" stroke="black" cx="18" cy="-162" rx="18" ry="18"/>
-</g>
-<!-- n2&#45;&gt;n3 -->
-<g id="edge2" class="edge">
-<title>n2&#45;&gt;n3</title>
-<path fill="none" stroke="black" d="M35.7809,-219.279C32.9579,-210.344 29.4064,-199.103 26.2211,-189.021"/>
-<polygon fill="black" stroke="black" points="29.5485,-187.935 23.1984,-179.454 22.8737,-190.044 29.5485,-187.935"/>
-</g>
-<!-- n10 -->
-<g id="node10" class="node">
-<title>n10</title>
-<ellipse fill="pink" stroke="black" cx="37" cy="-90" rx="18" ry="18"/>
-</g>
-<!-- n2&#45;&gt;n10 -->
-<g id="edge9" class="edge">
-<title>n2&#45;&gt;n10</title>
-<path fill="none" stroke="black" d="M42.9371,-218.86C44.7656,-200.425 46.9578,-170.088 45,-144 44.3634,-135.518 43.1616,-126.336 41.8792,-118.036"/>
-<polygon fill="black" stroke="black" points="45.3237,-117.412 40.2483,-108.112 38.4164,-118.547 45.3237,-117.412"/>
-</g>
-<!-- n3&#45;&gt;n10 -->
-<g id="edge10" class="edge">
-<title>n3&#45;&gt;n10</title>
-<path fill="none" stroke="black" d="M22.5027,-144.411C24.7033,-136.304 27.404,-126.354 29.8755,-117.248"/>
-<polygon fill="black" stroke="black" points="33.2878,-118.038 32.5296,-107.47 26.5322,-116.204 33.2878,-118.038"/>
-</g>
-<!-- n4 -->
-<g id="node4" class="node">
-<title>n4</title>
-<ellipse fill="pink" stroke="black" cx="87" cy="-18" rx="18" ry="18"/>
-<text text-anchor="middle" x="87" y="-14.3" font-family="arial" font-size="14.00">E</text>
-</g>
-<!-- n5 -->
-<g id="node5" class="node">
-<title>n5</title>
-<ellipse fill="pink" stroke="black" cx="97" cy="-236.798" rx="18" ry="18"/>
-</g>
-<!-- n6 -->
-<g id="node6" class="node">
-<title>n6</title>
-<ellipse fill="pink" stroke="black" cx="121" cy="-162" rx="18" ry="18"/>
-</g>
-<!-- n5&#45;&gt;n6 -->
-<g id="edge5" class="edge">
-<title>n5&#45;&gt;n6</title>
-<path fill="none" stroke="black" d="M102.446,-219.279C105.413,-210.281 109.15,-198.944 112.492,-188.808"/>
-<polygon fill="black" stroke="black" points="115.851,-189.796 115.658,-179.203 109.203,-187.604 115.851,-189.796"/>
-</g>
-<!-- n6&#45;&gt;n4 -->
-<g id="edge6" class="edge">
-<title>n6&#45;&gt;n4</title>
-<path fill="none" stroke="black" d="M115.99,-144.365C112.931,-133.96 109.038,-120.252 106,-108 100.867,-87.3 95.8646,-63.6851 92.2822,-45.9844"/>
-<polygon fill="black" stroke="black" points="95.6398,-44.9258 90.2466,-35.8064 88.7758,-46.2987 95.6398,-44.9258"/>
-</g>
-<!-- n9 -->
-<g id="node9" class="node">
-<title>n9</title>
-<ellipse fill="none" stroke="black" cx="133" cy="-90" rx="18" ry="18"/>
-</g>
-<!-- n6&#45;&gt;n9 -->
-<g id="edge8" class="edge">
-<title>n6&#45;&gt;n9</title>
-<path fill="none" stroke="black" d="M123.905,-144.055C125.261,-136.145 126.907,-126.54 128.425,-117.688"/>
-<polygon fill="black" stroke="black" points="131.882,-118.237 130.122,-107.789 124.982,-117.054 131.882,-118.237"/>
-</g>
-<!-- n7 -->
-<g id="node7" class="node">
-<title>n7</title>
-<ellipse fill="pink" stroke="black" cx="97" cy="-314.394" rx="20.5982" ry="20.5982"/>
-<text text-anchor="middle" x="97" y="-310.694" font-family="arial" font-size="14.00">S1</text>
-</g>
-<!-- n7&#45;&gt;n2 -->
-<g id="edge4" class="edge">
-<title>n7&#45;&gt;n2</title>
-<path fill="none" stroke="black" d="M84.8488,-296.991C76.7726,-286.089 66.0734,-271.646 57.2656,-259.756"/>
-<polygon fill="black" stroke="black" points="60.0158,-257.588 51.2509,-251.636 54.391,-261.755 60.0158,-257.588"/>
-</g>
-<!-- n7&#45;&gt;n5 -->
-<g id="edge3" class="edge">
-<title>n7&#45;&gt;n5</title>
-<path fill="none" stroke="black" d="M97,-293.532C97,-284.887 97,-274.612 97,-265.254"/>
-<polygon fill="black" stroke="black" points="100.5,-265.213 97,-255.213 93.5001,-265.213 100.5,-265.213"/>
-</g>
-<!-- n8 -->
-<g id="node8" class="node">
-<title>n8</title>
-<ellipse fill="pink" stroke="black" cx="154" cy="-236.798" rx="20.5982" ry="20.5982"/>
-<text text-anchor="middle" x="154" y="-233.098" font-family="arial" font-size="14.00">S2</text>
-</g>
-<!-- n8&#45;&gt;n6 -->
-<g id="edge7" class="edge">
-<title>n8&#45;&gt;n6</title>
-<path fill="none" stroke="black" d="M145.673,-217.428C141.606,-208.456 136.653,-197.53 132.254,-187.827"/>
-<polygon fill="black" stroke="black" points="135.411,-186.313 128.095,-178.651 129.036,-189.204 135.411,-186.313"/>
-</g>
-<!-- n10&#45;&gt;n4 -->
-<g id="edge11" class="edge">
-<title>n10&#45;&gt;n4</title>
-<path fill="none" stroke="black" d="M47.1182,-74.8345C53.9632,-65.2515 63.1483,-52.3924 70.9784,-41.4303"/>
-<polygon fill="black" stroke="black" points="73.9325,-43.3162 76.8968,-33.1445 68.2363,-39.2475 73.9325,-43.3162"/>
-</g>
-<!-- n11 -->
-<g id="node11" class="node">
-<title>n11</title>
-<ellipse fill="none" stroke="black" cx="33" cy="-18" rx="18" ry="18"/>
-</g>
-<!-- n10&#45;&gt;n11 -->
-<g id="edge12" class="edge">
-<title>n10&#45;&gt;n11</title>
-<path fill="none" stroke="black" d="M36.0112,-71.6966C35.5704,-63.9827 35.0407,-54.7125 34.5493,-46.1124"/>
-<polygon fill="black" stroke="black" points="38.0423,-45.8883 33.9774,-36.1043 31.0537,-46.2878 38.0423,-45.8883"/>
-</g>
-</g>
-</svg>
+<div class='graphviz dot'><!--
+digraph allpaths {
+ graph [size="4,4"]
+ node [label="",shape=circle];
+ n1;
+ n2 [fillcolor="pink",style=filled];
+ n3 [fillcolor="pink",style=filled];
+ n4 [fillcolor="pink",style=filled,label="E"];
+ n5 [fillcolor="pink",style=filled];
+ n6 [fillcolor="pink",style=filled];
+ n7 [fillcolor="pink",style=filled, label="S1"];
+ n8 [fillcolor="pink",style=filled, label="S2"];
+ n9;
+ n10 [fillcolor="pink",style=filled];
+
+ n1 -> n2;
+ n2 -> n3;
+ n7 -> n5;
+ n7 -> n2;
+ n5 -> n6;
+ n6 -> n4;
+ n8 -> n6;
+ n6 -> n9;
+ n2 -> n10;
+ n3 -> n10;
+ n10 -> n4;
+ n10 -> n11;
+}
+--></div>
<p><code>allpaths(S1 + S2, E)</code>.</p>
</td>
</tr></table>
@@ -1490,73 +1163,16 @@ genrule(
</p>
<table style='margin: auto'><tr><td>
-<svg width="169pt" height="260pt"
- viewBox="0.00 0.00 169.00 260.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 256)">
-<title>mygraph</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-256 165,-256 165,4 -4,4"/>
-<!-- //a:a -->
-<g id="node1" class="node">
-<title>//a:a</title>
-<polygon fill="none" stroke="black" points="65.5,-108 11.5,-108 11.5,-72 65.5,-72 65.5,-108"/>
-<text text-anchor="middle" x="38.5" y="-86.3" font-family="arial" font-size="14.00">//a:a</text>
-</g>
-<!-- //a:a.cc -->
-<g id="node2" class="node">
-<title>//a:a.cc</title>
-<polygon fill="none" stroke="black" points="77,-36 0,-36 0,-0 77,-0 77,-36"/>
-<text text-anchor="middle" x="38.5" y="-14.3" font-family="arial" font-size="14.00">//a:a.cc</text>
-</g>
-<!-- //a:a&#45;&gt;//a:a.cc -->
-<g id="edge1" class="edge">
-<title>//a:a&#45;&gt;//a:a.cc</title>
-<path fill="none" stroke="black" d="M38.5,-71.6966C38.5,-63.9827 38.5,-54.7125 38.5,-46.1124"/>
-<polygon fill="black" stroke="black" points="42.0001,-46.1043 38.5,-36.1043 35.0001,-46.1044 42.0001,-46.1043"/>
-</g>
-<!-- //b:b -->
-<g id="node3" class="node">
-<title>//b:b</title>
-<polygon fill="none" stroke="black" points="120.5,-180 66.5,-180 66.5,-144 120.5,-144 120.5,-180"/>
-<text text-anchor="middle" x="93.5" y="-158.3" font-family="arial" font-size="14.00">//b:b</text>
-</g>
-<!-- //b:b&#45;&gt;//a:a -->
-<g id="edge2" class="edge">
-<title>//b:b&#45;&gt;//a:a</title>
-<path fill="none" stroke="black" d="M79.9045,-143.697C73.3773,-135.389 65.432,-125.277 58.2534,-116.141"/>
-<polygon fill="black" stroke="black" points="60.8695,-113.805 51.9391,-108.104 55.3653,-118.13 60.8695,-113.805"/>
-</g>
-<!-- //b:b.cc -->
-<g id="node4" class="node">
-<title>//b:b.cc</title>
-<polygon fill="none" stroke="black" points="161,-108 84,-108 84,-72 161,-72 161,-108"/>
-<text text-anchor="middle" x="122.5" y="-86.3" font-family="arial" font-size="14.00">//b:b.cc</text>
-</g>
-<!-- //b:b&#45;&gt;//b:b.cc -->
-<g id="edge3" class="edge">
-<title>//b:b&#45;&gt;//b:b.cc</title>
-<path fill="none" stroke="black" d="M100.669,-143.697C103.935,-135.813 107.874,-126.304 111.502,-117.546"/>
-<polygon fill="black" stroke="black" points="114.82,-118.683 115.414,-108.104 108.353,-116.003 114.82,-118.683"/>
-</g>
-<!-- //c:c -->
-<g id="node5" class="node">
-<title>//c:c</title>
-<polygon fill="none" stroke="black" points="92.5,-252 38.5,-252 38.5,-216 92.5,-216 92.5,-252"/>
-<text text-anchor="middle" x="65.5" y="-230.3" font-family="arial" font-size="14.00">//c:c</text>
-</g>
-<!-- //c:c&#45;&gt;//a:a -->
-<g id="edge5" class="edge">
-<title>//c:c&#45;&gt;//a:a</title>
-<path fill="none" stroke="black" d="M62.2432,-215.871C57.6415,-191.67 49.188,-147.211 43.7086,-118.393"/>
-<polygon fill="black" stroke="black" points="47.0748,-117.359 41.7684,-108.189 40.198,-118.667 47.0748,-117.359"/>
-</g>
-<!-- //c:c&#45;&gt;//b:b -->
-<g id="edge4" class="edge">
-<title>//c:c&#45;&gt;//b:b</title>
-<path fill="none" stroke="black" d="M72.4214,-215.697C75.5747,-207.813 79.3783,-198.304 82.8814,-189.546"/>
-<polygon fill="black" stroke="black" points="86.194,-190.689 86.6583,-180.104 79.6946,-188.089 86.194,-190.689"/>
-</g>
-</g>
-</svg>
+<div class='graphviz dot'><!--
+digraph mygraph {
+ node [shape=box];
+"//a:a" -> "//a:a.cc"
+"//b:b" -> "//a:a"
+"//b:b" -> "//b:b.cc"
+"//c:c" -> "//b:b"
+"//c:c" -> "//a:a"
+}
+--></div>
</td><td>
<pre>
minrank
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/CompressedTarFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/CompressedTarFunction.java
index c76bf58b5b..55cd813d47 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/CompressedTarFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/CompressedTarFunction.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunctionException.Transience;
+import java.util.Date;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
@@ -78,6 +79,11 @@ public abstract class CompressedTarFunction implements Decompressor {
Files.copy(
tarStream, filename.getPathFile().toPath(), StandardCopyOption.REPLACE_EXISTING);
filename.chmod(entry.getMode());
+
+ // This can only be done on real files, not links, or it will skip the reader to
+ // the next "real" file to try to find the mod time info.
+ Date lastModified = entry.getLastModifiedDate();
+ filename.setLastModifiedTime(lastModified.getTime());
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java
index 70e8a9f7d6..c20da5a8d9 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java
@@ -527,7 +527,8 @@ public class SkylarkRepositoryContext {
@ParamType(type = String.class),
@ParamType(type = SkylarkList.class, generic1 = String.class),
},
- doc = "List of mirror URLs referencing the same file."
+ doc = "List of mirror URLs referencing the same file.",
+ named = true
),
@Param(
name = "output",
@@ -538,7 +539,8 @@ public class SkylarkRepositoryContext {
},
doc =
"path to the directory where the archive will be unpacked,"
- + " relative to the repository directory."
+ + " relative to the repository directory.",
+ defaultValue = "''"
),
@Param(
name = "sha256",
@@ -570,9 +572,9 @@ public class SkylarkRepositoryContext {
named = true,
doc =
"a directory prefix to strip from the extracted files."
- + "\nMany archives contain a top-level directory that contains alfiles in"
+ + "\nMany archives contain a top-level directory that contains all files in the"
+ " archive. Instead of needing to specify this prefix over and over in the"
- + " <code>build_file</code>, this field can be used to strip it extracted"
+ + " <code>build_file</code>, this field can be used to strip it from extracted"
+ " files."
),
}
diff --git a/tools/build_defs/repo/make.bzl b/tools/build_defs/repo/make.bzl
new file mode 100644
index 0000000000..9e7f478cf5
--- /dev/null
+++ b/tools/build_defs/repo/make.bzl
@@ -0,0 +1,66 @@
+# Copyright 2016 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+""""Respositry rules for converting Makefile-based projects to Bazel."""
+
+def _impl(ctx):
+ """Downloads, extracts, and runs configure && make on an archive."""
+ ctx.download_and_extract(
+ url = ctx.attr.urls,
+ stripPrefix = ctx.attr.strip_prefix,
+ sha256 = ctx.attr.sha256,
+ )
+
+ result = ctx.execute(['./configure'])
+ if result.return_code != 0:
+ print(result.stdout)
+ print(result.stderr)
+ fail('error running configure')
+ # TODO(kchodorow): allow specifying make rules here.
+ result = ctx.execute(['make'])
+ if result.return_code != 0:
+ print(result.stdout)
+ print(result.stderr)
+ fail('error running make')
+
+ # Check that all expected files were created.
+ missing_files = []
+ for f in ctx.attr.exports:
+ if not ctx.path(f).exists:
+ missing_files += [f]
+ if missing_files:
+ fail('file(s) %s were not created' % ', '.join(missing_files))
+
+ ctx.file('WORKSPACE', """
+# Automatically generated WORKSPACE file.
+workspace(name = 'name')
+""".format(name = ctx.name))
+ ctx.file('BUILD', """
+exports_files({exports})
+
+{build_file_content}
+""".format(
+ exports = ctx.attr.exports,
+ build_file_content = ctx.attr.build_file_content))
+
+
+make = repository_rule(
+ implementation = _impl,
+ attrs = {
+ 'urls':attr.string_list(mandatory = True),
+ 'exports':attr.string_list(mandatory = True),
+ 'strip_prefix':attr.string(default = ''),
+ 'sha256':attr.string(default = ''),
+ 'build_file_content':attr.string(default = ''),
+ }
+)