# Copyright (c) 2023-present The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or https://opensource.org/license/mit/.

add_library(univalue STATIC EXCLUDE_FROM_ALL
  lib/univalue.cpp
  lib/univalue_get.cpp
  lib/univalue_read.cpp
  lib/univalue_write.cpp
)
target_include_directories(univalue
  PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
target_link_libraries(univalue PRIVATE core_interface)

if(BUILD_TESTS)
  include(GenerateHeaders)
  generate_header_from_json(test/fail1.json)
  generate_header_from_json(test/fail10.json)
  generate_header_from_json(test/fail11.json)
  generate_header_from_json(test/fail12.json)
  generate_header_from_json(test/fail13.json)
  generate_header_from_json(test/fail14.json)
  generate_header_from_json(test/fail15.json)
  generate_header_from_json(test/fail16.json)
  generate_header_from_json(test/fail17.json)
  generate_header_from_json(test/fail18.json)
  generate_header_from_json(test/fail19.json)
  generate_header_from_json(test/fail2.json)
  generate_header_from_json(test/fail20.json)
  generate_header_from_json(test/fail21.json)
  generate_header_from_json(test/fail22.json)
  generate_header_from_json(test/fail23.json)
  generate_header_from_json(test/fail24.json)
  generate_header_from_json(test/fail25.json)
  generate_header_from_json(test/fail26.json)
  generate_header_from_json(test/fail27.json)
  generate_header_from_json(test/fail28.json)
  generate_header_from_json(test/fail29.json)
  generate_header_from_json(test/fail3.json)
  generate_header_from_json(test/fail30.json)
  generate_header_from_json(test/fail31.json)
  generate_header_from_json(test/fail32.json)
  generate_header_from_json(test/fail33.json)
  generate_header_from_json(test/fail34.json)
  generate_header_from_json(test/fail35.json)
  generate_header_from_json(test/fail36.json)
  generate_header_from_json(test/fail37.json)
  generate_header_from_json(test/fail38.json)
  generate_header_from_json(test/fail39.json)
  generate_header_from_json(test/fail4.json)
  generate_header_from_json(test/fail40.json)
  generate_header_from_json(test/fail41.json)
  generate_header_from_json(test/fail42.json)
  generate_header_from_json(test/fail44.json)
  generate_header_from_json(test/fail45.json)
  generate_header_from_json(test/fail5.json)
  generate_header_from_json(test/fail6.json)
  generate_header_from_json(test/fail7.json)
  generate_header_from_json(test/fail8.json)
  generate_header_from_json(test/fail9.json)
  generate_header_from_json(test/pass1.json)
  generate_header_from_json(test/pass2.json)
  generate_header_from_json(test/pass3.json)
  generate_header_from_json(test/pass4.json)
  generate_header_from_json(test/round1.json)
  generate_header_from_json(test/round2.json)
  generate_header_from_json(test/round3.json)
  generate_header_from_json(test/round4.json)
  generate_header_from_json(test/round5.json)
  generate_header_from_json(test/round6.json)
  generate_header_from_json(test/round7.json)
  add_executable(unitester
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail1.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail10.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail11.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail12.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail13.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail14.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail15.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail16.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail17.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail18.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail19.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail2.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail20.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail21.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail22.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail23.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail24.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail25.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail26.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail27.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail28.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail29.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail3.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail30.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail31.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail32.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail33.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail34.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail35.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail36.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail37.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail38.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail39.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail4.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail40.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail41.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail42.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail44.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail45.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail5.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail6.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail7.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail8.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/fail9.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/pass1.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/pass2.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/pass3.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/pass4.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/round1.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/round2.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/round3.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/round4.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/round5.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/round6.json.h
    ${CMAKE_CURRENT_BINARY_DIR}/test/round7.json.h
    test/unitester.cpp
  )
  target_link_libraries(unitester
    PRIVATE
      core_interface
      univalue
  )
  add_test(NAME univalue_test
    COMMAND unitester
  )

  add_executable(object test/object.cpp)
  target_link_libraries(object
    PRIVATE
      core_interface
      univalue
  )
  add_test(NAME univalue_object_test
    COMMAND object
  )
endif()
