From 40c42600e726d3cd0186a1bf2895e78e88c51f5e Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 2 Sep 2014 19:12:57 +0200
Subject: [PATCH 01/31] CMake: build AvTranscoder

* Same problem with scons about the java binding : need to generate the
java files, reconfigure, and build again to generate class files and the
jar. Need to find a solution to skip the reconfigure...
* Useful flags to configure using CMake:
     * CMAKE_BUILD_TYPE: Release / Debug
     * CMAKE_INSTALL_PREFIX: /path/to/install
     * FFMPEG_INCLUDE_DIR
     * FFMPEG_LIBRARY_DIR
* Name of output librairies:
     * avtranscoder.a
     * avtranscoder.so (link + .so with version)
     * avtranscoder-py.so (without link)
     * avtranscoder-java.so (without link)
---
 CMakeLists.txt     | 21 ++++++++++
 src/CMakeLists.txt | 98 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 119 insertions(+)
 create mode 100644 CMakeLists.txt
 create mode 100644 src/CMakeLists.txt

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 00000000..5db848cb
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,21 @@
+cmake_minimum_required(VERSION 2.8) 
+
+project(AvTranscoder)
+
+# AvTranscoder version
+set(AVTRANSCODER_VERSION_MAJOR 0)
+set(AVTRANSCODER_VERSION_MINOR 2)
+set(AVTRANSCODER_VERSION_MICRO 1)
+set(AVTRANSCODER_VERSION ${AVTRANSCODER_VERSION_MAJOR}.${AVTRANSCODER_VERSION_MINOR}.${AVTRANSCODER_VERSION_MICRO})
+
+# Diplay commands being ran by CMake
+set(CMAKE_VERBOSE_MAKEFILE ON)
+
+# Choose compiler
+set(CMAKE_CXX_COMPILER "g++")
+
+# CPP flags on debug / release mode
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -fPIC -pg -g")
+set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fPIC -O3")
+
+add_subdirectory(src)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 00000000..e471229a
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,98 @@
+# Load project cmake
+set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
+
+# Get useful variables
+set(AVTRANSCODER_APP_PATH "${PROJECT_SOURCE_DIR}/app" PARENT_SCOPE)
+set(AVTRANSCODER_SRC_PATH "${PROJECT_SOURCE_DIR}/src" PARENT_SCOPE)
+file(GLOB_RECURSE AVTRANSCODER_SRC_FILES "AvTranscoder/*.cpp" "AvTranscoder/*.hpp")
+
+# Get FFMPEG from parameters
+set(FFMPEG_INCLUDE_DIR "/path/to/ffmpeg/include/" CACHE STRING "")
+set(FFMPEG_LIBRARY_DIR "/path/to/ffmpeg/lib/" CACHE STRING "")
+file(GLOB_RECURSE FFMPEG_LIBS "${FFMPEG_LIBRARY_DIR}/*.so")
+
+# Include AvTranscoder and FFmpeg
+include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${FFMPEG_INCLUDE_DIR})
+
+# Create 'avtranscoder' static lib
+add_library(avtranscoder-static STATIC ${AVTRANSCODER_SRC_FILES})
+set_target_properties(avtranscoder-static PROPERTIES LINKER_LANGUAGE CXX)
+set_target_properties(avtranscoder-static PROPERTIES OUTPUT_NAME avtranscoder)
+target_link_libraries(avtranscoder-static ${FFMPEG_LIBS})
+
+# Create 'avtranscoder' shared lib
+add_library(avtranscoder-shared SHARED ${AVTRANSCODER_SRC_FILES})
+set_target_properties(avtranscoder-shared PROPERTIES LINKER_LANGUAGE CXX)
+set_target_properties(avtranscoder-shared PROPERTIES OUTPUT_NAME avtranscoder)
+set_target_properties(avtranscoder-shared PROPERTIES SOVERSION ${AVTRANSCODER_VERSION})
+target_link_libraries(avtranscoder-shared ${FFMPEG_LIBS})
+
+### Install AvTranscoder libs and include
+install(
+	DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/AvTranscoder"
+	DESTINATION "include/"
+	FILES_MATCHING
+	PATTERN "*.hpp"
+	PATTERN "*.i"
+	PATTERN "Profiles" EXCLUDE
+)
+set(LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR}/lib")
+set(AVTRANSCODER_LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH}")
+file(GLOB_RECURSE AVTRANSCODER_OUTPUT_LIBRARIES "${AVTRANSCODER_LIBRARY_OUTPUT_PATH}/*")
+install(FILES ${AVTRANSCODER_OUTPUT_LIBRARIES} DESTINATION "lib/")
+
+### SWIG
+find_package(SWIG)
+if(SWIG_FOUND)
+	# Load Modules/UseSWIG.cmake
+	include(${SWIG_USE_FILE})
+
+	# Configure Swig
+	set(CMAKE_SWIG_OUTDIR "${CMAKE_CURRENT_BINARY_DIR}/AvTranscoder")
+	set(AVTRANSCODER_BINDING_FILE "AvTranscoder/avTranscoder.i")
+	set_source_files_properties(${AVTRANSCODER_BINDING_FILE} PROPERTIES CPLUSPLUS ON)
+
+	### PYTHON BINDING
+	find_package(PythonLibs)
+	include_directories(${PYTHON_INCLUDE_PATH})
+
+	# Swig flags
+	set(CMAKE_SWIG_FLAGS -c++ -fcompact)
+
+	# Create 'avtranscoder-py' shared lib
+	swig_add_module(avtranscoder-py python ${AVTRANSCODER_BINDING_FILE})
+	swig_link_libraries(avtranscoder-py avtranscoder-shared ${PYTHON_LIBRARIES})
+
+	# Install python interface
+	file(GLOB AVTRANSCODER_PYTHON_BINDING_FILE "${CMAKE_SWIG_OUTDIR}/*.py")
+	install(FILES ${AVTRANSCODER_PYTHON_BINDING_FILE} DESTINATION "lib/python2.7/site-packages/AvTranscoder/")
+
+	### JAVA BINDING
+	set(ENV{JAVA_HOME} "/usr/java/jdk1.6.0_43") # fix find java SDK
+	find_package(Java REQUIRED)
+	find_package(JNI REQUIRED)
+	include(UseJava)
+	include_directories(${JAVA_INCLUDE_PATH})
+	include_directories(${JNI_INCLUDE_DIRS})
+
+	# Swig flags
+	set(CMAKE_SWIG_FLAGS -c++ -fcompact -package org.AvTranscoder)
+
+	# Create 'avtranscoder-java' shared lib
+	swig_add_module(avtranscoder-java java ${AVTRANSCODER_BINDING_FILE})
+	swig_link_libraries(avtranscoder-java avtranscoder-shared)
+
+	# Need to generate java files before class files and jar
+	set(AVTRANSCODER_JAVA_OUTPUT_PATH "${PROJECT_BINARY_DIR}/src/AvTranscoder")
+	if(EXISTS "${AVTRANSCODER_JAVA_OUTPUT_PATH}/Transcoder.java")
+		file(GLOB AVTRANSCODER_JAVA_BINDING_FILES "${AVTRANSCODER_JAVA_OUTPUT_PATH}/*.java")
+		add_jar(avtranscoder-jar ${AVTRANSCODER_JAVA_BINDING_FILES})
+
+		# Install jar
+		install_jar(avtranscoder-jar "share/java/")
+	endif()
+
+else(SWIG_FOUND)
+	message("SWIG not found, will not build python and java bindings.")
+
+endif(SWIG_FOUND)

From dcdccef28f1ba51020e31a9233a87d067d763a26 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 2 Sep 2014 19:14:42 +0200
Subject: [PATCH 02/31] CMake: build cpp apps

* Add a CMakeList.txt for each app.
---
 CMakeLists.txt                          |  1 +
 app/CMakeLists.txt                      |  7 +++++++
 app/cpp/avInfo/CMakeLists.txt           |  8 ++++++++
 app/cpp/avMeta/CMakeLists.txt           |  8 ++++++++
 app/cpp/avTranscoder/CMakeLists.txt     |  8 ++++++++
 app/cpp/avplay/CMakeLists.txt           | 14 ++++++++++++++
 app/cpp/genericProcessor/CMakeLists.txt |  8 ++++++++
 app/cpp/optionChecker/CMakeLists.txt    |  9 +++++++++
 app/cpp/presetChecker/CMakeLists.txt    | 10 ++++++++++
 9 files changed, 73 insertions(+)
 create mode 100644 app/CMakeLists.txt
 create mode 100644 app/cpp/avInfo/CMakeLists.txt
 create mode 100644 app/cpp/avMeta/CMakeLists.txt
 create mode 100644 app/cpp/avTranscoder/CMakeLists.txt
 create mode 100644 app/cpp/avplay/CMakeLists.txt
 create mode 100644 app/cpp/genericProcessor/CMakeLists.txt
 create mode 100644 app/cpp/optionChecker/CMakeLists.txt
 create mode 100644 app/cpp/presetChecker/CMakeLists.txt

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5db848cb..b7ba6fc6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -19,3 +19,4 @@ set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -fPIC -pg -g")
 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fPIC -O3")
 
 add_subdirectory(src)
