1c5922fbfSRuslan Ermilov#!/bin/sh 2c5922fbfSRuslan Ermilov# 3c5922fbfSRuslan Ermilov# This file is in the public domain. 4c5922fbfSRuslan Ermilov 52701a1b7SRuslan Ermilovset -o errexit 6f1f871e1SHajimu UMEMOTOexport LC_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 36*b7f38e69SEd Maste prev_opt= 373dfad7c7SBryan Drewery env -i ${make} showconfig \ 38317c99b7SBryan Drewery SRC_ENV_CONF=/dev/null SRCCONF=/dev/null \ 39317c99b7SBryan Drewery __MAKE_CONF=/dev/null \ 402701a1b7SRuslan Ermilov TARGET_ARCH=${target#*/} TARGET=${target%/*} | 412701a1b7SRuslan Ermilov while read var _ val ; do 422701a1b7SRuslan Ermilov opt=${var#MK_} 43*b7f38e69SEd Maste if [ $opt = "$prev_opt" ]; then 44*b7f38e69SEd Maste echo "$target: ignoring duplicate option $opt" >&2 45*b7f38e69SEd Maste continue 46*b7f38e69SEd Maste fi 47*b7f38e69SEd Maste prev_opt=$opt 482701a1b7SRuslan Ermilov case ${val} in 492701a1b7SRuslan Ermilov yes) 502701a1b7SRuslan Ermilov echo ${opt} ${target} 512701a1b7SRuslan Ermilov ;; 522701a1b7SRuslan Ermilov no) 532701a1b7SRuslan Ermilov echo ${opt} 542701a1b7SRuslan Ermilov ;; 552701a1b7SRuslan Ermilov *) 56cc2520d2SSimon J. Gerraty echo "make showconfig broken: ${var} ${_} ${val} (not yes or no)" >&2 572701a1b7SRuslan Ermilov exit 1 582701a1b7SRuslan Ermilov ;; 592701a1b7SRuslan Ermilov esac 602701a1b7SRuslan Ermilov done > $t/settings.target 612701a1b7SRuslan Ermilov if [ -r $t/settings ] ; then 622701a1b7SRuslan Ermilov join -t\ $t/settings $t/settings.target > $t/settings.new 632701a1b7SRuslan Ermilov mv $t/settings.new $t/settings 642701a1b7SRuslan Ermilov else 652701a1b7SRuslan Ermilov mv $t/settings.target $t/settings 662701a1b7SRuslan Ermilov fi 672701a1b7SRuslan Ermilov done 682701a1b7SRuslan Ermilov 694078537cSBryan Drewery while read opt targets ; do 702701a1b7SRuslan Ermilov if [ "${targets}" = "${ALL_TARGETS}" ] ; then 712701a1b7SRuslan Ermilov echo "WITHOUT_${opt}" 722701a1b7SRuslan Ermilov elif [ -z "${targets}" ] ; then 732701a1b7SRuslan Ermilov echo "WITH_${opt}" 742701a1b7SRuslan Ermilov else 752701a1b7SRuslan Ermilov echo "WITHOUT_${opt}" $(no_targets "${ALL_TARGETS}" "${targets}") 762701a1b7SRuslan Ermilov echo "WITH_${opt} ${targets}" 772701a1b7SRuslan Ermilov fi 784078537cSBryan Drewery done < $t/settings 792701a1b7SRuslan Ermilov} 802701a1b7SRuslan Ermilov 812701a1b7SRuslan Ermilov# 822701a1b7SRuslan Ermilov# usage: show { settings | with | without } ... 83c5922fbfSRuslan Ermilov# 84c5922fbfSRuslan Ermilovshow() 85c5922fbfSRuslan Ermilov{ 86c5922fbfSRuslan Ermilov 87c5922fbfSRuslan Ermilov mode=$1 ; shift 88c5922fbfSRuslan Ermilov case ${mode} in 89c5922fbfSRuslan Ermilov settings) 90c5922fbfSRuslan Ermilov yes_prefix=WITH 91c5922fbfSRuslan Ermilov no_prefix=WITHOUT 92c5922fbfSRuslan Ermilov ;; 932701a1b7SRuslan Ermilov with) 942701a1b7SRuslan Ermilov yes_prefix=WITH 95c5922fbfSRuslan Ermilov no_prefix=WITH 96c5922fbfSRuslan Ermilov ;; 972701a1b7SRuslan Ermilov without) 982701a1b7SRuslan Ermilov yes_prefix=WITHOUT 992701a1b7SRuslan Ermilov no_prefix=WITHOUT 1002701a1b7SRuslan Ermilov ;; 101c5922fbfSRuslan Ermilov *) 1022701a1b7SRuslan Ermilov echo 'internal error' >&2 103c5922fbfSRuslan Ermilov exit 1 104c5922fbfSRuslan Ermilov ;; 105c5922fbfSRuslan Ermilov esac 1063dfad7c7SBryan Drewery env -i ${make} .MAKE.MODE=normal "$@" showconfig __MAKE_CONF=/dev/null \ 107317c99b7SBryan Drewery SRCCONF=/dev/null | 108c5922fbfSRuslan Ermilov while read var _ val ; do 109c5922fbfSRuslan Ermilov opt=${var#MK_} 110c5922fbfSRuslan Ermilov case ${val} in 111c5922fbfSRuslan Ermilov yes) 112c5922fbfSRuslan Ermilov echo ${yes_prefix}_${opt} 113c5922fbfSRuslan Ermilov ;; 114c5922fbfSRuslan Ermilov no) 115c5922fbfSRuslan Ermilov echo ${no_prefix}_${opt} 116c5922fbfSRuslan Ermilov ;; 117c5922fbfSRuslan Ermilov *) 118cc2520d2SSimon J. Gerraty echo "make showconfig broken: ${var} ${_} ${val} (not yes or no)" >&2 119c5922fbfSRuslan Ermilov exit 1 120c5922fbfSRuslan Ermilov ;; 121c5922fbfSRuslan Ermilov esac 122c5922fbfSRuslan Ermilov done 123c5922fbfSRuslan Ermilov} 124c5922fbfSRuslan Ermilov 125c5922fbfSRuslan Ermilovmain() 126c5922fbfSRuslan Ermilov{ 127c5922fbfSRuslan Ermilov 128c5922fbfSRuslan Ermilov ident=${ident#$} 129c5922fbfSRuslan Ermilov ident=${ident% $} 13041c8ddc3SRuslan Ermilov fbsdid='$'FreeBSD'$' 131c5922fbfSRuslan Ermilov cat <<EOF 132c5922fbfSRuslan Ermilov.\" DO NOT EDIT-- this file is automatically generated. 133c5922fbfSRuslan Ermilov.\" from ${ident} 134c5922fbfSRuslan Ermilov.\" ${fbsdid} 1352701a1b7SRuslan Ermilov.Dd $(echo $(LC_TIME=C date +'%B %e, %Y')) 136c5922fbfSRuslan Ermilov.Dt SRC.CONF 5 137c5922fbfSRuslan Ermilov.Os 138c5922fbfSRuslan Ermilov.Sh NAME 139c5922fbfSRuslan Ermilov.Nm src.conf 14057caf3d6STom Rhodes.Nd "source build options" 141c5922fbfSRuslan Ermilov.Sh DESCRIPTION 142c5922fbfSRuslan ErmilovThe 143c5922fbfSRuslan Ermilov.Nm 144c5922fbfSRuslan Ermilovfile contains settings that will apply to every build involving the 145c5922fbfSRuslan Ermilov.Fx 146c5922fbfSRuslan Ermilovsource tree; see 147c5922fbfSRuslan Ermilov.Xr build 7 . 148c5922fbfSRuslan Ermilov.Pp 149c5922fbfSRuslan ErmilovThe 150c5922fbfSRuslan Ermilov.Nm 151c5922fbfSRuslan Ermilovfile uses the standard makefile syntax. 152c5922fbfSRuslan ErmilovHowever, 153c5922fbfSRuslan Ermilov.Nm 154c5922fbfSRuslan Ermilovshould not specify any dependencies to 155c5922fbfSRuslan Ermilov.Xr make 1 . 156c5922fbfSRuslan ErmilovInstead, 157c5922fbfSRuslan Ermilov.Nm 158c5922fbfSRuslan Ermilovis to set 159c5922fbfSRuslan Ermilov.Xr make 1 160c5922fbfSRuslan Ermilovvariables that control the aspects of how the system builds. 161c5922fbfSRuslan Ermilov.Pp 162c5922fbfSRuslan ErmilovThe default location of 163c5922fbfSRuslan Ermilov.Nm 164c5922fbfSRuslan Ermilovis 165c5922fbfSRuslan Ermilov.Pa /etc/src.conf , 166c5922fbfSRuslan Ermilovthough an alternative location can be specified in the 167c5922fbfSRuslan Ermilov.Xr make 1 168c5922fbfSRuslan Ermilovvariable 169c5922fbfSRuslan Ermilov.Va SRCCONF . 170c5922fbfSRuslan ErmilovOverriding the location of 171c5922fbfSRuslan Ermilov.Nm 172c5922fbfSRuslan Ermilovmay be necessary if the system-wide settings are not suitable 173c5922fbfSRuslan Ermilovfor a particular build. 174c5922fbfSRuslan ErmilovFor instance, setting 175c5922fbfSRuslan Ermilov.Va SRCCONF 176c5922fbfSRuslan Ermilovto 177c5922fbfSRuslan Ermilov.Pa /dev/null 178c5922fbfSRuslan Ermiloveffectively resets all build controls to their defaults. 179c5922fbfSRuslan Ermilov.Pp 180c5922fbfSRuslan ErmilovThe only purpose of 181c5922fbfSRuslan Ermilov.Nm 182c5922fbfSRuslan Ermilovis to control the compilation of the 183c5922fbfSRuslan Ermilov.Fx 18457caf3d6STom Rhodessource code, which is usually located in 185c5922fbfSRuslan Ermilov.Pa /usr/src . 186c5922fbfSRuslan ErmilovAs a rule, the system administrator creates 187c5922fbfSRuslan Ermilov.Nm 188c5922fbfSRuslan Ermilovwhen the values of certain control variables need to be changed 189c5922fbfSRuslan Ermilovfrom their defaults. 190c5922fbfSRuslan Ermilov.Pp 191c5922fbfSRuslan ErmilovIn addition, control variables can be specified 192c5922fbfSRuslan Ermilovfor a particular build via the 193c5922fbfSRuslan Ermilov.Fl D 194c5922fbfSRuslan Ermilovoption of 195c5922fbfSRuslan Ermilov.Xr make 1 1963d919b75SMike Makonnenor in its environment; see 197c5922fbfSRuslan Ermilov.Xr environ 7 . 198c5922fbfSRuslan Ermilov.Pp 199ca045714SBryan DreweryThe environment of 200ca045714SBryan Drewery.Xr make 1 201ca045714SBryan Dreweryfor the build can be controlled via the 202ca045714SBryan Drewery.Va SRC_ENV_CONF 203ca045714SBryan Dreweryvariable, which defaults to 204ca045714SBryan Drewery.Pa /etc/src-env.conf . 205ca045714SBryan DrewerySome examples that may only be set in this file are 20632b5dc9aSSimon J. Gerraty.Va WITH_DIRDEPS_BUILD , 207ca045714SBryan Dreweryand 208ca045714SBryan Drewery.Va WITH_META_MODE 209ca045714SBryan Dreweryas they are environment-only variables. 2105d111a97SBryan DreweryNote that 2115d111a97SBryan Drewery.Va MAKEOBJDIRPREFIX 2125d111a97SBryan Drewerymay be set here only when using 2135d111a97SBryan Drewery.Va WITH_DIRDEPS_BUILD . 214ca045714SBryan Drewery.Pp 21507b7d7fbSTom RhodesThe values of variables are ignored regardless of their setting; 21657caf3d6STom Rhodeseven if they would be set to 217c5922fbfSRuslan Ermilov.Dq Li FALSE 218c5922fbfSRuslan Ermilovor 21957caf3d6STom Rhodes.Dq Li NO . 22057caf3d6STom RhodesJust the existence of an option will cause 22157caf3d6STom Rhodesit to be honoured by 22257caf3d6STom Rhodes.Xr make 1 . 223c5922fbfSRuslan Ermilov.Pp 224c5922fbfSRuslan ErmilovThe following list provides a name and short description for variables 225c5922fbfSRuslan Ermilovthat can be used for source builds. 226c5922fbfSRuslan Ermilov.Bl -tag -width indent 227c5922fbfSRuslan ErmilovEOF 228317c99b7SBryan Drewery show settings SRC_ENV_CONF=/dev/null | sort > $t/config_default 229f506e293SEd Maste # Work around WITH_LDNS_UTILS forcing BIND_UTILS off by parsing the 230f506e293SEd Maste # actual config that results from enabling every WITH_ option. This 231f506e293SEd Maste # can be reverted if/when we no longer have options that disable 232f506e293SEd Maste # others. 233317c99b7SBryan Drewery show with SRC_ENV_CONF=/dev/null | sort | sed 's/$/=/' > $t/src.conf 234317c99b7SBryan Drewery show settings SRC_ENV_CONF=$t/src.conf | sort > $t/config_WITH_ALL 235317c99b7SBryan Drewery show without SRC_ENV_CONF=/dev/null | sort > $t/config_WITHOUT_ALL 236da6e996dSBryan Drewery env_only_options="$(${make} -V __ENV_ONLY_OPTIONS)" 2372701a1b7SRuslan Ermilov 2382701a1b7SRuslan Ermilov show_options | 2392701a1b7SRuslan Ermilov while read opt targets ; do 2402701a1b7SRuslan Ermilov if [ ! -f ${opt} ] ; then 2412701a1b7SRuslan Ermilov echo "no description found for ${opt}, skipping" >&2 242c3b08cc6SYaroslav Tykhiy continue 243cae68befSRuslan Ermilov fi 244cae68befSRuslan Ermilov 2452701a1b7SRuslan Ermilov echo ".It Va ${opt}" 2462701a1b7SRuslan Ermilov sed -e's/\$\(FreeBSD: .*\) \$/from \1/' ${opt} 2472701a1b7SRuslan Ermilov if [ -n "${targets}" ] ; then 2482701a1b7SRuslan Ermilov echo '.Pp' 2492701a1b7SRuslan Ermilov echo 'It is a default setting on' 2502701a1b7SRuslan Ermilov echo $(echo ${targets} | sed -e's/ /, /g' -e's/\(.*\), /\1 and /'). 251c5922fbfSRuslan Ermilov fi 2522701a1b7SRuslan Ermilov 253cae68befSRuslan Ermilov if [ "${opt%%_*}" = 'WITHOUT' ] ; then 2542701a1b7SRuslan Ermilov sed -n "/^WITH_${opt#WITHOUT_}$/!s/$/=/p" $t/config_WITH_ALL > $t/src.conf 255317c99b7SBryan Drewery show settings SRC_ENV_CONF=$t/src.conf -D${opt} | sort > $t/config_WITH_ALL_${opt} 2562701a1b7SRuslan Ermilov comm -13 $t/config_WITH_ALL $t/config_WITH_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps 257cae68befSRuslan Ermilov elif [ "${opt%%_*}" = 'WITH' ] ; then 2582701a1b7SRuslan Ermilov sed -n "/^WITHOUT${opt#WITH}$/!s/$/=/p" $t/config_WITHOUT_ALL > $t/src.conf 259317c99b7SBryan Drewery show settings SRC_ENV_CONF=$t/src.conf -D${opt} | sort > $t/config_WITHOUT_ALL_${opt} 2602701a1b7SRuslan Ermilov comm -13 $t/config_WITHOUT_ALL $t/config_WITHOUT_ALL_${opt} | sed -n "/^${opt}$/!p" > $t/deps 2612701a1b7SRuslan Ermilov else 2622701a1b7SRuslan Ermilov echo 'internal error' >&2 2632701a1b7SRuslan Ermilov exit 1 2642701a1b7SRuslan Ermilov fi 2652701a1b7SRuslan Ermilov 266317c99b7SBryan Drewery show settings SRC_ENV_CONF=/dev/null -D${opt} | sort > $t/config_${opt} 267f506e293SEd Maste comm -13 $t/config_default $t/config_${opt} | sed -n "/^${opt}$/!p" | 268f506e293SEd Maste comm -13 $t/deps - > $t/deps2 269f506e293SEd Maste 270f506e293SEd Maste # Work around BIND_UTILS=no being the default when every WITH_ 271f506e293SEd Maste # option is enabled. 272e60c420fSEd Maste if [ "$(cat $t/deps2)" = WITHOUT_BIND_UTILS ]; then 273f506e293SEd Maste sort $t/deps $t/deps2 > $t/_deps 274f506e293SEd Maste mv $t/_deps $t/deps 275f506e293SEd Maste :> $t/deps2 276f506e293SEd Maste fi 277f506e293SEd Maste 2784078537cSBryan Drewery havedeps=0 2792701a1b7SRuslan Ermilov if [ -s $t/deps ] ; then 2804078537cSBryan Drewery havedeps=1 2812701a1b7SRuslan Ermilov echo 'When set, it also enforces the following options:' 2822701a1b7SRuslan Ermilov echo '.Pp' 2832701a1b7SRuslan Ermilov echo '.Bl -item -compact' 2844078537cSBryan Drewery while read opt2 ; do 2852701a1b7SRuslan Ermilov echo '.It' 2862701a1b7SRuslan Ermilov echo ".Va ${opt2}" 2874078537cSBryan Drewery done < $t/deps 2882701a1b7SRuslan Ermilov echo '.El' 2892701a1b7SRuslan Ermilov fi 2902701a1b7SRuslan Ermilov 2912701a1b7SRuslan Ermilov if [ -s $t/deps2 ] ; then 2924078537cSBryan Drewery if [ ${havedeps} -eq 1 ] ; then 2932701a1b7SRuslan Ermilov echo '.Pp' 2942701a1b7SRuslan Ermilov fi 2952701a1b7SRuslan Ermilov echo 'When set, the following options are also in effect:' 2962701a1b7SRuslan Ermilov echo '.Pp' 2972701a1b7SRuslan Ermilov echo '.Bl -inset -compact' 2984078537cSBryan Drewery while read opt2 ; do 2992701a1b7SRuslan Ermilov echo ".It Va ${opt2}" 3002701a1b7SRuslan Ermilov noopt=$(echo ${opt2} | sed -e's/WITH_/WITHOUT_/;t' -e's/WITHOUT_/WITH_/') 3012701a1b7SRuslan Ermilov echo '(unless' 3022701a1b7SRuslan Ermilov echo ".Va ${noopt}" 3032701a1b7SRuslan Ermilov echo 'is set explicitly)' 3044078537cSBryan Drewery done < $t/deps2 3052701a1b7SRuslan Ermilov echo '.El' 306c5922fbfSRuslan Ermilov fi 307da6e996dSBryan Drewery 308da6e996dSBryan Drewery case " ${env_only_options} " in 309da6e996dSBryan Drewery *\ ${opt#*_}\ *) 310da6e996dSBryan Drewery echo ".Pp" 311317c99b7SBryan Drewery echo "This must be set in the environment, make command line, or" 312da6e996dSBryan Drewery echo ".Pa /etc/src-env.conf ," 313da6e996dSBryan Drewery echo "not" 314da6e996dSBryan Drewery echo ".Pa /etc/src.conf ." 315da6e996dSBryan Drewery ;; 316da6e996dSBryan Drewery esac 317da6e996dSBryan Drewery 318e6a714e7SRuslan Ermilov twiddle >&2 319c5922fbfSRuslan Ermilov done 320c5922fbfSRuslan Ermilov cat <<EOF 321c5922fbfSRuslan Ermilov.El 322c5922fbfSRuslan Ermilov.Sh FILES 323691b39b5SGlen Barber.Bl -tag -compact -width Pa 324c5922fbfSRuslan Ermilov.It Pa /etc/src.conf 325ca045714SBryan Drewery.It Pa /etc/src-env.conf 326c5922fbfSRuslan Ermilov.It Pa /usr/share/mk/bsd.own.mk 327c5922fbfSRuslan Ermilov.El 328c5922fbfSRuslan Ermilov.Sh SEE ALSO 329c5922fbfSRuslan Ermilov.Xr make 1 , 330c5922fbfSRuslan Ermilov.Xr make.conf 5 , 331c5922fbfSRuslan Ermilov.Xr build 7 , 332c5922fbfSRuslan Ermilov.Xr ports 7 333c5922fbfSRuslan Ermilov.Sh HISTORY 334c5922fbfSRuslan ErmilovThe 335c5922fbfSRuslan Ermilov.Nm 336c5922fbfSRuslan Ermilovfile appeared in 337c5922fbfSRuslan Ermilov.Fx 7.0 . 338c5922fbfSRuslan Ermilov.Sh AUTHORS 339c5922fbfSRuslan ErmilovThis manual page was autogenerated. 340c5922fbfSRuslan ErmilovEOF 341c5922fbfSRuslan Ermilov} 342c5922fbfSRuslan Ermilov 343e6a714e7SRuslan Ermilovtwiddle_pos=0 344e6a714e7SRuslan Ermilovtwiddle() 345e6a714e7SRuslan Ermilov{ 346e6a714e7SRuslan Ermilov local c0='|' c1='/' c2='-' c3='\' 347e6a714e7SRuslan Ermilov 348e6a714e7SRuslan Ermilov eval printf '%c\\b' '$c'${twiddle_pos} 349e6a714e7SRuslan Ermilov twiddle_pos=$(((twiddle_pos+1)%4)) 350e6a714e7SRuslan Ermilov} 351e6a714e7SRuslan Ermilov 352c5922fbfSRuslan Ermilovmain 353