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
145 .\" DO NOT EDIT-- this file is generated by tools/build/options/makeman.
147 .Dd $(echo $(LC_TIME=C date +'%B %e, %Y'))
152 .Nd "source build options"
156 file contains settings that will apply to every build involving the
163 file uses the standard makefile syntax.
166 should not specify any dependencies to
172 variables that control the aspects of how the system builds.
174 The default location of
178 though an alternative location can be specified in the
182 Overriding the location of
184 may be necessary if the system-wide settings are not suitable
185 for a particular build.
186 For instance, setting
190 effectively resets all build controls to their defaults.
194 is to control the compilation of the
196 source code, which is usually located in
198 As a rule, the system administrator creates
200 when the values of certain control variables need to be changed
203 In addition, control variables can be specified
204 for a particular build via the
208 or in its environment; see
213 for the build can be controlled via the
215 variable, which defaults to
216 .Pa /etc/src-env.conf .
217 Some examples that may only be set in this file are
218 .Va WITH_DIRDEPS_BUILD ,
223 as they are environment-only variables.
225 The values of variables are ignored regardless of their setting;
226 even if they would be set to
230 The presence of an option causes
234 This list provides a name and short description for variables
235 that can be used for source builds.
236 .Bl -tag -width indent
238 show settings SRC_ENV_CONF=/dev/null | sort > $t/config_default
239 # Work around WITH_LDNS_UTILS forcing BIND_UTILS off by parsing the
240 # actual config that results from enabling every WITH_ option. This
241 # can be reverted if/when we no longer have options that disable
243 show with SRC_ENV_CONF=/dev/null | sort | sed 's/$/=/' > $t/src.conf
244 show settings SRC_ENV_CONF=$t/src.conf | sort > $t/config_WITH_ALL
245 show without SRC_ENV_CONF=/dev/null | sort > $t/config_WITHOUT_ALL
246 env_only_options="$(${make} MK_AUTO_OBJ=no -V __ENV_ONLY_OPTIONS)"
249 while read opt targets ; do
250 if [ ! -f ${opt} ] ; then
251 echo "no description found for ${opt}, skipping" >&2
256 sed -e'/\$FreeBSD.*\$/d' ${opt}
257 if [ -n "${targets}" ] ; then
259 echo 'This is a default setting on'
260 echo $(echo ${targets} | sed -e's/ /, /g' -e's/\(.*\), /\1 and /').
263 if [ "${opt%%_*}" = 'WITHOUT' ] ; then
264 sed -n "/^WITH_${opt#WITHOUT_}$/!s/$/=/p" $t/config_WITH_ALL > $t/src.conf
265 show settings SRC_ENV_CONF=$t/src.conf -D${opt} | sort > $t/config_WITH_ALL_${opt}
266 comm -13 $t/config_WITH_ALL $t/config_WITH_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps
267 elif [ "${opt%%_*}" = 'WITH' ] ; then
268 sed -n "/^WITHOUT${opt#WITH}$/!s/$/=/p" $t/config_WITHOUT_ALL > $t/src.conf
269 show settings SRC_ENV_CONF=$t/src.conf -D${opt} | sort > $t/config_WITHOUT_ALL_${opt}
270 comm -13 $t/config_WITHOUT_ALL $t/config_WITHOUT_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps
272 echo 'internal error' >&2
276 show settings SRC_ENV_CONF=/dev/null -D${opt} | sort > $t/config_${opt}
277 comm -13 $t/config_default $t/config_${opt} | sed -n "/^${opt}$/!p" |
278 comm -13 $t/deps - > $t/deps2
281 if [ -s $t/deps ] ; then
283 echo 'When set, it enforces these options:'
285 echo '.Bl -item -compact'
293 if [ -s $t/deps2 ] ; then
294 if [ ${havedeps} -eq 1 ] ; then
297 echo 'When set, these options are also in effect:'
299 echo '.Bl -inset -compact'
301 echo ".It Va ${opt2}"
302 noopt=$(echo ${opt2} | sed -e's/WITH_/WITHOUT_/;t' -e's/WITHOUT_/WITH_/')
305 echo 'is set explicitly)'
310 case " ${env_only_options} " in
313 echo "This must be set in the environment, make command line, or"
314 echo ".Pa /etc/src-env.conf ,"
316 echo ".Pa /etc/src.conf ."
325 .Bl -tag -compact -width Pa
327 .It Pa /etc/src-env.conf
328 .It Pa /usr/share/mk/bsd.own.mk
341 This manual page was autogenerated by
342 .An tools/build/options/makeman .
349 local c0='|' c1='/' c2='-' c3='\'
351 eval printf '%c\\b' '$c'${twiddle_pos}
352 twiddle_pos=$(((twiddle_pos+1)%4))