summaryrefslogtreecommitdiffstats
path: root/util/cmake/run_pro2cmake.py
diff options
context:
space:
mode:
authorCristian Maureira-Fredes <cristian.maureira-fredes@qt.io>2019-09-17 00:11:17 +0200
committerCristian Maureira-Fredes <cristian.maureira-fredes@qt.io>2019-09-18 12:00:26 +0000
commit91634c3c9b8d4f68f0ebd2ac76a8b5b79e4b4c94 (patch)
treedc1913a6a30f886813901f9584221c1f37fa3c22 /util/cmake/run_pro2cmake.py
parentc1cf305be0f1f529b96a06dc70ce5ee7273006ef (diff)
Improve styling of util/cmake scripts
flake8 was used to evaluate the file, with a couple of exeptions: E501,E266,W503 black was used to reformat the code automatically The changes were: * Added a README that explains how to use pipenv and pip, * Remove unnecessary return statements, * Remove '\' from the end of the lines, * Use f-strings (>= 3.6) since we are requiring Python 3.7, * Commenting unused variables, * Adding assert when Python >= 3.7 is not being used, * Wrapping long lines to 100 (Qt Style), * Re-factoring some lines, * Re-ordering imports, * Naming `except` for sympy (SympifyError, TypeError) Change-Id: Ie05f754e7d8ee4bf427117c58e0eb1b903202933 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'util/cmake/run_pro2cmake.py')
-rwxr-xr-xutil/cmake/run_pro2cmake.py109
1 files changed, 64 insertions, 45 deletions
diff --git a/util/cmake/run_pro2cmake.py b/util/cmake/run_pro2cmake.py
index 0d4cff2d67..5d5f50cc2a 100755
--- a/util/cmake/run_pro2cmake.py
+++ b/util/cmake/run_pro2cmake.py
@@ -38,56 +38,70 @@ from argparse import ArgumentParser
def parse_command_line():
- parser = ArgumentParser(description='Run pro2cmake on all .pro files recursively in given path.')
- parser.add_argument('--only-existing', dest='only_existing', action='store_true',
- help='Run pro2cmake only on .pro files that already have a CMakeLists.txt.')
- parser.add_argument('--only-qtbase-main-modules', dest='only_qtbase_main_modules', action='store_true',
- help='Run pro2cmake only on the main modules in qtbase.')
- parser.add_argument('--is-example', dest='is_example', action='store_true',
- help='Run pro2cmake with --is-example flag.')
- parser.add_argument('path', metavar='<path>', type=str,
- help='The path where to look for .pro files.')
+ parser = ArgumentParser(
+ description="Run pro2cmake on all .pro files recursively in given path."
+ )
+ parser.add_argument(
+ "--only-existing",
+ dest="only_existing",
+ action="store_true",
+ help="Run pro2cmake only on .pro files that already have a CMakeLists.txt.",
+ )
+ parser.add_argument(
+ "--only-qtbase-main-modules",
+ dest="only_qtbase_main_modules",
+ action="store_true",
+ help="Run pro2cmake only on the main modules in qtbase.",
+ )
+ parser.add_argument(
+ "--is-example",
+ dest="is_example",
+ action="store_true",
+ help="Run pro2cmake with --is-example flag.",
+ )
+ parser.add_argument(
+ "path", metavar="<path>", type=str, help="The path where to look for .pro files."
+ )
return parser.parse_args()
def find_all_pro_files(base_path: str, args: argparse.Namespace):
-
def sorter(pro_file: str) -> str:
""" Sorter that tries to prioritize main pro files in a directory. """
- pro_file_without_suffix = pro_file.rsplit('/', 1)[-1][:-4]
+ pro_file_without_suffix = pro_file.rsplit("/", 1)[-1][:-4]
dir_name = os.path.dirname(pro_file)
- if dir_name.endswith('/' + pro_file_without_suffix):
+ if dir_name.endswith("/" + pro_file_without_suffix):
return dir_name
return dir_name + "/__" + pro_file
all_files = []
previous_dir_name: str = None
- print('Finding .pro files.')
- glob_result = glob.glob(os.path.join(base_path, '**/*.pro'), recursive=True)
+ print("Finding .pro files.")
+ glob_result = glob.glob(os.path.join(base_path, "**/*.pro"), recursive=True)
def cmake_lists_exists_filter(path):
path_dir_name = os.path.dirname(path)
- if os.path.exists(os.path.join(path_dir_name, 'CMakeLists.txt')):
+ if os.path.exists(os.path.join(path_dir_name, "CMakeLists.txt")):
return True
return False
def qtbase_main_modules_filter(path):
main_modules = [
- 'corelib',
- 'network',
- 'gui',
- 'widgets',
- 'testlib',
- 'printsupport',
- 'opengl',
- 'sql',
- 'dbus',
- 'concurrent',
- 'xml',
+ "corelib",
+ "network",
+ "gui",
+ "widgets",
+ "testlib",
+ "printsupport",
+ "opengl",
+ "sql",
+ "dbus",
+ "concurrent",
+ "xml",
]
- path_suffixes = ['src/{}/{}.pro'.format(m, m, '.pro') for m in main_modules]
+ path_suffixes = ["src/{m}/{m}.pro" for m in main_modules]
for path_suffix in path_suffixes:
if path.endswith(path_suffix):
@@ -102,7 +116,7 @@ def find_all_pro_files(base_path: str, args: argparse.Namespace):
filter_func = qtbase_main_modules_filter
if filter_func:
- print('Filtering.')
+ print("Filtering.")
filter_result = [p for p in filter_result if filter_func(p)]
for pro_file in sorted(filter_result, key=sorter):
@@ -118,14 +132,14 @@ def find_all_pro_files(base_path: str, args: argparse.Namespace):
def run(all_files: typing.List[str], pro2cmake: str, args: argparse.Namespace) -> typing.List[str]:
failed_files = []
files_count = len(all_files)
- workers = (os.cpu_count() or 1)
+ workers = os.cpu_count() or 1
if args.only_qtbase_main_modules:
# qtbase main modules take longer than usual to process.
workers = 2
with concurrent.futures.ThreadPoolExecutor(max_workers=workers, initargs=(10,)) as pool:
- print('Firing up thread pool executor.')
+ print("Firing up thread pool executor.")
def _process_a_file(data: typing.Tuple[str, int, int]) -> typing.Tuple[int, str, str]:
filename, index, total = data
@@ -134,18 +148,21 @@ def run(all_files: typing.List[str], pro2cmake: str, args: argparse.Namespace) -
pro2cmake_args.append(sys.executable)
pro2cmake_args.append(pro2cmake)
if args.is_example:
- pro2cmake_args.append('--is-example')
+ pro2cmake_args.append("--is-example")
pro2cmake_args.append(os.path.basename(filename))
- result = subprocess.run(pro2cmake_args,
- cwd=os.path.dirname(filename),
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- stdout = 'Converted[{}/{}]: {}\n'.format(index, total, filename)
+ result = subprocess.run(
+ pro2cmake_args,
+ cwd=os.path.dirname(filename),
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ )
+ stdout = f"Converted[{index}/{total}]: {filename}\n"
return result.returncode, filename, stdout + result.stdout.decode()
- for return_code, filename, stdout in pool.map(_process_a_file,
- zip(all_files,
- range(1, files_count + 1),
- (files_count for _ in all_files))):
+ for return_code, filename, stdout in pool.map(
+ _process_a_file,
+ zip(all_files, range(1, files_count + 1), (files_count for _ in all_files)),
+ ):
if return_code:
failed_files.append(filename)
print(stdout)
@@ -157,21 +174,23 @@ def main() -> None:
args = parse_command_line()
script_path = os.path.dirname(os.path.abspath(__file__))
- pro2cmake = os.path.join(script_path, 'pro2cmake.py')
+ pro2cmake = os.path.join(script_path, "pro2cmake.py")
base_path = args.path
all_files = find_all_pro_files(base_path, args)
files_count = len(all_files)
failed_files = run(all_files, pro2cmake, args)
if len(all_files) == 0:
- print('No files found.')
+ print("No files found.")
if failed_files:
- print('The following files were not successfully '
- 'converted ({} of {}):'.format(len(failed_files), files_count))
+ print(
+ f"The following files were not successfully "
+ f"converted ({len(failed_files)} of {files_count}):"
+ )
for f in failed_files:
- print(' "{}"'.format(f))
+ print(f' "{f}"')
-if __name__ == '__main__':
+if __name__ == "__main__":
main()