config: Rename mconf to mconf-idf & conf to conf-idf

These versions of conf/mconf are forked from the upstream, and the CMake system allows mconf-idf to
be installed externally on the path. So the best option is to rename.

Includes changes to Windows installer for v1.1
This commit is contained in:
Angus Gratton 2018-05-24 13:32:34 +10:00 committed by Angus Gratton
parent 11980a9ad4
commit f6cd55d2ac
8 changed files with 70 additions and 57 deletions

View file

@ -45,10 +45,10 @@ Once Python is installed, open a Windows Command Prompt from the Start menu and
pip install pyserial pip install pyserial
MConf MConf for IDF
^^^^^ ^^^^^^^^^^^^^
Download the ESP-IDF customized version of the configuration tool mconf from the `mconf releases page <mconf>`_. Download the configuration tool mconf-idf from the `kconfig-frontends releases page <mconf-idf>`_. This is the ``mconf`` configuration tool with some minor customizations for ESP-IDF.
This tool will also need to be unzipped to a directory which is then `added to your Path <add-directory-windows-path>`_. This tool will also need to be unzipped to a directory which is then `added to your Path <add-directory-windows-path>`_.

View file

@ -23,9 +23,9 @@ ESP-IDF Tools Installer
The easiest way to install ESP-IDF's prerequisites is to download the ESP-IDF Tools installer from this URL: The easiest way to install ESP-IDF's prerequisites is to download the ESP-IDF Tools installer from this URL:
https://dl.espressif.com/dl/esp-idf-tools-setup-1.0.exe https://dl.espressif.com/dl/esp-idf-tools-setup-1.1.exe
The installer will automatically install the ESP32 Xtensa gcc toolchain, Ninja_ build tool, and a customized configuration tool called mconf. The installer can also download and run installers for CMake_ and Python_ 2.7 if these are not already installed on the computer. The installer will automatically install the ESP32 Xtensa gcc toolchain, Ninja_ build tool, and a configuration tool called mconf-idf_. The installer can also download and run installers for CMake_ and Python_ 2.7 if these are not already installed on the computer.
By default, the installer updates the Windows ``Path`` environment variable so all of these tools can be run from anywhere. If you disable this option, you will need to configure the environment where you are using ESP-IDF (terminal or chosen IDE) with the correct paths. By default, the installer updates the Windows ``Path`` environment variable so all of these tools can be run from anywhere. If you disable this option, you will need to configure the environment where you are using ESP-IDF (terminal or chosen IDE) with the correct paths.
@ -68,5 +68,5 @@ For advanced users who want to customize the install process:
.. _ninja: https://ninja-build.org/ .. _ninja: https://ninja-build.org/
.. _Python: https://www.python.org/downloads/windows/ .. _Python: https://www.python.org/downloads/windows/
.. _Git for Windows: https://gitforwindows.org/ .. _Git for Windows: https://gitforwindows.org/
.. _mconf: https://github.com/espressif/kconfig-frontends/releases/ .. _mconf-idf: https://github.com/espressif/kconfig-frontends/releases/
.. _Github Desktop: https://desktop.github.com/ .. _Github Desktop: https://desktop.github.com/

View file

