[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