File carla.spec of Package carla

#
# spec file for package carla
#
# Copyright (c) 2019 Giordano Boschetti, GeekosDAW.
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%define __provides_exclude_from ^%{_libdir}/carla/jack/.*.so.0$

Name:           carla
Version:        2.5.10+git.20250816
Release:        0
Summary:        An audio plugin host
License:        GPL-2.0-or-later
Group:          Productivity/Multimedia/Sound/Utilities
#ExclusiveArch:  x86_64
Url:            http://kxstudio.linuxaudio.org/Applications:Carla
Source:         https://github.com/falkTX/Carla/archive/refs/tags/v%{version}.tar.gz#/Carla-%{version}.tar.xz
Patch2:         0002-Remove-rpath-from-.pc-files.patch
BuildRequires:  gcc gcc-c++
BuildRequires:  fdupes
BuildRequires:  python-rpm-macros
BuildRequires:  file-devel
%if 0%{?suse_version} > 1600
BuildRequires:  pkgconfig(Qt6Core)
BuildRequires:  python3-PyQt6-devel
BuildRequires:  ffmpeg-7-libavdevice-devel
Requires:       python3-PyQt6
%else
BuildRequires:  python3-qt5-devel
Requires:       python3-qt5
%endif
BuildRequires:  python3-devel
BuildRequires:  python3-rdflib
BuildRequires:  libgobject-2_0-0
BuildRequires:  update-desktop-files
BuildRequires:  ffmpeg-devel
BuildRequires:  pkgconfig(alsa)
BuildRequires:  pkgconfig(flac)
BuildRequires:  pkgconfig(libpulse)
BuildRequires:  pkgconfig(sndfile)
BuildRequires:  pkgconfig(vorbisenc)
BuildRequires:  pkgconfig(xext)
BuildRequires:  pkgconfig(freetype2)
# for extra native plugins
BuildRequires:  non-ntk-devel
BuildRequires:  non-ntk-fluid
BuildRequires:  pkgconfig(fftw3f)
BuildRequires:  pkgconfig(gl)
BuildRequires:  pkgconfig(liblo)
BuildRequires:  pkgconfig(mxml)
BuildRequires:  pkgconfig(zlib)
# for plugin GUIs
BuildRequires:  pkgconfig(gtk+-2.0)
BuildRequires:  pkgconfig(gtk+-3.0)
BuildRequires:  libqt5-qtbase-devel
BuildRequires:  pkgconfig(x11)
# for extra samplers support
BuildRequires:  libfluidsynth-devel
Requires:       python3-pyliblo3

%description
Carla is an audio plugin host, with support for many audio drivers
and plugin formats. It features automation of parameters via MIDI CC
and full OSC control. It currently supports LADSPA, DSSI, LV2, VST2/3
and AU plugin formats, plus GIG, SF2 and SFZ sounds banks.
THIS BUILD add carla-bridges package for supports bridging Window plugins using Wine.

%package devel
Summary:        Header files to access Carla's API
Group:          Development/Libraries/C and C++
BuildRequires:  pkg-config

%description devel
This package contains header files needed when writing software using
Carla's several APIs.

%package -n vst-%{name}
Summary:        CarlaRack and CarlaPatchbay VST plugins
Group:          Productivity/Multimedia/Sound/Utilities
Requires:       %{name}%{?_isa} = %{version}-%{release}

%description -n vst-%{name}
This package contanis Carla VST plugins, including CarlaPatchbayFX,
CarlaPatchbay, CarlaRackFX, and CarlaRack.

%package -n lv2-%{name}
Summary: CarlaRack and CarlaPatchbay VST pluginsLV2 plugin
Group:          Productivity/Multimedia/Sound/Utilities
Requires:       %{name}%{?_isa} = %{version}-%{release}

%description -n lv2-%{name}
This package contains the Carla LV2 plugin.

%ifarch x86_64
%package bridges
Summary: Bridges with support for Windows VST 64bit via wine
Group:          Productivity/Multimedia/Sound/Utilities
# for wine bridges
BuildRequires:  wine-devel
BuildRequires:  mingw64-cross-gcc
BuildRequires:  mingw64-cross-gcc-c++
Requires:       wine
Requires:       %{name}%{?_isa} = %{version}-%{release}

%description bridges
Bridges with support for Windows VST 64bit via wine

%package bridges-32bit
ExcludeArch:    aarch64 i586
Summary: Bridges with support for Linux 32bit VST and Windows VST 32bit via wine
Group:          Productivity/Multimedia/Sound/Utilities
# for wine bridges
BuildRequires:  wine-devel-32bit
BuildRequires:  mingw32-cross-gcc
BuildRequires:  mingw32-cross-gcc-c++
BuildRequires:  glibc-devel-32bit
BuildRequires:  gcc-c++-32bit gcc-32bit
BuildRequires:  libX11-devel-32bit
BuildRequires:  freetype2-devel-32bit
BuildRequires:  libXext-devel-32bit
Requires:       wine-32bit
Requires:       %{name}%{?_isa} = %{version}-%{release}
%description bridges-32bit
Bridges with support for Linux 32bit VST and Windows VST 32bit via wine
%endif

%prep
%autosetup -p1 -n Carla-%{version}
%ifarch x86_64 aarch64
sed -i -e 's/\"lib\"/\"lib64\"/' data/carla-single
sed -i -e 's#/usr/lib#/usr/lib64#' source/frontend/carla_shared.py
sed -i -e 's#/usr/lib#/usr/lib64#' source/frontend/carla_widgets.py
%endif

