summaryrefslogtreecommitdiff
path: root/tools/boostdep/doc/html/index.html
blob: 35f5e7d23cb04623918a5be4c33d6a1951553949 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Boostdep</title>
<link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="Boostdep">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td>
<td align="center"><a href="../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav"></div>
<div class="article">
<div class="titlepage">
<div>
<div><h2 class="title">
<a name="boostdep"></a>Boostdep</h2></div>
<div><p class="copyright">Copyright &#169; 2014, 2015 Peter Dimov</p></div>
<div><div class="legalnotice">
<a name="boostdep.legal"></a><p>
        Distributed under the <a href="http://boost.org/LICENSE_1_0.txt" target="_top">Boost
        Software License, Version 1.0</a>.
      </p>
</div></div>
</div>
<hr>
</div>
<div class="toc">
<p><b>Table of Contents</b></p>
<dl class="toc">
<dt><span class="section"><a href="index.html#boostdep.introduction">Introduction</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="index.html#boostdep.introduction.modular_boost">Modular Boost</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.introduction.building_boostdep">Building Boostdep</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.introduction.running_boostdep">Running Boostdep</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="index.html#boostdep.usage">Usage</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="index.html#boostdep.usage.simple_queries">Simple Queries</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.usage.html_reports">HTML reports</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="index.html#boostdep.reference">Reference</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="index.html#boostdep.reference.list_modules">--list-modules</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.list_buildable">--list-buildable</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.list_dependencies">--list-dependencies</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.module_overview">--module-overview</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.module_levels">--module-levels</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.module_weights">--module-weights</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.primary">--primary</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.secondary">--secondary</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.reverse">--reverse</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.header">--header</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.track_sources">--track-sources</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.title">--title</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.footer">--footer</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.html">--html</a></span></dt>
</dl></dd>
</dl>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boostdep.introduction"></a><a class="link" href="index.html#boostdep.introduction" title="Introduction">Introduction</a>
</h2></div></div></div>
<div class="toc"><dl class="toc">
<dt><span class="section"><a href="index.html#boostdep.introduction.modular_boost">Modular Boost</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.introduction.building_boostdep">Building Boostdep</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.introduction.running_boostdep">Running Boostdep</a></span></dt>
</dl></div>
<p>
      <span class="emphasis"><em>Boostdep</em></span> is a tool for generating Boost dependency reports.
      It scans the header or source files of the Boost libraries for <code class="computeroutput"><span class="preprocessor">#include</span></code> directives, builds a dependency
      graph from this information and outputs its findings in plain text or HTML.
    </p>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.introduction.modular_boost"></a><a class="link" href="index.html#boostdep.introduction.modular_boost" title="Modular Boost">Modular Boost</a>
</h3></div></div></div>
<p>
        <span class="emphasis"><em>Boostdep</em></span> requires the so-called "modular Boost"
        directory structure.
      </p>
<p>
        If you already have a <a href="https://svn.boost.org/trac/boost/wiki/ModularBoost" target="_top">modular
        Boost installation</a>, you can skip this section. Otherwise, read on.
      </p>
<p>
        Boost libraries reside in subdirectories under the <code class="literal">libs</code>
        directory. For example, the contents of the Boost.Filesystem library are
        in <code class="literal">libs/filesystem</code>. This includes the build scripts (in
        <code class="literal">libs/filesystem/build</code>), the source files (in <code class="literal">libs/filesystem/src</code>),
        the tests (in <code class="literal">libs/filesystem/test</code>), the documentation
        (in <code class="literal">libs/filesystem/doc</code>), and so on.
      </p>
<p>
        In the past, when Boost used SVN as its version control system, the header
        files were an exception. The header files of all libraries resided in the
        <code class="literal">boost</code> subdirectory, and it wasn't possible to accurately
        determine which header belonged to which library.
      </p>
<p>
        When Boost moved to Git for version control, header files were moved to their
        corresponding libraries, into an <code class="literal">include</code> subdirectory.
        The header files of Boost.Filesystem are now in <code class="literal">libs/filesystem/include</code>.
      </p>
<p>
        For compatibility, <code class="literal">boost</code> is now a "virtual"
        directory, containing links to the headers. It's maintained automatically
        by Boost.Build. (The command <code class="literal">b2 headers</code> creates or recreates
        the contents of the <code class="literal">boost</code> directory.)
      </p>
