Sync from upstream SVN, version 1396.
diff --git a/AUTHORS.txt b/AUTHORS.txt
old mode 100644
new mode 100755
index e0ae79c..7544527
--- a/AUTHORS.txt
+++ b/AUTHORS.txt
@@ -1,4 +1,3 @@
-

 projectM -- Milkdrop-esque visualisation SDK

 Copyright (C)2003-2007 projectM Team

 

@@ -25,12 +24,12 @@
     Evaluator

     Pulse Audio support (projectM-pulseaudio)

     Qt GUI (projectM-qt)

-	

+

 Peter Sperl

     Beat Detection

     Rendering

     XMMS Support (projectM-xmms)

-    libvisual Support (projectM-libvisual)   

+    libvisual Support (projectM-libvisual)

 

 Alligator Descartes

     Media Player Support (iTunes, Winamp, Windows Media Player)

@@ -40,3 +39,8 @@
 

 Roger Dannenburg

     Advice & Support

+

+Matthias Klumpp

+    CMake build system

+    Distro integration

+    Bug fixes

diff --git a/CMakeLists.txt b/CMakeLists.txt
index dcda29d..634b82f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,11 +1,5 @@
 PROJECT(projectM-complete)
-cmake_minimum_required(VERSION 2.4.0)
-cmake_policy(SET CMP0005 OLD)
-
-if(COMMAND cmake_policy)
-       cmake_policy(SET CMP0003 NEW)
-endif(COMMAND cmake_policy)
-
+cmake_minimum_required(VERSION 2.8.0)
 
 include(src/cmake/CPack-projectM.cmake)
 
diff --git a/src/libprojectM/CMakeLists.txt b/src/libprojectM/CMakeLists.txt
index 03cdbc7..acc698e 100644
--- a/src/libprojectM/CMakeLists.txt
+++ b/src/libprojectM/CMakeLists.txt
@@ -33,16 +33,10 @@
 set(PROJECTM_ABI_LEVEL 2)
 #
 
-SET(LIB_SUFFIX ""
-  CACHE STRING "Define suffix of directory name (32/64)"
-  FORCE)
-
-ADD_DEFINITIONS(-DLIB_SUFFIX="\\\"${LIB_SUFFIX}\\\"")
-
 ADD_DEFINITIONS(-DCMAKE_INSTALL_PREFIX="\\\"${CMAKE_INSTALL_PREFIX}\\\"")
 
-SET(LIB_INSTALL_DIR "\${exec_prefix}/lib${LIB_SUFFIX}"
-  CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is /lib${LIB_SUFFIX})"
+SET(LIB_INSTALL_DIR "\${exec_prefix}/lib"
+  CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is /lib)"
   FORCE)
 
 if (USE_NATIVE_GLEW)
@@ -221,14 +215,26 @@
 	)
 endif(BUILD_PROJECTM_STATIC)
 
+SET(projectM_FONT_MENU "${CMAKE_INSTALL_PREFIX}/${RESOURCE_PREFIX}/fonts/VeraMono.ttf" CACHE FILEPATH "Path to the default menu TrueType font")
+SET(projectM_FONT_TITLE "${CMAKE_INSTALL_PREFIX}/${RESOURCE_PREFIX}/fonts/Vera.ttf" CACHE FILEPATH "Path to the default title TrueType font")
+ADD_DEFINITIONS(-DprojectM_FONT_MENU="\\\"${projectM_FONT_MENU}\\\"")
+ADD_DEFINITIONS(-DprojectM_FONT_TITLE="\\\"${projectM_FONT_TITLE}\\\"")
 
 CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/libprojectM.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libprojectM.pc" @ONLY)
 CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/config.inp.in" "${CMAKE_CURRENT_BINARY_DIR}/config.inp" @ONLY)
 
