Unverified Commit f253e966 authored by NicolasIRAGNE's avatar NicolasIRAGNE Committed by GitHub
Browse files

Make the imported target installable (#7)



Import from the original nlohmann repository the parts about installing the library.

Co-authored-by: default avatarNicolas IRAGNE <nicolas.iragne@alyce.fr>
Co-authored-by: default avatarArthurSonzogni <sonzogniarthur@gmail.com>
parent b48095ee
Loading
Loading
Loading
Loading
+64 −1
Original line number Diff line number Diff line
@@ -4,7 +4,9 @@ project(nlohmann_json LANGUAGES CXX)
add_library(nlohmann_json INTERFACE)
add_library(nlohmann_json::nlohmann_json ALIAS nlohmann_json)
target_include_directories(nlohmann_json
  INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include
  INTERFACE
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include/nlohmann>
)

if (${CMAKE_VERSION} VERSION_LESS "3.8.0")
@@ -12,3 +14,64 @@ if (${CMAKE_VERSION} VERSION_LESS "3.8.0")
else()
  target_compile_features(nlohmann_json INTERFACE cxx_std_11)
endif()

include(GNUInstallDirs)

set(NLOHMANN_JSON_TARGET_NAME               ${PROJECT_NAME})
set(NLOHMANN_JSON_CONFIG_INSTALL_DIR        "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" CACHE INTERNAL "")
set(NLOHMANN_JSON_INCLUDE_INSTALL_DIR       "${CMAKE_INSTALL_INCLUDEDIR}")
set(NLOHMANN_JSON_TARGETS_EXPORT_NAME       "${PROJECT_NAME}Targets")
set(NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE     "cmake/config.cmake.in")
set(NLOHMANN_JSON_CMAKE_CONFIG_DIR          "${CMAKE_CURRENT_BINARY_DIR}")
set(NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
set(NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Config.cmake")
set(NLOHMANN_JSON_CMAKE_PROJECT_TARGETS_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Targets.cmake")

##
## INSTALL
## install header files, generate and install cmake config files for find_package()
##
include(CMakePackageConfigHelpers)

# use a custom package version config file instead of
# write_basic_package_version_file to ensure that it's architecture-independent
# https://github.com/nlohmann/json/issues/1697
configure_file(
  "cmake/nlohmann_jsonConfigVersion.cmake.in"
  ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE}
  @ONLY
)

configure_file(
  ${NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE}
  ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE}
  @ONLY
)

install(
  DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/nlohmann
  DESTINATION ${NLOHMANN_JSON_INCLUDE_INSTALL_DIR}
)

install(
  FILES ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE} ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE}
  DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR}
)

export(
  TARGETS ${NLOHMANN_JSON_TARGET_NAME}
  NAMESPACE ${PROJECT_NAME}::
  FILE ${NLOHMANN_JSON_CMAKE_PROJECT_TARGETS_FILE}
)

install(
  TARGETS ${NLOHMANN_JSON_TARGET_NAME}
  EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME}
  INCLUDES DESTINATION ${NLOHMANN_JSON_INCLUDE_INSTALL_DIR}
)

install(
  EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME}
  NAMESPACE ${PROJECT_NAME}::
  DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR}
)

cmake/config.cmake.in

0 → 100644
+15 −0
Original line number Diff line number Diff line
include(FindPackageHandleStandardArgs)
set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE})
find_package_handle_standard_args(@PROJECT_NAME@ CONFIG_MODE)

if(NOT TARGET @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@)
    include("${CMAKE_CURRENT_LIST_DIR}/@NLOHMANN_JSON_TARGETS_EXPORT_NAME@.cmake")
    if((NOT TARGET @NLOHMANN_JSON_TARGET_NAME@) AND
       (NOT @PROJECT_NAME@_FIND_VERSION OR
        @PROJECT_NAME@_FIND_VERSION VERSION_LESS 3.2.0))
        add_library(@NLOHMANN_JSON_TARGET_NAME@ INTERFACE IMPORTED)
        set_target_properties(@NLOHMANN_JSON_TARGET_NAME@ PROPERTIES
            INTERFACE_LINK_LIBRARIES @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@
        )
    endif()
endif()
 No newline at end of file
+20 −0
Original line number Diff line number Diff line
# This is essentially cmake's BasicConfigVersion-SameMajorVersion.cmake.in but
# without the 32/64-bit check.  Since json is a header-only library, it doesn't
# matter if it was built on a different platform than what it is used on (see
# https://github.com/nlohmann/json/issues/1697).
set(PACKAGE_VERSION "@PROJECT_VERSION@")

if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
  set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()

  if(PACKAGE_FIND_VERSION_MAJOR STREQUAL "@PROJECT_VERSION_MAJOR@")
    set(PACKAGE_VERSION_COMPATIBLE TRUE)
  else()
    set(PACKAGE_VERSION_COMPATIBLE FALSE)
  endif()

  if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
      set(PACKAGE_VERSION_EXACT TRUE)
  endif()
endif()
 No newline at end of file