Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
Anas Nashif | 3ae5262 | 2019-04-06 09:08:09 -0400 | [diff] [blame] | 2 | # SPDX-License-Identifier: Apache-2.0 |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 3 | |
| 4 | import os |
| 5 | import argparse |
| 6 | |
Torsten Rasmussen | 2cf53b6 | 2020-04-22 08:06:07 +0200 | [diff] [blame^] | 7 | |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 8 | def touch(trigger): |
| 9 | # If no trigger file is provided then do a return. |
Ulf Magnusson | ba312fe | 2019-03-20 19:30:29 +0100 | [diff] [blame] | 10 | if trigger is None: |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 11 | 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 | |
| 20 | def main(): |
| 21 | parser = argparse.ArgumentParser( |
Torsten Rasmussen | 2cf53b6 | 2020-04-22 08:06:07 +0200 | [diff] [blame^] | 22 | 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 Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 27 | |
| 28 | parser.add_argument('-d', '--directory', required=True, |
| 29 | help='Directory to walk for sub-directory discovery') |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 30 | parser.add_argument('-c', '--create-links', required=False, |
Torsten Rasmussen | 2cf53b6 | 2020-04-22 08:06:07 +0200 | [diff] [blame^] | 31 | help='Create links for each directory found in \ |
| 32 | directory given') |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 33 | parser.add_argument('-o', '--out-file', required=True, |
Torsten Rasmussen | 2cf53b6 | 2020-04-22 08:06:07 +0200 | [diff] [blame^] | 34 | help='File to write containing a list of all \ |
| 35 | directories found') |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 36 | 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 Magnusson | ba312fe | 2019-03-20 19:30:29 +0100 | [diff] [blame] | 42 | if args.create_links is not None: |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 43 | if not os.path.exists(args.create_links): |
| 44 | os.makedirs(args.create_links) |
| 45 | directory = args.directory |
Torsten Rasmussen | 2cf53b6 | 2020-04-22 08:06:07 +0200 | [diff] [blame^] | 46 | symbase = os.path.basename(directory) |
| 47 | symlink = args.create_links + os.path.sep + symbase |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 48 | if not os.path.exists(symlink): |
| 49 | os.symlink(directory, symlink) |
| 50 | dirlist.extend(symlink) |
| 51 | else: |
| 52 | dirlist.extend(args.directory) |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 53 | dirlist.extend(os.linesep) |
Marc Herbert | d5b2834 | 2019-02-15 18:56:57 -0800 | [diff] [blame] | 54 | for root, dirs, _ in os.walk(args.directory, topdown=True): |
| 55 | dirs.sort() |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 56 | for subdir in dirs: |
Ulf Magnusson | ba312fe | 2019-03-20 19:30:29 +0100 | [diff] [blame] | 57 | if args.create_links is not None: |
Torsten Rasmussen | 2cf53b6 | 2020-04-22 08:06:07 +0200 | [diff] [blame^] | 58 | 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 Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 62 | if not os.path.exists(symlink): |
Torsten Rasmussen | 2cf53b6 | 2020-04-22 08:06:07 +0200 | [diff] [blame^] | 63 | os.symlink(targetdirectory, symlink) |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 64 | dirlist.extend(symlink) |
| 65 | else: |
| 66 | dirlist.extend(os.path.join(root, subdir)) |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 67 | dirlist.extend(os.linesep) |
| 68 | |
Torsten Rasmussen | 2cf53b6 | 2020-04-22 08:06:07 +0200 | [diff] [blame^] | 69 | new = ''.join(dirlist) |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 70 | existing = '' |
| 71 | |
| 72 | if os.path.exists(args.out_file): |
Carles Cufi | 3ad1f27 | 2019-07-18 10:38:25 +0200 | [diff] [blame] | 73 | with open(args.out_file, 'r', encoding="utf-8") as fp: |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 74 | existing = fp.read() |
| 75 | |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 76 | if new != existing: |
Carles Cufi | 3ad1f27 | 2019-07-18 10:38:25 +0200 | [diff] [blame] | 77 | with open(args.out_file, 'w', encoding="utf-8") as fp: |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 78 | fp.write(new) |
| 79 | else: |
Carles Cufi | 3ad1f27 | 2019-07-18 10:38:25 +0200 | [diff] [blame] | 80 | with open(args.out_file, 'w', encoding="utf-8") as fp: |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 81 | fp.write(new) |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 82 | |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 83 | # Always touch trigger file to ensure json files are updated |
| 84 | touch(args.trigger_file) |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 85 | |
Torsten Rasmussen | 2cf53b6 | 2020-04-22 08:06:07 +0200 | [diff] [blame^] | 86 | |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 87 | if __name__ == "__main__": |
| 88 | main() |