88import sys
99import tempfile
1010
11+ language = "java"
1112
1213def printHelp ():
13- print ("""Usage:
14+ print (f """Usage:
1415python3 GenerateFlowModel.py <library-database> <outputQll> [--with-sinks] [--with-sources] [--with-summaries] [--dry-run]
1516
1617This generates summary, source and sink models for the code in the database.
17- The files will be placed in `java /ql/lib/semmle/code/java /frameworks/<outputQll>` where
18+ The files will be placed in `{ language } /ql/lib/semmle/code/{ language } /frameworks/<outputQll>` where
1819outputQll is the name (and path) of the output QLL file. Usually, models are grouped by their
1920respective frameworks.
2021
@@ -27,8 +28,8 @@ def printHelp():
2728 --dry-run: Only run the queries, but don't write to file.
2829
2930Example invocations:
30- $ python3 GenerateFlowModel.py /tmp/dbs/apache_commons-codec_45649c8 "apache/Codec .qll"
31- $ python3 GenerateFlowModel.py /tmp/dbs/jdk15_db "javase/jdk_sinks .qll" --with-sinks
31+ $ python3 GenerateFlowModel.py /tmp/dbs/my_library_db "mylibrary/Framework .qll"
32+ $ python3 GenerateFlowModel.py /tmp/dbs/my_library_db "mylibrary/FrameworkSinks .qll" --with-sinks
3233
3334Requirements: `codeql` should both appear on your path.
3435""" )
@@ -74,7 +75,7 @@ def printHelp():
7475filename = os .path .basename (targetQll )
7576shortname = filename [:- 4 ]
7677generatedFrameworks = os .path .join (
77- codeQlRoot , "java /ql/lib/semmle/code/java /frameworks/" )
78+ codeQlRoot , f" { language } /ql/lib/semmle/code/{ language } /frameworks/" )
7879frameworkTarget = os .path .join (generatedFrameworks , targetQll )
7980
8081workDir = tempfile .mkdtemp ()
@@ -157,22 +158,18 @@ def asCsvModel(superclass, kind, rows):
157158else :
158159 sourceCsv = ""
159160
160- qllTemplate = """
161- /** Definitions of taint steps in the {0 } framework */
161+ qllContents = f """
162+ /** Definitions of taint steps in the { shortname } framework */
162163
163- import java
164- private import semmle.code.java .dataflow.ExternalFlow
164+ import { language }
165+ private import semmle.code.{ language } .dataflow.ExternalFlow
165166
166- {1 }
167- {2 }
168- {3 }
167+ { sinkCsv }
168+ { sourceCsv }
169+ { summaryCsv }
169170
170171"""
171172
172-
173- qllContents = qllTemplate .format (shortname , sinkCsv , sourceCsv , summaryCsv )
174-
175-
176173if dryRun :
177174 print ("CSV Models generated, but not written to file." )
178175 sys .exit (0 )
0 commit comments