Skip to content

Commit

Permalink
media-libs/mlt: Fix assignment from incompatible pointer type
Browse files Browse the repository at this point in the history
Closes: https://bugs.gentoo.org/936747
Signed-off-by: Brahmajit Das <[email protected]>
Closes: gentoo#37746
Signed-off-by: Andreas Sturmlechner <[email protected]>
  • Loading branch information
listout authored and a17r committed Aug 15, 2024
1 parent 14b697f commit 5a3dc5e
Show file tree
Hide file tree
Showing 2 changed files with 231 additions and 0 deletions.
54 changes: 54 additions & 0 deletions media-libs/mlt/files/mlt-7.24.0-musl-build-fix.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
https://github.com/mltframework/mlt/pull/1009
From: Brahmajit Das <[email protected]>
Date: Sat, 27 Jul 2024 14:51:47 +0000
Subject: [PATCH 1/1] Fix building on musl libc

Not every Linux distribution uses GLibc, hence the code under
```
\#if defined(__linux__) || defined(__GLIBC__)
```
is not evaluated properly on non GLibc Linux distributions resulting in
build errors such as:

```
/var/tmp/portage/media-libs/mlt-7.24.0/work/mlt-7.24.0/src/framework/mlt_properties.c: In function 'mlt_properties_set_lcnumeric':
/var/tmp/portage/media-libs/mlt-7.24.0/work/mlt-7.24.0/src/framework/mlt_properties.c:154:22: error: assignment to 'mlt_locale_t' {aka 'struct __locale_struct *'} from incompatible pointer type 'char *' [-Wincompatible-pointer-types]
154 | list->locale = strdup(locale);
| ^
/var/tmp/portage/media-libs/mlt-7.24.0/work/mlt-7.24.0/src/framework/mlt_properties.c: In function 'mlt_properties_get_lcnumeric':
/var/tmp/portage/media-libs/mlt-7.24.0/work/mlt-7.24.0/src/framework/mlt_properties.c:186:16: error: assignment to 'const char *' from incompatible pointer type 'mlt_locale_t' {aka 'struct __locale_struct *'} [-Wincompatible-pointer-types]
186 | result = list->locale;
| ^
[11/173] /usr/bin/x86_64-pc-linux-musl-gcc -DPREFIX_DATA=\"/usr/share/mlt-7\" -DPREFIX_LIB=\"/usr/lib/mlt-7\" -Dmlt_EXPORTS -I/var/tmp/portage/media-libs/mlt-7.24.0/work/mlt-7.24.0/src/framework/.. -O2 -march=x86-64 -pipe -pipe -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0 -std=gnu11 -fPIC -mmmx -msse -msse2 -MD -MT src/framework/CMakeFiles/mlt.dir/mlt_property.c.o -MF src/framework/CMakeFiles/mlt.dir/mlt_property.c.o.d -o src/framework/CMakeFiles/mlt.dir/mlt_property.c.o -c /var/tmp/portage/media-libs/mlt-7.24.0/work/mlt-7.24.0/src/framework/mlt_property.c
FAILED: src/framework/CMakeFiles/mlt.dir/mlt_property.c.o
/usr/bin/x86_64-pc-linux-musl-gcc -DPREFIX_DATA=\"/usr/share/mlt-7\" -DPREFIX_LIB=\"/usr/lib/mlt-7\" -Dmlt_EXPORTS -I/var/tmp/portage/media-libs/mlt-7.24.0/work/mlt-7.24.0/src/framework/.. -O2 -march=x86-64 -pipe -pipe -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0 -std=gnu11 -fPIC -mmmx -msse -msse2 -MD -MT src/framework/CMakeFiles/mlt.dir/mlt_property.c.o -MF src/framework/CMakeFiles/mlt.dir/mlt_property.c.o.d -o src/framework/CMakeFiles/mlt.dir/mlt_property.c.o -c /var/tmp/portage/media-libs/mlt-7.24.0/work/mlt-7.24.0/src/framework/mlt_property.c
/var/tmp/portage/media-libs/mlt-7.24.0/work/mlt-7.24.0/src/framework/mlt_property.c: In function 'time_clock_to_frames':
/var/tmp/portage/media-libs/mlt-7.24.0/work/mlt-7.24.0/src/framework/mlt_property.c:331:31: error: passing argument 2 of 'setlocale' from incompatible pointer type [-Wincompatible-pointer-types]
331 | setlocale(LC_NUMERIC, locale);
| ^~~~~~
| |
| mlt_locale_t {aka struct __locale_struct *}
In file included from /var/tmp/portage/media-libs/mlt-7.24.0/work/mlt-7.24.0/src/framework/mlt_property.h:34,
from /var/tmp/portage/media-libs/mlt-7.24.0/work/mlt-7.24.0/src/framework/mlt_property.c:28:
/usr/include/locale.h:55:23: note: expected 'const char *' but argument is of type 'mlt_locale_t' {aka 'struct __locale_struct *'}
55 | char *setlocale (int, const char *);
```