+add_subdirectory(app)
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
new file mode 100644
index 00000000..fdd1d11e
--- /dev/null
+++ b/app/CMakeLists.txt
@@ -0,0 +1,7 @@
+add_subdirectory(cpp/avInfo)
+add_subdirectory(cpp/avMeta)
+add_subdirectory(cpp/avplay)
+add_subdirectory(cpp/avTranscoder)
+add_subdirectory(cpp/genericProcessor)
+add_subdirectory(cpp/optionChecker)
+add_subdirectory(cpp/presetChecker)
diff --git a/app/cpp/avInfo/CMakeLists.txt b/app/cpp/avInfo/CMakeLists.txt
new file mode 100644
index 00000000..91aebf73
--- /dev/null
+++ b/app/cpp/avInfo/CMakeLists.txt
@@ -0,0 +1,8 @@
+### cpp/avInfo
+
+include_directories(${AVTRANSCODER_SRC_PATH})
+add_executable(avinfo avInfo.cpp) 
+target_link_libraries(avinfo avtranscoder-shared)
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avinfo DESTINATION "bin/")
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avinfo.man DESTINATION "share/man/man1/")
diff --git a/app/cpp/avMeta/CMakeLists.txt b/app/cpp/avMeta/CMakeLists.txt
new file mode 100644
index 00000000..b31f8dc8
--- /dev/null
+++ b/app/cpp/avMeta/CMakeLists.txt
@@ -0,0 +1,8 @@
+### cpp/avMeta
+
+include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
+add_executable(avmeta avMeta.cpp)
+target_link_libraries(avmeta avtranscoder-shared)
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avmeta DESTINATION "bin/")
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avmeta.man DESTINATION "share/man/man1/")
diff --git a/app/cpp/avTranscoder/CMakeLists.txt b/app/cpp/avTranscoder/CMakeLists.txt
new file mode 100644
index 00000000..9519c937
--- /dev/null
+++ b/app/cpp/avTranscoder/CMakeLists.txt
@@ -0,0 +1,8 @@
+### cpp/avTranscoder
+
+include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
+add_executable(avtranscoder avTranscoder.cpp)
+target_link_libraries(avtranscoder avtranscoder-shared)
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avtranscoder DESTINATION "bin/")
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/av++.man DESTINATION "share/man/man1/")
diff --git a/app/cpp/avplay/CMakeLists.txt b/app/cpp/avplay/CMakeLists.txt
new file mode 100644
index 00000000..3fc03729
--- /dev/null
+++ b/app/cpp/avplay/CMakeLists.txt
@@ -0,0 +1,14 @@
+### cpp/avplay
+
+find_package(OpenGL REQUIRED)
+find_package(GLUT REQUIRED)
+
+include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
+include_directories( ${OPENGL_INCLUDE_DIRS}  ${GLUT_INCLUDE_DIRS} )
+
+file(GLOB AVPLAY_SRC_FILES "*.cpp" "*.hpp")
+add_executable(avplay ${AVPLAY_SRC_FILES})
+target_link_libraries(avplay avtranscoder-shared ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avplay DESTINATION "bin/")
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avplayer.man DESTINATION "share/man/man1/")
diff --git a/app/cpp/genericProcessor/CMakeLists.txt b/app/cpp/genericProcessor/CMakeLists.txt
new file mode 100644
index 00000000..868f31ba
--- /dev/null
+++ b/app/cpp/genericProcessor/CMakeLists.txt
@@ -0,0 +1,8 @@
+### cpp/avProcessor
+
+include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
+add_executable(avprocessor genericProcessor.cpp)
+target_link_libraries(avprocessor avtranscoder-shared)
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avprocessor DESTINATION "bin/")
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avprocessor.man DESTINATION "share/man/man1/")
diff --git a/app/cpp/optionChecker/CMakeLists.txt b/app/cpp/optionChecker/CMakeLists.txt
new file mode 100644
index 00000000..2668e181
--- /dev/null
+++ b/app/cpp/optionChecker/CMakeLists.txt
@@ -0,0 +1,9 @@
+### cpp/avOptionChecker
+
+include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
+# Add C++11 flag
+set(CMAKE_CXX_FLAGS "-std=c++0x")
+add_executable(avoptionchecker optionChecker.cpp)
+target_link_libraries(avoptionchecker avtranscoder-shared)
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avoptionchecker DESTINATION "bin/")
diff --git a/app/cpp/presetChecker/CMakeLists.txt b/app/cpp/presetChecker/CMakeLists.txt
new file mode 100644
index 00000000..1f106ba3
--- /dev/null
+++ b/app/cpp/presetChecker/CMakeLists.txt
@@ -0,0 +1,10 @@
+### cpp/avPresetChecker
+
+include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
+# Add C++11 flag
+set(CMAKE_CXX_FLAGS "-std=c++0x")
+add_executable(avpresetchecker presetChecker.cpp)
+target_link_libraries(avpresetchecker avtranscoder-shared)
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avpresetchecker DESTINATION "bin/")
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avprofiles.man DESTINATION "share/man/man1/")

From f5b51aa2bf511b6b26f4bca795cc86a841d699e8 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Wed, 3 Sep 2014 11:59:14 +0200
Subject: [PATCH 03/31] CMake: fix install of libraries

Do not need to reconfigure the make file to be able to install
libraries.
---
 src/CMakeLists.txt | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index e471229a..234ffbf4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -37,9 +37,10 @@ install(
 	PATTERN "Profiles" EXCLUDE
 )
 set(LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR}/lib")
-set(AVTRANSCODER_LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH}")
-file(GLOB_RECURSE AVTRANSCODER_OUTPUT_LIBRARIES "${AVTRANSCODER_LIBRARY_OUTPUT_PATH}/*")
-install(FILES ${AVTRANSCODER_OUTPUT_LIBRARIES} DESTINATION "lib/")
+install(
+	DIRECTORY "${LIBRARY_OUTPUT_PATH}"
+	DESTINATION "${CMAKE_INSTALL_PREFIX}"
+)
 
 ### SWIG
 find_package(SWIG)

From 7373f563c24d0372ff61a80187df5220f988e308 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Wed, 3 Sep 2014 12:03:30 +0200
Subject: [PATCH 04/31] CMake: fix java binding

* Do not need to reconfigure the make file to be able to generate class
files and jar file.
* The solution was to add a custom command as a post build of the java
binding which generate java files.
---
 src/CMakeLists.txt | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 234ffbf4..367aef2e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -69,7 +69,11 @@ if(SWIG_FOUND)
 	install(FILES ${AVTRANSCODER_PYTHON_BINDING_FILE} DESTINATION "lib/python2.7/site-packages/AvTranscoder/")
 
 	### JAVA BINDING
-	set(ENV{JAVA_HOME} "/usr/java/jdk1.6.0_43") # fix find java SDK
+	set(JAVADIST "/usr/java/jdk1.6.0_43" )
+	set(JAVAC "${JAVADIST}/bin/javac")
+	set(JAR "${JAVADIST}/bin/jar")
+	
+	set(ENV{JAVA_HOME} ${JAVADIST}) # fix find java SDK
 	find_package(Java REQUIRED)
 	find_package(JNI REQUIRED)
 	include(UseJava)
@@ -83,15 +87,19 @@ if(SWIG_FOUND)
 	swig_add_module(avtranscoder-java java ${AVTRANSCODER_BINDING_FILE})
 	swig_link_libraries(avtranscoder-java avtranscoder-shared)
 
-	# Need to generate java files before class files and jar
+	# Post build of java binding : compile java files (generate class files) and create jar
 	set(AVTRANSCODER_JAVA_OUTPUT_PATH "${PROJECT_BINARY_DIR}/src/AvTranscoder")
-	if(EXISTS "${AVTRANSCODER_JAVA_OUTPUT_PATH}/Transcoder.java")
-		file(GLOB AVTRANSCODER_JAVA_BINDING_FILES "${AVTRANSCODER_JAVA_OUTPUT_PATH}/*.java")
-		add_jar(avtranscoder-jar ${AVTRANSCODER_JAVA_BINDING_FILES})
-
-		# Install jar
-		install_jar(avtranscoder-jar "share/java/")
-	endif()
+	set(AVTRANSCODER_JAR_PATH "${PROJECT_BINARY_DIR}/src")
+	set(AVTRANSCODER_JAR_NAME "avtranscoder-jar.jar")
+	ADD_CUSTOM_COMMAND(
+		TARGET avtranscoder-java
+		POST_BUILD
+		COMMAND ${JAVAC} ${AVTRANSCODER_JAVA_CLASS_OUTPUT_PATH} "${AVTRANSCODER_JAVA_OUTPUT_PATH}/*.java"
+		COMMAND ${JAR} cvf ${AVTRANSCODER_JAR_NAME} "${AVTRANSCODER_JAVA_OUTPUT_PATH}/*.class"
+	)
+
+	# Install jar file
+	install(FILES ${AVTRANSCODER_JAR_PATH}/${AVTRANSCODER_JAR_NAME} DESTINATION "share/java/")
 
 else(SWIG_FOUND)
 	message("SWIG not found, will not build python and java bindings.")

From cb22c08914c5a81050d418036cbaa14846fba8e5 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Wed, 3 Sep 2014 14:24:07 +0200
Subject: [PATCH 05/31] CMake: fix build with dependency to libav

Check if FFmpeg or libav dependency, and define variable to manage
includes in source code.
---
 src/CMakeLists.txt | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 367aef2e..c9f10eda 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -11,6 +11,13 @@ set(FFMPEG_INCLUDE_DIR "/path/to/ffmpeg/include/" CACHE STRING "")
 set(FFMPEG_LIBRARY_DIR "/path/to/ffmpeg/lib/" CACHE STRING "")
 file(GLOB_RECURSE FFMPEG_LIBS "${FFMPEG_LIBRARY_DIR}/*.so")
 
+# Check if FFmpeg or libav dependency
+if(EXISTS "${FFMPEG_INCLUDE_DIR}/libavresample/avresample.h")
+	add_definitions(-DAV_RESAMPLE_LIBRARY=1)
+else()
+	add_definitions(-DFF_RESAMPLE_LIBRARY=1)
+endif()
+
 # Include AvTranscoder and FFmpeg
 include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${FFMPEG_INCLUDE_DIR})
 

From c1aa8e4790fa92dd666dcd9d37c44c17559bc0f4 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Thu, 4 Sep 2014 11:34:34 +0200
Subject: [PATCH 06/31] Gitignore: ignore CMake generated files

---
 .gitignore | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/.gitignore b/.gitignore
index 22771809..4a9700de 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,10 @@ config.log
 scons.cfg
 build
 dist
+
+# CMake
+CMakeCache.txt
+CMakeFiles
+Makefile
+cmake_install.cmake
+install_manifest.txt

From f6c6d42be7efd412c9ad40e0ad6df1e2c9ae31cd Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Mon, 8 Sep 2014 11:32:18 +0200
Subject: [PATCH 07/31] Travis build: use CMake

---
 .travis.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.travis.yml b/.travis.yml
index 23d41001..3ef75316 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -20,7 +20,7 @@ before_script:
   - sudo apt-get install -qq libavdevice-dev libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavresample-dev python-dev freeglut3-dev doxygen python-git
 
 script:
-  - scons
+  - mkdir build && cd build && cmake ../ && make
 
 after_failure:
   - cat config.log

From 5595b56675a4c148b51b99393d2026eebacecf43 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Mon, 8 Sep 2014 11:33:18 +0200
Subject: [PATCH 08/31] Travis build: remove install of python-git module

---
 .travis.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.travis.yml b/.travis.yml
index 3ef75316..044d2740 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -17,7 +17,7 @@ before_script:
   - sudo apt-add-repository "deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse"
   - sudo apt-get update -qq
   - sudo apt-get install -qq gcc g++ scons swig swig2.0
-  - sudo apt-get install -qq libavdevice-dev libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavresample-dev python-dev freeglut3-dev doxygen python-git
+  - sudo apt-get install -qq libavdevice-dev libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavresample-dev python-dev freeglut3-dev doxygen
 
 script:
   - mkdir build && cd build && cmake ../ && make

From cdbc8020eb3e582395eed3782ca82ccd74550614 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 10:16:19 +0200
Subject: [PATCH 09/31] CMake: add cmake directory to have custom utilities

* Custom utilities are:
     * AvTranscoderMacros.cmake: macros, included in all cmake files.
     * FindFFmpeg.cmake: to get FFmpeg package (by specify a list of
components, check the FFmpeg version, get FFmpeg from command line if
there are parameters, etc...).
---
 app/cpp/avInfo/CMakeLists.txt           |   6 ++
 app/cpp/avMeta/CMakeLists.txt           |   6 ++
 app/cpp/avTranscoder/CMakeLists.txt     |   6 ++
 app/cpp/avplay/CMakeLists.txt           |   6 ++
 app/cpp/genericProcessor/CMakeLists.txt |   6 ++
 app/cpp/optionChecker/CMakeLists.txt    |   6 ++
 app/cpp/presetChecker/CMakeLists.txt    |   6 ++
 cmake/AvTranscoderMacros.cmake          |   4 +
 cmake/FindFFmpeg.cmake                  | 112 ++++++++++++++++++++++++
 src/CMakeLists.txt                      |  20 ++---
 10 files changed, 167 insertions(+), 11 deletions(-)
 create mode 100644 cmake/AvTranscoderMacros.cmake
 create mode 100644 cmake/FindFFmpeg.cmake

