cmake_minimum_required (VERSION 3.0)
find_package(PkgConfig REQUIRED)

project(hodges)

# Search for ffmpeg libraries
pkg_check_modules(LIBAVDEVICE REQUIRED libavdevice)
pkg_check_modules(LIBAVFORMAT REQUIRED libavformat)
pkg_check_modules(LIBAVFILTER REQUIRED libavfilter)
pkg_check_modules(LIBAVCODEC REQUIRED libavcodec)
pkg_check_modules(LIBSWRESAMPLE REQUIRED libswresample)
pkg_check_modules(LIBSWSCALE REQUIRED libswscale)
pkg_check_modules(LIBAVUTIL REQUIRED libavutil)

# Decide on C/C++ standards
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -v -O3")

# Search for the correct directories
LINK_DIRECTORIES(hodges PUBLIC
    ${LIBAVDEVICE_LIBRARY_DIRS}
    ${LIBAVFORMAT_LIBRARY_DIRS}
    ${LIBAVFILTER_LIBRARY_DIRS}
    ${LIBAVCODEC_LIBRARY_DIRS}
    ${LIBSWRESAMPLE_LIBRARY_DIRS}
    ${LIBSWSCALE_LIBRARY_DIRS}
    ${LIBAVUTIL_LIBRARY_DIRS}
)


# Add the hodges library
add_library(hodges STATIC
    ${CMAKE_SOURCE_DIR}/src/libhodges.c
)
target_include_directories(hodges
    PUBLIC
    ${CMAKE_SOURCE_DIR}/include
)

TARGET_LINK_LIBRARIES(hodges PUBLIC
    ${LIBAVDEVICE_LIBRARIES}
    ${LIBAVFORMAT_LIBRARIES}
    ${LIBAVFILTER_LIBRARIES}
    ${LIBAVCODEC_LIBRARIES}
    ${LIBSWRESAMPLE_LIBRARIES}
    ${LIBSWSCALE_LIBRARIES}
    ${LIBAVUTIL_LIBRARIES}
)
TARGET_INCLUDE_DIRECTORIES(hodges PUBLIC
    ${LIBAVDEVICE_INCLUDE_DIRS}
    ${LIBAVFORMAT_INCLUDE_DIRS}
    ${LIBAVFILTER_INCLUDE_DIRS}
    ${LIBAVCODEC_INCLUDE_DIRS}
    ${LIBSWRESAMPLE_INCLUDE_DIRS}
    ${LIBSWSCALE_INCLUDE_DIRS}
    ${LIBAVUTIL_INCLUDE_DIRS}
)
TARGET_COMPILE_OPTIONS(hodges PUBLIC
    ${LIBAVDEVICE_CFLAGS_OTHER}
    ${LIBAVFORMAT_CFLAGS_OTHER}
    ${LIBAVFILTER_CFLAGS_OTHER}
    ${LIBAVCODEC_CFLAGS_OTHER}
    ${LIBSWRESAMPLE_CFLAGS_OTHER}
    ${LIBSWSCALE_CFLAGS_OTHER}
    ${LIBAVUTIL_CFLAGS_OTHER}
)
set_target_properties(hodges PROPERTIES PUBLIC_HEADER "${hodges_headers}")
set_target_properties(hodges PROPERTIES LINKER_LANGUAGE C)

install(TARGETS hodges
    ARCHIVE  DESTINATION ${CMAKE_INSTALL_PREFIX}
    LIBRARY  DESTINATION ${CMAKE_INSTALL_PREFIX}
    RUNTIME  DESTINATION ${CMAKE_INSTALL_PREFIX})  # This is for Windows
install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/ DESTINATION ${CMAKE_INSTALL_PREFIX})

# Add an example app depending on talamel
add_executable(pcmdumpc apps/pcmdumpc.c)
add_dependencies(pcmdumpc hodges)
set_source_files_properties(pcmdumpc LANGUAGE C)
set_target_properties(pcmdumpc PROPERTIES LINKER_LANGUAGE C)
target_link_libraries(pcmdumpc hodges)

add_executable(pcmdumpf apps/pcmdumpf.c)
add_dependencies(pcmdumpf hodges)
set_source_files_properties(pcmdumpf LANGUAGE C)
set_target_properties(pcmdumpf PROPERTIES LINKER_LANGUAGE C)
target_link_libraries(pcmdumpf hodges)

add_executable(pcmdumpbf apps/pcmdumpbf.c)
add_dependencies(pcmdumpbf hodges)
set_source_files_properties(pcmdumpbf LANGUAGE C)
set_target_properties(pcmdumpbf PROPERTIES LINKER_LANGUAGE C)
target_link_libraries(pcmdumpbf hodges)