Skip to content

Commit ead804a

Browse files
committed
cmake: add public headers to project source files
1 parent b74783f commit ead804a

File tree

9 files changed

+71
-36
lines changed

9 files changed

+71
-36
lines changed

CMake/EnableDtrace.cmake

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
function(enable_dtrace_for TARGET PROBES_D PROBES_H)
22
if(HAVE_DTRACE AND NOT CMAKE_CROSSCOMPILING)
3-
target_sources(${TARGET} PRIVATE ${PROBES_H})
43
add_custom_command(
54
OUTPUT
6-
${PROBES_H}
5+
${CMAKE_CURRENT_BINARY_DIR}/${PROBES_H}
76
MAIN_DEPENDENCY
87
${PROBES_D}
98
COMMAND
109
${DTRACE_EXECUTABLE}
1110
ARGS
1211
-x nolibs -h
1312
-s ${CMAKE_CURRENT_SOURCE_DIR}/${PROBES_D}
14-
-o ${PROBES_H}
13+
-o ${CMAKE_CURRENT_BINARY_DIR}/${PROBES_H}
1514
)
15+
target_sources(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${PROBES_H})
1616
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
1717
add_custom_command(
1818
OUTPUT
19-
${TARGET}_probes.o
19+
${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_probes.o
2020
MAIN_DEPENDENCY
21-
${PROBES_H}
21+
${CMAKE_CURRENT_BINARY_DIR}/${PROBES_H}
2222
COMMAND
2323
${DTRACE_EXECUTABLE}
2424
ARGS
2525
-x nolibs -G
2626
-s ${CMAKE_CURRENT_SOURCE_DIR}/${PROBES_D}
27-
-o ${TARGET}_probes.o
27+
-o ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_probes.o
2828
)
2929
target_sources(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_probes.o)
3030
set_source_files_properties(${TARGET}_probes.o PROPERTIES
@@ -43,7 +43,7 @@ function(enable_dtrace_for TARGET PROBES_D PROBES_H)
4343
TARGET ${TARGET}
4444
PRE_LINK
4545
DEPENDS
46-
${PROBES_H}
46+
${CMAKE_CURRENT_BINARY_DIR}/${PROBES_H}
4747
COMMAND
4848
rm -f ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET}.dir/${PROBES_C}.o
4949
COMMAND

CMake/InstallPublicHeaders.cmake

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function(install_public_headers DIRECTORY)
1+
macro(install_public_headers DIRECTORY)
22
# validate current directory
33
string(FIND ${CMAKE_CURRENT_SOURCE_DIR} /include/ INCDIR REVERSE)
44
string(FIND ${CMAKE_CURRENT_SOURCE_DIR} /src/ SRCDIR REVERSE)
@@ -9,36 +9,41 @@ function(install_public_headers DIRECTORY)
99
math(EXPR POSITION "${SRCDIR} + 5")
1010
endif()
1111
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}")
12+
if(NOT "${CHKDIR}" STREQUAL "${DIRECTORY}")
13+
message(SEND_ERROR "install_public_headers() directories do not match: '${CHKDIR}' != '${DIRECTORY}'")
1414
set(ENV{INVALID_CONFIGURATION} 1)
1515
endif()
1616
endif()
1717

18+
string(REGEX MATCH "^[^/-]+" LIBRARY "${DIRECTORY}")
19+
1820
# validate public interface version
19-
get_filename_component(TOP ${DIRECTORY} NAME)
20-
string(FIND ${TOP} "-" DASH)
21+
string(FIND "${DIRECTORY}" "-" DASH)
2122
if(DASH GREATER 0)
22-
string(SUBSTRING ${TOP} 0 ${DASH} LIBRARY)
23-
string(TOUPPER ${LIBRARY} LIBRARY_UCASE)
23+
string(SUBSTRING "${DIRECTORY}" 0 ${DASH} LIBRARY_BASE)
24+
string(TOUPPER ${LIBRARY_BASE} LIBRARY_UCASE)
2425
math(EXPR DASH "${DASH} + 1")
25-
string(SUBSTRING ${TOP} ${DASH} -1 VERSION)
26+
string(SUBSTRING "${DIRECTORY}" ${DASH} -1 VERSION)
2627
if(NOT ${LIBRARY_UCASE}_VERSION_INC VERSION_EQUAL ${VERSION})
27-
message(SEND_ERROR "${LIBRARY} public include directory version ${VERSION} != " ${${LIBRARY_UCASE}_VERSION_INC})
28+
message(SEND_ERROR "${LIBRARY_BASE} public include directory version ${VERSION} != " ${${LIBRARY_UCASE}_VERSION_INC})
2829
set(ENV{INVALID_CONFIGURATION} 1)
2930
endif()
3031
endif()
3132