diff --git a/app/cpp/avInfo/CMakeLists.txt b/app/cpp/avInfo/CMakeLists.txt
index 91aebf73..f2af9131 100644
--- a/app/cpp/avInfo/CMakeLists.txt
+++ b/app/cpp/avInfo/CMakeLists.txt
@@ -1,8 +1,14 @@
 ### cpp/avInfo
 
+# Load custom cmake utilities
+set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
+include(AvTranscoderMacros)
+
+# Build app
 include_directories(${AVTRANSCODER_SRC_PATH})
 add_executable(avinfo avInfo.cpp) 
 target_link_libraries(avinfo avtranscoder-shared)
 
+# Install app
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avinfo DESTINATION "bin/")
 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avinfo.man DESTINATION "share/man/man1/")
diff --git a/app/cpp/avMeta/CMakeLists.txt b/app/cpp/avMeta/CMakeLists.txt
index b31f8dc8..f07afb15 100644
--- a/app/cpp/avMeta/CMakeLists.txt
+++ b/app/cpp/avMeta/CMakeLists.txt
@@ -1,8 +1,14 @@
 ### cpp/avMeta
 
+# Load custom cmake utilities
+set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
+include(AvTranscoderMacros)
+
+# Build app
 include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
 add_executable(avmeta avMeta.cpp)
 target_link_libraries(avmeta avtranscoder-shared)
 
+# Install app
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avmeta DESTINATION "bin/")
 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avmeta.man DESTINATION "share/man/man1/")
diff --git a/app/cpp/avTranscoder/CMakeLists.txt b/app/cpp/avTranscoder/CMakeLists.txt
index 9519c937..6615c7ba 100644
--- a/app/cpp/avTranscoder/CMakeLists.txt
+++ b/app/cpp/avTranscoder/CMakeLists.txt
@@ -1,8 +1,14 @@
 ### cpp/avTranscoder
 
+# Load custom cmake utilities
+set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
+include(AvTranscoderMacros)
+
+# Build app
 include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
 add_executable(avtranscoder avTranscoder.cpp)
 target_link_libraries(avtranscoder avtranscoder-shared)
 
+# Install app
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avtranscoder DESTINATION "bin/")
 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/av++.man DESTINATION "share/man/man1/")
diff --git a/app/cpp/avplay/CMakeLists.txt b/app/cpp/avplay/CMakeLists.txt
index 3fc03729..010a6387 100644
--- a/app/cpp/avplay/CMakeLists.txt
+++ b/app/cpp/avplay/CMakeLists.txt
@@ -1,5 +1,10 @@
 ### cpp/avplay
 
+# Load custom cmake utilities
+set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
+include(AvTranscoderMacros)
+
+# Build app
 find_package(OpenGL REQUIRED)
 find_package(GLUT REQUIRED)
 
@@ -10,5 +15,6 @@ file(GLOB AVPLAY_SRC_FILES "*.cpp" "*.hpp")
 add_executable(avplay ${AVPLAY_SRC_FILES})
 target_link_libraries(avplay avtranscoder-shared ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})
 
+# Install app
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avplay DESTINATION "bin/")
 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avplayer.man DESTINATION "share/man/man1/")
diff --git a/app/cpp/genericProcessor/CMakeLists.txt b/app/cpp/genericProcessor/CMakeLists.txt
index 868f31ba..213cca44 100644
--- a/app/cpp/genericProcessor/CMakeLists.txt
+++ b/app/cpp/genericProcessor/CMakeLists.txt
@@ -1,8 +1,14 @@
 ### cpp/avProcessor
 
+# Load custom cmake utilities
+set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
+include(AvTranscoderMacros)
+
+# Build app
 include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
 add_executable(avprocessor genericProcessor.cpp)
 target_link_libraries(avprocessor avtranscoder-shared)
 
+# Install app
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avprocessor DESTINATION "bin/")
 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avprocessor.man DESTINATION "share/man/man1/")
diff --git a/app/cpp/optionChecker/CMakeLists.txt b/app/cpp/optionChecker/CMakeLists.txt
index 2668e181..19cb0836 100644
--- a/app/cpp/optionChecker/CMakeLists.txt
+++ b/app/cpp/optionChecker/CMakeLists.txt
@@ -1,9 +1,15 @@
 ### cpp/avOptionChecker
 
+# Load custom cmake utilities
+set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
+include(AvTranscoderMacros)
+
+# Build app
 include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
 # Add C++11 flag
 set(CMAKE_CXX_FLAGS "-std=c++0x")
 add_executable(avoptionchecker optionChecker.cpp)
 target_link_libraries(avoptionchecker avtranscoder-shared)
 
+# Install app
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avoptionchecker DESTINATION "bin/")
diff --git a/app/cpp/presetChecker/CMakeLists.txt b/app/cpp/presetChecker/CMakeLists.txt
index 1f106ba3..45e394a7 100644
--- a/app/cpp/presetChecker/CMakeLists.txt
+++ b/app/cpp/presetChecker/CMakeLists.txt
@@ -1,10 +1,16 @@
 ### cpp/avPresetChecker
 
+# Load custom cmake utilities
+set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
+include(AvTranscoderMacros)
+
+# Build app
 include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
 # Add C++11 flag
 set(CMAKE_CXX_FLAGS "-std=c++0x")
 add_executable(avpresetchecker presetChecker.cpp)
 target_link_libraries(avpresetchecker avtranscoder-shared)
 
+# Install app
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avpresetchecker DESTINATION "bin/")
 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avprofiles.man DESTINATION "share/man/man1/")
diff --git a/cmake/AvTranscoderMacros.cmake b/cmake/AvTranscoderMacros.cmake
new file mode 100644
index 00000000..4794bd21
--- /dev/null
+++ b/cmake/AvTranscoderMacros.cmake
@@ -0,0 +1,4 @@
+# Get useful variables
+set(AVTRANSCODER_APP_PATH "${PROJECT_SOURCE_DIR}/app")
+set(AVTRANSCODER_SRC_PATH "${PROJECT_SOURCE_DIR}/src")
+file(GLOB_RECURSE AVTRANSCODER_SRC_FILES "AvTranscoder/*.cpp" "AvTranscoder/*.hpp")
diff --git a/cmake/FindFFmpeg.cmake b/cmake/FindFFmpeg.cmake
new file mode 100644
index 00000000..b8e73974
--- /dev/null
+++ b/cmake/FindFFmpeg.cmake
@@ -0,0 +1,112 @@
+# - Find FFmpeg library
+# Find the native FFmpeg includes and library.
+# 
+# This module defines:
+# FFMPEG_FOUND
+# FFMPEG_INCLUDE_DIR - The FFmpeg include directory.
+# FFMPEG_LIBRARIES - The FFmpeg libraries.
+# 
+# For each component:
+# ${COMPONENT}_FOUND
+# ${COMPONENT}_INCLUDE_DIR
+# ${COMPONENT}_LIBRARIES
+# ${COMPONENT}_DEFINITIONS
+# ${COMPONENT}_VERSION
+#
+# If any component is specified, default components are avcodec avformat avutil.
+#
+
+### Macro: check_ffmpeg_version
+#	
+# Check FFmpeg version.
+# @todo: clean how to get current FFmpeg version.
+#
+macro(check_ffmpeg_version)
+	exec_program("ffmpeg -version 2>&1 | grep 'ffmpeg version' | sed -e 's/ffmpeg\ version\ //'"
+		OUTPUT_VARIABLE FFmpeg_CURRENT_VERSION)
+	if(${FFmpeg_CURRENT_VERSION} LESS ${FFmpeg_FIND_VERSION})
+		message(SEND_ERROR "Your FFmpeg version is too old (${FFmpeg_CURRENT_VERSION} < ${FFmpeg_FIND_VERSION}).")
+	endif()
+endmacro()
+
+
+### Macro: find_component
+#	
+# Check the given component by invoking pkgconfig and 
+# then looking up the libraries and include directories.
+# @todo: WIN and MAC OSX.
+#
+macro(find_component COMPONENT PKGCONFIG PKGOPTION LIBRARY HEADER)
+	if(NOT WIN32)
+		# use pkg-config to get the directories and then use these values
+		# in the FIND_PATH() and FIND_LIBRARY() calls
+		find_package(PkgConfig)
+		if(PKG_CONFIG_FOUND)
+			pkg_check_modules(PC_${COMPONENT} ${PKGCONFIG} ${PKGOPTION})
+		endif()
+	endif()
+
+	find_path(${COMPONENT}_INCLUDE_DIR
+		${HEADER}
+		PATH ${PC_LIB${COMPONENT}_INCLUDEDIR} ${PC_LIB${COMPONENT}_INCLUDE_DIR}
+		PATH_SUFFIXES ffmpeg libav
+	)
+
+	find_library(${COMPONENT}_LIBRARIES 
+		NAMES ${LIBRARY}
+		PATH ${PC_LIB${COMPONENT}_LIBDIR} ${PC_LIB${COMPONENT}_LIBRARY_DIRS}
+	)
+
+	set(${COMPONENT}_DEFINITIONS ${PC_${COMPONENT}_CFLAGS_OTHER} CACHE STRING "The ${COMPONENT} CFLAGS.")	
+	set(${COMPONENT}_VERSION ${PC_${COMPONENT}_VERSION} CACHE STRING "The ${COMPONENT} version number.")
+
+	# Marks the given component as found if both *_LIBRARIES AND *_INCLUDE_DIR is present.	
+	if(${COMPONENT}_LIBRARIES AND ${COMPONENT}_INCLUDE_DIR)
+		set(${COMPONENT}_FOUND TRUE)
+	else()
+		set(${COMPONENT}_FOUND FALSE)
+	endif()
+
+	mark_as_advanced(
+		${COMPONENT}_INCLUDE_DIR
+		${COMPONENT}_LIBRARIES
+		${COMPONENT}_DEFINITIONS
+		${COMPONENT}_VERSION
+	)
+endmacro()
+
+# Get FFmpeg from custom install
+if(FFMPEG_LIBRARIES AND FFMPEG_INCLUDE_DIR)
+	set(FFMPEG_FOUND TRUE)
+# Get FFmpeg from system install
+else()
+	# Check FFmpeg version
+	if(DEFINED FFmpeg_FIND_VERSION)
+		check_ffmpeg_version()
+	endif()
+
+	if(NOT FFmpeg_FIND_COMPONENTS)
+		set(FFmpeg_FIND_COMPONENTS avcodec avformat avutil)
+	endif()
+
+	# Check components and add their stuff to the FFMPEG_* vars.
+	foreach(COMPONENT ${FFmpeg_FIND_COMPONENTS})
+		# Get component name is lower cases.
+		string(TOLOWER ${COMPONENT} LOWERCOMPONENT)
+		find_component(${COMPONENT} lib${LOWERCOMPONENT} REQUIRED ${LOWERCOMPONENT} lib${LOWERCOMPONENT}/${LOWERCOMPONENT}.h)
+		# If the component is found.
+		if(${COMPONENT}_FOUND)
+			message(STATUS "Required component ${COMPONENT} present.")
+			set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} ${${COMPONENT}_LIBRARIES})
+			set(FFMPEG_DEFINITIONS ${FFMPEG_DEFINITIONS} ${${COMPONENT}_DEFINITIONS})
+			list(APPEND FFMPEG_INCLUDE_DIR ${${COMPONENT}_INCLUDE_DIR})
+		else()
+			message(SEND_ERROR "Required component ${COMPONENT} missing.")
+		endif()
+	endforeach()
+
+	# Build the include path with duplicates removed.
+	if(FFMPEG_INCLUDE_DIR)
+		list(REMOVE_DUPLICATES FFMPEG_INCLUDE_DIR)
+	endif()
+endif()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c9f10eda..ae44b0b1 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,15 +1,13 @@
-# Load project cmake
+# Load custom cmake utilities
 set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
