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>
... | ... |
@@ -357,6 +357,16 @@ set_weak(){ |
357 | 357 |
done |
358 | 358 |
} |
359 | 359 |
|
360 |
+set_safe(){ |
|
361 |
+ var=$1 |
|
362 |
+ shift |
|
363 |
+ eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*' |
|
364 |
+} |
|
365 |
+ |
|
366 |
+get_safe(){ |
|
367 |
+ eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g') |
|
368 |
+} |
|
369 |
+ |
|
360 | 370 |
pushvar(){ |
361 | 371 |
for var in $*; do |
362 | 372 |
eval level=\${${var}_level:=0} |
... | ... |
@@ -742,6 +752,20 @@ check_lib2(){ |
742 | 742 |
check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@" |
743 | 743 |
} |
744 | 744 |
|
745 |
+check_pkg_config(){ |
|
746 |
+ log check_pkg_config "$@" |
|
747 |
+ pkg="$1" |
|
748 |
+ headers="$2" |
|
749 |
+ funcs="$3" |
|
750 |
+ shift 3 |
|
751 |
+ $pkg_config --exists $pkg || return |
|
752 |
+ pkg_cflags=$($pkg_config --cflags $pkg) |
|
753 |
+ pkg_libs=$($pkg_config --libs $pkg) |
|
754 |
+ check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" && |
|
755 |
+ set_safe ${pkg}_cflags $pkg_cflags && |
|
756 |
+ set_safe ${pkg}_libs $pkg_libs |
|
757 |
+} |
|
758 |
+ |
|
745 | 759 |
check_exec(){ |
746 | 760 |
check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; } |
747 | 761 |
} |
... | ... |
@@ -823,6 +847,13 @@ require2(){ |
823 | 823 |
check_lib2 "$headers" $func "$@" || die "ERROR: $name not found" |
824 | 824 |
} |
825 | 825 |
|
826 |
+require_pkg_config(){ |
|
827 |
+ pkg="$1" |
|
828 |
+ check_pkg_config "$@" || die "ERROR: $pkg not found" |
|
829 |
+ add_cflags $(get_safe ${pkg}_cflags) |
|
830 |
+ add_extralibs $(get_safe ${pkg}_libs) |
|
831 |
+} |
|
832 |
+ |
|
826 | 833 |
check_host_cc(){ |
827 | 834 |
log check_host_cc "$@" |
828 | 835 |
cat > $TMPC |
... | ... |
@@ -1149,6 +1180,7 @@ CMDLINE_SET=" |
1149 | 1149 |
logfile |
1150 | 1150 |
malloc_prefix |
1151 | 1151 |
nm |
1152 |
+ pkg_config |
|
1152 | 1153 |
samples |
1153 | 1154 |
source_path |
1154 | 1155 |
strip |
... | ... |
@@ -1587,6 +1619,7 @@ host_cc_default="gcc" |
1587 | 1587 |
ln_s="ln -sf" |
1588 | 1588 |
nm_default="nm" |
1589 | 1589 |
objformat="elf" |
1590 |
+pkg_config_default=pkg-config |
|
1590 | 1591 |
ranlib="ranlib" |
1591 | 1592 |
strip_default="strip" |
1592 | 1593 |
yasmexe="yasm" |
... | ... |
@@ -1796,12 +1829,13 @@ set_default arch target_os |
1796 | 1796 |
ar_default="${cross_prefix}${ar_default}" |
1797 | 1797 |
cc_default="${cross_prefix}${cc_default}" |
1798 | 1798 |
nm_default="${cross_prefix}${nm_default}" |
1799 |
+pkg_config_default="${cross_prefix}${pkg_config_default}" |
|
1799 | 1800 |
ranlib="${cross_prefix}${ranlib}" |
1800 | 1801 |
strip_default="${cross_prefix}${strip_default}" |
1801 | 1802 |
|
1802 | 1803 |
sysinclude_default="${sysroot}/usr/include" |
1803 | 1804 |
|
1804 |
-set_default cc nm strip sysinclude |
|
1805 |
+set_default cc nm pkg_config strip sysinclude |
|
1805 | 1806 |
enabled cross_compile || host_cc_default=$cc |
1806 | 1807 |
set_default host_cc |
1807 | 1808 |
|