123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #!/usr/bin/env python
- #
- # Wrapper to run make and preprocess any paths in the output from MSYS Unix-style paths
- # to Windows paths, for Eclipse
- from __future__ import print_function, division
- import sys
- import subprocess
- import os.path
- import os
- import re
- import glob
- from test import test_cmd_line
- #UNIX_PATH_RE = re.compile(r'(([a-zA-Z]{1}[:]{1}){0,1}[/\\][^\s\'\"\t\[\(]+)+')
- UNIX_PATH_RE = re.compile(r'(([a-zA-Z]{1}[:]{1}){0,1}[/\\][^\s\'\"\t\[\(]+(?![^\\/\n]*$)[/\\]?)')
- INCLUDE_PATH_RE = re.compile(r'-I[\s"]{0,}(.+?)["]{0,}(?=\s-\S)')
- INCLUDE_PATH_ADJ_RE = re.compile(r'^([/]opt[/]esp-idf[/]){1}(.*)')
- INCLUDE_PATH_ADJ2_RE = re.compile(r'^([/]c[/]){1}(.*)')
- paths = {}
- names = []
- idf_path= os.environ.get('IDF_PATH').replace("/", "\\")
- cwd_path= os.environ.get('CWD')
- pwd_path= os.environ.get('PWD')
-
- def check_path(path):
- try:
- return paths[path]
- except KeyError:
- pass
- paths[path] = path
- winpath =path
-
- if not os.path.exists(winpath):
- # cache as failed, replace with success if it works
- if re.match(INCLUDE_PATH_ADJ2_RE, path) is not None:
- winpath = INCLUDE_PATH_ADJ2_RE.sub(r'c:/\2',path) #replace /c/
- try:
- winpath = subprocess.check_output(["cygpath", "-w", winpath]).strip()
- except subprocess.CalledProcessError:
- return path # something went wrong running cygpath, assume this is not a path!
- if not os.path.exists(winpath):
- if not os.path.exists(winpath):
- winpath=idf_path + '\\' + re.sub(r'^[/\\]opt[/\\](esp-idf[/\\]){0,}', '', path, 1)
- try:
- winpath = subprocess.check_output(["cygpath", "-w", winpath]).strip()
- except subprocess.CalledProcessError:
- return path # something went wrong running cygpath, assume this is not a path!
- if not os.path.exists(winpath):
- return path # not actually a valid path
-
- winpath = winpath.replace("/", "\\") # make consistent with forward-slashes used elsewhere
- paths[path] = winpath
-
-
- #print("In path: {0}, out path: {1}".format(path,winpath) )
- return winpath
- def fix_paths(filename):
- if re.match(r'.*[\\](.*$)',filename) is not None:
- filename = re.findall(r'.*[\\](.*$)',filename)[0].replace("\\", "/")
-
- return filename.rstrip()
- def print_paths(path_list, file_name, source_file):
-
- new_path_list = list(set(path_list))
- new_path_list.sort()
- last_n = ''
- cmd_line='xtensa-esp32-elf-gcc '
- for n in new_path_list:
- if re.match(INCLUDE_PATH_ADJ_RE, n) is not None:
- n = INCLUDE_PATH_ADJ_RE.sub(idf_path+r"\2",n )
- if re.match(INCLUDE_PATH_ADJ2_RE, n) is not None:
- n = INCLUDE_PATH_ADJ2_RE.sub(r'c:/\2',n)
- if last_n != n:
- cmd_line = cmd_line + ' -I ' + n.rstrip()
- last_n = n
- if source_file:
- cmd_line = cmd_line + ' -c ' + fix_paths(source_file)
- cmd_line = cmd_line + ' -o ' + fix_paths(file_name)
- print(cmd_line)
- def extract_includes():
-
- for filename in [y for x in os.walk('build') for y in glob.glob(os.path.join(x[0], '*.d'))]:
- lines = []
- source=''
- with open(filename) as file_in:
- for line in file_in:
- if re.match(r'\S*(?=/[^/]*\.[h][p]?)',line) is not None:
- lines.extend(re.findall(r'\S*(?=/[^/]*\.[h][p]?)/',line))
- if re.match(r'\S*(?=\.[cC][pP]{0,})[^\\\s]*',line) is not None:
- source = re.findall(r'\S*(?=\.[cC][pP]{0,})[^\\\s]*',line)[0]
-
- print_paths(lines,filename,source )
-
- def main():
- cwd_path=check_path(os.getcwd())
- os.environ['CWD']= cwd_path
- os.environ['PWD']= cwd_path
- idf_path= os.environ.get('IDF_PATH').replace("/", "\\")
- cwd_path= os.environ.get('CWD')
- pwd_path= os.environ.get('PWD')
- print('Running custom script make in {}, IDF_PATH={}, CWD={}, PWD={}'.format(cwd_path,idf_path,cwd_path,pwd_path))
-
- make = subprocess.Popen(["make"] + sys.argv[1:] + ["BATCH_BUILD=1"], stdout=subprocess.PIPE)
- for line in iter(make.stdout.readline, ''):
- line = re.sub(UNIX_PATH_RE, lambda m: check_path(m.group(0)), line)
- names.extend(INCLUDE_PATH_RE.findall(line))
- print(line.rstrip())
- sys.exit(make.wait())
- if __name__ == "__main__":
- main()
|