aboutsummaryrefslogtreecommitdiff
path: root/monitor/buildfile
blob: 1ee7d267ea6ea86419e16c9e39467a8b2ae1c134 (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
# file      : monitor/buildfile
# license   : MIT; see accompanying LICENSE file

import libs  = libodb%lib{odb}
import libs += libodb-pgsql%lib{odb-pgsql}
import libs += libbutl%lib{butl}
import libs += libbbot%lib{bbot}

include ../libbrep/
include ../mod/

exe{brep-monitor}: {hxx ixx cxx}{*                   -*-options} \
                   ../mod/libue{mod} ../libbrep/lib{brep} $libs

## Consumption build ($develop == false).
#

# Use pregenerated versions in the consumption build.
#
exe{brep-monitor}: pregenerated/{hxx ixx cxx}{**}: include = (!$develop)

if! $develop
  cxx.poptions =+ "-I($src_base/pregenerated)"

# Distribute pregenerated versions only in the consumption build.
#
pregenerated/{hxx ixx cxx}{*}: dist = (!$develop)

#
##

## Development build ($develop == true).
#

exe{brep-monitor}: {hxx ixx cxx}{monitor-options module-options}: \
  include = $develop

if $develop
  import! [metadata] cli = cli%exe{cli}

# In the development build distribute regenerated {hxx ixx cxx}{*-options},
# remapping their locations to the paths of the pregenerated versions (which
# are only distributed in the consumption build; see above). This way we make
# sure that the distributed files are always up-to-date.
#
# @@ TODO Make it an ad-hoc rule, but note that we need to add some options
#         specific for monitor.cli and module.cli (see
#         https://build2.org/release/0.14.0.xhtml#adhoc-rules).
#
<{hxx ixx cxx}{module-options}>: cli{module} $cli
{
  # Set option prefix to the empty value to handle all unknown request
  # parameters uniformly with a single catch block.
  #
  options = --std c++11 -I $src_root --include-with-brackets \
            --include-prefix monitor --guard-prefix MONITOR \
            --generate-specifier --cli-namespace brep::cli \
            --output-suffix "-options"
}
%
if $develop
{{
  diag cli ($<[0])
  ($<[1]) $options -o $out_base/ $path($<[0])

  if diff $src_base/pregenerated/monitor/module-options.hxx $path($>[0]) >- && \
     diff $src_base/pregenerated/monitor/module-options.ixx $path($>[1]) >- && \
     diff $src_base/pregenerated/monitor/module-options.cxx $path($>[2]) >-
    exit
  end

  cp $path($>[0]) $src_base/pregenerated/monitor/module-options.hxx
  cp $path($>[1]) $src_base/pregenerated/monitor/module-options.ixx
  cp $path($>[2]) $src_base/pregenerated/monitor/module-options.cxx
}}

#
##

# Pass the copyright notice extracted from the LICENSE file.
#
obj{monitor}: cxx.poptions += -DBREP_COPYRIGHT=\"$copyright\"

#\
# Generated options parser.
#
if $cli.configured
{
  cli.cxx{monitor-options}: cli{monitor}
  cli.cxx{module-options}:  cli{module}

  cli.options += --std c++11 -I $src_root --include-with-brackets \
--include-prefix monitor --guard-prefix MONITOR --generate-specifier \
--cli-namespace brep::cli

  cli.cxx{monitor-options}: cli.options += \
--page-usage print_ --ansi-color --long-usage

  cli.cxx{module-options}: cli.options += --suppress-usage --generate-parse

  # Include the generated cli files into the distribution and don't remove
  # them when cleaning in src (so that clean results in a state identical to
  # distributed).
  #
  cli.cxx{*}:
  {
    dist  = true
    clean = ($src_root != $out_root)
  }
}
#\