+include(AvTranscoderMacros)
 
-# Get useful variables
-set(AVTRANSCODER_APP_PATH "${PROJECT_SOURCE_DIR}/app" PARENT_SCOPE)
-set(AVTRANSCODER_SRC_PATH "${PROJECT_SOURCE_DIR}/src" PARENT_SCOPE)
-file(GLOB_RECURSE AVTRANSCODER_SRC_FILES "AvTranscoder/*.cpp" "AvTranscoder/*.hpp")
+##find_package(FFmpeg)
+find_package(FFmpeg
+	COMPONENTS REQUIRED avcodec avformat avutil swscale swresample)
 
-# Get FFMPEG from parameters
-set(FFMPEG_INCLUDE_DIR "/path/to/ffmpeg/include/" CACHE STRING "")
-set(FFMPEG_LIBRARY_DIR "/path/to/ffmpeg/lib/" CACHE STRING "")
-file(GLOB_RECURSE FFMPEG_LIBS "${FFMPEG_LIBRARY_DIR}/*.so")
+# get FFmpeg / libav libraries from path
+file(GLOB FFMPEG_LIBRARIES "${FFMPEG_LIBRARIES}/*.so")
 
 # Check if FFmpeg or libav dependency
 if(EXISTS "${FFMPEG_INCLUDE_DIR}/libavresample/avresample.h")
@@ -25,14 +23,14 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${FFMPEG_INCLUDE_DIR})
 add_library(avtranscoder-static STATIC ${AVTRANSCODER_SRC_FILES})
 set_target_properties(avtranscoder-static PROPERTIES LINKER_LANGUAGE CXX)
 set_target_properties(avtranscoder-static PROPERTIES OUTPUT_NAME avtranscoder)
-target_link_libraries(avtranscoder-static ${FFMPEG_LIBS})
+target_link_libraries(avtranscoder-static ${FFMPEG_LIBRARIES})
 
 # Create 'avtranscoder' shared lib
 add_library(avtranscoder-shared SHARED ${AVTRANSCODER_SRC_FILES})
 set_target_properties(avtranscoder-shared PROPERTIES LINKER_LANGUAGE CXX)
 set_target_properties(avtranscoder-shared PROPERTIES OUTPUT_NAME avtranscoder)
 set_target_properties(avtranscoder-shared PROPERTIES SOVERSION ${AVTRANSCODER_VERSION})
-target_link_libraries(avtranscoder-shared ${FFMPEG_LIBS})
+target_link_libraries(avtranscoder-shared ${FFMPEG_LIBRARIES})
 
 ### Install AvTranscoder libs and include
 install(

From a5c72f9832b9af061ff8e4f3d8b10deab7202973 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 14:20:24 +0200
Subject: [PATCH 10/31] CMake: get swresample or avresample

* Update FindFFmpeg.cmake : do not raise error if a component is not
found (warning).
---
 cmake/FindFFmpeg.cmake | 8 ++++----
 src/CMakeLists.txt     | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/cmake/FindFFmpeg.cmake b/cmake/FindFFmpeg.cmake
index b8e73974..9d26227e 100644
--- a/cmake/FindFFmpeg.cmake
+++ b/cmake/FindFFmpeg.cmake
@@ -36,13 +36,13 @@ endmacro()
 # then looking up the libraries and include directories.
 # @todo: WIN and MAC OSX.
 #
-macro(find_component COMPONENT PKGCONFIG PKGOPTION LIBRARY HEADER)
+macro(find_component COMPONENT PKGCONFIG LIBRARY HEADER)
 	if(NOT WIN32)
 		# use pkg-config to get the directories and then use these values
 		# in the FIND_PATH() and FIND_LIBRARY() calls
 		find_package(PkgConfig)
 		if(PKG_CONFIG_FOUND)
-			pkg_check_modules(PC_${COMPONENT} ${PKGCONFIG} ${PKGOPTION})
+			pkg_check_modules(PC_${COMPONENT} ${PKGCONFIG})
 		endif()
 	endif()
 
@@ -93,7 +93,7 @@ else()
 	foreach(COMPONENT ${FFmpeg_FIND_COMPONENTS})
 		# Get component name is lower cases.
 		string(TOLOWER ${COMPONENT} LOWERCOMPONENT)
-		find_component(${COMPONENT} lib${LOWERCOMPONENT} REQUIRED ${LOWERCOMPONENT} lib${LOWERCOMPONENT}/${LOWERCOMPONENT}.h)
+		find_component(${COMPONENT} lib${LOWERCOMPONENT} ${LOWERCOMPONENT} lib${LOWERCOMPONENT}/${LOWERCOMPONENT}.h)
 		# If the component is found.
 		if(${COMPONENT}_FOUND)
 			message(STATUS "Required component ${COMPONENT} present.")
@@ -101,7 +101,7 @@ else()
 			set(FFMPEG_DEFINITIONS ${FFMPEG_DEFINITIONS} ${${COMPONENT}_DEFINITIONS})
 			list(APPEND FFMPEG_INCLUDE_DIR ${${COMPONENT}_INCLUDE_DIR})
 		else()
-			message(SEND_ERROR "Required component ${COMPONENT} missing.")
+			message(STATUS "Required component ${COMPONENT} missing.")
 		endif()
 	endforeach()
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ae44b0b1..da267f30 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -4,7 +4,7 @@ include(AvTranscoderMacros)
 
 ##find_package(FFmpeg)
 find_package(FFmpeg
-	COMPONENTS REQUIRED avcodec avformat avutil swscale swresample)
+	COMPONENTS avcodec avformat avutil swscale swresample avresample)
 
 # get FFmpeg / libav libraries from path
 file(GLOB FFMPEG_LIBRARIES "${FFMPEG_LIBRARIES}/*.so")

From bab28bb0dbfdd9d464590b79ef5233437ca546d6 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 14:28:30 +0200
Subject: [PATCH 11/31] FindFFmpeg.cmake: manages REQUIRED statement

* If REQUIRED is specified for modules, raise error if a module is not
found.
---
 cmake/FindFFmpeg.cmake | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/cmake/FindFFmpeg.cmake b/cmake/FindFFmpeg.cmake
index 9d26227e..719d0853 100644
--- a/cmake/FindFFmpeg.cmake
+++ b/cmake/FindFFmpeg.cmake
@@ -96,12 +96,16 @@ else()
 		find_component(${COMPONENT} lib${LOWERCOMPONENT} ${LOWERCOMPONENT} lib${LOWERCOMPONENT}/${LOWERCOMPONENT}.h)
 		# If the component is found.
 		if(${COMPONENT}_FOUND)
-			message(STATUS "Required component ${COMPONENT} present.")
+			message(STATUS "Component ${COMPONENT} present.")
 			set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} ${${COMPONENT}_LIBRARIES})
 			set(FFMPEG_DEFINITIONS ${FFMPEG_DEFINITIONS} ${${COMPONENT}_DEFINITIONS})
 			list(APPEND FFMPEG_INCLUDE_DIR ${${COMPONENT}_INCLUDE_DIR})
 		else()
-			message(STATUS "Required component ${COMPONENT} missing.")
+			if(FFmpeg_FIND_REQUIRED)
+				message(SEND_ERROR "Error: required component ${COMPONENT} missing.")
+			else()
+				message(STATUS "Warning: component ${COMPONENT} missing.")
+			endif()
 		endif()
 	endforeach()
 

From 098fc873729989844210737274f342540e03ac80 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 14:30:55 +0200
Subject: [PATCH 12/31] FindFFmpeg.cmake: set FFMPEG_FOUND if FFmpeg is found
 on the system

---
 cmake/FindFFmpeg.cmake | 1 +
 1 file changed, 1 insertion(+)

diff --git a/cmake/FindFFmpeg.cmake b/cmake/FindFFmpeg.cmake
index 719d0853..9783b8bf 100644
--- a/cmake/FindFFmpeg.cmake
+++ b/cmake/FindFFmpeg.cmake
@@ -112,5 +112,6 @@ else()
 	# Build the include path with duplicates removed.
 	if(FFMPEG_INCLUDE_DIR)
 		list(REMOVE_DUPLICATES FFMPEG_INCLUDE_DIR)
+		set(FFMPEG_FOUND TRUE)
 	endif()
 endif()

From 2053bee6d27c3539fa2c3bb27e3e0e9b905a6ebd Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 14:40:19 +0200
Subject: [PATCH 13/31] CMake: clean find java package

* No need to specified the jdk version (it could be different on an
other computer).
* Use the JAVA_HOME environment variable to get the jdk (make sure your
env. is correctly set).
---
 src/CMakeLists.txt | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index da267f30..7b4cf90c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -74,11 +74,6 @@ if(SWIG_FOUND)
 	install(FILES ${AVTRANSCODER_PYTHON_BINDING_FILE} DESTINATION "lib/python2.7/site-packages/AvTranscoder/")
 
 	### JAVA BINDING
-	set(JAVADIST "/usr/java/jdk1.6.0_43" )
-	set(JAVAC "${JAVADIST}/bin/javac")
-	set(JAR "${JAVADIST}/bin/jar")
-	
-	set(ENV{JAVA_HOME} ${JAVADIST}) # fix find java SDK
 	find_package(Java REQUIRED)
 	find_package(JNI REQUIRED)
 	include(UseJava)
@@ -93,6 +88,8 @@ if(SWIG_FOUND)
 	swig_link_libraries(avtranscoder-java avtranscoder-shared)
 
 	# Post build of java binding : compile java files (generate class files) and create jar
+	set(JAVAC "ENV{JAVA_HOME}/bin/javac")
+	set(JAR "ENV{JAVA_HOME}/bin/jar")
 	set(AVTRANSCODER_JAVA_OUTPUT_PATH "${PROJECT_BINARY_DIR}/src/AvTranscoder")
 	set(AVTRANSCODER_JAR_PATH "${PROJECT_BINARY_DIR}/src")
 	set(AVTRANSCODER_JAR_NAME "avtranscoder-jar.jar")

From 4b061056d009b21a952e71060f5e4a3f44643a78 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 14:48:28 +0200
Subject: [PATCH 14/31] Travis: add install libxmu-dev

* Library linked by target "avplay".
---
 .travis.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.travis.yml b/.travis.yml
index 044d2740..2c3f73be 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -17,7 +17,7 @@ before_script:
   - sudo apt-add-repository "deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse"
   - sudo apt-get update -qq
   - sudo apt-get install -qq gcc g++ scons swig swig2.0
