-
Notifications
You must be signed in to change notification settings - Fork 382
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a script to generate valid Qt mappings file
- Loading branch information
Showing
1 changed file
with
59 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
#!/usr/bin/env python | ||
|
||
""" | ||
This script generates the Qt mapping file according to given Qt include | ||
directory | ||
Example usage : | ||
$ ./generate_qt_mappings.py /usr/include/x86_64-linux-gnu/qt5 qt5_11.imp | ||
""" | ||
|
||
from __future__ import print_function | ||
import argparse | ||
import glob | ||
import os | ||
import re | ||
import sys | ||
|
||
|
||
def main(qt_include_dir, output_file): | ||
symbols_map = [] | ||
includes_map = [] | ||
|
||
headers = glob.glob(os.path.join(args.qt_include_dir, '**/*[!.h]')) | ||
for header in headers: | ||
if os.path.isdir(header): | ||
continue | ||
|
||
class_name = os.path.basename(header) | ||
module_name = os.path.basename(os.path.dirname(header)) | ||
|
||
symbols_map += ['{ symbol: [ "%s", "private", ' % class_name | ||
+ '"<%s>", "public" ] }' % class_name] | ||
|
||
with open(header, 'r') as f: | ||
content = f.read() | ||
|
||
includes = re.findall(r'#include "(.*)\.h"', content) | ||
for include in includes: | ||
includes_map += [ | ||
'{ include: [ "@[\\"<](%s/)?%s\\\\.h[\\">]", ' % ( | ||
module_name, include) | ||
+ '"private", "<%s>", "public" ] }' % class_name] | ||
|
||
with open(args.output_file, 'w') as f: | ||
print("# Do not edit! This file was generated by the script %s." % | ||
os.path.basename(__file__), file=f) | ||
print("[", file=f) | ||
print(" %s" % ",\n ".join(symbols_map + includes_map), file=f) | ||
print("]", file=f) | ||
|
||
|
||
if __name__ == "__main__": | ||
parser = argparse.ArgumentParser() | ||
parser.add_argument("qt_include_dir", help="Qt include directoy") | ||
parser.add_argument("output_file", help="Generated output mapping file") | ||
args = parser.parse_args() | ||
sys.exit(main(args.qt_include_dir, args.output_file)) |