File mediastreamer2.spec of Package mediastreamer2

%define sobase  libmediastreamer2
#%%define sover   11
%define sover   %{nil}
%define enable_tests 0
Name:           mediastreamer2
Version:        5.3.1
# Fedora release look standard from OpenSUSE build service:
# Release:      <CI_CNT>.<B_CNT>
# Release:      %%{?release_prefix}.<CI_CNT>.<B_CNT>
# where rpm macro %%{release_prefix} is defined in spec file
# Normally it looks like:
# Release:      63.fc38 for Fedora packages which is scripted as:
# Release:      0%%{?dist}
# OpenSUSE build service allows for this variant:
# Release:      63.1.fc38
# Release:       <CI_CNT>.<B_CNT>%%{?dist}
#
# Add this to Project Config to tag Fedora packages with fcXX:
# ------------------------------
# # reset release name
# onepercentage%%if 0onepercentage%%{?fedora_version}
# Release: <CI_CNT>.<B_CNT> spec:<CI_CNT>.<B_CNT>twopercentage%%{?dist}
# onepercentage%%endif
# ------------------------------
Release:        0
Summary:        Audio/Video real-time streaming
License:        GPL-3.0-or-later
Group:          Productivity/Telephony/Utilities
URL:            https://linphone.org/technical-corner/mediastreamer2
Source:         https://gitlab.linphone.org/BC/public/mediastreamer2/-/archive/%{version}/%{name}-%{version}.tar.bz2
#Patch0:         mediastreamer2-00-fix-pkgconfig.patch
#Patch1:         fix-srtp2-linphone.patch
#Patch2:         fix-build-ffmpeg5.patch
#Patch2:         mediastreamer2-01-fix-build-ffmpeg5.patch
#BuildRequires:  bcmatroska2-devel >= 0.23.1
BuildRequires:  bcmatroska2-devel >= 5.3.5
BuildRequires:  broadvoice16-devel
BuildRequires:  cmake
BuildRequires:  doxygen
BuildRequires:  gawk
BuildRequires:  gcc-c++
BuildRequires:  graphviz
BuildRequires:  libyuv-devel
# Source code incompatible with system package:
# BuildRequires:  zxing-cpp-devel
%if 0%{?suse_version}
BuildRequires:  libgsm-devel
%else
BuildRequires:  gsm-devel
%endif
BuildRequires:  libjpeg-turbo >= 2.0.0
%if 0%{?fedora}
BuildRequires:  turbojpeg-devel
BuildRequires:  libsrtp-devel
%else
BuildRequires:  libsrtp2-devel
#BuildRequires:  libsrtp2-linphone-devel
%endif
BuildRequires:  libpcap-devel
#%%if 0%%{?suse_version}
#BuildRequires:  libsrtp2-devel
#%%else
#BuildRequires:  libsrtp-devel
#%%endif
BuildRequires:  libv4l-devel
BuildRequires:  libvpx-devel
BuildRequires:  libxml2-devel
BuildRequires:  pkgconfig
BuildRequires:  spandsp-devel
%if 0%{?suse_version}
BuildRequires:  sqlite3-devel
%else
BuildRequires:  libsqlite3x-devel
%endif
#BuildRequires:  pkgconfig(Qt5Core) >= 5.12
BuildRequires:  pkgconfig(Qt6Core)
#BuildRequires:  pkgconfig(Qt5Gui)
BuildRequires:  pkgconfig(Qt6Gui)
#BuildRequires:  pkgconfig(Qt5Quick)
BuildRequires:  pkgconfig(Qt6Quick)
BuildRequires:  vim
BuildRequires:  pkgconfig(alsa)
BuildRequires:  bctoolbox-devel >= 5.3.5
BuildRequires:  pkgconfig(bctoolbox) >= 5.3.0
BuildRequires:  bcg729-devel >= 1.1.1
BuildRequires:  pkgconfig(libbcg729)
BuildRequires:  bzrtp-devel >= 5.3.5
#BuildRequires:  pkgconfig(libbzrtp) >= 5.3.0
#%%if 0%%{?suse_version}
#BuildRequires:  libpostquantumcryptoengine-devel >= 5.2.0
#BuildRequires:  liboqs-devel => 0.7.1
#%%endif
BuildRequires:  pkgconfig(libpulse)
BuildRequires:  pkgconfig(libupnp)
BuildRequires:  pkgconfig(opus)
BuildRequires:  ortp-devel >= 5.3.5
#BuildRequires:  pkgconfig(ortp) >= 5.3.0
BuildRequires:  pkgconfig(speex)
BuildRequires:  pkgconfig(speexdsp)
BuildRequires:  pkgconfig(theora)
BuildRequires:  pkgconfig(x11)
BuildRequires:  pkgconfig(xext)
BuildRequires:  pkgconfig(xv)
BuildRequires:  libaom-devel
BuildRequires:  pkgconfig(aom)
%if 0%{?suse_version} >= 1500
BuildRequires:  libjpeg-devel >= 8.2.0
BuildRequires:  dav1d-devel
%endif
%if 0%{?fedora_version}
BuildRequires:  libdav1d-devel
%endif
BuildRequires:  pkgconfig(dav1d)
BuildRequires:  chrpath
BuildRequires:  pkgconfig(glew)
BuildRequires:  pkgconfig(glu)
#BuildRequires:  pkgconfig(libavcodec) >= 51.0.0
#BuildRequires:  pkgconfig(libswscale) >= 0.7.0