-  - sudo apt-get install -qq libavdevice-dev libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavresample-dev python-dev freeglut3-dev doxygen
+  - sudo apt-get install -qq libavdevice-dev libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavresample-dev python-dev freeglut3-dev libxmu-dev doxygen
 
 script:
   - mkdir build && cd build && cmake ../ && make

From 94e1e692aee4bdf30355439af28184cc50473247 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 15:04:48 +0200
Subject: [PATCH 15/31] CMake: define preprocessor macro
 AVTRANSCODER_VERSION_... through cmake

* Define preprocessor macros:
     * AVTRANSCODER_VERSION_MAJOR.
     * AVTRANSCODER_VERSION_MINOR.
     * AVTRANSCODER_VERSION_MICRO.
* In CMake AVTRANSCODER_VERSION is available.
---
 CMakeLists.txt | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b7ba6fc6..d984c57f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,11 +2,11 @@ cmake_minimum_required(VERSION 2.8)
 
 project(AvTranscoder)
 
-# AvTranscoder version
-set(AVTRANSCODER_VERSION_MAJOR 0)
-set(AVTRANSCODER_VERSION_MINOR 2)
-set(AVTRANSCODER_VERSION_MICRO 1)
-set(AVTRANSCODER_VERSION ${AVTRANSCODER_VERSION_MAJOR}.${AVTRANSCODER_VERSION_MINOR}.${AVTRANSCODER_VERSION_MICRO})
+# Define AvTranscoder versionS
+add_definitions(-DAVTRANSCODER_VERSION_MAJOR=0)
+add_definitions(-DAVTRANSCODER_VERSION_MINOR=2)
+add_definitions(-DAVTRANSCODER_VERSION_MICRO=1)
+set(AVTRANSCODER_VERSION "0.2.1")
 
 # Diplay commands being ran by CMake
 set(CMAKE_VERBOSE_MAKEFILE ON)

From 0d545aa0e851088f0494db675daaa489bee8c6ed Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 15:08:13 +0200
Subject: [PATCH 16/31] CMake: clean javac and jar command

* Get javac executable from Java_JAVAC_EXECUTABLE.
* Get jar executable from Java_JAR_EXECUTABLE.
---
 src/CMakeLists.txt | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7b4cf90c..e5c124c6 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -88,16 +88,14 @@ if(SWIG_FOUND)
 	swig_link_libraries(avtranscoder-java avtranscoder-shared)
 
 	# Post build of java binding : compile java files (generate class files) and create jar
-	set(JAVAC "ENV{JAVA_HOME}/bin/javac")
-	set(JAR "ENV{JAVA_HOME}/bin/jar")
 	set(AVTRANSCODER_JAVA_OUTPUT_PATH "${PROJECT_BINARY_DIR}/src/AvTranscoder")
 	set(AVTRANSCODER_JAR_PATH "${PROJECT_BINARY_DIR}/src")
 	set(AVTRANSCODER_JAR_NAME "avtranscoder-jar.jar")
 	ADD_CUSTOM_COMMAND(
 		TARGET avtranscoder-java
 		POST_BUILD
-		COMMAND ${JAVAC} ${AVTRANSCODER_JAVA_CLASS_OUTPUT_PATH} "${AVTRANSCODER_JAVA_OUTPUT_PATH}/*.java"
-		COMMAND ${JAR} cvf ${AVTRANSCODER_JAR_NAME} "${AVTRANSCODER_JAVA_OUTPUT_PATH}/*.class"
+		COMMAND ${Java_JAVAC_EXECUTABLE} ${AVTRANSCODER_JAVA_CLASS_OUTPUT_PATH} "${AVTRANSCODER_JAVA_OUTPUT_PATH}/*.java"
+		COMMAND ${Java_JAR_EXECUTABLE} cvf ${AVTRANSCODER_JAR_NAME} "${AVTRANSCODER_JAVA_OUTPUT_PATH}/*.class"
 	)
 
 	# Install jar file

From a127ede86667c6a58067ad586d64447dffe07bc8 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 15:14:43 +0200
Subject: [PATCH 17/31] Travis: fix build

---
 cmake/FindFFmpeg.cmake | 3 ++-
 src/CMakeLists.txt     | 3 ---
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/cmake/FindFFmpeg.cmake b/cmake/FindFFmpeg.cmake
index 9783b8bf..e69728fb 100644
--- a/cmake/FindFFmpeg.cmake
+++ b/cmake/FindFFmpeg.cmake
@@ -76,8 +76,9 @@ macro(find_component COMPONENT PKGCONFIG LIBRARY HEADER)
 endmacro()
 
 # Get FFmpeg from custom install
-if(FFMPEG_LIBRARIES AND FFMPEG_INCLUDE_DIR)
+if(FFMPEG_LIBRARY_DIR AND FFMPEG_INCLUDE_DIR)
 	set(FFMPEG_FOUND TRUE)
+	file(GLOB FFMPEG_LIBRARIES "${FFMPEG_LIBRARY_DIR}/*.so")
 # Get FFmpeg from system install
 else()
 	# Check FFmpeg version
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index e5c124c6..2f7c143b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -6,9 +6,6 @@ include(AvTranscoderMacros)
 find_package(FFmpeg
 	COMPONENTS avcodec avformat avutil swscale swresample avresample)
 
-# get FFmpeg / libav libraries from path
-file(GLOB FFMPEG_LIBRARIES "${FFMPEG_LIBRARIES}/*.so")
-
 # Check if FFmpeg or libav dependency
 if(EXISTS "${FFMPEG_INCLUDE_DIR}/libavresample/avresample.h")
 	add_definitions(-DAV_RESAMPLE_LIBRARY=1)

From 3a14d71078d106fdfc6c4d2105322177a969f222 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 15:49:57 +0200
Subject: [PATCH 18/31] FindFFmpeg.cmake: add comments

---
 cmake/FindFFmpeg.cmake | 1 +
 1 file changed, 1 insertion(+)

diff --git a/cmake/FindFFmpeg.cmake b/cmake/FindFFmpeg.cmake
index e69728fb..b45dadf7 100644
--- a/cmake/FindFFmpeg.cmake
+++ b/cmake/FindFFmpeg.cmake
@@ -5,6 +5,7 @@
 # FFMPEG_FOUND
 # FFMPEG_INCLUDE_DIR - The FFmpeg include directory.
 # FFMPEG_LIBRARIES - The FFmpeg libraries.
+# FFMPEG_DEFINITIONS - The FFmpeg compile flags.
 # 
 # For each component:
 # ${COMPONENT}_FOUND

From 03a828d337d469b3807fe58055ef855acd9e8ae6 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 19:42:26 +0200
Subject: [PATCH 19/31] CMake: no compiler chosen

It could be g++, clang, msvc...
---
 CMakeLists.txt | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index d984c57f..4a17bcae 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,9 +11,6 @@ set(AVTRANSCODER_VERSION "0.2.1")
 # Diplay commands being ran by CMake
 set(CMAKE_VERBOSE_MAKEFILE ON)
 
-# Choose compiler
-set(CMAKE_CXX_COMPILER "g++")
-
 # CPP flags on debug / release mode
 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -fPIC -pg -g")
 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fPIC -O3")

From f5a70479b7b566261e24220e5c6a16293aa24bd3 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 19:43:26 +0200
Subject: [PATCH 20/31] CMake: set verbose mode off

---
 CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4a17bcae..d4efa9b9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,7 +9,7 @@ add_definitions(-DAVTRANSCODER_VERSION_MICRO=1)
 set(AVTRANSCODER_VERSION "0.2.1")
 
 # Diplay commands being ran by CMake
-set(CMAKE_VERBOSE_MAKEFILE ON)
+set(CMAKE_VERBOSE_MAKEFILE OFF)
 
 # CPP flags on debug / release mode
 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -fPIC -pg -g")

From 798c780c92db94a4d64cac83f2faece7f1bb1e5b Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 19:46:09 +0200
Subject: [PATCH 21/31] CMake: update permissions of executable apps

* Permissions are:
     * owner: read / writer / execute.
     * group: read / execute.
     * all: read / execute.
---
 app/cpp/avInfo/CMakeLists.txt           | 6 +++++-
 app/cpp/avMeta/CMakeLists.txt           | 6 +++++-
 app/cpp/avTranscoder/CMakeLists.txt     | 6 +++++-
 app/cpp/avplay/CMakeLists.txt           | 6 +++++-
 app/cpp/genericProcessor/CMakeLists.txt | 6 +++++-
 app/cpp/optionChecker/CMakeLists.txt    | 6 +++++-
 app/cpp/presetChecker/CMakeLists.txt    | 6 +++++-
 7 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/app/cpp/avInfo/CMakeLists.txt b/app/cpp/avInfo/CMakeLists.txt
index f2af9131..5f231bfc 100644
--- a/app/cpp/avInfo/CMakeLists.txt
+++ b/app/cpp/avInfo/CMakeLists.txt
@@ -10,5 +10,9 @@ add_executable(avinfo avInfo.cpp)
 target_link_libraries(avinfo avtranscoder-shared)
 
 # Install app
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avinfo DESTINATION "bin/")
 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avinfo.man DESTINATION "share/man/man1/")
+install(
+	FILES ${CMAKE_CURRENT_BINARY_DIR}/avinfo
+	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
+	DESTINATION "bin/"
+)
diff --git a/app/cpp/avMeta/CMakeLists.txt b/app/cpp/avMeta/CMakeLists.txt
index f07afb15..7bd7ac4d 100644
--- a/app/cpp/avMeta/CMakeLists.txt
+++ b/app/cpp/avMeta/CMakeLists.txt
@@ -10,5 +10,9 @@ add_executable(avmeta avMeta.cpp)
 target_link_libraries(avmeta avtranscoder-shared)
 
 # Install app
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avmeta DESTINATION "bin/")
 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avmeta.man DESTINATION "share/man/man1/")
+install(
+	FILES ${CMAKE_CURRENT_BINARY_DIR}/avmeta
+	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
+	DESTINATION "bin/"
+)
diff --git a/app/cpp/avTranscoder/CMakeLists.txt b/app/cpp/avTranscoder/CMakeLists.txt
index 6615c7ba..fd9ef3a5 100644
--- a/app/cpp/avTranscoder/CMakeLists.txt
+++ b/app/cpp/avTranscoder/CMakeLists.txt
@@ -10,5 +10,9 @@ add_executable(avtranscoder avTranscoder.cpp)
 target_link_libraries(avtranscoder avtranscoder-shared)
 
 # Install app
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avtranscoder DESTINATION "bin/")
 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/av++.man DESTINATION "share/man/man1/")
+install(
+	FILES ${CMAKE_CURRENT_BINARY_DIR}/avtranscoder
+	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
+	DESTINATION "bin/"
+)
diff --git a/app/cpp/avplay/CMakeLists.txt b/app/cpp/avplay/CMakeLists.txt
index 010a6387..91ee87fd 100644
--- a/app/cpp/avplay/CMakeLists.txt
+++ b/app/cpp/avplay/CMakeLists.txt
@@ -16,5 +16,9 @@ add_executable(avplay ${AVPLAY_SRC_FILES})
 target_link_libraries(avplay avtranscoder-shared ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})
 
 # Install app
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avplay DESTINATION "bin/")
 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avplayer.man DESTINATION "share/man/man1/")
