Replacing the antlr parsers solves multiple issues:
- Build warnings (issue #307)
- Build hacks: "-Xconversiontimeout 30000" and other Makefile magic
- Incorrect parsing of daap queries with sql wildcards (like 'tag:*tes%t_ng*')
- Infinite recursion/memory/CPU (issue #570 and #1248)
- systemd service file workarounds due to memory/CPU issue
- ANTLR3 being replaced with ANTLR4 (that doesn't support C file generation)
- Runtime dependency on antlr library
- Difficult installs of ANTLR3 on some systems (special install script)
If --enable-install-user set add owntone system user and group (unless other
user/group specified with --with-user or --with-group). The user will be added
to pulse-access if the group is present.
Don't overwrite config, it's a pita. Use same solution as shairport-sync where
distros can use --disable-install_conf_file if required.
A './configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var' will
result in service files in /etc/systemd/system, which seems sensible. Package
builds can specify other location, e.g. --with-systemdir=/lib/systemd/system,
or ship their own service file and use --disable-install-systemd.
Also added more cleanup on uninstall - before we where leaving stuff in
/var/cache/owntone + the logs + the pid files.
Select use of either libspotify or librespot-c as streaming backend via config
option.
librespot-c (renamed/improved spotifyc) impl has the following:
- sync interface
- seek support
- honor bitrate config, set client and thread name
- use web access token with "streaming" scope for login
- fix issue with podcast playback
Also say goodbye to file-based Spotify login.
2.10's mxmlDelete memleaks, and mxml is used in many parts of forked-daapd. So
to avoid that we ship upstream's fixed version of mxmlDelete and use that.
Seems ffmpeg 3.4 has a bug in the new API that causes a crash when
avcodec_send_frame() is called. The bug is fixed in 3.4.2.
The new option --disable-modern-av-api allows for building with the
old API, i.e. no avcodec_send_frame(), even if ffmpeg support is
detected at configure time. The option may also become useful for
easier testing of legacy mode.