+IF(projectM_FONT_MENU MATCHES "${CMAKE_INSTALL_PREFIX}/${RESOURCE_PREFIX}/fonts/Vera.ttf" OR projectM_FONT_TITLE MATCHES "${CMAKE_INSTALL_PREFIX}/${RESOURCE_PREFIX}/fonts/Vera.ttf")
+	INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/fonts/VeraMono.ttf DESTINATION ${CMAKE_INSTALL_PREFIX}/${RESOURCE_PREFIX}/fonts)
+ENDIF(projectM_FONT_MENU MATCHES "${CMAKE_INSTALL_PREFIX}/${RESOURCE_PREFIX}/fonts/Vera.ttf" OR projectM_FONT_TITLE MATCHES "${CMAKE_INSTALL_PREFIX}/${RESOURCE_PREFIX}/fonts/Vera.ttf")
+
+IF(projectM_FONT_MENU MATCHES "${CMAKE_INSTALL_PREFIX}/${RESOURCE_PREFIX}/fonts/VeraMono.ttf" OR projectM_FONT_TITLE MATCHES "${CMAKE_INSTALL_PREFIX}/${RESOURCE_PREFIX}/fonts/VeraMono.ttf")
+	INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/fonts/VeraMono.ttf DESTINATION ${CMAKE_INSTALL_PREFIX}/${RESOURCE_PREFIX}/fonts)
+ENDIF(projectM_FONT_MENU MATCHES "${CMAKE_INSTALL_PREFIX}/${RESOURCE_PREFIX}/fonts/VeraMono.ttf" OR projectM_FONT_TITLE MATCHES "${CMAKE_INSTALL_PREFIX}/${RESOURCE_PREFIX}/fonts/VeraMono.ttf")
+
 FILE(GLOB presets "presets/*.milk" "presets/*.prjm" "presets/*.tga")
 INSTALL(FILES ${presets} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/projectM/presets)
 INSTALL(FILES ${Renderer_SOURCE_DIR}/projectM.cg ${Renderer_SOURCE_DIR}/blur.cg DESTINATION ${CMAKE_INSTALL_PREFIX}/share/projectM/shaders)
-INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libprojectM.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/pkgconfig)
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libprojectM.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig)
 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/config.inp DESTINATION ${CMAKE_INSTALL_PREFIX}/share/projectM)
 INSTALL(FILES projectM.hpp event.h dlldefs.h fatal.h PCM.hpp Common.hpp DESTINATION include/libprojectM)
-INSTALL(TARGETS projectM DESTINATION lib${LIB_SUFFIX})
+INSTALL(TARGETS projectM DESTINATION lib)
diff --git a/src/libprojectM/MilkdropPresetFactory/BuiltinFuncs.cpp b/src/libprojectM/MilkdropPresetFactory/BuiltinFuncs.cpp
index 1063fd9..9d5be25 100644
--- a/src/libprojectM/MilkdropPresetFactory/BuiltinFuncs.cpp
+++ b/src/libprojectM/MilkdropPresetFactory/BuiltinFuncs.cpp
@@ -111,7 +111,8 @@
     return PROJECTM_ERROR;
   if (load_builtin_func("fact", FuncWrappers::fact_wrapper, 1) < 0)
     return PROJECTM_ERROR;
-
+  if (load_builtin_func("print", FuncWrappers::print_wrapper, 1) < 0)
+      return PROJECTM_ERROR;
   return PROJECTM_SUCCESS;
 }
 
diff --git a/src/libprojectM/MilkdropPresetFactory/BuiltinFuncs.hpp b/src/libprojectM/MilkdropPresetFactory/BuiltinFuncs.hpp
index 8b1e7e2..5ee1879 100644
--- a/src/libprojectM/MilkdropPresetFactory/BuiltinFuncs.hpp
+++ b/src/libprojectM/MilkdropPresetFactory/BuiltinFuncs.hpp
@@ -88,9 +88,10 @@
 
 static inline float if_wrapper(float * arg_list) {
 
-if ((int)arg_list[0] == 0)
-return arg_list[2];
-return arg_list[1];
+	if ((int)arg_list[0] == 0)
+		return arg_list[2];
+	//std::cout <<"NOT ZERO: " << arg_list[0] << std::endl;
+	return arg_list[1];
 }
 
 
