浏览代码

Merge branch 'bugfix/build_spaces_in_path_tools' into 'master'

tools: fix issues related to spaces in paths in install and export scripts

Closes IDFGH-5913

See merge request espressif/esp-idf!15430
Ivan Grokhotkov 4 年之前
父节点
当前提交
89b8830f50
共有 8 个文件被更改,包括 50 次插入52 次删除
  1. 12 13
      export.bat
  2. 7 4
      export.sh
  3. 2 2
      install.bat
  4. 6 5
      install.sh
  5. 0 1
      tools/ci/check_copyright_ignore.txt
  6. 7 7
      tools/tools.json
  7. 2 2
      tools/windows/idf_exe/CMakeLists.txt
  8. 14 18
      tools/windows/idf_exe/idf_main.c

+ 12 - 13
export.bat

@@ -14,21 +14,14 @@ if %errorlevel% neq 0 set "MISSING_REQUIREMENTS=%MISSING_REQUIREMENTS%  git"
 
 if not "%MISSING_REQUIREMENTS%" == "" goto :__error_missing_requirements
 
-set PREFIX=python.exe %IDF_PATH%
-DOSKEY idf.py=%PREFIX%\tools\idf.py $*
-DOSKEY esptool.py=%PREFIX%\components\esptool_py\esptool\esptool.py $*
-DOSKEY espefuse.py=%PREFIX%\components\esptool_py\esptool\espefuse.py $*
-DOSKEY otatool.py=%PREFIX%\components\app_update\otatool.py $*
-DOSKEY parttool.py=%PREFIX%\components\partition_table\parttool.py $*
-
 :: Infer IDF_PATH from script location
 set IDF_PATH=%~dp0
 set IDF_PATH=%IDF_PATH:~0,-1%
 
-set IDF_TOOLS_PY_PATH=%IDF_PATH%\tools\idf_tools.py
-set IDF_TOOLS_JSON_PATH=%IDF_PATH%\tools\tools.json
-set IDF_TOOLS_EXPORT_CMD=%IDF_PATH%\export.bat
-set IDF_TOOLS_INSTALL_CMD=%IDF_PATH%\install.bat
+set "IDF_TOOLS_PY_PATH=%IDF_PATH%\tools\idf_tools.py"
+set "IDF_TOOLS_JSON_PATH=%IDF_PATH%\tools\tools.json"
+set "IDF_TOOLS_EXPORT_CMD=%IDF_PATH%\export.bat"
+set "IDF_TOOLS_INSTALL_CMD=%IDF_PATH%\install.bat"
 echo Setting IDF_PATH: %IDF_PATH%
 echo.
 
@@ -38,7 +31,7 @@ echo Adding ESP-IDF tools to PATH...
 :: It is possible to do this without a temporary file (running idf_tools.py from for /r command),
 :: but that way it is impossible to get the exit code of idf_tools.py.
 set "IDF_TOOLS_EXPORTS_FILE=%TEMP%\idf_export_vars.tmp"
