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
|
# file : buildfile
# license : MIT; see accompanying LICENSE file
# NOTE: This buildfile is only meant to be used to prepare the distribution.
# If you need to build the toolchain manually, follow the local
# installation instructions in the BOOTSTRAP-* file corresponding to
# your platform/compiler.
#
assert ($build.meta_operation == 'dist' || \
$build.meta_operation == 'configure' || \
$build.meta_operation == 'disfigure') 'only dist and configure supported'
# Package repository URL (or path).
#
build2_repo="https://stage.build2.org/1"
#build2_repo="https://pkg.cppget.org/1/queue/alpha"
#build2_repo="https://pkg.cppget.org/1/alpha"
# @@ Note that the project directories order is important (prerequisites go
# first).
#
# NOTE: see also subprojects in bootstrap.build if changing anything here.
#
d = libbutl/ build2/ libsqlite3/ libodb/ libodb-sqlite/ \
libbpkg/ bpkg/ bdep/ doc/ libbuild2-*/
if ($build.meta_operation == 'dist')
d += tests/*/
i = \
INSTALL \
UPGRADE \
BOOTSTRAP-UNIX \
BOOTSTRAP-MACOSX \
BOOTSTRAP-WINDOWS \
BOOTSTRAP-WINDOWS-MSVC \
BOOTSTRAP-WINDOWS-CLANG \
BOOTSTRAP-WINDOWS-MINGW
./: $d \
doc{$i README tests/README} \
legal{LICENSE AUTHORS} \
cli{$i} \
manifest
# Obtain the toolchain and standard build system modules versions.
#
bp = $recall($build.path)
pt = '^version: (.+)$'
# When adding a new standard build system module, these are the places where
# you will need to make changes (igrep for the name of one of the existing
# modules to locate all the places):
#
# - this buildfile
# - build/bootstrap.build (submodules; should be handled automatically)
# - build scripts: build.sh.in and build-*.bat.in
# - documentation: BOOTSTRAP-*.cli and UPGRADE.cli (multiple places)
# - install scripts: prepare, build2-install.sh, and build2-install-*.bat
# - build2.org/www/ (module docs symlinks for both public and stage, etc)
# - make sure the module has `builds: all` in its manifest
# - make sure the module is listed in the mod array in etc/bootstrap
#
ver = $process.run_regex($bp 'info:' $src_root/, "$pt", '\1')
build2_ver = $process.run_regex($bp 'info:' $src_root/build2/, "$pt", '\1')
bpkg_ver = $process.run_regex($bp 'info:' $src_root/bpkg/, "$pt", '\1')
bdep_ver = $process.run_regex($bp 'info:' $src_root/bdep/, "$pt", '\1')
autoconf_ver = $process.run_regex($bp 'info:' $src_root/libbuild2-autoconf/, "$pt", '\1')
kconfig_ver = $process.run_regex($bp 'info:' $src_root/libbuild2-kconfig/, "$pt", '\1')
# Generate install scripts from templates and include them into the
# distribution.
#
# @@ Redo as ad hoc rule.
#
for s: exe{build.sh} file{build-msvc.bat build-clang.bat build-mingw.bat}
{
./: $s: file{$name($s).$extension($s).in}
{
dist = true
}
{{
diag sed $<
t = $path($>)
p = $path($<)
# Note: the same code as in the etc/version script.
#
sed -e 's/([^.]+)\..*/\1/' <<<"$ver" | set mj
sed -e 's/[^.]+\.([^.]+)\..*/\1/' <<<"$ver" | set mn
sed -n -e 's/[^.]+\.[^.]+\.[^.-]+-([ab]).*/\1/p' <<<"$ver" | set ab
sed -n -e 's/[^.]+\.[^.]+\.[^.-]+-[ab]\.([^.+]+).*/\1/p' <<<"$ver" | set pr
# Version for configuration directory.
#
cver = "$mj.$mn"
if ("$ab" != '')
cver = "$cver-$ab.$pr"
end
sed -e 's%@BUILD2_REPO@%'$build2_repo'%' $p >$t
sed -e 's/@CONFIG_VER@/'$cver'/' -i $t
sed -e 's/@BUILD2_VERSION@/'$build2_ver'/' -i $t
sed -e 's/@BPKG_VERSION@/'$bpkg_ver'/' -i $t
sed -e 's/@BDEP_VERSION@/'$bdep_ver'/' -i $t
sed -e 's/@AUTOCONF_VERSION@/'$autoconf_ver'/' -i $t
sed -e 's/@KCONFIG_VERSION@/'$kconfig_ver'/' -i $t
}}
}
# Don't install the BOOTSTRAP/INSTALL files. But UPGRADE could be useful.
#
doc{INSTALL}@./: install = false
doc{BOOTSTRAP-*}: install = false
|