obsproject / obs-studio

OBS Studio - Free and open source software for live streaming and screen recording
https://obsproject.com
GNU General Public License v2.0
58.5k stars 7.81k forks source link

Build Instructions for Fedora problem #7948

Closed phkahler closed 1 year ago

phkahler commented 1 year ago

Operating System Info

Other

Other OS

Fedora 36 and 37

OBS Studio Version

Other

OBS Studio Version (Other)

Master

OBS Studio Log URL

N/A

OBS Studio Crash Log URL

No response

Expected Behavior

Following the build on Linux instructions should work

Current Behavior

When installing packages, everything works except I get:

Error: Unable to find a match: libavcodec-devel libavdevice-devel

It's like these two packages do not exist. Has something changed since the instructions were written?

Steps to Reproduce

  1. Follow the building from source instructions on a fresh Fedora intstall
  2. The two packages can't be found

Anything else we should know?

No response

kkartaltepe commented 1 year ago

Update the wiki if the instructions are out of date. We dont use bugs for the wiki.

Fenrirthviti commented 1 year ago

Fedora build directions were created and are maintained by the community. If there is anything missing or packages have changed, please feel free to just edit the page.

phkahler commented 1 year ago

Update the wiki if the instructions are out of date. We dont use bugs for the wiki.

I can't. I don't know what the issue is, just that the packages don't seem to exist.

evanjarrett commented 1 year ago

@phkahler Can you try replacing them with: libavcodec-free-devel libavdevice-free-devel

phkahler commented 1 year ago

Getting closer. After a dnf update:

[phkahler@fedora build]$ sudo dnf install libavcodec-free-devel libavdevice-free-devel
Last metadata expiration check: 2:01:35 ago on Wed 21 Dec 2022 08:21:18 AM EST.
Error: 
 Problem 1: package libavcodec-free-devel-5.1.2-1.fc37.i686 requires libavcodec-free(x86-32) = 5.1.2-1.fc37, but none of the providers can be installed
  - conflicting requests
  - libavcodec-free-5.1.2-1.fc37.i686 has inferior architecture
  - package libavcodec-free-devel-5.1.2-1.fc37.x86_64 requires libavcodec-free(x86-64) = 5.1.2-1.fc37, but none of the providers can be installed
  - problem with installed package ffmpeg-libs-5.1.2-3.fc37.x86_64
  - package ffmpeg-libs-5.1.2-3.fc37.x86_64 conflicts with libavcodec-free provided by libavcodec-free-5.1.2-1.fc37.x86_64
 Problem 2: package libavdevice-free-devel-5.1.2-1.fc37.i686 requires libavdevice-free(x86-32) = 5.1.2-1.fc37, but none of the providers can be installed
  - conflicting requests
  - libavdevice-free-5.1.2-1.fc37.i686 has inferior architecture
  - package libavdevice-free-devel-5.1.2-1.fc37.x86_64 requires libavdevice-free(x86-64) = 5.1.2-1.fc37, but none of the providers can be installed
  - problem with installed package libavdevice-5.1.2-3.fc37.x86_64
  - package libavdevice-5.1.2-3.fc37.x86_64 conflicts with libavdevice-free provided by libavdevice-free-5.1.2-1.fc37.x86_64
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages)

@evanjarrett So I used that option --allowerasing and dnf completed. Then on to the CMAKE step in the build process I get:

[phkahler@fedora build]$ cmake -DENABLE_BROWSER=OFF -DENABLE_AJA=OFF -DENABLE_NEW_MPEGTS_OUTPUT=OFF ..
CMake Error at cmake/Modules/VersionConfig.cmake:33 (list):
  list index: 1 out of range (-1, 0)
Call Stack (most recent call first):
  CMakeLists.txt:4 (include)

-- OBS:  Application Version: 626dbd3c3 - Build Number: 3
CMake Warning at CMakeLists.txt:15 (project):
  VERSION keyword not followed by a value or was followed by a value that
  expanded to nothing.

-- Found FFmpeg: /usr/lib64/../lib64/libavcodec.so (found version "#define LIBAVCODEC_VERSION_MINOR  37;#define LIBAVCODEC_VERSION_MICRO 100.37.100") found components: avcodec avdevice avutil avformat 
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR)
Call Stack (most recent call first):
  /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake/Modules/FindCURL.cmake:182 (find_package_handle_standard_args)
  deps/file-updater/CMakeLists.txt:3 (find_package)