<p>
        This new structure allows <span class="emphasis"><em>Boostdep</em></span> to determine that,
        when faced with an <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">filesystem</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
        directive, that this header is part of Boost.Filesystem, and that therefore,
        the current library being scanned depends on Boost.Filesystem.
      </p>
<p>
        Unfortunately, Boost releases do not have this structure. For backward compatibility,
        they have an old-style <code class="literal">boost</code> directory containing all
        header files, whereas the per-library <code class="literal">include</code> subdirectories
        are missing. Therefore, <span class="emphasis"><em>Boostdep</em></span> will not work with
        a downloaded Boost release.
      </p>
<p>
        To use <span class="emphasis"><em>Boostdep</em></span>, you will have to clone the Boost Git
        repository instead. To do that, execute the following command:
      </p>
<pre class="programlisting">git clone https://github.com/boostorg/boost.git boost
</pre>
<p>
        This will download the Boost "superproject" (the master project,
        without any libraries) and place it into the subdirectory <code class="literal">boost</code>
        of the current directory. To override the directory name, pass it as a second
        argument instead of <code class="literal">boost</code>:
      </p>
<pre class="programlisting">git clone https://github.com/boostorg/boost.git <span class="emphasis"><em>mydir</em></span>
</pre>
<p>
        You can now <code class="literal">cd</code> into the newly created directory with
      </p>
<pre class="programlisting">cd <span class="emphasis"><em>mydir</em></span>
</pre>
<p>
        This directory is called the "Boost root". All of the commands
        below assume that it is the current directory.
      </p>
<p>
        The above <code class="literal">git clone</code> commands download the default branch
        of the Boost Git repository, which is <code class="literal">master</code>. This is
        the current more-or-less stable version of Boost.
      </p>
<p>
        To verify this, issue the command
      </p>
<pre class="programlisting">git status
</pre>
<p>
        from the Boost root. This will output
      </p>
<pre class="programlisting"># On branch master
nothing to commit, working directory clean
</pre>
<p>
        To download a specific release instead, such as 1.58.0, issue the following
        command after <code class="literal">git clone</code>, from the Boost root:
      </p>
<pre class="programlisting">git checkout boost-1.58.0
</pre>
<p>
        <code class="literal">git status</code> will now say
      </p>
<pre class="programlisting"># HEAD detached at boost-1.58.0
nothing to commit, working directory clean
</pre>
<p>
        Then, download all the libraries:
      </p>
<pre class="programlisting">git submodule update --init
</pre>
<p>
        This step will take a while.
      </p>
<p>
        If all goes well, you will now have the complete contents of Boost's latest
        <code class="literal">master</code> branch (if you didn't <code class="literal">checkout</code>
        a specific release by name) or the corresponding Boost release (if you did).
      </p>
<p>
        You can switch between the <code class="literal">master</code> branch, the <code class="literal">develop</code>
        (unstable) branch, and a release, by issuing the following commands:
      </p>
<div class="blockquote"><blockquote class="blockquote"><p>
          For the <code class="literal">master</code> branch:
        </p></blockquote></div>
<pre class="programlisting">git checkout master
git pull
git submodule update --init
</pre>
<div class="blockquote"><blockquote class="blockquote"><p>
          (<code class="literal">git pull</code> updates your local copy of the <code class="literal">master</code>
          branch from the server, in case it has changed since your initial checkout.)
        </p></blockquote></div>
<div class="blockquote"><blockquote class="blockquote"><p>
          For the <code class="literal">develop</code> branch:
        </p></blockquote></div>
<pre class="programlisting">git checkout develop
git pull
git submodule update --init
</pre>
<div class="blockquote"><blockquote class="blockquote"><p>
          For the <code class="literal">boost-1.58.0</code> release:
        </p></blockquote></div>
<pre class="programlisting">git checkout boost-1.58.0
git submodule update --init
</pre>
<div class="blockquote"><blockquote class="blockquote"><p>
          For the <code class="literal">boost-1.57.0</code> release:
        </p></blockquote></div>
