11#!/usr/bin/python3
22
33import helpers
4- import json
54import os
65import os .path
7- import shlex
86import subprocess
97import sys
108import tempfile
@@ -27,24 +25,13 @@ def parseData(data):
2725
2826 return rows
2927
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-
4128
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]
4532
4633This 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`
4835
4936Which models are generated is controlled by the flags:
5037 --with-sinks
@@ -57,14 +44,25 @@ def printHelp(self):
5744 --dry-run: Only run the queries, but don't write to file.
5845
5946Example 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
6350
6451
6552Requirements: `codeql` should appear on your path.
6653 """ )
6754
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+
6866
6967 def setenvironment (self , database , folder ):
7068 self .codeQlRoot = subprocess .check_output (["git" , "rev-parse" , "--show-toplevel" ]).decode ("utf-8" ).strip ()
@@ -76,12 +74,22 @@ def setenvironment(self, database, folder):
7674
7775
7876 @staticmethod
79- def make (language ):
80- generator = Generator ( language )
77+ def make ():
78+ # Create a generator instance based on command line arguments.
8179 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 ()
8389 sys .exit (0 )
8490
91+ generator = Generator (language = language )
92+
8593 if "--with-sinks" in sys .argv :
8694 sys .argv .remove ("--with-sinks" )
8795 generator .generateSinks = True
@@ -115,7 +123,7 @@ def make(language):
115123
116124 n = len (sys .argv )
117125 if n < 2 :
118- generator . printHelp ()
126+ printHelp ()
119127 sys .exit (1 )
120128 elif n == 2 :
121129 generator .setenvironment (sys .argv [1 ], "" )
@@ -204,3 +212,6 @@ def run(self):
204212
205213 if self .generateTypeBasedSummaries :
206214 self .save (typeBasedContent , ".typebased.model.yml" )
215+
216+ if __name__ == '__main__' :
217+ Generator .make ().run ()
0 commit comments