xref: /freebsd/tools/build/options/makeman (revision 2701a1b7a1e716aef71b266fb55c842281e8ade9)
1c5922fbfSRuslan Ermilov#!/bin/sh
2c5922fbfSRuslan Ermilov#
3c5922fbfSRuslan Ermilov# This file is in the public domain.
4c5922fbfSRuslan Ermilov
5*2701a1b7SRuslan Ermilovset -o errexit
6*2701a1b7SRuslan Ermilov
7c5922fbfSRuslan Ermilovident='$FreeBSD$'
8c5922fbfSRuslan Ermilov
9*2701a1b7SRuslan Ermilovt=$(mktemp -d -t makeman)
10*2701a1b7SRuslan Ermilovtrap 'test -d $t && rm -rf $t' exit
11*2701a1b7SRuslan Ermilov
12c5922fbfSRuslan Ermilov#
13*2701a1b7SRuslan Ermilov# usage: no_targets all_targets yes_targets
14*2701a1b7SRuslan Ermilov#
15*2701a1b7SRuslan Ermilovno_targets()
16*2701a1b7SRuslan Ermilov{
17*2701a1b7SRuslan Ermilov	for t1 in $1 ; do
18*2701a1b7SRuslan Ermilov		for t2 in $2 ; do
19*2701a1b7SRuslan Ermilov			if [ "${t1}" = "${t2}" ] ; then
20*2701a1b7SRuslan Ermilov				continue 2
21*2701a1b7SRuslan Ermilov			fi
22*2701a1b7SRuslan Ermilov		done
23*2701a1b7SRuslan Ermilov		echo ${t1}
24*2701a1b7SRuslan Ermilov	done
25*2701a1b7SRuslan Ermilov}
26*2701a1b7SRuslan Ermilov
27*2701a1b7SRuslan Ermilovshow_options()
28*2701a1b7SRuslan Ermilov{
29*2701a1b7SRuslan Ermilov	ALL_TARGETS=$(echo $(make -C ../../.. targets | tail -n +2))
30*2701a1b7SRuslan Ermilov	rm -f $t/settings
31*2701a1b7SRuslan Ermilov	for target in ${ALL_TARGETS} ; do
32*2701a1b7SRuslan Ermilov		make -C ../../.. showconfig \
33*2701a1b7SRuslan Ermilov		    SRCCONF=/dev/null __MAKE_CONF=/dev/null \
34*2701a1b7SRuslan Ermilov		    TARGET_ARCH=${target#*/} TARGET=${target%/*} |
35*2701a1b7SRuslan Ermilov		while read var _ val ; do
36*2701a1b7SRuslan Ermilov			opt=${var#MK_}
37*2701a1b7SRuslan Ermilov			case ${val} in
38*2701a1b7SRuslan Ermilov			yes)
39*2701a1b7SRuslan Ermilov				echo ${opt} ${target}
40*2701a1b7SRuslan Ermilov				;;
41*2701a1b7SRuslan Ermilov			no)
42*2701a1b7SRuslan Ermilov				echo ${opt}
43*2701a1b7SRuslan Ermilov				;;
44*2701a1b7SRuslan Ermilov			*)
45*2701a1b7SRuslan Ermilov				echo 'make showconfig broken' >&2
46*2701a1b7SRuslan Ermilov				exit 1
47*2701a1b7SRuslan Ermilov				;;
48*2701a1b7SRuslan Ermilov			esac
49*2701a1b7SRuslan Ermilov		done > $t/settings.target
50*2701a1b7SRuslan Ermilov		if [ -r $t/settings ] ; then
51*2701a1b7SRuslan Ermilov			join -t\  $t/settings $t/settings.target > $t/settings.new
52*2701a1b7SRuslan Ermilov			mv $t/settings.new $t/settings
53*2701a1b7SRuslan Ermilov		else
54*2701a1b7SRuslan Ermilov			mv $t/settings.target $t/settings
55*2701a1b7SRuslan Ermilov		fi
56*2701a1b7SRuslan Ermilov	done
57*2701a1b7SRuslan Ermilov
58*2701a1b7SRuslan Ermilov	cat $t/settings | while read opt targets ; do
59*2701a1b7SRuslan Ermilov		if [ "${targets}" = "${ALL_TARGETS}" ] ; then
60*2701a1b7SRuslan Ermilov			echo "WITHOUT_${opt}"
61*2701a1b7SRuslan Ermilov		elif [ -z "${targets}" ] ; then
62*2701a1b7SRuslan Ermilov			echo "WITH_${opt}"
63*2701a1b7SRuslan Ermilov		else
64*2701a1b7SRuslan Ermilov			echo "WITHOUT_${opt}" $(no_targets "${ALL_TARGETS}" "${targets}")
65*2701a1b7SRuslan Ermilov			echo "WITH_${opt} ${targets}"
66*2701a1b7SRuslan Ermilov		fi
67*2701a1b7SRuslan Ermilov	done
68*2701a1b7SRuslan Ermilov}
69*2701a1b7SRuslan Ermilov
70*2701a1b7SRuslan Ermilov#
71*2701a1b7SRuslan Ermilov# usage: show { settings | with | without } ...
72c5922fbfSRuslan Ermilov#
73c5922fbfSRuslan Ermilovshow()
74c5922fbfSRuslan Ermilov{
75c5922fbfSRuslan Ermilov
76c5922fbfSRuslan Ermilov	mode=$1 ; shift
77c5922fbfSRuslan Ermilov	case ${mode} in
78c5922fbfSRuslan Ermilov	settings)
79c5922fbfSRuslan Ermilov		yes_prefix=WITH
80c5922fbfSRuslan Ermilov		no_prefix=WITHOUT
81c5922fbfSRuslan Ermilov		;;
82*2701a1b7SRuslan Ermilov	with)
83*2701a1b7SRuslan Ermilov		yes_prefix=WITH
84c5922fbfSRuslan Ermilov		no_prefix=WITH
85c5922fbfSRuslan Ermilov		;;
86*2701a1b7SRuslan Ermilov	without)
87*2701a1b7SRuslan Ermilov		yes_prefix=WITHOUT
88*2701a1b7SRuslan Ermilov		no_prefix=WITHOUT
89*2701a1b7SRuslan Ermilov		;;
90c5922fbfSRuslan Ermilov	*)
91*2701a1b7SRuslan Ermilov		echo 'internal error' >&2
92c5922fbfSRuslan Ermilov		exit 1
93c5922fbfSRuslan Ermilov		;;
94c5922fbfSRuslan Ermilov	esac
95*2701a1b7SRuslan Ermilov	make -C ../../.. "$@" showconfig __MAKE_CONF=/dev/null |
96c5922fbfSRuslan Ermilov	while read var _ val ; do
97c5922fbfSRuslan Ermilov		opt=${var#MK_}
98c5922fbfSRuslan Ermilov		case ${val} in
99c5922fbfSRuslan Ermilov		yes)
100c5922fbfSRuslan Ermilov			echo ${yes_prefix}_${opt}
101c5922fbfSRuslan Ermilov			;;
102c5922fbfSRuslan Ermilov		no)
103c5922fbfSRuslan Ermilov			echo ${no_prefix}_${opt}
104c5922fbfSRuslan Ermilov			;;
105c5922fbfSRuslan Ermilov		*)
106*2701a1b7SRuslan Ermilov			echo 'make showconfig broken' >&2
107c5922fbfSRuslan Ermilov			exit 1
108c5922fbfSRuslan Ermilov			;;
109c5922fbfSRuslan Ermilov		esac
110c5922fbfSRuslan Ermilov	done
111c5922fbfSRuslan Ermilov}
112c5922fbfSRuslan Ermilov
113c5922fbfSRuslan Ermilovmain()
114c5922fbfSRuslan Ermilov{
115c5922fbfSRuslan Ermilov
116c5922fbfSRuslan Ermilov	ident=${ident#$}
117c5922fbfSRuslan Ermilov	ident=${ident% $}
11841c8ddc3SRuslan Ermilov	fbsdid='$'FreeBSD'$'
119c5922fbfSRuslan Ermilov	cat <<EOF
120c5922fbfSRuslan Ermilov.\" DO NOT EDIT-- this file is automatically generated.
121c5922fbfSRuslan Ermilov.\" from ${ident}
122c5922fbfSRuslan Ermilov.\" ${fbsdid}
123*2701a1b7SRuslan Ermilov.Dd $(echo $(LC_TIME=C date +'%B %e, %Y'))
124c5922fbfSRuslan Ermilov.Dt SRC.CONF 5
125c5922fbfSRuslan Ermilov.Os
126c5922fbfSRuslan Ermilov.Sh NAME
127c5922fbfSRuslan Ermilov.Nm src.conf
12857caf3d6STom Rhodes.Nd "source build options"
129c5922fbfSRuslan Ermilov.Sh DESCRIPTION
130c5922fbfSRuslan ErmilovThe
131c5922fbfSRuslan Ermilov.Nm
132c5922fbfSRuslan Ermilovfile contains settings that will apply to every build involving the
133c5922fbfSRuslan Ermilov.Fx
134c5922fbfSRuslan Ermilovsource tree; see
135c5922fbfSRuslan Ermilov.Xr build 7 .
136c5922fbfSRuslan Ermilov.Pp
137c5922fbfSRuslan ErmilovThe
138c5922fbfSRuslan Ermilov.Nm
139c5922fbfSRuslan Ermilovfile uses the standard makefile syntax.
140c5922fbfSRuslan ErmilovHowever,
141c5922fbfSRuslan Ermilov.Nm
142c5922fbfSRuslan Ermilovshould not specify any dependencies to
143c5922fbfSRuslan Ermilov.Xr make 1 .
144c5922fbfSRuslan ErmilovInstead,
145c5922fbfSRuslan Ermilov.Nm
146c5922fbfSRuslan Ermilovis to set
147c5922fbfSRuslan Ermilov.Xr make 1
148c5922fbfSRuslan Ermilovvariables that control the aspects of how the system builds.
149c5922fbfSRuslan Ermilov.Pp
150c5922fbfSRuslan ErmilovThe default location of
151c5922fbfSRuslan Ermilov.Nm
152c5922fbfSRuslan Ermilovis
153c5922fbfSRuslan Ermilov.Pa /etc/src.conf ,
154c5922fbfSRuslan Ermilovthough an alternative location can be specified in the
155c5922fbfSRuslan Ermilov.Xr make 1
156c5922fbfSRuslan Ermilovvariable
157c5922fbfSRuslan Ermilov.Va SRCCONF .
158c5922fbfSRuslan ErmilovOverriding the location of
159c5922fbfSRuslan Ermilov.Nm
160c5922fbfSRuslan Ermilovmay be necessary if the system-wide settings are not suitable
161c5922fbfSRuslan Ermilovfor a particular build.
162c5922fbfSRuslan ErmilovFor instance, setting
163c5922fbfSRuslan Ermilov.Va SRCCONF
164c5922fbfSRuslan Ermilovto
165c5922fbfSRuslan Ermilov.Pa /dev/null
166c5922fbfSRuslan Ermiloveffectively resets all build controls to their defaults.
167c5922fbfSRuslan Ermilov.Pp
168c5922fbfSRuslan ErmilovThe only purpose of
169c5922fbfSRuslan Ermilov.Nm
170c5922fbfSRuslan Ermilovis to control the compilation of the
171c5922fbfSRuslan Ermilov.Fx
17257caf3d6STom Rhodessource code, which is usually located in
173c5922fbfSRuslan Ermilov.Pa /usr/src .
174c5922fbfSRuslan ErmilovAs a rule, the system administrator creates
175c5922fbfSRuslan Ermilov.Nm
176c5922fbfSRuslan Ermilovwhen the values of certain control variables need to be changed
177c5922fbfSRuslan Ermilovfrom their defaults.
178c5922fbfSRuslan Ermilov.Pp
179c5922fbfSRuslan ErmilovIn addition, control variables can be specified
180c5922fbfSRuslan Ermilovfor a particular build via the
181c5922fbfSRuslan Ermilov.Fl D
182c5922fbfSRuslan Ermilovoption of
183c5922fbfSRuslan Ermilov.Xr make 1
1843d919b75SMike Makonnenor in its environment; see
185c5922fbfSRuslan Ermilov.Xr environ 7 .
186c5922fbfSRuslan Ermilov.Pp
18707b7d7fbSTom RhodesThe values of variables are ignored regardless of their setting;
18857caf3d6STom Rhodeseven if they would be set to
189c5922fbfSRuslan Ermilov.Dq Li FALSE
190c5922fbfSRuslan Ermilovor
19157caf3d6STom Rhodes.Dq Li NO .
19257caf3d6STom RhodesJust the existence of an option will cause
19357caf3d6STom Rhodesit to be honoured by
19457caf3d6STom Rhodes.Xr make 1 .
195c5922fbfSRuslan Ermilov.Pp
196c5922fbfSRuslan ErmilovThe following list provides a name and short description for variables
197c5922fbfSRuslan Ermilovthat can be used for source builds.
198c5922fbfSRuslan Ermilov.Bl -tag -width indent
199c5922fbfSRuslan ErmilovEOF
200*2701a1b7SRuslan Ermilov	show settings SRCCONF=/dev/null | sort > $t/config_default
201*2701a1b7SRuslan Ermilov	show with SRCCONF=/dev/null | sort > $t/config_WITH_ALL
202*2701a1b7SRuslan Ermilov	show without SRCCONF=/dev/null | sort > $t/config_WITHOUT_ALL
203*2701a1b7SRuslan Ermilov
204*2701a1b7SRuslan Ermilov	show_options |
205*2701a1b7SRuslan Ermilov	while read opt targets ; do
206*2701a1b7SRuslan Ermilov		if [ ! -f ${opt} ] ; then
207*2701a1b7SRuslan Ermilov			echo "no description found for ${opt}, skipping" >&2
208c3b08cc6SYaroslav Tykhiy			continue
209*2701a1b7SRuslan Ermilov		else
210*2701a1b7SRuslan Ermilov			echo ".It Va ${opt}"
211*2701a1b7SRuslan Ermilov			sed -e's/\$\(FreeBSD: .*\) \$/from \1/' ${opt}
212*2701a1b7SRuslan Ermilov			if [ -n "${targets}" ] ; then
213*2701a1b7SRuslan Ermilov				echo '.Pp'
214*2701a1b7SRuslan Ermilov				echo 'It is a default setting on'
215*2701a1b7SRuslan Ermilov				echo $(echo ${targets} | sed -e's/ /, /g' -e's/\(.*\), /\1 and /').
216c5922fbfSRuslan Ermilov			fi
2176dc51ecaSRuslan Ermilov		fi
218*2701a1b7SRuslan Ermilov
219*2701a1b7SRuslan Ermilov		if [ "${opt%%_*}" = "WITHOUT" ] ; then
220*2701a1b7SRuslan Ermilov			sed -n "/^WITH_${opt#WITHOUT_}$/!s/$/=/p" $t/config_WITH_ALL > $t/src.conf
221*2701a1b7SRuslan Ermilov			show settings SRCCONF=$t/src.conf -D${opt} | sort > $t/config_WITH_ALL_${opt}
222*2701a1b7SRuslan Ermilov			comm -13 $t/config_WITH_ALL $t/config_WITH_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps
223*2701a1b7SRuslan Ermilov		elif [ "${opt%%_*}" = "WITH" ] ; then
224*2701a1b7SRuslan Ermilov			sed -n "/^WITHOUT${opt#WITH}$/!s/$/=/p" $t/config_WITHOUT_ALL > $t/src.conf
225*2701a1b7SRuslan Ermilov			show settings SRCCONF=$t/src.conf -D${opt} | sort > $t/config_WITHOUT_ALL_${opt}
226*2701a1b7SRuslan Ermilov			comm -13 $t/config_WITHOUT_ALL $t/config_WITHOUT_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps
227*2701a1b7SRuslan Ermilov		else
228*2701a1b7SRuslan Ermilov			echo 'internal error' >&2
229*2701a1b7SRuslan Ermilov			exit 1
230*2701a1b7SRuslan Ermilov		fi
231*2701a1b7SRuslan Ermilov
232*2701a1b7SRuslan Ermilov		if [ -s $t/deps ] ; then
233*2701a1b7SRuslan Ermilov			echo 'When set, it also enforces the following options:'
234*2701a1b7SRuslan Ermilov			echo '.Pp'
235*2701a1b7SRuslan Ermilov			echo '.Bl -item -compact'
236*2701a1b7SRuslan Ermilov			cat $t/deps | while read opt2 ; do
237*2701a1b7SRuslan Ermilov				echo '.It'
238*2701a1b7SRuslan Ermilov				echo ".Va ${opt2}"
239c5922fbfSRuslan Ermilov			done
240*2701a1b7SRuslan Ermilov			echo '.El'
241*2701a1b7SRuslan Ermilov		fi
242*2701a1b7SRuslan Ermilov
243*2701a1b7SRuslan Ermilov		show settings SRCCONF=/dev/null -D${opt} | sort > $t/config_${opt}
244*2701a1b7SRuslan Ermilov		comm -13 $t/config_default $t/config_${opt} | sed -n "/^${opt}$/!p" |
245*2701a1b7SRuslan Ermilov		comm -13 $t/deps - > $t/deps2
246*2701a1b7SRuslan Ermilov
247*2701a1b7SRuslan Ermilov		if [ -s $t/deps2 ] ; then
248*2701a1b7SRuslan Ermilov			if [ -s $t/deps ] ; then
249*2701a1b7SRuslan Ermilov				echo '.Pp'
250*2701a1b7SRuslan Ermilov			fi
251*2701a1b7SRuslan Ermilov			echo 'When set, the following options are also in effect:'
252*2701a1b7SRuslan Ermilov			echo '.Pp'
253*2701a1b7SRuslan Ermilov			echo '.Bl -inset -compact'
254*2701a1b7SRuslan Ermilov			cat $t/deps2 | while read opt2 ; do
255*2701a1b7SRuslan Ermilov				echo ".It Va ${opt2}"
256*2701a1b7SRuslan Ermilov				noopt=$(echo ${opt2} | sed -e's/WITH_/WITHOUT_/;t' -e's/WITHOUT_/WITH_/')
257*2701a1b7SRuslan Ermilov				echo '(unless'
258*2701a1b7SRuslan Ermilov				echo ".Va ${noopt}"
259*2701a1b7SRuslan Ermilov				echo 'is set explicitly)'
260*2701a1b7SRuslan Ermilov			done
261*2701a1b7SRuslan Ermilov			echo '.El'
262c5922fbfSRuslan Ermilov		fi
263c5922fbfSRuslan Ermilov	done
264c5922fbfSRuslan Ermilov	cat <<EOF
265c5922fbfSRuslan Ermilov.El
266c5922fbfSRuslan Ermilov.Sh FILES
267c5922fbfSRuslan Ermilov.Bl -tag -compact
268c5922fbfSRuslan Ermilov.It Pa /etc/src.conf
269c5922fbfSRuslan Ermilov.It Pa /usr/share/mk/bsd.own.mk
270c5922fbfSRuslan Ermilov.El
271c5922fbfSRuslan Ermilov.Sh SEE ALSO
272c5922fbfSRuslan Ermilov.Xr make 1 ,
273c5922fbfSRuslan Ermilov.Xr make.conf 5 ,
274c5922fbfSRuslan Ermilov.Xr build 7 ,
275c5922fbfSRuslan Ermilov.Xr ports 7
276c5922fbfSRuslan Ermilov.Sh HISTORY
277c5922fbfSRuslan ErmilovThe
278c5922fbfSRuslan Ermilov.Nm
279c5922fbfSRuslan Ermilovfile appeared in
280c5922fbfSRuslan Ermilov.Fx 7.0 .
281c5922fbfSRuslan Ermilov.Sh AUTHORS
282c5922fbfSRuslan ErmilovThis manual page was autogenerated.
283c5922fbfSRuslan ErmilovEOF
284c5922fbfSRuslan Ermilov}
285c5922fbfSRuslan Ermilov
286c5922fbfSRuslan Ermilovmain
287