File hydrogen.spec of Package hydrogen

#
# spec file for package hydrogen
#
# Copyright (c) 2011 SUSE LINUX Products 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 http://bugs.opensuse.org/
#


%define soversion 0
%define soage 0
%define sorevision 0
# WARNING: ATM librubberband2 support is experimental currently it is recommended that you disable
# this config option to ensure backwards compatibility with songs created under 0.9.5 which use
# rubberband. Use the rubberband -cli package instead.
%define librubberband 0

Name:           hydrogen
BuildRequires:  alsa-devel doxygen flac-devel libjack-devel liblrdf-devel libqt4-devel libsndfile-devel util-linux
BuildRequires:  ladspa ladspa-devel lash-devel libarchive-devel libraptor-devel portaudio-devel zlib-devel
BuildRequires:  cmake fdupes gcc-c++ help2man hicolor-icon-theme pkg-config rsync subversion update-desktop-files
BuildRequires:  pkgconfig(Qt3Support)
BuildRequires:  pkgconfig(QtCLucene)
BuildRequires:  pkgconfig(QtCore)
BuildRequires:  pkgconfig(QtDBus)
BuildRequires:  pkgconfig(QtDeclarative)
BuildRequires:  pkgconfig(QtDesigner)
BuildRequires:  pkgconfig(QtDesignerComponents)
BuildRequires:  pkgconfig(QtGui)
BuildRequires:  pkgconfig(QtHelp)
BuildRequires:  pkgconfig(QtMultimedia)
BuildRequires:  pkgconfig(QtNetwork)
BuildRequires:  pkgconfig(QtOpenGL)
BuildRequires:  pkgconfig(QtScript)
BuildRequires:  pkgconfig(QtScriptTools)
BuildRequires:  pkgconfig(QtSql)
BuildRequires:  pkgconfig(QtSvg)
BuildRequires:  pkgconfig(QtTest)
BuildRequires:  pkgconfig(QtUiTools)
BuildRequires:  pkgconfig(QtXml)
BuildRequires:  pkgconfig(QtXmlPatterns)

#%%if 0%%{?suse_version} <= 1140
#BuildRequires:  libqt4-devel-doc-data
#%%endif
#pkgconfig(ladspa-1.13)
%if 0%{?librubberband} == 1
BuildRequires:  librubberband-devel
%else
Requires:       rubberband-cli
BuildRequires:  rubberband-cli
%endif
Summary:        A Real-Time Drum Machine and Sequencer
# NOTE: Don't forget to update the libsuffix macro.
Version:        0.9.6
Release:        0
License:        GPL-2.0+
Group:          Productivity/Multimedia/Sound/Midi
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
Url:            http://www.hydrogen-music.org/
Source0:        %{name}-%{version}.tar.bz2
Source1:        hydrogen.1
Source2:        h2cli.1
Source3:        COPYING
# Fixup the desktop file.
Patch0:         hydrogen-0.9.6-desktop.patch
# Remove current date and time from sources.
Patch1:         hydrogen-no-current-time.patch
# libhydrogencore has no soname and installs in _libexecdir
Patch2:         hydrogen-0.9.6-lib64.patch

%description
Hydrogen is an advanced drum machine for GNU/Linux.
It's main goal is to bring professional yet simple and intuitive
pattern-based drum programming. sequencer MIDI input.
Very user-friendly, modular, fast and intuitive graphical
interface based on QT4.
Sample-based stereo audio engine, with import of sound samples
in .wav, .au and .aiff formats.
Pattern-based sequencer, with unlimited number of patterns and
ability to chain patterns into a song.
Up to 64 ticks per pattern with individual level per event and
variable pattern length.
32 instrument tracks with volume, mute, solo, pan capabilities.
Multi layer support for instruments (up to 16 samples for each
instrument).
Ability to import/export song files.
Unique human velocity, human time, pitch and swing functions.
Multiple patterns playing at once.
JACK, ALSA, PortAudio and OSS audio drivers.
ALSA MIDI input with assignable midi-in channel (1..16, ALL).
Import/export of drumkits.
Export song to wav file.
Export song to midi file.

%package -n libhydrogen-core%{soversion}
Group:          System/Libraries
Summary:        Library essential for hydrogen

%description -n libhydrogen-core%{soversion}
This is the core of hydrogen's operation.

%package -n libhydrogen-core-devel
Group:          Development/Libraries/C and C++
Summary:        Development files and headers for libhydrogen-core
Requires:       libhydrogen-core%{soversion} = %{version}-%{release}

%description -n libhydrogen-core-devel
These are the headers needed to develop apps that
link with libhydrogen-core.