<pre class="programlisting">git checkout boost-1.57.0
git submodule update --init
</pre>
<p>
        Note that, while the initial <code class="literal">git submodule update</code> is quite
        slow, as it needs to download all the libraries, the subsequent invocations
        are a lot faster.
      </p>
<p>
        Also note that if a new Boost library (<code class="literal">libs/convert</code>, for
        example) is present in, say, <code class="literal">master</code>, and you have it checked
        out, when you later switch to <code class="literal">boost-1.58.0</code>, where this
        library doesn't exist, Git will not delete <code class="literal">libs/convert</code>.
        In this case, <code class="literal">git status</code> will output
      </p>
<pre class="programlisting"># HEAD detached at boost-1.58.0
# Untracked files:
#   (use "git add &lt;file&gt;..." to include in what will be committed)
#
#       libs/convert/
nothing added to commit but untracked files present (use "git add" to track)
</pre>
<p>
        and you will have to remove <code class="literal">libs/convert</code> by hand.
      </p>
<p>
        Once you have the Boost contents which you want to analyze for dependencies,
        proceed with the next step, building <span class="emphasis"><em>Boostdep</em></span>.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.introduction.building_boostdep"></a><a class="link" href="index.html#boostdep.introduction.building_boostdep" title="Building Boostdep">Building Boostdep</a>
</h3></div></div></div>
<p>
        To build <span class="emphasis"><em>Boostdep</em></span>, issue the following command from
        the Boost root:
      </p>
<pre class="programlisting">b2 tools/boostdep/build//install
</pre>
<p>
        This will build <span class="emphasis"><em>Boostdep</em></span> from source using the default
        "toolset" (a Boost.Build term meaning "compiler") and
        if successful, place it into the <code class="literal">dist/bin</code> subdirectory.
        The command assumes that <code class="literal">b2</code> (the Boost.Build executable)
        is somewhere in your path. If you don't have <code class="literal">b2</code>, execute
      </p>
<pre class="programlisting">.\bootstrap
</pre>
<p>
        under Windows or
      </p>
<pre class="programlisting">./bootstrap.sh
</pre>
<p>
        under Unix-like systems, which should build <code class="literal">b2</code> and place
        it into the current directory. You can then use <code class="literal">./b2</code> instead
        of <code class="literal">b2</code>.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.introduction.running_boostdep"></a><a class="link" href="index.html#boostdep.introduction.running_boostdep" title="Running Boostdep">Running Boostdep</a>
</h3></div></div></div>
<p>
        Once you have built <span class="emphasis"><em>Boostdep</em></span>, execute it with the following
        command:
      </p>
<pre class="programlisting">dist/bin/boostdep
</pre>
<p>
        or
      </p>
<pre class="programlisting">dist\bin\boostdep
</pre>
<p>
        on Windows. The commands below are given as using <code class="literal">dist/bin/boostdep</code>;
        if you're using Windows, use <code class="literal">dist\bin\boostdep</code> instead.
      </p>
<p>
        This will print out the following help message:
      </p>
<pre class="programlisting">Usage:

    boostdep --list-modules
    boostdep --list-buildable
    boostdep [--track-sources] --list-dependencies

    boostdep [options] --module-overview
    boostdep [options] --module-levels
    boostdep [options] --module-weights

    boostdep [options] [--primary] &lt;module&gt;
    boostdep [options] --secondary &lt;module&gt;
    boostdep [options] --reverse &lt;module&gt;
    boostdep [options] [--header] &lt;header&gt;

    [options]: [--track-sources] [--title &lt;title&gt;] [--footer &lt;footer&gt;] [--html]
</pre>
<p>
        (The 1.58.0 version of <span class="emphasis"><em>Boostdep</em></span> has an unfortunate bug
        that causes the above output to be truncated after <code class="literal">boostdep --list-modules</code>.
        The rest of the functionality is intact though, so you can still use it as
        described.)
      </p>
</div>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boostdep.usage"></a><a class="link" href="index.html#boostdep.usage" title="Usage">Usage</a>
</h2></div></div></div>
<div class="toc"><dl class="toc">
<dt><span class="section"><a href="index.html#boostdep.usage.simple_queries">Simple Queries</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.usage.html_reports">HTML reports</a></span></dt>
</dl></div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.usage.simple_queries"></a><a class="link" href="index.html#boostdep.usage.simple_queries" title="Simple Queries">Simple Queries</a>
</h3></div></div></div>
<p>
        To list the dependencies of a specific library, use the command
      </p>
