1MACRO (getFfmpegVersionFromHeader description headerFile definition ffmpegVersion)
2	FILE(READ "${headerFile}" FFMPEG_H)
3	STRING(REGEX MATCH "#define[ ]+${definition}[ ]+([0-9]+)" FFMPEG_H "${FFMPEG_H}")
4	STRING(REGEX REPLACE ".*[ ]([0-9]+).*" "\\1" ${ffmpegVersion} "${FFMPEG_H}")
5ENDMACRO (getFfmpegVersionFromHeader)
6
7MACRO (getFfmpegLibNames sourceDir)
8	getFfmpegVersionFromHeader("libavcodec" "${sourceDir}/libavcodec/version.h" LIBAVCODEC_VERSION_MAJOR LIBAVCODEC_VERSION)
9	getFfmpegVersionFromHeader("libavformat" "${sourceDir}/libavformat/version.h" LIBAVFORMAT_VERSION_MAJOR LIBAVFORMAT_VERSION)
10	getFfmpegVersionFromHeader("libavutil" "${sourceDir}/libavutil/version.h" LIBAVUTIL_VERSION_MAJOR LIBAVUTIL_VERSION)
11	getFfmpegVersionFromHeader("libpostproc" "${sourceDir}/libpostproc/version.h" LIBPOSTPROC_VERSION_MAJOR LIBPOSTPROC_VERSION)
12	getFfmpegVersionFromHeader("libswscale" "${sourceDir}/libswscale/version.h" LIBSWSCALE_VERSION_MAJOR LIBSWSCALE_VERSION)
13        SET(VERBOSE 1)
14	if (VERBOSE)
15		MESSAGE(STATUS "AVFORMAT : ${LIBAVFORMAT_VERSION}, Major : ${LIBAVFORMAT_VERSION_MAJOR}")
16		MESSAGE(STATUS "AVCODEC  : ${LIBAVCODEC_VERSION}, Major : ${LIBAVCODEC_VERSION_MAJOR}")
17		MESSAGE(STATUS "AVUTIL   : ${LIBAVUTIL_VERSION}, Major : ${LIBAVUTIL_VERSION_MAJOR}")
18		MESSAGE(STATUS "POSTPRC  : ${LIBPOSTPROC_VERSION}, Major : ${LIBPOSTPROC_VERSION_MAJOR}")
19		MESSAGE(STATUS "SWSCALE  : ${LIBSWSCALE_VERSION}, Major : ${LIBSWSCALE_VERSION_MAJOR}")
20		message("")
21	endif (VERBOSE)
22
23	if (UNIX)
24		set(LIBAVCODEC_ADM ADM6)
25	endif (UNIX)
26
27	if (APPLE)
28		set(LIBAVCODEC_LIB lib${LIBAVCODEC_ADM}avcodec.${LIBAVCODEC_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX})
29		set(LIBAVFORMAT_LIB lib${LIBAVCODEC_ADM}avformat.${LIBAVFORMAT_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX})
30		set(LIBAVUTIL_LIB lib${LIBAVCODEC_ADM}avutil.${LIBAVUTIL_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX})
31		set(LIBPOSTPROC_LIB lib${LIBAVCODEC_ADM}postproc.${LIBPOSTPROC_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX})
32		set(LIBSWSCALE_LIB lib${LIBAVCODEC_ADM}swscale.${LIBSWSCALE_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX})
33	elseif (UNIX)
34		set(LIBAVCODEC_LIB lib${LIBAVCODEC_ADM}avcodec${CMAKE_SHARED_LIBRARY_SUFFIX}.${LIBAVCODEC_VERSION})
35		set(LIBAVFORMAT_LIB lib${LIBAVCODEC_ADM}avformat${CMAKE_SHARED_LIBRARY_SUFFIX}.${LIBAVFORMAT_VERSION})
36		set(LIBAVUTIL_LIB lib${LIBAVCODEC_ADM}avutil${CMAKE_SHARED_LIBRARY_SUFFIX}.${LIBAVUTIL_VERSION})
37		set(LIBPOSTPROC_LIB lib${LIBAVCODEC_ADM}postproc${CMAKE_SHARED_LIBRARY_SUFFIX}.${LIBPOSTPROC_VERSION})
38		set(LIBSWSCALE_LIB lib${LIBAVCODEC_ADM}swscale${CMAKE_SHARED_LIBRARY_SUFFIX}.${LIBSWSCALE_VERSION})
39	elseif (MINGW)
40		set(LIBAVCODEC_LIB ${LIBAVCODEC_ADM}avcodec-${LIBAVCODEC_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX})
41		set(LIBAVFORMAT_LIB ${LIBAVCODEC_ADM}avformat-${LIBAVFORMAT_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX})
42		set(LIBAVUTIL_LIB ${LIBAVCODEC_ADM}avutil-${LIBAVUTIL_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX})
43		set(LIBPOSTPROC_LIB ${LIBAVCODEC_ADM}postproc-${LIBPOSTPROC_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX})
44		set(LIBSWSCALE_LIB ${LIBAVCODEC_ADM}swscale-${LIBSWSCALE_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX})
45	elseif (MSVC)
46		set(LIBAVCODEC_LIB   avcodec.lib)
47		set(LIBAVFORMAT_LIB  avformat.lib)
48		set(LIBAVUTIL_LIB    avutil.lib)
49		set(LIBPOSTPROC_LIB  postproc.lib)
50		set(LIBSWSCALE_LIB   swscale.lib)
51	endif (APPLE)
52ENDMACRO (getFfmpegLibNames)
53
54MACRO (registerFFmpeg sourceDir binaryDir installed)
55	getFfmpegLibNames("${sourceDir}")
56
57	add_library(ADM_libswscale UNKNOWN IMPORTED)
58	add_library(ADM_libpostproc UNKNOWN IMPORTED)
59	add_library(ADM_libavutil UNKNOWN IMPORTED)
60	add_library(ADM_libavcodec UNKNOWN IMPORTED)
61	add_library(ADM_libavformat UNKNOWN IMPORTED)
62
63	if (${installed})
64		set_property(TARGET ADM_libswscale PROPERTY IMPORTED_LOCATION "${binaryDir}/${LIBSWSCALE_LIB}")
65		set_property(TARGET ADM_libpostproc PROPERTY IMPORTED_LOCATION "${binaryDir}/${LIBPOSTPROC_LIB}")
66		set_property(TARGET ADM_libavutil PROPERTY IMPORTED_LOCATION "${binaryDir}/${LIBAVUTIL_LIB}")
67		set_property(TARGET ADM_libavcodec PROPERTY IMPORTED_LOCATION "${binaryDir}/${LIBAVCODEC_LIB}")
68		set_property(TARGET ADM_libavformat PROPERTY IMPORTED_LOCATION "${binaryDir}/${LIBAVFORMAT_LIB}")
69	else (${installed})
70		set_property(TARGET ADM_libswscale PROPERTY IMPORTED_LOCATION "${binaryDir}/libswscale/${LIBSWSCALE_LIB}")
71		set_property(TARGET ADM_libpostproc PROPERTY IMPORTED_LOCATION "${binaryDir}/libpostproc/${LIBPOSTPROC_LIB}")
72		set_property(TARGET ADM_libavutil PROPERTY IMPORTED_LOCATION "${binaryDir}/libavutil/${LIBAVUTIL_LIB}")
73		set_property(TARGET ADM_libavcodec PROPERTY IMPORTED_LOCATION "${binaryDir}/libavcodec/${LIBAVCODEC_LIB}")
74		set_property(TARGET ADM_libavformat PROPERTY IMPORTED_LOCATION "${binaryDir}/libavformat/${LIBAVFORMAT_LIB}")
75
76		add_custom_target(libavcodec DEPENDS "${binaryDir}/libavcodec/${LIBAVCODEC_LIB}")
77		add_custom_target(libavformat DEPENDS "${binaryDir}/libavformat/${LIBAVFORMAT_LIB}")
78		add_custom_target(libavutil DEPENDS "${binaryDir}/libavutil/${LIBAVUTIL_LIB}")
79		add_custom_target(libpostproc DEPENDS "${binaryDir}/libpostproc/${LIBPOSTPROC_LIB}")
80		add_custom_target(libswscale DEPENDS "${binaryDir}/libswscale/${LIBSWSCALE_LIB}")
81		add_custom_target(ffmpeg DEPENDS "${binaryDir}/ffmpeg${CMAKE_EXECUTABLE_SUFFIX}")
82
83		if (${CMAKE_VERSION} VERSION_GREATER 2.8.3)
84			add_dependencies(ADM_libavcodec libavcodec)
85			add_dependencies(ADM_libavformat libavformat)
86			add_dependencies(ADM_libavutil libavutil)
87			add_dependencies(ADM_libpostproc libpostproc)
88			add_dependencies(ADM_libswscale libswscale)
89		endif (${CMAKE_VERSION} VERSION_GREATER 2.8.3)
90	endif (${installed})
91ENDMACRO (registerFFmpeg)
92
93MACRO (convertPathToUnix pathVariableName bashExecutable)
94	if (WIN32)
95		get_filename_component(directory ${${pathVariableName}} PATH)
96		get_filename_component(fileName ${${pathVariableName}} NAME)
97
98		execute_process(COMMAND ${bashExecutable} -c "echo $PWD" WORKING_DIRECTORY "${directory}"
99						OUTPUT_VARIABLE ${pathVariableName})
100
101		string(REGEX REPLACE "(\r?\n)+$" "" ${pathVariableName} "${${pathVariableName}}")
102		set(${pathVariableName} "${${pathVariableName}}/${fileName}")
103	endif (WIN32)
104ENDMACRO (convertPathToUnix)
105