1c5922fbfSRuslan Ermilov#!/bin/sh 2c5922fbfSRuslan Ermilov# 3c5922fbfSRuslan Ermilov# This file is in the public domain. 4c5922fbfSRuslan Ermilov 52701a1b7SRuslan Ermilovset -o errexit 6e9f950b5SBaptiste DaroussinLC_ALL=C 72701a1b7SRuslan Ermilov 8c5922fbfSRuslan Ermilovident='$FreeBSD$' 9c5922fbfSRuslan Ermilov 102701a1b7SRuslan Ermilovt=$(mktemp -d -t makeman) 112701a1b7SRuslan Ermilovtrap 'test -d $t && rm -rf $t' exit 122701a1b7SRuslan Ermilov 1369c469c9SDag-Erling Smørgravsrcdir=$(realpath ../../..) 1469c469c9SDag-Erling Smørgravmake="make -C $srcdir -m $srcdir/share/mk" 1569c469c9SDag-Erling Smørgrav 16c5922fbfSRuslan Ermilov# 172701a1b7SRuslan Ermilov# usage: no_targets all_targets yes_targets 182701a1b7SRuslan Ermilov# 192701a1b7SRuslan Ermilovno_targets() 202701a1b7SRuslan Ermilov{ 212701a1b7SRuslan Ermilov for t1 in $1 ; do 222701a1b7SRuslan Ermilov for t2 in $2 ; do 232701a1b7SRuslan Ermilov if [ "${t1}" = "${t2}" ] ; then 242701a1b7SRuslan Ermilov continue 2 252701a1b7SRuslan Ermilov fi 262701a1b7SRuslan Ermilov done 272701a1b7SRuslan Ermilov echo ${t1} 282701a1b7SRuslan Ermilov done 292701a1b7SRuslan Ermilov} 302701a1b7SRuslan Ermilov 312701a1b7SRuslan Ermilovshow_options() 322701a1b7SRuslan Ermilov{ 3369c469c9SDag-Erling Smørgrav ALL_TARGETS=$(echo $(${make} targets | tail -n +2)) 342701a1b7SRuslan Ermilov rm -f $t/settings 352701a1b7SRuslan Ermilov for target in ${ALL_TARGETS} ; do 3669c469c9SDag-Erling Smørgrav ${make} showconfig \ 372701a1b7SRuslan Ermilov SRCCONF=/dev/null __MAKE_CONF=/dev/null \ 382701a1b7SRuslan Ermilov TARGET_ARCH=${target#*/} TARGET=${target%/*} | 392701a1b7SRuslan Ermilov while read var _ val ; do 402701a1b7SRuslan Ermilov opt=${var#MK_} 412701a1b7SRuslan Ermilov case ${val} in 422701a1b7SRuslan Ermilov yes) 432701a1b7SRuslan Ermilov echo ${opt} ${target} 442701a1b7SRuslan Ermilov ;; 452701a1b7SRuslan Ermilov no) 462701a1b7SRuslan Ermilov echo ${opt} 472701a1b7SRuslan Ermilov ;; 482701a1b7SRuslan Ermilov *) 49cc2520d2SSimon J. Gerraty echo "make showconfig broken: ${var} ${_} ${val} (not yes or no)" >&2 502701a1b7SRuslan Ermilov exit 1 512701a1b7SRuslan Ermilov ;; 522701a1b7SRuslan Ermilov esac 532701a1b7SRuslan Ermilov done > $t/settings.target 542701a1b7SRuslan Ermilov if [ -r $t/settings ] ; then 552701a1b7SRuslan Ermilov join -t\ $t/settings $t/settings.target > $t/settings.new 562701a1b7SRuslan Ermilov mv $t/settings.new $t/settings 572701a1b7SRuslan Ermilov else 582701a1b7SRuslan Ermilov mv $t/settings.target $t/settings 592701a1b7SRuslan Ermilov fi 602701a1b7SRuslan Ermilov done 612701a1b7SRuslan Ermilov 622701a1b7SRuslan Ermilov cat $t/settings | while read opt targets ; do 632701a1b7SRuslan Ermilov if [ "${targets}" = "${ALL_TARGETS}" ] ; then 642701a1b7SRuslan Ermilov echo "WITHOUT_${opt}" 652701a1b7SRuslan Ermilov elif [ -z "${targets}" ] ; then 662701a1b7SRuslan Ermilov echo "WITH_${opt}" 672701a1b7SRuslan Ermilov else 682701a1b7SRuslan Ermilov echo "WITHOUT_${opt}" $(no_targets "${ALL_TARGETS}" "${targets}") 692701a1b7SRuslan Ermilov echo "WITH_${opt} ${targets}" 702701a1b7SRuslan Ermilov fi 712701a1b7SRuslan Ermilov done 722701a1b7SRuslan Ermilov} 732701a1b7SRuslan Ermilov 742701a1b7SRuslan Ermilov# 752701a1b7SRuslan Ermilov# usage: show { settings | with | without } ... 76c5922fbfSRuslan Ermilov# 77c5922fbfSRuslan Ermilovshow() 78c5922fbfSRuslan Ermilov{ 79c5922fbfSRuslan Ermilov 80c5922fbfSRuslan Ermilov mode=$1 ; shift 81c5922fbfSRuslan Ermilov case ${mode} in 82c5922fbfSRuslan Ermilov settings) 83c5922fbfSRuslan Ermilov yes_prefix=WITH 84c5922fbfSRuslan Ermilov no_prefix=WITHOUT 85c5922fbfSRuslan Ermilov ;; 862701a1b7SRuslan Ermilov with) 872701a1b7SRuslan Ermilov yes_prefix=WITH 88c5922fbfSRuslan Ermilov no_prefix=WITH 89c5922fbfSRuslan Ermilov ;; 902701a1b7SRuslan Ermilov without) 912701a1b7SRuslan Ermilov yes_prefix=WITHOUT 922701a1b7SRuslan Ermilov no_prefix=WITHOUT 932701a1b7SRuslan Ermilov ;; 94c5922fbfSRuslan Ermilov *) 952701a1b7SRuslan Ermilov echo 'internal error' >&2 96c5922fbfSRuslan Ermilov exit 1 97c5922fbfSRuslan Ermilov ;; 98c5922fbfSRuslan Ermilov esac 99cc2520d2SSimon J. Gerraty ${make} .MAKE.MODE=normal "$@" showconfig __MAKE_CONF=/dev/null | 100c5922fbfSRuslan Ermilov while read var _ val ; do 101c5922fbfSRuslan Ermilov opt=${var#MK_} 102c5922fbfSRuslan Ermilov case ${val} in 103c5922fbfSRuslan Ermilov yes) 104c5922fbfSRuslan Ermilov echo ${yes_prefix}_${opt} 105c5922fbfSRuslan Ermilov ;; 106c5922fbfSRuslan Ermilov no) 107c5922fbfSRuslan Ermilov echo ${no_prefix}_${opt} 108c5922fbfSRuslan Ermilov ;; 109c5922fbfSRuslan Ermilov *) 110cc2520d2SSimon J. Gerraty echo "make showconfig broken: ${var} ${_} ${val} (not yes or no)" >&2 111c5922fbfSRuslan Ermilov exit 1 112c5922fbfSRuslan Ermilov ;; 113c5922fbfSRuslan Ermilov esac 114c5922fbfSRuslan Ermilov done 115c5922fbfSRuslan Ermilov} 116c5922fbfSRuslan Ermilov 117c5922fbfSRuslan Ermilovmain() 118c5922fbfSRuslan Ermilov{ 119c5922fbfSRuslan Ermilov 120c5922fbfSRuslan Ermilov ident=${ident#$} 121c5922fbfSRuslan Ermilov ident=${ident% $} 12241c8ddc3SRuslan Ermilov fbsdid='$'FreeBSD'$' 123c5922fbfSRuslan Ermilov cat <<EOF 124c5922fbfSRuslan Ermilov.\" DO NOT EDIT-- this file is automatically generated. 125c5922fbfSRuslan Ermilov.\" from ${ident} 126c5922fbfSRuslan Ermilov.\" ${fbsdid} 1272701a1b7SRuslan Ermilov.Dd $(echo $(LC_TIME=C date +'%B %e, %Y')) 128c5922fbfSRuslan Ermilov.Dt SRC.CONF 5 129c5922fbfSRuslan Ermilov.Os 130c5922fbfSRuslan Ermilov.Sh NAME 131c5922fbfSRuslan Ermilov.Nm src.conf 13257caf3d6STom Rhodes.Nd "source build options" 133c5922fbfSRuslan Ermilov.Sh DESCRIPTION 134c5922fbfSRuslan ErmilovThe 135c5922fbfSRuslan Ermilov.Nm 136c5922fbfSRuslan Ermilovfile contains settings that will apply to every build involving the 137c5922fbfSRuslan Ermilov.Fx 138c5922fbfSRuslan Ermilovsource tree; see 139c5922fbfSRuslan Ermilov.Xr build 7 . 140c5922fbfSRuslan Ermilov.Pp 141c5922fbfSRuslan ErmilovThe 142c5922fbfSRuslan Ermilov.Nm 143c5922fbfSRuslan Ermilovfile uses the standard makefile syntax. 144c5922fbfSRuslan ErmilovHowever, 145c5922fbfSRuslan Ermilov.Nm 146c5922fbfSRuslan Ermilovshould not specify any dependencies to 147c5922fbfSRuslan Ermilov.Xr make 1 . 148c5922fbfSRuslan ErmilovInstead, 149c5922fbfSRuslan Ermilov.Nm 150c5922fbfSRuslan Ermilovis to set 151c5922fbfSRuslan Ermilov.Xr make 1 152c5922fbfSRuslan Ermilovvariables that control the aspects of how the system builds. 153c5922fbfSRuslan Ermilov.Pp 154c5922fbfSRuslan ErmilovThe default location of 155c5922fbfSRuslan Ermilov.Nm 156c5922fbfSRuslan Ermilovis 157c5922fbfSRuslan Ermilov.Pa /etc/src.conf , 158c5922fbfSRuslan Ermilovthough an alternative location can be specified in the 159c5922fbfSRuslan Ermilov.Xr make 1 160c5922fbfSRuslan Ermilovvariable 161c5922fbfSRuslan Ermilov.Va SRCCONF . 162c5922fbfSRuslan ErmilovOverriding the location of 163c5922fbfSRuslan Ermilov.Nm 164c5922fbfSRuslan Ermilovmay be necessary if the system-wide settings are not suitable 165c5922fbfSRuslan Ermilovfor a particular build. 166c5922fbfSRuslan ErmilovFor instance, setting 167c5922fbfSRuslan Ermilov.Va SRCCONF 168c5922fbfSRuslan Ermilovto 169c5922fbfSRuslan Ermilov.Pa /dev/null 170c5922fbfSRuslan Ermiloveffectively resets all build controls to their defaults. 171c5922fbfSRuslan Ermilov.Pp 172c5922fbfSRuslan ErmilovThe only purpose of 173c5922fbfSRuslan Ermilov.Nm 174c5922fbfSRuslan Ermilovis to control the compilation of the 175c5922fbfSRuslan Ermilov.Fx 17657caf3d6STom Rhodessource code, which is usually located in 177c5922fbfSRuslan Ermilov.Pa /usr/src . 178c5922fbfSRuslan ErmilovAs a rule, the system administrator creates 179c5922fbfSRuslan Ermilov.Nm 180c5922fbfSRuslan Ermilovwhen the values of certain control variables need to be changed 181c5922fbfSRuslan Ermilovfrom their defaults. 182c5922fbfSRuslan Ermilov.Pp 183c5922fbfSRuslan ErmilovIn addition, control variables can be specified 184c5922fbfSRuslan Ermilovfor a particular build via the 185c5922fbfSRuslan Ermilov.Fl D 186c5922fbfSRuslan Ermilovoption of 187c5922fbfSRuslan Ermilov.Xr make 1 1883d919b75SMike Makonnenor in its environment; see 189c5922fbfSRuslan Ermilov.Xr environ 7 . 190c5922fbfSRuslan Ermilov.Pp 191*ca045714SBryan DreweryThe environment of 192*ca045714SBryan Drewery.Xr make 1 193*ca045714SBryan Dreweryfor the build can be controlled via the 194*ca045714SBryan Drewery.Va SRC_ENV_CONF 195*ca045714SBryan Dreweryvariable, which defaults to 196*ca045714SBryan Drewery.Pa /etc/src-env.conf . 197*ca045714SBryan DrewerySome examples that may only be set in this file are 198*ca045714SBryan Drewery.Va MAKEOBJDIRPREFIX , 199*ca045714SBryan Dreweryand 200*ca045714SBryan Drewery.Va WITH_META_MODE 201*ca045714SBryan Dreweryas they are environment-only variables. 202*ca045714SBryan Drewery.Pp 20307b7d7fbSTom RhodesThe values of variables are ignored regardless of their setting; 20457caf3d6STom Rhodeseven if they would be set to 205c5922fbfSRuslan Ermilov.Dq Li FALSE 206c5922fbfSRuslan Ermilovor 20757caf3d6STom Rhodes.Dq Li NO . 20857caf3d6STom RhodesJust the existence of an option will cause 20957caf3d6STom Rhodesit to be honoured by 21057caf3d6STom Rhodes.Xr make 1 . 211c5922fbfSRuslan Ermilov.Pp 212c5922fbfSRuslan ErmilovThe following list provides a name and short description for variables 213c5922fbfSRuslan Ermilovthat can be used for source builds. 214c5922fbfSRuslan Ermilov.Bl -tag -width indent 215c5922fbfSRuslan ErmilovEOF 2162701a1b7SRuslan Ermilov show settings SRCCONF=/dev/null | sort > $t/config_default 217f506e293SEd Maste # Work around WITH_LDNS_UTILS forcing BIND_UTILS off by parsing the 218f506e293SEd Maste # actual config that results from enabling every WITH_ option. This 219f506e293SEd Maste # can be reverted if/when we no longer have options that disable 220f506e293SEd Maste # others. 221f506e293SEd Maste show with SRCCONF=/dev/null | sort | sed 's/$/=/' > $t/src.conf 222f506e293SEd Maste show settings SRCCONF=$t/src.conf | sort > $t/config_WITH_ALL 2232701a1b7SRuslan Ermilov show without SRCCONF=/dev/null | sort > $t/config_WITHOUT_ALL 2242701a1b7SRuslan Ermilov 2252701a1b7SRuslan Ermilov show_options | 2262701a1b7SRuslan Ermilov while read opt targets ; do 2272701a1b7SRuslan Ermilov if [ ! -f ${opt} ] ; then 2282701a1b7SRuslan Ermilov echo "no description found for ${opt}, skipping" >&2 229c3b08cc6SYaroslav Tykhiy continue 230cae68befSRuslan Ermilov fi 231cae68befSRuslan Ermilov 2322701a1b7SRuslan Ermilov echo ".It Va ${opt}" 2332701a1b7SRuslan Ermilov sed -e's/\$\(FreeBSD: .*\) \$/from \1/' ${opt} 2342701a1b7SRuslan Ermilov if [ -n "${targets}" ] ; then 2352701a1b7SRuslan Ermilov echo '.Pp' 2362701a1b7SRuslan Ermilov echo 'It is a default setting on' 2372701a1b7SRuslan Ermilov echo $(echo ${targets} | sed -e's/ /, /g' -e's/\(.*\), /\1 and /'). 238c5922fbfSRuslan Ermilov fi 2392701a1b7SRuslan Ermilov 240cae68befSRuslan Ermilov if [ "${opt%%_*}" = 'WITHOUT' ] ; then 2412701a1b7SRuslan Ermilov sed -n "/^WITH_${opt#WITHOUT_}$/!s/$/=/p" $t/config_WITH_ALL > $t/src.conf 2422701a1b7SRuslan Ermilov show settings SRCCONF=$t/src.conf -D${opt} | sort > $t/config_WITH_ALL_${opt} 2432701a1b7SRuslan Ermilov comm -13 $t/config_WITH_ALL $t/config_WITH_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps 244cae68befSRuslan Ermilov elif [ "${opt%%_*}" = 'WITH' ] ; then 2452701a1b7SRuslan Ermilov sed -n "/^WITHOUT${opt#WITH}$/!s/$/=/p" $t/config_WITHOUT_ALL > $t/src.conf 2462701a1b7SRuslan Ermilov show settings SRCCONF=$t/src.conf -D${opt} | sort > $t/config_WITHOUT_ALL_${opt} 2472701a1b7SRuslan Ermilov comm -13 $t/config_WITHOUT_ALL $t/config_WITHOUT_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps 2482701a1b7SRuslan Ermilov else 2492701a1b7SRuslan Ermilov echo 'internal error' >&2 2502701a1b7SRuslan Ermilov exit 1 2512701a1b7SRuslan Ermilov fi 2522701a1b7SRuslan Ermilov 253f506e293SEd Maste show settings SRCCONF=/dev/null -D${opt} | sort > $t/config_${opt} 254f506e293SEd Maste comm -13 $t/config_default $t/config_${opt} | sed -n "/^${opt}$/!p" | 255f506e293SEd Maste comm -13 $t/deps - > $t/deps2 256f506e293SEd Maste 257f506e293SEd Maste # Work around BIND_UTILS=no being the default when every WITH_ 258f506e293SEd Maste # option is enabled. 259e60c420fSEd Maste if [ "$(cat $t/deps2)" = WITHOUT_BIND_UTILS ]; then 260f506e293SEd Maste sort $t/deps $t/deps2 > $t/_deps 261f506e293SEd Maste mv $t/_deps $t/deps 262f506e293SEd Maste :> $t/deps2 263f506e293SEd Maste fi 264f506e293SEd Maste 2652701a1b7SRuslan Ermilov if [ -s $t/deps ] ; then 2662701a1b7SRuslan Ermilov echo 'When set, it also enforces the following options:' 2672701a1b7SRuslan Ermilov echo '.Pp' 2682701a1b7SRuslan Ermilov echo '.Bl -item -compact' 2692701a1b7SRuslan Ermilov cat $t/deps | while read opt2 ; do 2702701a1b7SRuslan Ermilov echo '.It' 2712701a1b7SRuslan Ermilov echo ".Va ${opt2}" 272c5922fbfSRuslan Ermilov done 2732701a1b7SRuslan Ermilov echo '.El' 2742701a1b7SRuslan Ermilov fi 2752701a1b7SRuslan Ermilov 2762701a1b7SRuslan Ermilov if [ -s $t/deps2 ] ; then 2772701a1b7SRuslan Ermilov if [ -s $t/deps ] ; then 2782701a1b7SRuslan Ermilov echo '.Pp' 2792701a1b7SRuslan Ermilov fi 2802701a1b7SRuslan Ermilov echo 'When set, the following options are also in effect:' 2812701a1b7SRuslan Ermilov echo '.Pp' 2822701a1b7SRuslan Ermilov echo '.Bl -inset -compact' 2832701a1b7SRuslan Ermilov cat $t/deps2 | while read opt2 ; do 2842701a1b7SRuslan Ermilov echo ".It Va ${opt2}" 2852701a1b7SRuslan Ermilov noopt=$(echo ${opt2} | sed -e's/WITH_/WITHOUT_/;t' -e's/WITHOUT_/WITH_/') 2862701a1b7SRuslan Ermilov echo '(unless' 2872701a1b7SRuslan Ermilov echo ".Va ${noopt}" 2882701a1b7SRuslan Ermilov echo 'is set explicitly)' 2892701a1b7SRuslan Ermilov done 2902701a1b7SRuslan Ermilov echo '.El' 291c5922fbfSRuslan Ermilov fi 292e6a714e7SRuslan Ermilov twiddle >&2 293c5922fbfSRuslan Ermilov done 294c5922fbfSRuslan Ermilov cat <<EOF 295c5922fbfSRuslan Ermilov.El 296c5922fbfSRuslan Ermilov.Sh FILES 297691b39b5SGlen Barber.Bl -tag -compact -width Pa 298c5922fbfSRuslan Ermilov.It Pa /etc/src.conf 299*ca045714SBryan Drewery.It Pa /etc/src-env.conf 300c5922fbfSRuslan Ermilov.It Pa /usr/share/mk/bsd.own.mk 301c5922fbfSRuslan Ermilov.El 302c5922fbfSRuslan Ermilov.Sh SEE ALSO 303c5922fbfSRuslan Ermilov.Xr make 1 , 304c5922fbfSRuslan Ermilov.Xr make.conf 5 , 305c5922fbfSRuslan Ermilov.Xr build 7 , 306c5922fbfSRuslan Ermilov.Xr ports 7 307c5922fbfSRuslan Ermilov.Sh HISTORY 308c5922fbfSRuslan ErmilovThe 309c5922fbfSRuslan Ermilov.Nm 310c5922fbfSRuslan Ermilovfile appeared in 311c5922fbfSRuslan Ermilov.Fx 7.0 . 312c5922fbfSRuslan Ermilov.Sh AUTHORS 313c5922fbfSRuslan ErmilovThis manual page was autogenerated. 314c5922fbfSRuslan ErmilovEOF 315c5922fbfSRuslan Ermilov} 316c5922fbfSRuslan Ermilov 317e6a714e7SRuslan Ermilovtwiddle_pos=0 318e6a714e7SRuslan Ermilovtwiddle() 319e6a714e7SRuslan Ermilov{ 320e6a714e7SRuslan Ermilov local c0='|' c1='/' c2='-' c3='\' 321e6a714e7SRuslan Ermilov 322e6a714e7SRuslan Ermilov eval printf '%c\\b' '$c'${twiddle_pos} 323e6a714e7SRuslan Ermilov twiddle_pos=$(((twiddle_pos+1)%4)) 324e6a714e7SRuslan Ermilov} 325e6a714e7SRuslan Ermilov 326c5922fbfSRuslan Ermilovmain 327