X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=CMake%2FInstallPublicHeaders.cmake;h=7943ddb2eb03be2912d5f93fc1135d3b6442af21;hb=ae093bfbe9693e50a368e29048d83c2f8f8422e7;hp=56ebb0c42247df0b8b8058711189021b181d3cf1;hpb=5bb6f975322d3da0caf082b8d890132194d0a4ea;p=awesomized%2Flibmemcached diff --git a/CMake/InstallPublicHeaders.cmake b/CMake/InstallPublicHeaders.cmake index 56ebb0c4..7943ddb2 100644 --- a/CMake/InstallPublicHeaders.cmake +++ b/CMake/InstallPublicHeaders.cmake @@ -1,13 +1,49 @@ -function(install_public_headers DIRECTORY) - foreach(HEADER IN LISTS ARGN) - file(READ ${HEADER} HEADER_IN) - string(REGEX REPLACE "include *\"([^\"]+)\"" "include <\\1>" HEADER_OUT "${HEADER_IN}") - file(GENERATE - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${HEADER} - CONTENT "${HEADER_OUT}" - ) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${HEADER} +macro(install_public_headers DIRECTORY) + # validate current directory + string(FIND ${CMAKE_CURRENT_SOURCE_DIR} /include/ INCDIR REVERSE) + string(FIND ${CMAKE_CURRENT_SOURCE_DIR} /src/ SRCDIR REVERSE) + if((INCDIR GREATER_EQUAL 0) OR (SRCDIR GREATER_EQUAL 0)) + if(INCDIR GREATER_EQUAL 0) + math(EXPR POSITION "${INCDIR} + 9") + else() + math(EXPR POSITION "${SRCDIR} + 5") + endif() + string(SUBSTRING ${CMAKE_CURRENT_SOURCE_DIR} ${POSITION} -1 CHKDIR) + if(NOT "${CHKDIR}" STREQUAL "${DIRECTORY}") + message(SEND_ERROR "install_public_headers() directories do not match: '${CHKDIR}' != '${DIRECTORY}'") + set(ENV{INVALID_CONFIGURATION} 1) + endif() + endif() + + string(REGEX MATCH "^[^/-]+" LIBRARY "${DIRECTORY}") + + # validate public interface version + string(FIND "${DIRECTORY}" "-" DASH) + if(DASH GREATER 0) + string(SUBSTRING "${DIRECTORY}" 0 ${DASH} LIBRARY_BASE) + string(TOUPPER ${LIBRARY_BASE} LIBRARY_UCASE) + math(EXPR DASH "${DASH} + 1") + string(SUBSTRING "${DIRECTORY}" ${DASH} -1 VERSION) + if(NOT ${LIBRARY_UCASE}_VERSION_INC VERSION_EQUAL ${VERSION}) + message(SEND_ERROR "${LIBRARY_BASE} public include directory version ${VERSION} != " ${${LIBRARY_UCASE}_VERSION_INC}) + set(ENV{INVALID_CONFIGURATION} 1) + endif() + endif() + + # change local includes to system includes + foreach(HEADER IN ITEMS ${ARGN}) + if(HEADER MATCHES "^@") + string(SUBSTRING ${HEADER} 1 -1 HEADER) + configure_file(${HEADER}.in ${HEADER}) + set(HEADER "${CMAKE_CURRENT_BINARY_DIR}/${HEADER}") + else() + set(HEADER "${CMAKE_CURRENT_SOURCE_DIR}/${HEADER}") + endif() + install(FILES ${HEADER} + COMPONENT dev DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${DIRECTORY} ) + list(APPEND ${LIBRARY}_includes ${HEADER}) endforeach() -endfunction() + set(${LIBRARY}_includes "${${LIBRARY}_includes}" PARENT_SCOPE) +endmacro()