<pre class="programlisting">dist/bin/boostdep <span class="emphasis"><em>library</em></span>
</pre>
<p>
        For Boost.Filesystem, for example, type
      </p>
<pre class="programlisting">dist/bin/boostdep filesystem
</pre>
<p>
        This will print out something similar to the following:
      </p>
<pre class="programlisting">Primary dependencies for filesystem:

assert:
    &lt;boost/assert.hpp&gt;
        from &lt;boost/filesystem/operations.hpp&gt;
        from &lt;boost/filesystem/path_traits.hpp&gt;

config:
    &lt;boost/config.hpp&gt;
        from &lt;boost/filesystem/config.hpp&gt;
        from &lt;boost/filesystem/convenience.hpp&gt;
        from &lt;boost/filesystem/fstream.hpp&gt;
        from &lt;boost/filesystem/operations.hpp&gt;
        from &lt;boost/filesystem/path.hpp&gt;
        from &lt;boost/filesystem/path_traits.hpp&gt;
    <span class="emphasis"><em>...</em></span>

functional:
    &lt;boost/functional/hash_fwd.hpp&gt;
        from &lt;boost/filesystem/path.hpp&gt;

io:
    &lt;boost/io/detail/quoted_manip.hpp&gt;
        from &lt;boost/filesystem/path.hpp&gt;

iterator:
    &lt;boost/iterator/iterator_facade.hpp&gt;
        from &lt;boost/filesystem/path.hpp&gt;
    <span class="emphasis"><em>...</em></span>
</pre>
<p>
        This lists the immediate dependencies of Boost.Filesystem. <code class="literal">assert:</code>
        is the library, <code class="literal">&lt;boost/assert.hpp&gt;</code> is the file that
        is being included, and <code class="literal">from &lt;boost/filesystem/config.hpp&gt;</code>
        shows where <code class="literal">&lt;boost/assert.hpp&gt;</code> is being included.
      </p>
<p>
        <span class="emphasis"><em>Boostdep</em></span> names libraries (or modules) after their directory
        name. The <code class="literal">libs/filesystem</code> directory, for example, is the
        <code class="literal">filesystem</code> module. The <code class="literal">libs/numeric/conversion</code>
        directory is the <code class="literal">numeric~conversion</code> module, according
        to the <span class="emphasis"><em>Boostdep</em></span> naming convention.
      </p>
<p>
        The reason forward slashes are replaced with tildes is that <code class="literal">numeric~conversion</code>
        is a valid file name, which makes generating HTML reports a bit easier.
      </p>
<p>
        To see where a given header resides and who includes it, type
      </p>
<pre class="programlisting">dist/bin/boostdep <span class="emphasis"><em>header</em></span>
</pre>
<p>
        For <code class="literal">boost/filesystem.hpp</code>, for example, type
      </p>
<pre class="programlisting">dist/bin/boostdep boost/filesystem.hpp
</pre>
<p>
        This will print something along the lines of
      </p>
<pre class="programlisting">Inclusion report for &lt;boost/filesystem.hpp&gt; (in module filesystem):

    from spirit:
        &lt;boost/spirit/home/x3/support/utility/testing.hpp&gt;
</pre>
<p>
        What this tells you is that <code class="literal">boost/filesystem.hpp</code> is part
        of Boost.Filesystem and is only included once, from <code class="literal">&lt;boost/spirit/home/x3/support/utility/testing.hpp&gt;</code>.
        Other headers, such as <code class="literal">boost/shared_ptr.hpp</code>, are more
        widely used, as you can see if you try
      </p>
<pre class="programlisting">dist/bin/boostdep boost/shared_ptr.hpp
</pre>
<p>
        To print the reverse dependencies of a library, use
      </p>
<pre class="programlisting">dist/bin/boostdep --reverse <span class="emphasis"><em>library</em></span>
</pre>
<p>
        For example,
      </p>
<pre class="programlisting">dist/bin/boostdep --reverse filesystem
</pre>
<p>
        will list which libraries depend on Boost.Filesystem:
      </p>
