set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})

add_sources_from_current_dir(utils
  # xtruss's own addition
  utils/gettime_us.c
  utils/block_signal.c
  utils/cloexec.c
  utils/dputs.c
  utils/filename.c
  utils/fontspec.c
  utils/getticks.c
  utils/nonblock.c
  utils/pollwrap.c
  utils/signal.c
  # We want the ISO C implementation of ltime(), because we don't have
  # a local better alternative
  ../utils/ltime.c)
add_sources_from_current_dir(eventloop
  cliloop.c uxsel.c)
add_sources_from_current_dir(console
  console.c)
add_sources_from_current_dir(network
  network.c peerinfo.c x11.c)

add_executable(xtruss
  uxxtruss.c
  ${CMAKE_SOURCE_DIR}/xtruss.c
  ${CMAKE_SOURCE_DIR}/xtruss-trace.c
  ${CMAKE_SOURCE_DIR}/xtruss-proxy.c
  ${CMAKE_SOURCE_DIR}/xtruss-record.c
  ${CMAKE_SOURCE_DIR}/norand.c)
if(XTRUSS_USING_XTRGEN)
  target_include_directories(xtruss PRIVATE ${CMAKE_BINARY_DIR})
  target_sources(xtruss PRIVATE ${CMAKE_BINARY_DIR}/xtruss-generated.c)
  set_property(
    SOURCE ${CMAKE_BINARY_DIR}/xtruss-generated.c
    PROPERTY HEADER_FILE_ONLY ON)
  set_property(
    SOURCE ${CMAKE_BINARY_DIR}/xtruss-generated.c
    PROPERTY GENERATED ON)
  add_dependencies(xtruss run_xtrgen)
endif()
target_link_libraries(xtruss eventloop console network utils crypto)
installed_program(xtruss)
