Bug 268145 - multimedia/avidemux: fails to build if multimedia/ffnvcodec-headers installed: "ERROR: nvenc requested, but not all dependencies are satisfied: ffnvcodec"
Summary: multimedia/avidemux: fails to build if multimedia/ffnvcodec-headers installed...
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: --- Affects Only Me
Assignee: Thomas Zander
URL:
Keywords: patch
Depends on:
Blocks:
 
Reported: 2022-12-04 09:18 UTC by Vladimir Druzenko
Modified: 2022-12-08 21:41 UTC (History)
4 users (show)

See Also:
riggs: maintainer-feedback+


Attachments
Fix build with multimedia/ffnvcodec-headers installed and add option NVENC (2.60 KB, patch)
2022-12-05 10:23 UTC, Vladimir Druzenko
vvd: maintainer-approval?
Details | Diff
Update to 2.8.1 (59.61 KB, patch)
2022-12-05 16:44 UTC, Vladimir Druzenko
no flags Details | Diff
Update to 2.8.1 v2 (60.11 KB, patch)
2022-12-07 23:02 UTC, Vladimir Druzenko
vvd: maintainer-approval?
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Vladimir Druzenko freebsd_committer freebsd_triage 2022-12-04 09:18:50 UTC
multimedia/avidemux depends on gcc and require recompile after update gcc from 11 to 12.
([offtopic] also ports depends on gcc and require recompile: math/py-numpy math/suitesparse-umfpack math/suitesparse-cholmod math/suitesparse-colamd math/suitesparse-ccolamd math/suitesparse-camd math/suitesparse-amd math/suitesparse-config emulators/wine-proton emulators/wine-devel multimedia/x264 multimedia/avidemux-plugins multimedia/avidemux-qt5 multimedia/avidemux-cli math/openblas devel/kBuild)

=================================================================
Part of build log:
=================================================================
-- Checking for Bourne shell
-- *************************
-- Found Bourne shell

-- Configuring FFmpeg
CMake Error at /tmp/work/usr/ports/multimedia/avidemux/work/avidemux_2.7.8/cmake/admFFmpegBuild_helpers.cmake:282 (MESSAGE):
  configure returned <1>
Call Stack (most recent call first):
  /tmp/work/usr/ports/multimedia/avidemux/work/avidemux_2.7.8/cmake/admFFmpegBuild_native.cmake:61 (ADM_FF_BUILD_UNIX_STYLE)
  /tmp/work/usr/ports/multimedia/avidemux/work/avidemux_2.7.8/cmake/admFFmpegBuild.cmake:16 (include)
  CMakeLists.txt:95 (include)


CMake Error at /tmp/work/usr/ports/multimedia/avidemux/work/avidemux_2.7.8/cmake/admFFmpegBuild_helpers.cmake:283 (MESSAGE):
  configure output is <ERROR: nvenc requested, but not all dependencies are
  satisfied: ffnvcodec

  

  If you think configure made a mistake, make sure you are using the latest

  version from Git.  If the latest version fails, report the problem to the

  ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.

  Include the log file "ffbuild/config.log" produced by configure as this
  will help

  solve the problem.

  >
Call Stack (most recent call first):
  /tmp/work/usr/ports/multimedia/avidemux/work/avidemux_2.7.8/cmake/admFFmpegBuild_native.cmake:61 (ADM_FF_BUILD_UNIX_STYLE)
  /tmp/work/usr/ports/multimedia/avidemux/work/avidemux_2.7.8/cmake/admFFmpegBuild.cmake:16 (include)
  CMakeLists.txt:95 (include)


CMake Error at /tmp/work/usr/ports/multimedia/avidemux/work/avidemux_2.7.8/cmake/admFFmpegBuild_helpers.cmake:284 (MESSAGE):
  An error occured
Call Stack (most recent call first):
  /tmp/work/usr/ports/multimedia/avidemux/work/avidemux_2.7.8/cmake/admFFmpegBuild_native.cmake:61 (ADM_FF_BUILD_UNIX_STYLE)
  /tmp/work/usr/ports/multimedia/avidemux/work/avidemux_2.7.8/cmake/admFFmpegBuild.cmake:16 (include)
  CMakeLists.txt:95 (include)


-- Configuring incomplete, errors occurred!
See also "/tmp/work/usr/ports/multimedia/avidemux/work/.build/CMakeFiles/CMakeOutput.log".
*** Error code 1

Stop.
make[1]: stopped in /usr/ports/multimedia/avidemux
*** Error code 1

Stop.
make: stopped in /usr/ports/multimedia/avidemux