<pre class="programlisting">Reverse dependencies for filesystem:

graph_parallel:
    &lt;boost/filesystem/operations.hpp&gt;
        from &lt;boost/graph/distributed/adjlist/serialization.hpp&gt;
    &lt;boost/filesystem/path.hpp&gt;
        from &lt;boost/graph/distributed/adjlist/serialization.hpp&gt;

log:
    &lt;boost/filesystem/config.hpp&gt;
        from &lt;boost/log/detail/config.hpp&gt;
    &lt;boost/filesystem/path.hpp&gt;
        from &lt;boost/log/sinks/event_log_backend.hpp&gt;
        from &lt;boost/log/sinks/text_file_backend.hpp&gt;
        from &lt;boost/log/sinks/text_multifile_backend.hpp&gt;

spirit:
    &lt;boost/filesystem.hpp&gt;
        from &lt;boost/spirit/home/x3/support/utility/testing.hpp&gt;
    &lt;boost/filesystem/fstream.hpp&gt;
        from &lt;boost/spirit/home/x3/support/utility/testing.hpp&gt;
    &lt;boost/filesystem/path.hpp&gt;
        from &lt;boost/spirit/home/x3/support/utility/error_reporting.hpp&gt;

wave:
    &lt;boost/filesystem/operations.hpp&gt;
        from &lt;boost/wave/util/cpp_include_paths.hpp&gt;
        from &lt;boost/wave/util/cpp_iterator.hpp&gt;
        from &lt;boost/wave/util/filesystem_compatibility.hpp&gt;
    &lt;boost/filesystem/path.hpp&gt;
        from &lt;boost/wave/cpp_context.hpp&gt;
        from &lt;boost/wave/util/cpp_include_paths.hpp&gt;
        from &lt;boost/wave/util/cpp_iterator.hpp&gt;
        from &lt;boost/wave/util/cpp_macromap.hpp&gt;
        from &lt;boost/wave/util/filesystem_compatibility.hpp&gt;
</pre>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.usage.html_reports"></a><a class="link" href="index.html#boostdep.usage.html_reports" title="HTML reports">HTML reports</a>
</h3></div></div></div>
<p>
        The primary purpose of <span class="emphasis"><em>Boostdep</em></span> is to generate HTML
        dependency reports. In the typical case, two types of reports are generated:
        overviews that contain information for all modules, and per-module ones that
        list information for a specific library.
      </p>
<p>
        <span class="emphasis"><em>Boostdep</em></span> can generate three types of the first kind
        of report: module overview, module levels and module weights. To generate
        a module overview, use the command
      </p>
<pre class="programlisting">dist/bin/boostdep --html --module-overview &gt; module-overview.html
</pre>
<p>
        For a module level report, use
      </p>
<pre class="programlisting">dist/bin/boostdep --html --module-levels &gt; module-levels.html
</pre>
<p>
        For a module weight report, use
      </p>
<pre class="programlisting">dist/bin/boostdep --html --module-weights &gt; module-weights.html
</pre>
<p>
        In these reports, module names such as <span class="emphasis"><em>module</em></span> are HTML
        links to <code class="literal"><span class="emphasis"><em>module</em></span>.html</code>.
      </p>
<p>
        To make these links work as expected, you can generate HTML reports for each
        module as follows:
      </p>
<pre class="programlisting">dist/bin/boostdep --title "Dependency Report for <span class="emphasis"><em>module</em></span>" --html --primary <span class="emphasis"><em>module</em></span> --secondary <span class="emphasis"><em>module</em></span> --reverse <span class="emphasis"><em>module</em></span> &gt; <span class="emphasis"><em>module</em></span>.html
</pre>
<p>
        This step can be automated if you generate a module list first with
      </p>
<pre class="programlisting">dist/bin/boostdep --list-modules &gt; list-modules.txt
</pre>
<p>
        that will contain one module name per line, and then use a script to issue
        the previous command for each module name.
      </p>
<p>
        For more information about the <span class="emphasis"><em>Boostdep</em></span> options and
        commands, see the <a class="link" href="index.html#boostdep.reference" title="Reference">Reference</a> section.
      </p>
