cmake_minimum_required(VERSION 3.16)
project(transui VERSION 0.1.1 LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED IMPORTED_TARGET gtk+-3.0)
pkg_check_modules(CURL REQUIRED IMPORTED_TARGET libcurl)
pkg_check_modules(GSTREAMER REQUIRED IMPORTED_TARGET gstreamer-1.0)
pkg_check_modules(SECRET REQUIRED IMPORTED_TARGET libsecret-1)
pkg_check_modules(JSON_GLIB REQUIRED IMPORTED_TARGET json-glib-1.0)

add_executable(transui src/main.cpp src/transcript_cleaner.cpp)
target_link_libraries(transui PRIVATE
  PkgConfig::GTK3
  PkgConfig::CURL
  PkgConfig::GSTREAMER
  PkgConfig::SECRET
  PkgConfig::JSON_GLIB
)

install(TARGETS transui RUNTIME DESTINATION bin)
install(FILES data/io.github.transui.Transui.desktop DESTINATION share/applications)

include(CTest)
if(BUILD_TESTING)
  add_executable(transcript_cleaner_test
    tests/transcript_cleaner_test.cpp
    src/transcript_cleaner.cpp
  )
  target_include_directories(transcript_cleaner_test PRIVATE src)
  add_test(NAME transcript_cleaner COMMAND transcript_cleaner_test)

  add_executable(mp3_encoder_test
    tests/mp3_encoder_test.c
    third_party/transui_mp3/transui_mp3.c
    third_party/shine/src/lib/bitstream.c
    third_party/shine/src/lib/huffman.c
    third_party/shine/src/lib/l3bitstream.c
    third_party/shine/src/lib/l3loop.c
    third_party/shine/src/lib/l3mdct.c
    third_party/shine/src/lib/l3subband.c
    third_party/shine/src/lib/layer3.c
    third_party/shine/src/lib/reservoir.c
    third_party/shine/src/lib/tables.c
  )
  target_include_directories(mp3_encoder_test PRIVATE
    third_party/transui_mp3
    third_party/shine/src/lib
  )
  target_link_libraries(mp3_encoder_test PRIVATE m)
  add_test(NAME mp3_encoder COMMAND mp3_encoder_test)
endif()

set(CPACK_GENERATOR "DEB")
set(CPACK_PACKAGE_NAME "transui")
set(CPACK_PACKAGE_CONTACT "Transui contributors")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Transui contributors")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set(CPACK_DEBIAN_PACKAGE_DEPENDS "gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, wtype | xdotool")
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
include(CPack)
