blob: ec97a0c9955b7fff46d11230190252ffa204bf1c [file] [log] [blame]
Torsten Rasmussenf38e3882018-06-07 15:50:31 +02001#!/usr/bin/env python3
Anas Nashif3ae52622019-04-06 09:08:09 -04002# SPDX-License-Identifier: Apache-2.0
Torsten Rasmussenf38e3882018-06-07 15:50:31 +02003
4import os
5import argparse
6
7def touch(trigger):
8 # If no trigger file is provided then do a return.
Ulf Magnussonba312fe2019-03-20 19:30:29 +01009 if trigger is None:
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020010 return
11
12 if os.path.exists(trigger):
13 os.utime(trigger, None)
14 else:
15 with open(trigger, 'w') as fp:
16 fp.write("")
17
18
19def main():
20 parser = argparse.ArgumentParser(
21 description='This script will walk the specified directory and write the file specified \
22 with the list of all sub-directories found. If to the output file already \
23 exists, the file will only be updated in case sub-directories has been added \
24 or removed since previous invocation.')
25
26 parser.add_argument('-d', '--directory', required=True,
27 help='Directory to walk for sub-directory discovery')
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020028 parser.add_argument('-c', '--create-links', required=False,
29 help='Create links for each directory found in directory given')
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020030 parser.add_argument('-o', '--out-file', required=True,
31 help='File to write containing a list of all directories found')
32 parser.add_argument('-t', '--trigger-file', required=False,
33 help='Trigger file to be be touched to re-run CMake')
34
35 args = parser.parse_args()
36
37 dirlist = []
Ulf Magnussonba312fe2019-03-20 19:30:29 +010038 if args.create_links is not None:
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020039 if not os.path.exists(args.create_links):
40 os.makedirs(args.create_links)
41 directory = args.directory
42 symlink = args.create_links + os.path.sep + directory.replace(os.path.sep, '_')
43 if not os.path.exists(symlink):
44 os.symlink(directory, symlink)
45 dirlist.extend(symlink)
46 else:
47 dirlist.extend(args.directory)
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020048 dirlist.extend(os.linesep)
Marc Herbertd5b28342019-02-15 18:56:57 -080049 for root, dirs, _ in os.walk(args.directory, topdown=True):
50 dirs.sort()
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020051 for subdir in dirs:
Ulf Magnussonba312fe2019-03-20 19:30:29 +010052 if args.create_links is not None:
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020053 directory = os.path.join(root, subdir)
54 symlink = args.create_links + os.path.sep + directory.replace(os.path.sep, '_')
55 if not os.path.exists(symlink):
56 os.symlink(directory, symlink)
57 dirlist.extend(symlink)
58 else:
59 dirlist.extend(os.path.join(root, subdir))
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020060 dirlist.extend(os.linesep)
61
62 new = ''.join(dirlist)
63 existing = ''
64
65 if os.path.exists(args.out_file):
Carles Cufi3ad1f272019-07-18 10:38:25 +020066 with open(args.out_file, 'r', encoding="utf-8") as fp:
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020067 existing = fp.read()
68
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020069 if new != existing:
Carles Cufi3ad1f272019-07-18 10:38:25 +020070 with open(args.out_file, 'w', encoding="utf-8") as fp:
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020071 fp.write(new)
72 else:
Carles Cufi3ad1f272019-07-18 10:38:25 +020073 with open(args.out_file, 'w', encoding="utf-8") as fp:
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020074 fp.write(new)
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020075
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020076 # Always touch trigger file to ensure json files are updated
77 touch(args.trigger_file)
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020078
79if __name__ == "__main__":
80 main()