%description
Mediastreamer2 is a library to make audio and video real-time
streaming and processing. It is written in pure C and based upon the
oRTP library.

%package -n %{name}-plugins
Summary:        Mediastreamer2 plugins
Group:          System/Libraries
Provides:       %{name}-plugins = %{version}

%description -n %{name}-plugins
Mediastreamer2 plugins
- libmsqogl.so (Qt GL video plugin)

%package -n %{sobase}%{sover}
Summary:        Audio/video real-time streaming library, base part
Group:          System/Libraries

%description -n %{sobase}%{sover}
Mediastreamer2 is a library to make audio and video real-time
streaming and processing. It is written in pure C and based upon the
oRTP library.

%package doc
BuildArch:      noarch
Summary:        Documentation for the mediastreamer2 library
Group:          Documentation/HTML
Requires:       %{name} = %{version}

%description doc
Mediastreamer2 is a library to make audio and video real-time
streaming and processing. It is written in pure C and based upon the
oRTP library.

This package contains documentation files

%package devel
Summary:        Headers and libraries for the mediastreamer2 library
Group:          Development/Libraries/C and C++
Requires:       %{name} = %{version}
Requires:       %{sobase}%{sover} = %{version}
Requires:       bcmatroska2-devel
#%%if 0%%{?suse_version}
#Requires:  libpostquantumcryptoengine-devel >= 5.2.0
#Requires:  liboqs-devel => 0.7.1
#%%endif

%description devel
Mediastreamer2 is a library to make audio and video real-time
streaming and processing. It is written in pure C and based upon the
oRTP library.

This package contains header files and development libraries needed to
develop programs using the mediastreamer2 library.

%prep
%autosetup -N
#%%if 0%{?fedora} > 1
#%%patchN is deprecated (1 usages found), use %%patch N (or %%patch -P N)
#%%patch 0 -p1
#%%else
#%%patch 0 -p1
#%%endif
#%%patch1 -p1
#%%if 0%%{?suse_version} || 0%%{?fedora_version} < 36
# Patch to allow ffmpeg 5:
# No longer needed due to use of libaom
#if pkg-config --atleast-version 59.37.100 libavcodec; then
#%%patch 1 -p1
#fi
#%%else
#%%if 0%%{?fedora} > 1
#%%patch 1 -p1
#%%else
#%%patch 1 -p1
#%%endif
#%%endif

%build
#
# Zxing/ZXing fix (but source code incompatible with system package zxing:
#
# echo "Replace FindZxing.cmake so Zxing can be found"
# Method 1:
# find /home/abuild/rpmbuild/BUILD/%%{name}-%%{version}/cmake -name FindZxing.cmake -delete
# ls -al /home/abuild/rpmbuild/BUILD/%%{name}-%%{version}/cmake
# Method 2:
# cp -v /home/abuild/rpmbuild/SOURCES/FindZXing.cmake /home/abuild/rpmbuild/BUILD/%%{name}-%%{version}/cmake/FindZXing.cmake  
# cp -v /home/abuild/rpmbuild/SOURCES/FindZXing.cmake /home/abuild/rpmbuild/BUILD/%%{name}-%%{version}/cmake/FindZxing.cmake  
# Method 1 (continued):
# cp -v /home/abuild/rpmbuild/SOURCES/FindZXing.cmake /home/abuild/rpmbuild/SOURCES/FindZxing.cmake
# echo "Rename Zxing to ZXing in CMakeLists.txt"
# sed -i 's/Zxing/ZXing/g' /home/abuild/rpmbuild/BUILD/%%{name}-%%{version}/CMakeLists.txt
# echo "/home/abuild/rpmbuild/BUILD/%%{name}-%%{version}/CMakeLists.txt"
# echo "-----------------------------------"
# cat /home/abuild/rpmbuild/BUILD/%%{name}-%%{version}/CMakeLists.txt
# echo "-----------------------------------"
# ls -al /home/abuild/rpmbuild/SOURCES
#
#