-- Configuring incomplete, errors occurred!
See also "/home/phkahler/projects/obs-studio/build/CMakeFiles/CMakeOutput.log".
phkahler commented 1 year ago

Progress. Several of the dependencies were not installed for some reason. Used CMake errors to install several packages and now I get:

-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
CMake Error at /usr/share/cmake/Modules/WriteBasicConfigVersionFile.cmake:43 (message):
  No VERSION specified for WRITE_BASIC_CONFIG_VERSION_FILE()
Call Stack (most recent call first):
  /usr/share/cmake/Modules/CMakePackageConfigHelpers.cmake:237 (write_basic_config_version_file)
  cmake/Modules/ObsHelpers.cmake:280 (write_basic_package_version_file)
  cmake/Modules/ObsHelpers_Linux.cmake:16 (_export_target)
  libobs/CMakeLists.txt:490 (export_target)

-- Configuring incomplete, errors occurred!
evanjarrett commented 1 year ago

It appears you installed the 32bit versions (.i686) of libavcodec-free-devel and libavdevice-free-devel. CMAKE wont use those, which is why it appears that they werent actually installed. You can use the fqdn of the package like dnf install libavdevice-free-devel-5.1.2-1.fc37.x86_64

=======================================

The other change I needed to make was installing ffmpeg-free-devel

vlc-devel and x264-devel come from the rpmfusion-free repo. so the wiki should be updated to make sure that is added first.

sudo dnf install \
  https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm

then the full install command i ran with the -free- changes

sudo dnf install \
        alsa-lib-devel \
        cmake \
        ffmpeg-free-devel \
        fontconfig-devel \
        freetype-devel \
        gcc \
        gcc-c++ \
        gcc-objc \
        git \
        glib2-devel \
        libavcodec-free-devel \
        libavdevice-free-devel \
        libcurl-devel \
        libdrm-devel \
        libglvnd-devel \
        libva-devel \
        libv4l-devel \
        libX11-devel \
        libXcomposite-devel \
        libXdamage \
        libXinerama-devel \
        libxkbcommon-devel \
        luajit-devel \
        make \
        mbedtls-devel \
        pciutils-devel \
        pipewire-devel \
        pulseaudio-libs-devel \
        python3-devel \
        qt6-qtbase-devel \
        qt6-qtbase-private-devel \
        qt6-qtsvg-devel \
        qt6-qtwayland-devel \
        speexdsp-devel \
        swig \
        systemd-devel \
        vlc-devel \
        wayland-devel \
        x264-devel

Here is report on fedora 37:

==============================================================================================================
 Package                       Arch        Version                                  Repository           Size