%build
#remove -m64 from the build
%define optflags -O2 -Wall -D_FORTIFY_SOURCE=2 -funwind-tables -fasynchronous-unwind-tables -Werror=return-type -flto=auto
export CXXFLAGS="%{optflags}"
export CFLAGS="%{optflags}"
%if 0%{?debugbuild} == 1
export DEBUG=true
%endif

# list build configuration, no need for optflags or -j
EXTERNAL_PLUGINS=true make features

EXTERNAL_PLUGINS=true make %{?_smp_mflags}\
%ifnarch %ix86 x86_64
	BASE_OPTS= \
%endif
	--trace
# build native bridge 32bit
%ifarch x86_64
make %{?_smp_mflags} posix32
%endif

export CXXFLAGS="-fno-stack-protector"

%ifarch x86_64
make --trace win32 CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ LIBDIR=%{_libdir} CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" LDFLAGS="-Wl,--no-insert-timestamp"
make --trace win64 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ LIBDIR=%{_libdir} CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" LDFLAGS="-Wl,--no-insert-timestamp"
make --trace wine32 LIBDIR=%{_libdir} CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" LDFLAGS="-L/usr/lib/wine"
make --trace wine64 LIBDIR=%{_libdir} CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" LDFLAGS="-L%{_libdir}/wine"
%endif

export JACKBRIDGE_FLAGS="-D__WIDL_objidl_generated_name_0000000C="
unset LDFLAGS

%install
make install DESTDIR=%{buildroot} PREFIX="%{_prefix}" LIBDIR="%{_libdir}"
# Move arch depended files (wrong installed)
#mv %{buildroot}%{_datadir}/carla/resources/zynaddsubfx-ui %{buildroot}%{_libdir}/carla
#ln -s %{_libdir}/carla/zynaddsubfx-ui %{buildroot}%{_datadir}/carla/resources/zynaddsubfx-ui
# flags

# Temporary FIX
rm %{buildroot}%{_datadir}/carla/resources/ui_carla_about.py

find "%{buildroot}%{_datadir}/carla/" -name "*.py" -exec chmod +x '{}' \;

%python3_fix_shebang
%python3_fix_shebang_path %{buildroot}%{_datadir}/carla/*
for dir in common dialogs modgui utils patchcanvas resources widgets; do
%python3_fix_shebang_path %{buildroot}%{_datadir}/carla/$dir/*
done

# SUSE specific
%if 0%{?suse_version}
 %suse_update_desktop_file -r carla AudioVideo Music
 %suse_update_desktop_file -r carla-control AudioVideo Music
 %fdupes -s %{buildroot}%{_datadir}
%endif

%files
%defattr(-,root,root)
%doc README.md
%license doc/GPL.txt doc/LGPL.txt
%{_bindir}/carla*
%dir %{_libdir}/carla
%exclude %{_libdir}/carla/*.exe
%exclude %{_libdir}/carla/*.dll
%exclude %{_libdir}/carla/*posix32
%{_libdir}/carla/*
%dir %{_datadir}/carla
%{_datadir}/carla/*
%{_datadir}/applications/*.desktop
%{_datadir}/icons/hicolor/
%{_datadir}/mime/packages/carla.xml
%{_datadir}/appdata/studio.kx.carla.appdata.xml

%ifarch x86_64
%files bridges
%dir %{_libdir}/carla
%{_libdir}/carla/*64.exe
%{_libdir}/carla/*64.dll
%dir %{_libdir}/lv2
%dir %{_libdir}/lv2/carla.lv2
%{_libdir}/lv2/carla.lv2/*64.exe
%{_libdir}/lv2/carla.lv2/*64.dll
%dir %{_libdir}/vst
%dir %{_libdir}/vst/carla.vst
%{_libdir}/vst/carla.vst/*64.exe
%{_libdir}/vst/carla.vst/*64.dll

%files bridges-32bit
%dir %{_libdir}/carla
%{_libdir}/carla/*32.exe
%{_libdir}/carla/*32.dll
%{_libdir}/carla/*posix32
%dir %{_libdir}/lv2
%dir %{_libdir}/lv2/carla.lv2
%{_libdir}/lv2/carla.lv2/*32.exe
%{_libdir}/lv2/carla.lv2/*32.dll
%{_libdir}/lv2/carla.lv2/*posix32
%dir %{_libdir}/vst
%dir %{_libdir}/vst/carla.vst
%{_libdir}/vst/carla.vst/*32.exe
%{_libdir}/vst/carla.vst/*32.dll
%{_libdir}/vst/carla.vst/*posix32
%endif

%files -n lv2-%{name}
%defattr(-,root,root)
%dir %{_libdir}/lv2
%dir %{_libdir}/lv2/carla.lv2
%exclude %{_libdir}/lv2/carla.lv2/*.exe
%exclude %{_libdir}/lv2/carla.lv2/*.dll
%exclude %{_libdir}/lv2/carla.lv2/*posix32
%{_libdir}/lv2/carla.lv2/*

%files -n vst-%{name}
%defattr(-,root,root)
%dir %{_libdir}/vst
%dir %{_libdir}/vst/carla.vst
%exclude %{_libdir}/vst/carla.vst/*.exe
%exclude %{_libdir}/vst/carla.vst/*.dll
%exclude %{_libdir}/vst/carla.vst/*posix32
%{_libdir}/vst/carla.vst/*

%files devel
%defattr(-,root,root)
%dir %{_includedir}/carla
%{_includedir}/carla/*
%{_libdir}/pkgconfig/*

%changelog
openSUSE Build Service is sponsored by