<p>
        For an example of a report generation script, see the file <code class="literal">tools/boostdep/examples/report.bat</code>.
        This is a Windows batch file, but translating it to a Unix-style shell script
        should be straightforward.
      </p>
<p>
        For convenience, the contents of <code class="literal">tools/boostdep/examples/report.bat</code>
        are given below:
      </p>
<pre class="programlisting">SET BOOSTDEP=dist\bin\boostdep.exe

FOR /f %%i IN ('git rev-parse HEAD') DO @SET REV=%%i

FOR /f %%i IN ('git rev-parse --short HEAD') DO @SET SHREV=%%i

FOR /f %%i IN ('git rev-parse --abbrev-ref HEAD') DO @SET BRANCH=%%i

SET FOOTER=Generated on %DATE% %TIME% from revision %REV% on branch '%BRANCH%'

SET OUTDIR=..\report-%BRANCH%-%SHREV%

mkdir %OUTDIR%

%BOOSTDEP% --list-modules &gt; %OUTDIR%\list-modules.txt

%BOOSTDEP% --footer "%FOOTER%" --html --module-overview &gt; %OUTDIR%\module-overview.html
%BOOSTDEP% --footer "%FOOTER%" --html --module-levels &gt; %OUTDIR%\module-levels.html
%BOOSTDEP% --footer "%FOOTER%" --html --module-weights &gt; %OUTDIR%\module-weights.html

FOR /f %%i IN (%OUTDIR%\list-modules.txt) DO %BOOSTDEP% --title "Dependency Report for %%i" --footer "%FOOTER%" --html --primary %%i --secondary %%i --reverse %%i &gt; %OUTDIR%%%i.html
</pre>
</div>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boostdep.reference"></a><a class="link" href="index.html#boostdep.reference" title="Reference">Reference</a>
</h2></div></div></div>
<div class="toc"><dl class="toc">
<dt><span class="section"><a href="index.html#boostdep.reference.list_modules">--list-modules</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.list_buildable">--list-buildable</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.list_dependencies">--list-dependencies</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.module_overview">--module-overview</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.module_levels">--module-levels</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.module_weights">--module-weights</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.primary">--primary</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.secondary">--secondary</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.reverse">--reverse</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.header">--header</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.track_sources">--track-sources</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.title">--title</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.footer">--footer</a></span></dt>
<dt><span class="section"><a href="index.html#boostdep.reference.html">--html</a></span></dt>
</dl></div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.list_modules"></a><a class="link" href="index.html#boostdep.reference.list_modules" title="--list-modules">--list-modules</a>
</h3></div></div></div>
<p>
        <code class="literal">boostdep --list-modules</code> prints the module list. <span class="emphasis"><em>Boostdep</em></span>
        considers a subdirectory of <code class="literal">libs</code> a module if it contains
        an <code class="literal">include</code> subdirectory.
      </p>
<p>
        This command is typically used from scripts which then use the list to execute
        a command for each module.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.list_buildable"></a><a class="link" href="index.html#boostdep.reference.list_buildable" title="--list-buildable">--list-buildable</a>
</h3></div></div></div>
<p>
        <code class="literal">boostdep --list-modules</code> prints a list of the modules that
        require building. <span class="emphasis"><em>Boostdep</em></span> considers a module to require
        building if it contains subdirectories named <code class="literal">build</code> and
        <code class="literal">src</code>.
      </p>
<p>
        This command is typically used from scripts.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.list_dependencies"></a><a class="link" href="index.html#boostdep.reference.list_dependencies" title="--list-dependencies">--list-dependencies</a>
</h3></div></div></div>
<p>
        <code class="literal">boostdep --list-dependencies</code> prints a module list in which
        each line is of the form
      </p>
<pre class="programlisting">module -&gt; dependency1 dependency2 <span class="emphasis"><em>...</em></span>
</pre>
<p>
        By default, only the <code class="literal">include</code> directory is scanned for
        <code class="computeroutput"><span class="preprocessor">#include</span></code> directives. If
        the option <code class="literal">--track-sources</code> is given, the <code class="literal">src</code>
        directory is also scanned.
      </p>
<p>
        This command is typically used from scripts. The output is virtually identical
        to <code class="literal">--module-overview</code> in plain text, but slightly more
        machine-friendly.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.module_overview"></a><a class="link" href="index.html#boostdep.reference.module_overview" title="--module-overview">--module-overview</a>