==============================================================================================================
Installing:
 alsa-lib-devel                x86_64      1.2.8-2.fc37                             updates             889 k
 cmake                         x86_64      3.25.1-1.fc37                            updates             6.8 M
 ffmpeg-free-devel             x86_64      5.1.2-1.fc37                             fedora              139 k
 fontconfig-devel              x86_64      2.14.1-2.fc37                            updates             164 k
 freetype-devel                x86_64      2.12.1-3.fc37                            fedora              895 k
 gcc-c++                       x86_64      12.2.1-4.fc37                            updates              13 M
 gcc-objc                      x86_64      12.2.1-4.fc37                            updates              10 M
 glib2-devel                   x86_64      2.74.1-2.fc37                            fedora              574 k
 libXcomposite-devel           x86_64      0.4.5-8.fc37                             fedora               15 k
 libXinerama-devel             x86_64      1.1.4-11.fc37                            fedora               13 k
 libavcodec-free-devel         x86_64      5.1.2-1.fc37                             fedora               75 k
 libavdevice-free-devel        x86_64      5.1.2-1.fc37                             fedora               20 k
 libcurl-devel                 x86_64      7.85.0-4.fc37                            updates             977 k
 libdrm-devel                  x86_64      2.4.114-1.fc37                           updates             173 k
 libglvnd-devel                x86_64      1:1.5.0-1.fc37                           fedora              161 k
 libv4l-devel                  x86_64      1.22.1-4.fc37                            updates              21 k
 libva-devel                   x86_64      2.16.0-1.fc37                            updates             126 k
 libxkbcommon-devel            x86_64      1.4.1-2.fc37                             fedora               65 k
 luajit-devel                  x86_64      2.1.0-0.25beta3.fc37                     fedora               82 k
 mbedtls-devel                 x86_64      2.28.1-1.fc37                            updates             316 k
 pciutils-devel                x86_64      3.9.0-2.fc37                             updates              34 k
 pipewire-devel                x86_64      0.3.63-1.fc37                            updates             179 k
 pulseaudio-libs-devel         x86_64      16.1-1.fc37                              fedora              456 k
 python3-devel                 x86_64      3.11.0-1.fc37                            fedora              269 k
 qt6-qtbase-devel              x86_64      6.4.1-1.fc37                             updates             3.6 M
 qt6-qtbase-private-devel      x86_64      6.4.1-1.fc37                             updates             998 k
 qt6-qtsvg-devel               x86_64      6.4.1-1.fc37                             updates              52 k
 qt6-qtwayland-devel           x86_64      6.4.1-1.fc37                             updates             411 k
 speexdsp-devel                x86_64      1.2.1-2.fc37                             fedora               17 k
 swig                          x86_64      4.0.2-18.fc37                            fedora              1.6 M
 systemd-devel                 x86_64      251.9-587.fc37                           updates             578 k
 vlc-devel                     x86_64      1:3.0.18-2.fc37                          rpmfusion-free      206 k
 wayland-devel                 x86_64      1.21.0-1.fc37                            fedora              147 k
 x264-devel                    x86_64      0.164-3.20220602gitbaee400f.fc37         rpmfusion-free       33 k

Outside of that, cmake instructions work correctly for me.

phkahler commented 1 year ago

@evanjarrett See my later comment above. I got all the packages installed, and now get that strange CMake error further down.

Edit: but yes, your new list of packages does not produce any errors with dnf so that should be updated on the wiki.

evanjarrett commented 1 year ago

its acting like it can't find the obs version number which should be printed in the first few lines of output

[evan@fedora build]$   cmake -DENABLE_BROWSER=OFF -DENABLE_AJA=OFF -DENABLE_NEW_MPEGTS_OUTPUT=OFF ..
CMake Warning (dev) at cmake/Modules/VersionConfig.cmake:94 (message):

  ******************************************************************************

    + OBS-Studio - Beta detected, OBS_VERSION is now: 29.0.0-beta3

  ******************************************************************************
Call Stack (most recent call first):
  CMakeLists.txt:4 (include)
This warning is for project developers.  Use -Wno-dev to suppress it.

-- OBS:  Application Version: 29.0.0-beta3 - Build Number: 1

