diff --git a/wangle/CMakeLists.txt b/wangle/CMakeLists.txt index 1655b55bc..b84447c51 100644 --- a/wangle/CMakeLists.txt +++ b/wangle/CMakeLists.txt @@ -148,17 +148,19 @@ install( # ============================================================================= # Collect all headers via recursive glob (like folly/fizz does) -file(GLOB_RECURSE WANGLE_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/*.h") +file(GLOB_RECURSE WANGLE_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + "${CMAKE_CURRENT_SOURCE_DIR}/*.h") # Filter out test, facebook, and other non-public directories -list(FILTER WANGLE_HEADERS EXCLUDE REGEX "/test/") -list(FILTER WANGLE_HEADERS EXCLUDE REGEX "/facebook/") -list(FILTER WANGLE_HEADERS EXCLUDE REGEX "/build/") -list(FILTER WANGLE_HEADERS EXCLUDE REGEX "/example/") +list(FILTER WANGLE_HEADERS EXCLUDE REGEX "(^|/)test/") +list(FILTER WANGLE_HEADERS EXCLUDE REGEX "(^|/)facebook/") +list(FILTER WANGLE_HEADERS EXCLUDE REGEX "(^|/)build/") +list(FILTER WANGLE_HEADERS EXCLUDE REGEX "(^|/)example/") # Collect test headers separately -file(GLOB_RECURSE WANGLE_TEST_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/*.h") -list(FILTER WANGLE_TEST_HEADERS INCLUDE REGEX "/test/") -list(FILTER WANGLE_TEST_HEADERS EXCLUDE REGEX "/facebook/") +file(GLOB_RECURSE WANGLE_TEST_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + "${CMAKE_CURRENT_SOURCE_DIR}/*.h") +list(FILTER WANGLE_TEST_HEADERS INCLUDE REGEX "(^|/)test/") +list(FILTER WANGLE_TEST_HEADERS EXCLUDE REGEX "(^|/)facebook/") # Install headers preserving directory structure wangle_install_headers(wangle ${CMAKE_CURRENT_SOURCE_DIR} ${WANGLE_HEADERS}) diff --git a/wangle/cmake/WangleFunctions.cmake b/wangle/cmake/WangleFunctions.cmake index c0e51e9ef..d87ff3514 100644 --- a/wangle/cmake/WangleFunctions.cmake +++ b/wangle/cmake/WangleFunctions.cmake @@ -13,26 +13,20 @@ # limitations under the License. # Install header files preserving directory structure -# Similar to folly's auto_install_files() function(wangle_install_headers rootName rootDir) file(TO_CMAKE_PATH "${rootDir}" rootDir) - string(LENGTH "${rootDir}" rootDirLength) foreach(fil ${ARGN}) file(TO_CMAKE_PATH "${fil}" filePath) - string(FIND "${filePath}" "/" rIdx REVERSE) - if(rIdx EQUAL -1) + + # dirname $fil + string(FIND "${filePath}" "/" lastSlash REVERSE) + if(lastSlash EQUAL -1) continue() endif() - string(SUBSTRING "${filePath}" 0 ${rIdx} filePath) - - string(LENGTH "${filePath}" filePathLength) - string(FIND "${filePath}" "${rootDir}" rIdx) - if(rIdx EQUAL 0) - math(EXPR filePathLength "${filePathLength} - ${rootDirLength}") - string(SUBSTRING "${filePath}" ${rootDirLength} ${filePathLength} fileGroup) - install(FILES ${fil} - DESTINATION ${INCLUDE_INSTALL_DIR}/${rootName}${fileGroup}) - endif() + string(SUBSTRING "${filePath}" 0 ${lastSlash} dirName) + + install(FILES ${fil} + DESTINATION ${INCLUDE_INSTALL_DIR}/${rootName}/${dirName}) endforeach() endfunction()