Commit 3f8040db authored by Mans Rullgard's avatar Mans Rullgard

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: 's avatarMans Rullgard <mans@mansr.com>
parent edaf1ae2
...@@ -356,6 +356,16 @@ set_weak(){ ...@@ -356,6 +356,16 @@ set_weak(){
done 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(){ pushvar(){
for var in $*; do for var in $*; do
eval level=\${${var}_level:=0} eval level=\${${var}_level:=0}
...@@ -741,6 +751,20 @@ check_lib2(){ ...@@ -741,6 +751,20 @@ check_lib2(){
check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@" 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_exec(){
check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; } check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
} }
...@@ -822,6 +846,13 @@ require2(){ ...@@ -822,6 +846,13 @@ require2(){
check_lib2 "$headers" $func "$@" || die "ERROR: $name not found" 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(){ check_host_cc(){
log check_host_cc "$@" log check_host_cc "$@"
cat > $TMPC cat > $TMPC
...@@ -1144,6 +1175,7 @@ CMDLINE_SET=" ...@@ -1144,6 +1175,7 @@ CMDLINE_SET="
logfile logfile
malloc_prefix malloc_prefix
nm nm
pkg_config
samples samples
source_path source_path
strip strip
...@@ -1571,6 +1603,7 @@ host_cc_default="gcc" ...@@ -1571,6 +1603,7 @@ host_cc_default="gcc"
ln_s="ln -sf" ln_s="ln -sf"
nm_default="nm" nm_default="nm"
objformat="elf" objformat="elf"
pkg_config_default=pkg-config
ranlib="ranlib" ranlib="ranlib"
strip_default="strip" strip_default="strip"
yasmexe="yasm" yasmexe="yasm"
...@@ -1780,12 +1813,13 @@ set_default arch target_os ...@@ -1780,12 +1813,13 @@ set_default arch target_os
ar_default="${cross_prefix}${ar_default}" ar_default="${cross_prefix}${ar_default}"
cc_default="${cross_prefix}${cc_default}" cc_default="${cross_prefix}${cc_default}"
nm_default="${cross_prefix}${nm_default}" nm_default="${cross_prefix}${nm_default}"
pkg_config_default="${cross_prefix}${pkg_config_default}"
ranlib="${cross_prefix}${ranlib}" ranlib="${cross_prefix}${ranlib}"
strip_default="${cross_prefix}${strip_default}" strip_default="${cross_prefix}${strip_default}"
sysinclude_default="${sysroot}/usr/include" 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 enabled cross_compile || host_cc_default=$cc
set_default host_cc set_default host_cc
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment