summaryrefslogtreecommitdiff
path: root/cli/doc/buildfile
blob: d56c7f561148547ed9a9d2fa150743358b565846 (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
# file      : doc/buildfile
# license   : MIT; see accompanying LICENSE file

define css: doc
css{*}: extension = css

define xhtml: doc
xhtml{*}: extension = xhtml

define ps: doc
ps{*}: extension = ps

define pdf: doc
pdf{*}: extension = pdf

define html2ps: file
html2ps{*}: extension = html2ps

./: css{default} xhtml{cli-guide} bootstrap/{man1 xhtml}{cli}

if $config.cli.develop
{
  doc_version = [string] "$version.major\.$version.minor\.$version.patch"
  if $version.pre_release
    doc_version += "-$version.pre_release_string"

  # Let's take the last for-digit number to cover 2000-2021,2022.
  #
  doc_year = $regex.replace($copyright, '.+[-, ]([0-9][0-9][0-9][0-9]) .+', '\1')

  man_options = -v project="CLI" -v version="$doc_version" \
                -v copyright="$copyright" --suppress-undocumented

  # We use the cli version we've built to generate the documentation.
  #
  # Note: avoid cleaning it through this dependency.
  #
  include ../cli/

  {xhtml man1}{cli}: ../cli/exe{cli}: clean = false

  ./: man1{cli}: ../cli/cli{options} file{cli-prologue.1 cli-epilogue.1}
  {{
    diag cli --man ($<[1])

    # Use the copyright year to approximate the last authoring date.
    #
    date +"%B %Y" | set date

    ($<[0]) --generate-man  $man_options     \
            -v date="January $doc_year"      \
            --man-prologue-file $path($<[2]) \
            --man-epilogue-file $path($<[3]) \
            --stdout $path($<[1]) >$path($>)

    # If the result differs from the bootstrap version, copy it over. Unlike
    # the bootstrap cli case, here we don't need to cause a build restart.
    #
    if! diff $src_base/bootstrap/cli.1 $path($>) >-
      cp $path($>) $src_base/bootstrap/cli.1
    end
  }}

  ./: xhtml{cli}: $src_root/cli/cli{options} \
                  file{cli-prologue.xhtml cli-epilogue.xhtml}
  {{
    diag cli --html ($<[1])

    ($<[0]) --generate-html $man_options      \
            --html-prologue-file $path($<[2]) \
            --html-epilogue-file $path($<[3]) \
            --stdout $path($<[1]) >$path($>)

    if! diff $src_base/bootstrap/cli.xhtml $path($>) >-
      cp $path($>) $src_base/bootstrap/cli.xhtml
    end
  }}

  # Import the html2ps and ps2pdf programs from the system, if available.
  #
  import? html2ps = html2ps%exe{html2ps}
  import? ps2pdf  = ps2pdf14%exe{ps2pdf14}

  if ($html2ps != [null] && $ps2pdf != [null])
  {
    # Note that we include these generated files into the distribution and
    # don't remove them when cleaning in src (so that clean results in a state
    # identical to distributed).
    #
    ./: ps{cli-guide}: xhtml{cli-guide} html2ps{guide} $html2ps
    {
      options =

      dist  = true
      clean = ($src_root != $out_root)
    }
    {{
      diag html2ps ($<[0])
      $html2ps $options -f $path($<[1]) -o $path($>) $path($<[0])
    }}

    ./: pdf{cli-guide}: ps{cli-guide} $ps2pdf
    {
      options = -dOptimize=true -dEmbedAllFonts=true

      dist  = true
      clean = ($src_root != $out_root)
    }
    {{
      diag ps2pdf ($<[0])
      $ps2pdf $options $path($<[0]) $path($>)
    }}
  }
  else
  {
    warn "html2ps and/or ps2pdf14 are not available, not generating .ps and .pdf documentation"
    ./: html2ps{guide} # Note: not keeping ps/pdf (could be outdated).
  }
}
else
  ./: file{cli-prologue* cli-epilogue*} html2ps{guide} {ps pdf}{+cli-guide}