# -*- mode: cmake; -*-

# The 'nix' binary is composed of various sources below this
# directory. In the previous build system, they were all built from
# this location and this setup mimics that (with the exception of the
# various Nix libraries).

add_subdirectory(proto)
add_subdirectory(libutil)
add_subdirectory(libstore)
add_subdirectory(libmain)
add_subdirectory(libexpr)
add_subdirectory(nix-daemon)

if (PACKAGE_TESTS)
  add_subdirectory(tests)
endif()

add_executable(nix)
set_property(TARGET nix PROPERTY CXX_STANDARD 17)
include_directories(${PROJECT_BINARY_DIR})
target_include_directories(nix PUBLIC "${nix_SOURCE_DIR}/src")

target_sources(nix
  PRIVATE
    nix/command.hh
    nix/legacy.hh
    nix-env/user-env.hh
    nix-store/dotgraph.hh
    nix-store/graphml.hh

    nix/add-to-store.cc
    nix/build.cc
    nix/cat.cc
    nix/command.cc
    nix/copy.cc
    nix/doctor.cc
    nix/dump-path.cc
    nix/edit.cc
    nix/eval.cc
    nix/hash.cc
    nix/installables.cc
    nix/legacy.cc
    nix/log.cc
    nix/ls.cc
    nix/main.cc
    nix/optimise-store.cc
    nix/path-info.cc
    nix/ping-store.cc
    nix/repl.cc
    nix/run.cc
    nix/search.cc
    nix/show-config.cc
    nix/show-derivation.cc
    nix/sigs.cc
    nix/upgrade-nix.cc
    nix/verify.cc
    nix/why-depends.cc

    build-remote/build-remote.cc
    nix-build/nix-build.cc
    nix-channel/nix-channel.cc
    nix-collect-garbage/nix-collect-garbage.cc
    nix-copy-closure/nix-copy-closure.cc
    nix-env/nix-env.cc
    nix-env/user-env.cc
    nix-instantiate/nix-instantiate.cc
    nix-prefetch-url/nix-prefetch-url.cc
    nix-store/dotgraph.cc
    nix-store/graphml.cc
    nix-store/nix-store.cc
)

target_link_libraries(nix
  nixexpr
  nixmain
  nixstore
  nixutil

  absl::strings
  editline
  glog
)

INSTALL(TARGETS nix DESTINATION bin)