3233
# change local includes to system includes
33-
foreach(HEADER IN LISTS ARGN)
34+
foreach(HEADER IN ITEMS ${ARGN})
3435
if(HEADER MATCHES "^@")
3536
string(SUBSTRING ${HEADER} 1 -1 HEADER)
3637
configure_file(${HEADER}.in ${HEADER})
3738
set(HEADER "${CMAKE_CURRENT_BINARY_DIR}/${HEADER}")
39+
else()
40+
set(HEADER "${CMAKE_CURRENT_SOURCE_DIR}/${HEADER}")
3841
endif()
3942
install(FILES ${HEADER}
4043
COMPONENT dev
4144
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${DIRECTORY}
4245
)
46+
list(APPEND ${LIBRARY}_includes ${HEADER})
4347
endforeach()
44-
endfunction()
48+
set(${LIBRARY}_includes "${${LIBRARY}_includes}" PARENT_SCOPE)
49+
endmacro()

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ if(NOT BUILD_DOCSONLY)
4343
memtouch
4444
)
4545

46+
add_subdirectory(include)
4647
add_subdirectory(src)
4748
add_subdirectory(contrib)
48-
add_subdirectory(include)
4949
add_subdirectory(support)
5050

5151
# tests need c++17 support

include/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11

22
add_subdirectory(libhashkit-1.0)
3+
set(libhashkit_includes "${libhashkit_includes}" PARENT_SCOPE)
34
add_subdirectory(libmemcached-1.0)
5+
set(libmemcached_includes "${libmemcached_includes}" PARENT_SCOPE)
46
add_subdirectory(libmemcachedutil-1.0)
7+
set(libmemcachedutil_includes "${libmemcachedutil_includes}" PARENT_SCOPE)
58
add_subdirectory(libmemcachedprotocol-0.0)
9+
set(libmemcachedprotocol_includes "${libmemcachedprotocol_includes}" PARENT_SCOPE)

include/libhashkit-1.0/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11

