ChibiOS/tools/workflows/find.py

58 lines
1.8 KiB
Python
Executable File

#!/usr/bin/env python
"""
Finds all makefile projects in the given directories and allows to exclude
overlaps.
To get help on usage, possible options and their descriptions, use
the following command:
find.py --help
"""
import argparse
import os
import sys
def find(args):
result = []
for path in args.dirs:
for root, dirs, files in os.walk(path):
if args.makefile and 'Makefile' in files:
if args.no_overlaps and args.make and 'make' in dirs:
# Skip 'Makefile' because there is the 'make' subdir with
# more specific '*.make' makefiles.
continue
result.append(os.path.join(root, 'Makefile'))
if args.make and os.path.basename(root) == 'make':
result.extend(
os.path.join(root, make)
for make in files
if make.endswith('.make')
)
return result
def main():
parser = argparse.ArgumentParser(description='Find makefiles')
parser.add_argument('--makefile', action='store_true',
help='Search for "Makefile" files.')
parser.add_argument('--make', action='store_true',
help='Search for "*.make" files.')
parser.add_argument('--no-overlaps', action='store_true',
help=('Exclude "Makefile" if there is the "make" '
'subdir which includes more specific "*.make" '
'files'))
parser.add_argument('dirs', metavar='dir', nargs='+',
help='Directories in which to search for makefiles.')
args = parser.parse_args()
makefiles = find(args)
sys.stdout.write('\n'.join(makefiles))
sys.stdout.write('\n')
if __name__ == '__main__':
main()