[FFmpeg-devel] [FFmpeg-cvslog] fftools/graphprint: Now, make it a Killer-Feature!

Martin Storsjö martin at martin.st
Fri May 16 11:50:51 EEST 2025


On Fri, 16 May 2025, softworkz . wrote:

>> -----Original Message-----
>> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of Martin
>> Storsjö
>> Sent: Freitag, 16. Mai 2025 10:19
>> To: FFmpeg development discussions and patches <ffmpeg-devel at ffmpeg.org>
>> Subject: Re: [FFmpeg-devel] [FFmpeg-cvslog] fftools/graphprint: Now, make it a
>> Killer-Feature!
>>
>> On Fri, 16 May 2025, softworkz . wrote:
>>
>>>
>>>
>>>> -----Original Message-----
>>>> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of Martin
>>>> Storsjö
>>>> Sent: Freitag, 16. Mai 2025 08:22
>>>> To: ffmpeg-devel at ffmpeg.org
>>>> Subject: Re: [FFmpeg-devel] [FFmpeg-cvslog] fftools/graphprint: Now, make
>> it a
>>>> Killer-Feature!
>>>>
>>>> On Thu, 15 May 2025, softworkz wrote:
>>>>
>>>>> ffmpeg | branch: master | softworkz <softworkz at hotmail.com> | Thu May 15
>>>> 23:10:02 2025 +0200| [1f2b8d7238eff4ab8a4d8d6177e250b8180d51f4] |
>> committer:
>>>> softworkz
>>>>>
>>>>> fftools/graphprint: Now, make it a Killer-Feature!
>>>>>
>>>>> remember this: -sg   <= means Show Graph
>>>>>
>>>>> Signed-off-by: softworkz <softworkz at hotmail.com>
>>>>>
>>>>>>
>>>>
>> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1f2b8d7238eff4ab8a4d
>>>> 8d6177e250b8180d51f4
>>>>> ---
>>>>
>>>> This broke compilation in a number of configurations:
>>>>
>>>> Windows UWP/Phone:
>>>> https://fate.ffmpeg.org/report.cgi?slot=arm-msvc2022-
>>>> winphone&time=20250516053009
>>>>
>>>> filelauncher.o : error LNK2019: unresolved external symbol ShellExecuteA
>>>> referenced in function ff_open_html_in_browser
>>>> ffmpeg_g.exe : fatal error LNK1120: 1 unresolved externals
>>>>
>>>> iOS:
>>>> https://fate.ffmpeg.org/report.cgi?slot=aarch64-apple-darwin-
>>>> ios18&time=20250516011754
>>>>
>>>> src/fftools/graph/filelauncher.c:61:13: error: 'system' is unavailable:
>>>> not available on iOS
>>>>     61 |         if (system(cmd) != 0)
>>>>        |             ^
>>>>
>> /Users/mstorsjo/Xcode_16.2.app/Contents/Developer/Platforms/iPhoneOS.platform/
>>>> Developer/SDKs/iPhoneOS.sdk/usr/include/_stdlib.h:184:6:
>>>> note: 'system' has been explicitly marked unavailable here
>>>>    184 | int      system(const char *) __DARWIN_ALIAS_C(system);
>>>>        |          ^
>>>> 1 error generated.
>>>>
>>>> tvOS:
>>>> https://fate.ffmpeg.org/report.cgi?slot=aarch64-apple-darwin-
>>>> tvos18&time=20250516014542
>>>>
>>>> src/fftools/graph/filelauncher.c:61:13: error: 'system' is unavailable:
>>>> not available on tvOS
>>>>     61 |         if (system(cmd) != 0)
>>>>        |             ^
>>>>
>> /Users/mstorsjo/Xcode_16.2.app/Contents/Developer/Platforms/AppleTVOS.platform
>>>> /Developer/SDKs/AppleTVOS.sdk/usr/include/_stdlib.h:184:6:
>>>> note: 'system' has been explicitly marked unavailable here
>>>>    184 | int      system(const char *) __DARWIN_ALIAS_C(system);
>>>>        |          ^
>>>> 1 error generated.
>>>>
>>>> // Martin
>>>>
>>>
>>> Hi Martin,
>>>
>>> do you think this is a reasonable condition for Apple in configure?
>>>
>>>        enable browser_launch
>>>        if test -n "$sysroot"; then
>>>            case "$sysroot" in
>>>                */iPhone*.sdk|\
>>>                */AppleTV*.sdk|\
>>>                */WatchOS*.sdk|\
>>>                */BridgeOS*.sdk)
>>>                    disable browser_launch
>>>                    ;;
>>>            esac
>>>        fi
>>
>> This is not how we normally do it. String matching trying to detect things
>> is generally brittle. If the problem is that we can't compile a call to
>> system(), the configure check should try to compile a call to system(),
>> and if that doesn't succeed, avoid compiling the code that does that. That
>> also works for e.g. ShellExecuteA.
>
> I'm preparing a patch that aims to limit this to Windows, Linux and Mac
> (regardless of API availability) and I'm not sure how to determine whether
> mac or the others above in configure.
>
> Is there a better way?

Test compiling code and checking if the expected things are defined. You 
can include TargetConditionals.h and check if TARGET_OS_OSX evaluates to 
nonzero; that's what we do in code elsewhere anyway - grep for 
TARGET_OS_OSX.

// Martin


More information about the ffmpeg-devel mailing list