From f8750eb58db79e0a39acfe2acc1ac6631fe91c1a Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Mon, 10 Sep 2018 12:21:59 +0800 Subject: [PATCH 1/2] lwip: add compatibility headers for sntp.h and esp_ping.h Before LwIP was moved into a submodule, sntp and esp_ping were available as the following includes: #include "apps/sntp/sntp.h" #include "esp_ping.h" This commit makes header files available at the old location, and adds a deprecation warning for sntp.h. Closes https://github.com/espressif/esp-idf/issues/2392 --- components/esp32/esp_err_to_name.c | 6 +++--- components/lwip/CMakeLists.txt | 1 + components/lwip/apps/ping/esp_ping.c | 2 +- components/lwip/apps/ping/ping.c | 2 +- components/lwip/component.mk | 3 ++- components/lwip/include/apps/{ping => }/esp_ping.h | 0 components/lwip/include_compat/apps/sntp/sntp.h | 3 +++ 7 files changed, 11 insertions(+), 6 deletions(-) rename components/lwip/include/apps/{ping => }/esp_ping.h (100%) create mode 100644 components/lwip/include_compat/apps/sntp/sntp.h diff --git a/components/esp32/esp_err_to_name.c b/components/esp32/esp_err_to_name.c index aee804b05..1044ebe05 100644 --- a/components/esp32/esp_err_to_name.c +++ b/components/esp32/esp_err_to_name.c @@ -4,8 +4,8 @@ #if __has_include("soc/soc.h") #include "soc/soc.h" #endif -#if __has_include("apps/ping/esp_ping.h") -#include "apps/ping/esp_ping.h" +#if __has_include("apps/esp_ping.h") +#include "apps/esp_ping.h" #endif #if __has_include("esp32/ulp.h") #include "esp32/ulp.h" @@ -399,7 +399,7 @@ static const esp_err_msg_t esp_err_msg_table[] = { # ifdef ESP_ERR_TCPIP_ADAPTER_DHCP_NOT_STOPPED ERR_TBL_IT(ESP_ERR_TCPIP_ADAPTER_DHCP_NOT_STOPPED), /* 20487 0x5007 */ # endif - // components/lwip/include/apps/ping/esp_ping.h + // components/lwip/include/apps/esp_ping.h # ifdef ESP_ERR_PING_BASE ERR_TBL_IT(ESP_ERR_PING_BASE), /* 24576 0x6000 */ # endif diff --git a/components/lwip/CMakeLists.txt b/components/lwip/CMakeLists.txt index 794d5bc6a..29c8d9fb6 100644 --- a/components/lwip/CMakeLists.txt +++ b/components/lwip/CMakeLists.txt @@ -3,6 +3,7 @@ set(COMPONENT_ADD_INCLUDEDIRS lwip/src/include port/esp32/include port/esp32/include/arch + include_compat ) set(COMPONENT_SRCS "apps/dhcpserver/dhcpserver.c" diff --git a/components/lwip/apps/ping/esp_ping.c b/components/lwip/apps/ping/esp_ping.c index 43e405f24..cae4c866b 100644 --- a/components/lwip/apps/ping/esp_ping.c +++ b/components/lwip/apps/ping/esp_ping.c @@ -13,7 +13,7 @@ // limitations under the License. #include -#include "ping/esp_ping.h" +#include "esp_ping.h" #include "lwip/ip_addr.h" diff --git a/components/lwip/apps/ping/ping.c b/components/lwip/apps/ping/ping.c index eb7e71c60..64b005749 100644 --- a/components/lwip/apps/ping/ping.c +++ b/components/lwip/apps/ping/ping.c @@ -58,7 +58,7 @@ #endif /* PING_USE_SOCKETS */ #ifdef ESP_PING -#include "ping/esp_ping.h" +#include "esp_ping.h" #include "lwip/ip_addr.h" #endif /** diff --git a/components/lwip/component.mk b/components/lwip/component.mk index e33ea7f36..684a5794d 100644 --- a/components/lwip/component.mk +++ b/components/lwip/component.mk @@ -7,7 +7,8 @@ COMPONENT_ADD_INCLUDEDIRS := \ include/apps \ lwip/src/include \ port/esp32/include \ - port/esp32/include/arch + port/esp32/include/arch \ + include_compat COMPONENT_SRCDIRS := \ apps/dhcpserver \ diff --git a/components/lwip/include/apps/ping/esp_ping.h b/components/lwip/include/apps/esp_ping.h similarity index 100% rename from components/lwip/include/apps/ping/esp_ping.h rename to components/lwip/include/apps/esp_ping.h diff --git a/components/lwip/include_compat/apps/sntp/sntp.h b/components/lwip/include_compat/apps/sntp/sntp.h new file mode 100644 index 000000000..3db0fba1e --- /dev/null +++ b/components/lwip/include_compat/apps/sntp/sntp.h @@ -0,0 +1,3 @@ +#pragma once +#warning "This header file is deprecated, please include lwip/apps/sntp.h instead." +#include "lwip/apps/sntp.h" From bf443a763f97462eb0c6437d702fe0da2b0344bc Mon Sep 17 00:00:00 2001 From: Roland Dobai Date: Wed, 19 Sep 2018 14:41:46 +0200 Subject: [PATCH 2/2] tools: Support overwrite of includes for gen_esp_err_to_name.py gen_esp_err_to_name.py includes files like components/lwip/include/apps/esp_ping.h as "apps/esp_ping.h" because all subdirectories of "include" are used. If "components/lwip/include/apps" is in the path of the compiler instead of "components/lwip/include" then include "apps/esp_ping.h" will fail. This fix allows to process lines like: '// gen_esp_err_to_name.py: some text "esp_ping.h" some text' in header files for overwriting the include. --- components/esp32/esp_err_to_name.c | 6 ++--- components/lwip/include/apps/esp_ping.h | 3 +++ tools/gen_esp_err_to_name.py | 31 ++++++++++++++++++------- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/components/esp32/esp_err_to_name.c b/components/esp32/esp_err_to_name.c index 1044ebe05..02b3b267e 100644 --- a/components/esp32/esp_err_to_name.c +++ b/components/esp32/esp_err_to_name.c @@ -4,9 +4,6 @@ #if __has_include("soc/soc.h") #include "soc/soc.h" #endif -#if __has_include("apps/esp_ping.h") -#include "apps/esp_ping.h" -#endif #if __has_include("esp32/ulp.h") #include "esp32/ulp.h" #endif @@ -28,6 +25,9 @@ #if __has_include("esp_ota_ops.h") #include "esp_ota_ops.h" #endif +#if __has_include("esp_ping.h") +#include "esp_ping.h" +#endif #if __has_include("esp_spi_flash.h") #include "esp_spi_flash.h" #endif diff --git a/components/lwip/include/apps/esp_ping.h b/components/lwip/include/apps/esp_ping.h index d83c5b367..8a586f6f2 100644 --- a/components/lwip/include/apps/esp_ping.h +++ b/components/lwip/include/apps/esp_ping.h @@ -21,6 +21,9 @@ extern "C" { #endif +// gen_esp_err_to_name.py: include this as "esp_ping.h" because "components/lwip/include/apps/" is in the compiler path +// and not "components/lwip/include" + #define ESP_ERR_PING_BASE 0x6000 #define ESP_ERR_PING_INVALID_PARAMS ESP_ERR_PING_BASE + 0x01 diff --git a/tools/gen_esp_err_to_name.py b/tools/gen_esp_err_to_name.py index d623815ec..2beb5ac9d 100755 --- a/tools/gen_esp_err_to_name.py +++ b/tools/gen_esp_err_to_name.py @@ -57,13 +57,15 @@ class ErrItem(object): Contains information about the error: - name - error string - file - relative path inside the IDF project to the file which defines this error + - include_as - (optional) overwrites the include determined from file - comment - (optional) comment for the error - rel_str - (optional) error string which is a base for the error - rel_off - (optional) offset in relation to the base error """ - def __init__(self, name, file, comment, rel_str = "", rel_off = 0): + def __init__(self, name, file, include_as = None, comment = "", rel_str = "", rel_off = 0): self.name = name self.file = file + self.include_as = include_as self.comment = comment self.rel_str = rel_str self.rel_off = rel_off @@ -104,7 +106,7 @@ class InputError(RuntimeError): def __init__(self, p, e): super(InputError, self).__init__(p + ": " + e) -def process(line, idf_path): +def process(line, idf_path, include_as): """ Process a line of text from file idf_path (relative to IDF project). Fills the global list unproc_list and dictionaries err_dict, rev_err_dict @@ -160,11 +162,11 @@ def process(line, idf_path): related except NameError: # The value of the error is known at this moment because it do not depends on some other BASE error code - err_dict[num].append(ErrItem(words[1], idf_path, comment)) + err_dict[num].append(ErrItem(words[1], idf_path, include_as, comment)) rev_err_dict[words[1]] = num else: # Store the information available now and compute the error code later - unproc_list.append(ErrItem(words[1], idf_path, comment, related, num)) + unproc_list.append(ErrItem(words[1], idf_path, include_as, comment, related, num)) def process_remaining_errors(): """ @@ -180,7 +182,7 @@ def process_remaining_errors(): base_num = rev_err_dict[item.rel_str] base = err_dict[base_num][0] num = base_num + item.rel_off - err_dict[num].append(ErrItem(item.name, item.file, item.comment)) + err_dict[num].append(ErrItem(item.name, item.file, item.include_as, item.comment)) rev_err_dict[item.name] = num else: print(item.rel_str + " referenced by " + item.name + " in " + item.file + " is unknown") @@ -233,7 +235,10 @@ def generate_c_output(fin, fout): includes = set() for k in err_dict: for e in err_dict[k]: - includes.add(path_to_include(e.file)) + if e.include_as: + includes.add(e.include_as) + else: + includes.add(path_to_include(e.file)) # The order in a set in non-deterministic therefore it could happen that the # include order will be different in other machines and false difference @@ -308,6 +313,9 @@ def main(): parser.add_argument('--rst_output', help='Generate .rst output and save it into this file') args = parser.parse_args() + include_as_pattern = re.compile(r'\s*//\s*{}: [^"]* "([^"]+)"'.format(os.path.basename(__file__))) + define_pattern = re.compile(r'\s*#define\s+(ESP_ERR_|ESP_OK|ESP_FAIL)') + for root, dirnames, filenames in os.walk(idf_path): for filename in fnmatch.filter(filenames, '*.[ch]'): full_path = os.path.join(root, filename) @@ -316,13 +324,18 @@ def main(): continue with open(full_path, encoding='utf-8') as f: try: + include_as = None for line in f: + line = line.strip() + m = include_as_pattern.search(line) + if m: + include_as = m.group(1) # match also ESP_OK and ESP_FAIL because some of ESP_ERRs are referencing them - if re.match(r"\s*#define\s+(ESP_ERR_|ESP_OK|ESP_FAIL)", line): + elif define_pattern.match(line): try: - process(line.strip(), path_in_idf) + process(line, path_in_idf, include_as) except InputError as e: - print (e) + print(e) except UnicodeDecodeError: raise ValueError("The encoding of {} is not Unicode.".format(path_in_idf))