Try deleting the entire build/* directory and run it again again. cmake will cache things it think it doesn't have to rebuild even if libraries change.

If that doesn't work, please provide the entire output of your cmake command. Perhaps I can find something in there that will help debug.

=========

As for the original issue of the package names, it appears I have found the appropriate list of installs. The reason I didn't catch them initially was I was using packages from negativo17 which doesn't require the -free- tags on the package names.

phkahler commented 1 year ago

The first lines of output are this:

[phkahler@fedora build]$ cmake -DENABLE_BROWSER=OFF -DENABLE_AJA=OFF -DENABLE_NEW_MPEGTS_OUTPUT=OFF ..
CMake Error at cmake/Modules/VersionConfig.cmake:33 (list):
  list index: 1 out of range (-1, 0)
Call Stack (most recent call first):
  CMakeLists.txt:4 (include)

-- OBS:  Application Version: 626dbd3c3 - Build Number: 26
CMake Warning at CMakeLists.txt:15 (project):
  VERSION keyword not followed by a value or was followed by a value that
  expanded to nothing.

-- The C compiler identification is GNU 12.2.1
-- The CXX compiler identification is GNU 12.2.1

I had not noticed this before. That's after deleting the build folder and recreating it. Doesn't that number increment each build? Where is it preserved? It this relevant?

Edit: It's stored in cmake/.CMakeBuildNumber

phkahler commented 1 year ago

Complete output after deleting the build number file and making a fresh build folder:

[phkahler@fedora build]$ cmake -DENABLE_BROWSER=OFF -DENABLE_AJA=OFF -DENABLE_NEW_MPEGTS_OUTPUT=OFF ..
CMake Error at cmake/Modules/VersionConfig.cmake:33 (list):
  list index: 1 out of range (-1, 0)
Call Stack (most recent call first):
  CMakeLists.txt:4 (include)

-- OBS:  Application Version: 626dbd3c3 - Build Number: 1
CMake Warning at CMakeLists.txt:15 (project):
  VERSION keyword not followed by a value or was followed by a value that
  expanded to nothing.

-- The C compiler identification is GNU 12.2.1
-- The CXX compiler identification is GNU 12.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenGL: /usr/lib64/libOpenGL.so   
-- Found FFmpeg: /usr/lib64/../lib64/libavcodec.so (found version "#define LIBAVCODEC_VERSION_MINOR  37;#define LIBAVCODEC_VERSION_MICRO 100.37.100") found components: avcodec avdevice avutil avformat 
-- Found CURL: /usr/lib64/libcurl.so (found version "7.85.0")  
-- Found Luajit: /usr/bin/../lib64/libluajit-5.1.so  
-- Found SWIG: /usr/bin/swig (found suitable version "4.0.2", minimum required is "3")  
-- OBS:  ENABLED    obslua
-- Found Luajit: /usr/lib64/libluajit-5.1.so  
-- OBS:  obs-scripting -> Luajit found.
-- Found Python: /usr/bin/python3.11 (found version "3.11.0") found components: Interpreter Development Development.Module Development.Embed 
-- OBS:  ENABLED    obspython
-- OBS:  obs-scripting -> Python 3.11.0 found.
-- OBS:  Jansson >=2.5 not found, building bundled version.
C compiler: GNU
-- Looking for include file endian.h
-- Looking for include file endian.h - found
-- Looking for include file fcntl.h
-- Looking for include file fcntl.h - found
-- Looking for include file sched.h
-- Looking for include file sched.h - found
-- Looking for include file unistd.h
-- Looking for include file unistd.h - found
-- Looking for include file sys/param.h
-- Looking for include file sys/param.h - found
-- Looking for include file sys/stat.h
-- Looking for include file sys/stat.h - found
-- Looking for include file sys/time.h
-- Looking for include file sys/time.h - found
-- Looking for include file sys/time.h
-- Looking for include file sys/time.h - found
-- Looking for close
-- Looking for close - found
-- Looking for getpid
-- Looking for getpid - found
-- Looking for gettimeofday
-- Looking for gettimeofday - found
-- Looking for open
-- Looking for open - found
-- Looking for read
-- Looking for read - found
-- Looking for sched_yield
-- Looking for sched_yield - found
-- Looking for include file stdint.h
-- Looking for include file stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of __int64
-- Check size of __int64 - failed
-- Check size of int64_t
-- Check size of int64_t - done
-- Check size of long long
-- Check size of long long - done
-- Check size of int32_t
-- Check size of int32_t - done
-- Check size of __int32
-- Check size of __int32 - failed
-- Check size of long
-- Check size of long - done
-- Check size of int
-- Check size of int - done
-- Check size of unsigned long
-- Check size of unsigned long - done
-- Check size of unsigned int
-- Check size of unsigned int - done
-- Check size of unsigned short
-- Check size of unsigned short - done
-- Check size of uint32_t
-- Check size of uint32_t - done
-- Check size of __uint32
-- Check size of __uint32 - failed
-- Check size of uint16_t
-- Check size of uint16_t - done
-- Check size of __uint16
-- Check size of __uint16 - failed
-- Check size of uint8_t
-- Check size of uint8_t - done
-- Check size of __uint8
-- Check size of __uint8 - failed
-- Check size of ssize_t
-- Check size of ssize_t - done
-- Check size of SSIZE_T
-- Check size of SSIZE_T - failed
-- Looking for strtoll
-- Looking for strtoll - found
-- Looking for strtoq
-- Looking for strtoq - found
-- Looking for _strtoi64
-- Looking for _strtoi64 - not found
-- Looking for include file locale.h
-- Looking for include file locale.h - found
-- Looking for localeconv
-- Looking for localeconv - found
-- Looking for setlocale
-- Looking for setlocale - found
-- Performing Test HAVE_INLINE
-- Performing Test HAVE_INLINE - Success
-- Performing Test HAVE___INLINE
-- Performing Test HAVE___INLINE - Success
-- Performing Test HAVE___INLINE__
-- Performing Test HAVE___INLINE__ - Success
-- Performing Test HAVE_SYNC_BUILTINS
-- Performing Test HAVE_SYNC_BUILTINS - Success
-- Performing Test HAVE_ATOMIC_BUILTINS
-- Performing Test HAVE_ATOMIC_BUILTINS - Success
-- Found X11: /usr/include   
-- Looking for XOpenDisplay in /usr/lib64/libX11.so;/usr/lib64/libXext.so
-- Looking for XOpenDisplay in /usr/lib64/libX11.so;/usr/lib64/libXext.so - found
-- Looking for gethostbyname
-- Looking for gethostbyname - found
-- Looking for connect
-- Looking for connect - found
-- Looking for remove
-- Looking for remove - found
-- Looking for shmat
-- Looking for shmat - found
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.0") 
-- XCB[XCB]: Found component XCB
-- Found XCB: /usr/lib64/libxcb.so  found components: XCB 
-- Found X11_XCB: /usr/lib64/libX11-xcb.so  
-- Found OpenGL: /usr/lib64/libOpenGL.so  found components: EGL 
-- Found Wayland: /usr/lib64/libwayland-client.so;/usr/lib64/libwayland-server.so;/usr/lib64/libwayland-egl.so;/usr/lib64/libwayland-cursor.so   
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE  
-- Found FFmpeg: /usr/lib64/libavformat.so (found version "#define LIBAVFORMAT_VERSION_MINOR  27;#define LIBAVFORMAT_VERSION_MICRO 100.27.100") found components: avformat avutil swscale swresample avcodec 
-- Found ZLIB: /usr/lib64/libz.so (found version "1.2.12") 
-- Performing Test HAVE_STDATOMIC
-- Performing Test HAVE_STDATOMIC - Success
-- OBS:  Qt version: 6
-- OBS:  -> PulseAudio found - audio monitoring enabled
-- Checking for modules 'gio-2.0;gio-unix-2.0'
--   Found gio-2.0, version 2.74.1
--   Found gio-unix-2.0, version 2.74.1
-- Found Gio: /usr/lib64/libgio-2.0.so  
-- Found Wayland: /usr/lib64/libwayland-client.so;/usr/lib64/libwayland-server.so;/usr/lib64/libwayland-egl.so;/usr/lib64/libwayland-cursor.so  found components: Client 
-- Found Xkbcommon: /usr/lib64/libxkbcommon.so  
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
CMake Error at /usr/share/cmake/Modules/WriteBasicConfigVersionFile.cmake:43 (message):
  No VERSION specified for WRITE_BASIC_CONFIG_VERSION_FILE()
Call Stack (most recent call first):
  /usr/share/cmake/Modules/CMakePackageConfigHelpers.cmake:237 (write_basic_config_version_file)
  cmake/Modules/ObsHelpers.cmake:280 (write_basic_package_version_file)
  cmake/Modules/ObsHelpers_Linux.cmake:16 (_export_target)
  libobs/CMakeLists.txt:490 (export_target)

-- Configuring incomplete, errors occurred!
See also "/home/phkahler/projects/obs-studio/build/CMakeFiles/CMakeOutput.log".
See also "/home/phkahler/projects/obs-studio/build/CMakeFiles/CMakeError.log".
phkahler commented 1 year ago

Is it relevant that I cloned the repo from my own fork on github?

evanjarrett commented 1 year ago

yes. the version is based on git tags, your clone doesn't have any tags. You should recursive clone from the main repo git clone --recursive https://github.com/obsproject/obs-studio.git you can add a new remote source to map it to your repo

git remote add <name> <url>
Fenrirthviti commented 1 year ago

I would prefer that troubleshooting for this take place outside of our issues page. Please use our forums or discord for further communication on this, and if there is an issue with the Fedora build directions, we welcome updates to fix it.