export CFLAGS="%(echo %{optflags}) -fcommon -Wno-implicit-function-declaration"
export CXXFLAGS="$CFLAGS"
%cmake \
  -DCMAKE_MODULE_PATH="/home/abuild/rpmbuild/SOURCES" \
  -DCMAKE_SHARED_LINKER_FLAGS="-flto=auto -Wl,--as-needed -Wl,-z,now" \
  -DCMAKE_INSTALL_PREFIX=/usr \
%if 0%{?fedora}
  -DCMAKE_INSTALL_LIBDIR=lib64 \
%endif
%if %{enable_tests} == 0
  -DENABLE_TOOLS=OFF \
  -DENABLE_UNIT_TESTS=OFF \
%endif
  -DENABLE_STATIC=OFF \
  -DENABLE_QT_GL=YES \
  -DENABLE_FFMPEG=OFF \
  -DENABLE_STRICT=OFF
%cmake_build

%install
%if 0%{?fedora} > 0
  rm -f $HOME/.rpmmacros
  #export QA_RPATHS=$(( 0x0001|0x0002 ))
  export QA_RPATHS=$(( 0x0001|0x0002|0x0010 ))
%endif
%cmake_install

mkdir -p %{buildroot}%{_docdir}/%{name}/
mv -T %{buildroot}%{_datadir}/doc/%{name}-5.4.0/ \
  %{buildroot}%{_docdir}/%{name}/

%if %{enable_tests}
chrpath -d %{buildroot}%{_bindir}/mediastreamer2-mediastream 
chrpath -d %{buildroot}%{_bindir}/mediastreamer2-mkvstream 
chrpath -d %{buildroot}%{_bindir}/mediastreamer2-tester
%endif
#chrpath -d %%{buildroot}%%{_libdir}/%%{sobase}.so.%%{sover}*
chrpath -d %{buildroot}%{_libdir}/libmediastreamer2.so

%post -n %{sobase}%{sover} -p /sbin/ldconfig
%postun -n %{sobase}%{sover} -p /sbin/ldconfig

%files
%license LICENSE.txt
%if %{enable_tests}
%{_bindir}/mediastreamer2-mediastream
%{_bindir}/mediastreamer2-mkvstream
%endif

%files -n %{sobase}%{sover}
#%%{_libdir}/%%{sobase}.so.%%{sover}*
%{_libdir}/%{sobase}.so

%files doc
%doc README.md
%dir %{_docdir}/%{name}/
%doc %{_docdir}/%{name}/*

%files -n %{name}-plugins
%dir %{_libdir}/mediastreamer/plugins
%dir %{_libdir}/mediastreamer
%dir %{_datadir}/images/
%{_libdir}/mediastreamer/plugins/libmsqogl.so
%{_datadir}/images/nowebcamCIF.jpg

%files devel
%dir %{_includedir}/OpenGL
%dir %{_includedir}/OpenGL/EGL
%dir %{_includedir}/OpenGL/GLES2
%dir %{_includedir}/OpenGL/GLES3
%dir %{_includedir}/OpenGL/KHR
%{_includedir}/mediastreamer2/
%{_includedir}/OpenGL/EGL/egl.h
%{_includedir}/OpenGL/EGL/eglext.h
%{_includedir}/OpenGL/EGL/eglplatform.h
%{_includedir}/OpenGL/GLES2/gl2.h
%{_includedir}/OpenGL/GLES2/gl2ext.h
%{_includedir}/OpenGL/GLES2/gl2platform.h
%{_includedir}/OpenGL/GLES3/gl3.h
%{_includedir}/OpenGL/GLES3/gl31.h
%{_includedir}/OpenGL/GLES3/gl32.h
%{_includedir}/OpenGL/GLES3/gl3platform.h
%{_includedir}/OpenGL/KHR/khrplatform.h
%{_includedir}/OpenGL/LICENSE
%{_includedir}/OpenGL/README.md
%{_includedir}/OpenGL/angle_windowsstore.h
#%%{_libdir}/libmediastreamer.so
%if %{enable_tests}
%{_bindir}/mediastreamer2-tester
%{_datadir}/mediastreamer2-tester/
%endif
%{_datadir}/Mediastreamer2/
#%{_libdir}/pkgconfig/mediastreamer.pc
#%%{_libdir}/mediastreamer/
#%%{_libdir}/mediastreamer/plugins/
#%%{_libdir}/mediastreamer/plugins/libmsqogl.so

%changelog
openSUSE Build Service is sponsored by