+install(
+	FILES ${CMAKE_CURRENT_BINARY_DIR}/avplay
+	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
+	DESTINATION "bin/"
+)
diff --git a/app/cpp/genericProcessor/CMakeLists.txt b/app/cpp/genericProcessor/CMakeLists.txt
index 213cca44..fe570784 100644
--- a/app/cpp/genericProcessor/CMakeLists.txt
+++ b/app/cpp/genericProcessor/CMakeLists.txt
@@ -10,5 +10,9 @@ add_executable(avprocessor genericProcessor.cpp)
 target_link_libraries(avprocessor avtranscoder-shared)
 
 # Install app
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avprocessor DESTINATION "bin/")
 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avprocessor.man DESTINATION "share/man/man1/")
+install(
+	FILES ${CMAKE_CURRENT_BINARY_DIR}/avprocessor
+	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
+	DESTINATION "bin/"
+)
diff --git a/app/cpp/optionChecker/CMakeLists.txt b/app/cpp/optionChecker/CMakeLists.txt
index 19cb0836..1beab024 100644
--- a/app/cpp/optionChecker/CMakeLists.txt
+++ b/app/cpp/optionChecker/CMakeLists.txt
@@ -12,4 +12,8 @@ add_executable(avoptionchecker optionChecker.cpp)
 target_link_libraries(avoptionchecker avtranscoder-shared)
 
 # Install app
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avoptionchecker DESTINATION "bin/")
+install(
+	FILES ${CMAKE_CURRENT_BINARY_DIR}/avoptionchecker
+	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
+	DESTINATION "bin/"
+)
diff --git a/app/cpp/presetChecker/CMakeLists.txt b/app/cpp/presetChecker/CMakeLists.txt
index 45e394a7..cfbadf1e 100644
--- a/app/cpp/presetChecker/CMakeLists.txt
+++ b/app/cpp/presetChecker/CMakeLists.txt
@@ -12,5 +12,9 @@ add_executable(avpresetchecker presetChecker.cpp)
 target_link_libraries(avpresetchecker avtranscoder-shared)
 
 # Install app
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/avpresetchecker DESTINATION "bin/")
 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avprofiles.man DESTINATION "share/man/man1/")
+install(
+	FILES ${CMAKE_CURRENT_BINARY_DIR}/avpresetchecker
+	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
+	DESTINATION "bin/"
+)

From 57e577522078bd8458a5a30ea5661a95f79ccaa2 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 19:47:57 +0200
Subject: [PATCH 22/31] CMake: update name of man apps

* Rename xxx.man to xxx.1 (manuals for users).
---
 app/cpp/avInfo/CMakeLists.txt           | 6 +++++-
 app/cpp/avMeta/CMakeLists.txt           | 6 +++++-
 app/cpp/avTranscoder/CMakeLists.txt     | 6 +++++-
 app/cpp/avplay/CMakeLists.txt           | 6 +++++-
 app/cpp/genericProcessor/CMakeLists.txt | 6 +++++-
 app/cpp/presetChecker/CMakeLists.txt    | 6 +++++-
 6 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/app/cpp/avInfo/CMakeLists.txt b/app/cpp/avInfo/CMakeLists.txt
index 5f231bfc..4fa734e4 100644
--- a/app/cpp/avInfo/CMakeLists.txt
+++ b/app/cpp/avInfo/CMakeLists.txt
@@ -10,9 +10,13 @@ add_executable(avinfo avInfo.cpp)
 target_link_libraries(avinfo avtranscoder-shared)
 
 # Install app
-install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avinfo.man DESTINATION "share/man/man1/")
 install(
 	FILES ${CMAKE_CURRENT_BINARY_DIR}/avinfo
 	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
 	DESTINATION "bin/"
 )
+install(
+	FILES ${CMAKE_CURRENT_SOURCE_DIR}/avinfo.man
+	RENAME "avinfo.1"
+	DESTINATION "share/man/man1/"
+)
diff --git a/app/cpp/avMeta/CMakeLists.txt b/app/cpp/avMeta/CMakeLists.txt
index 7bd7ac4d..575add54 100644
--- a/app/cpp/avMeta/CMakeLists.txt
+++ b/app/cpp/avMeta/CMakeLists.txt
@@ -10,9 +10,13 @@ add_executable(avmeta avMeta.cpp)
 target_link_libraries(avmeta avtranscoder-shared)
 
 # Install app
-install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avmeta.man DESTINATION "share/man/man1/")
 install(
 	FILES ${CMAKE_CURRENT_BINARY_DIR}/avmeta
 	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
 	DESTINATION "bin/"
 )
+install(
+	FILES ${CMAKE_CURRENT_SOURCE_DIR}/avmeta.man
+	RENAME "avmeta.1"
+	DESTINATION "share/man/man1/"
+)
diff --git a/app/cpp/avTranscoder/CMakeLists.txt b/app/cpp/avTranscoder/CMakeLists.txt
index fd9ef3a5..636c3aef 100644
--- a/app/cpp/avTranscoder/CMakeLists.txt
+++ b/app/cpp/avTranscoder/CMakeLists.txt
@@ -10,9 +10,13 @@ add_executable(avtranscoder avTranscoder.cpp)
 target_link_libraries(avtranscoder avtranscoder-shared)
 
 # Install app
-install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/av++.man DESTINATION "share/man/man1/")
 install(
 	FILES ${CMAKE_CURRENT_BINARY_DIR}/avtranscoder
 	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
 	DESTINATION "bin/"
 )
+install(
+	FILES ${CMAKE_CURRENT_SOURCE_DIR}/av++.man
+	RENAME av++.1
+	DESTINATION "share/man/man1/"
+)
diff --git a/app/cpp/avplay/CMakeLists.txt b/app/cpp/avplay/CMakeLists.txt
index 91ee87fd..5b53e671 100644
--- a/app/cpp/avplay/CMakeLists.txt
+++ b/app/cpp/avplay/CMakeLists.txt
@@ -16,9 +16,13 @@ add_executable(avplay ${AVPLAY_SRC_FILES})
 target_link_libraries(avplay avtranscoder-shared ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})
 
 # Install app
-install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avplayer.man DESTINATION "share/man/man1/")
 install(
 	FILES ${CMAKE_CURRENT_BINARY_DIR}/avplay
 	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
 	DESTINATION "bin/"
 )
+install(
+	FILES ${CMAKE_CURRENT_SOURCE_DIR}/avplayer.man
+	RENAME avplayer.1
+	DESTINATION "share/man/man1/"
+)
diff --git a/app/cpp/genericProcessor/CMakeLists.txt b/app/cpp/genericProcessor/CMakeLists.txt
index fe570784..16c22e27 100644
--- a/app/cpp/genericProcessor/CMakeLists.txt
+++ b/app/cpp/genericProcessor/CMakeLists.txt
@@ -10,9 +10,13 @@ add_executable(avprocessor genericProcessor.cpp)
 target_link_libraries(avprocessor avtranscoder-shared)
 
 # Install app
-install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avprocessor.man DESTINATION "share/man/man1/")
 install(
 	FILES ${CMAKE_CURRENT_BINARY_DIR}/avprocessor
 	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
 	DESTINATION "bin/"
 )
+install(
+	FILES ${CMAKE_CURRENT_SOURCE_DIR}/avprocessor.man
+	RENAME avprocessor.1
+	DESTINATION "share/man/man1/"
+)
diff --git a/app/cpp/presetChecker/CMakeLists.txt b/app/cpp/presetChecker/CMakeLists.txt
index cfbadf1e..b6dc142f 100644
--- a/app/cpp/presetChecker/CMakeLists.txt
+++ b/app/cpp/presetChecker/CMakeLists.txt
@@ -12,9 +12,13 @@ add_executable(avpresetchecker presetChecker.cpp)
 target_link_libraries(avpresetchecker avtranscoder-shared)
 
 # Install app
-install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/avprofiles.man DESTINATION "share/man/man1/")
 install(
 	FILES ${CMAKE_CURRENT_BINARY_DIR}/avpresetchecker
 	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
 	DESTINATION "bin/"
 )
+install(
+	FILES ${CMAKE_CURRENT_SOURCE_DIR}/avprofiles.man
+	RENAME avprofiles.1
+	DESTINATION "share/man/man1/"
+)

From a084402b1b731c30d9356290bea3bd01aeb95bc8 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 19:48:49 +0200
Subject: [PATCH 23/31] CMake: refactoring variable to check RESAMPLE_LIBRARY