</h3></div></div></div>
<p>
        <code class="literal">boostdep --module-overview</code> generates a module overview,
        in plain text or HTML. The plain text output is of the form
      </p>
<pre class="programlisting">Module Overview:

accumulators -&gt; array assert circular_buffer concept_check config core fusion iterator mpl numeric~conversion numeric~ublas parameter preprocessor range static_assert throw_exception tuple type_traits typeof
algorithm -&gt; array assert bind concept_check config core exception function iterator mpl range regex static_assert tuple type_traits unordered
align -&gt; assert config core static_assert throw_exception
</pre>
<p>
        whereas the HTML output is similar to
      </p>
<div class="blockquote"><blockquote class="blockquote">
<p>
          <span class="bold"><strong>Module Overview</strong></span>
        </p>
<p>
          <span class="bold"><strong><span class="emphasis"><em>accumulators</em></span></strong></span>
        </p>
<p>
          &#8674; array assert circular_buffer concept_check config core fusion
          iterator mpl numeric~conversion numeric~ublas parameter preprocessor range
          static_assert throw_exception tuple type_traits typeof
        </p>
</blockquote></div>
<p>
        where <span class="emphasis"><em>accumulators</em></span> is a link to <code class="literal">accumulators.html</code>.
      </p>
<p>
        As before, if <code class="literal">--track-sources</code> is given, the <code class="literal">src</code>
        subdirectory is scanned for <code class="computeroutput"><span class="preprocessor">#include</span></code>
        directives.
      </p>
<p>
        HTML output is enabled by the <code class="literal">--html</code> option. The <code class="literal">--title</code>
        and <code class="literal">--footer</code> options set the HTML <code class="literal">&lt;title&gt;</code>
        and the page footer and need to precede <code class="literal">--html</code>, like in
        the following example:
      </p>
<pre class="programlisting">dist/bin/boostdep --title "Module Overview" --footer "Generated on 21.05.2015 20:53:11" --html --module-overview &gt; module-overview.html
</pre>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.module_levels"></a><a class="link" href="index.html#boostdep.reference.module_levels" title="--module-levels">--module-levels</a>
</h3></div></div></div>
<p>
        <code class="literal">boostdep --module-levels</code> generates a report that groups
        modules by level. Levels are determined in such a way so that a module of
        level <code class="literal">N</code> never depends on modules of levels greater than
        <code class="literal">N</code>, and in the absence of cyclical dependencies, doesn't
        depend on other modules of level <code class="literal">N</code>. It takes the same
        options as <code class="literal">--module-overview</code>.
      </p>
<pre class="programlisting">dist/bin/boostdep --title "Module Levels" --footer "Generated on 21.05.2015 20:53:11" --html --module-levels &gt; module-levels.html
</pre>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.module_weights"></a><a class="link" href="index.html#boostdep.reference.module_weights" title="--module-weights">--module-weights</a>
</h3></div></div></div>
<p>
        <code class="literal">boostdep --module-weights</code> generates a report that lists
        modules by weight. A module weight is the total number of its dependencies.
        This includes the indirect dependencies.
      </p>
<p>
        <code class="literal">--module-weights</code> takes the same options as <code class="literal">--module-overview</code>.
      </p>
<pre class="programlisting">dist/bin/boostdep --title "Module Weights" --footer "Generated on 21.05.2015 20:53:11" --html --module-weights &gt; module-weights.html
</pre>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.primary"></a><a class="link" href="index.html#boostdep.reference.primary" title="--primary">--primary</a>
</h3></div></div></div>
<p>
        <code class="literal">boostdep --primary <span class="emphasis"><em>module</em></span></code> lists the
        primary (direct) dependencies of <span class="emphasis"><em>module</em></span>. It takes the
        same options as <code class="literal">--module-overview</code>.
      </p>
<pre class="programlisting">dist/bin/boostdep --title "Primary Dependencies of filesystem" --footer "Generated on 21.05.2015 20:53:11" --html --primary filesystem &gt; filesystem-primary.html
</pre>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.secondary"></a><a class="link" href="index.html#boostdep.reference.secondary" title="--secondary">--secondary</a>
</h3></div></div></div>
<p>
        <code class="literal">boostdep --secondary <span class="emphasis"><em>module</em></span></code> lists
        the secondary (indirect) dependencies of <span class="emphasis"><em>module</em></span>. It
        takes the same options as <code class="literal">--module-overview</code>.
      </p>
