1111
1212def printHelp ():
1313 print ("""Usage:
14- GenerateFlowModel.py <library-database> "simpleName"
14+ GenerateFlowModel.py <library-database> "simpleName" [--with-sinks] [--with-sources] [--with-summaries]
1515
1616This generates summary, source and sink models for the code in the database.
1717The files will be placed in `java/ql/lib/semmle/code/java/frameworks/generated/<simpleName>/`
1818
1919A simple name is used for the generated target files (e.g. `simpleName.qll`).
20+ Which models are generated is controlled by the flags:
21+ --with-sinks
22+ --with-sources
23+ --with-summaries
24+ If none of these flags are specified, all models are generated.
2025
2126Requirements: `codeql` should both appear on your path.
2227""" )
@@ -26,10 +31,23 @@ def printHelp():
2631 printHelp ()
2732 sys .exit (0 )
2833
29- withTests = False
30- if "--with-tests" in sys .argv :
31- sys .argv .remove ("--with-tests" )
32- withTests = True
34+ generateSinks = False
35+ generateSources = False
36+ generateSummaries = False
37+ if "--with-sinks" in sys .argv :
38+ sys .argv .remove ("--with-sinks" )
39+ generateSinks = True
40+
41+ if "--with-sources" in sys .argv :
42+ sys .argv .remove ("--with-sources" )
43+ generateSources = True
44+
45+ if "--with-summaries" in sys .argv :
46+ sys .argv .remove ("--with-summaries" )
47+ generateSummaries = True
48+
49+ if not generateSinks and not generateSources and not generateSummaries :
50+ generateSinks = generateSources = generateSummaries = True
3351
3452if len (sys .argv ) != 3 :
3553 printHelp ()
@@ -104,14 +122,23 @@ def asCsvModel(superclass, kind, rows):
104122 return classTemplate .format (shortname [0 ].upper () + shortname [1 :], kind .capitalize (), superclass , rows )
105123
106124
107- summaryRows = runQuery ("summary models" , "CaptureSummaryModels.ql" )
108- summaryCsv = asCsvModel ("SummaryModelCsv" , "summary" , summaryRows )
125+ if generateSummaries :
126+ summaryRows = runQuery ("summary models" , "CaptureSummaryModels.ql" )
127+ summaryCsv = asCsvModel ("SummaryModelCsv" , "summary" , summaryRows )
128+ else :
129+ summaryCsv = ""
109130
110- sinkRows = runQuery ("sink models" , "CaptureSinkModels.ql" )
111- sinkCsv = asCsvModel ("SinkModelCsv" , "sinks" , sinkRows )
131+ if generateSinks :
132+ sinkRows = runQuery ("sink models" , "CaptureSinkModels.ql" )
133+ sinkCsv = asCsvModel ("SinkModelCsv" , "sinks" , sinkRows )
134+ else :
135+ sinkCsv = ""
112136
113- sourceRows = runQuery ("source models" , "CaptureSourceModels.ql" )
114- sourceCsv = asCsvModel ("SourceModelCsv" , "sources" , sourceRows )
137+ if generateSources :
138+ sourceRows = runQuery ("source models" , "CaptureSourceModels.ql" )
139+ sourceCsv = asCsvModel ("SourceModelCsv" , "sources" , sourceRows )
140+ else :
141+ sourceCsv = ""
115142
116143qllTemplate = """
117144/** Definitions of taint steps in the {0} framework */
0 commit comments