@ -15,11 +15,11 @@ SDKCONFIG ?= $(PROJECT_PATH)/sdkconfig
# overrides (usually used for esp-idf examples) # overrides (usually used for esp-idf examples)
SDKCONFIG_DEFAULTS ?= $(PROJECT_PATH)/sdkconfig.defaults SDKCONFIG_DEFAULTS ?= $(PROJECT_PATH)/sdkconfig.defaults
# Workaround to run make parallel (-j). mconf and conf cannot be made simultaneously # Workaround to run make parallel (-j). mconf-idf and conf-idf cannot be made simultaneously
$(KCONFIG_TOOL_DIR)/mconf: $(KCONFIG_TOOL_DIR)/conf $(KCONFIG_TOOL_DIR)/mconf-idf: $(KCONFIG_TOOL_DIR)/conf-idf
# reset MAKEFLAGS as the menuconfig makefile uses implicit compile rules # reset MAKEFLAGS as the menuconfig makefile uses implicit compile rules
$(KCONFIG_TOOL_DIR)/mconf $(KCONFIG_TOOL_DIR)/conf: $(wildcard $(KCONFIG_TOOL_DIR)/*.c) $(KCONFIG_TOOL_DIR)/mconf-idf $(KCONFIG_TOOL_DIR)/conf-idf: $(wildcard $(KCONFIG_TOOL_DIR)/*.c)
MAKEFLAGS="" CC=$(HOSTCC) LD=$(HOSTLD) \ MAKEFLAGS="" CC=$(HOSTCC) LD=$(HOSTLD) \
$(MAKE) -C $(KCONFIG_TOOL_DIR) $(MAKE) -C $(KCONFIG_TOOL_DIR)
@ -36,7 +36,7 @@ $(SDKCONFIG): defconfig
endif endif
endif endif
# macro for the commands to run kconfig tools conf or mconf. # macro for the commands to run kconfig tools conf-idf or mconf-idf.
# $1 is the name (& args) of the conf tool to run # $1 is the name (& args) of the conf tool to run
define RunConf define RunConf
mkdir -p $(BUILD_DIR_BASE)/include/config mkdir -p $(BUILD_DIR_BASE)/include/config
@ -59,7 +59,7 @@ ifndef MAKE_RESTARTS
# depend on any prerequisite that may cause a make restart as part of # depend on any prerequisite that may cause a make restart as part of
# the prerequisite's own recipe. # the prerequisite's own recipe.
menuconfig: $(KCONFIG_TOOL_DIR)/mconf menuconfig: $(KCONFIG_TOOL_DIR)/mconf-idf
$(summary) MENUCONFIG $(summary) MENUCONFIG
ifdef BATCH_BUILD ifdef BATCH_BUILD
@echo "Can't run interactive configuration inside non-interactive build process." @echo "Can't run interactive configuration inside non-interactive build process."
@ -68,25 +68,25 @@ ifdef BATCH_BUILD
@echo "See esp-idf documentation for more details." @echo "See esp-idf documentation for more details."
@exit 1 @exit 1
else else
$(call RunConf,mconf) $(call RunConf,mconf-idf)
endif endif
# defconfig creates a default config, based on SDKCONFIG_DEFAULTS if present # defconfig creates a default config, based on SDKCONFIG_DEFAULTS if present
defconfig: $(KCONFIG_TOOL_DIR)/conf defconfig: $(KCONFIG_TOOL_DIR)/conf-idf
$(summary) DEFCONFIG $(summary) DEFCONFIG
ifneq ("$(wildcard $(SDKCONFIG_DEFAULTS))","") ifneq ("$(wildcard $(SDKCONFIG_DEFAULTS))","")
cat $(SDKCONFIG_DEFAULTS) >> $(SDKCONFIG) # append defaults to sdkconfig, will override existing values cat $(SDKCONFIG_DEFAULTS) >> $(SDKCONFIG) # append defaults to sdkconfig, will override existing values
endif endif
$(call RunConf,conf --olddefconfig) $(call RunConf,conf-idf --olddefconfig)
# if neither defconfig or menuconfig are requested, use the GENCONFIG rule to # if neither defconfig or menuconfig are requested, use the GENCONFIG rule to
# ensure generated config files are up to date # ensure generated config files are up to date
$(SDKCONFIG_MAKEFILE) $(BUILD_DIR_BASE)/include/sdkconfig.h: $(KCONFIG_TOOL_DIR)/conf $(SDKCONFIG) $(COMPONENT_KCONFIGS) $(COMPONENT_KCONFIGS_PROJBUILD) | $(call prereq_if_explicit,defconfig) $(call prereq_if_explicit,menuconfig) $(SDKCONFIG_MAKEFILE) $(BUILD_DIR_BASE)/include/sdkconfig.h: $(KCONFIG_TOOL_DIR)/conf-idf $(SDKCONFIG) $(COMPONENT_KCONFIGS) $(COMPONENT_KCONFIGS_PROJBUILD) | $(call prereq_if_explicit,defconfig) $(call prereq_if_explicit,menuconfig)
$(summary) GENCONFIG $(summary) GENCONFIG
ifdef BATCH_BUILD # can't prompt for new config values like on terminal ifdef BATCH_BUILD # can't prompt for new config values like on terminal
$(call RunConf,conf --olddefconfig) $(call RunConf,conf-idf --olddefconfig)
endif endif
$(call RunConf,conf --silentoldconfig) $(call RunConf,conf-idf --silentoldconfig)
touch $(SDKCONFIG_MAKEFILE) $(BUILD_DIR_BASE)/include/sdkconfig.h # ensure newer than sdkconfig touch $(SDKCONFIG_MAKEFILE) $(BUILD_DIR_BASE)/include/sdkconfig.h # ensure newer than sdkconfig
else # "$(MAKE_RESTARTS)" != "" else # "$(MAKE_RESTARTS)" != ""

View file

@ -16,16 +16,26 @@ macro(kconfig_set_variables)
endmacro() endmacro()
if(CMAKE_HOST_WIN32) if(CMAKE_HOST_WIN32)
# Prefer a prebuilt mconf on Windows # Prefer a prebuilt mconf-idf on Windows
find_program(WINPTY winpty) find_program(WINPTY winpty)
find_program(MCONF mconf) find_program(MCONF mconf-idf)
# Fall back to the old binary which was called 'mconf' not 'mconf-idf'
if(NOT MCONF)
find_program(MCONF mconf)
if(MCONF)
message(WARNING "Falling back to mconf binary '${MCONF}' not mconf-idf. "
"This is probably because an old version of IDF mconf is installed and this is fine. "
"However if there are config problems please check the Getting Started guide for your platform.")
endif()
endif()
if(NOT MCONF) if(NOT MCONF)
find_program(NATIVE_GCC gcc) find_program(NATIVE_GCC gcc)
if(NOT NATIVE_GCC) if(NOT NATIVE_GCC)
message(FATAL_ERROR message(FATAL_ERROR
"Windows requires a prebuilt ESP-IDF-specific mconf for your platform " "Windows requires a prebuilt mconf-idf for your platform "
"on the PATH, or an MSYS2 version of gcc on the PATH to build mconf. " "on the PATH, or an MSYS2 version of gcc on the PATH to build mconf-idf. "
"Consult the setup docs for ESP-IDF on Windows.") "Consult the setup docs for ESP-IDF on Windows.")
endif() endif()
elseif(WINPTY) elseif(WINPTY)
@ -36,26 +46,26 @@ endif()
if(NOT MCONF) if(NOT MCONF)
# Use the existing Makefile to build mconf (out of tree) when needed # Use the existing Makefile to build mconf (out of tree) when needed
# #
set(MCONF kconfig_bin/mconf) set(MCONF kconfig_bin/mconf-idf)
Externalproject_Add(mconf externalproject_add(mconf-idf
SOURCE_DIR ${IDF_PATH}/tools/kconfig SOURCE_DIR ${IDF_PATH}/tools/kconfig
CONFIGURE_COMMAND "" CONFIGURE_COMMAND ""
BINARY_DIR "kconfig_bin" BINARY_DIR "kconfig_bin"
BUILD_COMMAND make -f ${IDF_PATH}/tools/kconfig/Makefile mconf BUILD_COMMAND make -f ${IDF_PATH}/tools/kconfig/Makefile mconf-idf
BUILD_BYPRODUCTS ${MCONF} BUILD_BYPRODUCTS ${MCONF}
INSTALL_COMMAND "" INSTALL_COMMAND ""
EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_ALL 1
) )
file(GLOB mconf_srcfiles ${IDF_PATH}/tools/kconfig/*.c) file(GLOB mconf_srcfiles ${IDF_PATH}/tools/kconfig/*.c)
ExternalProject_Add_StepDependencies(mconf build externalproject_add_stepdependencies(mconf-idf build
${mconf_srcfiles} ${mconf_srcfiles}
${IDF_PATH}/tools/kconfig/Makefile ${IDF_PATH}/tools/kconfig/Makefile
${CMAKE_CURRENT_LIST_FILE}) ${CMAKE_CURRENT_LIST_FILE})
unset(mconf_srcfiles) unset(mconf_srcfiles)
set(menuconfig_depends DEPENDS mconf) set(menuconfig_depends DEPENDS mconf-idf)
endif() endif()
@ -99,7 +109,7 @@ function(kconfig_process_config)
--env "COMPONENT_KCONFIGS_PROJBUILD=${kconfigs_projbuild}" --env "COMPONENT_KCONFIGS_PROJBUILD=${kconfigs_projbuild}"
--env "IDF_CMAKE=y") --env "IDF_CMAKE=y")
# Generate the menuconfig target (uses C-based mconf tool, either prebuilt or via mconf target above) # Generate the menuconfig target (uses C-based mconf-idf tool, either prebuilt or via mconf-idf target above)
add_custom_target(menuconfig add_custom_target(menuconfig
${menuconfig_depends} ${menuconfig_depends}
# create any missing config file, with defaults if necessary # create any missing config file, with defaults if necessary

View file

@ -16,7 +16,9 @@ gconf.glade.h
# configuration programs # configuration programs
# #
conf conf
conf-idf
mconf mconf
mconf-idf
nconf nconf
qconf qconf
gconf gconf

View file

@ -43,7 +43,7 @@ endif
endif # MING32 endif # MING32
endif # MSYSTEM endif # MSYSTEM
default: mconf conf default: mconf-idf conf-idf
xconfig: qconf xconfig: qconf
$< $(silent) $(Kconfig) $< $(silent) $(Kconfig)
@ -51,41 +51,41 @@ xconfig: qconf
gconfig: gconf gconfig: gconf
$< $(silent) $(Kconfig) $< $(silent) $(Kconfig)
menuconfig: mconf menuconfig: mconf-idf
$< $(silent) $(Kconfig) $< $(silent) $(Kconfig)
config: conf config: conf-idf
$< $(silent) --oldaskconfig $(Kconfig) $< $(silent) --oldaskconfig $(Kconfig)
nconfig: nconf nconfig: nconf
$< $(silent) $(Kconfig) $< $(silent) $(Kconfig)
silentoldconfig: conf silentoldconfig: conf-idf
mkdir -p include/config include/generated mkdir -p include/config include/generated
$< $(silent) --$@ $(Kconfig) $< $(silent) --$@ $(Kconfig)
localyesconfig localmodconfig: streamline_config.pl conf localyesconfig localmodconfig: streamline_config.pl conf-idf
mkdir -p include/config include/generated mkdir -p include/config include/generated
perl $< --$@ . $(Kconfig) > .tmp.config perl $< --$@ . $(Kconfig) > .tmp.config
if [ -f .config ]; then \ if [ -f .config ]; then \
cmp -s .tmp.config .config || \ cmp -s .tmp.config .config || \
(mv -f .config .config.old.1; \ (mv -f .config .config.old.1; \
mv -f .tmp.config .config; \ mv -f .tmp.config .config; \
conf $(silent) --silentoldconfig $(Kconfig); \ conf-idf $(silent) --silentoldconfig $(Kconfig); \
mv -f .config.old.1 .config.old) \ mv -f .config.old.1 .config.old) \
else \ else \
mv -f .tmp.config .config; \ mv -f .tmp.config .config; \
conf $(silent) --silentoldconfig $(Kconfig); \ conf-idf $(silent) --silentoldconfig $(Kconfig); \
fi fi
rm -f .tmp.config rm -f .tmp.config
# These targets map 1:1 to the commandline options of 'conf' # These targets map 1:1 to the commandline options of 'conf-idf'
simple-targets := oldconfig allnoconfig allyesconfig allmodconfig \ simple-targets := oldconfig allnoconfig allyesconfig allmodconfig \
alldefconfig randconfig listnewconfig olddefconfig alldefconfig randconfig listnewconfig olddefconfig
PHONY += $(simple-targets) PHONY += $(simple-targets)
$(simple-targets): conf $(simple-targets): conf-idf
$< $(silent) --$@ $(Kconfig) $< $(silent) --$@ $(Kconfig)
PHONY += oldnoconfig savedefconfig defconfig PHONY += oldnoconfig savedefconfig defconfig
@ -95,10 +95,10 @@ PHONY += oldnoconfig savedefconfig defconfig
# counter-intuitive name. # counter-intuitive name.
oldnoconfig: olddefconfig oldnoconfig: olddefconfig
savedefconfig: conf savedefconfig: conf-idf
$< $(silent) --$@=defconfig $(Kconfig) $< $(silent) --$@=defconfig $(Kconfig)
defconfig: conf defconfig: conf-idf
ifeq ($(KBUILD_DEFCONFIG),) ifeq ($(KBUILD_DEFCONFIG),)
$< $(silent) --defconfig $(Kconfig) $< $(silent) --defconfig $(Kconfig)
else else
@ -111,12 +111,12 @@ else
endif endif
endif endif
%_defconfig: conf %_defconfig: conf-idf
$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/configs/$@) configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/configs/$@)
%.config: conf %.config: conf-idf
$(if $(call configfiles),, $(error No configuration exists for this target on this architecture)) $(if $(call configfiles),, $(error No configuration exists for this target on this architecture))
$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(configfiles) $(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(configfiles)
+yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig +yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig
@ -178,10 +178,10 @@ lxdialog/%.o: $(SRCDIR)/lxdialog/%.c
# =========================================================================== # ===========================================================================
# Shared Makefile for the various kconfig executables: # Shared Makefile for the various kconfig executables:
# conf: Used for defconfig, oldconfig and related targets # conf-idf: Used for defconfig, oldconfig and related targets
# nconf: Used for the nconfig target. # nconf: Used for the nconfig target.
# Utilizes ncurses # Utilizes ncurses
# mconf: Used for the menuconfig target # mconf-idf: Used for the menuconfig target
# Utilizes the lxdialog package # Utilizes the lxdialog package
# qconf: Used for the xconfig target # qconf: Used for the xconfig target
# Based on Qt which needs to be installed to compile it # Based on Qt which needs to be installed to compile it
@ -200,14 +200,15 @@ qconf-cxxobjs := qconf.o
qconf-objs := zconf.tab.o qconf-objs := zconf.tab.o
gconf-objs := gconf.o zconf.tab.o gconf-objs := gconf.o zconf.tab.o
hostprogs-y := conf nconf mconf kxgettext qconf gconf hostprogs-y := conf-idf nconf mconf-idf kxgettext qconf gconf
all-objs := $(conf-objs) $(mconf-objs) $(lxdialog) all-objs := $(conf-objs) $(mconf-objs) $(lxdialog)
all-deps := $(all-objs:.o=.d) all-deps := $(all-objs:.o=.d)
clean-files := qconf.moc .tmp_qtcheck .tmp_gtkcheck clean-files := qconf.moc .tmp_qtcheck .tmp_gtkcheck
clean-files += zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h clean-files += zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h
clean-files += $(all-objs) $(all-deps) conf mconf clean-files += $(all-objs) $(all-deps) conf-idf mconf-idf conf mconf
# (note: cleans both mconf & conf (old names) and conf-idf & mconf-idf (new names))
# Check that we have the required ncurses stuff installed for lxdialog (menuconfig) # Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
PHONY += dochecklxdialog PHONY += dochecklxdialog
@ -324,10 +325,10 @@ gconf.glade.h: gconf.glade
gconf.glade gconf.glade
mconf: lxdialog $(mconf-objs) mconf-idf: lxdialog $(mconf-objs)
$(CC) -o $@ $(mconf-objs) $(LOADLIBES_mconf) $(CC) -o $@ $(mconf-objs) $(LOADLIBES_mconf)
conf: $(conf-objs) conf-idf: $(conf-objs)
$(CC) -o $@ $(conf-objs) $(LOADLIBES_conf) $(CC) -o $@ $(conf-objs) $(LOADLIBES_conf)
zconf.tab.c: zconf.lex.c zconf.tab.c: zconf.lex.c

View file

@ -13,14 +13,14 @@ set -e
cd `dirname $0` cd `dirname $0`
pushd dl pushd dl
wget --continue "https://dl.espressif.com/dl/xtensa-esp32-elf-win32-1.22.0-80-g6c4433a-5.2.0.zip" wget --continue "https://dl.espressif.com/dl/xtensa-esp32-elf-win32-1.22.0-80-g6c4433a-5.2.0.zip"
wget --continue "https://github.com/espressif/kconfig-frontends/releases/download/v4.6.0.0-idf-20180319/mconf-v4.6.0.0-idf-20180319-win32.zip" wget --continue "https://github.com/espressif/kconfig-frontends/releases/download/v4.6.0.0-idf-20180525/mconf-v4.6.0.0-idf-20180525-win32.zip"
wget --continue "https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-win.zip" wget --continue "https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-win.zip"
popd popd
rm -rf input/* rm -rf input/*
pushd input pushd input
unzip ../dl/xtensa-esp32-elf-win32-1.22.0-80-g6c4433a-5.2.0.zip unzip ../dl/xtensa-esp32-elf-win32-1.22.0-80-g6c4433a-5.2.0.zip
unzip ../dl/mconf-v4.6.0.0-idf-20180319-win32.zip unzip ../dl/mconf-v4.6.0.0-idf-20180525-win32.zip
unzip ../dl/ninja-win.zip unzip ../dl/ninja-win.zip
popd popd

View file

@ -2,8 +2,8 @@
[Setup] [Setup]
AppName=ESP-IDF Tools AppName=ESP-IDF Tools
AppVersion=1.0 AppVersion=1.1
OutputBaseFilename=esp-idf-tools-setup-1.0 OutputBaseFilename=esp-idf-tools-setup-1.1
DefaultDirName={pf}\Espressif\ESP-IDF Tools DefaultDirName={pf}\Espressif\ESP-IDF Tools
DefaultGroupName=ESP-IDF Tools DefaultGroupName=ESP-IDF Tools
@ -22,7 +22,7 @@ Name: "custom"; Description: "Custom installation"; Flags: iscustom
[Components] [Components]
Name: toolchain; Description: ESP32 Xtensa GCC Cross-Toolchain; Types: full custom; Name: toolchain; Description: ESP32 Xtensa GCC Cross-Toolchain; Types: full custom;
Name: mconf; Description: ESP-IDF console menuconfig tool; Types: full custom; Name: mconf_idf; Description: ESP-IDF console menuconfig tool; Types: full custom;
Name: ninja; Description: Install Ninja build v1.8.2; Types: full custom Name: ninja; Description: Install Ninja build v1.8.2; Types: full custom
[Tasks] [Tasks]
@ -42,7 +42,7 @@ Name: python64; Description: Download and Run Python 2.7.14 Installer and instal
[Files] [Files]
Components: toolchain; Source: "input\xtensa-esp32-elf\*"; DestDir: "{app}\toolchain\"; Flags: recursesubdirs; Components: toolchain; Source: "input\xtensa-esp32-elf\*"; DestDir: "{app}\toolchain\"; Flags: recursesubdirs;
Components: mconf; Source: "input\mconf-v4.6.0.0-idf-20180319-win32\*"; DestDir: "{app}\mconf\"; Components: mconf_idf; Source: "input\mconf-v4.6.0.0-idf-20180525-win32\*"; DestDir: "{app}\mconf-idf\";
Components: ninja; Source: "input\ninja.exe"; DestDir: "{app}"; Components: ninja; Source: "input\ninja.exe"; DestDir: "{app}";
[Run] [Run]
@ -61,13 +61,13 @@ Root: HKCU; Subkey: "Environment"; \
ValueType: expandsz; ValueName: "Path"; ValueData: "{app};{olddata}"; Check: not IsInPath('{app}'); \ ValueType: expandsz; ValueName: "Path"; ValueData: "{app};{olddata}"; Check: not IsInPath('{app}'); \
Components: ninja; Tasks: addpath\user Components: ninja; Tasks: addpath\user
; mconf path ; mconf-idf path
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \
ValueType: expandsz; ValueName: "Path"; ValueData: "{app}\mconf;{olddata}"; Check: not IsInPath('{app}\mconf'); \ ValueType: expandsz; ValueName: "Path"; ValueData: "{app}\mconf-idf;{olddata}"; Check: not IsInPath('{app}\mconf-idf'); \
Components: mconf; Tasks: addpath\allusers Components: mconf_idf; Tasks: addpath\allusers
Root: HKCU; Subkey: "Environment"; \ Root: HKCU; Subkey: "Environment"; \
ValueType: expandsz; ValueName: "Path"; ValueData: "{app}\mconf;{olddata}"; Check: not IsInPath('{app}\mconf'); \ ValueType: expandsz; ValueName: "Path"; ValueData: "{app}\mconf-idf;{olddata}"; Check: not IsInPath('{app}\mconf-idf'); \
Components: mconf; Tasks: addpath\user Components: mconf_idf; Tasks: addpath\user
; toolchain path ; toolchain path
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \