cpack
[m6w6/libmemcached] / CMake / InstallPublicHeaders.cmake
1 function(install_public_headers DIRECTORY)
2 # validate current directory
3 string(FIND ${CMAKE_CURRENT_SOURCE_DIR} /include/ INCDIR REVERSE)
4 string(FIND ${CMAKE_CURRENT_SOURCE_DIR} /src/ SRCDIR REVERSE)
5 if((INCDIR GREATER_EQUAL 0) OR (SRCDIR GREATER_EQUAL 0))
6 if(INCDIR GREATER_EQUAL 0)
7 math(EXPR POSITION "${INCDIR} + 9")
8 else()
9 math(EXPR POSITION "${SRCDIR} + 5")
10 endif()
11 string(SUBSTRING ${CMAKE_CURRENT_SOURCE_DIR} ${POSITION} -1 CHKDIR)
12 if(NOT CHKDIR STREQUAL DIRECTORY)
13 message(SEND_ERROR "install_public_headers() directories do not match: ${CHKDIR} != ${DIRECTORY}")
14 set(ENV{INVALID_CONFIGURATION} 1)
15 endif()
16 endif()
17
18 # validate public interface version
19 get_filename_component(TOP ${DIRECTORY} NAME)
20 string(FIND ${TOP} "-" DASH)
21 if(DASH GREATER 0)
22 string(SUBSTRING ${TOP} 0 ${DASH} LIBRARY)
23 string(TOUPPER ${LIBRARY} LIBRARY_UCASE)
24 math(EXPR DASH "${DASH} + 1")
25 string(SUBSTRING ${TOP} ${DASH} -1 VERSION)
26 if(NOT ${LIBRARY_UCASE}_VERSION_INC VERSION_EQUAL ${VERSION})
27 message(SEND_ERROR "${LIBRARY} public include directory version ${VERSION} != " ${${LIBRARY_UCASE}_VERSION_INC})
28 set(ENV{INVALID_CONFIGURATION} 1)
29 endif()
30 endif()
31
32 # change local includes to system includes
33 foreach(HEADER IN LISTS ARGN)
34 if(HEADER MATCHES "^@")
35 string(SUBSTRING ${HEADER} 1 -1 HEADER)
36 configure_file(${HEADER}.in ${HEADER})
37 set(HEADER "${CMAKE_CURRENT_BINARY_DIR}/${HEADER}")
38 endif()
39 install(FILES ${HEADER}
40 COMPONENT dev
41 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${DIRECTORY}
42 )
43 endforeach()
44 endfunction()