| ''' | |
| Helper script for creating a header file that includes all of Thrust's | |
| public headers. This is useful for instance, to quickly check that | |
| all the thrust headers obey proper syntax or are warning free. | |
| This script simply outputs a list of C-style #include's to the standard | |
| output--this should be redirected to a header file by the caller. | |
| ''' | |
| import sys | |
| import os | |
| import re | |
| from stat import * | |
| thrustdir = sys.argv[1] | |
| def find_headers(base_dir, rel_dir, exclude = ['\B']): | |
| ''' | |
| Recursively find all *.h files inside base_dir/rel_dir, | |
| except any that match the exclude regexp list | |
| ''' | |
| assert(type(exclude) == list) | |
| full_dir = base_dir + '/' + rel_dir | |
| result = [] | |
| for f in os.listdir(full_dir): | |
| rel_file = rel_dir + '/' + f | |
| for e in exclude: | |
| if re.match(e, rel_file): | |
| break | |
| else: | |
| if f.endswith('.h'): | |
| result.append(rel_file) | |
| elif S_ISDIR(os.stat(full_dir + '/' + f).st_mode): | |
| result.extend(find_headers(base_dir, rel_file, exclude)) | |
| return result | |
| print('/* File is generated by ' + sys.argv[0] + ' */') | |
| exclude_re = ['.*/detail$', | |
| 'thrust/iterator', | |
| 'thrust/random', | |
| 'thrust/system/tbb'] | |
| headers = find_headers(thrustdir, 'thrust', exclude_re) | |
| if len(headers) == 0: | |
| print('#error no include files found\n') | |
| print('#define THRUST_CPP11_REQUIRED_NO_ERROR') | |
| print('#define THRUST_CPP14_REQUIRED_NO_ERROR') | |
| print('#define THRUST_MODERN_GCC_REQUIRED_NO_ERROR') | |
| for h in headers: | |
| print('#include <' + h + '>') | |
| exit() | |