aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMans Rullgard <mans@mansr.com>2011-03-06 13:48:30 +0000
committerMichael Niedermayer <michaelni@gmx.at>2011-03-19 20:06:13 +0100
commit5d117bd4629582e58a84922b74e6446004e4ed4f (patch)
treec434937f5df015b82b9dd0d506878e3abc30be37
parent05aa8c4441c74732d411480ab3e477d602dd7695 (diff)
downloadffmpeg-5d117bd4629582e58a84922b74e6446004e4ed4f.tar.gz
configure: improve pkg-config support
This adds helper functions for checking packages with pkg-config and managing the associated flags. Note that pkg-config use is still discouraged due to widespread poor practices resulting in broken flags in many situations. A few badly designed packages require flags only obtainable using pkg-config, and these functions are intended for those cases. Signed-off-by: Mans Rullgard <mans@mansr.com> (cherry picked from commit 3f8040db3e13c3dbdf07c74d92ca34817a69f733) Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rwxr-xr-xconfigure36
1 files changed, 35 insertions, 1 deletions
diff --git a/configure b/configure
index e633fb4089..a04eea5eea 100755
--- a/configure
+++ b/configure
@@ -357,6 +357,16 @@ set_weak(){
done
}
+set_safe(){
+ var=$1
+ shift
+ eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
+}
+
+get_safe(){
+ eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
+}
+
pushvar(){
for var in $*; do
eval level=\${${var}_level:=0}
@@ -742,6 +752,20 @@ check_lib2(){
check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
}
+check_pkg_config(){
+ log check_pkg_config "$@"
+ pkg="$1"
+ headers="$2"
+ funcs="$3"
+ shift 3
+ $pkg_config --exists $pkg || return
+ pkg_cflags=$($pkg_config --cflags $pkg)
+ pkg_libs=$($pkg_config --libs $pkg)
+ check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
+ set_safe ${pkg}_cflags $pkg_cflags &&
+ set_safe ${pkg}_libs $pkg_libs
+}
+
check_exec(){
check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
}
@@ -823,6 +847,13 @@ require2(){
check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}
+require_pkg_config(){
+ pkg="$1"
+ check_pkg_config "$@" || die "ERROR: $pkg not found"
+ add_cflags $(get_safe ${pkg}_cflags)
+ add_extralibs $(get_safe ${pkg}_libs)
+}
+
check_host_cc(){
log check_host_cc "$@"
cat > $TMPC
@@ -1149,6 +1180,7 @@ CMDLINE_SET="
logfile
malloc_prefix
nm
+ pkg_config
samples
source_path
strip
@@ -1587,6 +1619,7 @@ host_cc_default="gcc"
ln_s="ln -sf"
nm_default="nm"
objformat="elf"
+pkg_config_default=pkg-config
ranlib="ranlib"
strip_default="strip"
yasmexe="yasm"
@@ -1796,12 +1829,13 @@ set_default arch target_os
ar_default="${cross_prefix}${ar_default}"
cc_default="${cross_prefix}${cc_default}"
nm_default="${cross_prefix}${nm_default}"
+pkg_config_default="${cross_prefix}${pkg_config_default}"
ranlib="${cross_prefix}${ranlib}"
strip_default="${cross_prefix}${strip_default}"
sysinclude_default="${sysroot}/usr/include"
-set_default cc nm strip sysinclude
+set_default cc nm pkg_config strip sysinclude
enabled cross_compile || host_cc_default=$cc
set_default host_cc