antlr/bild.py

143 lines
5.2 KiB
Python
Raw Normal View History

2014-07-05 09:39:12 +08:00
#!/usr/bin/env python
2014-07-02 09:18:17 +08:00
import sys
import os
2014-07-06 10:13:05 +08:00
import string
2014-07-02 09:18:17 +08:00
2014-07-10 03:00:36 +08:00
# bootstrap by downloading bilder.py if not found
import urllib
if not os.path.exists("bilder.py"):
print "bootstrapping; downloading bilder.py"
urllib.urlretrieve(
"https://raw.githubusercontent.com/parrt/bild/master/src/python/bilder.py",
"bilder.py")
# assumes bilder.py is in current directory
2014-07-02 09:18:17 +08:00
from bilder import *
2014-07-02 12:33:26 +08:00
VERSION = "4.4"
2014-07-06 10:13:05 +08:00
JAVA_TARGET = "."
PYTHON2_TARGET = "../antlr4-python2"
PYTHON3_TARGET = "../antlr4-python3"
CSHARP_TARGET = "../antlr4cs"
2014-07-06 10:13:05 +08:00
# Properties needed to run Python[23] tests
test_properties = {
"antlr-python2-python":"/usr/local/Cellar/python/2.7.5/bin/python2.7",
"antlr-python2-runtime":uniformpath(PYTHON2_TARGET)+"/src",
"antlr-python3-python":"/usr/local/Cellar/python3/3.4.1/bin/python3",
"antlr-python3-runtime":uniformpath(PYTHON3_TARGET)+"/src",
}
TARGETS = {"Java":uniformpath(JAVA_TARGET),
"Python2":uniformpath(PYTHON2_TARGET),
"Python3":uniformpath(PYTHON3_TARGET),
"CSharp":uniformpath(CSHARP_TARGET)}
2014-07-02 09:18:17 +08:00
def parsers():
antlr3("tool/src/org/antlr/v4/parse", "gen", package="org.antlr.v4.parse")
antlr3("tool/src/org/antlr/v4/codegen", "gen", package="org.antlr.v4.codegen", args=["-lib","tool/src/org/antlr/v4/parse"])
antlr4("runtime/Java/src/org/antlr/v4/runtime/tree/xpath", "gen", package="org.antlr.v4.runtime.tree.xpath")
2014-07-02 09:18:17 +08:00
def compile():
require(parsers)
cp = uniformpath("out")+os.pathsep+ \
os.path.join(JARCACHE,"antlr-3.5.1-complete.jar")+os.pathsep+ \
"runtime/Java/lib/org.abego.treelayout.core.jar"
args = ["-Xlint", "-Xlint:-serial", "-g"]
javac("runtime/JavaAnnotations/src/", "out", version="1.6", cp=cp, args=args)
javac("runtime/Java/src", "out", version="1.6", cp=cp, args=args)
javac("tool/src", "out", version="1.6", cp=cp, args=args)
javac("gen", "out", version="1.6", cp=cp, args=args)
# pull in targets
for t in TARGETS:
2014-07-04 02:58:57 +08:00
javac(TARGETS[t]+"/tool/src", "out", version="1.6", cp=cp, args=args)
2014-07-02 09:18:17 +08:00
def mkjar():
require(compile)
2014-07-06 23:46:47 +08:00
copytree(src="tool/resources", dst="out") # messages, Java code gen, etc...
manifest = \
"""Main-Class: org.antlr.v4.Tool
Implementation-Vendor: ANTLR
Implementation-Title: ANTLR 4 Tool
Implementation-Version: %s
Built-By: %s
Build-Jdk: 1.6
Created-By: http://www.bildtool.org
""" % (VERSION,os.getlogin())
# unjar required libraries
unjar("runtime/Java/lib/org.abego.treelayout.core.jar", trgdir="out")
unjar(os.path.join(JARCACHE,"antlr-3.5.1-complete.jar"), trgdir="out")
# pull in target templates
for t in TARGETS:
2014-07-06 23:46:47 +08:00
trgdir = "out/org/antlr/v4/tool/templates/codegen/"+t
mkdir(trgdir)
copyfile(TARGETS[t]+"/tool/resources/org/antlr/v4/tool/templates/codegen/"+t+"/"+t+".stg",
2014-07-06 23:46:47 +08:00
trgdir)
jar("dist/antlr-"+VERSION+"-complete.jar", srcdir="out", manifest=manifest)
2014-07-02 09:18:17 +08:00
mkruntimejar()
def mkruntimejar():
# out/... dir is full of tool-related stuff, make special dir out/runtime
cp = uniformpath("out/runtime")+os.pathsep+ \
"runtime/Java/lib/org.abego.treelayout.core.jar"
args = ["-Xlint", "-Xlint:-serial", "-g"]
javac("runtime/JavaAnnotations/src/", "out/runtime", version="1.6", cp=cp, args=args)
javac("runtime/Java/src", "out/runtime", version="1.6", cp=cp, args=args)
manifest = \
"""Implementation-Vendor: ANTLR
Implementation-Title: ANTLR 4 Runtime
Implementation-Version: %s
Built-By: %s
Build-Jdk: 1.6
Created-By: http://www.bildtool.org
""" % (VERSION,os.getlogin())
# unjar required library
unjar("runtime/Java/lib/org.abego.treelayout.core.jar", trgdir="out/runtime")
jar("dist/antlr-runtime-"+VERSION+".jar", srcdir="out/runtime", manifest=manifest)
2014-07-05 09:39:12 +08:00
def tests():
2014-07-06 10:13:05 +08:00
require(mkjar)
2014-07-05 09:39:12 +08:00
junit_jar, hamcrest_jar = load_junitjars()
2014-07-06 10:15:36 +08:00
cp = uniformpath("dist/antlr-"+VERSION+"-complete.jar")+os.pathsep+ \
2014-07-06 10:13:05 +08:00
uniformpath("out/test/Java")+os.pathsep+ \
string.join([uniformpath(TARGETS[t]+"/tool/test") for t in TARGETS],os.pathsep)+os.pathsep+ \
junit_jar+os.pathsep+hamcrest_jar
properties = ["-D%s=%s" % (p, test_properties[p]) for p in test_properties]
2014-07-05 09:39:12 +08:00
args = ["-Xlint", "-Xlint:-serial", "-g"]
2014-07-06 10:13:05 +08:00
javac("tool/test", "out/test/Java", version="1.6", cp=cp, args=args) # all targets can use org.antlr.v4.test.*
for t in TARGETS:
print "Test %7s --------------" % t
javac(TARGETS[t]+"/tool/test", "out/test/"+t, version="1.6", cp=cp, args=args)
junit("out/test/"+t, cp=cp, verbose=False, args=properties)
2014-07-05 09:39:12 +08:00
2014-07-02 09:18:17 +08:00
def all():
mkjar()
2014-07-05 09:39:12 +08:00
tests()
mkdoc()
2014-07-02 09:18:17 +08:00
def clean():
rmdir("out")
rmdir("gen")
rmdir("doc")
2014-07-03 09:31:38 +08:00
def mkdoc():
mkdir("doc/Java")
mkdir("doc/JavaTool")
javadoc(srcdir="runtime/Java/src", trgdir="doc/Java", packages="org.antlr.v4.runtime")
2014-07-06 10:13:05 +08:00
toolsrc = [TARGETS[t]+"/tool/src" for t in TARGETS]
2014-07-04 02:58:57 +08:00
toolsrc = string.join(toolsrc, ":")
javadoc(srcdir=toolsrc, trgdir="doc/JavaTool", packages="org.antlr.v4")
# build stack merge PredictionContext and ATNState images from DOT
# DOT Images are in runtime/Java/src/main/dot/org/antlr/v4/runtime/atn/images/
# Gen into E.g., doc/Java/org/antlr/v4/runtime/atn/images/SingletonMerge_DiffRootSamePar.svg
mkdir("doc/Java/org/antlr/v4/runtime/atn/images")
for f in glob.glob("runtime/Java/src/main/dot/org/antlr/v4/runtime/atn/images/*.dot"):
dot(f, "doc/Java/org/antlr/v4/runtime/atn/images", format="svg")
zip("doc/antlr4-runtime.zip", "doc/Java")
zip("doc/antlr4-tool.zip", "doc/JavaTool")
processargs(globals()) # E.g., "python bild.py all"