=================================================================
Part of "ffbuild/config.log":
=================================================================
/usr/local/bin/gcc12 -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -I/usr/local/include/ffnvcodec -O2 -pipe -march=core2 -fno-omit-frame-pointer -DLIBICONV_PLUG -fstack-protector-strong -Wl,-rpath=/usr/local/lib/gcc12 -fno-strict-aliasing -fmessage-length=0 -std=c11 -fomit-frame-pointer -fPIC -I/usr/local/include -pthread -I/usr/local/include -I/usr/local/include -pthread -I/usr/local/include -pthread -I/usr/local/include -pthread -I/usr/local/include -pthread -I/usr/local/include -I/usr/local/include -I/usr/local/include -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -flto -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=return-type -Werror=vla -Wformat -fdiagnostics-color=auto -Wmaybe-uninitialized -c -o /tmp/ffconf.jIirdfZs/test.o /tmp/ffconf.jIirdfZs/test.c
ERROR: nvenc requested, but not all dependencies are satisfied: ffnvcodec
Comment 1 Vladimir Druzenko freebsd_committer freebsd_triage 2022-12-04 10:49:46 UTC
Same error with DEFAULT_VERSIONS+=gcc=11 in make.conf.
Comment 2 Vladimir Druzenko freebsd_committer freebsd_triage 2022-12-04 10:50:24 UTC
        AMR            : on
        AOM            : on
        CLI            : on
        DCA            : on
        FAAC           : on
        FAAD           : on
        FDK            : on
        FONTCONFIG     : on
        FREETYPE       : on
        FRIBIDI        : on
        JACK           : off
        LAME           : on
        NLS            : on
        OPUS           : on
        OSS            : on
        PULSEAUDIO     : off
        QT5            : on
        TINYPY         : on
        TWOLAME        : on
        VAAPI          : on
        VAPOURSYNTH    : on
        VDPAU          : on
        VORBIS         : on
        VPX            : on
        X264           : on
        X265           : on
        XVID           : on
        XVIDEO         : on
Comment 3 Vladimir Druzenko freebsd_committer freebsd_triage 2022-12-04 10:53:12 UTC
Same error with all options off.
Comment 4 Lorenzo Salvadore freebsd_committer freebsd_triage 2022-12-04 20:55:43 UTC
I am the maintainer of the GCC ports. For the last few updates of GCC default version it has been avoided to bump PORTREVISIONs of dependent ports as it was observed that things continued to work fine without it: the rationale of this choice is to reduce the number of ports recompilations for users installing software through ports. If things are now broken I will of course change strategy and go back to bumping PORTREVISIONs as it used to be done.

