blob: 10aa98433ce23e3e7a11ddae6365794bd573d09b [file] [log] [blame]
Torsten Rasmussenf38e3882018-06-07 15:50:31 +02001#!/usr/bin/env python3
2
3import os
4import argparse
5
6def touch(trigger):
7 # If no trigger file is provided then do a return.
Ulf Magnussonba312fe2019-03-20 19:30:29 +01008 if trigger is None:
Torsten Rasmussenf38e3882018-06-07 15:50:31 +02009 return
10
11 if os.path.exists(trigger):
12 os.utime(trigger, None)
13 else:
14 with open(trigger, 'w') as fp:
15 fp.write("")
16
17
18def main():
19 parser = argparse.ArgumentParser(
20 description='This script will walk the specified directory and write the file specified \
21 with the list of all sub-directories found. If to the output file already \
22 exists, the file will only be updated in case sub-directories has been added \
23 or removed since previous invocation.')
24
25 parser.add_argument('-d', '--directory', required=True,
26 help='Directory to walk for sub-directory discovery')
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020027 parser.add_argument('-c', '--create-links', required=False,
28 help='Create links for each directory found in directory given')
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020029 parser.add_argument('-o', '--out-file', required=True,
30 help='File to write containing a list of all directories found')
31 parser.add_argument('-t', '--trigger-file', required=False,
32 help='Trigger file to be be touched to re-run CMake')
33
34 args = parser.parse_args()
35
36 dirlist = []
Ulf Magnussonba312fe2019-03-20 19:30:29 +010037 if args.create_links is not None:
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020038 if not os.path.exists(args.create_links):
39 os.makedirs(args.create_links)
40 directory = args.directory
41 symlink = args.create_links + os.path.sep + directory.replace(os.path.sep, '_')
42 if not os.path.exists(symlink):
43 os.symlink(directory, symlink)
44 dirlist.extend(symlink)
45 else:
46 dirlist.extend(args.directory)
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020047 dirlist.extend(os.linesep)
Marc Herbertd5b28342019-02-15 18:56:57 -080048 for root, dirs, _ in os.walk(args.directory, topdown=True):
49 dirs.sort()
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020050 for subdir in dirs:
Ulf Magnussonba312fe2019-03-20 19:30:29 +010051 if args.create_links is not None:
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020052 directory = os.path.join(root, subdir)
53 symlink = args.create_links + os.path.sep + directory.replace(os.path.sep, '_')
54 if not os.path.exists(symlink):
55 os.symlink(directory, symlink)
56 dirlist.extend(symlink)
57 else:
58 dirlist.extend(os.path.join(root, subdir))
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020059 dirlist.extend(os.linesep)
60
61 new = ''.join(dirlist)
62 existing = ''
63
64 if os.path.exists(args.out_file):
65 with open(args.out_file, 'r') as fp:
66 existing = fp.read()
67
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020068 if new != existing:
69 with open(args.out_file, 'w') as fp:
70 fp.write(new)
71 else:
72 with open(args.out_file, 'w') as fp:
73 fp.write(new)
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020074
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020075 # Always touch trigger file to ensure json files are updated
76 touch(args.trigger_file)
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020077
78if __name__ == "__main__":
79 main()