-python.exe %IDF_PATH%\tools\idf_tools.py export --format key-value >"%IDF_TOOLS_EXPORTS_FILE%"
+python.exe "%IDF_PATH%\tools\idf_tools.py" export --format key-value >"%IDF_TOOLS_EXPORTS_FILE%"
 if %errorlevel% neq 0 goto :__end
 
 for /f "usebackq tokens=1,2 eol=# delims==" %%a in ("%IDF_TOOLS_EXPORTS_FILE%") do (
@@ -51,8 +44,14 @@ call set PATH_ADDITIONS=%%PATH:%OLD_PATH%=%%
 if "%PATH_ADDITIONS%"=="" call :__print_nothing_added
 if not "%PATH_ADDITIONS%"=="" echo     %PATH_ADDITIONS:;=&echo.    %
 
+DOSKEY idf.py=python.exe "%IDF_PATH%\tools\idf.py" $*
+DOSKEY esptool.py=python.exe "%IDF_PATH%\components\esptool_py\esptool\esptool.py" $*
+DOSKEY espefuse.py=python.exe "%IDF_PATH%\components\esptool_py\esptool\espefuse.py" $*
+DOSKEY otatool.py=python.exe "%IDF_PATH%\components\app_update\otatool.py" $*
+DOSKEY parttool.py=python.exe "%IDF_PATH%\components\partition_table\parttool.py" $*
+
 echo Checking if Python packages are up to date...
-python.exe %IDF_PATH%\tools\check_python_dependencies.py
+python.exe "%IDF_PATH%\tools\check_python_dependencies.py"
 if %errorlevel% neq 0 goto :__end
 
 echo.

+ 7 - 4
export.sh

@@ -52,7 +52,7 @@ __main() {
         # shellcheck disable=SC2169,SC2169,SC2039  # unreachable with 'dash'
         if [[ "$OSTYPE" == "darwin"* ]]; then
             # convert possibly relative path to absolute
-            script_dir="$(realpath_int "${self_path}")"
+            script_dir="$(__realpath "${self_path}")"
             # resolve any ../ references to make the path shorter
             script_dir="$(cd "${script_dir}" || exit 1; pwd)"
         else
@@ -111,16 +111,19 @@ __main() {
     then
         path_prefix=${PATH%%${old_path}}
         # shellcheck disable=SC2169,SC2039  # unreachable with 'dash'
-        paths="${path_prefix//:/ }"
-        if [ -n "${paths}" ]; then
+        if [ -n "${path_prefix}" ]; then
             __verbose "Added the following directories to PATH:"
         else
             __verbose "All paths are already set."
         fi
-        for path_entry in ${paths}
+        old_ifs="$IFS"
+        IFS=":"
+        for path_entry in ${path_prefix}
         do
             __verbose "  ${path_entry}"
         done
+        IFS="$old_ifs"
+        unset old_ifs
     else
         __verbose "Updated PATH variable:"
         __verbose "  ${PATH}"

+ 2 - 2
install.bat

@@ -22,11 +22,11 @@ set TARGETS="all"
 if NOT "%1"=="" set TARGETS=%*
 
 echo Installing ESP-IDF tools
-python.exe %IDF_PATH%\tools\idf_tools.py install --targets=%TARGETS%
+python.exe "%IDF_PATH%\tools\idf_tools.py" install --targets=%TARGETS%
 if %errorlevel% neq 0 goto :end
 
 echo Setting up Python environment
-python.exe %IDF_PATH%\tools\idf_tools.py install-python-env
+python.exe "%IDF_PATH%\tools\idf_tools.py" install-python-env
 if %errorlevel% neq 0 goto :end
 
 echo All done! You can now run:

+ 6 - 5
install.sh

@@ -3,10 +3,12 @@
 set -e
 set -u
 
-export IDF_PATH=$(cd $(dirname $0); pwd)
+basedir=$(dirname "$0")
+IDF_PATH=$(cd "${basedir}"; pwd)
+export IDF_PATH
 
 echo "Detecting the Python interpreter"
-. ${IDF_PATH}/tools/detect_python.sh
+. "${IDF_PATH}/tools/detect_python.sh"
 
 if [ "$#" -eq 0 ]; then
   TARGETS="all"
@@ -14,12 +16,11 @@ else
   TARGETS=$1
 fi
 echo "Installing ESP-IDF tools"
-${ESP_PYTHON} ${IDF_PATH}/tools/idf_tools.py install --targets=${TARGETS}
+"${ESP_PYTHON}" "${IDF_PATH}/tools/idf_tools.py" install --targets=${TARGETS}
 
 echo "Installing Python environment and packages"
-${ESP_PYTHON} ${IDF_PATH}/tools/idf_tools.py install-python-env
+"${ESP_PYTHON}" "${IDF_PATH}/tools/idf_tools.py" install-python-env
 
-basedir="$(dirname $0)"
 echo "All done! You can now run:"
 echo ""
 echo "  . ${basedir}/export.sh"

+ 0 - 1
tools/ci/check_copyright_ignore.txt

@@ -4190,4 +4190,3 @@ tools/unit-test-app/tools/CreateSectionTable.py
 tools/unit-test-app/tools/UnitTestParser.py
 tools/unit-test-app/unit_test.py
 tools/windows/eclipse_make.py
-tools/windows/idf_exe/idf_main.c

+ 7 - 7
tools/tools.json

@@ -625,17 +625,17 @@
       "version_regex": "([0-9.]+)",
       "versions": [
         {
-          "name": "1.0.1",
+          "name": "1.0.2",
           "status": "recommended",
           "win32": {
-            "sha256": "53eb6aaaf034cc7ed1a97d5c577afa0f99815b7793905e9408e74012d357d04a",
-            "size": 11297,
-            "url": "https://dl.espressif.com/dl/idf-exe-v1.0.1.zip"
+            "sha256": "93d45466cd2c86231f0693a60f68833db7bc63da17e876b2a64298a8869b916f",
+            "size": 7223,
+            "url": "https://dl.espressif.com/dl/idf-exe-v1.0.2.zip"
           },
           "win64": {
-            "sha256": "53eb6aaaf034cc7ed1a97d5c577afa0f99815b7793905e9408e74012d357d04a",
-            "size": 11297,
-            "url": "https://dl.espressif.com/dl/idf-exe-v1.0.1.zip"
+            "sha256": "93d45466cd2c86231f0693a60f68833db7bc63da17e876b2a64298a8869b916f",
+            "size": 7223,
+            "url": "https://dl.espressif.com/dl/idf-exe-v1.0.2.zip"
           }
         }
       ]

+ 2 - 2
tools/windows/idf_exe/CMakeLists.txt

@@ -1,13 +1,13 @@
 cmake_minimum_required(VERSION 3.5)
 project(idfexe)
 
-set(VERSION 1.0.1)
+set(VERSION 1.0.2)
 set(ARCHIVE_NAME idf-exe-v${VERSION}.zip)
 
 add_executable(idf idf_main.c)
 target_compile_definitions(idf PRIVATE -DVERSION=\"${VERSION}\")
 set_target_properties(idf PROPERTIES C_STANDARD 99)
-target_link_libraries(idf "-lshlwapi")
+target_link_libraries(idf "shlwapi")
 
 if(CMAKE_BUILD_TYPE STREQUAL Release)
     add_custom_command(TARGET idf

+ 14 - 18
tools/windows/idf_exe/idf_main.c

@@ -1,16 +1,8 @@
-// Copyright 2019 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at",
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License
+/*
+ * SPDX-FileCopyrightText: 2019-2021 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
 
 #include <windows.h>
 #include <shlwapi.h>
@@ -19,7 +11,11 @@
 
 #define LINESIZE 1024
 
+#ifdef __GNUC__
 static void fail(LPCSTR message, ...) __attribute__((noreturn));
+#else
+__declspec(noreturn) static void fail(LPCSTR message, ...);
+#endif
 
 static void fail(LPCSTR message, ...)
 {
@@ -66,7 +62,7 @@ int main(int argc, LPTSTR argv[])
     LPCTSTR idfpy_script_name = TEXT("idf.py");
 
     /* Get IDF_PATH */
-    TCHAR idf_path[LINESIZE] = {};
+    TCHAR idf_path[LINESIZE] = { 0 };
     if (GetEnvironmentVariable(TEXT("IDF_PATH"), idf_path, sizeof(idf_path)) == 0) {
         DWORD err = GetLastError();
         if (err == ERROR_ENVVAR_NOT_FOUND) {
@@ -76,13 +72,13 @@ int main(int argc, LPTSTR argv[])
         }
     }
 
-    /* Prepare the command line: python.exe %IDF_PATH%\\tools\idf.py <rest of the args> */
-    TCHAR cmdline[LINESIZE] = {};
-    StringCchCat(cmdline, sizeof(cmdline), TEXT("python.exe "));
+    /* Prepare the command line: python.exe "%IDF_PATH%\\tools\idf.py" <rest of the args> */
+    TCHAR cmdline[LINESIZE] = { 0 };
+    StringCchCat(cmdline, sizeof(cmdline), TEXT("python.exe \""));
     StringCchCat(cmdline, sizeof(cmdline), idf_path);
     StringCchCat(cmdline, sizeof(cmdline), TEXT("\\tools\\"));
     StringCchCat(cmdline, sizeof(cmdline), idfpy_script_name);
-    StringCchCat(cmdline, sizeof(cmdline), TEXT(" "));
+    StringCchCat(cmdline, sizeof(cmdline), TEXT("\" "));
     for (int i = 1; i < argc; ++i) {
         StringCchCat(cmdline, sizeof(cmdline), argv[i]);
         StringCchCat(cmdline, sizeof(cmdline), TEXT(" "));