diff --git a/.travis.yml b/.travis.yml
index b136753932..48839a5334 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,11 +6,11 @@ before_install:
# TODO: test different combinations of flags, --enable-sdl, --enable-qt, etc
script:
- - ./configure --enable-sdl --prefix=$PWD/local && make -j8 && make install # build from checkout
- - make dist && tar -zxf projectM-*.tar.gz && cd projectM-* && ./configure --enable-sdl --prefix=$PWD/dist_install && make -j8 && make install # build from dist
- - echo "PWD $PWD"
+ - ./configure $PM_OPTS --prefix=$PWD/local && make -j6 && make install # build from checkout
+ - make dist && tar -zxf projectM-*.tar.gz && cd projectM-* && ./configure $PM_OPTS --prefix=$PWD/dist_install && make -j6 && make install # build from dist
+ - echo "PWD=$PWD"
- ls .
- - test -e src/projectM-sdl/projectMSDL
+ # - test -e src/projectM-sdl/projectMSDL
- test -e src/libprojectM/libprojectM.la
- test -e dist_install/share/projectM/fonts/Vera.ttf
- test -d dist_install/share/projectM/presets
@@ -23,7 +23,7 @@ script:
# test on GCC and Clang
matrix:
include:
- # linux/clang
+ # linux/clang with SDL
- os: linux
addons:
apt:
@@ -35,8 +35,26 @@ matrix:
- libglm-dev
- libc++-dev
env:
- - MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0"
- # linux/gcc
+ - MATRIX_EVAL="CC=clang-5.0 CXX=clang++-5.0 PM_OPTS=\"--enable-sdl\""
+ # linux/clang with pulseaudio/qt/jack
+ - os: linux
+ addons:
+ apt:
+ sources:
+ - llvm-toolchain-trusty-5.0
+ packages:
+ - libsdl2-dev
+ - clang-5.0
+ - libglm-dev
+ - libc++-dev
+ - qtdeclarative5-dev
+ - libqt5opengl5-dev
+ - libjack-dev
+ - libpulse-dev
+ - libsdl-dev # for jack
+ env:
+ - MATRIX_EVAL="CC=clang-5.0 CXX=clang++-5.0 PM_OPTS=\"--enable-qt --enable-jack --enable-pulseaudio\""
+ # linux/gcc
- os: linux
addons:
apt:
diff --git a/Makefile.am b/Makefile.am
index 680af54745..3762fa9354 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -5,6 +5,9 @@ PRESETSDIR = presets
EXTRA_DIST=README.md AUTHORS.txt presets fonts $(PRESETSDIR)
CLEANFILES=
+# stick apps in bin
+# bin_PROGRAMS = $(top_builddir)/bin
+
# aka /usr/local/share/projectM
pm_data_dir = $(pkgdatadir)
pm_font_dir = $(pm_data_dir)/fonts
diff --git a/README.md b/README.md
index 75c53272f2..61377596c4 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
[](https://travis-ci.org/projectM-visualizer/projectm)
[](#backers)
- [](#sponsors)
+ [](#sponsors)

@@ -71,7 +71,7 @@ Silverjuke (FOSS Jukebox)
```
## Linux (debian/ubuntu)
-* `sudo apt-get install autoconf libtool libsdl2-dev libglm-dev`
+* `sudo apt install autoconf libtool libsdl2-dev libglm-dev qtdeclarative5-dev libqt5opengl5-dev libjack-dev libpulse-dev libsdl-dev`
## FreeBSD
* `pkg install gcc autoconf automake libtool mesa-libs libGLU sdl2 glm`
@@ -130,7 +130,7 @@ If you maintain packages of libprojectM, we are happy to work with you! Please n
## Contributors
-This project exists thanks to all the people who contribute.
+This project exists thanks to all the people who contribute.
diff --git a/configure.ac b/configure.ac
index 7ab819130b..36000a5bee 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([projectM], [3.1.0], [mischa@mvstg.biz], [projectM], [https://github.com/revmischa/projectm])
+AC_INIT([projectM], [3.1.1], [mischa@mvstg.biz], [projectM], [https://github.com/projectM-visualizer/projectm/])
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects tar-pax])
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
@@ -72,27 +72,40 @@ AC_CONFIG_FILES([
src/projectM-emscripten/Makefile
src/projectM-qt/Makefile
src/projectM-pulseaudio/Makefile
+ src/projectM-jack/Makefile
src/projectM-test/Makefile
- ])
+])
-dnl SDL
-AC_ARG_ENABLE([sdl],
- AS_HELP_STRING([--enable-sdl], [Build SDL2 app]),
- [], [enable_sdl=no])
-AS_IF([test "x$enable_sdl" = "xyes"], [
- m4_include([m4/sdl2.m4])
- SDL_VERSION=2.0.5
- AS_IF([test "$TRAVIS"], [SDL_VERSION=2.0.2]) # travis has old SDL, we don't care
- AS_IF([test "EMSCRIPTEN"], [SDL_VERSION=2.0.0]) # emscripten has old SDL, we don't care
- AM_PATH_SDL2($SDL_VERSION, :, AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!]))
+
+# SDL
+AC_ARG_ENABLE([sdl], AS_HELP_STRING([--enable-sdl], [Build SDL2 application]), [], [enable_sdl=check])
+AS_IF([test "$enable_sdl" != "no"], [
+ PKG_CHECK_MODULES([SDL], [sdl2], [
+ m4_include([m4/sdl2.m4])
+ SDL_VERSION="2.0.5"
+ AS_IF([test "$TRAVIS"], [SDL_VERSION=2.0.2]) # travis has old SDL, we don't care
+ AS_IF([test "$EMSCRIPTEN"], [SDL_VERSION=2.0.0]) # emscripten has old SDL, we don't care
+
+ # Check for libSDL >= $SDL_VERSION
+ AM_PATH_SDL2($SDL_VERSION,
+ [enable_sdl=yes],
+ [AS_IF([test "$enable_sdl" = "yes"], AC_MSG_ERROR([*** SDL version >= $SDL_VERSION not found!])); enable_sdl=no])
+ ],
+ [
+ # not found
+ AS_IF([test "$enable_sdl" = "yes"], AC_MSG_ERROR([*** libsdl2 not found!]))
+ enable_sdl=no
+ ])
])
-dnl glm
+
+# glm
AS_IF([test "x$enable_emscripten" != "xyes"], [
AC_CHECK_HEADER([glm/glm.hpp],, AC_MSG_ERROR(libglm is required.))
])
-dnl Threading
+
+# Threading
AC_ARG_ENABLE([threading],
AS_HELP_STRING([--enable-threading], [multhreading]),
[], [enable_threading=yes])
@@ -133,32 +146,82 @@ AX_CHECK_COMPILE_FLAG([-std=c++11], [
CXXFLAGS="$CXXFLAGS -std=c++11"])
dnl Qt
-AC_ARG_ENABLE([qt],
- AS_HELP_STRING([--enable-qt], [Build Qt]),
- [], [enable_qt=no])
-AS_IF([test "x$enable_qt" = "xyes"], [
- PKG_CHECK_MODULES(QT, [Qt5Core, Qt5Gui, Qt5Widgets Qt5OpenGL], [], [AC_MSG_ERROR([Qt libraries are required.])])
- qt_CPPFLAGS="`$PKG_CONFIG --cflags-only-I Qt5Core Qt5Gui Qt5Widgets Qt5OpenGL` $CPPFLAGS"
- qt_LDFLAGS="`$PKG_CONFIG --libs-only-L Qt5Core Qt5Gui Qt5Widgets Qt5OpenGL` $LDFLAGS"
- qt_LIBS="`$PKG_CONFIG --libs-only-l Qt5Core Qt5Gui Qt5Widgets Qt5OpenGL` $LIBS"
-
- if ! `$PKG_CONFIG --atleast-version=5.0.0 Qt5Core`; then
- AC_MSG_ERROR([Qt >= 5.0.0 is required. Try installing qtdeclarative5-dev])
- fi
-
- AC_CHECK_PROGS(MOC, [moc-qt5 moc])
- AC_CHECK_PROGS(UIC, [uic-qt5 uic])
- AC_CHECK_PROGS(RCC, [rcc-qt5 rcc])
- if test -z "$MOC" || test -z "$UIC" || test -z "$RCC"; then
- AC_MSG_ERROR([Qt utility programs moc, uic, and rcc are required.])
- fi
-
- PKG_CHECK_MODULES(LIBPULSE, [libpulse], [], [AC_MSG_ERROR([Pulseaudio library libpulse is required.])])
-])
-
-AM_CONDITIONAL([ENABLE_SDL], [test "$enable_sdl" = yes])
-AM_CONDITIONAL([ENABLE_QT], [test "$enable_qt" = yes])
-AM_CONDITIONAL([ENABLE_EMSCRIPTEN], [test "$enable_emscripten" = yes])
+AC_ARG_ENABLE([qt], AS_HELP_STRING([--enable-qt], [Enable Qt: needed for pulseaudio and jack GUIs]), [], [enable_qt=check])
+AS_IF([test "$enable_qt" != "no"],
+ [PKG_CHECK_MODULES([qt],
+ [Qt5Core, Qt5Gui, Qt5Widgets Qt5OpenGL],
+ [
+ enable_qt=yes
+
+ # do more checks for Qt version and tools
+ qt_CPPFLAGS="`$PKG_CONFIG --cflags-only-I Qt5Core Qt5Gui Qt5Widgets Qt5OpenGL` $CPPFLAGS"
+ qt_LDFLAGS="`$PKG_CONFIG --libs-only-L Qt5Core Qt5Gui Qt5Widgets Qt5OpenGL` $LDFLAGS"
+ qt_LIBS="`$PKG_CONFIG --libs-only-l Qt5Core Qt5Gui Qt5Widgets Qt5OpenGL` $LIBS"
+ AC_SUBST(qt_CPPFLAGS)
+ AC_SUBST(qt_LDFLAGS)
+ AC_SUBST(qt_LIBS)
+
+ if ! `$PKG_CONFIG --atleast-version=5.0.0 Qt5Core`; then
+ AC_MSG_WARN([Qt >= 5.0.0 is required. Try installing libqt5opengl5-dev qtdeclarative5-dev])
+ enable_qt=no
+ fi
+
+ AC_CHECK_PROGS(MOC, [moc-qt5 moc])
+ AC_CHECK_PROGS(UIC, [uic-qt5 uic])
+ AC_CHECK_PROGS(RCC, [rcc-qt5 rcc])
+ if test -z "$MOC" || test -z "$UIC" || test -z "$RCC"; then
+ AC_MSG_WARN([Qt utility programs moc, uic, and rcc are required.])
+ enable_qt=no
+ fi
+ MOC="$MOC -qt=5"
+ UIC="$UIC -qt=5"
+ RCC="$RCC -qt=5"
+
+ export QT_SELECT=qt5
+ ],
+ [AS_IF([test "$enable_qt" = "yes"],
+ [AC_MSG_ERROR(["Qt5 not found"])],
+ [enable_qt=no])]
+)])
+
+
+# Pulseaudio
+AC_ARG_ENABLE([pulseaudio], AS_HELP_STRING([--enable-pulseaudio], [Build Pulseaudio]), [], [enable_pulseaudio=check])
+AS_IF([test "$enable_pulseaudio" != "no"],
+ [PKG_CHECK_MODULES([libpulse],
+ [libpulse],
+ [
+ # still need qt
+ AS_IF([test "$enable_qt" = "yes"],
+ [enable_pulseaudio=yes],
+ [enable_pulseaudio="Qt required"])
+ ],
+ [AS_IF([test "$enable_pulseaudio" = "yes"],
+ [AC_MSG_ERROR([libpulse required, but not found.])],
+ [enable_pulseaudio=no])])])
+
+
+# Jack
+AC_ARG_ENABLE([jack], AS_HELP_STRING([--enable-jack], [Build Jack]), [], [enable_jack=check])
+AS_IF([test "$enable_jack" != "no"],
+ [PKG_CHECK_MODULES([jack],
+ [jack],
+ [
+ # still need qt
+ AS_IF([test "$enable_qt" = "yes"],
+ [enable_jack=yes],
+ [enable_jack="Qt required"])
+ ],
+ [AS_IF([test "$enable_jack" = "yes"],
+ [AC_MSG_ERROR([jack required, but not found.])],
+ [enable_jack=no])])])
+
+
+AM_CONDITIONAL([ENABLE_SDL], [test "x$enable_sdl" = "xyes"])
+AM_CONDITIONAL([ENABLE_QT], [test "x$enable_qt" = "xyes"])
+AM_CONDITIONAL([ENABLE_JACK], [test "x$enable_jack" = "xyes"])
+AM_CONDITIONAL([ENABLE_PULSEAUDIO], [test "x$enable_pulseaudio" = "xyes"])
+AM_CONDITIONAL([ENABLE_EMSCRIPTEN], [test "x$enable_emscripten" = "xyes"])
my_CFLAGS="-Wall -Wchar-subscripts -Wformat-security -Wpointer-arith -Wshadow -Wsign-compare -Wtype-limits "
@@ -192,7 +255,9 @@ Applications:
libprojectM: yes
Threading: ${enable_threading}
SDL: ${enable_sdl}
-Qt & Pulseaudio: ${enable_qt}
+Qt: ${enable_qt}
+Pulseaudio: ${enable_pulseaudio}
+Jack: ${enable_jack}
OpenGLES: ${enable_gles}
Emscripten: ${enable_emscripten}
])
diff --git a/src/Makefile.am b/src/Makefile.am
index 79f6f367f2..6d5e6e797e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,17 +1,25 @@
if ENABLE_SDL
- PROJECTM_SDL_SUBDIR = projectM-sdl projectM-test
+ PROJECTM_SDL_SUBDIR = projectM-test projectM-sdl
endif
if ENABLE_QT
- PROJECTM_QT_SUBDIR = projectM-qt projectM-pulseaudio
+ PROJECTM_QT_SUBDIR = projectM-qt
+endif
+
+if ENABLE_PULSEAUDIO
+ PROJECTM_PULSEAUDIO_SUBDIR = projectM-qt projectM-pulseaudio
+endif
+
+if ENABLE_JACK
+ PROJECTM_JACK_SUBDIR = projectM-qt projectM-jack
endif
if ENABLE_EMSCRIPTEN
PROJECTM_EMSCRIPTEN_SUBDIR = projectM-emscripten
endif
-SUBDIRS=libprojectM NativePresets ${PROJECTM_SDL_SUBDIR} ${PROJECTM_QT_SUBDIR} ${PROJECTM_EMSCRIPTEN_SUBDIR}
-
# system headers/libraries/data to install
# for compatibility reasons here as nobase_include
nobase_include_HEADERS = libprojectM/projectM.hpp libprojectM/Common.hpp libprojectM/dlldefs.h libprojectM/event.h libprojectM/fatal.h libprojectM/PCM.hpp
+
+SUBDIRS = libprojectM NativePresets ${PROJECTM_SDL_SUBDIR} ${PROJECTM_QT_SUBDIR} ${PROJECTM_EMSCRIPTEN_SUBDIR} ${PROJECTM_JACK_SUBDIR} ${PROJECTM_PULSEAUDIO_SUBDIR}
diff --git a/src/projectM-jack/Makefile.am b/src/projectM-jack/Makefile.am
new file mode 100644
index 0000000000..b37f16c882
--- /dev/null
+++ b/src/projectM-jack/Makefile.am
@@ -0,0 +1,34 @@
+AM_CPPFLAGS = \
+${my_CFLAGS} \
+-include $(top_builddir)/config.h \
+-DSYSCONFDIR=\""$(sysconfdir)"\" \
+-DPROJECTM_PREFIX=\""${prefix}"\" \
+-DRESOURCE_PREFIX=\""share/projectM"\" \
+-I${top_srcdir}/src/libprojectM \
+-I${top_srcdir}/src/libprojectM/Renderer \
+-I${top_srcdir}/src/projectM-qt \
+${jack_CFLAGS} \
+${qt_CPPFLAGS} \
+-fPIC \
+${qt_CFLAGS}
+
+# TODO: add remote control if we have qxt network lib
+# if QT_NETWORK_ENABLED
+# EXTRA_SRCS = HTTPRemoteControl.cpp
+# endif
+
+
+# TODO: build qprojectM-jack and projectM-jack as separate programs
+
+bin_PROGRAMS = projectM_jack
+projectM_jack_SOURCES = qprojectM-jack.cpp ConfigFile.cpp ${EXTRA_SRCS}
+projectM_jack_LDADD = \
+ ../projectM-qt/libprojectM_qt.a \
+ ${jack_LIBS} \
+ ${qt_LIBS} \
+ ../libprojectM/libprojectM.la \
+ -lSDL
+projectM_jack_LDFLAGS = -static -fPIC ${qt_LDFLAGS}
+projectM_jack_PROGRAM = projectM-jack
+
+dist_man_MANS = projectM-jack.1
diff --git a/src/projectM-jack/make_bundle.sh b/src/projectM-jack/make_bundle.sh
old mode 100644
new mode 100755
diff --git a/src/projectM-jack/projectM-jack.cpp b/src/projectM-jack/projectM-jack.cpp
index a61436a5d6..d3936f88c0 100644
--- a/src/projectM-jack/projectM-jack.cpp
+++ b/src/projectM-jack/projectM-jack.cpp
@@ -31,6 +31,7 @@
#include
#include
#include
+#include
#include
@@ -384,5 +385,3 @@ int main( int argc, char **argv ) {
return 1;
}
-
-
diff --git a/src/projectM-jack/video_init.cpp b/src/projectM-jack/video_init.cpp
old mode 100755
new mode 100644
diff --git a/src/projectM-jack/video_init.h b/src/projectM-jack/video_init.h
old mode 100755
new mode 100644
diff --git a/src/projectM-pulseaudio/Makefile.am b/src/projectM-pulseaudio/Makefile.am
index fbf19c413a..9205940e25 100644
--- a/src/projectM-pulseaudio/Makefile.am
+++ b/src/projectM-pulseaudio/Makefile.am
@@ -8,8 +8,7 @@ projectM_pulseaudio_qtheaders = \
nodist_projectM_pulseaudio_moc_sources = $(projectM_pulseaudio_qtheaders:.hpp=_moc.cpp)
.hpp_moc.cpp:
- @MOC@ -o$@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(MOC_CPPFLAGS)\
- $(qt_CPPFLAGS) $(qt_LDFLAGS) $(qt_LIBS) $<
+ @MOC@ -o$@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(MOC_CPPFLAGS) $<
ui_PulseDeviceChooserDialog.h: PulseDeviceChooserDialog.ui
@UIC@ -o $@ $<
@@ -21,8 +20,9 @@ AM_CPPFLAGS = \
-I${top_srcdir}/src/libprojectM \
-I${top_srcdir}/src/libprojectM/Renderer \
-I${top_srcdir}/src/projectM-qt \
- ${QT_CFLAGS} \
- ${LIBPULSE_CFLAGS} \
+ ${qt_CFLAGS} \
+ ${qt_CPPFLAGS} \
+ ${libpulse_CFLAGS} \
-fPIC
AM_CFLAGS = ${my_CFLAGS} \
@@ -44,12 +44,12 @@ nodist_projectM_pulseaudio_SOURCES = \
$(nodist_projectM_pulseaudio_moc_sources)
projectM_pulseaudio_LDADD = \
- ${LIBPULSE_LIBS} \
+ ${libpulse_LIBS} \
../projectM-qt/libprojectM_qt.a \
../libprojectM/libprojectM.la \
- ${QT_LIBS}
+ ${qt_LIBS}
-projectM_pulseaudio_LDFLAGS = -static
+projectM_pulseaudio_LDFLAGS = -static ${qt_LIBS}
projectM_pulseaudio_PROGRAM = projectM-pulseaudio
diff --git a/src/projectM-qt/Makefile.am b/src/projectM-qt/Makefile.am
index a49b89ddcf..a3bd16c891 100644
--- a/src/projectM-qt/Makefile.am
+++ b/src/projectM-qt/Makefile.am
@@ -15,7 +15,7 @@ nodist_projectM_qt_moc_sources = $(projectM_qt_qtheaders:.hpp=_moc.cpp)
.hpp_moc.cpp:
@MOC@ -o$@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(MOC_CPPFLAGS)\
- $(qt_CPPFLAGS) $(qt_LDFLAGS) $(qt_LIBS) $<
+ $(qt_CPPFLAGS) $(qt_LDFLAGS) $<
ui_qprojectm_mainwindow.h: qprojectm_mainwindow.ui
@UIC@ -o $@ $<
@@ -63,7 +63,8 @@ AM_CPPFLAGS = \
-DSYSCONFDIR=\""$(sysconfdir)"\" \
-I${top_srcdir}/src/libprojectM \
-I${top_srcdir}/src/libprojectM/Renderer \
- ${QT_CFLAGS} \
+ ${qt_CFLAGS} \
+ ${qt_CPPFLAGS} \
-fPIC
AM_CFLAGS = ${my_CFLAGS} \