Browse code

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>

Mans Rullgard authored on 2011/03/06 22:48:30
Showing 1 changed files
... ...
@@ -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