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