configure: Improve requesting specific features

Before this patch trying to enable only https by issuing

    --disable-protocols --enable-protocol=https --enable-gnutls

does not enable https, and

    --disable-all --enable-protocols

does not enable libavformat and the protocols component.

Now the default-enabled options are set after the explicitly
disabled/enabled options are evaluated.

If an explicitly enabled option cannot be enabled configure
will fail printing an error message.
This commit is contained in:
Luca Barbato 2016-01-17 07:58:53 +01:00
parent e9175634ec
commit 8e7bea6dc6
1 changed files with 38 additions and 13 deletions

51
configure vendored
View File

@ -487,8 +487,15 @@ enable(){
set_all yes $* set_all yes $*
} }
check_requested() {
for var; do
eval test "x\$${var#!}_requested" = "xyes" && die "${var#*_} ${var/_*} cannot be enabled"
done
}
disable(){ disable(){
set_all no $* set_all no $*
check_requested $*
} }
enable_weak(){ enable_weak(){
@ -514,7 +521,7 @@ disable_safe(){
do_enable_deep(){ do_enable_deep(){
for var; do for var; do
enabled $var && continue enabled $var && continue
eval sel="\$${var}_select" eval sel="\$${var}_select\ \$${var}_select_any"
eval sgs="\$${var}_suggest" eval sgs="\$${var}_suggest"
pushvar var sgs pushvar var sgs
enable_deep $sel enable_deep $sel
@ -539,6 +546,13 @@ enable_deep_weak(){
done done
} }
request(){
for var; do
enable ${var}_requested
done
enable_deep $*
}
enabled(){ enabled(){
test "${1#!}" = "$1" && op== || op=!= test "${1#!}" = "$1" && op== || op=!=
eval test "x\$${1#!}" $op "xyes" eval test "x\$${1#!}" $op "xyes"
@ -598,7 +612,7 @@ do_check_deps(){
append allopts $cfg append allopts $cfg
eval dep_all="\$${cfg}_deps" eval dep_all="\$${cfg}_deps"
eval dep_any="\$${cfg}_deps_any" eval dep_any="\$${cfg}_deps_any\ \$${cfg}_select_any"
eval dep_sel="\$${cfg}_select" eval dep_sel="\$${cfg}_select"
eval dep_sgs="\$${cfg}_suggest" eval dep_sgs="\$${cfg}_suggest"
eval dep_ifa="\$${cfg}_if" eval dep_ifa="\$${cfg}_if"
@ -2328,7 +2342,7 @@ tls_gnutls_protocol_deps="gnutls"
tls_gnutls_protocol_select="tcp_protocol" tls_gnutls_protocol_select="tcp_protocol"
tls_openssl_protocol_deps="openssl !tls_gnutls_protocol" tls_openssl_protocol_deps="openssl !tls_gnutls_protocol"
tls_openssl_protocol_select="tcp_protocol" tls_openssl_protocol_select="tcp_protocol"
tls_protocol_deps_any="tls_gnutls_protocol tls_openssl_protocol" tls_protocol_select_any="tls_gnutls_protocol tls_openssl_protocol"
udp_protocol_select="network" udp_protocol_select="network"
unix_protocol_deps="sys_un_h" unix_protocol_deps="sys_un_h"
unix_protocol_select="network" unix_protocol_select="network"
@ -2529,12 +2543,6 @@ ALL_COMPONENTS="
$PROTOCOL_LIST $PROTOCOL_LIST
" "
for n in $COMPONENT_LIST; do
v=$(toupper ${n%s})_LIST
eval enable \$$v
eval ${n}_if_any="\$$v"
done
enable $ARCH_EXT_LIST enable $ARCH_EXT_LIST
die_unknown(){ die_unknown(){
@ -2597,10 +2605,10 @@ for opt do
disable $PROGRAM_LIST disable $PROGRAM_LIST
;; ;;
--disable-everything) --disable-everything)
map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST map 'eval disable \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
;; ;;
--disable-all) --disable-all)
map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST map 'eval disable \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
disable $LIBRARY_LIST $PROGRAM_LIST doc disable $LIBRARY_LIST $PROGRAM_LIST doc
;; ;;
--enable-random|--disable-random) --enable-random|--disable-random)
@ -2616,6 +2624,7 @@ for opt do
is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt" is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
eval list=\$$(toupper $thing)_LIST eval list=\$$(toupper $thing)_LIST
name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing} name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
test $action = enable && action="request"
$action $(filter "$name" $list) $action $(filter "$name" $list)
;; ;;
--enable-avserver|--disable-avserver*) --enable-avserver|--disable-avserver*)
@ -2625,7 +2634,6 @@ for opt do
--enable-?*|--disable-?*) --enable-?*|--disable-?*)
eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g') eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
if is_in $option $COMPONENT_LIST; then if is_in $option $COMPONENT_LIST; then
test $action = disable && action=unset
eval $action \$$(toupper ${option%s})_LIST eval $action \$$(toupper ${option%s})_LIST
elif is_in $option $CMDLINE_SELECT; then elif is_in $option $CMDLINE_SELECT; then
$action $option $action $option
@ -2666,7 +2674,7 @@ disabled logging && logfile=/dev/null
# is disabled, see AVCODEC_LIST and following _LIST variables. # is disabled, see AVCODEC_LIST and following _LIST variables.
disable_components(){ disable_components(){
disabled ${1} && disable $( disabled ${1} && disable_weak $(
eval components="\$$(toupper ${1})_COMPONENTS" eval components="\$$(toupper ${1})_COMPONENTS"
map 'eval echo \${$(toupper ${v%s})_LIST}' $components map 'eval echo \${$(toupper ${v%s})_LIST}' $components
) )
@ -2674,6 +2682,23 @@ disable_components(){
map 'disable_components $v' $LIBRARY_LIST map 'disable_components $v' $LIBRARY_LIST
# Mark components that had not been enabled/disabled explicitly
# as enabled
for n in $COMPONENT_LIST; do
v=$(toupper ${n%s})_LIST
eval enable_weak \$$v
eval ${n}_if_any="\$$v"
done
# Make so that disabled libraries are enabled if a component
# of them is requested
for n in $LIBRARY_LIST; do
v=$(toupper ${n})_COMPONENTS
eval ${n}_if_any="\$$v"
done
echo "# $0 $LIBAV_CONFIGURATION" > $logfile echo "# $0 $LIBAV_CONFIGURATION" > $logfile
set >> $logfile set >> $logfile