# -*- mode: cmake; -*-
add_library(nixstore SHARED)
add_library(nixstoremock SHARED)
set_property(TARGET nixstore PROPERTY CXX_STANDARD 17)
set_property(TARGET nixstoremock PROPERTY CXX_STANDARD 17)
include_directories(${PROJECT_BINARY_DIR}) # for config.h
target_include_directories(nixstore PUBLIC "${nix_SOURCE_DIR}/src")
target_include_directories(nixstoremock PUBLIC "${nix_SOURCE_DIR}/src")

# The database schema is stored in schema.sql, but needs to be
# available during the build as static data.
#
# These commands create an includeable source-file out of it.
file(READ "schema.sql" NIX_SCHEMA)

string(CONFIGURE
  "#pragma once
   namespace nix {
   constexpr char kNixSqlSchema[] = R\"(${NIX_SCHEMA})\";
   }"
  NIX_SCHEMA_GEN)

file(WRITE ${PROJECT_BINARY_DIR}/generated/schema.sql.hh "${NIX_SCHEMA_GEN}")

set(HEADER_FILES
    binary-cache-store.hh
    builtins.hh
    crypto.hh
    derivations.hh
    download.hh
    fs-accessor.hh
    globals.hh
    local-store.hh
    machines.hh
    nar-accessor.hh
    nar-info-disk-cache.hh
    nar-info.hh
    parsed-derivations.hh
    pathlocks.hh
    profiles.hh
    references.hh
    remote-fs-accessor.hh
    remote-store.hh
    rpc-store.hh
    s3-binary-cache-store.hh
    s3.hh
    serve-protocol.hh
    sqlite.hh
    ssh.hh
    store-api.hh
    worker-protocol.hh
)

target_sources(nixstore
  PUBLIC
    ${HEADER_FILES}

  PRIVATE
    ${PROJECT_BINARY_DIR}/generated/schema.sql.hh
    binary-cache-store.cc
    build.cc
    crypto.cc
    derivations.cc
    download.cc
    export-import.cc
    gc.cc
    globals.cc
    http-binary-cache-store.cc
    legacy-ssh-store.cc
    local-binary-cache-store.cc
    local-fs-store.cc
    local-store.cc
    machines.cc
    misc.cc
    nar-accessor.cc
    nar-info.cc
    nar-info-disk-cache.cc
    optimise-store.cc
    parsed-derivations.cc
    pathlocks.cc
    profiles.cc
    references.cc
    remote-fs-accessor.cc
    remote-store.cc
    rpc-store.cc
    s3-binary-cache-store.cc
    sqlite.cc
    ssh.cc
    ssh-store.cc
    store-api.cc
    builtins/buildenv.cc
    builtins/fetchurl.cc
)

target_link_libraries(nixstore
  nixproto
  nixutil

  CURL::libcurl
  SQLite::SQLite3
  absl::strings
  glog
  seccomp
  sodium
)

target_sources(nixstoremock
  PUBLIC
    mock-binary-cache-store.hh

  PRIVATE
    mock-binary-cache-store.cc
)

target_link_libraries(nixstoremock
  nixstore

  absl::btree
  absl::flat_hash_map
  glog
)

configure_file("nix-store.pc.in" "${PROJECT_BINARY_DIR}/nix-store.pc" @ONLY)
INSTALL(FILES "${PROJECT_BINARY_DIR}/nix-store.pc" DESTINATION "${PKGCONFIG_INSTALL_DIR}")

INSTALL(FILES ${HEADER_FILES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/nix/libstore)
INSTALL(TARGETS nixstore nixstoremock DESTINATION ${CMAKE_INSTALL_LIBDIR})