Reported on Gentoo Linux with musl libc.
Please refer bug: https://bugs.gentoo.org/936747 for more details.

Signed-off-by: Brahmajit Das <[email protected]>
--- a/src/framework/mlt_property.h
+++ b/src/framework/mlt_property.h
@@ -30,7 +30,7 @@
#include <sys/param.h>
#endif

-#if defined(__linux__) || defined(__GLIBC__)
+#if defined(__GLIBC__)
#include <locale.h>
typedef locale_t mlt_locale_t;
#elif defined(__APPLE__) || (defined(__FreeBSD_version) && __FreeBSD_version >= 900506)
--
2.45.2

177 changes: 177 additions & 0 deletions media-libs/mlt/mlt-7.24.0-r1.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

PYTHON_COMPAT=( python3_{10..12} )
inherit python-single-r1 cmake flag-o-matic

DESCRIPTION="Open source multimedia framework for television broadcasting"
HOMEPAGE="https://www.mltframework.org/"
SRC_URI="https://github.com/mltframework/${PN}/releases/download/v${PV}/${P}.tar.gz"

LICENSE="GPL-3"
SLOT="0/7"
KEYWORDS="~amd64 ~arm64 ~ppc64 ~riscv ~x86 ~amd64-linux ~x86-linux"
IUSE="debug ffmpeg frei0r gtk jack libsamplerate opencv opengl python qt5 qt6 rtaudio rubberband sdl test vdpau vidstab xine xml"

REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"

# Needs unpackaged 'kwalify'
RESTRICT="test"

# rtaudio will use OSS on non linux OSes
# Qt already needs FFTW/PLUS so let's just always have it on to ensure
# MLT is useful: bug #603168.
DEPEND="
>=media-libs/libebur128-1.2.2:=
sci-libs/fftw:3.0=
ffmpeg? ( media-video/ffmpeg:0=[vdpau?] )
frei0r? ( media-plugins/frei0r-plugins )
gtk? (
media-libs/libexif
x11-libs/pango
)
jack? (
>=dev-libs/libxml2-2.5
media-libs/ladspa-sdk
virtual/jack
)
libsamplerate? ( >=media-libs/libsamplerate-0.1.2 )
opencv? ( >=media-libs/opencv-4.5.1:=[contrib] )
opengl? (
media-libs/libglvnd
media-video/movit
)
python? ( ${PYTHON_DEPS} )
qt5? (
dev-qt/qtcore:5
dev-qt/qtgui:5
dev-qt/qtnetwork:5
dev-qt/qtsvg:5
dev-qt/qtwidgets:5
dev-qt/qtxml:5
media-libs/libexif
x11-libs/libX11
)
qt6? (
dev-qt/qt5compat:6
dev-qt/qtbase:6[gui,network,opengl,widgets,xml]
dev-qt/qtsvg:6
media-libs/libexif
x11-libs/libX11
)
rtaudio? (
>=media-libs/rtaudio-4.1.2
kernel_linux? ( media-libs/alsa-lib )
)
rubberband? ( media-libs/rubberband )
sdl? (
media-libs/libsdl2[X,opengl,video]
media-libs/sdl2-image
)
vidstab? ( media-libs/vidstab )
xine? ( >=media-libs/xine-lib-1.1.2_pre20060328-r7 )
xml? ( >=dev-libs/libxml2-2.5 )
"
# java? ( >=virtual/jre-1.8:* )
# perl? ( dev-lang/perl )
# php? ( dev-lang/php )
# ruby? ( ${RUBY_DEPS} )
# sox? ( media-sound/sox )
# tcl? ( dev-lang/tcl:0= )
RDEPEND="${DEPEND}"
BDEPEND="
virtual/pkgconfig
python? ( >=dev-lang/swig-2.0 )
"

