3 # This file is in the public domain.
6 # This script creates the src.conf.5 man page using template text contained
7 # herein and the contents of the WITH_* and WITHOUT_* files in the same
8 # directory. Each WITH_* and WITHOUT_* file documents the effect of the
9 # /etc/src.conf knob with the same name.
11 # For each supported architecture, "make showconfig" is invoked to determine
12 # the default setting of every option: always WITH_, always WITHOUT_, or
13 # architecture-dependent WITH_/WITHOUT_. It also determines and describes
14 # dependencies between options.
18 # cd tools/build/options
19 # sh makeman > ../../../share/man/man5/src.conf.5
24 t=$(mktemp -d -t makeman)
25 trap 'test -d $t && rm -rf $t' exit
27 srcdir=$(realpath ../../..)
28 make="make -C $srcdir -m $srcdir/share/mk"
31 # usage: no_targets all_targets yes_targets
37 if [ "${t1}" = "${t2}" ] ; then
47 ALL_TARGETS=$(echo $(${make} targets MK_AUTO_OBJ=no | tail -n +2))
49 for target in ${ALL_TARGETS} ; do
51 env -i ${make} showconfig \
52 SRC_ENV_CONF=/dev/null SRCCONF=/dev/null \
53 __MAKE_CONF=/dev/null \
54 TARGET_ARCH=${target#*/} TARGET=${target%/*} |
55 while read var _ val ; do
57 if [ $opt = "$prev_opt" ]; then
58 echo "$target: ignoring duplicate option $opt" >&2
70 echo "make showconfig broken: ${var} ${_} ${val} (not yes or no)" >&2
74 done > $t/settings.target
75 if [ -r $t/settings ] ; then
76 join -t\ $t/settings $t/settings.target > $t/settings.new
77 mv $t/settings.new $t/settings
79 mv $t/settings.target $t/settings
83 while read opt targets ; do
84 if [ "${targets}" = "${ALL_TARGETS}" ] ; then
86 elif [ -z "${targets}" ] ; then
89 echo "WITHOUT_${opt}" $(no_targets "${ALL_TARGETS}" "${targets}")
90 echo "WITH_${opt} ${targets}"
96 # usage: show { settings | with | without } ...
116 echo 'internal error' >&2
120 env -i ${make} .MAKE.MODE=normal "$@" showconfig __MAKE_CONF=/dev/null \
122 while read var _ val ; do
126 echo ${yes_prefix}_${opt}
129 echo ${no_prefix}_${opt}
132 echo "make showconfig broken: ${var} ${_} ${val} (not yes or no)" >&2
141 echo "building src.conf.5 man page from files in ${PWD}" >&2
144 generated='@'generated
146 .\" DO NOT EDIT-- this file is $generated by tools/build/options/makeman.
148 .Dd $(echo $(LC_TIME=C date +'%B %e, %Y'))
153 .Nd "source build options"
157 file contains variables that control what components will be generated during
158 the build process of the
165 file uses the standard makefile syntax.
168 should not specify any dependencies to
174 variables that control the aspects of how the system builds.
176 The default location of
180 though an alternative location can be specified in the
184 Overriding the location of
186 may be necessary if the system-wide settings are not suitable
187 for a particular build.
188 For instance, setting
192 effectively resets all build controls to their defaults.
196 is to control the compilation of the
198 source code, which is usually located in
200 As a rule, the system administrator creates
202 when the values of certain control variables need to be changed
205 In addition, control variables can be specified
206 for a particular build via the
210 or in its environment; see
215 for the build can be controlled via the
217 variable, which defaults to
218 .Pa /etc/src-env.conf .
219 Some examples that may only be set in this file are
220 .Va WITH_DIRDEPS_BUILD ,
225 as they are environment-only variables.
227 The values of variables are ignored regardless of their setting;
228 even if they would be set to
232 The presence of an option causes
236 This list provides a name and short description for variables
237 that can be used for source builds.
238 .Bl -tag -width indent
240 show settings SRC_ENV_CONF=/dev/null | sort > $t/config_default
241 # Work around WITH_LDNS_UTILS forcing BIND_UTILS off by parsing the
242 # actual config that results from enabling every WITH_ option. This
243 # can be reverted if/when we no longer have options that disable
245 show with SRC_ENV_CONF=/dev/null | sort | sed 's/$/=/' > $t/src.conf
246 show settings SRC_ENV_CONF=$t/src.conf | sort > $t/config_WITH_ALL
247 show without SRC_ENV_CONF=/dev/null | sort > $t/config_WITHOUT_ALL
248 env_only_options="$(${make} MK_AUTO_OBJ=no -V __ENV_ONLY_OPTIONS)"
251 while read opt targets ; do
252 if [ ! -f ${opt} ] ; then
253 echo "no description found for ${opt}, skipping" >&2
258 sed -e'/\$FreeBSD.*\$/d' ${opt}
259 if [ -n "${targets}" ] ; then
261 echo 'This is a default setting on'
262 echo $(echo ${targets} | sed -e's/ /, /g' -e's/\(.*\), /\1 and /').
265 if [ "${opt%%_*}" = 'WITHOUT' ] ; then
266 sed -n "/^WITH_${opt#WITHOUT_}$/!s/$/=/p" $t/config_WITH_ALL > $t/src.conf
267 show settings SRC_ENV_CONF=$t/src.conf -D${opt} | sort > $t/config_WITH_ALL_${opt}
268 comm -13 $t/config_WITH_ALL $t/config_WITH_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps
269 elif [ "${opt%%_*}" = 'WITH' ] ; then
270 sed -n "/^WITHOUT${opt#WITH}$/!s/$/=/p" $t/config_WITHOUT_ALL > $t/src.conf
271 show settings SRC_ENV_CONF=$t/src.conf -D${opt} | sort > $t/config_WITHOUT_ALL_${opt}
272 comm -13 $t/config_WITHOUT_ALL $t/config_WITHOUT_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps
274 echo 'internal error' >&2
278 show settings SRC_ENV_CONF=/dev/null -D${opt} | sort > $t/config_${opt}
279 comm -13 $t/config_default $t/config_${opt} | sed -n "/^${opt}$/!p" |
280 comm -13 $t/deps - > $t/deps2
283 if [ -s $t/deps ] ; then
285 echo 'When set, it enforces these options:'
287 echo '.Bl -item -compact'
295 if [ -s $t/deps2 ] ; then
296 if [ ${havedeps} -eq 1 ] ; then
299 echo 'When set, these options are also in effect:'
301 echo '.Bl -inset -compact'
303 echo ".It Va ${opt2}"
304 noopt=$(echo ${opt2} | sed -e's/WITH_/WITHOUT_/;t' -e's/WITHOUT_/WITH_/')
307 echo 'is set explicitly)'
312 case " ${env_only_options} " in
315 echo "This must be set in the environment, make command line, or"
316 echo ".Pa /etc/src-env.conf ,"
318 echo ".Pa /etc/src.conf ."
327 .Bl -tag -compact -width Pa
329 .It Pa /etc/src-env.conf
330 .It Pa /usr/share/mk/bsd.own.mk
343 This manual page was autogenerated by
344 .An tools/build/options/makeman .
351 local c0='|' c1='/' c2='-' c3='\'
353 eval printf '%c\\b' '$c'${twiddle_pos}
354 twiddle_pos=$(((twiddle_pos+1)%4))