diff mbox series

[FFmpeg-devel,3/3] configure: check avisynth header version

Message ID 20220208110240.4179-4-qyot27@gmail.com
State Accepted
Commit da9cc25c88b3fa1882ac9d0e4727ed8b465f95cf
Headers show
Series avformat/avisynth: support frame properties | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/make_ppc success Make finished
andriy/make_fate_ppc success Make fate finished

Commit Message

Stephen Hutchinson Feb. 8, 2022, 11:02 a.m. UTC
The headers from version 3.7.1 are needed in order to support
parsing of frame properties. avs/version.h has been generated
as part of the AviSynth+ build process for a long time, but was
never installed with the includes until version 3.7.1a. Checking
for the presence of avs/version.h might have been sufficient,
but a version check mechanism might be useful in the future.

This does not change the version compatibility with the library
itself; previous 3.x versions of AviSynth+ as well as AviSynth 2.6
can still be used with the demuxer.

Signed-off-by: Stephen Hutchinson <qyot27@gmail.com>
---
 configure | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Stephen Hutchinson Feb. 13, 2022, 11:34 p.m. UTC | #1
On 2/8/22 6:02 AM, Stephen Hutchinson wrote:
> The headers from version 3.7.1 are needed in order to support
> parsing of frame properties. avs/version.h has been generated
> as part of the AviSynth+ build process for a long time, but was
> never installed with the includes until version 3.7.1a. Checking
> for the presence of avs/version.h might have been sufficient,
> but a version check mechanism might be useful in the future.
> 
> This does not change the version compatibility with the library
> itself; previous 3.x versions of AviSynth+ as well as AviSynth 2.6
> can still be used with the demuxer.
> 
> Signed-off-by: Stephen Hutchinson <qyot27@gmail.com>
> ---
>   configure | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/configure b/configure
> index 493493b4c5..544d341b49 100755
> --- a/configure
> +++ b/configure
> @@ -6508,7 +6508,9 @@ for func in $COMPLEX_FUNCS; do
>   done
>   
>   # these are off by default, so fail if requested and not available
> -enabled avisynth          && require_headers "avisynth/avisynth_c.h"
> +enabled avisynth          && { require_headers "avisynth/avisynth_c.h avisynth/avs/version.h" &&
> +                               { test_cpp_condition avisynth/avs/version.h "AVS_MAJOR_VER >= 3 && AVS_MINOR_VER >= 7 && AVS_BUGFIX_VER >= 1 || AVS_MAJOR_VER >= 3 && AVS_MINOR_VER > 7 || AVS_MAJOR_VER > 3" ||
> +                                 die "ERROR: AviSynth+ header version must be >= 3.7.1"; } }
>   enabled cuda_nvcc         && { check_nvcc cuda_nvcc || die "ERROR: failed checking for nvcc."; }
>   enabled chromaprint       && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint
>   enabled decklink          && { require_headers DeckLinkAPI.h &&

Pushed.
Gyan Doshi Feb. 14, 2022, 11:56 a.m. UTC | #2
On 2022-02-14 05:04 am, Stephen Hutchinson wrote:
> On 2/8/22 6:02 AM, Stephen Hutchinson wrote:
>> The headers from version 3.7.1 are needed in order to support
>> parsing of frame properties. avs/version.h has been generated
>> as part of the AviSynth+ build process for a long time, but was
>> never installed with the includes until version 3.7.1a. Checking
>> for the presence of avs/version.h might have been sufficient,
>> but a version check mechanism might be useful in the future.
>>
>> This does not change the version compatibility with the library
>> itself; previous 3.x versions of AviSynth+ as well as AviSynth 2.6
>> can still be used with the demuxer.
>>
>> Signed-off-by: Stephen Hutchinson <qyot27@gmail.com>
>> ---
>>   configure | 4 +++-
>>   1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/configure b/configure
>> index 493493b4c5..544d341b49 100755
>> --- a/configure
>> +++ b/configure
>> @@ -6508,7 +6508,9 @@ for func in $COMPLEX_FUNCS; do
>>   done
>>     # these are off by default, so fail if requested and not available
>> -enabled avisynth          && require_headers "avisynth/avisynth_c.h"
>> +enabled avisynth          && { require_headers 
>> "avisynth/avisynth_c.h avisynth/avs/version.h" &&
>> +                               { test_cpp_condition 
>> avisynth/avs/version.h "AVS_MAJOR_VER >= 3 && AVS_MINOR_VER >= 7 && 
>> AVS_BUGFIX_VER >= 1 || AVS_MAJOR_VER >= 3 && AVS_MINOR_VER > 7 || 
>> AVS_MAJOR_VER > 3" ||
>> +                                 die "ERROR: AviSynth+ header 
>> version must be >= 3.7.1"; } }
>>   enabled cuda_nvcc         && { check_nvcc cuda_nvcc || die "ERROR: 
>> failed checking for nvcc."; }
>>   enabled chromaprint       && require chromaprint chromaprint.h 
>> chromaprint_get_version -lchromaprint
>>   enabled decklink          && { require_headers DeckLinkAPI.h &&

The advice for AVS+ dlopen consumers is to only build and install AVS+ 
headers.
That does not install version.h and arch.h which are only built with the 
binary artifacts, not with -DHEADERS_ONLY.

For my Windows build, I just manually copied and renamed the template 
files to make configure succeed.

Regards,
Gyan
Stephen Hutchinson Feb. 14, 2022, 10:03 p.m. UTC | #3
On 2/14/22 6:56 AM, Gyan Doshi wrote:
> 
> 
> On 2022-02-14 05:04 am, Stephen Hutchinson wrote:
>> On 2/8/22 6:02 AM, Stephen Hutchinson wrote:
>>> The headers from version 3.7.1 are needed in order to support
>>> parsing of frame properties. avs/version.h has been generated
>>> as part of the AviSynth+ build process for a long time, but was
>>> never installed with the includes until version 3.7.1a. Checking
>>> for the presence of avs/version.h might have been sufficient,
>>> but a version check mechanism might be useful in the future.
>>>
>>> This does not change the version compatibility with the library
>>> itself; previous 3.x versions of AviSynth+ as well as AviSynth 2.6
>>> can still be used with the demuxer.
>>>
>>> Signed-off-by: Stephen Hutchinson <qyot27@gmail.com>
>>> ---
>>>   configure | 4 +++-
>>>   1 file changed, 3 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/configure b/configure
>>> index 493493b4c5..544d341b49 100755
>>> --- a/configure
>>> +++ b/configure
>>> @@ -6508,7 +6508,9 @@ for func in $COMPLEX_FUNCS; do
>>>   done
>>>     # these are off by default, so fail if requested and not available
>>> -enabled avisynth          && require_headers "avisynth/avisynth_c.h"
>>> +enabled avisynth          && { require_headers 
>>> "avisynth/avisynth_c.h avisynth/avs/version.h" &&
>>> +                               { test_cpp_condition 
>>> avisynth/avs/version.h "AVS_MAJOR_VER >= 3 && AVS_MINOR_VER >= 7 && 
>>> AVS_BUGFIX_VER >= 1 || AVS_MAJOR_VER >= 3 && AVS_MINOR_VER > 7 || 
>>> AVS_MAJOR_VER > 3" ||
>>> +                                 die "ERROR: AviSynth+ header 
>>> version must be >= 3.7.1"; } }
>>>   enabled cuda_nvcc         && { check_nvcc cuda_nvcc || die "ERROR: 
>>> failed checking for nvcc."; }
>>>   enabled chromaprint       && require chromaprint chromaprint.h 
>>> chromaprint_get_version -lchromaprint
>>>   enabled decklink          && { require_headers DeckLinkAPI.h &&
> 
> The advice for AVS+ dlopen consumers is to only build and install AVS+ 
> headers.
> That does not install version.h and arch.h which are only built with the 
> binary artifacts, not with -DHEADERS_ONLY.
> 
> For my Windows build, I just manually copied and renamed the template 
> files to make configure succeed.
> 
> Regards,
> Gyan

Should be fixed in 
https://github.com/AviSynth/AviSynthPlus/commit/0e583378116c857372232e9886c599df2fb8da85 
with the caveat (noted in AviSynth+'s README.md) that the `make install` 
step now needs to explicitly invoke the VersionGen target, `make 
VersionGen install`.  I fiddled with it for a while, but I couldn't get 
the install process to invoke it automatically.

Related, the older GNUmakefile method is not set up to generate 
version.h and arch.h (especially considering both of those use *.cmake 
scripts), so it's now pretty clearly deprecated.
Helmut K. C. Tessarek Feb. 15, 2022, 10:02 p.m. UTC | #4
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512



On 2022-02-14 17:03, Stephen Hutchinson wrote:

> Should be fixed in 
> https://github.com/AviSynth/AviSynthPlus/commit/0e583378116c857372232e9886c5
99df2fb8da85
>
> 
with the caveat (noted in AviSynth+'s README.md) that the `make install` step
> now needs to explicitly invoke the VersionGen target, `make VersionGen 
> install`.  I fiddled with it for a while, but I couldn't get the install 
> process to invoke it automatically.
> 
> Related, the older GNUmakefile method is not set up to generate version.h
> and arch.h (especially considering both of those use *.cmake scripts), so
> it's now pretty clearly deprecated.

What is the solution?

I am compiling ffmpeg with AviSynthPlus-3.5.1 and my configure just errored
out with

ERROR: avisynth/avisynth_c.h avisynth/avs/version.h not found

Which makes sense because I don't have a version.h

Do I have to use the latest git version of AviSynthPlus. Is there a fix
coming for configure so that I can compile it as I did 2 days ago?

Cheers,
  K. C.

- -- 
regards Helmut K. C. Tessarek              KeyID 0x172380A011EF4944
Key fingerprint = 8A55 70C1 BD85 D34E ADBC 386C 1723 80A0 11EF 4944

/*
   Thou shalt not follow the NULL pointer for chaos and madness
   await thee at its end.
*/
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEE191csiqpm8f5Ln9WvgmFNJ1E3QAFAmIMIu0ACgkQvgmFNJ1E
3QCIRBAAt2kUYvy3+rMfskOBLISsDQm0epV4/RYWROqfUfzdn7ZWyUbshEGzEfSP
EuxYSgAXcvHhNYKhdgCLPFPTD5dqmxHR/9xYagelCEoEDY898DSOw0LFWyrBpak4
qvBtZP7Xt7bzFTvtoDAr+J4yrQCZN4M8gmQLhNqsh4nOawvmYlhONjXZ1eHX49Ki
9R3XFvm8jbdUqrvsil5+SNHtrf0734HYcZ5wcXNgulcfzdGDxvuGw1wS+XI9USQv
lyyom9AjgQaKZK/Kv68pVY4wLpkpVyO0KPYrfv3isNctwP69bNupRMc1BKKAPnhT
48FfSwZpU5d3CETdIXve/oX7VyWtYvNxbhqDCexlQICQgZEoWWgmUncxhVrQkMbF
e5N0mYhKTd2kJ3/31qaV/OfHqCznh2/BFzz3yeM+sH1NLj/bkAQQtCQ0I4jlW2jc
3sDxhtGmLtLXen1hnvAQLsEreT+jnlilhs1kTV8j4zZZ0rZexn7q6MFGMCR8Bmsb
7YZv0gY/1evuIvcjeviuPU9eYtbKqIeWqhIg+cRvmAJkqu1f2As0jl34Uuvw2agX
JdpfQ+x4R16wXlOYKTVu8hiX9l4pNvmeeNxUFLQSFs+Vz+bPVW9me4VCbVzbV+Dc
MwjxnhEOnarIcozsslvJLrQIwXnN+98RSpZJFmwRAM56w6QvZ1A=
=mifW
-----END PGP SIGNATURE-----
Stephen Hutchinson Feb. 15, 2022, 11:55 p.m. UTC | #5
On 2/15/22 5:02 PM, Helmut K. C. Tessarek wrote:
> 
> What is the solution?
> 
> I am compiling ffmpeg with AviSynthPlus-3.5.1 and my configure just errored
> out with
> 
> ERROR: avisynth/avisynth_c.h avisynth/avs/version.h not found
> 
> Which makes sense because I don't have a version.h
> 
> Do I have to use the latest git version of AviSynthPlus. Is there a fix
> coming for configure so that I can compile it as I did 2 days ago?
> 
> Cheers,
>    K. C.
> 

git clone --recursive -b 3.7 https://github.com/AviSynth/AviSynthPlus
[build/install as usual]

-b 3.7 is equal to the tarball for 3.7.1a (which has the fix for the 
case of building the entire library), --recursive pulls in the submodule 
needed for the default AppleClang on 10.13 & 10.14.  Unfortunately, 
Github doesn't put submodules in the tarballs.

The fix on latest git was specifically for those that want to use the 
HEADERS_ONLY option when configuring.
Helmut K. C. Tessarek Feb. 16, 2022, 1:33 a.m. UTC | #6
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512



On 2022-02-15 18:55, Stephen Hutchinson wrote:
> 
> git clone --recursive -b 3.7 https://github.com/AviSynth/AviSynthPlus 
> [build/install as usual]
> 
> -b 3.7 is equal to the tarball for 3.7.1a (which has the fix for the case
> of building the entire library), --recursive pulls in the submodule
> needed for the default AppleClang on 10.13 & 10.14.  Unfortunately,
> Github doesn't put submodules in the tarballs.
> 
> The fix on latest git was specifically for those that want to use the 
> HEADERS_ONLY option when configuring.


Unfortunately this didn't work.

Building the new AviSynthPlus results in the following errors:

[ 10%] Building CXX object
avs_core/CMakeFiles/AvsCore.dir/core/FilterGraph.cpp.o
/Users/Shared/ffmpeg/compile/AviSynthPlus/avs_core/core/FilterGraph.cpp:510:27
:
error: 'path' is unavailable: introduced in macOS 10.15
  return fs::absolute(fs::path(f).lexically_normal()).generic_string();
                          ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
/usr/bin/../include/c++/v1/filesystem:739:24:
note: 'path' has been explicitly marked unavailable here
class _LIBCPP_TYPE_VIS path {
                       ^
/Users/Shared/ffmpeg/compile/AviSynthPlus/avs_core/core/FilterGraph.cpp:510:23
:
error: 'path' is unavailable: introduced in macOS 10.15
  return fs::absolute(fs::path(f).lexically_normal()).generic_string();
                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
/usr/bin/../include/c++/v1/filesystem:773:3:
note: 'path' has been explicitly marked unavailable here
  path(const _Source& __src, format = format::auto_format) {
  ^
/Users/Shared/ffmpeg/compile/AviSynthPlus/avs_core/core/FilterGraph.cpp:510:23
:
error: '~path' is unavailable: introduced in macOS 10.15
  return fs::absolute(fs::path(f).lexically_normal()).generic_string();
                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
/usr/bin/../include/c++/v1/filesystem:791:3:
note: '~path' has been explicitly marked unavailable here
  ~path() = default;
  ^
/Users/Shared/ffmpeg/compile/AviSynthPlus/avs_core/core/FilterGraph.cpp:510:35
:
error: 'lexically_normal' is unavailable: introduced in macOS 10.15
  return fs::absolute(fs::path(f).lexically_normal()).generic_string();
                                  ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
/usr/bin/../include/c++/v1/filesystem:1110:8:
note: 'lexically_normal' has been explicitly marked unavailable here
  path lexically_normal() const;
       ^
/Users/Shared/ffmpeg/compile/AviSynthPlus/avs_core/core/FilterGraph.cpp:510:35
:
error: '~path' is unavailable: introduced in macOS 10.15
  return fs::absolute(fs::path(f).lexically_normal()).generic_string();
                                  ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
/usr/bin/../include/c++/v1/filesystem:791:3:
note: '~path' has been explicitly marked unavailable here
  ~path() = default;
  ^
/Users/Shared/ffmpeg/compile/AviSynthPlus/avs_core/core/FilterGraph.cpp:510:14
:
error: 'absolute' is unavailable: introduced in macOS 10.15
  return fs::absolute(fs::path(f).lexically_normal()).generic_string();
             ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
/usr/bin/../include/c++/v1/filesystem:1477:39:
note: 'absolute' has been explicitly marked unavailable here
inline _LIBCPP_INLINE_VISIBILITY path absolute(const path& __p) {
                                      ^
/Users/Shared/ffmpeg/compile/AviSynthPlus/avs_core/core/FilterGraph.cpp:510:10
:
error: '~path' is unavailable: introduced in macOS 10.15
  return fs::absolute(fs::path(f).lexically_normal()).generic_string();
         ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
/usr/bin/../include/c++/v1/filesystem:791:3:
note: '~path' has been explicitly marked unavailable here
  ~path() = default;
  ^
/Users/Shared/ffmpeg/compile/AviSynthPlus/avs_core/core/FilterGraph.cpp:510:55
:
error: 'generic_string' is unavailable: introduced in macOS 10.15
  return fs::absolute(fs::path(f).lexically_normal()).generic_string();
                                                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
/usr/bin/../include/c++/v1/filesystem:1019:15:
note: 'generic_string' has been explicitly marked unavailable here
  std::string generic_string() const { return __pn_; }
              ^
8 errors generated.
make[2]: *** [avs_core/CMakeFiles/AvsCore.dir/core/FilterGraph.cpp.o] Error 1
make[1]: *** [avs_core/CMakeFiles/AvsCore.dir/all] Error 2
make: *** [all] Error 2




- -- 
regards Helmut K. C. Tessarek              KeyID 0x172380A011EF4944
Key fingerprint = 8A55 70C1 BD85 D34E ADBC 386C 1723 80A0 11EF 4944

/*
   Thou shalt not follow the NULL pointer for chaos and madness
   await thee at its end.
*/
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEE191csiqpm8f5Ln9WvgmFNJ1E3QAFAmIMVGoACgkQvgmFNJ1E
3QDPqQ//RMgo35KAXz9XJqNzQ1oaQAcgyt1a84g3Je8MLBAjpdWhCeGHxPzbAP+O
EPtG0ODLpnVwggPzFf2qPwpz8Q85qqGg0uEftH3xCG3HoyqRIR12OFJkXq0kI4KD
mbKplHQPRnr4Fvo1jpT0jOhGXzTpEX6n3G1rV8nhC5PH+GoZ292JgfPXeLCdiWNW
epk5qK4t1pzapjNSo1FCy5v6qt4s6YqzomgidjsJCXekKu2ATgPeqamiUKMerpcp
zVBG3dp8GJ/StebbLPVpO+J6NzsY8dSwlpjx2hKD8TrknzvHu/W1acG3JEMKF1vF
1abpexSvg5DRaoA1P1QMf5Yr19LWkW+b7nkwjQSTgeGlZ+7mMGDhJGo+rJDyPbK4
G+HJbRwNaDHB7++9vtk0RTnTVaLseLNldVCiM/fvOzB4ONMVQEwClxVOnE/1r+1W
/F7FMZCTc/npBGaDyiTjgNJjcMl8LZ10S2S85tVTjeS8GP4AAdx6Ilvz6wqslmva
pHxgUjQU7Aci/G14ZBcuclpRJjfM/voaUzbpZB5188z5Ht6A6xL3aIBTTyG0t6TC
Ly+sA+zvxbmMvemGeNl+uc1llddg3bF9jZ1rjx4lgMxd+48cpo8pbp3KSuz5peEL
ML3VuIliQUSVqWScbQ8Z91RES881xWYnlw4dZNgDFjMSrt6AjEE=
=5YwB
-----END PGP SIGNATURE-----
Stephen Hutchinson Feb. 16, 2022, 3:50 a.m. UTC | #7
On 2/15/22 8:33 PM, Helmut K. C. Tessarek wrote:
> Unfortunately this didn't work.
> 
> Building the new AviSynthPlus results in the following errors:
> 

Those errors would indicate you're not on the 3.7 branch, because if the 
filesystem submodule isn't present, it doesn't emit those errors, it 
stops dead because of the missing <ghc/filesystem> header.  If the 
submodule is there, it compiles as it should.  Is the filesystem 
subdirectory empty?
Helmut K. C. Tessarek Feb. 16, 2022, 5:10 a.m. UTC | #8
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

On 2022-02-15 22:50, Stephen Hutchinson wrote:
> Those errors would indicate you're not on the 3.7 branch, because if the 
> filesystem submodule isn't present, it doesn't emit those errors, it
> stops dead because of the missing <ghc/filesystem> header.  If the
> submodule is there, it compiles as it should.  Is the filesystem
> subdirectory empty?

Nope, I used the git command you posted. I also checked the filesystem dir:

[tessus@epsilon3 0 ~/data/ext/ffmpeg/compile/AviSynthPlus/filesystem
:3f1c185|✔]$ ll
total 76
drwxr-xr-x 18 tessus wheel   576 2022-02-15 20:23 .
drwxr-xr-x 16 tessus wheel   512 2022-02-15 20:31 ..
- -rw-r--r--  1 tessus wheel  2842 2022-02-15 20:23 .appveyor.yml
drwxr-xr-x  4 tessus wheel   128 2022-02-15 20:23 .ci
- -rw-r--r--  1 tessus wheel   313 2022-02-15 20:23 .cirrus.yml
- -rw-r--r--  1 tessus wheel   576 2022-02-15 20:23 .clang-format
- -rw-r--r--  1 tessus wheel   795 2022-02-15 20:23 .drone.yml
- -rw-r--r--  1 tessus wheel    35 2022-02-15 20:23 .git
drwxr-xr-x  3 tessus wheel    96 2022-02-15 20:23 .github
- -rw-r--r--  1 tessus wheel    32 2022-02-15 20:23 .gitignore
- -rw-r--r--  1 tessus wheel  4141 2022-02-15 20:23 .travis.yml
- -rw-r--r--  1 tessus wheel  1937 2022-02-15 20:23 CMakeLists.txt
- -rw-r--r--  1 tessus wheel  1086 2022-02-15 20:23 LICENSE
- -rw-r--r--  1 tessus wheel 35982 2022-02-15 20:23 README.md
drwxr-xr-x  4 tessus wheel   128 2022-02-15 20:23 cmake
drwxr-xr-x  5 tessus wheel   160 2022-02-15 20:23 examples
drwxr-xr-x  3 tessus wheel    96 2022-02-15 20:23 include
drwxr-xr-x 11 tessus wheel   352 2022-02-15 20:23 test

I'm building AviSynth like this:

[tessus@epsilon3 0 ~/data/ext/ffmpeg/compile/AviSynthPlus]

mkdir avisynth-build && cd avisynth-build
cmake -DCMAKE_INSTALL_PREFIX:PATH=${TARGET} -DBUILD_SHARED_LIBS=OFF ..
make VersionGen install

- ----

Until 2 days ago I could compile ffmpeg with AviSynth 3.5.1 just fine. So
something must have made my configure to fail.


- -- 
regards Helmut K. C. Tessarek              KeyID 0x172380A011EF4944
Key fingerprint = 8A55 70C1 BD85 D34E ADBC 386C 1723 80A0 11EF 4944

/*
   Thou shalt not follow the NULL pointer for chaos and madness
   await thee at its end.
*/
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEE191csiqpm8f5Ln9WvgmFNJ1E3QAFAmIMhzEACgkQvgmFNJ1E
3QDprg/+NckvpYpfWeq6jPKKjGmJQazTxFpE0PyyZAngEx9Du6UP49iitT4UefJH
5hOnm7Ps6gkmdNK5WZaeUHL87Vyarya6WIzdNAymzwERsapRfxdsc4YyEbh26bK6
eMf7Qz+4kZ2tfqSGvdTfCDqoYybr/nmR4W/T06jEbeV4v2OmZZieNrDPsel+BUjU
2pSSSCmglJ5qDXcDKfaqCXUtXI5TGJGKm0299yHcZq6Y+OOQGGTCz6f2JbMo0QL/
9X9CNUXxGkCuMgJ4fsOfSq1GkhFQt0eVAIBY9/vIcXKdAPnw+qHgi/Y6OVh6FUc2
S8Y5BEcE73jkjuakimje4DV5h/TfAe6vlavM1MCuHhMblQKYstsrYaRoEkYidb2E
sPp87KadqxCveYW7sTuNs0TxBuUJjWef/7NeShoBAsJTlgGgqM7Iel7ctEZz9gD7
TMOAwSqGy+B2OVXeQvQA5oLJf7I4a4WoVCUgSySKTRNh8Dq52X9wfmJPMD5iGz6K
eAR0Z4jlZ3ihZ9NgrjHBqVaSNwbGsrvOlpdrNptxKwFV3ob2VFGuIw5rSJy53y++
e+WI+beujsNc1KX/oU+2CEDX5M1jua6+xBMW08gOpawB4YRxMyx3NfcJjgNwdNZq
PWix846IxGDfd9O0pP7KAEmzX00Cld6b9k417ql/0m5zF1LMYw0=
=NM4f
-----END PGP SIGNATURE-----
Stephen Hutchinson Feb. 16, 2022, 7:37 a.m. UTC | #9
On 2/16/22 12:10 AM, Helmut K. C. Tessarek wrote:
> On 2022-02-15 22:50, Stephen Hutchinson wrote:
>> Those errors would indicate you're not on the 3.7 branch, because if the
>> filesystem submodule isn't present, it doesn't emit those errors, it
>> stops dead because of the missing <ghc/filesystem> header.  If the
>> submodule is there, it compiles as it should.  Is the filesystem
>> subdirectory empty?
> 
> Nope, I used the git command you posted. I also checked the filesystem dir:
> 
> [tessus@epsilon3 0 ~/data/ext/ffmpeg/compile/AviSynthPlus/filesystem
> :3f1c185|✔]$ ll
> total 76
> drwxr-xr-x 18 tessus wheel   576 2022-02-15 20:23 .
> drwxr-xr-x 16 tessus wheel   512 2022-02-15 20:31 ..
> -rw-r--r--  1 tessus wheel  2842 2022-02-15 20:23 .appveyor.yml
> drwxr-xr-x  4 tessus wheel   128 2022-02-15 20:23 .ci
> -rw-r--r--  1 tessus wheel   313 2022-02-15 20:23 .cirrus.yml
> -rw-r--r--  1 tessus wheel   576 2022-02-15 20:23 .clang-format
> -rw-r--r--  1 tessus wheel   795 2022-02-15 20:23 .drone.yml
> -rw-r--r--  1 tessus wheel    35 2022-02-15 20:23 .git
> drwxr-xr-x  3 tessus wheel    96 2022-02-15 20:23 .github
> -rw-r--r--  1 tessus wheel    32 2022-02-15 20:23 .gitignore
> -rw-r--r--  1 tessus wheel  4141 2022-02-15 20:23 .travis.yml
> -rw-r--r--  1 tessus wheel  1937 2022-02-15 20:23 CMakeLists.txt
> -rw-r--r--  1 tessus wheel  1086 2022-02-15 20:23 LICENSE
> -rw-r--r--  1 tessus wheel 35982 2022-02-15 20:23 README.md
> drwxr-xr-x  4 tessus wheel   128 2022-02-15 20:23 cmake
> drwxr-xr-x  5 tessus wheel   160 2022-02-15 20:23 examples
> drwxr-xr-x  3 tessus wheel    96 2022-02-15 20:23 include
> drwxr-xr-x 11 tessus wheel   352 2022-02-15 20:23 test
> 
> I'm building AviSynth like this:
> 
> [tessus@epsilon3 0 ~/data/ext/ffmpeg/compile/AviSynthPlus]
> 
> mkdir avisynth-build && cd avisynth-build
> cmake -DCMAKE_INSTALL_PREFIX:PATH=${TARGET} -DBUILD_SHARED_LIBS=OFF ..
> make VersionGen install
> 
> ----
> 
> Until 2 days ago I could compile ffmpeg with AviSynth 3.5.1 just fine. So
> something must have made my configure to fail.
> 
> 

I can't reproduce under the 10.14 VM.  BUILD_SHARED_LIBS or not, if 
filesystem isn't present, it stops with a missing header error, and if 
it was properly '--recursive'ly cloned, the build succeeds.  The only 
thing I can think of at this point is that the default Command Line 
Developer Tools fetch the utilities from Xcode 10, which are blissfully 
unaware of things Apple might have tried getting clever about in Xcode 
11.  That repeated 'error: <blank> is unavailable: introduced in macOS 
10.15' message seems like something is new enough to *know* about it 
being present in 10.15, and might be interfering with it somehow.

There is another option, basically what Gyan suggested earlier: grab the 
release build of 3.7.1, fetch the extra headers from the Github repo, 
then copy either all the contents of the tarball's /usr directory into 
the system /usr directory (or wherever your working ${prefix} is), or 
just the 'avisynth' directory into ${prefix}/include.  Then try FFmpeg 
again.

curl -L -O 
https://github.com/AviSynth/AviSynthPlus/releases/download/v3.7.1/AviSynthPlus_3.7.1_macOS_10.13_._10.14_x64-filesonly.tar.xz

tar -xJvf AviSynthPlus_3.7.1_macOS_10.13_._10.14_x64-filesonly.tar.xz

cd 
avisynthplus_3.7.1_macOS_10.13_\&_10.14_x64-filesonly/usr/include/avisynth/avs

curl -L -o arch.h 
https://raw.githubusercontent.com/AviSynth/AviSynthPlus/master/avs_core/core/arch.h.in

curl -L -o version.h 
https://raw.githubusercontent.com/AviSynth/AviSynthPlus/master/avs_core/core/version.h.in

cd ../../../
sudo cp -R * /usr

or

cd ../../
sudo cp -R avisynth /usr/include

The first option will at least allow you to test that AviSynth works 
when trying to use it with FFmpeg, because it'll make sure 
libavisynth.dylib is present.
Helmut K. C. Tessarek Feb. 16, 2022, 6:25 p.m. UTC | #10
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512


On 2022-02-16 02:37, Stephen Hutchinson wrote:
> There is another option, basically what Gyan suggested earlier: grab the 
> release build of 3.7.1, fetch the extra headers from the Github repo,
> then copy either all the contents of the tarball's /usr directory into
> the system /usr directory (or wherever your working ${prefix} is), or
> just the 'avisynth' directory into ${prefix}/include.  Then try FFmpeg
> again.

This does not work. I compile static binaries. The filesonly tarball only
has dylibs.

As I mentioned nefore:. 3 days ago everything worked fine. Now the ffmpeg
builds are broken and I can no longer compile ffmpeg.

Is there any chancf you can add something to make it work again with 3.5.1
which compiled withtout issues on macOS 10.14 and which I've been using
since it was released.


- -- 
regards Helmut K. C. Tessarek              KeyID 0x172380A011EF4944
Key fingerprint = 8A55 70C1 BD85 D34E ADBC 386C 1723 80A0 11EF 4944

/*
   Thou shalt not follow the NULL pointer for chaos and madness
   await thee at its end.
*/
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEE191csiqpm8f5Ln9WvgmFNJ1E3QAFAmINQXwACgkQvgmFNJ1E
3QAphA//aAu21aLcSYXTtFdb2DlW/lAdN3y7MhIftRXuy3zqTy7BnPOpiWwm6jtw
lq7Ck4IJMtFSbtH2Xh7RHqYKk1UVNZiwjIiPHhx/mBDxr+40wRdV44u00NPuQaGl
3ZHHqVSlODr0TSR9HjsW1ywM5BcxX4+FiilFHyM0JVlxTpEp6kqyisN8pRsL3Zyk
o00DVvTvTQD2GDd/eN+TRVl39d+8HD0DU16PzKF6ptuQs7Xyehoh/gt89fIhv5om
7/JWhJY9ritGQYyjzZq8J7vUrQ4dB7dLQMHbULnDaRC+7XQLdeTw5IU5NuNxqw4C
IUh4PbuYiiVLK0cE5HpvlPs6LwbkVvbw6Er9QtOUAtWEIys+d0sQxS5STm4NqUrB
92MXmkPqwDE8MgW5QJGo2n+vT1N4zDT49ot9aIa5NGb7PJ3WLRmqcx6RUbUKPPXn
JxtM1JYaVGHQIkqzxXh1Y8nWaMX5ynkXXj/TqIL8qjOuGgpaaqX9+mo6Uj7ZU3Vp
94AvAofrTXL6t7ZvnQGR53GNwroXsmy9/ffxZLhQSRQZj7oUasIeXRgDWkuJFaPd
CDvda7MXBw2A3v1Z60GhIYwZe2rbpsCL61lHFX0SmcIjy8eLk0ZbucwapnpCit0Y
IVtRbJCoDDrSCEwXgmXGkrlQ/KXGlCAX35C4Rw8T5hJLKqShE58=
=oTu0
-----END PGP SIGNATURE-----
hydra3333@gmail.com Feb. 16, 2022, 11:04 p.m. UTC | #11
> On 2022-02-16 02:37, Stephen Hutchinson wrote:
> > There is another option, basically what Gyan suggested earlier: grab the 
> > release build of 3.7.1, fetch the extra headers from the Github repo,
> > then copy either all the contents of the tarball's /usr directory into
> > the system /usr directory (or wherever your working ${prefix} is), or
> > just the 'avisynth' directory into ${prefix}/include.  Then try FFmpeg
> > again.
>
> This does not work. I compile static binaries. The filesonly tarball only
> has dylibs.
>
> As I mentioned nefore:. 3 days ago everything worked fine. Now the ffmpeg
> builds are broken and I can no longer compile ffmpeg.
>
> Is there any chancf you can add something to make it work again with 3.5.1
> which compiled withtout issues on macOS 10.14 and which I've been using
> since it was released.
>
> - -- 
> regards Helmut K. C. Tessarek              KeyID 0x172380A011EF4944

Hello.

This probably will not help you, since I cross-compile under Ubuntu for target Win10.
However, for the record I did this, not quite according to the git instructions, and it did not abort:

# Changed dir from /home/u/Desktop/_working/workdir/x86_64/AviSynthPlus_git to subfolder avisynth-build

cmake .. -DCMAKE_TOOLCHAIN_FILE="/home/u/Desktop/_working/workdir/mingw_toolchain.cmake" -G"Ninja"
-DCMAKE_INSTALL_PREFIX=/home/u/Desktop/_working/workdir/toolchain/x86_64-w64-mingw32/x86_64-w64-mingw32 -DHEADERS_ONLY:bool=on

ninja VersionGen -j 6

ninja install  -j 6

Cheers
Helmut K. C. Tessarek Feb. 16, 2022, 11:13 p.m. UTC | #12
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512


On 2022-02-16 18:04, hydra3333@gmail.com wrote:
> This probably will not help you, since I cross-compile under Ubuntu for
> target Win10. However, for the record I did this, not quite according to
> the git instructions, and it did not abort:
> 
> # Changed dir from
> /home/u/Desktop/_working/workdir/x86_64/AviSynthPlus_git to subfolder
> avisynth-build
> 
> cmake ..
> -DCMAKE_TOOLCHAIN_FILE="/home/u/Desktop/_working/workdir/mingw_toolchain.cma
ke"
> -G"Ninja" 
> -DCMAKE_INSTALL_PREFIX=/home/u/Desktop/_working/workdir/toolchain/x86_64-w64
- -mingw32/x86_64-w64-mingw32
> -DHEADERS_ONLY:bool=on
> 
> ninja VersionGen -j 6
> 
> ninja install  -j 6

The file you are referencing is not even in the AviSynthPlus source tree.
Also a mingw cmake file would not be very useful on macOS.

But thanks anyway.


- -- 
regards Helmut K. C. Tessarek              KeyID 0x172380A011EF4944
Key fingerprint = 8A55 70C1 BD85 D34E ADBC 386C 1723 80A0 11EF 4944

/*
   Thou shalt not follow the NULL pointer for chaos and madness
   await thee at its end.
*/
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEE191csiqpm8f5Ln9WvgmFNJ1E3QAFAmINhS4ACgkQvgmFNJ1E
3QDtrBAAr+DFCh6UXswzSlJ7lE6J8GX7FxofZgq7H97L5SgCOBS7azjuF9isM6d1
OrY2WqGPsBiK6NnTvlDUtaPmtxJkZQ8OEc2YwfsX1K0lSdjWmtBlbjIoWNZTiwja
H1xydX+XueWeb6Gm5c4NEXNyxsIquFW8nGTX2q8mZ8w54K3nFZhNhbPTtskzS0k6
GUyFYf8RxMICyXO1EcJhsHLu1zWTXDV72yVEIiHcyg4SNjggkJv9f4lnJSTZ9Igd
FzZAWT+Z7tLg8laAftFUDeEWj1vjbUF007ldvBUl6lbg5aWfLdvsau3eEn4EKeSQ
Sspl5mieo/XKljdqOugfaPRNdaK4BNv9Q/oX6gxXJ9jYacU5HhHwo8FekKXP+wbn
VNvB9sYdzp/NaAlPjQE71e/jdQHMA74ETb3duV3fjaWCPehnxX0iOWhBPfhPzM0O
RerC+6rCoYEJoD30jHuYDPB029Z/jdU0Y6BUCWt03MSG2M1bknsKxTcrYjRJFJ+V
Rzrnh34iRwTU5sBwoevG6oI6aojHSjXY9aY4sfHmttVbkpPbVpEVpyO8/QRaysBI
0r908qY3Q1GjTBX8iNKiGyp4E0DUbtVBb7oki/7X7ZR7klSuM2jyRt+Fj7OlQCsA
4NMB3iXwMODo/OwAQ1AYVdF0j6vl+auwxo9gDMcrlHstNRehOGI=
=hF9U
-----END PGP SIGNATURE-----
Stephen Hutchinson Feb. 17, 2022, 12:55 a.m. UTC | #13
On 2/16/22 1:25 PM, Helmut K. C. Tessarek wrote:
> 
> On 2022-02-16 02:37, Stephen Hutchinson wrote:
>> There is another option, basically what Gyan suggested earlier: grab the
>> release build of 3.7.1, fetch the extra headers from the Github repo,
>> then copy either all the contents of the tarball's /usr directory into
>> the system /usr directory (or wherever your working ${prefix} is), or
>> just the 'avisynth' directory into ${prefix}/include.  Then try FFmpeg
>> again.
> 
> This does not work. I compile static binaries. The filesonly tarball only
> has dylibs.
> 
> As I mentioned nefore:. 3 days ago everything worked fine. Now the ffmpeg
> builds are broken and I can no longer compile ffmpeg.
> 
> Is there any chancf you can add something to make it work again with 3.5.1
> which compiled withtout issues on macOS 10.14 and which I've been using
> since it was released.
> 
> 

FFmpeg dlopens AviSynth, it only needs the headers and doesn't try to 
link it.  It has never linked to AviSynth.

If 3.5.1 is working (and by that I assume you mean you're opening a 
Version() script in FFplay and it's showing you the video clip with the 
version and copyright information), then libavisynth.dylib is somewhere 
on your DYLD_LIBRARY_PATH, and you could just as easily set 
DYLD_LIBRARY_PATH to the /usr/lib directory in the -filesonly package 
and that Version() script will start reporting 3.7.1 instead.

After fetching the extra headers in that sequence of commands, copy the 
fixed-up /usr/include/avisynth in the -filesonly package to wherever it 
is on your system you point FFmpeg's configure to to see AviSynth's 
headers, whether that's the default /usr/local/include or /usr/include 
or somewhere in your build root.  You can completely omit copying the 
.dylibs and it won't care.

At this point, just use latest git, since that's where the HEADERS_ONLY 
fix resides:
git clone https://github.com/AviSynth/AviSynthPlus
cd AviSynthPlus
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=${TARGET} -DHEADERS_ONLY=ON ../
make VersionGen install

And HEADERS_ONLY is exactly what it says on the tin: it only sets CMake 
to install the headers, and stops it from building the library, which 
wouldn't get linked to anyway.

This all did expose a major problem with the version detection inside 
the frame properties initialization area in the demuxer, so that check 
needs to be simplified and not try to be so clever.  Between 
HEADERS_ONLY from AviSynth+-git and the simplifying patch*, which I'll 
need to push sometime in the next day or so, that should completely 
resolve the problem.

*http://ffmpeg.org/pipermail/ffmpeg-devel/2022-February/293128.html
Helmut K. C. Tessarek Feb. 17, 2022, 10:19 p.m. UTC | #14
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512



On 2022-02-16 19:55, Stephen Hutchinson wrote:
> FFmpeg dlopens AviSynth, it only needs the headers and doesn't try to
> link it.  It has never linked to AviSynth.

This I find strange. dlopen is rather useless when you create static
binaries unless you want to ship X diffreent dylibs or SOs with the binary.

There's also no static version of frei0r. Very annoying.

> If 3.5.1 is working (and by that I assume you mean you're opening a
> Version() script in FFplay and it's showing you the video clip with the
> version and copyright information), then libavisynth.dylib is somewhere
> on your DYLD_LIBRARY_PATH, and you could just as easily set
> DYLD_LIBRARY_PATH to the /usr/lib directory in the -filesonly package and
> that Version() script will start reporting 3.7.1 instead.

It's definitely not working, since I don't ship any dylibs. I always thought
3.5.1 li9nked a static lib, but I checked. It does not.

Even if I wanted to I couldn't ship any dylibs, since I can't build
AviSynthPlus on macOS 10.14.

> At this point, just use latest git, since that's where the HEADERS_ONLY
> fix resides: And HEADERS_ONLY is exactly what it says on the tin: it only
> sets CMake to install the headers, and stops it from building the
> library, which wouldn't get linked to anyway.

Ok, this worked. I was able to compile ffmpeg again. At least now I know
that avisynth won't work with static banaries unless people install dylibs
themselves.

- -- 
regards Helmut K. C. Tessarek              KeyID 0x172380A011EF4944
Key fingerprint = 8A55 70C1 BD85 D34E ADBC 386C 1723 80A0 11EF 4944

/*
   Thou shalt not follow the NULL pointer for chaos and madness
   await thee at its end.
*/
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEE191csiqpm8f5Ln9WvgmFNJ1E3QAFAmIOyeMACgkQvgmFNJ1E
3QDS7g//VMqsrxTK7uC/N65ydY4MvEOhqZJcAJqTtmyDStqWrgLOr1zeTutu359I
G3ah7M9/BYnZVwiVDypLgvRBNLR9F7bgv4CdG+VaV2M5Ljuv8yqiLG4ohbY6BcC3
6Da+CV2X7ylDunnGuI+jFQ2+E/DrP6lJRvMweotsLZvluTU3PCGNIpOHxt6SLq1S
eN9V9UluOZT/+YYk4XOWiWpYucDBvZbRUCfcZtckKESRwpRrZCMRO9ExJXdRvNRr
gyy0EIIDqAHhoEyP7RkadFuHOco4Beppalru4+UEvSwWae2B2pr8pwfFh8RUvXk6
75SNWOzfQoyndvEQR4jDv3PLFswWMv8upeGoGJHsb0NcOY31Uk0Y58kMzbzDC/eT
uK8Jp5+5Gx+uOG8k/dvKQK5TllnelApSFaVbyeuzrcRnphVi6ad6OtdSPBaWKjdD
BljKMkAr/plpCsfuJ9THdXIo3Q0qwoXC4l/fL8Q35uiqYcOOa8Ax/FePe/srMDnp
vxtDBBzo+8nA2305OUtErEAq0XhgCnSvOyfzoXx4fWxF39N15tU2VKTDoPAkjx9A
5dx/753wos5HewC5WeESzKCALXWu5l9r/sV/Jih8rf+8YXzJweMjso+Ca2B8e7bv
2nWvPMAcqtByklBnsVpkV3QTGDaxb2c1E4XhEoTchKjVKeFzrQo=
=5yaK
-----END PGP SIGNATURE-----
Stephen Hutchinson Feb. 18, 2022, 12:21 a.m. UTC | #15
On 2/17/22 5:19 PM, Helmut K. C. Tessarek wrote:
> 
> It's definitely not working, since I don't ship any dylibs. I always thought
> 3.5.1 li9nked a static lib, but I checked. It does not.
> 
> Even if I wanted to I couldn't ship any dylibs, since I can't build
> AviSynthPlus on macOS 10.14.
> 

It's really the same situation as Windows: users get the FFmpeg build 
from whoever builds it with AviSynth support enabled, and if they want 
to use that functionality, they can install the official release of 
AviSynth+ that we provide upstream.  The .dll situation on Windows is 
one of several reasons for the use of dlopen, as well.

That's why with 3.7.0 I started providing macOS builds in the releases 
in both installer .pkg and -filesonly tarball form, since I know some 
people prefer doing it that way.
diff mbox series

Patch

diff --git a/configure b/configure
index 493493b4c5..544d341b49 100755
--- a/configure
+++ b/configure
@@ -6508,7 +6508,9 @@  for func in $COMPLEX_FUNCS; do
 done
 
 # these are off by default, so fail if requested and not available
-enabled avisynth          && require_headers "avisynth/avisynth_c.h"
+enabled avisynth          && { require_headers "avisynth/avisynth_c.h avisynth/avs/version.h" &&
+                               { test_cpp_condition avisynth/avs/version.h "AVS_MAJOR_VER >= 3 && AVS_MINOR_VER >= 7 && AVS_BUGFIX_VER >= 1 || AVS_MAJOR_VER >= 3 && AVS_MINOR_VER > 7 || AVS_MAJOR_VER > 3" ||
+                                 die "ERROR: AviSynth+ header version must be >= 3.7.1"; } }
 enabled cuda_nvcc         && { check_nvcc cuda_nvcc || die "ERROR: failed checking for nvcc."; }
 enabled chromaprint       && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint
 enabled decklink          && { require_headers DeckLinkAPI.h &&