Created ebuild for projectm-pulseaudio, "A Qt based GUI for projectM that visualizes your Pulseaudio output." Ebuild heavily based on ebuild for projectm-pulseaudio There is some symbolic-link quirk in it because cmake wants a header file to be somewhere else, I don't know to fix it instead.
Created attachment 219797 [details] projectm-pulseaudio-2.0.1.ebuild
oops i meant the ebuild is based on projectm-jack ;-)
Created attachment 221395 [details, diff] ebuild avahi dep fix projectm-pulseaudio needs pulse/browser.h which only installs if you compile pulseaudio with avahi flag. The diff fix the dependency
i get a bunch of compilation errors starting with this one: [ 91%] Building CXX object CMakeFiles/projectM-pulseaudio.dir/moc_QPulseAudioDeviceChooser.o In file included from /var/tmp/portage/media-sound/projectm-pulseaudio-2.0.1/work/projectm-pulseaudio-2.0.1_build/moc_QPulseAudioDeviceChooser.cxx:10: /var/tmp/portage/media-sound/projectm-pulseaudio-2.0.1/work/projectm-pulseaudio-2.0.1_build/../projectM-pulseaudio-2.0.1-Source/QPulseAudioDeviceChooser.hpp:24:41: error: ui_PulseDeviceChooserDialog.h: No such file or directory
Created attachment 266575 [details] ebuild Got rid of the ugly symlink hack by using CMAKE_IN_SOURCE_BUILD, this fixed the ui_PulseDeviceChooserDialog.h header file problem. Then I had to also #include <sys/stat.h> for a mkdir() in qprojectM-pulseaudio.cpp, so patching this file was necessary.
Created attachment 266577 [details, diff] include_mkdir.patch
Created attachment 293939 [details] ebuild applying the exclude_browserh.patch It seems newer pulseraudio versions don't have a browser.h file at all (with or without avahi-useflag). The patch removes the #include browser.h directive. The source compiles for me and the visualizer seems to work. Patch follows.
Created attachment 293941 [details, diff] remove #include browser.h directive.
The ebuild compiles and installs on my AMD64 system. However, when I run the resulting binary, I get this error: ~ $ projectM-pulseaudio dir:/usr/share/projectM/config.inp reading ~/.projectM/config.inp libEGL warning: GLX/DRI2 is not supported [projectM] config file: /home/rogue/.projectM/config.inp Segmentation fault The install file in the source package is no help of course. Has anyone else gotten this to work on AMD64, or is there something wrong with my setup?
Here is the output when I run projectM-pulseaudio inside strace: stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 mmap(NULL, 266240, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd040588000 poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}]) writev(6, [{"\22\0\n\0\3\0@\2\24\1\0\0\4\0\0\0 \0038\2\4\0\0\0\17\1\0\0\27\1\0\0"..., 16384}, {NULL, 0}, {"", 0}], 3) = 16384 read(6, "\34\0\363\0\3\0@\2'\0\0\0g\36\224\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 128 read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}]) writev(6, [{"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 16384}, {NULL, 0}, {"", 0}], 3) = 16384 read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}]) writev(6, [{"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 16384}, {NULL, 0}, {"", 0}], 3) = 16384 read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}]) writev(6, [{"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 16384}, {NULL, 0}, {"", 0}], 3) = 16384 read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}]) writev(6, [{"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 16384}, {NULL, 0}, {"", 0}], 3) = 16384 read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}]) writev(6, [{"\240T\0\377\1\1\0\377\0\0\0\377\0\0\0=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 6212}, {NULL, 0}, {"", 0}], 3) = 6212 poll([{fd=6, events=POLLIN}], 1, -1) = 1 ([{fd=6, revents=POLLIN}]) read(6, "\34\0\375\0\3\0@\2:\1\0\0h\36\224\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 100 read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) munmap(0x7fd040588000, 266240) = 0 poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}]) writev(6, [{"\22\0\17\0\3\0@\2#\0\0\0#\0\0\0 \0\0\0\t\0\0\0G\0\0\0\1\0\0\0"..., 196}, {NULL, 0}, {"", 0}], 3) = 196 poll([{fd=6, events=POLLIN}], 1, -1) = 1 ([{fd=6, revents=POLLIN}]) read(6, "\34\0\377\0\3\0@\2#\0\0\0h\36\224\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 172 read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}]) writev(6, [{"\226\4\5\0\r\0@\2\f\0@\2$\1\0\0\0\0\0\0\2\0\4\0\f\0@\2\20\0\0\0"..., 100}, {NULL, 0}, {"", 0}], 3) = 100 poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}]) writev(6, [{"7\0\5\0\17\0@\2\f\0@\2\1\0\0\0\3\0\0\0007\0\6\0\20\0@\2\f\0@\2"..., 52}], 1) = 52 poll([{fd=6, events=POLLIN}], 1, -1) = 1 ([{fd=6, revents=POLLIN}]) read(6, "\1\30\16\1\0\0\0\0]\1\0\0\0\0\0\0d\0\36\0\0\0\0\0\0\0\0\0\0\0\0\0", 4096) = 32 read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) lstat("/home/rogue/.config/projectM/qprojectM.conf", 0x7fff9902f1b0) = -1 ENOENT (No such file or directory) open("/home/rogue/.config/projectM/qprojectM.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) stat("/home/rogue/.config/projectM/qprojectM.conf", 0x7fff9902f220) = -1 ENOENT (No such file or directory) stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 lstat("/home/rogue/.config/projectM.conf", 0x7fff9902f1b0) = -1 ENOENT (No such file or directory) open("/home/rogue/.config/projectM.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) stat("/home/rogue/.config/projectM.conf", 0x7fff9902f220) = -1 ENOENT (No such file or directory) stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 lstat("/etc/qt4/projectM/qprojectM.conf", 0x7fff9902f1b0) = -1 ENOENT (No such file or directory) open("/etc/qt4/projectM/qprojectM.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) stat("/etc/qt4/projectM/qprojectM.conf", 0x7fff9902f220) = -1 ENOENT (No such file or directory) stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 lstat("/etc/qt4/projectM.conf", 0x7fff9902f1b0) = -1 ENOENT (No such file or directory) open("/etc/qt4/projectM.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) stat("/etc/qt4/projectM.conf", 0x7fff9902f220) = -1 ENOENT (No such file or directory) stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}]) writev(6, [{"\16\0\2\0\f\0@\2", 8}], 1) = 8 poll([{fd=6, events=POLLIN}], 1, -1) = 1 ([{fd=6, revents=POLLIN}]) read(6, "\1\30\17\1\0\0\0\0]\1\0\0\0\0\0\0d\0\36\0\0\0\0\0\0\0\0\0\0\0\0\0", 4096) = 32 futex(0x7fd0408ce908, FUTEX_WAKE_PRIVATE, 2147483647) = 0 write(3, "\1\0\0\0\0\0\0\0", 8) = 8 write(3, "\1\0\0\0\0\0\0\0", 8) = 8 lstat("/home/rogue/.config/projectM/qprojectM.conf", 0x7fff9902f080) = -1 ENOENT (No such file or directory) open("/home/rogue/.config/projectM/qprojectM.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) stat("/home/rogue/.config/projectM/qprojectM.conf", 0x7fff9902f0f0) = -1 ENOENT (No such file or directory) stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 lstat("/home/rogue/.config/projectM.conf", 0x7fff9902f080) = -1 ENOENT (No such file or directory) open("/home/rogue/.config/projectM.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) stat("/home/rogue/.config/projectM.conf", 0x7fff9902f0f0) = -1 ENOENT (No such file or directory) stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 lstat("/etc/qt4/projectM/qprojectM.conf", 0x7fff9902f080) = -1 ENOENT (No such file or directory) open("/etc/qt4/projectM/qprojectM.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) stat("/etc/qt4/projectM/qprojectM.conf", 0x7fff9902f0f0) = -1 ENOENT (No such file or directory) stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 lstat("/etc/qt4/projectM.conf", 0x7fff9902f080) = -1 ENOENT (No such file or directory) open("/etc/qt4/projectM.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) stat("/etc/qt4/projectM.conf", 0x7fff9902f0f0) = -1 ENOENT (No such file or directory) stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 read(6, 0xf080e4, 4096) = -1 EAGAIN (Resource temporarily unavailable) lstat("/home/rogue/.config/projectM/qprojectM.conf", 0x7fff9902f070) = -1 ENOENT (No such file or directory) open("/home/rogue/.config/projectM/qprojectM.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) stat("/home/rogue/.config/projectM/qprojectM.conf", 0x7fff9902f0e0) = -1 ENOENT (No such file or directory) stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 lstat("/home/rogue/.config/projectM.conf", 0x7fff9902f070) = -1 ENOENT (No such file or directory) open("/home/rogue/.config/projectM.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) stat("/home/rogue/.config/projectM.conf", 0x7fff9902f0e0) = -1 ENOENT (No such file or directory) stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 lstat("/etc/qt4/projectM/qprojectM.conf", 0x7fff9902f070) = -1 ENOENT (No such file or directory) open("/etc/qt4/projectM/qprojectM.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) stat("/etc/qt4/projectM/qprojectM.conf", 0x7fff9902f0e0) = -1 ENOENT (No such file or directory) stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 lstat("/etc/qt4/projectM.conf", 0x7fff9902f070) = -1 ENOENT (No such file or directory) open("/etc/qt4/projectM.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) stat("/etc/qt4/projectM.conf", 0x7fff9902f0e0) = -1 ENOENT (No such file or directory) stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 write(3, "\1\0\0\0\0\0\0\0", 8) = 8 write(3, "\1\0\0\0\0\0\0\0", 8) = 8 write(1, "[projectM] config file: /home/ro"..., 57[projectM] config file: /home/rogue/.projectM/config.inp ) = 57 open("/home/rogue/.projectM/config.inp", O_RDONLY) = 12 read(12, "# config.inp\n# Configuration Fil"..., 8191) = 798 read(12, "", 8191) = 0 close(12) = 0 open("/usr/share/projectM/shaders/projectM.cg", O_RDONLY) = 12 read(12, "#define M_PI 3.14159265359\n#d"..., 8191) = 2925 read(12, "", 8191) = 0 close(12) = 0 open("/usr/share/projectM/shaders/blur.cg", O_RDONLY) = 12 read(12, "struct outtype {float4 color : C"..., 8191) = 4522 read(12, "", 8191) = 0 close(12) = 0 brk(0x1263000) = 0x1263000 brk(0x12a6000) = 0x12a6000 brk(0x12d0000) = 0x12d0000 --- {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x10} (Segmentation fault) --- +++ killed by SIGSEGV +++ Segmentation fault If anyone can figure out why this is happening I would appreciate it.
Gdb backtrace: Core was generated by `./projectM-pulseaudio'. Program terminated with signal 11, Segmentation fault. #0 0x00007ffe3c96e214 in ?? () from /usr/lib64/libCgGL.so (gdb) bt #0 0x00007ffe3c96e214 in ?? () from /usr/lib64/libCgGL.so #1 0x00007ffe3c953878 in cgGLIsProfileSupported () from /usr/lib64/libCgGL.so #2 0x00007ffe3c9538ee in ?? () from /usr/lib64/libCgGL.so #3 0x00007ffe3c954b35 in cgGLGetLatestProfile () from /usr/lib64/libCgGL.so #4 0x00007ffe3c3de83b in ShaderEngine::SetupCg() () from /usr/lib64/libprojectM.so.2 #5 0x00007ffe3c3e07d0 in ShaderEngine::ShaderEngine() () from /usr/lib64/libprojectM.so.2 #6 0x00007ffe3c3da545 in Renderer::Renderer(int, int, int, int, int, BeatDetect*, std::string, std::string, std::string) () from /usr/lib64/libprojectM.so.2 #7 0x00007ffe3c3c0930 in projectM::projectM_init(int, int, int, int, int, int) () from /usr/lib64/libprojectM.so.2 #8 0x00007ffe3c3c14b5 in projectM::readConfig(std::string const&) () from /usr/lib64/libprojectM.so.2 #9 0x00007ffe3c3c2013 in projectM::projectM(std::string, int) () from /usr/lib64/libprojectM.so.2 #10 0x00007ffe3c6afd2c in QProjectMWidget::initializeGL() () from /usr/lib64/libprojectM-qt.so.1 #11 0x00007ffe3b18b0c4 in QGLWidget::glInit() () from /usr/lib64/qt4/libQtOpenGL.so.4 #12 0x00007ffe3b2048fc in QGLWidget::resizeEvent(QResizeEvent*) () from /usr/lib64/qt4/libQtOpenGL.so.4 #13 0x00007ffe3b689826 in QWidget::event(QEvent*) () ---Type <return> to continue, or q <return> to quit--- #14 0x00007ffe3b192c3c in QGLWidget::event(QEvent*) () from /usr/lib64/qt4/libQtOpenGL.so.4 #15 0x00007ffe3b637be4 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/qt4/libQtGui.so.4 #16 0x00007ffe3b63c82f in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/qt4/libQtGui.so.4 #17 0x0000000000411624 in ProjectMApplication::notify (this=0x7fffa17505f0, receiver=0xcfba40, event=0x7fffa174fe10) at /home/rogue/projectM/projectM-complete-2.1.0-Source/src/projectM-pulseaudio/qprojectM-pulseaudio.cpp:101 #18 0x00007ffe3ae00c4c in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/qt4/libQtCore.so.4 #19 0x00007ffe3b68412f in QWidgetPrivate::sendPendingMoveAndResizeEvents(bool, bool) () from /usr/lib64/qt4/libQtGui.so.4 #20 0x00007ffe3b68bc93 in QWidgetPrivate::show_helper() () from /usr/lib64/qt4/libQtGui.so.4 #21 0x00007ffe3b68c0ea in QWidget::setVisible(bool) () from /usr/lib64/qt4/libQtGui.so.4 #22 0x00007ffe3b68bc46 in QWidgetPrivate::showChildren(bool) () from /usr/lib64/qt4/libQtGui.so.4 #23 0x00007ffe3b68bcaf in QWidgetPrivate::show_helper() () from /usr/lib64/qt4/libQtGui.so.4 ---Type <return> to continue, or q <return> to quit--- #24 0x00007ffe3b68c0ea in QWidget::setVisible(bool) () from /usr/lib64/qt4/libQtGui.so.4 #25 0x0000000000411210 in QWidget::show (this=0xc25d00) at /usr/include/qt4/QtGui/qwidget.h:494 #26 0x00000000004108a6 in main (argc=1, argv=0x7fffa1750738) at /home/rogue/projectM/projectM-complete-2.1.0-Source/src/projectM-pulseaudio/qprojectM-pulseaudio.cpp:129 (gdb) I'm not experienced with gdb, so I don't know why info locals didn't return any local variables. The code around frame 0 can be found here: http://dpaste.org/GgSOY/ equery belongs /usr/lib64/libCgGl.so doesn't return any results, not sure if it is a bug in equery or if that library really is orphaned. If it is orphaned, that could explain the problem. If not, I guess it could easily be a bug in the version of qt that I'm using (qt-core 4.8.1-r3), or it could be a problem with the graphics layer...
Fixed in main tree.