@@ -121,12 +122,8 @@
 }
 
 static float sin_wrapper(float * arg_list) {
-
-  assert(arg_list);
-//return .5;
-float d = sinf(*arg_list);
-return d;
-//return (sin (arg_list[0]));
+	const float d = sinf(*arg_list);
+	return d;
 }
 
 
@@ -179,6 +176,25 @@
 }
 
 
+static inline float print_wrapper(float * arg_list) {
+
+	int len  = 1;
+	for (int i = 0; i < len; i++)
+	{
+		std::cout << arg_list[i];
+		if (i != (len-1))
+			std::cout << " ";
+	}
+
+	if (len > 0)
+		std::cout << std::endl;
+
+	if (len > 0)
+		return arg_list[0];
+	else
+		return 0;
+}
+
 static inline float nchoosek_wrapper(float * arg_list) {
 unsigned long cnm = 1UL;
 int i, f;
diff --git a/src/libprojectM/MilkdropPresetFactory/Expr.cpp b/src/libprojectM/MilkdropPresetFactory/Expr.cpp
old mode 100644
new mode 100755
index 58142ad..2f3efdf
--- a/src/libprojectM/MilkdropPresetFactory/Expr.cpp
+++ b/src/libprojectM/MilkdropPresetFactory/Expr.cpp
@@ -31,7 +31,9 @@
 {
 	float l;
 
-	assert ( item );
+	if (item == 0)
+		return EVAL_ERROR;
+
 	switch ( this->type )
 	{
 		case VAL_T:
@@ -106,7 +108,7 @@
 				return ( float ) ( * ( ( int* ) ( term.param->engine_val ) ) );
 			case P_TYPE_DOUBLE:
 
-				
+
 				if ( term.param->matrix_flag | ( term.param->flags & P_FLAG_ALWAYS_MATRIX ) )
 				{
 
@@ -128,7 +130,7 @@
 					//assert(mesh_i >=0);
 				}
 				//std::cout << term.param->name << ": " << (*((float*)term.param->engine_val)) << std::endl;
-				return * ( ( float* ) ( term.param->engine_val ) );			
+				return * ( ( float* ) ( term.param->engine_val ) );
 			default:
 				return EVAL_ERROR;
 		}
diff --git a/src/libprojectM/Renderer/Renderer.cpp b/src/libprojectM/Renderer/Renderer.cpp
index acae065..1666837 100644
--- a/src/libprojectM/Renderer/Renderer.cpp
+++ b/src/libprojectM/Renderer/Renderer.cpp
@@ -6,6 +6,7 @@
 #include "TextureManager.hpp"
 #include <iostream>
 #include <algorithm>
+#include <sys/stat.h>
 #include <cassert>
 #include "omptl/omptl"
 #include "omptl/omptl_algorithm"
@@ -45,7 +46,17 @@
 	this->beatDetect = beatDetect;
 
 #ifdef USE_FTGL
-	/**f Load the standard fonts */
+	/** Load the standard fonts if they do exist */
+	struct stat buffer;
+
+	if (stat( title_fontURL.c_str(), &buffer )) {
+	  std::cout << "Could not open font file: " << title_fontURL << std::endl;
+	  exit(1);
+	}
+	if (stat( menu_fontURL.c_str(), &buffer )) {
+	  std::cout << "Could not open font file: " << menu_fontURL << std::endl;
+	  exit(1);
+	}
 
 	title_font = new FTGLPixmapFont(title_fontURL.c_str());
 	other_font = new FTGLPixmapFont(menu_fontURL.c_str());
@@ -252,6 +263,17 @@
 void Renderer::RenderFrame(const Pipeline &pipeline, const PipelineContext &pipelineContext)
 {
 
+#ifdef USE_FBO
+    // when not 'renderToTexture', the user may use its own couple FBO/texture
+    // so retrieve this external FBO if it exists, (0 means no FBO) and unbind it
+    GLint externalFBO = 0;
+    if (!renderTarget->renderToTexture)
+    {
+        glGetIntegerv(GL_FRAMEBUFFER_BINDING, &externalFBO);
+        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+    }
+#endif
+
 	SetupPass1(pipeline, pipelineContext);
 
 #ifdef USE_CG
@@ -264,6 +286,15 @@
 
 	RenderItems(pipeline, pipelineContext);
 	FinishPass1();
+
+#ifdef USE_FBO
+    // when not 'renderToTexture', the user may use its own couple FBO/texture
+    // if it exists (0 means no external FBO)
+    // then rebind it just before calling the final pass: Pass2
+    if (!renderTarget->renderToTexture && externalFBO != 0)
+        glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, externalFBO);
+#endif
+
 	Pass2(pipeline, pipelineContext);
 }
 
diff --git a/src/libprojectM/config.inp.in b/src/libprojectM/config.inp.in
index b27b193..93d9c61 100644
--- a/src/libprojectM/config.inp.in
+++ b/src/libprojectM/config.inp.in
@@ -4,8 +4,8 @@
 Texture Size = 1024			# Size of internal rendering texture

 Mesh X  = 32            	# Width of PerPixel Equation mesh

 Mesh Y  = 24          		# Height of PerPixel Equation mesh

-FPS  = 35          		# Frames Per Second 

-Fullscreen  = false		

+FPS  = 35          		# Frames Per Second

+Fullscreen  = false

 Window Width  = 512  	       	# startup window width

 Window Height = 512            	# startup window height

 

@@ -17,6 +17,5 @@
 Aspect Correction = true	# Custom Shape Aspect Correction

 

 Preset Path = @CMAKE_INSTALL_PREFIX@/@RESOURCE_PREFIX@/presets # preset location

-Title Font = @CMAKE_INSTALL_PREFIX@/@RESOURCE_PREFIX@/fonts/Vera.ttf

-Menu Font = @CMAKE_INSTALL_PREFIX@/@RESOURCE_PREFIX@/fonts/VeraMono.ttf

- 

+Title Font = @projectM_FONT_TITLE@

+Menu Font = @projectM_FONT_MENU@

diff --git a/src/libprojectM/libprojectM.pc.in b/src/libprojectM/libprojectM.pc.in
index 2a1fa2b..90de752 100644
--- a/src/libprojectM/libprojectM.pc.in
+++ b/src/libprojectM/libprojectM.pc.in
@@ -6,7 +6,7 @@
 sysconfdir=@CMAKE_INSTALL_PREFIX@/@RESOURCE_PREFIX@
 
 Name: libprojectM
-Version: 2.0.0
+Version: @PROJECTM_VERSION@
 Description: projectM - OpenGL Milkdrop
 Requires:
 Libs: -L${libdir} -lprojectM
diff --git a/src/libprojectM/projectM.cpp b/src/libprojectM/projectM.cpp
old mode 100644
new mode 100755
index 5e23005..26e84e0
--- a/src/libprojectM/projectM.cpp
+++ b/src/libprojectM/projectM.cpp
@@ -201,16 +201,16 @@
 
     #ifdef LINUX
     _settings.titleFontURL = config.read<string>
-    ( "Title Font", CMAKE_INSTALL_PREFIX  "/share/projectM/fonts/Vera.ttf" );
+    ( "Title Font", projectM_FONT_TITLE );
     _settings.menuFontURL = config.read<string>
-    ( "Menu Font", CMAKE_INSTALL_PREFIX  "/share/projectM/fonts/VeraMono.ttf" );
+    ( "Menu Font", projectM_FONT_MENU );
     #endif
 
     #ifdef WIN32
     _settings.titleFontURL = config.read<string>
-    ( "Title Font", CMAKE_INSTALL_PREFIX  "/share/projectM/fonts/Vera.ttf" );
+    ( "Title Font", projectM_FONT_TITLE );
     _settings.menuFontURL = config.read<string>
-    ( "Menu Font", CMAKE_INSTALL_PREFIX  "/share/projectM/fonts/VeraMono.ttf" );
+    ( "Menu Font", projectM_FONT_MENU );
     #endif
 
 
diff --git a/src/projectM-libvisual/CMakeLists.txt b/src/projectM-libvisual/CMakeLists.txt
index ed2f576..28d8f90 100644
--- a/src/projectM-libvisual/CMakeLists.txt
+++ b/src/projectM-libvisual/CMakeLists.txt
@@ -1,19 +1,13 @@
 PROJECT(projectM_libvisual)
 cmake_minimum_required(VERSION 2.4.0)
-    if(COMMAND cmake_policy)
-      cmake_policy(SET CMP0003 NEW)
-    endif(COMMAND cmake_policy)
-
 
 INCLUDE(cmake/CPack-projectM.cmake)
 
-
 ADD_LIBRARY(projectM_libvisual SHARED actor_projectM.cpp lvtoprojectM.h ConfigFile.h ConfigFile.cpp)
 
 INCLUDE(FindPkgConfig.cmake)
 cmake_policy(SET CMP0005 OLD)
 
-
 FIND_PACKAGE(OpenGL)
 FIND_PACKAGE(SDL)
 
@@ -30,19 +24,18 @@
 pkg_search_module(LIBVISUAL REQUIRED libvisual-0.4)
 
 if (LIBPROJECTM_FOUND)
-MESSAGE (STATUS "[projectM-libvisual] projectM detected.")
+	MESSAGE (STATUS "[projectM-libvisual] projectM detected.")
 else(LIBPROJECTM_FOUND)
-MESSAGE (FATAL_ERROR "projectM NOT detected. Please install the projectM module or build from the top level projectM source directory.")
+	MESSAGE (FATAL_ERROR "projectM NOT detected. Please install the projectM module or build from the top level projectM source directory.")
 endif(LIBPROJECTM_FOUND)
 
 if(LIBVISUAL_FOUND)
-MESSAGE(STATUS "[projectM-libvisual] libvisual detected.")
+	MESSAGE(STATUS "[projectM-libvisual] libvisual detected.")
 else(LIBVISUAL_FOUND)
-MESSAGE(FATAL_ERROR "libvisual 0.4 not found! Please visit http://libvisual.sf.net and download the module.")
+	MESSAGE(FATAL_ERROR "libvisual 0.4 not found! Please visit http://libvisual.sf.net and download the module.")
 endif(LIBVISUAL_FOUND)
 
 
-
 if (${CMAKE_PROJECT_NAME} MATCHES "projectM-complete")
    set(PROJECTM_INCLUDE ${PROJECTM_ROOT_SOURCE_DIR}/libprojectM)
    set(PROJECTM_LINK ${PROJECTM_ROOT_BINARY_DIR}/libprojectM)
diff --git a/src/projectM-pulseaudio/CMakeLists.txt b/src/projectM-pulseaudio/CMakeLists.txt
index 5f3e23b..2adc907 100644
--- a/src/projectM-pulseaudio/CMakeLists.txt
+++ b/src/projectM-pulseaudio/CMakeLists.txt
@@ -57,8 +57,8 @@
   message(STATUS "FTGL_LIBRARY_DIRS = ${FTGL_LIBRARY_DIRS}")
   include_directories(${FTGL_INCLUDE_DIRS})
   link_directories(${FTGL_LIBRARY_DIRS})
-else (FTGL_FOUND)
-  message(FATAL_ERROR "ERROR: ftgl library not detected. Please install it from ftgl.wiki.sourceforge.net")
+else (FTGL_FOUND USE)
+##  message(FATAL_ERROR "ERROR: ftgl library not detected. Please install it from ftgl.wiki.sourceforge.net")
 endif (FTGL_FOUND)
 
 set(projectM_pulseaudio_SRCS
diff --git a/src/projectM-qt/CMakeLists.txt b/src/projectM-qt/CMakeLists.txt
index e73ab52..750d1ed 100644
--- a/src/projectM-qt/CMakeLists.txt
+++ b/src/projectM-qt/CMakeLists.txt
@@ -8,11 +8,11 @@
 include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} )
 
 include(FindPkgConfig.cmake)
