[FFmpeg-devel] configure: check if dlfcn.h is present for ladspa and frei0r, if not abort early

Submitted by Paul B Mahol on Dec. 2, 2018, 5:51 p.m.

Details

Message ID 20181202175137.2457-1-onemda@gmail.com
State New
Headers show

Commit Message

Paul B Mahol Dec. 2, 2018, 5:51 p.m.
Fixes #4517.

Signed-off-by: Paul B Mahol <onemda@gmail.com>
---
 configure | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

James Almer Dec. 2, 2018, 6:50 p.m.
On 12/2/2018 2:51 PM, Paul B Mahol wrote:
> Fixes #4517.
> 
> Signed-off-by: Paul B Mahol <onemda@gmail.com>
> ---
>  configure | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/configure b/configure
> index 2af6c0d797..7c55274efa 100755
> --- a/configure
> +++ b/configure
> @@ -6065,11 +6065,11 @@ enabled chromaprint       && require chromaprint chromaprint.h chromaprint_get_v
>  enabled decklink          && { require_headers DeckLinkAPI.h &&
>                                 { test_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a090500" || die "ERROR: Decklink API version must be >= 10.9.5."; } }
>  enabled libndi_newtek     && require_headers Processing.NDI.Lib.h
> -enabled frei0r            && require_headers frei0r.h
> +enabled frei0r            && require_headers frei0r.h && require_headers dlfcn.h
>  enabled gmp               && require gmp gmp.h mpz_export -lgmp
>  enabled gnutls            && require_pkg_config gnutls gnutls gnutls/gnutls.h gnutls_global_init
>  enabled jni               && { [ $target_os = "android" ] && check_headers jni.h && enabled pthreads || die "ERROR: jni not found"; }
> -enabled ladspa            && require_headers ladspa.h
> +enabled ladspa            && require_headers ladspa.h && require_headers dlfcn.h
>  enabled libaom            && require_pkg_config libaom "aom >= 1.0.0" aom/aom_codec.h aom_codec_version
>  enabled lv2               && require_pkg_config lv2 lilv-0 "lilv/lilv.h" lilv_world_new
>  enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
> 

Both filters already depend on libdl being present, which also implies
dlfcn.h (The check for libdl uses it). How is that not enough?
Paul B Mahol Dec. 2, 2018, 6:53 p.m.
On 12/2/18, James Almer <jamrial@gmail.com> wrote:
> On 12/2/2018 2:51 PM, Paul B Mahol wrote:
>> Fixes #4517.
>>
>> Signed-off-by: Paul B Mahol <onemda@gmail.com>
>> ---
>>  configure | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/configure b/configure
>> index 2af6c0d797..7c55274efa 100755
>> --- a/configure
>> +++ b/configure
>> @@ -6065,11 +6065,11 @@ enabled chromaprint       && require chromaprint
>> chromaprint.h chromaprint_get_v
>>  enabled decklink          && { require_headers DeckLinkAPI.h &&
>>                                 { test_cpp_condition DeckLinkAPIVersion.h
>> "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a090500" || die "ERROR: Decklink
>> API version must be >= 10.9.5."; } }
>>  enabled libndi_newtek     && require_headers Processing.NDI.Lib.h
>> -enabled frei0r            && require_headers frei0r.h
>> +enabled frei0r            && require_headers frei0r.h && require_headers
>> dlfcn.h
>>  enabled gmp               && require gmp gmp.h mpz_export -lgmp
>>  enabled gnutls            && require_pkg_config gnutls gnutls
>> gnutls/gnutls.h gnutls_global_init
>>  enabled jni               && { [ $target_os = "android" ] &&
>> check_headers jni.h && enabled pthreads || die "ERROR: jni not found"; }
>> -enabled ladspa            && require_headers ladspa.h
>> +enabled ladspa            && require_headers ladspa.h && require_headers
>> dlfcn.h
>>  enabled libaom            && require_pkg_config libaom "aom >= 1.0.0"
>> aom/aom_codec.h aom_codec_version
>>  enabled lv2               && require_pkg_config lv2 lilv-0 "lilv/lilv.h"
>> lilv_world_new
>>  enabled libiec61883       && require libiec61883 libiec61883/iec61883.h
>> iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
>>
>
> Both filters already depend on libdl being present, which also implies
> dlfcn.h (The check for libdl uses it). How is that not enough?

Filters != library support enabled

Please read bug report I linked, it explains it.

In short not having dflcn.h header would pass those options but would
disable filters later.
Proper way is to abort early.
James Almer Dec. 2, 2018, 7:04 p.m.
On 12/2/2018 3:53 PM, Paul B Mahol wrote:
> On 12/2/18, James Almer <jamrial@gmail.com> wrote:
>> On 12/2/2018 2:51 PM, Paul B Mahol wrote:
>>> Fixes #4517.
>>>
>>> Signed-off-by: Paul B Mahol <onemda@gmail.com>
>>> ---
>>>  configure | 4 ++--
>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/configure b/configure
>>> index 2af6c0d797..7c55274efa 100755
>>> --- a/configure
>>> +++ b/configure
>>> @@ -6065,11 +6065,11 @@ enabled chromaprint       && require chromaprint
>>> chromaprint.h chromaprint_get_v
>>>  enabled decklink          && { require_headers DeckLinkAPI.h &&
>>>                                 { test_cpp_condition DeckLinkAPIVersion.h
>>> "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a090500" || die "ERROR: Decklink
>>> API version must be >= 10.9.5."; } }
>>>  enabled libndi_newtek     && require_headers Processing.NDI.Lib.h
>>> -enabled frei0r            && require_headers frei0r.h
>>> +enabled frei0r            && require_headers frei0r.h && require_headers
>>> dlfcn.h
>>>  enabled gmp               && require gmp gmp.h mpz_export -lgmp
>>>  enabled gnutls            && require_pkg_config gnutls gnutls
>>> gnutls/gnutls.h gnutls_global_init
>>>  enabled jni               && { [ $target_os = "android" ] &&
>>> check_headers jni.h && enabled pthreads || die "ERROR: jni not found"; }
>>> -enabled ladspa            && require_headers ladspa.h
>>> +enabled ladspa            && require_headers ladspa.h && require_headers
>>> dlfcn.h
>>>  enabled libaom            && require_pkg_config libaom "aom >= 1.0.0"
>>> aom/aom_codec.h aom_codec_version
>>>  enabled lv2               && require_pkg_config lv2 lilv-0 "lilv/lilv.h"
>>> lilv_world_new
>>>  enabled libiec61883       && require libiec61883 libiec61883/iec61883.h
>>> iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
>>>
>>
>> Both filters already depend on libdl being present, which also implies
>> dlfcn.h (The check for libdl uses it). How is that not enough?
> 
> Filters != library support enabled
> 
> Please read bug report I linked, it explains it.
> 
> In short not having dflcn.h header would pass those options but would
> disable filters later.
> Proper way is to abort early.

Do those libraries need dlfcn.h, or only the filters? If the former,
then the libraries are not meant to depend on the presence of libdl.
Hence the dep being for the filters.

In any case, since both libraries are only used by one filter each, i
guess this is ok. But instead of adding a new require_headers check just
reuse the existing one to check both headers.
Paul B Mahol Dec. 2, 2018, 7:07 p.m.
On 12/2/18, James Almer <jamrial@gmail.com> wrote:
> On 12/2/2018 3:53 PM, Paul B Mahol wrote:
>> On 12/2/18, James Almer <jamrial@gmail.com> wrote:
>>> On 12/2/2018 2:51 PM, Paul B Mahol wrote:
>>>> Fixes #4517.
>>>>
>>>> Signed-off-by: Paul B Mahol <onemda@gmail.com>
>>>> ---
>>>>  configure | 4 ++--
>>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/configure b/configure
>>>> index 2af6c0d797..7c55274efa 100755
>>>> --- a/configure
>>>> +++ b/configure
>>>> @@ -6065,11 +6065,11 @@ enabled chromaprint       && require chromaprint
>>>> chromaprint.h chromaprint_get_v
>>>>  enabled decklink          && { require_headers DeckLinkAPI.h &&
>>>>                                 { test_cpp_condition
>>>> DeckLinkAPIVersion.h
>>>> "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a090500" || die "ERROR: Decklink
>>>> API version must be >= 10.9.5."; } }
>>>>  enabled libndi_newtek     && require_headers Processing.NDI.Lib.h
>>>> -enabled frei0r            && require_headers frei0r.h
>>>> +enabled frei0r            && require_headers frei0r.h &&
>>>> require_headers
>>>> dlfcn.h
>>>>  enabled gmp               && require gmp gmp.h mpz_export -lgmp
>>>>  enabled gnutls            && require_pkg_config gnutls gnutls
>>>> gnutls/gnutls.h gnutls_global_init
>>>>  enabled jni               && { [ $target_os = "android" ] &&
>>>> check_headers jni.h && enabled pthreads || die "ERROR: jni not found"; }
>>>> -enabled ladspa            && require_headers ladspa.h
>>>> +enabled ladspa            && require_headers ladspa.h &&
>>>> require_headers
>>>> dlfcn.h
>>>>  enabled libaom            && require_pkg_config libaom "aom >= 1.0.0"
>>>> aom/aom_codec.h aom_codec_version
>>>>  enabled lv2               && require_pkg_config lv2 lilv-0
>>>> "lilv/lilv.h"
>>>> lilv_world_new
>>>>  enabled libiec61883       && require libiec61883 libiec61883/iec61883.h
>>>> iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
>>>>
>>>
>>> Both filters already depend on libdl being present, which also implies
>>> dlfcn.h (The check for libdl uses it). How is that not enough?
>>
>> Filters != library support enabled
>>
>> Please read bug report I linked, it explains it.
>>
>> In short not having dflcn.h header would pass those options but would
>> disable filters later.
>> Proper way is to abort early.
>
> Do those libraries need dlfcn.h, or only the filters? If the former,
> then the libraries are not meant to depend on the presence of libdl.
> Hence the dep being for the filters.
>
> In any case, since both libraries are only used by one filter each, i
> guess this is ok. But instead of adding a new require_headers check just
> reuse the existing one to check both headers.

How do I do that?
James Almer Dec. 2, 2018, 7:10 p.m.
On 12/2/2018 4:07 PM, Paul B Mahol wrote:
> On 12/2/18, James Almer <jamrial@gmail.com> wrote:
>> On 12/2/2018 3:53 PM, Paul B Mahol wrote:
>>> On 12/2/18, James Almer <jamrial@gmail.com> wrote:
>>>> On 12/2/2018 2:51 PM, Paul B Mahol wrote:
>>>>> Fixes #4517.
>>>>>
>>>>> Signed-off-by: Paul B Mahol <onemda@gmail.com>
>>>>> ---
>>>>>  configure | 4 ++--
>>>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/configure b/configure
>>>>> index 2af6c0d797..7c55274efa 100755
>>>>> --- a/configure
>>>>> +++ b/configure
>>>>> @@ -6065,11 +6065,11 @@ enabled chromaprint       && require chromaprint
>>>>> chromaprint.h chromaprint_get_v
>>>>>  enabled decklink          && { require_headers DeckLinkAPI.h &&
>>>>>                                 { test_cpp_condition
>>>>> DeckLinkAPIVersion.h
>>>>> "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a090500" || die "ERROR: Decklink
>>>>> API version must be >= 10.9.5."; } }
>>>>>  enabled libndi_newtek     && require_headers Processing.NDI.Lib.h
>>>>> -enabled frei0r            && require_headers frei0r.h
>>>>> +enabled frei0r            && require_headers frei0r.h &&
>>>>> require_headers
>>>>> dlfcn.h
>>>>>  enabled gmp               && require gmp gmp.h mpz_export -lgmp
>>>>>  enabled gnutls            && require_pkg_config gnutls gnutls
>>>>> gnutls/gnutls.h gnutls_global_init
>>>>>  enabled jni               && { [ $target_os = "android" ] &&
>>>>> check_headers jni.h && enabled pthreads || die "ERROR: jni not found"; }
>>>>> -enabled ladspa            && require_headers ladspa.h
>>>>> +enabled ladspa            && require_headers ladspa.h &&
>>>>> require_headers
>>>>> dlfcn.h
>>>>>  enabled libaom            && require_pkg_config libaom "aom >= 1.0.0"
>>>>> aom/aom_codec.h aom_codec_version
>>>>>  enabled lv2               && require_pkg_config lv2 lilv-0
>>>>> "lilv/lilv.h"
>>>>> lilv_world_new
>>>>>  enabled libiec61883       && require libiec61883 libiec61883/iec61883.h
>>>>> iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
>>>>>
>>>>
>>>> Both filters already depend on libdl being present, which also implies
>>>> dlfcn.h (The check for libdl uses it). How is that not enough?
>>>
>>> Filters != library support enabled
>>>
>>> Please read bug report I linked, it explains it.
>>>
>>> In short not having dflcn.h header would pass those options but would
>>> disable filters later.
>>> Proper way is to abort early.
>>
>> Do those libraries need dlfcn.h, or only the filters? If the former,
>> then the libraries are not meant to depend on the presence of libdl.
>> Hence the dep being for the filters.
>>
>> In any case, since both libraries are only used by one filter each, i
>> guess this is ok. But instead of adding a new require_headers check just
>> reuse the existing one to check both headers.
> 
> How do I do that?

require_headers "frei0r.h dlfcn.h"
require_headers "ladspa.h dlfcn.h"

Untested, but should work.
Paul B Mahol Dec. 3, 2018, 10:09 a.m.
On 12/2/18, James Almer <jamrial@gmail.com> wrote:
> On 12/2/2018 4:07 PM, Paul B Mahol wrote:
>> On 12/2/18, James Almer <jamrial@gmail.com> wrote:
>>> On 12/2/2018 3:53 PM, Paul B Mahol wrote:
>>>> On 12/2/18, James Almer <jamrial@gmail.com> wrote:
>>>>> On 12/2/2018 2:51 PM, Paul B Mahol wrote:
>>>>>> Fixes #4517.
>>>>>>
>>>>>> Signed-off-by: Paul B Mahol <onemda@gmail.com>
>>>>>> ---
>>>>>>  configure | 4 ++--
>>>>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>>>>
>>>>>> diff --git a/configure b/configure
>>>>>> index 2af6c0d797..7c55274efa 100755
>>>>>> --- a/configure
>>>>>> +++ b/configure
>>>>>> @@ -6065,11 +6065,11 @@ enabled chromaprint       && require
>>>>>> chromaprint
>>>>>> chromaprint.h chromaprint_get_v
>>>>>>  enabled decklink          && { require_headers DeckLinkAPI.h &&
>>>>>>                                 { test_cpp_condition
>>>>>> DeckLinkAPIVersion.h
>>>>>> "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a090500" || die "ERROR:
>>>>>> Decklink
>>>>>> API version must be >= 10.9.5."; } }
>>>>>>  enabled libndi_newtek     && require_headers Processing.NDI.Lib.h
>>>>>> -enabled frei0r            && require_headers frei0r.h
>>>>>> +enabled frei0r            && require_headers frei0r.h &&
>>>>>> require_headers
>>>>>> dlfcn.h
>>>>>>  enabled gmp               && require gmp gmp.h mpz_export -lgmp
>>>>>>  enabled gnutls            && require_pkg_config gnutls gnutls
>>>>>> gnutls/gnutls.h gnutls_global_init
>>>>>>  enabled jni               && { [ $target_os = "android" ] &&
>>>>>> check_headers jni.h && enabled pthreads || die "ERROR: jni not found";
>>>>>> }
>>>>>> -enabled ladspa            && require_headers ladspa.h
>>>>>> +enabled ladspa            && require_headers ladspa.h &&
>>>>>> require_headers
>>>>>> dlfcn.h
>>>>>>  enabled libaom            && require_pkg_config libaom "aom >= 1.0.0"
>>>>>> aom/aom_codec.h aom_codec_version
>>>>>>  enabled lv2               && require_pkg_config lv2 lilv-0
>>>>>> "lilv/lilv.h"
>>>>>> lilv_world_new
>>>>>>  enabled libiec61883       && require libiec61883
>>>>>> libiec61883/iec61883.h
>>>>>> iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
>>>>>>
>>>>>
>>>>> Both filters already depend on libdl being present, which also implies
>>>>> dlfcn.h (The check for libdl uses it). How is that not enough?
>>>>
>>>> Filters != library support enabled
>>>>
>>>> Please read bug report I linked, it explains it.
>>>>
>>>> In short not having dflcn.h header would pass those options but would
>>>> disable filters later.
>>>> Proper way is to abort early.
>>>
>>> Do those libraries need dlfcn.h, or only the filters? If the former,
>>> then the libraries are not meant to depend on the presence of libdl.
>>> Hence the dep being for the filters.
>>>
>>> In any case, since both libraries are only used by one filter each, i
>>> guess this is ok. But instead of adding a new require_headers check just
>>> reuse the existing one to check both headers.
>>
>> How do I do that?
>
> require_headers "frei0r.h dlfcn.h"
> require_headers "ladspa.h dlfcn.h"
>
> Untested, but should work.

OK, will apply soon, with that changed.

Patch hide | download patch | download mbox

diff --git a/configure b/configure
index 2af6c0d797..7c55274efa 100755
--- a/configure
+++ b/configure
@@ -6065,11 +6065,11 @@  enabled chromaprint       && require chromaprint chromaprint.h chromaprint_get_v
 enabled decklink          && { require_headers DeckLinkAPI.h &&
                                { test_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a090500" || die "ERROR: Decklink API version must be >= 10.9.5."; } }
 enabled libndi_newtek     && require_headers Processing.NDI.Lib.h
-enabled frei0r            && require_headers frei0r.h
+enabled frei0r            && require_headers frei0r.h && require_headers dlfcn.h
 enabled gmp               && require gmp gmp.h mpz_export -lgmp
 enabled gnutls            && require_pkg_config gnutls gnutls gnutls/gnutls.h gnutls_global_init
 enabled jni               && { [ $target_os = "android" ] && check_headers jni.h && enabled pthreads || die "ERROR: jni not found"; }
-enabled ladspa            && require_headers ladspa.h
+enabled ladspa            && require_headers ladspa.h && require_headers dlfcn.h
 enabled libaom            && require_pkg_config libaom "aom >= 1.0.0" aom/aom_codec.h aom_codec_version
 enabled lv2               && require_pkg_config lv2 lilv-0 "lilv/lilv.h" lilv_world_new
 enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883