For systems that cannot support fork() (like no-mmu Linux), use daemon() if
it is available for the daemonizing code.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This encoder plugin is a replacement for the LAME encoder plugin for
those who prefer a "free" (non-patent encumbered) encoder library.
Most of the plugin source code is copied from the LAME encoder plugin,
since the LAME and TwoLAME APIs are nearly the same.
This patch makes the shout checks use MPD_AUTO_PKG() instead of
manually invoking PKG_CHECK_MODULES(). It sets the default value to
"auto" instead of "no".
$enable_encoder specifies whether one or more encoder plugins are
enabled. This simplifies several checks, and allows easier
integration of more encoder plugins.
This patch adds a small autoconf M4 library which deals with
auto-detected features. The default for those features is "auto",
which is like the old default: if the library is present on the
system, enable the feature, disable otherwise. If the user explicitly
enables that feature (--enable-alsa), and the library is not present,
configure must fail, because it cannot fulfill the request.
We're using GLib macros which were introduced in GLib 2.6, like
G_GNUC_MALLOC. Let's just drop support for GLib versions older than
2.6 instead of adding more complicated compatibility hacks.
Let's get rid of the "shout" plugin, and the awfully complicated
icecast daemon setup! MPD can do better if it's doing the HTTP server
stuff on its own. This new plugin has several advantages:
- easier to set up - only one daemon, no password settings, no mount
settings
- MPD controls the encoder and thus already knows the packet
boundaries - icecast has to parse them
- MPD doesn't bother to encode data while nobody is listening
This implementation is very experimental (no header parsing, ignores
request URI, no icy-metadata, ...). It should be able to suport
several encoders in parallel in the future (with different bit rates,
different codec, ...), to make MPD the perfect streaming server. Once
MPD gets multi-player support, we can even mount several different
radio stations on one server.
If the header valgrind/memcheck.h is available, add
VALGRIND_MAKE_MEM_NOACCESS() and VALGRIND_MAKE_MEM_UNDEFINED()
support, which enables nice warnings in the valgrind memory checker.
The lastfm input plugin enables MPD to play lastfm:// URLs. This
plugin is not complete yet: it plays only the first song in the
last.fm playlist, and the playlist parser isn't even implemented
properly.
Recursive Makefiles are inefficient and error prone (no proper way to
declare dependencies). Since there's no disadvantage in having one
single Makefile, let's do it.
The configure.ac script does not care about the host architecture, it
only cares about the OS. Use ${host_os} instead of ${host} to
simplify the matching expressions.
Use faacDecInit2() instead of AudioSpecificConfig() to detect the AAC
track in the MP4 file. This has a great advantage: it initializes the
libfaad decoder, which the caller would normally do anyway - but now
we can go without the AudioSpecificConfig() call. When decoder==NULL
(called from mp4_tag_dup()), fall back to a mp4ff_get_track_type()==1
check, like other audio players do.
Currently, only the sidplay decoder plugin requires C++, and in all
other cases, MPD could build well without a C++ compiler.
Unfortunately, autoconf/automake are confused when we have a
conditional AC_PROG_CXX check. We could add lots of workarounds for
individual problems, but let's just always require a C++ compiler, and
forget about this autotools limitation.
There are a few problems left in this plugin:
- fluidsynth decodes in real time, while MPD prefers to buffer as
quickly as possible; as a workaround, this plugin uses a timer
object to synchronize with real-time playback
- I don't know yet how fluidsynth tells me when the song has ended
- the "soundfont" configuration setting is not yet documented, and it
will likely change soon (in favor of a per-decoder configuration
block)
When the sidplay plugin is disabled, "./configure" does not look for
the C++ compiler. This creates an odd situation: automake requires
the am__fastdepCXX conditional, although configure did not generate
it. Work around this autotools limitation by manually disabling
am__fastdepCXX.
Don't define HAVE_FFMPEG if the ffmpeg libraries were found via
pkg-config, but ffmpeg support was disabled because
avcodec_decode_audio2() is not available.
This patch implements the MMS protocol, by using libmms. It is quite
experimental: it does not support seeking yet, and it is currently
using synchronous I/O, which causes MPD to hang while waiting for the
server.
MPD will (optionall) use sqlite databases in the future. Add a
configure option to enable that. There is no code yet to really use
sqlite, so the practical use of this patch is limited.
libid3tag comes without a pkg-config file, and it is usually added by
distribution packages. For those without .pc file, attempt to
auto-detect the library with AC_CHECK_LIB.
This is a rather huge patch, which unfortunately cannot be splitted.
Instead of using our custom ioops.h library, convert everything to use
the GLib main loop.
Don't split configure options and their implementation. Check for the
backend library before the AM_CONDITIONAL, otherwise Makefile.am will
compile the plugin although the library may not be available.
When updating from a version before libcurl was used for streaming
support, this is confusing - streaming will work with the old version
(e.g. 0.13.2) but will give "no such file" errors with the new due to
the missing dependency. However, the missing dependency will not be
obvious when running the configure script.
neaacdec.h declares all arguments as "unsigned long", but internally
expects uint32_t pointers. This triggers gcc warnings on 64 bit
architectures. To avoid that, make configure.ac detect whether we're
using Debian's corrected headers or the original libfaad headers. In
any case, pass a pointer to an uint32_t, conditionally casted to
"unsigned long*".
MPD used to have a copy of the mp4ff library. Since that has been
removed, AAC suport was disabled when there was no libmp4ff. Separate
the libmp4ff test, and enable AAC support no matter if libmp4ff is
available.
MPD's HTTP client code has always been broken, no matter how effort
was put into fixing it. Replace it with libcurl, which is known to be
quite stable. This adds a fat library dependency, but only for people
who need streaming.
Several clients refuse to accept the protocol version "0.14~git",
because they think it is malformed. This is clearly a client bug, but
we cannot wait for all clients to fix this bug right now. For now,
change the version back to "0.14.0".
For testers, it should be clear that they're not using version 0.14.0
final, but an inofficial intermediate version from the git repository.
The protocol version is set to the same string, since the protocol is
subject to change during MPD development.
MPD shouldn't integrate sources of other libraries. Since libmp4ff is
part of libfaad, we should remove the old copy from src/mp4ff and link
with the current version from libfaad instead.
Since ffmpeg svn r12865, you have to include libavcodec/avcodec.h
instead of avcodec.h. This cannot be checked at compile time, instead
we have to add a check to configure.ac. Viliam's original ffmpeg
plugin was based on the newer ffmpeg library, while my Debian
installation had the older version. My attempt to correct his include
statements wasn't correct after all.
With heavy use of conditionals, I broke Makefile.am for the ancient
automake version 1.6. Instead of supporting this automake version
forever, I'm removing support for it now. Since automake isn't
required on the build machine, nobody should have a serious problem
with that.
By default, glibc 2.8 hides struct ucred behind the _GNU_SOURCE
macro. I don't want to enable that globally, because it may encourage
the use of non-portable functions. Test if "struct ucred" is
available, and enable _GNU_SOURCE if required.
For details about that issue, see glib's bug database:
http://sources.redhat.com/bugzilla/show_bug.cgi?id=6545
GLib is a nice and portable utility library. We are going to use it
from now on, and eliminate a lot of duplicated code from MPD. Why
invent the wheel again and again?
This git branch has become a real MPD fork now. Time to change the
package name to the code name "mpd-mk". Set the version number to
"0.14~git" to mark this as a non-released version.
C99 will soon have its 10th birthday. Let's not beat the dead C89
horse, and raise the compiler requirements. From now on, we need a
C99 compiler. This adds "-std=gnu99" to the GCC compiler options, in
case GCC is used.
[mk: moved this patch after "Refactor and cleanup of shout Ogg and MP3
audio outputs". The original commit message follows, although it is
outdated:]
Creation of shout_mp3 audio output plugin. Basically I just copied the
existing shout plugin and replaced ogg with lame. Uses lame for mp3
encoding. Next step is to pull common functionality out of each shout
plugin and share it between them.
Configuration options for "shout_mp3" are the same as for "shout".
I've perhaps gone a bit overboard, but here's the current rundown:
Both Ogg and MP3 use the "shout" audio output plugin. The shout audio
output plugin itself has two new plugins, one for the Ogg encoder,
and another for the MP3 (LAME) encoder.
Configuration for an Ogg stream doesn't change. For an MP3 stream,
configuration is the same as Ogg, with two exceptions. First, you must
specify the optional "encoding" parameter, which should be set to "mp3".
See mpd.conf(5) for more details. Second, the "quality" parameter is
reversed for LAME, such that 1 is high quality for LAME, whereas 10 is
high quality for Ogg.
I've decomposed the code so that all libshout related operations
are done in audioOutput_shout.c, all Ogg specific functions are in
audioOutput_shout_ogg.c, and of course then all LAME specific functions
are handled in audioOutput_shout_mp3.c.
To develop encoder plugins for the shout audio output plugin, I basically
just mimicked the plugin system used for audio outputs. This might be
overkill, but hopefully if anyone ever wants to support some other sort
of stream, like maybe AAC, FLAC, or WMA (hey it could happen), they will
hopefully be all set.
The Ogg encoder is slightly less optimal under this configuration.
It used to send shout data directly out of its ogg_page structures. Now,
in the interest of encapsulation, it copies the data from its ogg_page
structures into a buffer provided by the shout audio output plugin (see
audioOutput_shout_ogg.c, line 77.) I suspect the performance impact
is negligible.
As for metadata, I'm pretty sure they'll both work. I wrote up a test
scaffold that would create a fake tag, and tell the plugin to send it
out to the stream every few seconds. It seemed to work fine. Of course,
if something does break, I'll be glad to fix it.
Lastly, I've renamed lots of things into snake_case, in keeping with
normalperson's wishes in that regard.
[mk: moved the MP3 patch after this one. Splitted this patch into
several parts; the others were already applied before this one. Fixed
a bunch GCC warnings and wrong whitespace modifications. Made it
compile with mpd-mk by adapting to its prototypes]
Warren hasn't been active in development in a while and probably
doesn't have much time to answer user questions. So point the
mailing contact to the public mailing lists where any developer
can see and answer.
Also enable -Wunused-parameter - this forces us to add the gcc
"unused" attribute to a lot of parameters (mostly library callback
functions), but it's worth it during code refactorizations.
needed for compatibility with older gcc. Also, threw in
some warnings for things I find offensive
(declaration-after-statement, shadow)
git-svn-id: https://svn.musicpd.org/mpd/trunk@7299 09075e82-0dd4-0310-85a5-a0d7c8717e4f
autoconf flags for enabling and disabling TCP and unix domain socket
support. Embedded machines without a TCP stack may be better off
without TCP support.
git-svn-id: https://svn.musicpd.org/mpd/trunk@7236 09075e82-0dd4-0310-85a5-a0d7c8717e4f
a ton of optional functionality, but it's getting hard to keep track of it
all. So let's just be lazy.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6653 09075e82-0dd4-0310-85a5-a0d7c8717e4f
silence a warning about an unused variable without using stupid checks for
HAVE_AVAHI || HAVE_BONJOUR.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6471 09075e82-0dd4-0310-85a5-a0d7c8717e4f
I couldn't test mDNSResponder support on Linux, as Debian doesn't include it - but should work as well.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6453 09075e82-0dd4-0310-85a5-a0d7c8717e4f
plugin itself was never actually committed, so support for it was never
there.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5822 09075e82-0dd4-0310-85a5-a0d7c8717e4f
installing libs/includes, and apparently even the defaults can break cross
compiles (see bug #1454).
git-svn-id: https://svn.musicpd.org/mpd/trunk@5789 09075e82-0dd4-0310-85a5-a0d7c8717e4f
PKG_PROG_PKG_CONFIG to be done first. But this is only done if PulseAudio
and JACK aren't explitily disabled. Therefore, using ./configure
--disable-pulse --disable-jack will make it so that neither LSR nor
Zeroconf can be found. This is the second time this bug has come up (first
being when JACK was added), so can people please start adding to the test
around PKG_PROG_PKG_CONFIG when they add new features that need
PKG_CHECK_MODULES?
git-svn-id: https://svn.musicpd.org/mpd/trunk@5453 09075e82-0dd4-0310-85a5-a0d7c8717e4f
We don't need to check for libOggFLAC with FLAC 1.1.3
because FLAC 1.1.3 can be recompiled to enable/disable
OggFLAC support without recompiling mpd.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5255 09075e82-0dd4-0310-85a5-a0d7c8717e4f
-a and -o flags for 'test' are not consistently supported
across many platforms and not specified by POSIX
git-svn-id: https://svn.musicpd.org/mpd/trunk@5240 09075e82-0dd4-0310-85a5-a0d7c8717e4f
if you don't explicitly call it, then it is implied by the first use of
PKG_CHECK_MODULES (and no later ones). This results in the check only
being done in the test for pulse, which is skipped when --disable-pulse is
used. This will fix the bug mentioned in the previous commit.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5142 09075e82-0dd4-0310-85a5-a0d7c8717e4f
each other. Hopefully this will also fix a bug where --enable-jack
--disable-pulse would result in both JACK and PulseAudio being disabled.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5141 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Add -Wmissing-prototypes if compiling with gcc
Static where possible
git-svn-id: https://svn.musicpd.org/mpd/trunk@4657 09075e82-0dd4-0310-85a5-a0d7c8717e4f
So we can have VERSION=0.12.0rc1 and keep the
clients seeing 0.12.0
git-svn-id: https://svn.musicpd.org/mpd/trunk@4608 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Only add them if --prefix= wasn't specified, and only allow
one path of each to be added. This way Fink and Darwinports
users won't have libs from *both* (which would conflict).
Testing from OSX (Fink and/or Darwinports) users would be greatly
appreciated, as would testers from other non-GNU/Linux systems.
git-svn-id: https://svn.musicpd.org/mpd/trunk@4432 09075e82-0dd4-0310-85a5-a0d7c8717e4f
autogen.sh:
Detect more strange paths for aclocal on different
packaging systems. This should help encourage more
people to run svn code on their systems.
configure.ac:
Tested on FreeBSD (6.1). Darwin, OpenBSD, NetBSD info
gleaned off the Makefile distributed with git.
m4/shout.m4:
The Shout 2.2 port on a FreeBSD 6.1 machine seemed
problematic when it's compiled against pthreads, so this is
a gross hack to force -lpthread on it
git-svn-id: https://svn.musicpd.org/mpd/trunk@4390 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Huge thanks to gnarlie for helping me find and diagnose
several problems stemming from autogen.sh on FreeBSD 6.1
We require autoconf 2.58 for autogen.sh, but it seems like
that's always been the case, we just never caught it before :/
"bash ./configure" just about sums up what I want to do right now...
git-svn-id: https://svn.musicpd.org/mpd/trunk@4384 09075e82-0dd4-0310-85a5-a0d7c8717e4f
We never used many features from it, so there's no point in
keeping it and forcing people to install a non-standard library.
It may be standard on many GNU/Linux distributions, but there
are many other UNIXes out there. This makes life much easier
for people cross-compiling (like me :)
git-svn-id: https://svn.musicpd.org/mpd/trunk@4361 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Patch-by: R.Ramkumar <andyetitmoves@gmail.com>:
> MPD's configure seems to fail with newer versions of faad2 (Atleast
> mine from CVS does, I don't know how long this has been a problem
> for). MPD checks for faacDecInit2 which has been #define'd to
> NeAACDecInit2, and hence AC_CHECK_LIB fails. I am enclosing a patch
> which checks for the latter as a fallback. Hope that fixes things :)
This looks reasonable, but I haven't tested it myself [normalperson]
git-svn-id: https://svn.musicpd.org/mpd/trunk@4297 09075e82-0dd4-0310-85a5-a0d7c8717e4f
* autotools support is included, the floating point Vorbis decoder
remains the default.
* close bug #353
* Thanks to Hannes Reich for the patch
git-svn-id: https://svn.musicpd.org/mpd/trunk@3453 09075e82-0dd4-0310-85a5-a0d7c8717e4f