DOCS=( AUTHORS NEWS README.md )

PATCHES=(
# downstream
"${FILESDIR}"/${PN}-6.10.0-swig-underlinking.patch
"${FILESDIR}"/${PN}-6.22.1-no_lua_bdepend.patch
"${FILESDIR}"/${PN}-7.0.1-cmake-symlink.patch
"${FILESDIR}"/${PN}-7.24.0-musl-build-fix.patch
)

pkg_setup() {
use python && python-single-r1_pkg_setup
}

src_prepare() {
# Respect CFLAGS LDFLAGS when building shared libraries. Bug #308873
if use python; then
sed -i "/mlt.so/s/ -lmlt++ /& ${CFLAGS} ${LDFLAGS} /" src/swig/python/build || die
python_fix_shebang src/swig/python
fi

cmake_src_prepare
}

src_configure() {
# Workaround for bug #919981
append-ldflags $(test-flags-CCLD -Wl,--undefined-version)

local mycmakeargs=(
-DCMAKE_SKIP_RPATH=ON
-DCLANG_FORMAT=OFF
-DGPL=ON
-DGPL3=ON
-DBUILD_TESTING=$(usex test)
-DMOD_KDENLIVE=ON
-DMOD_SDL1=OFF
-DMOD_SDL2=$(usex sdl)
-DMOD_AVFORMAT=$(usex ffmpeg)
-DMOD_PLUS=ON
-DMOD_FREI0R=$(usex frei0r)
-DMOD_GDK=$(usex gtk)
-DMOD_JACKRACK=$(usex jack)
-DMOD_RESAMPLE=$(usex libsamplerate)
-DMOD_OPENCV=$(usex opencv)
-DMOD_SPATIALAUDIO=OFF # TODO: package libspatialaudio
-DMOD_MOVIT=$(usex opengl)
-DMOD_QT=$(usex qt5)
-DMOD_GLAXNIMATE=$(usex qt5)
-DMOD_QT6=$(usex qt6)
-DMOD_GLAXNIMATE_QT6=$(usex qt6)
-DMOD_RTAUDIO=$(usex rtaudio)
-DMOD_RUBBERBAND=$(usex rubberband)
-DMOD_VIDSTAB=$(usex vidstab)
-DMOD_XINE=$(usex xine)
-DMOD_XML=$(usex xml)
-DMOD_SOX=OFF
)

# TODO: rework upstream CMake to allow controlling MMX/SSE/SSE2
# TODO: add swig language bindings?
# see also https://www.mltframework.org/twiki/bin/view/MLT/ExtremeMakeover

if use python; then
mycmakeargs+=(
-DSWIG_PYTHON=ON
-DPython3_EXECUTABLE="${PYTHON}"
)
fi

cmake_src_configure
}

src_install() {
cmake_src_install

insinto /usr/share/${PN}
doins -r demo

#
# Install SWIG bindings
#

docinto swig

if use python; then
dodoc "${S}"/src/swig/python/play.py
python_optimize
fi
}

0 comments on commit 5a3dc5e

Please sign in to comment.