-if (${CMAKE_PROJECT_NAME} MATCHES "PROJECTM_ROOT")
+if (${CMAKE_PROJECT_NAME} MATCHES "projectM-complete")
 	set(LIBPROJECTM_FOUND true)
-else(${CMAKE_PROJECT_NAME} MATCHES "PROJECTM_ROOT")
+else(${CMAKE_PROJECT_NAME} MATCHES "projectM-complete")
 	pkg_search_module(LIBPROJECTM REQUIRED libprojectM)
-endif(${CMAKE_PROJECT_NAME} MATCHES "PROJECTM_ROOT")
+endif(${CMAKE_PROJECT_NAME} MATCHES "projectM-complete")
 
 OPTION(BUILD_PROJECTM_QT_STATIC "Build a static library of projectM-qt rather than the usual shared library format" OFF)
 
@@ -116,8 +116,8 @@
 SET_TARGET_PROPERTIES(projectM-qt PROPERTIES VERSION ${PROJECTM_QT_VERSION} SOVERSION ${PROJECTM_QT_ABI_LEVEL})
 
 if (${CMAKE_PROJECT_NAME} MATCHES "projectM-complete")
-   set(PROJECTM_INCLUDE ${PROJECTM_ROOT_SOURCE_DIR}/libprojectM)
-   set(PROJECTM_LINK ${PROJECTM_ROOT_BINARY_DIR}/libprojectM)
+   set(PROJECTM_INCLUDE ${projectM-complete_SOURCE_DIR}/libprojectM)
+   set(PROJECTM_LINK ${projectM-complete_BINARY_DIR}/libprojectM)
 elseif (${CMAKE_PROJECT_NAME} MATCHES ${PROJECT_NAME})
    set(PROJECTM_INCLUDE ${LIBPROJECTM_INCLUDEDIR}/libprojectM)
    set(PROJECTM_LINK ${PROJECTM_LDFLAGS})
