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