From b4ad6c14261e1f464e93bb566438076b8780618d Mon Sep 17 00:00:00 2001 From: Renz Christian Bagaporo Date: Mon, 20 May 2019 18:46:57 +0800 Subject: [PATCH] cmake: refactor quick check given component dirs --- tools/cmake/build.cmake | 5 ++--- tools/cmake/component.cmake | 40 ++++++++++++++++++++++++++++--------- tools/cmake/project.cmake | 4 ++-- 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/tools/cmake/build.cmake b/tools/cmake/build.cmake index 531d343c2a..2371c94623 100644 --- a/tools/cmake/build.cmake +++ b/tools/cmake/build.cmake @@ -147,9 +147,8 @@ function(__build_init idf_path) file(GLOB component_dirs ${idf_path}/components/*) foreach(component_dir ${component_dirs}) get_filename_component(component_dir ${component_dir} ABSOLUTE) - get_filename_component(base_dir ${component_dir} NAME) - string(SUBSTRING "${base_dir}" 0 1 first_char) - if(NOT first_char STREQUAL ".") + __component_dir_quick_check(is_component ${component_dir}) + if(is_component) __component_add(${component_dir} ${prefix}) endif() endforeach() diff --git a/tools/cmake/component.cmake b/tools/cmake/component.cmake index 2f65dca2ec..b3dd460c83 100644 --- a/tools/cmake/component.cmake +++ b/tools/cmake/component.cmake @@ -95,6 +95,36 @@ macro(__component_set_properties) __component_set_property(${component_target} REQUIRED_IDF_TARGETS "${__REQUIRED_IDF_TARGETS}") endmacro() +# +# Perform a quick check if given component dir satisfies basic requirements. +# +function(__component_dir_quick_check var component_dir) + set(res 1) + get_filename_component(abs_dir ${component_dir} ABSOLUTE) + + # Check this is really a directory and that a CMakeLists.txt file for this component exists + # - warn and skip anything which isn't valid looking (probably cruft) + if(NOT IS_DIRECTORY "${abs_dir}") + message(STATUS "Unexpected file in components directory: ${abs_dir}") + set(res 0) + endif() + + get_filename_component(base_dir ${abs_dir} NAME) + string(SUBSTRING "${base_dir}" 0 1 first_char) + + if(NOT first_char STREQUAL ".") + if(NOT EXISTS "${abs_dir}/CMakeLists.txt") + message(STATUS "Component directory ${abs_dir} does not contain a CMakeLists.txt file. " + "No component will be added") + set(res 0) + endif() + else() + set(res 0) # quietly ignore dot-folders + endif() + + set(${var} ${res} PARENT_SCOPE) +endfunction() + # # Add a component to process in the build. The components are keeped tracked of in property # __COMPONENT_TARGETS in component target form. @@ -112,16 +142,8 @@ function(__component_add component_dir prefix) get_filename_component(abs_dir ${component_dir} ABSOLUTE) get_filename_component(base_dir ${abs_dir} NAME) - # Check this is really a directory and that a CMakeLists.txt file for this component exists - # - warn and skip anything which isn't valid looking (probably cruft) - if(NOT IS_DIRECTORY "${abs_dir}") - message(WARNING "Unexpected file in components directory: ${abs_dir}") - return() - endif() if(NOT EXISTS "${abs_dir}/CMakeLists.txt") - message(WARNING "Component directory ${abs_dir} does not contain a CMakeLists.txt file. " - "No component will be added") - return() + message(FATAL_ERROR "Directory '${component_dir}' does not contain a component.") endif() set(component_name ${base_dir}) diff --git a/tools/cmake/project.cmake b/tools/cmake/project.cmake index 0cb2d6db92..3726fa0fb1 100644 --- a/tools/cmake/project.cmake +++ b/tools/cmake/project.cmake @@ -149,8 +149,8 @@ function(__project_init components_var test_components_var) foreach(component_dir ${component_dirs}) if(EXISTS ${component_dir}/CMakeLists.txt) get_filename_component(base_dir ${component_dir} NAME) - string(SUBSTRING "${base_dir}" 0 1 first_char) - if(NOT first_char STREQUAL ".") + __component_dir_quick_check(is_component ${component_dir}) + if(is_component) idf_build_component(${component_dir}) endif() endif()