1
1
#!/usr/bin/python3
2
2
3
3
import helpers
4
- import json
5
4
import os
6
5
import os .path
7
- import shlex
8
6
import subprocess
9
7
import sys
10
8
import tempfile
@@ -27,24 +25,13 @@ def parseData(data):
27
25
28
26
return rows
29
27
30
- class Generator :
31
- def __init__ (self , language ):
32
- self .language = language
33
- self .generateSinks = False
34
- self .generateSources = False
35
- self .generateSummaries = False
36
- self .generateNeutrals = False
37
- self .generateTypeBasedSummaries = False
38
- self .dryRun = False
39
- self .dirname = "modelgenerator"
40
-
41
28
42
- def printHelp (self ):
43
- print (f"""Usage:
44
- python3 GenerateFlowModel .py <library-database> [DIR] [--with-sinks] [--with-sources] [--with-summaries] [--with-neutrals] [--with-typebased-summaries] [--dry-run]
29
+ def printHelp ():
30
+ print (f"""Usage:
31
+ python3 generate_mad .py <library-database> [DIR] --language LANGUAGE [--with-sinks] [--with-sources] [--with-summaries] [--with-neutrals] [--with-typebased-summaries] [--dry-run]
45
32
46
33
This generates summary, source, sink and neutral models for the code in the database.
47
- The files will be placed in `{ self . language } /ql/lib/ext/generated/DIR`
34
+ The files will be placed in `LANGUAGE /ql/lib/ext/generated/DIR`
48
35
49
36
Which models are generated is controlled by the flags:
50
37
--with-sinks
@@ -57,14 +44,25 @@ def printHelp(self):
57
44
--dry-run: Only run the queries, but don't write to file.
58
45
59
46
Example invocations:
60
- $ python3 GenerateFlowModel .py /tmp/dbs/my_library_db
61
- $ python3 GenerateFlowModel .py /tmp/dbs/my_library_db --with-sinks
62
- $ python3 GenerateFlowModel .py /tmp/dbs/my_library_db --with-sinks my_directory
47
+ $ python3 generate_mad .py /tmp/dbs/my_library_db
48
+ $ python3 generate_mad .py /tmp/dbs/my_library_db --with-sinks
49
+ $ python3 generate_mad .py /tmp/dbs/my_library_db --with-sinks my_directory
63
50
64
51
65
52
Requirements: `codeql` should appear on your path.
66
53
""" )
67
54
55
+ class Generator :
56
+ def __init__ (self , language ):
57
+ self .language = language
58
+ self .generateSinks = False
59
+ self .generateSources = False
60
+ self .generateSummaries = False
61
+ self .generateNeutrals = False
62
+ self .generateTypeBasedSummaries = False
63
+ self .dryRun = False
64
+ self .dirname = "modelgenerator"
65
+
68
66
69
67
def setenvironment (self , database , folder ):
70
68
self .codeQlRoot = subprocess .check_output (["git" , "rev-parse" , "--show-toplevel" ]).decode ("utf-8" ).strip ()
@@ -76,12 +74,22 @@ def setenvironment(self, database, folder):
76
74
77
75
78
76
@staticmethod
79
- def make (language ):
80
- generator = Generator ( language )
77
+ def make ():
78
+ # Create a generator instance based on command line arguments.
81
79
if any (s == "--help" for s in sys .argv ):
82
- generator .printHelp ()
80
+ printHelp ()
81
+ sys .exit (0 )
82
+
83
+ if "--language" in sys .argv :
84
+ language = sys .argv [sys .argv .index ("--language" ) + 1 ]
85
+ sys .argv .remove ("--language" )
86
+ sys .argv .remove (language )
87
+ else :
88
+ printHelp ()
83
89
sys .exit (0 )
84
90
91
+ generator = Generator (language = language )
92
+
85
93
if "--with-sinks" in sys .argv :
86
94
sys .argv .remove ("--with-sinks" )
87
95
generator .generateSinks = True
@@ -115,7 +123,7 @@ def make(language):
115
123
116
124
n = len (sys .argv )
117
125
if n < 2 :
118
- generator . printHelp ()
126
+ printHelp ()
119
127
sys .exit (1 )
120
128
elif n == 2 :
121
129
generator .setenvironment (sys .argv [1 ], "" )
@@ -204,3 +212,6 @@ def run(self):
204
212
205
213
if self .generateTypeBasedSummaries :
206
214
self .save (typeBasedContent , ".typebased.model.yml" )
215
+
216
+ if __name__ == '__main__' :
217
+ Generator .make ().run ()
0 commit comments