Blob Blame History Raw
Name:           python-music21
Version:        2.1.2
Release:        2%{?dist}
Summary:        A toolkit for computational musicology

License:        BSD or LGPLv3
URL:            http://web.mit.edu/music21/
Source0:        https://github.com/cuthbertLab/music21/releases/download/v.%{version}/music21-%{version}.tar.gz

Patch0:         0001-Use-sensible-default-on-nix.patch
Patch1:         0002-Do-not-use-a-predicatable-directory-name-for-the-scr.patch
Patch2:         0003-Use-system-six-in-docstring.patch

BuildRequires:  lilypond
BuildRequires:  mscore
BuildRequires:  xorg-x11-server-Xvfb
BuildRequires:  dos2unix

BuildArch:      noarch

# Use the same directory of the main package for subpackage licence and docs
%global _docdir_fmt %{name}

%description
Music21 is a set of tools for helping scholars and other active
listeners answer questions about music quickly and simply. It
supports input of melodies in shorthand notation, printing of
musical scores, etc.

%package -n python2-music21
Summary:        %{summary}
%{?python_provide:%python_provide python2-music21}

BuildRequires:  python2-devel
BuildRequires:  python-chardet
BuildRequires:  python-jsonpickle
BuildRequires:  python-mock
BuildRequires:  python-webcolors
BuildRequires:  python-xlrd
BuildRequires:  python-six
BuildRequires:  python-enum34
BuildRequires:  python-pillow
BuildRequires:  python-matplotlib
BuildRequires:  numpy
BuildRequires:  scipy
Requires:       python-chardet
Requires:       python-jsonpickle
Requires:       python-mock
Requires:       python-webcolors
Requires:       python-xlrd
Requires:       python-six
Requires:       python-enum34
Requires:       python-pillow
Requires:       python-matplotlib
Requires:       numpy
Requires:       scipy
Requires:       lilypond
Requires:       mscore
Requires:       %{name}-common = %{version}-%{release}
Suggests:       %{name}-doc

%description -n python2-music21
Music21 is a set of tools for helping scholars and other active
listeners answer questions about music quickly and simply. It
supports input of melodies in shorthand notation, printing of
musical scores, etc.

%package -n python3-music21
Summary:        %{summary}
%{?python_provide:%python_provide python3-music21}

BuildRequires:  python3-devel
BuildRequires:  python3-jsonpickle
BuildRequires:  python3-chardet
BuildRequires:  python3-mock
BuildRequires:  python3-webcolors
BuildRequires:  python3-xlrd
BuildRequires:  python3-six
BuildRequires:  python3-pillow
BuildRequires:  python3-matplotlib
BuildRequires:  python3-chardet
BuildRequires:  python3-numpy
BuildRequires:  python3-scipy
Requires:       python3-chardet
Requires:       python3-jsonpickle
Requires:       python3-mock
Requires:       python3-webcolors
Requires:       python3-xlrd
Requires:       python3-six
Requires:       python3-pillow
Requires:       python3-matplotlib
# Requires:       python3-pyaudio
Requires:       python3-numpy
Requires:       python3-scipy
Requires:       lilypond
Requires:       mscore
Requires:       %{name}-common = %{version}-%{release}
Suggests:       %{name}-doc

%description -n python3-music21
Music21 is a set of tools for helping scholars and other active
listeners answer questions about music quickly and simply. It
supports input of melodies in shorthand notation, printing of
musical scores, etc.

%package common
Summary: Music corpus and other shared files for music21

%description common
This package contains shared files for %{name} and python3-music21.

%package doc
Summary: Documentation for music21

%description doc
This package contains HTML documentation for %{name} and python3-music21.

%prep
%autosetup -n music21-%{version} -p1

rm -r music21/ext -r
sed -i 's/from music21.ext.nbconvert/from IPython.html.nbconvert/' music21/documentation/writers.py
find music21 -name '*.py' -exec sed -i '
     s/from music21.ext import/import/;
     s/from music21.ext.six import/from six import/;
     ' {} \;
find music21 -name '*.py' -exec sed -i '' {} \;

sed -i 1d \
    music21/alpha/trecento/exceldiff.py \
    music21/demos/josquin/label_intervals.py \
    music21/alpha/trecento/findTrecentoFragments.py

dos2unix music21/documentation/build/html/_sources/tutorials/advancedGraphing.txt

%build
%py2_build
%py3_build

%install
%py2_install
%py3_install

mkdir -p %{buildroot}%{_pkgdocdir}
mv %{buildroot}%{python2_sitelib}/music21/documentation/build/html %{buildroot}%{_pkgdocdir}/
# source is kept around so tests can pass
rm -r %{buildroot}%{python2_sitelib}/music21/documentation/build
rm -r %{buildroot}%{python3_sitelib}/music21/documentation/build

pushd %{buildroot}%{python2_sitelib}/music21/corpus/
dirs=$(echo [a-z]*/)
rm -r $dirs
for i in $dirs; do ln -sv %{python3_sitelib}/music21/corpus/$i .; done
popd

pushd %{buildroot}%{python2_sitelib}/music21/scale/scala/
rm -r scl
ln -sv %{python3_sitelib}/music21/scale/scala/scl .
popd

%check
PYTHONPATH=%{buildroot}%{python2_sitelib} \
    xvfb-run -a \
    %{__python2} -c 'from music21.test.multiprocessTest import mainPoolRunner as tm; tm()'
PYTHONPATH=%{buildroot}%{python3_sitelib} \
    xvfb-run -a \
    %{__python3} -c 'from music21.test.multiprocessTest import mainPoolRunner as tm; tm()'

%files -n python2-music21
%{python2_sitelib}/music21/
%{python2_sitelib}/*.egg-info
%exclude %{python2_sitelib}/music21/documentation/source
%exclude %{python2_sitelib}/music21/documentation/autogenerated
%exclude %{python2_sitelib}/music21/LICENSE

%files -n python3-music21
%{python3_sitelib}/music21/
%{python3_sitelib}/*.egg-info
%exclude %{python3_sitelib}/music21/corpus/*/
%exclude %{python3_sitelib}/music21/scale/scala/scl/
%exclude %{python3_sitelib}/music21/documentation/source
%exclude %{python3_sitelib}/music21/documentation/autogenerated
%exclude %{python3_sitelib}/music21/LICENSE

%files common
%license LICENSE
%doc README.md
%dir %{python3_sitelib}/music21
%dir %{python3_sitelib}/music21/corpus
%{python3_sitelib}/music21/corpus/*/
%dir %{python3_sitelib}/music21/scale
%dir %{python3_sitelib}/music21/scale/scala
%{python3_sitelib}/music21/scale/scala/scl/

%files doc
%license LICENSE
%doc README.md
%{_pkgdocdir}/html

%changelog
* Sat Dec  5 2015 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 2.1.2-2
- Use Suggests for documentation
- Move common files to python3 directory
- Fix some encodings and file headers

* Mon Oct  5 2015 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 2.1.2-1
- Update to latest version
- Use new python packaging macros

* Fri Jul 10 2015 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 2.0.5-2
- Switch to pypi tarball
- Untabify and escape macros in comments

* Fri Jun 19 2015 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 2.0.5-1
- Initial packaging