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 | 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 settings that will apply to every build involving the
164 file uses the standard makefile syntax.
167 should not specify any dependencies to
173 variables that control the aspects of how the system builds.
175 The default location of
179 though an alternative location can be specified in the
183 Overriding the location of
185 may be necessary if the system-wide settings are not suitable
186 for a particular build.
187 For instance, setting
191 effectively resets all build controls to their defaults.
195 is to control the compilation of the
197 source code, which is usually located in
199 As a rule, the system administrator creates
201 when the values of certain control variables need to be changed
204 In addition, control variables can be specified
205 for a particular build via the
209 or in its environment; see
214 for the build can be controlled via the
216 variable, which defaults to
217 .Pa /etc/src-env.conf .
218 Some examples that may only be set in this file are
219 .Va WITH_DIRDEPS_BUILD ,
222 as they are environment-only variables.
225 may be set here only when using
226 .Va WITH_DIRDEPS_BUILD .
228 The values of variables are ignored regardless of their setting;
229 even if they would be set to
233 The presence of an option causes
237 This list provides a name and short description for variables
238 that can be used for source builds.
239 .Bl -tag -width indent
241 show settings SRC_ENV_CONF=/dev/null | sort > $t/config_default
242 # Work around WITH_LDNS_UTILS forcing BIND_UTILS off by parsing the
243 # actual config that results from enabling every WITH_ option. This
244 # can be reverted if/when we no longer have options that disable
246 show with SRC_ENV_CONF=/dev/null | sort | sed 's/$/=/' > $t/src.conf
247 show settings SRC_ENV_CONF=$t/src.conf | sort > $t/config_WITH_ALL
248 show without SRC_ENV_CONF=/dev/null | sort > $t/config_WITHOUT_ALL
249 env_only_options="$(${make} -V __ENV_ONLY_OPTIONS)"
252 while read opt targets ; do
253 if [ ! -f ${opt} ] ; then
254 echo "no description found for ${opt}, skipping" >&2
259 sed -e'/\$FreeBSD.*\$/d' ${opt}
260 if [ -n "${targets}" ] ; then
262 echo 'This is a default setting on'
263 echo $(echo ${targets} | sed -e's/ /, /g' -e's/\(.*\), /\1 and /').
266 if [ "${opt%%_*}" = 'WITHOUT' ] ; then
267 sed -n "/^WITH_${opt#WITHOUT_}$/!s/$/=/p" $t/config_WITH_ALL > $t/src.conf
268 show settings SRC_ENV_CONF=$t/src.conf -D${opt} | sort > $t/config_WITH_ALL_${opt}
269 comm -13 $t/config_WITH_ALL $t/config_WITH_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps
270 elif [ "${opt%%_*}" = 'WITH' ] ; then
271 sed -n "/^WITHOUT${opt#WITH}$/!s/$/=/p" $t/config_WITHOUT_ALL > $t/src.conf
272 show settings SRC_ENV_CONF=$t/src.conf -D${opt} | sort > $t/config_WITHOUT_ALL_${opt}
273 comm -13 $t/config_WITHOUT_ALL $t/config_WITHOUT_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps
275 echo 'internal error' >&2
279 show settings SRC_ENV_CONF=/dev/null -D${opt} | sort > $t/config_${opt}
280 comm -13 $t/config_default $t/config_${opt} | sed -n "/^${opt}$/!p" |
281 comm -13 $t/deps - > $t/deps2
283 # Work around BIND_UTILS=no being the default when every WITH_
285 if [ "$(cat $t/deps2)" = WITHOUT_BIND_UTILS ]; then
286 sort $t/deps $t/deps2 > $t/_deps
292 if [ -s $t/deps ] ; then
294 echo 'When set, it enforces these options:'
296 echo '.Bl -item -compact'
304 if [ -s $t/deps2 ] ; then
305 if [ ${havedeps} -eq 1 ] ; then
308 echo 'When set, these options are also in effect:'
310 echo '.Bl -inset -compact'
312 echo ".It Va ${opt2}"
313 noopt=$(echo ${opt2} | sed -e's/WITH_/WITHOUT_/;t' -e's/WITHOUT_/WITH_/')
316 echo 'is set explicitly)'
321 case " ${env_only_options} " in
324 echo "This must be set in the environment, make command line, or"
325 echo ".Pa /etc/src-env.conf ,"
327 echo ".Pa /etc/src.conf ."
336 .Bl -tag -compact -width Pa
338 .It Pa /etc/src-env.conf
339 .It Pa /usr/share/mk/bsd.own.mk
352 This manual page was autogenerated by
353 .An tools/build/options/makeman .
360 local c0='|' c1='/' c2='-' c3='\'
362 eval printf '%c\\b' '$c'${twiddle_pos}
363 twiddle_pos=$(((twiddle_pos+1)%4))