[FFmpeg-devel] [PATCH 1/3] configure: improve pkg-config support

Måns Rullgård mans
Sun Mar 6 17:33:56 CET 2011


Reinhard Tartler <siretart at tauware.de> writes:

> On Sun, Mar 06, 2011 at 14:57:52 (CET), Mans Rullgard wrote:
>
>> 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 at mansr.com>
>> ---
>>  configure |   36 +++++++++++++++++++++++++++++++++++-
>>  1 files changed, 35 insertions(+), 1 deletions(-)
>>
>> diff --git a/configure b/configure
>> index 7cb0410..b58c291 100755
>> --- a/configure
>> +++ b/configure
>> @@ -356,6 +356,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')
>> +}
>> +
>
> I wonder what was the motivation for these two functions. can you please
> give an example for what cases (packages) they are necessary?

Consider the package name gtk+-2.0.

>>  pushvar(){
>>      for var in $*; do
>>          eval level=\${${var}_level:=0}
>> @@ -744,6 +754,20 @@ check_lib2(){
>>      check_func_headers "$headers" $func "$@" && add_extralibs "$@"
>>  }
>>  
>> +check_pkg_config(){
>> +    log check_pkg_config "$@"
>> +    pkg="$1"
>> +    headers="$2"
>> +    func="$3"
>> +    shift 3
>> +    $pkg_config --exists $pkg || return
>> +    pkg_cflags=$($pkg_config --cflags $pkg)
>> +    pkg_libs=$($pkg_config --libs $pkg)
>> +    check_func_headers "$headers" $func $pkg_cflags $pkg_libs "$@" &&
>> +        set_safe ${pkg}_cflags $pkg_cflags   &&
>> +        set_safe ${pkg}_libs   $pkg_libs
>> +}
>> +
>
> I understand your deep distrust in pkg-config, but additionally checking
> for missing headers here just checks for 'correctness' of pkg-config
> files. I think we can and should rely that existing .pc files are not
> broken and if we encouter broken ones, report them to upstreams and
> distros. This additional check feels like overdoing that to me.
>
> Or do I miss some important point here?

I've seen pkg-config fail often enough not to trust it without an extra
check.  Common failure modes include reporting packages on the host
system rather a cross-target and requesting flags incompatible with
non-gcc compilers.  This check will catch both of those.  Otherwise
cross-builds will incorrectly report e.g. SDL as present and fail during
the build, the very situation Stefano sought to avoid.

-- 
M?ns Rullg?rd
mans at mansr.com



More information about the ffmpeg-devel mailing list