<pre class="programlisting">dist/bin/boostdep --title "Secondary Dependencies of filesystem" --footer "Generated on 21.05.2015 20:53:11" --html --secondary filesystem &gt; filesystem-secondary.html
</pre>
<p>
        You can combine <code class="literal">--primary</code> and <code class="literal">--secondary</code>
        in one invocation.
      </p>
<pre class="programlisting">dist/bin/boostdep --title "Dependencies of filesystem" --footer "Generated on 21.05.2015 20:53:11" --html --primary filesystem --secondary filesystem &gt; filesystem.html
</pre>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.reverse"></a><a class="link" href="index.html#boostdep.reference.reverse" title="--reverse">--reverse</a>
</h3></div></div></div>
<p>
        <code class="literal">boostdep --reverse <span class="emphasis"><em>module</em></span></code> lists the
        reverse dependencies of <span class="emphasis"><em>module</em></span>, that is, it lists which
        modules depend on <span class="emphasis"><em>module</em></span>. It takes the same options
        as <code class="literal">--module-overview</code>.
      </p>
<pre class="programlisting">dist/bin/boostdep --title "Reverse Dependencies of filesystem" --footer "Generated on 21.05.2015 20:53:11" --html --reverse filesystem &gt; filesystem-reverse.html
</pre>
<p>
        You can combine <code class="literal">--reverse</code> with <code class="literal">--primary</code>
        and <code class="literal">--secondary</code> for a complete module report.
      </p>
<pre class="programlisting">dist/bin/boostdep --title "Dependency Report for filesystem" --footer "Generated on 21.05.2015 20:53:11" --html --primary filesystem --secondary filesystem --reverse filesystem &gt; filesystem.html
</pre>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.header"></a><a class="link" href="index.html#boostdep.reference.header" title="--header">--header</a>
</h3></div></div></div>
<p>
        <code class="literal">boostdep --header <span class="emphasis"><em>header</em></span></code> creates
        an inclusion report for <span class="emphasis"><em>header</em></span>. It takes the same options
        as <code class="literal">--module-overview</code>.
      </p>
<pre class="programlisting">dist/bin/boostdep --title "Inclusion Report for &lt;boost/shared_ptr.hpp&gt;" --footer "Generated on 21.05.2015 20:53:11" --html --header boost/shared_ptr.hpp &gt; header-boost-shared_ptr.html
</pre>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.track_sources"></a><a class="link" href="index.html#boostdep.reference.track_sources" title="--track-sources">--track-sources</a>
</h3></div></div></div>
<p>
        The <code class="literal">--track-sources</code> option instructs <span class="emphasis"><em>Boostdep</em></span>
        to scan the <code class="literal">src</code> library subdirectory for <code class="computeroutput"><span class="preprocessor">#include</span></code> directives. By default, only
        the <code class="literal">include</code> subdirectory is scanned.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.title"></a><a class="link" href="index.html#boostdep.reference.title" title="--title">--title</a>
</h3></div></div></div>
<p>
        <code class="literal">--title <span class="emphasis"><em>title</em></span></code> sets the contents of
        the HTML <code class="literal">&lt;title&gt;</code> tag. It must precede <code class="literal">--html</code>
        to have an effect.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.footer"></a><a class="link" href="index.html#boostdep.reference.footer" title="--footer">--footer</a>
</h3></div></div></div>
<p>
        <code class="literal">--footer <span class="emphasis"><em>footer</em></span></code> sets the page footer
        text. It has no effect if <code class="literal">--html</code> is not given.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boostdep.reference.html"></a><a class="link" href="index.html#boostdep.reference.html" title="--html">--html</a>
</h3></div></div></div>
<p>
        <code class="literal">--html</code> switches to HTML output mode (the default is plain
        text). It must precede the commands that generate output.
      </p>
</div>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"><p><small>Last revised: May 21, 2015 at 22:05:36 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
<div class="spirit-nav"></div>
</body>
</html>