mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
idf.py: Add check for new cmake cache values
This commit is contained in:
parent
ef11260310
commit
cfd7a5b84e
31
tools/idf.py
31
tools/idf.py
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user