---
 src/CMakeLists.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2f7c143b..ff4622ca 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -8,9 +8,9 @@ find_package(FFmpeg
 
 # Check if FFmpeg or libav dependency
 if(EXISTS "${FFMPEG_INCLUDE_DIR}/libavresample/avresample.h")
-	add_definitions(-DAV_RESAMPLE_LIBRARY=1)
+	add_definitions(-DAV_RESAMPLE_LIBRARY)
 else()
-	add_definitions(-DFF_RESAMPLE_LIBRARY=1)
+	add_definitions(-DFF_RESAMPLE_LIBRARY)
 endif()
 
 # Include AvTranscoder and FFmpeg

From 1db0ec1c52776b09f75302a89b0674ec225d4e22 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Tue, 9 Sep 2014 19:49:17 +0200
Subject: [PATCH 24/31] CMake: update jar name

Rename avtranscoder-jar.jar to avtranscoder.jar.
---
 src/CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ff4622ca..cac5a5a9 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -87,7 +87,7 @@ if(SWIG_FOUND)
 	# Post build of java binding : compile java files (generate class files) and create jar
 	set(AVTRANSCODER_JAVA_OUTPUT_PATH "${PROJECT_BINARY_DIR}/src/AvTranscoder")
 	set(AVTRANSCODER_JAR_PATH "${PROJECT_BINARY_DIR}/src")
-	set(AVTRANSCODER_JAR_NAME "avtranscoder-jar.jar")
+	set(AVTRANSCODER_JAR_NAME "avtranscoder.jar")
 	ADD_CUSTOM_COMMAND(
 		TARGET avtranscoder-java
 		POST_BUILD

From 1da0ec267fc9adb100569d3475ac7c246d954802 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Wed, 10 Sep 2014 15:45:39 +0200
Subject: [PATCH 25/31] CMake: fix versioning of dynamic avtranscoder library

Versioning in three steps:
     * libavtranscoder.so -> libavtranscoder.so.0
     * libavtranscoder.so.0 -> libavtranscoder.so.0.2.1
     * libavtranscoder.so.0.2.1
---
 CMakeLists.txt     | 15 ++++++++++-----
 src/CMakeLists.txt |  3 ++-
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index d4efa9b9..30e6d7e3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,11 +2,16 @@ cmake_minimum_required(VERSION 2.8)
 
 project(AvTranscoder)
 
-# Define AvTranscoder versionS
-add_definitions(-DAVTRANSCODER_VERSION_MAJOR=0)
-add_definitions(-DAVTRANSCODER_VERSION_MINOR=2)
-add_definitions(-DAVTRANSCODER_VERSION_MICRO=1)
-set(AVTRANSCODER_VERSION "0.2.1")
+# Set AvTranscoder versions
+set(AVTRANSCODER_VERSION_MAJOR "0")
+set(AVTRANSCODER_VERSION_MINOR "2")
+set(AVTRANSCODER_VERSION_MICRO "1")
+set(AVTRANSCODER_VERSION ${AVTRANSCODER_VERSION_MAJOR}.${AVTRANSCODER_VERSION_MINOR}.${AVTRANSCODER_VERSION_MICRO})
+
+# Define AvTranscoder versions
+add_definitions(-DAVTRANSCODER_VERSION_MAJOR=${AVTRANSCODER_VERSION_MAJOR})
+add_definitions(-DAVTRANSCODER_VERSION_MINOR=${AVTRANSCODER_VERSION_MINOR})
+add_definitions(-DAVTRANSCODER_VERSION_MICRO=${AVTRANSCODER_VERSION_MICRO})
 
 # Diplay commands being ran by CMake
 set(CMAKE_VERBOSE_MAKEFILE OFF)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index cac5a5a9..4b34c02e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -26,7 +26,8 @@ target_link_libraries(avtranscoder-static ${FFMPEG_LIBRARIES})
 add_library(avtranscoder-shared SHARED ${AVTRANSCODER_SRC_FILES})
 set_target_properties(avtranscoder-shared PROPERTIES LINKER_LANGUAGE CXX)
 set_target_properties(avtranscoder-shared PROPERTIES OUTPUT_NAME avtranscoder)
-set_target_properties(avtranscoder-shared PROPERTIES SOVERSION ${AVTRANSCODER_VERSION})
+set_target_properties(avtranscoder-shared PROPERTIES SOVERSION ${AVTRANSCODER_VERSION_MAJOR})
+set_target_properties(avtranscoder-shared PROPERTIES VERSION ${AVTRANSCODER_VERSION})
 target_link_libraries(avtranscoder-shared ${FFMPEG_LIBRARIES})
 
 ### Install AvTranscoder libs and include

From 85b9ee7edbb16dc71595ef3b2201e7a3a877ef54 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Wed, 10 Sep 2014 16:06:09 +0200
Subject: [PATCH 26/31] CMake: add version to avtranscoder-py dynamic library

---
 src/CMakeLists.txt | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4b34c02e..c0c988ca 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -65,6 +65,8 @@ if(SWIG_FOUND)
 
 	# Create 'avtranscoder-py' shared lib
 	swig_add_module(avtranscoder-py python ${AVTRANSCODER_BINDING_FILE})
+	set_target_properties(${SWIG_MODULE_avtranscoder-py_REAL_NAME} PROPERTIES SOVERSION ${AVTRANSCODER_VERSION_MAJOR})
+	set_target_properties(${SWIG_MODULE_avtranscoder-py_REAL_NAME} PROPERTIES VERSION ${AVTRANSCODER_VERSION})
 	swig_link_libraries(avtranscoder-py avtranscoder-shared ${PYTHON_LIBRARIES})
 
 	# Install python interface

From bd52b12ab49eb3158cc1d2e83d7d8a248007aeaf Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Wed, 10 Sep 2014 16:06:23 +0200
Subject: [PATCH 27/31] CMake: add version to avtranscoder-java dynamic library

---
 src/CMakeLists.txt | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c0c988ca..18881723 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -85,6 +85,8 @@ if(SWIG_FOUND)
 
 	# Create 'avtranscoder-java' shared lib
 	swig_add_module(avtranscoder-java java ${AVTRANSCODER_BINDING_FILE})
+	set_target_properties(${SWIG_MODULE_avtranscoder-java_REAL_NAME} PROPERTIES SOVERSION ${AVTRANSCODER_VERSION_MAJOR})
+	set_target_properties(${SWIG_MODULE_avtranscoder-java_REAL_NAME} PROPERTIES VERSION ${AVTRANSCODER_VERSION})
 	swig_link_libraries(avtranscoder-java avtranscoder-shared)
 
 	# Post build of java binding : compile java files (generate class files) and create jar

From da419726407fe787a84c91539cdbe5295acd339a Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Wed, 10 Sep 2014 16:39:33 +0200
Subject: [PATCH 28/31] CMake: python file and its directory in lower case

---
 src/CMakeLists.txt | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 18881723..55b67ed2 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -71,7 +71,11 @@ if(SWIG_FOUND)
 
 	# Install python interface
 	file(GLOB AVTRANSCODER_PYTHON_BINDING_FILE "${CMAKE_SWIG_OUTDIR}/*.py")
-	install(FILES ${AVTRANSCODER_PYTHON_BINDING_FILE} DESTINATION "lib/python2.7/site-packages/AvTranscoder/")
+	install(
+		FILES ${AVTRANSCODER_PYTHON_BINDING_FILE}
+		RENAME "avtranscoder.py"
+		DESTINATION "lib/python2.7/site-packages/avtranscoder/"
+	)
 
 	### JAVA BINDING
 	find_package(Java REQUIRED)

From 287c5f1da19569a79a9bbb1ade39ac5fdcab509b Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Wed, 10 Sep 2014 18:30:39 +0200
Subject: [PATCH 29/31] CMake: add version to cpp apps

---
 app/cpp/avInfo/CMakeLists.txt           | 5 +++--
 app/cpp/avMeta/CMakeLists.txt           | 3 ++-
 app/cpp/avTranscoder/CMakeLists.txt     | 3 ++-
 app/cpp/avplay/CMakeLists.txt           | 3 ++-
 app/cpp/genericProcessor/CMakeLists.txt | 3 ++-
 app/cpp/optionChecker/CMakeLists.txt    | 3 ++-
 app/cpp/presetChecker/CMakeLists.txt    | 3 ++-
 7 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/app/cpp/avInfo/CMakeLists.txt b/app/cpp/avInfo/CMakeLists.txt
index 4fa734e4..d18f6218 100644
--- a/app/cpp/avInfo/CMakeLists.txt
+++ b/app/cpp/avInfo/CMakeLists.txt
@@ -6,12 +6,13 @@ include(AvTranscoderMacros)
 
 # Build app
 include_directories(${AVTRANSCODER_SRC_PATH})
-add_executable(avinfo avInfo.cpp) 
+add_executable(avinfo avInfo.cpp)
+set_target_properties(avinfo PROPERTIES VERSION ${AVTRANSCODER_VERSION})
 target_link_libraries(avinfo avtranscoder-shared)
 
 # Install app
 install(
-	FILES ${CMAKE_CURRENT_BINARY_DIR}/avinfo
+	FILES "${CMAKE_CURRENT_BINARY_DIR}/avinfo" "${CMAKE_CURRENT_BINARY_DIR}/avinfo-${AVTRANSCODER_VERSION}"
 	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
 	DESTINATION "bin/"
 )
diff --git a/app/cpp/avMeta/CMakeLists.txt b/app/cpp/avMeta/CMakeLists.txt
index 575add54..ea01da99 100644
--- a/app/cpp/avMeta/CMakeLists.txt
+++ b/app/cpp/avMeta/CMakeLists.txt
@@ -7,11 +7,12 @@ include(AvTranscoderMacros)
 # Build app
 include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
 add_executable(avmeta avMeta.cpp)
+set_target_properties(avmeta PROPERTIES VERSION ${AVTRANSCODER_VERSION})
 target_link_libraries(avmeta avtranscoder-shared)
 
 # Install app
 install(
-	FILES ${CMAKE_CURRENT_BINARY_DIR}/avmeta
+	FILES "${CMAKE_CURRENT_BINARY_DIR}/avmeta" "${CMAKE_CURRENT_BINARY_DIR}/avmeta-${AVTRANSCODER_VERSION}"
 	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
 	DESTINATION "bin/"
 )
diff --git a/app/cpp/avTranscoder/CMakeLists.txt b/app/cpp/avTranscoder/CMakeLists.txt
index 636c3aef..f312fc2e 100644
--- a/app/cpp/avTranscoder/CMakeLists.txt
+++ b/app/cpp/avTranscoder/CMakeLists.txt
@@ -7,11 +7,12 @@ include(AvTranscoderMacros)
 # Build app
 include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
 add_executable(avtranscoder avTranscoder.cpp)
+set_target_properties(avtranscoder PROPERTIES VERSION ${AVTRANSCODER_VERSION})
 target_link_libraries(avtranscoder avtranscoder-shared)
 
 # Install app
 install(
-	FILES ${CMAKE_CURRENT_BINARY_DIR}/avtranscoder
+	FILES "${CMAKE_CURRENT_BINARY_DIR}/avtranscoder" "${CMAKE_CURRENT_BINARY_DIR}/avtranscoder-${AVTRANSCODER_VERSION}"
 	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
 	DESTINATION "bin/"
 )
diff --git a/app/cpp/avplay/CMakeLists.txt b/app/cpp/avplay/CMakeLists.txt
index 5b53e671..61a1838b 100644
--- a/app/cpp/avplay/CMakeLists.txt
+++ b/app/cpp/avplay/CMakeLists.txt
@@ -13,11 +13,12 @@ include_directories( ${OPENGL_INCLUDE_DIRS}  ${GLUT_INCLUDE_DIRS} )
 
 file(GLOB AVPLAY_SRC_FILES "*.cpp" "*.hpp")
 add_executable(avplay ${AVPLAY_SRC_FILES})
+set_target_properties(avplay PROPERTIES VERSION ${AVTRANSCODER_VERSION})
 target_link_libraries(avplay avtranscoder-shared ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})
 
 # Install app
 install(
-	FILES ${CMAKE_CURRENT_BINARY_DIR}/avplay
+	FILES "${CMAKE_CURRENT_BINARY_DIR}/avplay" "${CMAKE_CURRENT_BINARY_DIR}/avplay-${AVTRANSCODER_VERSION}"
 	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
 	DESTINATION "bin/"
 )
diff --git a/app/cpp/genericProcessor/CMakeLists.txt b/app/cpp/genericProcessor/CMakeLists.txt
index 16c22e27..6a1fe4fe 100644
--- a/app/cpp/genericProcessor/CMakeLists.txt
+++ b/app/cpp/genericProcessor/CMakeLists.txt
@@ -7,11 +7,12 @@ include(AvTranscoderMacros)
 # Build app
 include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
 add_executable(avprocessor genericProcessor.cpp)
+set_target_properties(avprocessor PROPERTIES VERSION ${AVTRANSCODER_VERSION})
 target_link_libraries(avprocessor avtranscoder-shared)
 
 # Install app
 install(
-	FILES ${CMAKE_CURRENT_BINARY_DIR}/avprocessor
+	FILES "${CMAKE_CURRENT_BINARY_DIR}/avprocessor" "${CMAKE_CURRENT_BINARY_DIR}/avprocessor-${AVTRANSCODER_VERSION}"
 	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
 	DESTINATION "bin/"
 )
diff --git a/app/cpp/optionChecker/CMakeLists.txt b/app/cpp/optionChecker/CMakeLists.txt
index 1beab024..0372fb90 100644
--- a/app/cpp/optionChecker/CMakeLists.txt
+++ b/app/cpp/optionChecker/CMakeLists.txt
@@ -9,11 +9,12 @@ include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
 # Add C++11 flag
 set(CMAKE_CXX_FLAGS "-std=c++0x")
 add_executable(avoptionchecker optionChecker.cpp)
+set_target_properties(avoptionchecker PROPERTIES VERSION ${AVTRANSCODER_VERSION})
 target_link_libraries(avoptionchecker avtranscoder-shared)
 
 # Install app
 install(
-	FILES ${CMAKE_CURRENT_BINARY_DIR}/avoptionchecker
+	FILES "${CMAKE_CURRENT_BINARY_DIR}/avoptionchecker" "${CMAKE_CURRENT_BINARY_DIR}/avoptionchecker-${AVTRANSCODER_VERSION}"
 	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
 	DESTINATION "bin/"
 )
diff --git a/app/cpp/presetChecker/CMakeLists.txt b/app/cpp/presetChecker/CMakeLists.txt
index b6dc142f..763c6031 100644
--- a/app/cpp/presetChecker/CMakeLists.txt
+++ b/app/cpp/presetChecker/CMakeLists.txt
@@ -9,11 +9,12 @@ include_directories(${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR})
 # Add C++11 flag
 set(CMAKE_CXX_FLAGS "-std=c++0x")
 add_executable(avpresetchecker presetChecker.cpp)
+set_target_properties(avpresetchecker PROPERTIES VERSION ${AVTRANSCODER_VERSION})
 target_link_libraries(avpresetchecker avtranscoder-shared)
 
 # Install app
 install(
-	FILES ${CMAKE_CURRENT_BINARY_DIR}/avpresetchecker
+	FILES "${CMAKE_CURRENT_BINARY_DIR}/avpresetchecker" "${CMAKE_CURRENT_BINARY_DIR}/avpresetchecker-${AVTRANSCODER_VERSION}"
 	PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
 	DESTINATION "bin/"
 )

From 3c07530fa74b104b8fc3f84fe5303745c82f20ee Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Wed, 10 Sep 2014 18:57:02 +0200
Subject: [PATCH 30/31] CMake: generate bindings only if possible

* Generate python binding if PYTHONLIBS_FOUND.
* Generate java binding if JAVA_FOUND AND JNI_FOUND.
* So theses packages are not required to build AvTranscoder.
---
 src/CMakeLists.txt | 100 ++++++++++++++++++++++++---------------------
 1 file changed, 54 insertions(+), 46 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 55b67ed2..e5d6ba9d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -58,54 +58,62 @@ if(SWIG_FOUND)
 
 	### PYTHON BINDING
 	find_package(PythonLibs)
-	include_directories(${PYTHON_INCLUDE_PATH})
-
-	# Swig flags
-	set(CMAKE_SWIG_FLAGS -c++ -fcompact)
-
-	# Create 'avtranscoder-py' shared lib
-	swig_add_module(avtranscoder-py python ${AVTRANSCODER_BINDING_FILE})
-	set_target_properties(${SWIG_MODULE_avtranscoder-py_REAL_NAME} PROPERTIES SOVERSION ${AVTRANSCODER_VERSION_MAJOR})
-	set_target_properties(${SWIG_MODULE_avtranscoder-py_REAL_NAME} PROPERTIES VERSION ${AVTRANSCODER_VERSION})
-	swig_link_libraries(avtranscoder-py avtranscoder-shared ${PYTHON_LIBRARIES})
-
-	# Install python interface
-	file(GLOB AVTRANSCODER_PYTHON_BINDING_FILE "${CMAKE_SWIG_OUTDIR}/*.py")
-	install(
-		FILES ${AVTRANSCODER_PYTHON_BINDING_FILE}
-		RENAME "avtranscoder.py"
-		DESTINATION "lib/python2.7/site-packages/avtranscoder/"
-	)
+	if(PYTHONLIBS_FOUND)
+		include_directories(${PYTHON_INCLUDE_PATH})
+
+		# Swig flags
+		set(CMAKE_SWIG_FLAGS -c++ -fcompact)
+
+		# Create 'avtranscoder-py' shared lib
+		swig_add_module(avtranscoder-py python ${AVTRANSCODER_BINDING_FILE})
+		set_target_properties(${SWIG_MODULE_avtranscoder-py_REAL_NAME} PROPERTIES SOVERSION ${AVTRANSCODER_VERSION_MAJOR})
+		set_target_properties(${SWIG_MODULE_avtranscoder-py_REAL_NAME} PROPERTIES VERSION ${AVTRANSCODER_VERSION})
+		swig_link_libraries(avtranscoder-py avtranscoder-shared ${PYTHON_LIBRARIES})
+
+		# Install python interface
+		file(GLOB AVTRANSCODER_PYTHON_BINDING_FILE "${CMAKE_SWIG_OUTDIR}/*.py")
+		install(
+			FILES ${AVTRANSCODER_PYTHON_BINDING_FILE}
+			RENAME "avtranscoder.py"
+			DESTINATION "lib/python2.7/site-packages/avtranscoder/"
+		)
+	else()
+		message("PYTHON not found, will not build python binding.")
+	endif()
 
 	### JAVA BINDING
-	find_package(Java REQUIRED)
-	find_package(JNI REQUIRED)
-	include(UseJava)
-	include_directories(${JAVA_INCLUDE_PATH})
-	include_directories(${JNI_INCLUDE_DIRS})
-
-	# Swig flags
-	set(CMAKE_SWIG_FLAGS -c++ -fcompact -package org.AvTranscoder)
-
-	# Create 'avtranscoder-java' shared lib
-	swig_add_module(avtranscoder-java java ${AVTRANSCODER_BINDING_FILE})
-	set_target_properties(${SWIG_MODULE_avtranscoder-java_REAL_NAME} PROPERTIES SOVERSION ${AVTRANSCODER_VERSION_MAJOR})
-	set_target_properties(${SWIG_MODULE_avtranscoder-java_REAL_NAME} PROPERTIES VERSION ${AVTRANSCODER_VERSION})
-	swig_link_libraries(avtranscoder-java avtranscoder-shared)
-
-	# Post build of java binding : compile java files (generate class files) and create jar
-	set(AVTRANSCODER_JAVA_OUTPUT_PATH "${PROJECT_BINARY_DIR}/src/AvTranscoder")
-	set(AVTRANSCODER_JAR_PATH "${PROJECT_BINARY_DIR}/src")
-	set(AVTRANSCODER_JAR_NAME "avtranscoder.jar")
-	ADD_CUSTOM_COMMAND(
-		TARGET avtranscoder-java
-		POST_BUILD
-		COMMAND ${Java_JAVAC_EXECUTABLE} ${AVTRANSCODER_JAVA_CLASS_OUTPUT_PATH} "${AVTRANSCODER_JAVA_OUTPUT_PATH}/*.java"
-		COMMAND ${Java_JAR_EXECUTABLE} cvf ${AVTRANSCODER_JAR_NAME} "${AVTRANSCODER_JAVA_OUTPUT_PATH}/*.class"
-	)
-
-	# Install jar file
-	install(FILES ${AVTRANSCODER_JAR_PATH}/${AVTRANSCODER_JAR_NAME} DESTINATION "share/java/")
+	find_package(Java)
+	find_package(JNI)
+	if(JAVA_FOUND AND JNI_FOUND)
+		include(UseJava)
+		include_directories(${JAVA_INCLUDE_PATH})
+		include_directories(${JNI_INCLUDE_DIRS})
+
+		# Swig flags
+		set(CMAKE_SWIG_FLAGS -c++ -fcompact -package org.AvTranscoder)
+
+		# Create 'avtranscoder-java' shared lib
+		swig_add_module(avtranscoder-java java ${AVTRANSCODER_BINDING_FILE})
+		set_target_properties(${SWIG_MODULE_avtranscoder-java_REAL_NAME} PROPERTIES SOVERSION ${AVTRANSCODER_VERSION_MAJOR})
+		set_target_properties(${SWIG_MODULE_avtranscoder-java_REAL_NAME} PROPERTIES VERSION ${AVTRANSCODER_VERSION})
+		swig_link_libraries(avtranscoder-java avtranscoder-shared)
+
+		# Post build of java binding : compile java files (generate class files) and create jar
+		set(AVTRANSCODER_JAVA_OUTPUT_PATH "${PROJECT_BINARY_DIR}/src/AvTranscoder")
+		set(AVTRANSCODER_JAR_PATH "${PROJECT_BINARY_DIR}/src")
+		set(AVTRANSCODER_JAR_NAME "avtranscoder.jar")
+		ADD_CUSTOM_COMMAND(
+			TARGET avtranscoder-java
+			POST_BUILD
+			COMMAND ${Java_JAVAC_EXECUTABLE} ${AVTRANSCODER_JAVA_CLASS_OUTPUT_PATH} "${AVTRANSCODER_JAVA_OUTPUT_PATH}/*.java"
+			COMMAND ${Java_JAR_EXECUTABLE} cvf ${AVTRANSCODER_JAR_NAME} "${AVTRANSCODER_JAVA_OUTPUT_PATH}/*.class"
+		)
+
+		# Install jar file
+		install(FILES ${AVTRANSCODER_JAR_PATH}/${AVTRANSCODER_JAR_NAME} DESTINATION "share/java/")
+	else()
+		message("JAVA not found, will not build java binding.")
+	endif()
 
 else(SWIG_FOUND)
 	message("SWIG not found, will not build python and java bindings.")

From c464d6eae9bbc1a8e53058b7edfc9c87e85d3dc9 Mon Sep 17 00:00:00 2001
From: Clement Champetier <cnt@mikrosimage.eu>
Date: Wed, 10 Sep 2014 19:37:03 +0200
Subject: [PATCH 31/31] CMake: check python version when install corresponding
 binding

* If CMake 2.8.8, can get python version from PYTHONLIBS_VERSION_STRING.
* Else, get python version from include path.
---
 src/CMakeLists.txt | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index e5d6ba9d..9c02a13b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -61,6 +61,13 @@ if(SWIG_FOUND)
 	if(PYTHONLIBS_FOUND)
 		include_directories(${PYTHON_INCLUDE_PATH})
 
+		if(NOT DEFINED PYTHONLIBS_VERSION_STRING) # Since CMake 2.8.8
+			# Get Python version from include path
+			string(LENGTH ${PYTHON_INCLUDE_DIRS} PYTHON_INCLUDE_DIRS_LENGTH)
+			math(EXPR PYTHON_INCLUDE_DIRS_LENGTH "${PYTHON_INCLUDE_DIRS_LENGTH} - 3" )
+			string(SUBSTRING ${PYTHON_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS_LENGTH} 3 PYTHONLIBS_VERSION_STRING)
+		endif()
+
 		# Swig flags
 		set(CMAKE_SWIG_FLAGS -c++ -fcompact)
 
@@ -75,7 +82,7 @@ if(SWIG_FOUND)
 		install(
 			FILES ${AVTRANSCODER_PYTHON_BINDING_FILE}
 			RENAME "avtranscoder.py"
-			DESTINATION "lib/python2.7/site-packages/avtranscoder/"
+			DESTINATION "lib/python${PYTHONLIBS_VERSION_STRING}/site-packages/avtranscoder/"
 		)
 	else()
 		message("PYTHON not found, will not build python binding.")