xref: /freebsd/tools/build/options/makeman (revision dd8c666d8b78f6b9ddb691f0505837fa885ff3b4)
1c5922fbfSRuslan Ermilov#!/bin/sh
2c5922fbfSRuslan Ermilov#
3c5922fbfSRuslan Ermilov# This file is in the public domain.
49dc5d76eSEd Maste#
50af1da97SEd Maste# This script creates the src.conf.5 man page using template text contained
60af1da97SEd Maste# herein and the contents of the WITH_* and WITHOUT_* files in the same
70af1da97SEd Maste# directory. Each WITH_* and WITHOUT_* file documents the effect of the
89dc5d76eSEd Maste# /etc/src.conf knob with the same name.
99dc5d76eSEd Maste#
100af1da97SEd Maste# For each supported architecture, "make showconfig" is invoked to determine
110af1da97SEd Maste# the default setting of every option: always WITH_, always WITHOUT_, or
120af1da97SEd Maste# architecture-dependent WITH_/WITHOUT_.  It also determines and describes
130af1da97SEd Maste# dependencies between options.
149dc5d76eSEd Maste#
159dc5d76eSEd Maste# Usage:
169dc5d76eSEd Maste#
179dc5d76eSEd Maste#     cd tools/build/options
189dc5d76eSEd Maste#     sh makeman > ../../../share/man/man5/src.conf.5
19c5922fbfSRuslan Ermilov
202701a1b7SRuslan Ermilovset -o errexit
21f1f871e1SHajimu UMEMOTOexport LC_ALL=C
222701a1b7SRuslan Ermilov
232701a1b7SRuslan Ermilovt=$(mktemp -d -t makeman)
244af17bf5SWarren Blocktrap 'test -d $t && rm -rf $t' exit
252701a1b7SRuslan Ermilov
2669c469c9SDag-Erling Smørgravsrcdir=$(realpath ../../..)
2769c469c9SDag-Erling Smørgravmake="make -C $srcdir -m $srcdir/share/mk"
2869c469c9SDag-Erling Smørgrav
29c5922fbfSRuslan Ermilov#
302701a1b7SRuslan Ermilov# usage: no_targets all_targets yes_targets
312701a1b7SRuslan Ermilov#
322701a1b7SRuslan Ermilovno_targets()
332701a1b7SRuslan Ermilov{
342701a1b7SRuslan Ermilov	for t1 in $1 ; do
352701a1b7SRuslan Ermilov		for t2 in $2 ; do
362701a1b7SRuslan Ermilov			if [ "${t1}" = "${t2}" ] ; then
372701a1b7SRuslan Ermilov				continue 2
382701a1b7SRuslan Ermilov			fi
392701a1b7SRuslan Ermilov		done
402701a1b7SRuslan Ermilov		echo ${t1}
412701a1b7SRuslan Ermilov	done
422701a1b7SRuslan Ermilov}
432701a1b7SRuslan Ermilov
442701a1b7SRuslan Ermilovshow_options()
452701a1b7SRuslan Ermilov{
46177d707cSBryan Drewery	ALL_TARGETS=$(echo $(${make} targets MK_AUTO_OBJ=no | tail -n +2))
472701a1b7SRuslan Ermilov	rm -f $t/settings
482701a1b7SRuslan Ermilov	for target in ${ALL_TARGETS} ; do
49b7f38e69SEd Maste		prev_opt=
503dfad7c7SBryan Drewery		env -i ${make} showconfig \
51317c99b7SBryan Drewery		    SRC_ENV_CONF=/dev/null SRCCONF=/dev/null \
52317c99b7SBryan Drewery		    __MAKE_CONF=/dev/null \
532701a1b7SRuslan Ermilov		    TARGET_ARCH=${target#*/} TARGET=${target%/*} |
542701a1b7SRuslan Ermilov		while read var _ val ; do
55897ae85fSBrooks Davis			case $var in
56897ae85fSBrooks Davis			MK_*)
572701a1b7SRuslan Ermilov				opt=${var#MK_}
58b7f38e69SEd Maste				if [ $opt = "$prev_opt" ]; then
59b7f38e69SEd Maste					echo "$target: ignoring duplicate option $opt" >&2
60b7f38e69SEd Maste					continue
61b7f38e69SEd Maste				fi
62b7f38e69SEd Maste				prev_opt=$opt
632701a1b7SRuslan Ermilov				case ${val} in
642701a1b7SRuslan Ermilov				yes)
652701a1b7SRuslan Ermilov					echo ${opt} ${target}
662701a1b7SRuslan Ermilov					;;
672701a1b7SRuslan Ermilov				no)
682701a1b7SRuslan Ermilov					echo ${opt}
692701a1b7SRuslan Ermilov					;;
702701a1b7SRuslan Ermilov				*)
71cc2520d2SSimon J. Gerraty					echo "make showconfig broken: ${var} ${_} ${val} (not yes or no)" >&2
722701a1b7SRuslan Ermilov					exit 1
732701a1b7SRuslan Ermilov					;;
742701a1b7SRuslan Ermilov				esac
75897ae85fSBrooks Davis				;;
76897ae85fSBrooks Davis			OPT_*)
77897ae85fSBrooks Davis				# ignore
78897ae85fSBrooks Davis				;;
79897ae85fSBrooks Davis			*)
80897ae85fSBrooks Davis				echo "make showconfig broken: ${var} ${_} ${val} not MK_ or OPT_" >&2
81897ae85fSBrooks Davis				exit 1
82897ae85fSBrooks Davis				;;
83897ae85fSBrooks Davis			esac
842701a1b7SRuslan Ermilov		done > $t/settings.target
852701a1b7SRuslan Ermilov		if [ -r $t/settings ] ; then
862701a1b7SRuslan Ermilov			join -t\  $t/settings $t/settings.target > $t/settings.new
872701a1b7SRuslan Ermilov			mv $t/settings.new $t/settings
882701a1b7SRuslan Ermilov		else
892701a1b7SRuslan Ermilov			mv $t/settings.target $t/settings
902701a1b7SRuslan Ermilov		fi
912701a1b7SRuslan Ermilov	done
922701a1b7SRuslan Ermilov
934078537cSBryan Drewery	while read opt targets ; do
942701a1b7SRuslan Ermilov		if [ "${targets}" = "${ALL_TARGETS}" ] ; then
952701a1b7SRuslan Ermilov			echo "WITHOUT_${opt}"
962701a1b7SRuslan Ermilov		elif [ -z "${targets}" ] ; then
972701a1b7SRuslan Ermilov			echo "WITH_${opt}"
982701a1b7SRuslan Ermilov		else
992701a1b7SRuslan Ermilov			echo "WITHOUT_${opt}" $(no_targets "${ALL_TARGETS}" "${targets}")
1002701a1b7SRuslan Ermilov			echo "WITH_${opt} ${targets}"
1012701a1b7SRuslan Ermilov		fi
1024078537cSBryan Drewery	done < $t/settings
1032701a1b7SRuslan Ermilov}
1042701a1b7SRuslan Ermilov
1052701a1b7SRuslan Ermilov#
1062701a1b7SRuslan Ermilov# usage: show { settings | with | without } ...
107c5922fbfSRuslan Ermilov#
108c5922fbfSRuslan Ermilovshow()
109c5922fbfSRuslan Ermilov{
110c5922fbfSRuslan Ermilov
111c5922fbfSRuslan Ermilov	mode=$1 ; shift
112c5922fbfSRuslan Ermilov	case ${mode} in
113c5922fbfSRuslan Ermilov	settings)
114c5922fbfSRuslan Ermilov		yes_prefix=WITH
115c5922fbfSRuslan Ermilov		no_prefix=WITHOUT
116c5922fbfSRuslan Ermilov		;;
1172701a1b7SRuslan Ermilov	with)
1182701a1b7SRuslan Ermilov		yes_prefix=WITH
119c5922fbfSRuslan Ermilov		no_prefix=WITH
120c5922fbfSRuslan Ermilov		;;
1212701a1b7SRuslan Ermilov	without)
1222701a1b7SRuslan Ermilov		yes_prefix=WITHOUT
1232701a1b7SRuslan Ermilov		no_prefix=WITHOUT
1242701a1b7SRuslan Ermilov		;;
125c5922fbfSRuslan Ermilov	*)
1262701a1b7SRuslan Ermilov		echo 'internal error' >&2
127c5922fbfSRuslan Ermilov		exit 1
128c5922fbfSRuslan Ermilov		;;
129c5922fbfSRuslan Ermilov	esac
130161f8edcSDag-Erling Smørgrav	requireds=$(env -i ${make} -f ${srcdir}/share/mk/src.opts.mk \
131161f8edcSDag-Erling Smørgrav	    -V 'REQUIRED_OPTIONS:ts,')
1323dfad7c7SBryan Drewery	env -i ${make} .MAKE.MODE=normal "$@" showconfig __MAKE_CONF=/dev/null \
133317c99b7SBryan Drewery	    SRCCONF=/dev/null |
134c5922fbfSRuslan Ermilov	while read var _ val ; do
135897ae85fSBrooks Davis		case ${var} in
136897ae85fSBrooks Davis		MK_*)
137c5922fbfSRuslan Ermilov			opt=${var#MK_}
138bce99679SColin Percival			case ,${requireds}, in
139bce99679SColin Percival			*,${opt},*)
140bce99679SColin Percival				continue
141bce99679SColin Percival				;;
142bce99679SColin Percival			esac
143c5922fbfSRuslan Ermilov			case ${val} in
144c5922fbfSRuslan Ermilov			yes)
145c5922fbfSRuslan Ermilov				echo ${yes_prefix}_${opt}
146c5922fbfSRuslan Ermilov				;;
147c5922fbfSRuslan Ermilov			no)
148c5922fbfSRuslan Ermilov				echo ${no_prefix}_${opt}
149c5922fbfSRuslan Ermilov				;;
150c5922fbfSRuslan Ermilov			*)
151cc2520d2SSimon J. Gerraty				echo "make showconfig broken: ${var} ${_} ${val} (not yes or no)" >&2
152c5922fbfSRuslan Ermilov				exit 1
153c5922fbfSRuslan Ermilov				;;
154c5922fbfSRuslan Ermilov			esac
155897ae85fSBrooks Davis			;;
156897ae85fSBrooks Davis		OPT_*)
157897ae85fSBrooks Davis			# ignore
158897ae85fSBrooks Davis			;;
159897ae85fSBrooks Davis		*)
160897ae85fSBrooks Davis			echo "make showconfig broken: ${var} ${_} ${val} not MK_ or OPT_" >&2
161897ae85fSBrooks Davis			exit 1
162897ae85fSBrooks Davis			;;
163897ae85fSBrooks Davis		esac
164897ae85fSBrooks Davis	done
165897ae85fSBrooks Davis}
166897ae85fSBrooks Davis
167897ae85fSBrooks Davisshow_group_options()
168897ae85fSBrooks Davis{
169897ae85fSBrooks Davis	env -i ${make} .MAKE.MODE=normal "$@" showconfig __MAKE_CONF=/dev/null \
170897ae85fSBrooks Davis	    SRCCONF=/dev/null |
171897ae85fSBrooks Davis	while read var _ val ; do
172897ae85fSBrooks Davis		case ${var} in
173897ae85fSBrooks Davis		MK_*)
174897ae85fSBrooks Davis			# ignore
175897ae85fSBrooks Davis			;;
176897ae85fSBrooks Davis		OPT_*)
177897ae85fSBrooks Davis			opt=${var#OPT_}
178897ae85fSBrooks Davis			echo ${opt}
179897ae85fSBrooks Davis			;;
180897ae85fSBrooks Davis		*)
181897ae85fSBrooks Davis			echo "make showconfig broken: ${var} ${_} ${val} not MK_ or OPT_" >&2
182897ae85fSBrooks Davis			exit 1
183897ae85fSBrooks Davis			;;
184897ae85fSBrooks Davis		esac
185c5922fbfSRuslan Ermilov	done
186c5922fbfSRuslan Ermilov}
187c5922fbfSRuslan Ermilov
188c5922fbfSRuslan Ermilovmain()
189c5922fbfSRuslan Ermilov{
1907a206c31SWarren Block	echo "building src.conf.5 man page from files in ${PWD}" >&2
191c5922fbfSRuslan Ermilov
1920db9a543SEitan Adler	generated='@'generated
193c5922fbfSRuslan Ermilov	cat <<EOF
194b1a0e564SEitan Adler.\" DO NOT EDIT-- this file is $generated by tools/build/options/makeman.
1952701a1b7SRuslan Ermilov.Dd $(echo $(LC_TIME=C date +'%B %e, %Y'))
196c5922fbfSRuslan Ermilov.Dt SRC.CONF 5
197c5922fbfSRuslan Ermilov.Os
198c5922fbfSRuslan Ermilov.Sh NAME
199c5922fbfSRuslan Ermilov.Nm src.conf
20057caf3d6STom Rhodes.Nd "source build options"
201c5922fbfSRuslan Ermilov.Sh DESCRIPTION
202c5922fbfSRuslan ErmilovThe
203c5922fbfSRuslan Ermilov.Nm
204e6ca6901SGordon Berglingfile contains variables that control what components will be generated during
205e6ca6901SGordon Berglingthe build process of the
206c5922fbfSRuslan Ermilov.Fx
207c5922fbfSRuslan Ermilovsource tree; see
208c5922fbfSRuslan Ermilov.Xr build 7 .
209c5922fbfSRuslan Ermilov.Pp
210c5922fbfSRuslan ErmilovThe
211c5922fbfSRuslan Ermilov.Nm
212c5922fbfSRuslan Ermilovfile uses the standard makefile syntax.
213c5922fbfSRuslan ErmilovHowever,
214c5922fbfSRuslan Ermilov.Nm
215c5922fbfSRuslan Ermilovshould not specify any dependencies to
216c5922fbfSRuslan Ermilov.Xr make 1 .
217c5922fbfSRuslan ErmilovInstead,
218c5922fbfSRuslan Ermilov.Nm
219c5922fbfSRuslan Ermilovis to set
220c5922fbfSRuslan Ermilov.Xr make 1
221c5922fbfSRuslan Ermilovvariables that control the aspects of how the system builds.
222c5922fbfSRuslan Ermilov.Pp
223c5922fbfSRuslan ErmilovThe default location of
224c5922fbfSRuslan Ermilov.Nm
225*dd8c666dSDag-Erling Smørgravis the top level of the source tree, or
226*dd8c666dSDag-Erling Smørgrav.Pa /etc/src.conf
227*dd8c666dSDag-Erling Smørgravif no
228*dd8c666dSDag-Erling Smørgrav.Nm
229*dd8c666dSDag-Erling Smørgravis found in the source tree itself,
230c5922fbfSRuslan Ermilovthough an alternative location can be specified in the
231c5922fbfSRuslan Ermilov.Xr make 1
232c5922fbfSRuslan Ermilovvariable
233c5922fbfSRuslan Ermilov.Va SRCCONF .
234c5922fbfSRuslan ErmilovOverriding the location of
235c5922fbfSRuslan Ermilov.Nm
236c5922fbfSRuslan Ermilovmay be necessary if the system-wide settings are not suitable
237c5922fbfSRuslan Ermilovfor a particular build.
238c5922fbfSRuslan ErmilovFor instance, setting
239c5922fbfSRuslan Ermilov.Va SRCCONF
240c5922fbfSRuslan Ermilovto
241c5922fbfSRuslan Ermilov.Pa /dev/null
242c5922fbfSRuslan Ermiloveffectively resets all build controls to their defaults.
243c5922fbfSRuslan Ermilov.Pp
244c5922fbfSRuslan ErmilovThe only purpose of
245c5922fbfSRuslan Ermilov.Nm
246c5922fbfSRuslan Ermilovis to control the compilation of the
247c5922fbfSRuslan Ermilov.Fx
24857caf3d6STom Rhodessource code, which is usually located in
249c5922fbfSRuslan Ermilov.Pa /usr/src .
250c5922fbfSRuslan ErmilovAs a rule, the system administrator creates
251c5922fbfSRuslan Ermilov.Nm
252c5922fbfSRuslan Ermilovwhen the values of certain control variables need to be changed
253c5922fbfSRuslan Ermilovfrom their defaults.
254c5922fbfSRuslan Ermilov.Pp
255c5922fbfSRuslan ErmilovIn addition, control variables can be specified
256c5922fbfSRuslan Ermilovfor a particular build via the
257c5922fbfSRuslan Ermilov.Fl D
258c5922fbfSRuslan Ermilovoption of
259c5922fbfSRuslan Ermilov.Xr make 1
2603d919b75SMike Makonnenor in its environment; see
261c5922fbfSRuslan Ermilov.Xr environ 7 .
262c5922fbfSRuslan Ermilov.Pp
263ca045714SBryan DreweryThe environment of
264ca045714SBryan Drewery.Xr make 1
265ca045714SBryan Dreweryfor the build can be controlled via the
266ca045714SBryan Drewery.Va SRC_ENV_CONF
267ca045714SBryan Dreweryvariable, which defaults to
268ca045714SBryan Drewery.Pa /etc/src-env.conf .
269ca045714SBryan DrewerySome examples that may only be set in this file are
27032b5dc9aSSimon J. Gerraty.Va WITH_DIRDEPS_BUILD ,
271ca045714SBryan Dreweryand
272dfa09989SBryan Drewery.Va WITH_META_MODE ,
273dfa09989SBryan Dreweryand
2745d111a97SBryan Drewery.Va MAKEOBJDIRPREFIX
275dfa09989SBryan Dreweryas they are environment-only variables.
276ca045714SBryan Drewery.Pp
27789aed883SBrooks DavisThe values of
27889aed883SBrooks Davis.Va WITH_
27989aed883SBrooks Davisand
28089aed883SBrooks Davis.Va WITHOUT_
28189aed883SBrooks Davisvariables are ignored regardless of their setting;
28257caf3d6STom Rhodeseven if they would be set to
283c5922fbfSRuslan Ermilov.Dq Li FALSE
284c5922fbfSRuslan Ermilovor
28557caf3d6STom Rhodes.Dq Li NO .
2867a206c31SWarren BlockThe presence of an option causes
2877a206c31SWarren Blockit to be honored by
28857caf3d6STom Rhodes.Xr make 1 .
289c5922fbfSRuslan Ermilov.Pp
2907a206c31SWarren BlockThis list provides a name and short description for variables
291c5922fbfSRuslan Ermilovthat can be used for source builds.
292c5922fbfSRuslan Ermilov.Bl -tag -width indent
293c5922fbfSRuslan ErmilovEOF
294317c99b7SBryan Drewery	show settings SRC_ENV_CONF=/dev/null | sort > $t/config_default
295f506e293SEd Maste	# Work around WITH_LDNS_UTILS forcing BIND_UTILS off by parsing the
296f506e293SEd Maste	# actual config that results from enabling every WITH_ option.  This
297f506e293SEd Maste	# can be reverted if/when we no longer have options that disable
298f506e293SEd Maste	# others.
299317c99b7SBryan Drewery	show with SRC_ENV_CONF=/dev/null | sort | sed 's/$/=/' > $t/src.conf
300317c99b7SBryan Drewery	show settings SRC_ENV_CONF=$t/src.conf | sort > $t/config_WITH_ALL
301317c99b7SBryan Drewery	show without SRC_ENV_CONF=/dev/null | sort > $t/config_WITHOUT_ALL
302177d707cSBryan Drewery	env_only_options="$(${make} MK_AUTO_OBJ=no -V __ENV_ONLY_OPTIONS)"
3032701a1b7SRuslan Ermilov
3042701a1b7SRuslan Ermilov	show_options |
3052701a1b7SRuslan Ermilov	while read opt targets ; do
3062701a1b7SRuslan Ermilov		if [ ! -f ${opt} ] ; then
3072701a1b7SRuslan Ermilov			echo "no description found for ${opt}, skipping" >&2
308c3b08cc6SYaroslav Tykhiy			continue
309cae68befSRuslan Ermilov		fi
310cae68befSRuslan Ermilov
3112701a1b7SRuslan Ermilov		echo ".It Va ${opt}"
312983e4096SEd Maste		sed -e'/\$FreeBSD.*\$/d' ${opt}
3132701a1b7SRuslan Ermilov		if [ -n "${targets}" ] ; then
3142701a1b7SRuslan Ermilov			echo '.Pp'
3157a206c31SWarren Block			echo 'This is a default setting on'
3162701a1b7SRuslan Ermilov			echo $(echo ${targets} | sed -e's/ /, /g' -e's/\(.*\), /\1 and /').
317c5922fbfSRuslan Ermilov		fi
3182701a1b7SRuslan Ermilov
319cae68befSRuslan Ermilov		if [ "${opt%%_*}" = 'WITHOUT' ] ; then
3202701a1b7SRuslan Ermilov			sed -n "/^WITH_${opt#WITHOUT_}$/!s/$/=/p" $t/config_WITH_ALL > $t/src.conf
321317c99b7SBryan Drewery			show settings SRC_ENV_CONF=$t/src.conf -D${opt} | sort > $t/config_WITH_ALL_${opt}
3222701a1b7SRuslan Ermilov			comm -13 $t/config_WITH_ALL $t/config_WITH_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps
323cae68befSRuslan Ermilov		elif [ "${opt%%_*}" = 'WITH' ] ; then
3242701a1b7SRuslan Ermilov			sed -n "/^WITHOUT${opt#WITH}$/!s/$/=/p" $t/config_WITHOUT_ALL > $t/src.conf
325317c99b7SBryan Drewery			show settings SRC_ENV_CONF=$t/src.conf -D${opt} | sort > $t/config_WITHOUT_ALL_${opt}
3262701a1b7SRuslan Ermilov			comm -13 $t/config_WITHOUT_ALL $t/config_WITHOUT_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps
3272701a1b7SRuslan Ermilov		else
3282701a1b7SRuslan Ermilov			echo 'internal error' >&2
3292701a1b7SRuslan Ermilov			exit 1
3302701a1b7SRuslan Ermilov		fi
3312701a1b7SRuslan Ermilov
332317c99b7SBryan Drewery		show settings SRC_ENV_CONF=/dev/null -D${opt} | sort > $t/config_${opt}
333f506e293SEd Maste		comm -13 $t/config_default $t/config_${opt} | sed -n "/^${opt}$/!p" |
334f506e293SEd Maste		comm -13 $t/deps - > $t/deps2
335f506e293SEd Maste
3364078537cSBryan Drewery		havedeps=0
3372701a1b7SRuslan Ermilov		if [ -s $t/deps ] ; then
3384078537cSBryan Drewery			havedeps=1
3397a206c31SWarren Block			echo 'When set, it enforces these options:'
3402701a1b7SRuslan Ermilov			echo '.Pp'
3412701a1b7SRuslan Ermilov			echo '.Bl -item -compact'
3424078537cSBryan Drewery			while read opt2 ; do
3432701a1b7SRuslan Ermilov				echo '.It'
3442701a1b7SRuslan Ermilov				echo ".Va ${opt2}"
3454078537cSBryan Drewery			done < $t/deps
3462701a1b7SRuslan Ermilov			echo '.El'
3472701a1b7SRuslan Ermilov		fi
3482701a1b7SRuslan Ermilov
3492701a1b7SRuslan Ermilov		if [ -s $t/deps2 ] ; then
3504078537cSBryan Drewery			if [ ${havedeps} -eq 1 ] ; then
3512701a1b7SRuslan Ermilov				echo '.Pp'
3522701a1b7SRuslan Ermilov			fi
3537a206c31SWarren Block			echo 'When set, these options are also in effect:'
3542701a1b7SRuslan Ermilov			echo '.Pp'
3552701a1b7SRuslan Ermilov			echo '.Bl -inset -compact'
3564078537cSBryan Drewery			while read opt2 ; do
3572701a1b7SRuslan Ermilov				echo ".It Va ${opt2}"
3582701a1b7SRuslan Ermilov				noopt=$(echo ${opt2} | sed -e's/WITH_/WITHOUT_/;t' -e's/WITHOUT_/WITH_/')
3592701a1b7SRuslan Ermilov				echo '(unless'
3602701a1b7SRuslan Ermilov				echo ".Va ${noopt}"
3612701a1b7SRuslan Ermilov				echo 'is set explicitly)'
3624078537cSBryan Drewery			done < $t/deps2
3632701a1b7SRuslan Ermilov			echo '.El'
364c5922fbfSRuslan Ermilov		fi
365da6e996dSBryan Drewery
366da6e996dSBryan Drewery		case " ${env_only_options} " in
367da6e996dSBryan Drewery			*\ ${opt#*_}\ *)
368da6e996dSBryan Drewery				echo ".Pp"
369317c99b7SBryan Drewery				echo "This must be set in the environment, make command line, or"
370da6e996dSBryan Drewery				echo ".Pa /etc/src-env.conf ,"
371da6e996dSBryan Drewery				echo "not"
372da6e996dSBryan Drewery				echo ".Pa /etc/src.conf ."
373da6e996dSBryan Drewery				;;
374da6e996dSBryan Drewery		esac
375da6e996dSBryan Drewery
376cc36164aSBrooks Davis		printf "." >&2
377c5922fbfSRuslan Ermilov	done
378cc36164aSBrooks Davis	printf "\n" >&2
379c5922fbfSRuslan Ermilov	cat <<EOF
380c5922fbfSRuslan Ermilov.El
381897ae85fSBrooks Davis.Pp
382897ae85fSBrooks DavisThe following options accept a single value from a list of valid values.
383897ae85fSBrooks Davis.Bl -tag -width indent
384897ae85fSBrooks DavisEOF
38565fd76b5SEd Maste	prev_opt=
386897ae85fSBrooks Davis	show_group_options |
387897ae85fSBrooks Davis	while read opt ; do
388897ae85fSBrooks Davis		if [ ! -f ${opt} ] ; then
389897ae85fSBrooks Davis			echo "no description found for ${opt}, skipping" >&2
390897ae85fSBrooks Davis			continue
391897ae85fSBrooks Davis		fi
39265fd76b5SEd Maste		if [ $opt = "$prev_opt" ]; then
39365fd76b5SEd Maste			echo "ignoring duplicate option $opt" >&2
39465fd76b5SEd Maste			continue
39565fd76b5SEd Maste		fi
39665fd76b5SEd Maste		prev_opt=$opt
397897ae85fSBrooks Davis
398897ae85fSBrooks Davis		echo ".It Va ${opt}"
399897ae85fSBrooks Davis		cat ${opt}
400897ae85fSBrooks Davis	done
401897ae85fSBrooks Davis	cat <<EOF
402897ae85fSBrooks Davis.El
403c5922fbfSRuslan Ermilov.Sh FILES
404691b39b5SGlen Barber.Bl -tag -compact -width Pa
405c5922fbfSRuslan Ermilov.It Pa /etc/src.conf
406ca045714SBryan Drewery.It Pa /etc/src-env.conf
407c5922fbfSRuslan Ermilov.It Pa /usr/share/mk/bsd.own.mk
408c5922fbfSRuslan Ermilov.El
409c5922fbfSRuslan Ermilov.Sh SEE ALSO
410c5922fbfSRuslan Ermilov.Xr make 1 ,
411c5922fbfSRuslan Ermilov.Xr make.conf 5 ,
412c5922fbfSRuslan Ermilov.Xr build 7 ,
413c5922fbfSRuslan Ermilov.Xr ports 7
414c5922fbfSRuslan Ermilov.Sh HISTORY
415c5922fbfSRuslan ErmilovThe
416c5922fbfSRuslan Ermilov.Nm
417c5922fbfSRuslan Ermilovfile appeared in
418c5922fbfSRuslan Ermilov.Fx 7.0 .
419c5922fbfSRuslan Ermilov.Sh AUTHORS
420fd4f2cd5SEnji CooperThis manual page was autogenerated by
421cbc5a508SEnji Cooper.An tools/build/options/makeman .
422c5922fbfSRuslan ErmilovEOF
423c5922fbfSRuslan Ermilov}
424c5922fbfSRuslan Ermilov
425c5922fbfSRuslan Ermilovmain
426