%prep
%setup -q
%patch0
%patch1
%patch2
# copy licence with correct fsf address
install -m 0644 %{S:3} ./

%build

mkdir -p Build && pushd Build
cmake -L ../ -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \
	-DCMAKE_LIBRARY_ARCHITECTURE:STRING=%{_arch} \
	-DCMAKE_CXX_FLAGS:STRING="%{optflags} -ggdb" \
	-DCMAKE_C_FLAGS:STRING="%{optflags} -ggdb" \
	-DCMAKE_BUILD_TYPE:STRING=Release \
	-DCMAKE_VERBOSE_MAKEFILE:BOOL=on \
	-DWANT_SHARED:BOOL=on \
	-DWANT_LIBARCHIVE:BOOL=on \
	-DWANT_LRDF:BOOL=off \
	-DWANT_LASH:BOOL=on \
	-DLADSPA_INCLUDE_DIR:PATH=%{_includedir} \
	-DLADSPA_LIBRARIES:PATH=%{_libdir}/ladspa \
	-DCMAKE_CURRENT_LIBRARY_DIR:PATH="%{_lib}" \
	-Dcoreversion:STRING=%{soversion} \
	-Dsoage:STRING=%{soage} \
	-Dsorevision:STRING=%{sorevision} \

# For some reason cmake won't produce a correct soname with only the version so this is a hack to fix it.
pushd src/core/CMakeFiles/hydrogen-core.dir && \
cat link.txt|sed 's/-soname,libhydrogen-core.so.0.0.0/-soname,libhydrogen-core.so.0/'>\
link.txt~;mv link.txt~ link.txt

cat relink.txt|sed 's/-soname,libhydrogen-core.so.0.0.0/-soname,libhydrogen-core.so.0/'>\
relink.txt~;mv relink.txt~ relink.txt

popd

make %{?_smp_mflags}

# LD_LIBRARY_PATH=%%{_libdir}/mpi/gcc/openmpi/%%{_lib}
# LD_RUN_PATH=%%{_libdir}

popd

%install

#export QTDIR=%%{_libdir}/qt4/
pushd Build
%makeinstall VERBOSE_MAKEFILE=1
# libhydrogen-core's internal SONAME = libhydrogen-core.so.0 so we provide a link.
cd %{buildroot}%{_libdir} && ln -s libhydrogen-core.so.0.0.0 libhydrogen-core.so.0
popd

# Install the man pages created by help2man
mkdir -p %{buildroot}%{_mandir}/man1
install -pm 0644 %{S:1} %{S:2} %{buildroot}%{_mandir}/man1/

# temporary link i18n files from usr/share/hydrogen/data/i18n to _datadir/locale for find_lang to find.
ln -s %{_datadir}/hydrogen/data/i18n %{buildroot}%{_datadir}/locale
%find_lang %{name} %{name}.lang --without-kde --with-qt --all-name --without-mo
rm -rf %{buildroot}%{_datadir}/locale
cat %{name}.lang

# Set executable bit on scripts in buildroot/_datadir/name/data/i18n
for i in $(find %{buildroot}%{_datadir}/hydrogen/data/i18n -type f -perm 0644 -print0|xargs -0r grep -l '#!'); \
do chmod 0755 ${i}; done

%fdupes -s %{buildroot}%{_datadir}

# Make icon avalable for desktop file
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/ \
&& pushd %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/
ln -s ../../../../%{name}/data/img/gray/h2-icon.svg h2-icon.svg
#usr/share/hydrogen/data/img/gray/h2-icon.svg
popd && %suse_update_desktop_file -i %{name} AudioVideo Sequencer

%post
update-desktop-database &> /dev/null || :

%postun
update-desktop-database &> /dev/null || :

%files -f %{name}.lang
%defattr(-, root, root)
%{_bindir}/*
%doc AUTHORS COPYING ChangeLog README.txt
%dir %{_datadir}/%{name}/*
%dir %{_datadir}/%{name}
%{_mandir}/man1/hydrogen.1.gz
%{_mandir}/man1/h2cli.1.gz
%{_datadir}/%{name}/data/*
%{_datadir}/applications/%{name}.desktop
%{_datadir}/icons/hicolor/scalable/apps/h2-icon.svg

%post -n libhydrogen-core%{soversion} -p /sbin/ldconfig

%postun -n libhydrogen-core%{soversion} -p /sbin/ldconfig

%files -n libhydrogen-core%{soversion}
%defattr(-, root, root)
%{_libdir}/libhydrogen-core.so.%{soversion}*

%files -n libhydrogen-core-devel
%defattr(-, root, root)
%dir %{_includedir}/%{name}
%{_includedir}/%{name}/*
%{_libdir}/libhydrogen-core.so

%changelog