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
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 ,
221 as they are environment-only variables.
224 may be set here only when using
225 .Va WITH_DIRDEPS_BUILD .
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} -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
282 # Work around BIND_UTILS=no being the default when every WITH_
284 if [ "$(cat $t/deps2)" = WITHOUT_BIND_UTILS ]; then
285 sort $t/deps $t/deps2 > $t/_deps
291 if [ -s $t/deps ] ; then
293 echo 'When set, it enforces these options:'
295 echo '.Bl -item -compact'
303 if [ -s $t/deps2 ] ; then
304 if [ ${havedeps} -eq 1 ] ; then
307 echo 'When set, these options are also in effect:'
309 echo '.Bl -inset -compact'
311 echo ".It Va ${opt2}"
312 noopt=$(echo ${opt2} | sed -e's/WITH_/WITHOUT_/;t' -e's/WITHOUT_/WITH_/')
315 echo 'is set explicitly)'
320 case " ${env_only_options} " in
323 echo "This must be set in the environment, make command line, or"
324 echo ".Pa /etc/src-env.conf ,"
326 echo ".Pa /etc/src.conf ."
335 .Bl -tag -compact -width Pa
337 .It Pa /etc/src-env.conf
338 .It Pa /usr/share/mk/bsd.own.mk
351 This manual page was autogenerated by
352 .An tools/build/options/makeman .
359 local c0='|' c1='/' c2='-' c3='\'
361 eval printf '%c\\b' '$c'${twiddle_pos}
362 twiddle_pos=$(((twiddle_pos+1)%4))