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 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 ,
224 as they are environment-only variables.
226 The values of variables are ignored regardless of their setting;
227 even if they would be set to
231 The presence of an option causes
235 This list provides a name and short description for variables
236 that can be used for source builds.
237 .Bl -tag -width indent
239 show settings SRC_ENV_CONF=/dev/null | sort > $t/config_default
240 # Work around WITH_LDNS_UTILS forcing BIND_UTILS off by parsing the
241 # actual config that results from enabling every WITH_ option. This
242 # can be reverted if/when we no longer have options that disable
244 show with SRC_ENV_CONF=/dev/null | sort | sed 's/$/=/' > $t/src.conf
245 show settings SRC_ENV_CONF=$t/src.conf | sort > $t/config_WITH_ALL
246 show without SRC_ENV_CONF=/dev/null | sort > $t/config_WITHOUT_ALL
247 env_only_options="$(${make} MK_AUTO_OBJ=no -V __ENV_ONLY_OPTIONS)"
250 while read opt targets ; do
251 if [ ! -f ${opt} ] ; then
252 echo "no description found for ${opt}, skipping" >&2
257 sed -e'/\$FreeBSD.*\$/d' ${opt}
258 if [ -n "${targets}" ] ; then
260 echo 'This is a default setting on'
261 echo $(echo ${targets} | sed -e's/ /, /g' -e's/\(.*\), /\1 and /').
264 if [ "${opt%%_*}" = 'WITHOUT' ] ; then
265 sed -n "/^WITH_${opt#WITHOUT_}$/!s/$/=/p" $t/config_WITH_ALL > $t/src.conf
266 show settings SRC_ENV_CONF=$t/src.conf -D${opt} | sort > $t/config_WITH_ALL_${opt}
267 comm -13 $t/config_WITH_ALL $t/config_WITH_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps
268 elif [ "${opt%%_*}" = 'WITH' ] ; then
269 sed -n "/^WITHOUT${opt#WITH}$/!s/$/=/p" $t/config_WITHOUT_ALL > $t/src.conf
270 show settings SRC_ENV_CONF=$t/src.conf -D${opt} | sort > $t/config_WITHOUT_ALL_${opt}
271 comm -13 $t/config_WITHOUT_ALL $t/config_WITHOUT_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps
273 echo 'internal error' >&2
277 show settings SRC_ENV_CONF=/dev/null -D${opt} | sort > $t/config_${opt}
278 comm -13 $t/config_default $t/config_${opt} | sed -n "/^${opt}$/!p" |
279 comm -13 $t/deps - > $t/deps2
282 if [ -s $t/deps ] ; then
284 echo 'When set, it enforces these options:'
286 echo '.Bl -item -compact'
294 if [ -s $t/deps2 ] ; then
295 if [ ${havedeps} -eq 1 ] ; then
298 echo 'When set, these options are also in effect:'
300 echo '.Bl -inset -compact'
302 echo ".It Va ${opt2}"
303 noopt=$(echo ${opt2} | sed -e's/WITH_/WITHOUT_/;t' -e's/WITHOUT_/WITH_/')
306 echo 'is set explicitly)'
311 case " ${env_only_options} " in
314 echo "This must be set in the environment, make command line, or"
315 echo ".Pa /etc/src-env.conf ,"
317 echo ".Pa /etc/src.conf ."
326 .Bl -tag -compact -width Pa
328 .It Pa /etc/src-env.conf
329 .It Pa /usr/share/mk/bsd.own.mk
342 This manual page was autogenerated by
343 .An tools/build/options/makeman .
350 local c0='|' c1='/' c2='-' c3='\'
352 eval printf '%c\\b' '$c'${twiddle_pos}
353 twiddle_pos=$(((twiddle_pos+1)%4))