diff --git a/README.md b/README.md index b2f1e77..f1c1b57 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,17 @@ # liquidsoap +Liquidsoap is a powerful and flexible language for describing your streams. +It offers a rich collection of operators that you can combine at will, giving you more power than you need for creating or transforming streams. +But liquidsoap is still very light and easy to use, in the Unix tradition of simple strong components working together. + +Some examples of what you can do using Liquidsoap: + * static or dynamic playlists + * time-based selection of the audio source + * quota- or time-based insertions or mixes of jingles + * live DJ interventions + * interactive user requests + * fully-customizable transitions, e.g. crossfading + * speech-synthesis of track metadata + * simple access to remote files + * and much more! + diff --git a/liquidsoap.service b/liquidsoap.service new file mode 100644 index 0000000..58fef5b --- /dev/null +++ b/liquidsoap.service @@ -0,0 +1,15 @@ +[Unit] +Description=Liquidsoap service for channel %I +Documentation=man:liquidsoap(1) +After=network.target +ConditionPathExists=/etc/liquidsoap/%I.liq + +[Service] +Type=simple +ExecStart=/usr/bin/liquidsoap --quiet /etc/liquidsoap/%I.liq +ExecReload=/bin/kill -USR1 $MAINPID +User=liquidsoap +Group=liquidsoap + +[Install] +WantedBy=multi-user.target diff --git a/liquidsoap.spec b/liquidsoap.spec new file mode 100644 index 0000000..6738497 --- /dev/null +++ b/liquidsoap.spec @@ -0,0 +1,323 @@ +Name: liquidsoap +Version: 1.1.1 +Release: 8mamba +Summary: Audio toolkit for streaming, aiming at complex Internet radio systems +Group: Applications/Multimedia +Vendor: openmamba +Distribution: openmamba +Packager: Silvan Calarco +URL: http://savonet.sourceforge.net/ +Source0: http://downloads.sourceforge.net/project/savonet/liquidsoap/%{version}/liquidsoap-%{version}.tar.bz2 +Source1: %{name}.service +License: GPL, LGPL +## AUTOBUILDREQ-BEGIN +BuildRequires: glibc-devel +BuildRequires: libaacplus-devel +BuildRequires: libalsa-devel +BuildRequires: libao-devel +BuildRequires: libfaad2-devel +BuildRequires: libfftw-devel +BuildRequires: libflac-devel +BuildRequires: libgavl-devel +BuildRequires: libgcc +BuildRequires: libglib-devel +BuildRequires: libgst-plugins-base010-devel +BuildRequires: libgstreamer010-devel +BuildRequires: libjack-devel +BuildRequires: liblame-devel +BuildRequires: liblo-devel +BuildRequires: libmad-devel +BuildRequires: libogg-devel +BuildRequires: libpcre-devel +BuildRequires: libportaudio-devel +BuildRequires: libpulseaudio-devel +BuildRequires: libpython-devel +BuildRequires: libsamplerate-devel +BuildRequires: libschroedinger-devel +BuildRequires: libsoundtouch-devel +BuildRequires: libspeex-devel +BuildRequires: libstdc++6-devel +BuildRequires: libtag-devel +BuildRequires: libtheora-devel +BuildRequires: libvo-aacenc-devel +BuildRequires: libvorbis-devel +BuildRequires: libX11-devel +BuildRequires: libxml2-devel +BuildRequires: perl-devel +## AUTOBUILDREQ-END +BuildRequires: camlidl +BuildRequires: ocaml >= 4.00.1 +BuildRequires: ocaml-findlib +BuildRequires: ocaml-dtools +BuildRequires: ocaml-duppy-devel +BuildRequires: ocaml-camomile-devel +BuildRequires: ocaml-cry-devel +BuildRequires: ocaml-faad-devel +BuildRequires: ocaml-ffmpeg-devel +BuildRequires: ocaml-flac-devel +BuildRequires: ocaml-lame-devel +BuildRequires: ocaml-mad-devel +BuildRequires: ocaml-mm-devel +BuildRequires: ocaml-pcre-devel +BuildRequires: ocaml-samplerate-devel +BuildRequires: ocaml-shine-devel +BuildRequires: ocaml-taglib-devel +BuildRequires: ocaml-voaacenc-devel +BuildRequires: ocaml-xmlm-devel +BuildRequires: ocaml-xmlplaylist-devel +# note: festival provides text2wave +BuildRequires: festival +BuildRequires: python-devel +BuildRequires: pygtk +BuildRequires: sox +BuildRequires: dejavu-fonts-ttf +Requires: festival +Requires: sox +Requires: vorbis-tools +#Requires: mp3gain +#Requires: vorbisgain +Requires: ocaml-camomile +Requires: ocaml-shine +Requires: ocaml-voaacenc +BuildRoot: %{_tmppath}/%{name}-%{version}-root + +# FIXME: +# checking for ocaml lastfm module >= 0.3.0... lastfm needs xmlplaylist +# checking for ocaml opus module >= 0.1.0... Not found. +# checking for ocaml frei0r module >= 0.1.0... Not found. +# checking for ocaml fdkaac module >= 0.1.0... Not found. +# checking for ocaml gavl module >= 0.1.4... Not found. +# checking for ocaml bjack module >= 0.1.3... Not found. +# checking for ocaml inotify module >= 1.0... Not found. +# checking for ocaml soundtouch module >= 0.1.7... Not found. +# checking for ocaml portaudio module >= 0.2.0... Not found. +# checking for ocaml pulseaudio module >= 0.1.2... Not found. +# checking for ocaml ladspa module >= 0.1.4... Not found. +# checking for ocaml dssi module >= 0.1.0... Not found. +# checking for ocaml camlimages module >= 4.0.0... Not found. +# checking for ocaml lo module >= 0.1.0... Not found. +# checking for ocaml yojson module... Not found. +# checking for ocaml gd module... Not found. +# checking for ocaml winsvc module >= 0.0.1... Not found. + +%description +Liquidsoap is a powerful and flexible language for describing your streams. +It offers a rich collection of operators that you can combine at will, giving you more power than you need for creating or transforming streams. +But liquidsoap is still very light and easy to use, in the Unix tradition of simple strong components working together. + +Some examples of what you can do using Liquidsoap: + * static or dynamic playlists + * time-based selection of the audio source + * quota- or time-based insertions or mixes of jingles + * live DJ interventions + * interactive user requests + * fully-customizable transitions, e.g. crossfading + * speech-synthesis of track metadata + * simple access to remote files + * and much more! + +%package -n liguidsoap +Group: Graphical Desktop/Applications/Multimedia +Summary: Control GUI for liguidsoap +Requires: %{name} = %{?epoch:%epoch:}%{version}-%{release} +Requires: python +Requires: pygtk +Requires: dejavu-fonts-ttf + +%description -n liguidsoap +Liguidsoap is a GUI for controlling liquidsoap, using pyGTK. + +%package docs +Group: Documentation +Summary: Documentation for Liquidsoap +Requires: %{name} = %{?epoch:%epoch:}%{version}-%{release} + +%description docs +Liquidsoap is a powerful and flexible language for describing your streams. +This package contains documentation in HTML format. + +%prep +%setup -q + +%build +# NOTE: --enable-ogg-dynamic-plugin lead to the following error +# ocamlfind: [WARNING] Package 'threads' signals error: Missing -thread or -vmthread switch +# File "ogg_formats/ogg_muxer.ml", line 45, characters 35-47: +# Error: Unbound module Ogg +./configure \ + --prefix=%{_prefix} \ + --localstatedir=%{_localstatedir} \ + --sysconfdir=%{_sysconfdir} \ + --enable-alsa-dynamic-plugin \ + --enable-ao-dynamic-plugin \ + --enable-cry-dynamic-plugin \ + --enable-faad-dynamic-plugin \ + --enable-ffmpeg-dynamic-plugin \ + --enable-flac-dynamic-plugin \ + --enable-flac.ogg-dynamic-plugin \ + --enable-graphics-dynamic-plugin \ + --enable-gstreamer-dynamic-plugin \ + --enable-lame-dynamic-plugin \ + --enable-mad-dynamic-plugin \ + --enable-oss-dynamic-plugin \ + --enable-samplerate-dynamic-plugin \ + --enable-schroedinger-dynamic-plugin \ + --enable-sdl-dynamic-plugin \ + --enable-shine-dynamic-plugin \ + --enable-speex-dynamic-plugin \ + --enable-taglib-dynamic-plugin \ + --enable-theora-dynamic-plugin \ + --enable-voaacenc-dynamic-plugin \ + --enable-vorbis-dynamic-plugin \ + --enable-xmlplaylist-dynamic-plugin \ + --without-user --without-group \ + --with-default-font=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf + # -or- /usr/share/fonts/truetype/ttf-liberation/LiberationSans-Regular.ttf + +%make all +%make doc + +%install +[ "%{buildroot}" != / ] && rm -rf "%{buildroot}" +export OCAMLFIND_DESTDIR=%{buildroot}$(ocamlfind printconf destdir) +export INSTALL_DAEMON=no +install -d $OCAMLFIND_DESTDIR + +%makeinstall \ + prefix=%{buildroot}%{_prefix} \ + sysconfdir=%{buildroot}%{_sysconfdir} + +# install the systemd service for liquidsoap +install -d %{buildroot}/lib/systemd/system +# NOTE: the at sign in the service is what makes SystemD so interesting for liquidsoap. +# It means that everything placed behind the @ sign is sent to liquidsoap as a parameter. +# starting liquidsoap@foo.service executes liquidsoap --quiet /etc/liquidsoap/foo.liq, +install -m 0644 %{S:1} %{buildroot}/lib/systemd/system/%{name}@.service + +# create the required folders +install -d %{buildroot}%{_localstatedir}/log/liquidsoap +install -d %{buildroot}%{_localstatedir}/run/liquidsoap + +# remove unpackaged file +rm -f %{buildroot}%{_sysconfdir}/liquidsoap/radio.liq.example +rm -fr %{buildroot}%{_datadir}/doc + +%clean +[ "%{buildroot}" != / ] && rm -rf "%{buildroot}" + +%pre +if ! getent group liquidsoap >/dev/null 2>&1; then + /usr/sbin/groupadd --system liquidsoap # >/dev/null 2>&1 +fi +if ! id liquidsoap >/dev/null 2>&1; then + /usr/sbin/useradd --system -s /bin/false -d %{_localstatedir}/empty \ + -c 'Liquidsoap user' -g liquidsoap liquidsoap # >/dev/null 2>&1 +fi +exit 0 + +%postun +if [ $1 -eq 0 ]; then + # /sbin/service stop >/dev/null 2>&1 + /usr/sbin/userdel liquidsoap # >/dev/null 2>&1 + /usr/sbin/groupdel liquidsoap # >/dev/null 2>&1 +fi +exit 0 + +%files +%defattr(-,root,root) +%{_bindir}/liquidsoap +%dir %{_sysconfdir}/liquidsoap +%dir %{_libdir}/liquidsoap +%dir %{_libdir}/liquidsoap/%{version} +%{_libdir}/liquidsoap/%{version}/externals.liq +%{_libdir}/liquidsoap/%{version}/extract-replaygain +%{_libdir}/liquidsoap/%{version}/flows.liq +%{_libdir}/liquidsoap/%{version}/gstreamer.liq +%{_libdir}/liquidsoap/%{version}/http.liq +%{_libdir}/liquidsoap/%{version}/http_codes.liq +%{_libdir}/liquidsoap/%{version}/lastfm.liq +%{_libdir}/liquidsoap/%{version}/liquidtts +%{_libdir}/liquidsoap/%{version}/pervasives.liq +%{_libdir}/liquidsoap/%{version}/shoutcast.liq +%{_libdir}/liquidsoap/%{version}/utils.liq +%{_libdir}/liquidsoap/%{version}/video.liq +#%{_libdir}/liquidsoap/%{version}/video_text.liq +# +%dir %{_libdir}/liquidsoap/%{version}/plugins +%{_libdir}/liquidsoap/%{version}/plugins/alsa.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/ao.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/cry.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/faad.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/ffmpeg.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/flac.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/flac_ogg.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/graphics.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/gstreamer.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/lame.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/mad.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/oss.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/samplerate.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/schroedinger.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/sdl.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/shine.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/speex.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/taglib.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/theora.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/voaacenc.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/vorbis.cmxs +%{_libdir}/liquidsoap/%{version}/plugins/xmlplaylist.cmxs +# +/lib/systemd/system/%{name}@.service +%{_sysconfdir}/logrotate.d/liquidsoap +%dir %attr(755,liquidsoap,liquidsoap) %{_localstatedir}/log/liquidsoap +%dir %attr(755,liquidsoap,liquidsoap) %{_localstatedir}/run/liquidsoap +%{_mandir}/man1/liquidsoap.* +%doc examples + +%files -n liguidsoap +%defattr(-,root,root) +%{_bindir}/liguidsoap +%dir %{python_sitearch}/liquidsoap +%{python_sitearch}/liquidsoap/client.py +%{python_sitearch}/liquidsoap/editable.py +%{python_sitearch}/liquidsoap/liguidsoap.py +%{python_sitearch}/liquidsoap/mix.py +%{python_sitearch}/liquidsoap/output.py +%{python_sitearch}/liquidsoap/playlist.py +%{python_sitearch}/liquidsoap/queue.py +%{python_sitearch}/liquidsoap/widgets.py +%{_mandir}/man1/liguidsoap.* + +%files docs +%defattr(-,root,root) +%doc doc/html + +%changelog +* Sat Jul 20 2013 openmamba WebBuild System 1.1.1-8mamba +- do not require ocaml; liquidsoap is compiled with the OCaml native compiler + +* Mon Jul 01 2013 Automatic Build System 1.1.1-7mamba +- arm: rebuilt after fixing ocaml (rpi) + +* Sat Jun 29 2013 Davide Madrisan 1.1.1-6mamba +- build the dynamic ocaml plugins ffmpeg, samplerate, and taglib + +* Thu Jun 27 2013 Davide Madrisan 1.1.1-5mamba +- build ocaml shine and voaacenc as dynamic plugins + +* Thu Jun 27 2013 Davide Madrisan 1.1.1-4mamba +- requires festival, sox, and ocaml-camomile +- rebuild againt ocaml-shine and ocaml-voaacenc + +* Wed Jun 26 2013 Davide Madrisan 1.1.1-3mamba +- enable support for icecast/shoutcas +- package all the liquidsoap extensions as dynamic plugins + +* Tue Jun 25 2013 Davide Madrisan 1.1.1-2mamba +- add the subpackages liguidsoap and docs + +* Sat Jun 22 2013 Davide Madrisan 1.1.1-1mamba +- update to 1.1.1 + +* Fri Jan 11 2013 Silvan Calarco 1.0.1-1mamba +- package created by silvan using the webbuild interface \ No newline at end of file