makeman revision 318614
1168404Spjd#!/bin/sh 2168404Spjd# 3168404Spjd# This file is in the public domain. 4168404Spjd 5168404Spjdset -o errexit 6168404SpjdLC_ALL=C 7168404Spjd 8168404Spjdident='$FreeBSD: stable/10/tools/build/options/makeman 318614 2017-05-22 06:08:20Z ngie $' 9168404Spjd 10168404Spjdt=$(mktemp -d -t makeman) 11168404Spjdtrap 'test -d $t && rm -rf $t' exit 12168404Spjd 13168404Spjdsrcdir=$(realpath ../../..) 14168404Spjdmake="make -C $srcdir -m $srcdir/share/mk" 15168404Spjd 16168404Spjd# 17168404Spjd# usage: no_targets all_targets yes_targets 18168404Spjd# 19168404Spjdno_targets() 20168404Spjd{ 21168404Spjd for t1 in $1 ; do 22168404Spjd for t2 in $2 ; do 23168404Spjd if [ "${t1}" = "${t2}" ] ; then 24168404Spjd continue 2 25168404Spjd fi 26168404Spjd done 27168404Spjd echo ${t1} 28168404Spjd done 29168404Spjd} 30168404Spjd 31168404Spjdshow_options() 32168404Spjd{ 33168508Spjd ALL_TARGETS=$(echo $(${make} targets | tail -n +2)) 34168404Spjd rm -f $t/settings 35168404Spjd for target in ${ALL_TARGETS} ; do 36168404Spjd env -i ${make} showconfig \ 37168404Spjd SRCCONF=/dev/null __MAKE_CONF=/dev/null \ 38168404Spjd TARGET_ARCH=${target#*/} TARGET=${target%/*} | 39168508Spjd while read var _ val ; do 40168404Spjd opt=${var#MK_} 41168404Spjd case ${val} in 42168404Spjd yes) 43168404Spjd echo ${opt} ${target} 44168404Spjd ;; 45168404Spjd no) 46168404Spjd echo ${opt} 47168404Spjd ;; 48168404Spjd *) 49168404Spjd echo 'make showconfig broken' >&2 50168404Spjd exit 1 51168404Spjd ;; 52168404Spjd esac 53168404Spjd done > $t/settings.target 54168404Spjd if [ -r $t/settings ] ; then 55168404Spjd join -t\ $t/settings $t/settings.target > $t/settings.new 56168404Spjd mv $t/settings.new $t/settings 57168404Spjd else 58168404Spjd mv $t/settings.target $t/settings 59168404Spjd fi 60168404Spjd done 61168404Spjd 62168404Spjd while read opt targets ; do 63168404Spjd if [ "${targets}" = "${ALL_TARGETS}" ] ; then 64168404Spjd echo "WITHOUT_${opt}" 65168404Spjd elif [ -z "${targets}" ] ; then 66168508Spjd echo "WITH_${opt}" 67168508Spjd else 68168404Spjd echo "WITHOUT_${opt}" $(no_targets "${ALL_TARGETS}" "${targets}") 69168404Spjd echo "WITH_${opt} ${targets}" 70185319Spjd fi 71168404Spjd done < $t/settings 72241896Skib} 73168404Spjd 74185319Spjd# 75185319Spjd# usage: show { settings | with | without } ... 76185319Spjd# 77185319Spjdshow() 78185319Spjd{ 79185319Spjd 80185319Spjd mode=$1 ; shift 81185319Spjd case ${mode} in 82185319Spjd settings) 83185319Spjd yes_prefix=WITH 84185319Spjd no_prefix=WITHOUT 85168404Spjd ;; 86194617Skib with) 87241896Skib yes_prefix=WITH 88194617Skib no_prefix=WITH 89168404Spjd ;; 90168508Spjd without) 91196966Skib yes_prefix=WITHOUT 92168404Spjd no_prefix=WITHOUT 93175294Sattilio ;; 94168508Spjd *) 95168404Spjd echo 'internal error' >&2 96168404Spjd exit 1 97168508Spjd ;; 98168508Spjd esac 99168404Spjd env -i ${make} "$@" showconfig __MAKE_CONF=/dev/null | 100168508Spjd while read var _ val ; do 101168508Spjd opt=${var#MK_} 102168508Spjd case ${val} in 103168508Spjd yes) 104168508Spjd echo ${yes_prefix}_${opt} 105168508Spjd ;; 106168508Spjd no) 107168508Spjd echo ${no_prefix}_${opt} 108168508Spjd ;; 109168508Spjd *) 110168508Spjd echo 'make showconfig broken' >&2 111168508Spjd exit 1 112168508Spjd ;; 113168508Spjd esac 114168508Spjd done 115168508Spjd} 116168508Spjd 117168508Spjdmain() 118168508Spjd{ 119168508Spjd 120168508Spjd ident=${ident#$} 121168508Spjd ident=${ident% $} 122168508Spjd fbsdid='$'FreeBSD'$' 123168508Spjd cat <<EOF 124168508Spjd.\" DO NOT EDIT-- this file is automatically generated. 125168508Spjd.\" from ${ident} 126168508Spjd.\" ${fbsdid} 127168508Spjd.Dd $(echo $(LC_TIME=C date +'%B %e, %Y')) 128168508Spjd.Dt SRC.CONF 5 129168508Spjd.Os 130168404Spjd.Sh NAME 131241896Skib.Nm src.conf 132168404Spjd.Nd "source build options" 133175202Sattilio.Sh DESCRIPTION 134182371SattilioThe 135175294Sattilio.Nm 136168404Spjdfile contains settings that will apply to every build involving the 137168404Spjd.Fx 138168404Spjdsource tree; see 139168404Spjd.Xr build 7 . 140168404Spjd.Pp 141168508SpjdThe 142168508Spjd.Nm 143168508Spjdfile uses the standard makefile syntax. 144168508SpjdHowever, 145168508Spjd.Nm 146168508Spjdshould not specify any dependencies to 147168508Spjd.Xr make 1 . 148168508SpjdInstead, 149168508Spjd.Nm 150168508Spjdis to set 151168508Spjd.Xr make 1 152168508Spjdvariables that control the aspects of how the system builds. 153168404Spjd.Pp 154168508SpjdThe default location of 155168404Spjd.Nm 156168508Spjdis 157168508Spjd.Pa /etc/src.conf , 158168508Spjdthough an alternative location can be specified in the 159168508Spjd.Xr make 1 160168508Spjdvariable 161168508Spjd.Va SRCCONF . 162168508SpjdOverriding the location of 163168508Spjd.Nm 164168508Spjdmay be necessary if the system-wide settings are not suitable 165168508Spjdfor a particular build. 166168508SpjdFor instance, setting 167168404Spjd.Va SRCCONF 168168404Spjdto 169168404Spjd.Pa /dev/null 170241896Skibeffectively resets all build controls to their defaults. 171168404Spjd.Pp 172168404SpjdThe only purpose of 173168404Spjd.Nm 174168404Spjdis to control the compilation of the 175168404Spjd.Fx 176168404Spjdsource code, which is usually located in 177168404Spjd.Pa /usr/src . 178168404SpjdAs a rule, the system administrator creates 179168404Spjd.Nm 180168404Spjdwhen the values of certain control variables need to be changed 181168404Spjdfrom their defaults. 182168404Spjd.Pp 183168404SpjdIn addition, control variables can be specified 184168404Spjdfor a particular build via the 185168404Spjd.Fl D 186175202Sattiliooption of 187168404Spjd.Xr make 1 188175294Sattilioor in its environment; see 189168404Spjd.Xr environ 7 . 190168404Spjd.Pp 191168404SpjdThe values of variables are ignored regardless of their setting; 192168508Spjdeven if they would be set to 193168508Spjd.Dq Li FALSE 194168508Spjdor 195168508Spjd.Dq Li NO . 196168508SpjdJust the existence of an option will cause 197218665Smarcelit to be honoured by 198168508Spjd.Xr make 1 . 199168508Spjd.Pp 200168508SpjdThe following list provides a name and short description for variables 201168508Spjdthat can be used for source builds. 202168508Spjd.Bl -tag -width indent 203168508SpjdEOF 204168508Spjd show settings SRCCONF=/dev/null | sort > $t/config_default 205168508Spjd # Work around WITH_LDNS_UTILS forcing BIND_UTILS off by parsing the 206168508Spjd # actual config that results from enabling every WITH_ option. This 207168508Spjd # can be reverted if/when we no longer have options that disable 208168508Spjd # others. 209168508Spjd show with SRCCONF=/dev/null | sort | sed 's/$/=/' > $t/src.conf 210168508Spjd show settings SRCCONF=$t/src.conf | sort > $t/config_WITH_ALL 211168508Spjd show without SRCCONF=/dev/null | sort > $t/config_WITHOUT_ALL 212168508Spjd 213168508Spjd show_options | 214168404Spjd while read opt targets ; do 215168404Spjd if [ ! -f ${opt} ] ; then 216168404Spjd echo "no description found for ${opt}, skipping" >&2 217168404Spjd continue 218241896Skib fi 219241896Skib 220168508Spjd echo ".It Va ${opt}" 221168404Spjd sed -e's/\$\(FreeBSD: .*\) \$/from \1/' ${opt} 222 if [ -n "${targets}" ] ; then 223 echo '.Pp' 224 echo 'It is a default setting on' 225 echo $(echo ${targets} | sed -e's/ /, /g' -e's/\(.*\), /\1 and /'). 226 fi 227 228 if [ "${opt%%_*}" = 'WITHOUT' ] ; then 229 sed -n "/^WITH_${opt#WITHOUT_}$/!s/$/=/p" $t/config_WITH_ALL > $t/src.conf 230 show settings SRCCONF=$t/src.conf -D${opt} | sort > $t/config_WITH_ALL_${opt} 231 comm -13 $t/config_WITH_ALL $t/config_WITH_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps 232 elif [ "${opt%%_*}" = 'WITH' ] ; then 233 sed -n "/^WITHOUT${opt#WITH}$/!s/$/=/p" $t/config_WITHOUT_ALL > $t/src.conf 234 show settings SRCCONF=$t/src.conf -D${opt} | sort > $t/config_WITHOUT_ALL_${opt} 235 comm -13 $t/config_WITHOUT_ALL $t/config_WITHOUT_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps 236 else 237 echo 'internal error' >&2 238 exit 1 239 fi 240 241 show settings SRCCONF=/dev/null -D${opt} | sort > $t/config_${opt} 242 comm -13 $t/config_default $t/config_${opt} | sed -n "/^${opt}$/!p" | 243 comm -13 $t/deps - > $t/deps2 244 245 # Work around BIND_UTILS=no being the default when every WITH_ 246 # option is enabled. 247 if [ "$(cat $t/deps2)" = WITHOUT_BIND_UTILS ]; then 248 sort $t/deps $t/deps2 > $t/_deps 249 mv $t/_deps $t/deps 250 :> $t/deps2 251 fi 252 253 havedeps=0 254 if [ -s $t/deps ] ; then 255 havedeps=1 256 echo 'When set, it also enforces the following options:' 257 echo '.Pp' 258 echo '.Bl -item -compact' 259 while read opt2 ; do 260 echo '.It' 261 echo ".Va ${opt2}" 262 done < $t/deps 263 echo '.El' 264 fi 265 266 if [ -s $t/deps2 ] ; then 267 if [ ${havedeps} -eq 1 ] ; then 268 echo '.Pp' 269 fi 270 echo 'When set, the following options are also in effect:' 271 echo '.Pp' 272 echo '.Bl -inset -compact' 273 while read opt2 ; do 274 echo ".It Va ${opt2}" 275 noopt=$(echo ${opt2} | sed -e's/WITH_/WITHOUT_/;t' -e's/WITHOUT_/WITH_/') 276 echo '(unless' 277 echo ".Va ${noopt}" 278 echo 'is set explicitly)' 279 done < $t/deps2 280 echo '.El' 281 fi 282 twiddle >&2 283 done 284 cat <<EOF 285.El 286.Sh FILES 287.Bl -tag -compact -width Pa 288.It Pa /etc/src.conf 289.It Pa /usr/share/mk/bsd.own.mk 290.El 291.Sh SEE ALSO 292.Xr make 1 , 293.Xr make.conf 5 , 294.Xr build 7 , 295.Xr ports 7 296.Sh HISTORY 297The 298.Nm 299file appeared in 300.Fx 7.0 . 301.Sh AUTHORS 302This manual page was autogenerated by 303.An tools/build/options/makeman . 304EOF 305} 306 307twiddle_pos=0 308twiddle() 309{ 310 local c0='|' c1='/' c2='-' c3='\' 311 312 eval printf '%c\\b' '$c'${twiddle_pos} 313 twiddle_pos=$(((twiddle_pos+1)%4)) 314} 315 316main 317