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.")