@@ -131,6 +131,6 @@
 target_link_libraries(projectM-qt projectM GLEW GL ${QT_QTGUI_LIBRARIES} ${QT_QTOPENGL_LIBRARIES} ${QT_QTXML_LIBRARIES} ${QT_LIBRARIES})
 
 install(FILES qprojectm_mainwindow.hpp DESTINATION include/libprojectM-qt)
-install(TARGETS projectM-qt DESTINATION lib${LIB_SUFFIX})
-install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libprojectM-qt.pc" DESTINATION ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/pkgconfig)
+install(TARGETS projectM-qt DESTINATION lib)
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libprojectM-qt.pc" DESTINATION lib/pkgconfig)
 install(FILES "images/icons/prjm16-transparent.svg" DESTINATION	${CMAKE_INSTALL_PREFIX}/share/pixmaps)
diff --git a/src/projectM-xmms/CMakeLists.txt b/src/projectM-xmms/CMakeLists.txt
index 453e3ca..4688f48 100644
--- a/src/projectM-xmms/CMakeLists.txt
+++ b/src/projectM-xmms/CMakeLists.txt
@@ -44,4 +44,4 @@
 
 TARGET_LINK_LIBRARIES(xmms_projectM projectM xmms ${SDL_LIBRARY} ${GTK_LIBRARIES})
 
-INSTALL(TARGETS xmms_projectM DESTINATION ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/xmms/Visualization )
+INSTALL(TARGETS xmms_projectM DESTINATION lib/xmms/Visualization )