However, please note that according to FreshPorts (https://www.freshports.org/lang/gcc12/), only three ports depend at runtime on GCC 12, and none of them are in your list. All ports you listed use GCC only at build time. Then, while it is still possible that something breaks without PORTREVISION bumping, it is quite unlikely, at least for the ports in your list.

So I am unsure there is a relation between GCC default version update and the build error you received. This is even more unlikely since according to your comment #1 you still get the same error with DEFAULT_VERSIONS+=gcc=11.
Comment 5 Gerald Pfeifer freebsd_committer freebsd_triage 2022-12-04 21:21:33 UTC
I believe I still have the tools around to for the massive PORTREVISION
bump associated with GCC_DEFAULT update and could do that.

Note that, as Lorenzo explained, if done to the fullest of extents we
are looking at thousands and thousands of ports and it has not been
necessary for the last few updates.
Comment 6 Vladimir Druzenko freebsd_committer freebsd_triage 2022-12-04 21:35:33 UTC
(In reply to Lorenzo Salvadore from comment #4)
$ pkg info -r gcc11
gcc11-11.3.0_5:
        py310-numpy-1.23.5,1
        suitesparse-umfpack-6.0.1
        suitesparse-cholmod-4.0.1
        suitesparse-amd-3.0.0
        suitesparse-camd-3.0.0
        suitesparse-ccolamd-3.0.0
        suitesparse-colamd-3.0.0
        suitesparse-config-6.0.1
        wine-proton-7.0.4
        wine-devel-7.21,1
        x264-0.164.3095
        avidemux-plugins-2.7.8_3
        avidemux-qt5-2.7.8_1
        avidemux-cli-2.7.8_1
        avidemux-2.7.8_1
        openblas-0.3.20,1
        gcc-11_4
        kBuild-0.1.9998_14

On other host with replaced gcc11 with gcc12:
$ pkg info -r gcc12
gcc12-12.2.0_5:
        avidemux-plugins-2.7.8_3
        avidemux-qt5-2.7.8_1
        avidemux-cli-2.7.8_1
        kBuild-0.1.9998_14
        x264-0.164.3095
        wine-devel-7.21,1
        wine-proton-7.0.4
        py310-numpy-1.23.5,1
        suitesparse-umfpack-6.0.1
        suitesparse-cholmod-4.0.1
        suitesparse-colamd-3.0.0
        suitesparse-ccolamd-3.0.0
        suitesparse-camd-3.0.0
        suitesparse-amd-3.0.0
        suitesparse-config-6.0.1
        openblas-0.3.20,1
        gcc-12_4
$ pkg check -d
Checking all packages: 100%
avidemux has a missing dependency: gcc11

Maybe they can work with gcc12 without recompile, but dependency still from gcc11.
And "fails to build" is here…
Comment 7 Gerald Pfeifer freebsd_committer freebsd_triage 2022-12-04 21:40:51 UTC
See "git show ea8c8ec7da96df12146a2cc428077258141791cf" for what I 
believe is the last PORTREVISION bump we did for a GCC version update.
Comment 8 Vladimir Druzenko freebsd_committer freebsd_triage 2022-12-04 21:49:52 UTC
(In reply to Gerald Pfeifer from comment #7)
I'm using portsnap.
Comment 9 Philipp Ost 2022-12-04 22:06:30 UTC
(In reply to VVD from comment #8)
See here: https://cgit.freebsd.org/ports/commit/?id=ea8c8ec7da96df12146a2cc428077258141791cf
Comment 10 Lorenzo Salvadore freebsd_committer freebsd_triage 2022-12-04 22:25:09 UTC
(In reply to VVD from comment #6)

The argument about dependencies according to pkg info might be a good point for bumping PORTREVISIONs again, however Gerald has shown in comment #7 how complex the operation is. I would still refrain from bumping again at least until we find something which is really broken. And even then, we could just bump a few PORTREVISIONs to fix such issues.

> And "fails to build" is here…

Nothing suggests that this depends on GCC except the recent update from 11 to 12. You have already explained that you still get the error by enforcing GCC 11 as default version and two exp-runs in PR #265948 did not find any issue in avidemux, so I still doubt that GCC is the problem here.

I would rather dig into the error message you get. It complains about nvenc. Is it possible that you have multimedia/ffmpeg installed on your system with the NVENC option OFF? Maybe try enabling it? Or install multimedia/ffnvcodec-headers?
Maybe multimedia/avidemux needs to implement an option to properly deal with nvenc?
Comment 11 Alex S 2022-12-04 22:57:42 UTC
(In reply to Lorenzo Salvadore from comment #10)

> multimedia/ffmpeg installed on your system with the NVENC option OFF?

It looks like avidemux builds a bundled copy of ffmpeg*, so
whatever we do with our ffmpeg port is not its concern.

As for the proud example of dumpster fire that is CMake,
I'm going to dodge the question by unsubscribing from this conversation.

* work/avidemux_2.7.8/avidemux_core/ffmpeg_package/ffmpeg-4.2.4.tar.bz2
Comment 12 Vladimir Druzenko freebsd_committer freebsd_triage 2022-12-04 23:06:37 UTC
(In reply to Lorenzo Salvadore from comment #10)
You are right - the reason this build fails is not in gcc.

Avidemux use embedded ffmpeg, not from ports.
I have multimedia/ffnvcodec-headers installed and after remove it avidemux build without errors.
Comment 13 Thomas Zander freebsd_committer freebsd_triage 2022-12-05 07:44:27 UTC
(In reply to VVD from comment #12)

Thanks for double-checking.

One more reason to use poudriere and build ports in a clean environment.
Comment 14 Vladimir Druzenko freebsd_committer freebsd_triage 2022-12-05 08:14:57 UTC
Ports must build without errors on real systems, not just in "greenhouse conditions".

I'll try to create bug report in upstream.
Comment 15 Vladimir Druzenko freebsd_committer freebsd_triage 2022-12-05 10:23:28 UTC
Created attachment 238535 [details]
Fix build with multimedia/ffnvcodec-headers installed and add option NVENC

This is the ffmpeg's build bug on the FreeBSD.
The multimedia/ffmpeg already have the patch for this bug in multimedia/ffmpeg/files/patch-configure:
@@ -6758,7 +6752,7 @@ if enabled x86; then

 if enabled x86; then
     case $target_os in
-        mingw32*|mingw64*|win32|win64|linux|cygwin*)
+        freebsd|mingw32*|mingw64*|win32|win64|linux|cygwin*)
             ;;
         *)
             disable ffnvcodec cuvid nvdec nvenc
Comment 16 Vladimir Druzenko freebsd_committer freebsd_triage 2022-12-05 16:44:56 UTC
Created attachment 238545 [details]
Update to 2.8.1

Or we can update to 2.8.1 (same patch included).
Comment 17 Vladimir Druzenko freebsd_committer freebsd_triage 2022-12-05 16:49:50 UTC
1st patch need this in multimedia/avidemux-plugins/pkg-plist:
 lib/ADM_plugins6/videoEncoders/libADM_ve_ffFlv1.so
 lib/ADM_plugins6/videoEncoders/libADM_ve_ffMpeg2.so
 lib/ADM_plugins6/videoEncoders/libADM_ve_ffMpeg4.so
+%%NVENC%%lib/ADM_plugins6/videoEncoders/libADM_ve_ffNvencH264.so
+%%NVENC%%lib/ADM_plugins6/videoEncoders/libADM_ve_ffNvencHEVC.so
 %%VAAPI%%lib/ADM_plugins6/videoEncoders/libADM_ve_ffVaEncH264.so
 %%VAAPI%%lib/ADM_plugins6/videoEncoders/libADM_ve_ffVaEncHEVC.so
Comment 18 Thomas Zander freebsd_committer freebsd_triage 2022-12-06 08:44:13 UTC
Thanks a lot for the patch, I'll take a look!


Regarding "Ports must build without errors on real systems", the TLDR is: I totally agree with you that they should.

The bad and the ugly is: Sadly, it is an unrealistic expectation that we will achieve this in the foreseeable future. Pretty much the entire world has decided that automagical detection of stuff during build and procedures like `curl <some URL > | sudo bash` are the greatest software engineering ideas since bread came sliced. Port/package maintainers are suffering everywhere because of it, so sooner or later ~every OS community derives some build automation framework that works around this crap by leveraging defined, minimal build environments. Because that scales much better than trying to educate tens of thousands of upstream projects to abandon the automagic crap they love so much. Ultimately that is the reason why in FreeBSD land we certainly will accept patches that fix builds in dirty environments, but it cannot be a hard requirement that a port must build in every conceivable permutation of other packages installed on the system. Hence, if there are problems, folks will ask for a poudriere build, as it gives us MUCH better reproducibility, especially considering the time available to maintainers. (Also it gives MUCH better peace of mind for the users compared to portmaster/portupgrade. Personally I really have a hard time understanding why anyone would use those today.)
Comment 19 Thomas Zander freebsd_committer freebsd_triage 2022-12-07 07:57:23 UTC
(In reply to VVD from comment #16)

Question regarding pulseaudio in your patch. Tripped by a plist error in avidemux-plugins, I noticed that it builds and installs libADM_av_pulseAudio.so (not the -Simple.so). Can you double-check whether this is the case in your environment too?
Comment 20 Vladimir Druzenko freebsd_committer freebsd_triage 2022-12-07 19:57:40 UTC
(In reply to Thomas Zander from comment #19)
Maybe.
I did't build with pulseaudio on (installed pulseaudio break my sound).
Comment 21 Vladimir Druzenko freebsd_committer freebsd_triage 2022-12-07 23:02:40 UTC
Created attachment 238617 [details]
Update to 2.8.1 v2

Fixed PULSEAUDIO option.
Comment 22 commit-hook freebsd_committer freebsd_triage 2022-12-08 21:40:35 UTC
A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/ports/commit/?id=2d011fa6c08eb8446dad1f92fc052557d5c71ec8

commit 2d011fa6c08eb8446dad1f92fc052557d5c71ec8
Author:     VVD <vvd@unislabs.com>
AuthorDate: 2022-12-06 19:22:09 +0000
Commit:     Thomas Zander <riggs@FreeBSD.org>
CommitDate: 2022-12-08 21:39:54 +0000

    multimedia/avidemux-* Update to upstream release 2.8.1

    Details:
    - Update to upstream release 2.8.1
    - Introduce NVENC OPTION for HW accelerated NVIDIA codecs

    PR:             268145
    Reported by:    VVD <vvd@unislabs.com>
    Reviewed by:    riggs

 multimedia/avidemux-cli/Makefile                   |   1 -
 multimedia/avidemux-cli/pkg-plist                  |   4 +-
 multimedia/avidemux-plugins/Makefile               |   2 -
 multimedia/avidemux-plugins/pkg-plist              |  62 +-
 multimedia/avidemux-qt5/Makefile                   |   1 -
 multimedia/avidemux-qt5/pkg-plist                  |  19 +-
 multimedia/avidemux/Makefile                       |   1 -
 multimedia/avidemux/Makefile.common                |  21 +-
 multimedia/avidemux/distinfo                       |   8 +-
 ...mux_core-ffmpeg_package-patches-configure.patch |  15 +-
 .../patch-cmake_admCheckAudioDeviceLibs.cmake      |   2 +-
 multimedia/avidemux/pkg-plist                      | 835 +++++++++++----------
 12 files changed, 527 insertions(+), 444 deletions(-)