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)
}
}
#\
|