Merge branch 'bugfix/check_for_new_cmakecache_vars_v3.3' into 'release/v3.3'

idf.py: Add check for new cmake cache values (backport v3.3)

See merge request espressif/esp-idf!5931
This commit is contained in:
Angus Gratton 2019-10-09 13:54:29 +08:00
commit 2b84f3e6c4

View file

@ -136,6 +136,32 @@ def detect_cmake_generator():
raise FatalError("To use idf.py, either the 'ninja' or 'GNU make' build tool must be available in the PATH") raise FatalError("To use idf.py, either the 'ninja' or 'GNU make' build tool must be available in the PATH")
def _strip_quotes(value, regexp=re.compile(r"^\"(.*)\"$|^'(.*)'$|^(.*)$")):
"""
Strip quotes like CMake does during parsing cache entries
"""
return [x for x in regexp.match(value).groups() if x is not None][0].rstrip()
def _new_cmakecache_entries(cache_path, new_cache_entries):
if not os.path.exists(cache_path):
return True
current_cache = parse_cmakecache(cache_path)
if new_cache_entries:
current_cache = parse_cmakecache(cache_path)
for entry in new_cache_entries:
key, value = entry.split("=", 1)
current_value = current_cache.get(key, None)
if current_value is None or _strip_quotes(value) != current_value:
return True
return False
def _ensure_build_directory(args, always_run_cmake=False): def _ensure_build_directory(args, always_run_cmake=False):
"""Check the build directory exists and that cmake has been run there. """Check the build directory exists and that cmake has been run there.
@ -161,7 +187,8 @@ def _ensure_build_directory(args, always_run_cmake=False):
if not os.path.isdir(build_dir): if not os.path.isdir(build_dir):
os.makedirs(build_dir) os.makedirs(build_dir)
cache_path = os.path.join(build_dir, "CMakeCache.txt") cache_path = os.path.join(build_dir, "CMakeCache.txt")
if not os.path.exists(cache_path) or always_run_cmake:
if always_run_cmake or _new_cmakecache_entries(cache_path, args.define_cache_entry):
if args.generator is None: if args.generator is None:
args.generator = detect_cmake_generator() args.generator = detect_cmake_generator()
try: try:
@ -216,7 +243,7 @@ def parse_cmakecache(path):
for line in f: for line in f:
# cmake cache lines look like: CMAKE_CXX_FLAGS_DEBUG:STRING=-g # cmake cache lines look like: CMAKE_CXX_FLAGS_DEBUG:STRING=-g
# groups are name, type, value # groups are name, type, value
m = re.match(r"^([^#/:=]+):([^:=]+)=(.+)\n$", line) m = re.match(r"^([^#/:=]+):([^:=]+)=(.*)\n$", line)
if m: if m:
result[m.group(1)] = m.group(3) result[m.group(1)] = m.group(3)
return result return result