blob: 7e76e86db2e54cbb87df2588c4c3d54295a2c5c6 [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
Torsten Rasmussen2cf53b62020-04-22 08:06:07 +02007
Torsten Rasmussenf38e3882018-06-07 15:50:31 +02008def touch(trigger):
9 # If no trigger file is provided then do a return.
Ulf Magnussonba312fe2019-03-20 19:30:29 +010010 if trigger is None:
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020011 return
12
13 if os.path.exists(trigger):
14 os.utime(trigger, None)
15 else:
16 with open(trigger, 'w') as fp:
17 fp.write("")
18
19
20def main():
21 parser = argparse.ArgumentParser(
Torsten Rasmussen2cf53b62020-04-22 08:06:07 +020022 description='This script will walk the specified directory and write \
23 the file specified with the list of all sub-directories \
24 found. If to the output file already exists, the file \
25 will only be updated in case sub-directories has been \
26 added or removed since previous invocation.')
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020027
28 parser.add_argument('-d', '--directory', required=True,
29 help='Directory to walk for sub-directory discovery')
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020030 parser.add_argument('-c', '--create-links', required=False,
Torsten Rasmussen2cf53b62020-04-22 08:06:07 +020031 help='Create links for each directory found in \
32 directory given')
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020033 parser.add_argument('-o', '--out-file', required=True,
Torsten Rasmussen2cf53b62020-04-22 08:06:07 +020034 help='File to write containing a list of all \
35 directories found')
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020036 parser.add_argument('-t', '--trigger-file', required=False,
37 help='Trigger file to be be touched to re-run CMake')
38
39 args = parser.parse_args()
40
41 dirlist = []
Ulf Magnussonba312fe2019-03-20 19:30:29 +010042 if args.create_links is not None:
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020043 if not os.path.exists(args.create_links):
44 os.makedirs(args.create_links)
45 directory = args.directory
Torsten Rasmussen2cf53b62020-04-22 08:06:07 +020046 symbase = os.path.basename(directory)
47 symlink = args.create_links + os.path.sep + symbase
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020048 if not os.path.exists(symlink):
49 os.symlink(directory, symlink)
50 dirlist.extend(symlink)
51 else:
52 dirlist.extend(args.directory)
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020053 dirlist.extend(os.linesep)
Marc Herbertd5b28342019-02-15 18:56:57 -080054 for root, dirs, _ in os.walk(args.directory, topdown=True):
55 dirs.sort()
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020056 for subdir in dirs:
Ulf Magnussonba312fe2019-03-20 19:30:29 +010057 if args.create_links is not None:
Torsten Rasmussen2cf53b62020-04-22 08:06:07 +020058 targetdirectory = os.path.join(root, subdir)
59 reldir = os.path.relpath(targetdirectory, directory)
60 linkname = symbase + '_' + reldir.replace(os.path.sep, '_')
61 symlink = args.create_links + os.path.sep + linkname
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020062 if not os.path.exists(symlink):
Torsten Rasmussen2cf53b62020-04-22 08:06:07 +020063 os.symlink(targetdirectory, symlink)
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020064 dirlist.extend(symlink)
65 else:
66 dirlist.extend(os.path.join(root, subdir))
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020067 dirlist.extend(os.linesep)
68
Torsten Rasmussen2cf53b62020-04-22 08:06:07 +020069 new = ''.join(dirlist)
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020070 existing = ''
71
72 if os.path.exists(args.out_file):
Carles Cufi3ad1f272019-07-18 10:38:25 +020073 with open(args.out_file, 'r', encoding="utf-8") as fp:
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020074 existing = fp.read()
75
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020076 if new != existing:
Carles Cufi3ad1f272019-07-18 10:38:25 +020077 with open(args.out_file, 'w', encoding="utf-8") as fp:
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020078 fp.write(new)
79 else:
Carles Cufi3ad1f272019-07-18 10:38:25 +020080 with open(args.out_file, 'w', encoding="utf-8") as fp:
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020081 fp.write(new)
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020082
Torsten Rasmussen080e32e2018-06-14 22:27:17 +020083 # Always touch trigger file to ensure json files are updated
84 touch(args.trigger_file)
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020085
Torsten Rasmussen2cf53b62020-04-22 08:06:07 +020086
Torsten Rasmussenf38e3882018-06-07 15:50:31 +020087if __name__ == "__main__":
88 main()