Blob Blame History Raw
# COPYRIGHT (c) 2016 Obsidian Research Corporation.
# Licensed under BSD (MIT variant) or GPLv2. See COPYING.

# Execute a header fixup based on NOT_NEEDED for HEADER

# The buildlib includes alternate header file shims for several scenarios, if
# the build system detects a feature is present then it should call RDMA_DoFixup
# with the test as true. If false then the shim header will be installed.

# Typically the shim header will replace a missing header with stubs, or it
# will augment an existing header with include_next.
function(RDMA_DoFixup not_needed header)
  cmake_parse_arguments(ARGS "NO_SHIM" "" "" ${ARGN})
  string(REPLACE / - header-bl ${header})

  if (NOT EXISTS "${BUILDLIB}/fixup-include/${header-bl}")
    # NO_SHIM lets cmake succeed if the header exists in the system but no
    # shim is provided, but this will always fail if the shim is needed but
    # does not exist.
    if (NOT ARGS_NO_SHIM OR NOT "${not_needed}")
      message(FATAL_ERROR "Fixup header ${BUILDLIB}/fixup-include/${header-bl} is not present")
    endif()
  endif()

  set(DEST "${BUILD_INCLUDE}/${header}")
  if (NOT "${not_needed}")
    if(CMAKE_VERSION VERSION_LESS "2.8.12")
      get_filename_component(DIR ${DEST} PATH)
    else()
      get_filename_component(DIR ${DEST} DIRECTORY)
    endif()
    file(MAKE_DIRECTORY "${DIR}")

    rdma_create_symlink("${BUILDLIB}/fixup-include/${header-bl}" "${DEST}")
  else()
    file(REMOVE ${DEST})
  endif()
endfunction()