2-
install_public_headers(libhashkit-1.0
2+
install_public_headers(
3+
libhashkit-1.0
4+
35
@configure.h
46
algorithm.h
57
basic_string.h

src/libhashkit/CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
add_library(libhashkit SHARED
1+
set(libhashkit_sources
22
aes.cc
33
algorithm.cc
44
common.h
@@ -22,6 +22,7 @@ add_library(libhashkit SHARED
2222
strerror.cc
2323
string.cc
2424
)
25+
add_library(libhashkit SHARED)
2526
add_library(hashkit ALIAS libhashkit)
2627
set_target_properties(libhashkit PROPERTIES
2728
CXX_STANDARD ${CXX_STANDARD}
@@ -56,3 +57,7 @@ install_public_headers(
5657

5758
hashkit.h
5859
)
60+
61+
target_sources(libhashkit PRIVATE
62+
${libhashkit_sources}
63+
${libhashkit_includes})

src/libmemcached/CMakeLists.txt

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,32 @@
1-
21
find_package(FLEX)
32
find_package(BISON 2.3)
43

54
if("${BISON_VERSION}" VERSION_GREATER_EQUAL 3.0)
6-
set(BISON_WARNINGS -Wno-deprecated)
5+
set(BISON_WARNINGS -Wno-deprecated)
76
endif()
87

98
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/csl)
109
bison_target(CSL_PARSER csl/parser.yy ${CMAKE_CURRENT_BINARY_DIR}/csl/parser.cc
1110
DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/csl/parser.h
1211
COMPILE_FLAGS ${BISON_WARNINGS}
1312
)
14-
set_source_files_properties(${BISON_CSL_PARSER_OUTPUTS} PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
13+
set_source_files_properties(${BISON_CSL_PARSER_OUTPUTS} PROPERTIES
14+
SKIP_UNITY_BUILD_INCLUSION ON)
1515
if(NOT HAVE_UNISTD_H)
16-
set(FLEX_FLAGS --nounistd)
16+
set(FLEX_FLAGS --nounistd)
1717
endif()
1818
flex_target(CSL_SCANNER csl/scanner.l ${CMAKE_CURRENT_BINARY_DIR}/csl/scanner.cc
1919
DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/csl/scanner.h
2020
COMPILE_FLAGS "${FLEX_FLAGS}"
2121
)
22-
set_source_files_properties(${FLEX_CSL_SCANNER_OUTPUTS} PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
22+
set_source_files_properties(${FLEX_CSL_SCANNER_OUTPUTS} PROPERTIES
23+
SKIP_UNITY_BUILD_INCLUSION ON)
2324
add_flex_bison_dependency(CSL_SCANNER CSL_PARSER)
2425

25-
set(LIBMEMCACHED_SOURCES
26+
set(libmemcached_sources
2627
csl/context.cc
27-
${BISON_CSL_PARSER_OUTPUTS}
2828
${FLEX_CSL_SCANNER_OUTPUTS}
29+
${BISON_CSL_PARSER_OUTPUTS}
2930
allocators.cc
3031
analyze.cc
3132
array.cc
@@ -84,8 +85,7 @@ if(W_NO_DEPRECATED_REGISTER)
8485
)
8586
endif()
8687

87-
add_library(libmemcached SHARED
88-
${LIBMEMCACHED_SOURCES})
88+
add_library(libmemcached SHARED)
8989
add_library(memcached ALIAS libmemcached)
9090
set_target_properties(libmemcached PROPERTIES
9191
CXX_STANDARD ${CXX_STANDARD}
@@ -139,8 +139,13 @@ install_public_headers(
139139
util.h
140140
)
141141

142-
add_library(libmemcachedinternal STATIC
143-
${LIBMEMCACHED_SOURCES})
142+
target_sources(libmemcached PRIVATE
143+
${libmemcached_sources}
144+
${libmemcached_includes})
145+
146+
# TODO: do we really need this?
147+
148+
add_library(libmemcachedinternal STATIC)
144149
add_library(memcachedinternal ALIAS libmemcachedinternal)
145150
set_target_properties(libmemcachedinternal PROPERTIES CXX_STANDARD ${CXX_STANDARD} LIBRARY_OUTPUT_NAME memcachedinternal)
146151
target_compile_definitions(libmemcachedinternal PRIVATE -DBUILDING_LIBMEMCACHEDINTERNAL)
@@ -169,3 +174,7 @@ enable_dtrace_for(libmemcachedinternal libmemcached_probes.d dtrace_probes.h)
169174
# let libmemcached depend on libmemcachedinternal to ensure that they do not
170175
# compete for the same generated dependencies
171176
add_dependencies(libmemcached libmemcachedinternal)
177+
178+
target_sources(libmemcachedinternal PRIVATE
179+
${libmemcached_sources}
180+
${libmemcached_includes})

src/libmemcachedprotocol/CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
check_include(umem.h)
22

3-
add_library(libmemcachedprotocol SHARED
3+
set(libmemcachedprotocol_sources
44
ascii_handler.c
55
binary_handler.c
66
cache.c
@@ -9,6 +9,7 @@ add_library(libmemcachedprotocol SHARED
99
pedantic.c
1010
../libmemcached/byteorder.cc
1111
)
12+
add_library(libmemcachedprotocol SHARED)
1213
add_library(memcachedprotocol ALIAS libmemcachedprotocol)
1314
set_target_properties(libmemcachedprotocol PROPERTIES
1415
CXX_STANDARD ${CXX_STANDARD}
@@ -46,3 +47,8 @@ export(EXPORT libmemcachedprotocol-targets NAMESPACE libmemcached::)
4647
install(EXPORT libmemcachedprotocol-targets NAMESPACE libmemcached::
4748
COMPONENT dev
4849
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
50+
51+
target_sources(libmemcachedprotocol PRIVATE
52+
${libmemcachedprotocol_sources}
53+
${libmemcachedprotocol_includes}
54+
)

src/libmemcachedutil/CMakeLists.txt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
2-
add_library(libmemcachedutil SHARED
1+
set(libmemcachedutil_sources
32
../libmemcached/backtrace.cc
43
common.h
54
flush.cc
65
pid.cc
76
ping.cc
87
version.cc
98
)
9+
add_library(libmemcachedutil SHARED)
10+
add_library(memcachedutil ALIAS libmemcachedutil)
1011
if(CMAKE_USE_PTHREADS_INIT)
1112
target_sources(libmemcachedutil PRIVATE pool.cc)
1213
endif()
13-
add_library(memcachedutil ALIAS libmemcachedutil)
1414
set_target_properties(libmemcachedutil PROPERTIES
1515
CXX_STANDARD ${CXX_STANDARD}
1616
LIBRARY_OUTPUT_NAME memcachedutil
@@ -49,3 +49,7 @@ export(EXPORT libmemcachedutil-targets NAMESPACE libmemcached::)
4949
install(EXPORT libmemcachedutil-targets NAMESPACE libmemcached::
5050
COMPONENT dev
5151
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
52+
53+
target_sources(libmemcachedutil PRIVATE
54+
${libmemcachedutil_sources}
55+
${libmemcachedutil_includes})

0 commit comments

Comments
 (0)